@flighthq/storage 0.5.1-next.1069.554a2ac → 0.5.1-next.1197.6a425ce
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 +2 -2
- package/dist/storage.d.ts +34 -34
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +69 -69
- package/dist/storage.js.map +1 -1
- package/dist/storagePersistence.d.ts +3 -3
- package/dist/storagePersistence.d.ts.map +1 -1
- package/dist/storagePersistence.js +4 -4
- package/dist/storagePersistence.js.map +1 -1
- package/package.json +4 -4
- package/src/storage.test.ts +99 -80
- package/src/storagePersistence.test.ts +16 -14
package/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/storage`. The `@flig
|
|
|
13
13
|
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
14
|
|
|
15
15
|
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
-
- [Source for @flighthq/storage@0.5.1-next.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/storage@0.5.1-next.1197.6a425ce](https://github.com/flighthq/flight/tree/6a425ce64e6d501dac8218fe625e73d58da88639/packages/storage)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/6a425ce64e6d501dac8218fe625e73d58da88639/LICENSE.md)
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import type { EntityConstruction,
|
|
2
|
-
export declare function attachStorage(
|
|
3
|
-
export declare function clearStorage(
|
|
4
|
-
export declare function clearStorageNamespace(
|
|
1
|
+
import type { EntityConstruction, HostStorageChangeProvider, HostStorageProvider, StorageBooleanOrResult, StorageBooleanResult, StorageByteSizeResult, StorageClearNamespaceResult, StorageClearResult, StorageEntriesResult, StorageGetItemResult, StorageItemCountResult, StorageItemOrResult, StorageItemsResult, StorageJsonOrResult, StorageJsonResult, StorageJsonWriteResult, StorageKeysResult, StorageMigration, StorageMigrationResult, StorageNamespace, StorageNumberOrResult, StorageNumberResult, StoragePresenceResult, StorageRemoveItemResult, StorageRemoveItemsResult, StorageSetItemResult, StorageSetItemsResult, StorageSignals } from '@flighthq/types/contract';
|
|
2
|
+
export declare function attachStorage(hostStorageChange: Readonly<HostStorageChangeProvider>, signals: StorageSignals): boolean;
|
|
3
|
+
export declare function clearStorage(hostStorage: Readonly<HostStorageProvider>, signals?: StorageSignals | null): StorageClearResult;
|
|
4
|
+
export declare function clearStorageNamespace(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>, signals?: StorageSignals | null): StorageClearNamespaceResult;
|
|
5
5
|
export declare function createStorageSignals(): StorageSignals;
|
|
6
|
-
export declare function destroyStorage(
|
|
6
|
+
export declare function destroyStorage(hostStorageChange: Readonly<HostStorageChangeProvider>): void;
|
|
7
7
|
export declare function detachStorage(signals: StorageSignals): void;
|
|
8
8
|
export declare function disposeStorage(signals: StorageSignals): void;
|
|
9
|
-
export declare function getNamespacedStorageByteSize(
|
|
10
|
-
export declare function getNamespacedStorageEntries(
|
|
11
|
-
export declare function getNamespacedStorageItem(
|
|
12
|
-
export declare function getNamespacedStorageItemPresence(
|
|
13
|
-
export declare function getNamespacedStorageKeys(
|
|
14
|
-
export declare function getStorageBoolean(
|
|
15
|
-
export declare function getStorageBooleanOr(
|
|
16
|
-
export declare function getStorageByteSize(
|
|
17
|
-
export declare function getStorageEntries(
|
|
18
|
-
export declare function getStorageItem(
|
|
19
|
-
export declare function getStorageItemCount(
|
|
20
|
-
export declare function getStorageItemOr(
|
|
21
|
-
export declare function getStorageItemPresence(
|
|
22
|
-
export declare function getStorageItems(
|
|
23
|
-
export declare function getStorageJSON<Value>(
|
|
24
|
-
export declare function getStorageJSONOr<Value>(
|
|
25
|
-
export declare function getStorageKeys(
|
|
26
|
-
export declare function getStorageNumber(
|
|
27
|
-
export declare function getStorageNumberOr(
|
|
9
|
+
export declare function getNamespacedStorageByteSize(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>): StorageByteSizeResult;
|
|
10
|
+
export declare function getNamespacedStorageEntries(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>): StorageEntriesResult;
|
|
11
|
+
export declare function getNamespacedStorageItem(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>, key: string): StorageGetItemResult;
|
|
12
|
+
export declare function getNamespacedStorageItemPresence(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>, key: string): StoragePresenceResult;
|
|
13
|
+
export declare function getNamespacedStorageKeys(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>): StorageKeysResult;
|
|
14
|
+
export declare function getStorageBoolean(hostStorage: Readonly<HostStorageProvider>, key: string): StorageBooleanResult;
|
|
15
|
+
export declare function getStorageBooleanOr(hostStorage: Readonly<HostStorageProvider>, key: string, fallback: boolean): StorageBooleanOrResult;
|
|
16
|
+
export declare function getStorageByteSize(hostStorage: Readonly<HostStorageProvider>): StorageByteSizeResult;
|
|
17
|
+
export declare function getStorageEntries(hostStorage: Readonly<HostStorageProvider>): StorageEntriesResult;
|
|
18
|
+
export declare function getStorageItem(hostStorage: Readonly<HostStorageProvider>, key: string): StorageGetItemResult;
|
|
19
|
+
export declare function getStorageItemCount(hostStorage: Readonly<HostStorageProvider>): StorageItemCountResult;
|
|
20
|
+
export declare function getStorageItemOr(hostStorage: Readonly<HostStorageProvider>, key: string, fallback: string): StorageItemOrResult;
|
|
21
|
+
export declare function getStorageItemPresence(hostStorage: Readonly<HostStorageProvider>, key: string): StoragePresenceResult;
|
|
22
|
+
export declare function getStorageItems(hostStorage: Readonly<HostStorageProvider>, keys: readonly string[]): StorageItemsResult;
|
|
23
|
+
export declare function getStorageJSON<Value>(hostStorage: Readonly<HostStorageProvider>, key: string): StorageJsonResult<Value>;
|
|
24
|
+
export declare function getStorageJSONOr<Value>(hostStorage: Readonly<HostStorageProvider>, key: string, fallback: Value): StorageJsonOrResult<Value>;
|
|
25
|
+
export declare function getStorageKeys(hostStorage: Readonly<HostStorageProvider>): StorageKeysResult;
|
|
26
|
+
export declare function getStorageNumber(hostStorage: Readonly<HostStorageProvider>, key: string): StorageNumberResult;
|
|
27
|
+
export declare function getStorageNumberOr(hostStorage: Readonly<HostStorageProvider>, key: string, fallback: number): StorageNumberOrResult;
|
|
28
28
|
export declare function initializeStorageSignals(out: EntityConstruction<StorageSignals>): void;
|
|
29
|
-
export declare function migrateStorage(
|
|
30
|
-
export declare function removeNamespacedStorageItem(
|
|
31
|
-
export declare function removeStorageItem(
|
|
32
|
-
export declare function removeStorageItems(
|
|
33
|
-
export declare function setNamespacedStorageItem(
|
|
34
|
-
export declare function setStorageBoolean(
|
|
35
|
-
export declare function setStorageItem(
|
|
36
|
-
export declare function setStorageItems(
|
|
37
|
-
export declare function setStorageJSON<Value>(
|
|
38
|
-
export declare function setStorageNumber(
|
|
29
|
+
export declare function migrateStorage(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace> | null, migrations: readonly Readonly<StorageMigration>[], signals?: StorageSignals | null): StorageMigrationResult;
|
|
30
|
+
export declare function removeNamespacedStorageItem(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>, key: string, signals?: StorageSignals | null): StorageRemoveItemResult;
|
|
31
|
+
export declare function removeStorageItem(hostStorage: Readonly<HostStorageProvider>, key: string, signals?: StorageSignals | null): StorageRemoveItemResult;
|
|
32
|
+
export declare function removeStorageItems(hostStorage: Readonly<HostStorageProvider>, keys: readonly string[], signals?: StorageSignals | null): StorageRemoveItemsResult;
|
|
33
|
+
export declare function setNamespacedStorageItem(hostStorage: Readonly<HostStorageProvider>, namespace: Readonly<StorageNamespace>, key: string, value: string, signals?: StorageSignals | null): StorageSetItemResult;
|
|
34
|
+
export declare function setStorageBoolean(hostStorage: Readonly<HostStorageProvider>, key: string, value: boolean, signals?: StorageSignals | null): StorageSetItemResult;
|
|
35
|
+
export declare function setStorageItem(hostStorage: Readonly<HostStorageProvider>, key: string, value: string, signals?: StorageSignals | null): StorageSetItemResult;
|
|
36
|
+
export declare function setStorageItems(hostStorage: Readonly<HostStorageProvider>, record: Readonly<Record<string, string>>, signals?: StorageSignals | null): StorageSetItemsResult;
|
|
37
|
+
export declare function setStorageJSON<Value>(hostStorage: Readonly<HostStorageProvider>, key: string, value: Value, signals?: StorageSignals | null): StorageJsonWriteResult;
|
|
38
|
+
export declare function setStorageNumber(hostStorage: Readonly<HostStorageProvider>, key: string, value: number, signals?: StorageSignals | null): StorageSetItemResult;
|
|
39
39
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { allocateEntity, finishEntity } from '@flighthq/entity/contract';
|
|
2
2
|
import { clearSignal, createSignal, emitSignal, hasSignalSlots } from '@flighthq/signals/contract';
|
|
3
3
|
// Starts raw provider change delivery into the caller-owned signal entity. Re-attaching first consumes
|
|
4
|
-
// the exact unsubscribe returned by the prior provider, so a different
|
|
4
|
+
// the exact unsubscribe returned by the prior provider, so a different provider can never redirect teardown.
|
|
5
5
|
// Returns false when the provider cannot establish a real subscription.
|
|
6
|
-
export function attachStorage(
|
|
6
|
+
export function attachStorage(hostStorageChange, signals) {
|
|
7
7
|
detachStorage(signals);
|
|
8
|
-
const unsubscribe =
|
|
8
|
+
const unsubscribe = hostStorageChange.subscribe((change) => emitSignal(signals.onChange, change));
|
|
9
9
|
if (unsubscribe === null)
|
|
10
10
|
return false;
|
|
11
11
|
_subscriptions.set(signals, unsubscribe);
|
|
12
12
|
return true;
|
|
13
13
|
}
|
|
14
|
-
export function clearStorage(
|
|
15
|
-
const result =
|
|
14
|
+
export function clearStorage(hostStorage, signals = null) {
|
|
15
|
+
const result = hostStorage.clear();
|
|
16
16
|
if (result.reason === 'ok' && storageSignalsActive(signals)) {
|
|
17
17
|
emitSignal(signals.onChange, { key: null, newValue: null, oldValue: null });
|
|
18
18
|
}
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
21
|
-
export function clearStorageNamespace(
|
|
21
|
+
export function clearStorageNamespace(hostStorage, namespace, signals = null) {
|
|
22
22
|
const prefix = namespace.prefix + '.';
|
|
23
|
-
const backend =
|
|
23
|
+
const backend = hostStorage;
|
|
24
24
|
const keys = backend.keys();
|
|
25
25
|
if (keys.reason !== 'ok')
|
|
26
26
|
return { completed: 0, failedKey: null, reason: keys.reason };
|
|
@@ -40,10 +40,10 @@ export function createStorageSignals() {
|
|
|
40
40
|
initializeStorageSignals(out);
|
|
41
41
|
return finishEntity(out);
|
|
42
42
|
}
|
|
43
|
-
// Terminal teardown of the
|
|
43
|
+
// Terminal teardown of the supplied raw-change provider. Per-entity detach is separate because one
|
|
44
44
|
// provider can fan out to more than one StorageSignals entity.
|
|
45
|
-
export function destroyStorage(
|
|
46
|
-
|
|
45
|
+
export function destroyStorage(hostStorageChange) {
|
|
46
|
+
hostStorageChange.destroy();
|
|
47
47
|
}
|
|
48
48
|
export function detachStorage(signals) {
|
|
49
49
|
const unsubscribe = _subscriptions.get(signals);
|
|
@@ -56,12 +56,12 @@ export function disposeStorage(signals) {
|
|
|
56
56
|
detachStorage(signals);
|
|
57
57
|
clearSignal(signals.onChange);
|
|
58
58
|
}
|
|
59
|
-
export function getNamespacedStorageByteSize(
|
|
60
|
-
return getStorageByteSizeForPrefix(
|
|
59
|
+
export function getNamespacedStorageByteSize(hostStorage, namespace) {
|
|
60
|
+
return getStorageByteSizeForPrefix(hostStorage, namespace.prefix + '.');
|
|
61
61
|
}
|
|
62
|
-
export function getNamespacedStorageEntries(
|
|
62
|
+
export function getNamespacedStorageEntries(hostStorage, namespace) {
|
|
63
63
|
const prefix = namespace.prefix + '.';
|
|
64
|
-
const result = getStorageEntriesForPrefix(
|
|
64
|
+
const result = getStorageEntriesForPrefix(hostStorage, prefix);
|
|
65
65
|
if (result.reason !== 'ok')
|
|
66
66
|
return result;
|
|
67
67
|
return {
|
|
@@ -70,15 +70,15 @@ export function getNamespacedStorageEntries(host, namespace) {
|
|
|
70
70
|
value: result.value.map(([key, value]) => [key.slice(prefix.length), value]),
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
export function getNamespacedStorageItem(
|
|
74
|
-
return
|
|
73
|
+
export function getNamespacedStorageItem(hostStorage, namespace, key) {
|
|
74
|
+
return hostStorage.getItem(namespacedKey(namespace, key));
|
|
75
75
|
}
|
|
76
|
-
export function getNamespacedStorageItemPresence(
|
|
77
|
-
return getStorageItemPresence(
|
|
76
|
+
export function getNamespacedStorageItemPresence(hostStorage, namespace, key) {
|
|
77
|
+
return getStorageItemPresence(hostStorage, namespacedKey(namespace, key));
|
|
78
78
|
}
|
|
79
|
-
export function getNamespacedStorageKeys(
|
|
79
|
+
export function getNamespacedStorageKeys(hostStorage, namespace) {
|
|
80
80
|
const prefix = namespace.prefix + '.';
|
|
81
|
-
const result =
|
|
81
|
+
const result = hostStorage.keys();
|
|
82
82
|
if (result.reason !== 'ok')
|
|
83
83
|
return result;
|
|
84
84
|
return {
|
|
@@ -86,8 +86,8 @@ export function getNamespacedStorageKeys(host, namespace) {
|
|
|
86
86
|
value: result.value.filter((key) => key.startsWith(prefix)).map((key) => key.slice(prefix.length)),
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
|
-
export function getStorageBoolean(
|
|
90
|
-
const raw =
|
|
89
|
+
export function getStorageBoolean(hostStorage, key) {
|
|
90
|
+
const raw = hostStorage.getItem(key);
|
|
91
91
|
if (raw.reason !== 'ok')
|
|
92
92
|
return raw;
|
|
93
93
|
if (raw.value === null)
|
|
@@ -98,8 +98,8 @@ export function getStorageBoolean(host, key) {
|
|
|
98
98
|
return { reason: 'ok', value: false };
|
|
99
99
|
return { reason: 'parse-failed', value: null };
|
|
100
100
|
}
|
|
101
|
-
export function getStorageBooleanOr(
|
|
102
|
-
const raw =
|
|
101
|
+
export function getStorageBooleanOr(hostStorage, key, fallback) {
|
|
102
|
+
const raw = hostStorage.getItem(key);
|
|
103
103
|
if (raw.reason !== 'ok')
|
|
104
104
|
return raw;
|
|
105
105
|
if (raw.value === null)
|
|
@@ -110,45 +110,45 @@ export function getStorageBooleanOr(host, key, fallback) {
|
|
|
110
110
|
return { reason: 'ok', value: false };
|
|
111
111
|
return { reason: 'parse-failed', value: fallback };
|
|
112
112
|
}
|
|
113
|
-
export function getStorageByteSize(
|
|
114
|
-
return getStorageByteSizeForPrefix(
|
|
113
|
+
export function getStorageByteSize(hostStorage) {
|
|
114
|
+
return getStorageByteSizeForPrefix(hostStorage, null);
|
|
115
115
|
}
|
|
116
|
-
export function getStorageEntries(
|
|
117
|
-
return getStorageEntriesForPrefix(
|
|
116
|
+
export function getStorageEntries(hostStorage) {
|
|
117
|
+
return getStorageEntriesForPrefix(hostStorage, null);
|
|
118
118
|
}
|
|
119
|
-
export function getStorageItem(
|
|
120
|
-
return
|
|
119
|
+
export function getStorageItem(hostStorage, key) {
|
|
120
|
+
return hostStorage.getItem(key);
|
|
121
121
|
}
|
|
122
|
-
export function getStorageItemCount(
|
|
123
|
-
const result =
|
|
122
|
+
export function getStorageItemCount(hostStorage) {
|
|
123
|
+
const result = hostStorage.keys();
|
|
124
124
|
if (result.reason !== 'ok')
|
|
125
125
|
return result;
|
|
126
126
|
return { reason: 'ok', value: result.value.length };
|
|
127
127
|
}
|
|
128
|
-
export function getStorageItemOr(
|
|
129
|
-
const result =
|
|
128
|
+
export function getStorageItemOr(hostStorage, key, fallback) {
|
|
129
|
+
const result = hostStorage.getItem(key);
|
|
130
130
|
if (result.reason !== 'ok')
|
|
131
131
|
return result;
|
|
132
132
|
return { reason: 'ok', value: result.value ?? fallback };
|
|
133
133
|
}
|
|
134
|
-
export function getStorageItemPresence(
|
|
135
|
-
const result =
|
|
134
|
+
export function getStorageItemPresence(hostStorage, key) {
|
|
135
|
+
const result = hostStorage.getItem(key);
|
|
136
136
|
if (result.reason !== 'ok')
|
|
137
137
|
return result;
|
|
138
138
|
return { reason: 'ok', value: result.value !== null };
|
|
139
139
|
}
|
|
140
|
-
export function getStorageItems(
|
|
140
|
+
export function getStorageItems(hostStorage, keys) {
|
|
141
141
|
const out = [];
|
|
142
142
|
for (const key of keys) {
|
|
143
|
-
const result =
|
|
143
|
+
const result = hostStorage.getItem(key);
|
|
144
144
|
if (result.reason !== 'ok')
|
|
145
145
|
return { failedKey: key, reason: result.reason, value: null };
|
|
146
146
|
out.push(result.value);
|
|
147
147
|
}
|
|
148
148
|
return { failedKey: null, reason: 'ok', value: out };
|
|
149
149
|
}
|
|
150
|
-
export function getStorageJSON(
|
|
151
|
-
const raw =
|
|
150
|
+
export function getStorageJSON(hostStorage, key) {
|
|
151
|
+
const raw = hostStorage.getItem(key);
|
|
152
152
|
if (raw.reason !== 'ok')
|
|
153
153
|
return raw;
|
|
154
154
|
if (raw.value === null)
|
|
@@ -160,8 +160,8 @@ export function getStorageJSON(host, key) {
|
|
|
160
160
|
return { reason: 'parse-failed', value: null };
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
-
export function getStorageJSONOr(
|
|
164
|
-
const raw =
|
|
163
|
+
export function getStorageJSONOr(hostStorage, key, fallback) {
|
|
164
|
+
const raw = hostStorage.getItem(key);
|
|
165
165
|
if (raw.reason !== 'ok')
|
|
166
166
|
return raw;
|
|
167
167
|
if (raw.value === null)
|
|
@@ -173,11 +173,11 @@ export function getStorageJSONOr(host, key, fallback) {
|
|
|
173
173
|
return { reason: 'parse-failed', value: fallback };
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
-
export function getStorageKeys(
|
|
177
|
-
return
|
|
176
|
+
export function getStorageKeys(hostStorage) {
|
|
177
|
+
return hostStorage.keys();
|
|
178
178
|
}
|
|
179
|
-
export function getStorageNumber(
|
|
180
|
-
const raw =
|
|
179
|
+
export function getStorageNumber(hostStorage, key) {
|
|
180
|
+
const raw = hostStorage.getItem(key);
|
|
181
181
|
if (raw.reason !== 'ok')
|
|
182
182
|
return raw;
|
|
183
183
|
if (raw.value === null)
|
|
@@ -185,8 +185,8 @@ export function getStorageNumber(host, key) {
|
|
|
185
185
|
const value = Number(raw.value);
|
|
186
186
|
return Number.isFinite(value) ? { reason: 'ok', value } : { reason: 'parse-failed', value: null };
|
|
187
187
|
}
|
|
188
|
-
export function getStorageNumberOr(
|
|
189
|
-
const raw =
|
|
188
|
+
export function getStorageNumberOr(hostStorage, key, fallback) {
|
|
189
|
+
const raw = hostStorage.getItem(key);
|
|
190
190
|
if (raw.reason !== 'ok')
|
|
191
191
|
return raw;
|
|
192
192
|
if (raw.value === null)
|
|
@@ -200,10 +200,10 @@ export function initializeStorageSignals(out) {
|
|
|
200
200
|
// Validates the complete plan before reading or mutating storage. Every successful callback is followed
|
|
201
201
|
// immediately by its own checkpoint. A checkpoint failure leaves callback effects visible and causes that
|
|
202
202
|
// version to replay next time, so callbacks must be idempotent; exceptions propagate and nothing rolls back.
|
|
203
|
-
export function migrateStorage(
|
|
203
|
+
export function migrateStorage(hostStorage, namespace, migrations, signals = null) {
|
|
204
204
|
const sorted = validateStorageMigrations(migrations);
|
|
205
205
|
const versionKey = namespace === null ? '__flight_storage_version' : namespacedKey(namespace, '__flight_storage_version');
|
|
206
|
-
const storedVersion =
|
|
206
|
+
const storedVersion = hostStorage.getItem(versionKey);
|
|
207
207
|
if (storedVersion.reason !== 'ok') {
|
|
208
208
|
return { failedVersion: null, reason: storedVersion.reason, stage: 'read-version', version: null };
|
|
209
209
|
}
|
|
@@ -220,7 +220,7 @@ export function migrateStorage(host, namespace, migrations, signals = null) {
|
|
|
220
220
|
if (migration.version <= initialCheckpoint)
|
|
221
221
|
continue;
|
|
222
222
|
migration.migrate(namespace?.prefix ?? null);
|
|
223
|
-
const stored = setStorageItemOnBackend(
|
|
223
|
+
const stored = setStorageItemOnBackend(hostStorage, versionKey, String(migration.version), signals);
|
|
224
224
|
if (stored.reason !== 'ok') {
|
|
225
225
|
return {
|
|
226
226
|
failedVersion: migration.version,
|
|
@@ -233,42 +233,42 @@ export function migrateStorage(host, namespace, migrations, signals = null) {
|
|
|
233
233
|
}
|
|
234
234
|
return { failedVersion: null, reason: 'ok', stage: null, version: checkpoint };
|
|
235
235
|
}
|
|
236
|
-
export function removeNamespacedStorageItem(
|
|
237
|
-
return removeStorageItemFromBackend(
|
|
236
|
+
export function removeNamespacedStorageItem(hostStorage, namespace, key, signals = null) {
|
|
237
|
+
return removeStorageItemFromBackend(hostStorage, namespacedKey(namespace, key), signals);
|
|
238
238
|
}
|
|
239
|
-
export function removeStorageItem(
|
|
240
|
-
return removeStorageItemFromBackend(
|
|
239
|
+
export function removeStorageItem(hostStorage, key, signals = null) {
|
|
240
|
+
return removeStorageItemFromBackend(hostStorage, key, signals);
|
|
241
241
|
}
|
|
242
|
-
export function removeStorageItems(
|
|
242
|
+
export function removeStorageItems(hostStorage, keys, signals = null) {
|
|
243
243
|
let completed = 0;
|
|
244
244
|
for (const key of keys) {
|
|
245
|
-
const result = removeStorageItemFromBackend(
|
|
245
|
+
const result = removeStorageItemFromBackend(hostStorage, key, signals);
|
|
246
246
|
if (result.reason !== 'ok')
|
|
247
247
|
return { completed, failedKey: key, reason: result.reason };
|
|
248
248
|
completed++;
|
|
249
249
|
}
|
|
250
250
|
return { completed, failedKey: null, reason: 'ok' };
|
|
251
251
|
}
|
|
252
|
-
export function setNamespacedStorageItem(
|
|
253
|
-
return setStorageItemOnBackend(
|
|
252
|
+
export function setNamespacedStorageItem(hostStorage, namespace, key, value, signals = null) {
|
|
253
|
+
return setStorageItemOnBackend(hostStorage, namespacedKey(namespace, key), value, signals);
|
|
254
254
|
}
|
|
255
|
-
export function setStorageBoolean(
|
|
256
|
-
return setStorageItemOnBackend(
|
|
255
|
+
export function setStorageBoolean(hostStorage, key, value, signals = null) {
|
|
256
|
+
return setStorageItemOnBackend(hostStorage, key, value ? 'true' : 'false', signals);
|
|
257
257
|
}
|
|
258
|
-
export function setStorageItem(
|
|
259
|
-
return setStorageItemOnBackend(
|
|
258
|
+
export function setStorageItem(hostStorage, key, value, signals = null) {
|
|
259
|
+
return setStorageItemOnBackend(hostStorage, key, value, signals);
|
|
260
260
|
}
|
|
261
|
-
export function setStorageItems(
|
|
261
|
+
export function setStorageItems(hostStorage, record, signals = null) {
|
|
262
262
|
let completed = 0;
|
|
263
263
|
for (const key of Object.keys(record)) {
|
|
264
|
-
const result = setStorageItemOnBackend(
|
|
264
|
+
const result = setStorageItemOnBackend(hostStorage, key, record[key], signals);
|
|
265
265
|
if (result.reason !== 'ok')
|
|
266
266
|
return { completed, failedKey: key, reason: result.reason };
|
|
267
267
|
completed++;
|
|
268
268
|
}
|
|
269
269
|
return { completed, failedKey: null, reason: 'ok' };
|
|
270
270
|
}
|
|
271
|
-
export function setStorageJSON(
|
|
271
|
+
export function setStorageJSON(hostStorage, key, value, signals = null) {
|
|
272
272
|
let raw;
|
|
273
273
|
try {
|
|
274
274
|
raw = JSON.stringify(value);
|
|
@@ -278,12 +278,12 @@ export function setStorageJSON(host, key, value, signals = null) {
|
|
|
278
278
|
}
|
|
279
279
|
if (raw === undefined)
|
|
280
280
|
return { reason: 'serialization-failed' };
|
|
281
|
-
return setStorageItemOnBackend(
|
|
281
|
+
return setStorageItemOnBackend(hostStorage, key, raw, signals);
|
|
282
282
|
}
|
|
283
|
-
export function setStorageNumber(
|
|
283
|
+
export function setStorageNumber(hostStorage, key, value, signals = null) {
|
|
284
284
|
if (!Number.isFinite(value))
|
|
285
285
|
throw new RangeError('setStorageNumber value must be finite');
|
|
286
|
-
return setStorageItemOnBackend(
|
|
286
|
+
return setStorageItemOnBackend(hostStorage, key, String(value), signals);
|
|
287
287
|
}
|
|
288
288
|
function getStorageByteSizeForPrefix(backend, prefix) {
|
|
289
289
|
const keys = backend.keys();
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function getStoragePersistence(
|
|
3
|
-
export declare function requestStoragePersistence(
|
|
1
|
+
import type { HostStoragePersistenceQueryProvider, HostStoragePersistenceRequestProvider, StoragePersistenceResult } from '@flighthq/types/contract';
|
|
2
|
+
export declare function getStoragePersistence(hostStoragePersistenceQuery: Readonly<HostStoragePersistenceQueryProvider>): Promise<StoragePersistenceResult>;
|
|
3
|
+
export declare function requestStoragePersistence(hostStoragePersistenceRequest: Readonly<HostStoragePersistenceRequestProvider>): Promise<StoragePersistenceResult>;
|
|
4
4
|
//# sourceMappingURL=storagePersistence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storagePersistence.d.ts","sourceRoot":"","sources":["../src/storagePersistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"storagePersistence.d.ts","sourceRoot":"","sources":["../src/storagePersistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mCAAmC,EACnC,qCAAqC,EACrC,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,qBAAqB,CACnC,2BAA2B,EAAE,QAAQ,CAAC,mCAAmC,CAAC,GACzE,OAAO,CAAC,wBAAwB,CAAC,CAGnC;AAED,wBAAgB,yBAAyB,CACvC,6BAA6B,EAAE,QAAQ,CAAC,qCAAqC,CAAC,GAC7E,OAAO,CAAC,wBAAwB,CAAC,CAGnC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export function getStoragePersistence(
|
|
2
|
-
const backend =
|
|
1
|
+
export function getStoragePersistence(hostStoragePersistenceQuery) {
|
|
2
|
+
const backend = hostStoragePersistenceQuery;
|
|
3
3
|
return backend.getPersistence();
|
|
4
4
|
}
|
|
5
|
-
export function requestStoragePersistence(
|
|
6
|
-
const backend =
|
|
5
|
+
export function requestStoragePersistence(hostStoragePersistenceRequest) {
|
|
6
|
+
const backend = hostStoragePersistenceRequest;
|
|
7
7
|
return backend.requestPersistence();
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=storagePersistence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storagePersistence.js","sourceRoot":"","sources":["../src/storagePersistence.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,qBAAqB,
|
|
1
|
+
{"version":3,"file":"storagePersistence.js","sourceRoot":"","sources":["../src/storagePersistence.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,qBAAqB,CACnC,2BAA0E;IAE1E,MAAM,OAAO,GAAG,2BAA2B,CAAC;IAC5C,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,6BAA8E;IAE9E,MAAM,OAAO,GAAG,6BAA6B,CAAC;IAC9C,OAAO,OAAO,CAAC,kBAAkB,EAAE,CAAC;AACtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/storage",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.1197.6a425ce",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/entity": "0.5.1-next.
|
|
42
|
-
"@flighthq/signals": "0.5.1-next.
|
|
43
|
-
"@flighthq/types": "0.5.1-next.
|
|
41
|
+
"@flighthq/entity": "0.5.1-next.1197.6a425ce",
|
|
42
|
+
"@flighthq/signals": "0.5.1-next.1197.6a425ce",
|
|
43
|
+
"@flighthq/types": "0.5.1-next.1197.6a425ce"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^5.3.0"
|
package/src/storage.test.ts
CHANGED
|
@@ -2,11 +2,9 @@ import { allocateEntity, finishEntity } from '@flighthq/entity/contract';
|
|
|
2
2
|
import { connectSignal } from '@flighthq/signals/contract';
|
|
3
3
|
import type {
|
|
4
4
|
EntityRuntimeKey,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
StorageBackend,
|
|
5
|
+
HostStorageChangeProvider,
|
|
6
|
+
HostStorageProvider,
|
|
8
7
|
StorageChange,
|
|
9
|
-
StorageChangeBackend,
|
|
10
8
|
StorageClearFailureReason,
|
|
11
9
|
StorageGetItemFailureReason,
|
|
12
10
|
StorageRemoveItemFailureReason,
|
|
@@ -54,7 +52,7 @@ import {
|
|
|
54
52
|
setStorageNumber,
|
|
55
53
|
} from './storage';
|
|
56
54
|
|
|
57
|
-
interface MemoryStorageBackend extends
|
|
55
|
+
interface MemoryStorageBackend extends HostStorageProvider {
|
|
58
56
|
readonly data: Record<string, string>;
|
|
59
57
|
getCalls: number;
|
|
60
58
|
readonly getFailures: Map<string, StorageGetItemFailureReason>;
|
|
@@ -108,11 +106,13 @@ function memoryBackend(initial: Readonly<Record<string, string>> = {}): MemorySt
|
|
|
108
106
|
return finishEntity(out);
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
function localHost(backend:
|
|
109
|
+
function localHost(backend: HostStorageProvider): { readonly storage: { readonly local: HostStorageProvider } } {
|
|
112
110
|
return { storage: { local: backend } };
|
|
113
111
|
}
|
|
114
112
|
|
|
115
|
-
function changeHost(backend:
|
|
113
|
+
function changeHost(backend: HostStorageChangeProvider): {
|
|
114
|
+
readonly storage: { readonly change: HostStorageChangeProvider };
|
|
115
|
+
} {
|
|
116
116
|
return { storage: { change: backend } };
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -121,7 +121,7 @@ describe('attachStorage', () => {
|
|
|
121
121
|
const released: string[] = [];
|
|
122
122
|
const captured: { listener?: (change: Readonly<StorageChange>) => void } = {};
|
|
123
123
|
const a = (() => {
|
|
124
|
-
const out = allocateEntity<
|
|
124
|
+
const out = allocateEntity<HostStorageChangeProvider>();
|
|
125
125
|
out.destroy = () => {};
|
|
126
126
|
out.subscribe = (listener: (change: Readonly<StorageChange>) => void) => {
|
|
127
127
|
captured.listener = listener;
|
|
@@ -130,7 +130,7 @@ describe('attachStorage', () => {
|
|
|
130
130
|
return finishEntity(out);
|
|
131
131
|
})();
|
|
132
132
|
const b = (() => {
|
|
133
|
-
const out = allocateEntity<
|
|
133
|
+
const out = allocateEntity<HostStorageChangeProvider>();
|
|
134
134
|
out.destroy = () => {};
|
|
135
135
|
out.subscribe = () => {
|
|
136
136
|
return () => released.push('b');
|
|
@@ -141,21 +141,21 @@ describe('attachStorage', () => {
|
|
|
141
141
|
const changes: StorageChange[] = [];
|
|
142
142
|
connectSignal(signals.onChange, (change) => changes.push({ ...change }));
|
|
143
143
|
|
|
144
|
-
expect(attachStorage(changeHost(a), signals)).toBe(true);
|
|
144
|
+
expect(attachStorage(changeHost(a).storage.change, signals)).toBe(true);
|
|
145
145
|
captured.listener?.({ key: 'a', newValue: '1', oldValue: null });
|
|
146
146
|
expect(changes).toEqual([{ key: 'a', newValue: '1', oldValue: null }]);
|
|
147
|
-
expect(attachStorage(changeHost(b), signals)).toBe(true);
|
|
147
|
+
expect(attachStorage(changeHost(b).storage.change, signals)).toBe(true);
|
|
148
148
|
expect(released).toEqual(['a']);
|
|
149
149
|
detachStorage(signals);
|
|
150
150
|
expect(released).toEqual(['a', 'b']);
|
|
151
151
|
});
|
|
152
152
|
|
|
153
153
|
it('returns false and retains no cleanup when acquisition fails', () => {
|
|
154
|
-
const provider = allocateEntity<
|
|
154
|
+
const provider = allocateEntity<HostStorageChangeProvider>();
|
|
155
155
|
provider.destroy = () => {};
|
|
156
156
|
provider.subscribe = () => null;
|
|
157
157
|
const signals = createStorageSignals();
|
|
158
|
-
expect(attachStorage(changeHost(finishEntity(provider)), signals)).toBe(false);
|
|
158
|
+
expect(attachStorage(changeHost(finishEntity(provider)).storage.change, signals)).toBe(false);
|
|
159
159
|
expect(() => detachStorage(signals)).not.toThrow();
|
|
160
160
|
});
|
|
161
161
|
});
|
|
@@ -168,10 +168,10 @@ describe('clearStorage', () => {
|
|
|
168
168
|
const changes: StorageChange[] = [];
|
|
169
169
|
connectSignal(signals.onChange, (change) => changes.push({ ...change }));
|
|
170
170
|
backend.clearFailure = 'security-denied';
|
|
171
|
-
expect(clearStorage(host, signals)).toEqual({ reason: 'security-denied' });
|
|
171
|
+
expect(clearStorage(host.storage.local, signals)).toEqual({ reason: 'security-denied' });
|
|
172
172
|
expect(changes).toEqual([]);
|
|
173
173
|
backend.clearFailure = null;
|
|
174
|
-
expect(clearStorage(host, signals)).toEqual({ reason: 'ok' });
|
|
174
|
+
expect(clearStorage(host.storage.local, signals)).toEqual({ reason: 'ok' });
|
|
175
175
|
expect(changes).toEqual([{ key: null, newValue: null, oldValue: null }]);
|
|
176
176
|
});
|
|
177
177
|
});
|
|
@@ -180,7 +180,7 @@ describe('clearStorageNamespace', () => {
|
|
|
180
180
|
it('removes matching keys, stops on failure, and exposes completed world state', () => {
|
|
181
181
|
const backend = memoryBackend({ 'ns.a': '1', 'ns.b': '2', other: '3' });
|
|
182
182
|
backend.removeFailures.set('ns.b', 'remove-failed');
|
|
183
|
-
expect(clearStorageNamespace(localHost(backend), { prefix: 'ns' })).toEqual({
|
|
183
|
+
expect(clearStorageNamespace(localHost(backend).storage.local, { prefix: 'ns' })).toEqual({
|
|
184
184
|
completed: 1,
|
|
185
185
|
failedKey: 'ns.b',
|
|
186
186
|
reason: 'remove-failed',
|
|
@@ -191,7 +191,7 @@ describe('clearStorageNamespace', () => {
|
|
|
191
191
|
it('returns no partial state when key enumeration fails', () => {
|
|
192
192
|
const backend = memoryBackend({ 'ns.a': '1' });
|
|
193
193
|
backend.keysFailure = 'security-denied';
|
|
194
|
-
expect(clearStorageNamespace(localHost(backend), { prefix: 'ns' })).toEqual({
|
|
194
|
+
expect(clearStorageNamespace(localHost(backend).storage.local, { prefix: 'ns' })).toEqual({
|
|
195
195
|
completed: 0,
|
|
196
196
|
failedKey: null,
|
|
197
197
|
reason: 'security-denied',
|
|
@@ -210,10 +210,10 @@ describe('createStorageSignals', () => {
|
|
|
210
210
|
describe('destroyStorage', () => {
|
|
211
211
|
it('runs the explicit change-provider teardown', () => {
|
|
212
212
|
let destroyed = 0;
|
|
213
|
-
const provider = allocateEntity<
|
|
213
|
+
const provider = allocateEntity<HostStorageChangeProvider>();
|
|
214
214
|
provider.destroy = () => destroyed++;
|
|
215
215
|
provider.subscribe = () => null;
|
|
216
|
-
destroyStorage(changeHost(finishEntity(provider)));
|
|
216
|
+
destroyStorage(changeHost(finishEntity(provider)).storage.change);
|
|
217
217
|
expect(destroyed).toBe(1);
|
|
218
218
|
});
|
|
219
219
|
});
|
|
@@ -221,11 +221,11 @@ describe('destroyStorage', () => {
|
|
|
221
221
|
describe('detachStorage', () => {
|
|
222
222
|
it('is idempotent', () => {
|
|
223
223
|
let released = 0;
|
|
224
|
-
const provider = allocateEntity<
|
|
224
|
+
const provider = allocateEntity<HostStorageChangeProvider>();
|
|
225
225
|
provider.destroy = () => {};
|
|
226
226
|
provider.subscribe = () => () => released++;
|
|
227
227
|
const signals = createStorageSignals();
|
|
228
|
-
attachStorage(changeHost(finishEntity(provider)), signals);
|
|
228
|
+
attachStorage(changeHost(finishEntity(provider)).storage.change, signals);
|
|
229
229
|
detachStorage(signals);
|
|
230
230
|
detachStorage(signals);
|
|
231
231
|
expect(released).toBe(1);
|
|
@@ -246,7 +246,7 @@ describe('disposeStorage', () => {
|
|
|
246
246
|
describe('getNamespacedStorageByteSize', () => {
|
|
247
247
|
it('computes byte size from raw prefixed keys', () => {
|
|
248
248
|
const host = localHost(memoryBackend({ 'n.a': 'xy', other: 'ignored' }));
|
|
249
|
-
expect(getNamespacedStorageByteSize(host, { prefix: 'n' })).toEqual({
|
|
249
|
+
expect(getNamespacedStorageByteSize(host.storage.local, { prefix: 'n' })).toEqual({
|
|
250
250
|
failedKey: null,
|
|
251
251
|
reason: 'ok',
|
|
252
252
|
value: ('n.a'.length + 'xy'.length) * 2,
|
|
@@ -258,7 +258,7 @@ describe('getNamespacedStorageEntries', () => {
|
|
|
258
258
|
it('filters entries and strips the namespace prefix', () => {
|
|
259
259
|
const host = localHost(memoryBackend({ 'app.a': '1', 'app.b': '2', other: '3' }));
|
|
260
260
|
const namespace = { prefix: 'app' };
|
|
261
|
-
expect(getNamespacedStorageEntries(host, namespace)).toEqual({
|
|
261
|
+
expect(getNamespacedStorageEntries(host.storage.local, namespace)).toEqual({
|
|
262
262
|
failedKey: null,
|
|
263
263
|
reason: 'ok',
|
|
264
264
|
value: [
|
|
@@ -273,7 +273,7 @@ describe('getNamespacedStorageItem', () => {
|
|
|
273
273
|
it('reads the prefixed key', () => {
|
|
274
274
|
const host = localHost(memoryBackend({ 'app.a': '1' }));
|
|
275
275
|
const namespace = { prefix: 'app' };
|
|
276
|
-
expect(getNamespacedStorageItem(host, namespace, 'a')).toEqual({ reason: 'ok', value: '1' });
|
|
276
|
+
expect(getNamespacedStorageItem(host.storage.local, namespace, 'a')).toEqual({ reason: 'ok', value: '1' });
|
|
277
277
|
});
|
|
278
278
|
});
|
|
279
279
|
|
|
@@ -281,7 +281,10 @@ describe('getNamespacedStorageItemPresence', () => {
|
|
|
281
281
|
it('reports a missing prefixed key', () => {
|
|
282
282
|
const host = localHost(memoryBackend());
|
|
283
283
|
const namespace = { prefix: 'app' };
|
|
284
|
-
expect(getNamespacedStorageItemPresence(host, namespace, 'missing')).toEqual({
|
|
284
|
+
expect(getNamespacedStorageItemPresence(host.storage.local, namespace, 'missing')).toEqual({
|
|
285
|
+
reason: 'ok',
|
|
286
|
+
value: false,
|
|
287
|
+
});
|
|
285
288
|
});
|
|
286
289
|
});
|
|
287
290
|
|
|
@@ -289,7 +292,7 @@ describe('getNamespacedStorageKeys', () => {
|
|
|
289
292
|
it('filters keys and strips the namespace prefix', () => {
|
|
290
293
|
const host = localHost(memoryBackend({ 'app.a': '1', 'app.b': '2', other: '3' }));
|
|
291
294
|
const namespace = { prefix: 'app' };
|
|
292
|
-
expect(getNamespacedStorageKeys(host, namespace)).toEqual({ reason: 'ok', value: ['a', 'b'] });
|
|
295
|
+
expect(getNamespacedStorageKeys(host.storage.local, namespace)).toEqual({ reason: 'ok', value: ['a', 'b'] });
|
|
293
296
|
});
|
|
294
297
|
});
|
|
295
298
|
|
|
@@ -297,10 +300,10 @@ describe('getStorageBoolean', () => {
|
|
|
297
300
|
it('distinguishes miss, values, and parse failure', () => {
|
|
298
301
|
const backend = memoryBackend({ bad: 'yes', false: 'false', true: 'true' });
|
|
299
302
|
const host = localHost(backend);
|
|
300
|
-
expect(getStorageBoolean(host, 'true')).toEqual({ reason: 'ok', value: true });
|
|
301
|
-
expect(getStorageBoolean(host, 'false')).toEqual({ reason: 'ok', value: false });
|
|
302
|
-
expect(getStorageBoolean(host, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
303
|
-
expect(getStorageBoolean(host, 'bad')).toEqual({ reason: 'parse-failed', value: null });
|
|
303
|
+
expect(getStorageBoolean(host.storage.local, 'true')).toEqual({ reason: 'ok', value: true });
|
|
304
|
+
expect(getStorageBoolean(host.storage.local, 'false')).toEqual({ reason: 'ok', value: false });
|
|
305
|
+
expect(getStorageBoolean(host.storage.local, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
306
|
+
expect(getStorageBoolean(host.storage.local, 'bad')).toEqual({ reason: 'parse-failed', value: null });
|
|
304
307
|
});
|
|
305
308
|
});
|
|
306
309
|
|
|
@@ -308,21 +311,25 @@ describe('getStorageBooleanOr', () => {
|
|
|
308
311
|
it('retains fallback decode and provider failure reasons', () => {
|
|
309
312
|
const backend = memoryBackend({ bad: 'yes' });
|
|
310
313
|
const host = localHost(backend);
|
|
311
|
-
expect(getStorageBooleanOr(host, 'bad', true)).toEqual({ reason: 'parse-failed', value: true });
|
|
314
|
+
expect(getStorageBooleanOr(host.storage.local, 'bad', true)).toEqual({ reason: 'parse-failed', value: true });
|
|
312
315
|
backend.getFailures.set('denied', 'security-denied');
|
|
313
|
-
expect(getStorageBooleanOr(host, 'denied', true)).toEqual({ reason: 'security-denied', value: null });
|
|
316
|
+
expect(getStorageBooleanOr(host.storage.local, 'denied', true)).toEqual({ reason: 'security-denied', value: null });
|
|
314
317
|
});
|
|
315
318
|
});
|
|
316
319
|
|
|
317
320
|
describe('getStorageByteSize', () => {
|
|
318
321
|
it('returns empty success separately from keys and value failures', () => {
|
|
319
322
|
const empty = memoryBackend();
|
|
320
|
-
expect(getStorageByteSize(localHost(empty))).toEqual({ failedKey: null, reason: 'ok', value: 0 });
|
|
323
|
+
expect(getStorageByteSize(localHost(empty).storage.local)).toEqual({ failedKey: null, reason: 'ok', value: 0 });
|
|
321
324
|
empty.keysFailure = 'read-failed';
|
|
322
|
-
expect(getStorageByteSize(localHost(empty))).toEqual({
|
|
325
|
+
expect(getStorageByteSize(localHost(empty).storage.local)).toEqual({
|
|
326
|
+
failedKey: null,
|
|
327
|
+
reason: 'read-failed',
|
|
328
|
+
value: null,
|
|
329
|
+
});
|
|
323
330
|
const failedValue = memoryBackend({ a: '1' });
|
|
324
331
|
failedValue.getFailures.set('a', 'security-denied');
|
|
325
|
-
expect(getStorageByteSize(localHost(failedValue))).toEqual({
|
|
332
|
+
expect(getStorageByteSize(localHost(failedValue).storage.local)).toEqual({
|
|
326
333
|
failedKey: 'a',
|
|
327
334
|
reason: 'security-denied',
|
|
328
335
|
value: null,
|
|
@@ -334,7 +341,7 @@ describe('getStorageEntries', () => {
|
|
|
334
341
|
it('returns no partial payload after the first failed value read', () => {
|
|
335
342
|
const backend = memoryBackend({ a: '1', b: '2' });
|
|
336
343
|
backend.getFailures.set('b', 'read-failed');
|
|
337
|
-
expect(getStorageEntries(localHost(backend))).toEqual({
|
|
344
|
+
expect(getStorageEntries(localHost(backend).storage.local)).toEqual({
|
|
338
345
|
failedKey: 'b',
|
|
339
346
|
reason: 'read-failed',
|
|
340
347
|
value: null,
|
|
@@ -346,8 +353,8 @@ describe('getStorageItem', () => {
|
|
|
346
353
|
it('distinguishes missing, empty, and failed reads', () => {
|
|
347
354
|
const backend = memoryBackend({ empty: '' });
|
|
348
355
|
const host = localHost(backend);
|
|
349
|
-
expect(getStorageItem(host, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
350
|
-
expect(getStorageItem(host, 'empty')).toEqual({ reason: 'ok', value: '' });
|
|
356
|
+
expect(getStorageItem(host.storage.local, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
357
|
+
expect(getStorageItem(host.storage.local, 'empty')).toEqual({ reason: 'ok', value: '' });
|
|
351
358
|
});
|
|
352
359
|
});
|
|
353
360
|
|
|
@@ -355,9 +362,9 @@ describe('getStorageItemCount', () => {
|
|
|
355
362
|
it('distinguishes an empty store from failed enumeration', () => {
|
|
356
363
|
const backend = memoryBackend();
|
|
357
364
|
const host = localHost(backend);
|
|
358
|
-
expect(getStorageItemCount(host)).toEqual({ reason: 'ok', value: 0 });
|
|
365
|
+
expect(getStorageItemCount(host.storage.local)).toEqual({ reason: 'ok', value: 0 });
|
|
359
366
|
backend.keysFailure = 'runtime-unavailable';
|
|
360
|
-
expect(getStorageItemCount(host)).toEqual({ reason: 'runtime-unavailable', value: null });
|
|
367
|
+
expect(getStorageItemCount(host.storage.local)).toEqual({ reason: 'runtime-unavailable', value: null });
|
|
361
368
|
});
|
|
362
369
|
});
|
|
363
370
|
|
|
@@ -365,10 +372,13 @@ describe('getStorageItemOr', () => {
|
|
|
365
372
|
it('does not hide failure behind fallback', () => {
|
|
366
373
|
const backend = memoryBackend({ empty: '' });
|
|
367
374
|
const host = localHost(backend);
|
|
368
|
-
expect(getStorageItemOr(host, 'missing', 'fallback')).toEqual({ reason: 'ok', value: 'fallback' });
|
|
369
|
-
expect(getStorageItemOr(host, 'empty', 'fallback')).toEqual({ reason: 'ok', value: '' });
|
|
375
|
+
expect(getStorageItemOr(host.storage.local, 'missing', 'fallback')).toEqual({ reason: 'ok', value: 'fallback' });
|
|
376
|
+
expect(getStorageItemOr(host.storage.local, 'empty', 'fallback')).toEqual({ reason: 'ok', value: '' });
|
|
370
377
|
backend.getFailures.set('denied', 'security-denied');
|
|
371
|
-
expect(getStorageItemOr(host, 'denied', 'fallback')).toEqual({
|
|
378
|
+
expect(getStorageItemOr(host.storage.local, 'denied', 'fallback')).toEqual({
|
|
379
|
+
reason: 'security-denied',
|
|
380
|
+
value: null,
|
|
381
|
+
});
|
|
372
382
|
});
|
|
373
383
|
});
|
|
374
384
|
|
|
@@ -376,7 +386,10 @@ describe('getStorageItemPresence', () => {
|
|
|
376
386
|
it('returns null payload on provider failure instead of false', () => {
|
|
377
387
|
const backend = memoryBackend();
|
|
378
388
|
backend.getFailures.set('key', 'read-failed');
|
|
379
|
-
expect(getStorageItemPresence(localHost(backend), 'key')).toEqual({
|
|
389
|
+
expect(getStorageItemPresence(localHost(backend).storage.local, 'key')).toEqual({
|
|
390
|
+
reason: 'read-failed',
|
|
391
|
+
value: null,
|
|
392
|
+
});
|
|
380
393
|
});
|
|
381
394
|
});
|
|
382
395
|
|
|
@@ -384,7 +397,7 @@ describe('getStorageItems', () => {
|
|
|
384
397
|
it('stops on first failure and returns no partial array', () => {
|
|
385
398
|
const backend = memoryBackend({ a: '1', c: '3' });
|
|
386
399
|
backend.getFailures.set('b', 'read-failed');
|
|
387
|
-
expect(getStorageItems(localHost(backend), ['a', 'b', 'c'])).toEqual({
|
|
400
|
+
expect(getStorageItems(localHost(backend).storage.local, ['a', 'b', 'c'])).toEqual({
|
|
388
401
|
failedKey: 'b',
|
|
389
402
|
reason: 'read-failed',
|
|
390
403
|
value: null,
|
|
@@ -397,18 +410,18 @@ describe('getStorageJSON', () => {
|
|
|
397
410
|
it('keeps miss and stored null ordinary while identifying malformed input', () => {
|
|
398
411
|
const backend = memoryBackend({ bad: '{', null: 'null', value: '{"x":1}' });
|
|
399
412
|
const host = localHost(backend);
|
|
400
|
-
expect(getStorageJSON<{ x: number }>(host, 'value')).toEqual({ reason: 'ok', value: { x: 1 } });
|
|
401
|
-
expect(getStorageJSON(host, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
402
|
-
expect(getStorageJSON(host, 'null')).toEqual({ reason: 'ok', value: null });
|
|
403
|
-
expect(getStorageJSON(host, 'bad')).toEqual({ reason: 'parse-failed', value: null });
|
|
413
|
+
expect(getStorageJSON<{ x: number }>(host.storage.local, 'value')).toEqual({ reason: 'ok', value: { x: 1 } });
|
|
414
|
+
expect(getStorageJSON(host.storage.local, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
415
|
+
expect(getStorageJSON(host.storage.local, 'null')).toEqual({ reason: 'ok', value: null });
|
|
416
|
+
expect(getStorageJSON(host.storage.local, 'bad')).toEqual({ reason: 'parse-failed', value: null });
|
|
404
417
|
});
|
|
405
418
|
});
|
|
406
419
|
|
|
407
420
|
describe('getStorageJSONOr', () => {
|
|
408
421
|
it('returns fallback with the parse reason but preserves a stored null', () => {
|
|
409
422
|
const host = localHost(memoryBackend({ bad: '{', null: 'null' }));
|
|
410
|
-
expect(getStorageJSONOr(host, 'bad', { x: 2 })).toEqual({ reason: 'parse-failed', value: { x: 2 } });
|
|
411
|
-
expect(getStorageJSONOr(host, 'null', { x: 2 })).toEqual({ reason: 'ok', value: null });
|
|
423
|
+
expect(getStorageJSONOr(host.storage.local, 'bad', { x: 2 })).toEqual({ reason: 'parse-failed', value: { x: 2 } });
|
|
424
|
+
expect(getStorageJSONOr(host.storage.local, 'null', { x: 2 })).toEqual({ reason: 'ok', value: null });
|
|
412
425
|
});
|
|
413
426
|
});
|
|
414
427
|
|
|
@@ -416,25 +429,25 @@ describe('getStorageKeys', () => {
|
|
|
416
429
|
it('distinguishes successful empty keys from a failed query', () => {
|
|
417
430
|
const backend = memoryBackend();
|
|
418
431
|
const host = localHost(backend);
|
|
419
|
-
expect(getStorageKeys(host)).toEqual({ reason: 'ok', value: [] });
|
|
432
|
+
expect(getStorageKeys(host.storage.local)).toEqual({ reason: 'ok', value: [] });
|
|
420
433
|
backend.keysFailure = 'runtime-unavailable';
|
|
421
|
-
expect(getStorageKeys(host)).toEqual({ reason: 'runtime-unavailable', value: null });
|
|
434
|
+
expect(getStorageKeys(host.storage.local)).toEqual({ reason: 'runtime-unavailable', value: null });
|
|
422
435
|
});
|
|
423
436
|
});
|
|
424
437
|
|
|
425
438
|
describe('getStorageNumber', () => {
|
|
426
439
|
it('reports nonfinite stored values as parse failures', () => {
|
|
427
440
|
const host = localHost(memoryBackend({ bad: 'Infinity', number: '2.5' }));
|
|
428
|
-
expect(getStorageNumber(host, 'number')).toEqual({ reason: 'ok', value: 2.5 });
|
|
429
|
-
expect(getStorageNumber(host, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
430
|
-
expect(getStorageNumber(host, 'bad')).toEqual({ reason: 'parse-failed', value: null });
|
|
441
|
+
expect(getStorageNumber(host.storage.local, 'number')).toEqual({ reason: 'ok', value: 2.5 });
|
|
442
|
+
expect(getStorageNumber(host.storage.local, 'missing')).toEqual({ reason: 'ok', value: null });
|
|
443
|
+
expect(getStorageNumber(host.storage.local, 'bad')).toEqual({ reason: 'parse-failed', value: null });
|
|
431
444
|
});
|
|
432
445
|
});
|
|
433
446
|
|
|
434
447
|
describe('getStorageNumberOr', () => {
|
|
435
448
|
it('retains the fallback parse reason', () => {
|
|
436
449
|
const host = localHost(memoryBackend({ bad: 'Infinity' }));
|
|
437
|
-
expect(getStorageNumberOr(host, 'bad', 7)).toEqual({ reason: 'parse-failed', value: 7 });
|
|
450
|
+
expect(getStorageNumberOr(host.storage.local, 'bad', 7)).toEqual({ reason: 'parse-failed', value: 7 });
|
|
438
451
|
});
|
|
439
452
|
});
|
|
440
453
|
|
|
@@ -447,10 +460,12 @@ describe('initializeStorageSignals', () => {
|
|
|
447
460
|
describe('migrateStorage', () => {
|
|
448
461
|
it('validates the entire plan before reading storage', () => {
|
|
449
462
|
const backend = memoryBackend();
|
|
450
|
-
expect(() => migrateStorage(localHost(backend), null, [{ migrate() {}, version: 0 }])).toThrow(
|
|
463
|
+
expect(() => migrateStorage(localHost(backend).storage.local, null, [{ migrate() {}, version: 0 }])).toThrow(
|
|
464
|
+
RangeError,
|
|
465
|
+
);
|
|
451
466
|
expect(backend.getCalls).toBe(0);
|
|
452
467
|
expect(() =>
|
|
453
|
-
migrateStorage(localHost(backend), null, [
|
|
468
|
+
migrateStorage(localHost(backend).storage.local, null, [
|
|
454
469
|
{ migrate() {}, version: 1 },
|
|
455
470
|
{ migrate() {}, version: 1 },
|
|
456
471
|
]),
|
|
@@ -460,7 +475,9 @@ describe('migrateStorage', () => {
|
|
|
460
475
|
it('runs zero callbacks after provider read failure or invalid stored version', () => {
|
|
461
476
|
const backend = memoryBackend({ __flight_storage_version: 'not-a-version' });
|
|
462
477
|
let callbacks = 0;
|
|
463
|
-
expect(
|
|
478
|
+
expect(
|
|
479
|
+
migrateStorage(localHost(backend).storage.local, null, [{ migrate: () => callbacks++, version: 1 }]),
|
|
480
|
+
).toEqual({
|
|
464
481
|
failedVersion: null,
|
|
465
482
|
reason: 'version-parse-failed',
|
|
466
483
|
stage: 'read-version',
|
|
@@ -468,7 +485,9 @@ describe('migrateStorage', () => {
|
|
|
468
485
|
});
|
|
469
486
|
expect(callbacks).toBe(0);
|
|
470
487
|
backend.getFailures.set('__flight_storage_version', 'security-denied');
|
|
471
|
-
expect(
|
|
488
|
+
expect(
|
|
489
|
+
migrateStorage(localHost(backend).storage.local, null, [{ migrate: () => callbacks++, version: 1 }]),
|
|
490
|
+
).toEqual({
|
|
472
491
|
failedVersion: null,
|
|
473
492
|
reason: 'security-denied',
|
|
474
493
|
stage: 'read-version',
|
|
@@ -480,7 +499,7 @@ describe('migrateStorage', () => {
|
|
|
480
499
|
it('checkpoints after every callback in sorted order', () => {
|
|
481
500
|
const backend = memoryBackend();
|
|
482
501
|
const seen: string[] = [];
|
|
483
|
-
const result = migrateStorage(localHost(backend), null, [
|
|
502
|
+
const result = migrateStorage(localHost(backend).storage.local, null, [
|
|
484
503
|
{
|
|
485
504
|
migrate() {
|
|
486
505
|
seen.push(`two:${backend.data.__flight_storage_version}`);
|
|
@@ -507,7 +526,7 @@ describe('migrateStorage', () => {
|
|
|
507
526
|
{ migrate() {}, version: 1 },
|
|
508
527
|
{ migrate: () => versionTwoCalls++, version: 2 },
|
|
509
528
|
];
|
|
510
|
-
expect(migrateStorage(localHost(backend), null, migrations)).toEqual({
|
|
529
|
+
expect(migrateStorage(localHost(backend).storage.local, null, migrations)).toEqual({
|
|
511
530
|
failedVersion: 2,
|
|
512
531
|
reason: 'write-failed',
|
|
513
532
|
stage: 'checkpoint',
|
|
@@ -515,14 +534,14 @@ describe('migrateStorage', () => {
|
|
|
515
534
|
});
|
|
516
535
|
expect(versionTwoCalls).toBe(1);
|
|
517
536
|
backend.setItem = original;
|
|
518
|
-
expect(migrateStorage(localHost(backend), null, migrations).reason).toBe('ok');
|
|
537
|
+
expect(migrateStorage(localHost(backend).storage.local, null, migrations).reason).toBe('ok');
|
|
519
538
|
expect(versionTwoCalls).toBe(2);
|
|
520
539
|
});
|
|
521
540
|
|
|
522
541
|
it('propagates callback exceptions without rolling back prior checkpoints', () => {
|
|
523
542
|
const backend = memoryBackend();
|
|
524
543
|
expect(() =>
|
|
525
|
-
migrateStorage(localHost(backend), null, [
|
|
544
|
+
migrateStorage(localHost(backend).storage.local, null, [
|
|
526
545
|
{ migrate() {}, version: 1 },
|
|
527
546
|
{
|
|
528
547
|
migrate: () => {
|
|
@@ -543,7 +562,7 @@ describe('removeNamespacedStorageItem', () => {
|
|
|
543
562
|
const signals = createStorageSignals();
|
|
544
563
|
const changes: StorageChange[] = [];
|
|
545
564
|
connectSignal(signals.onChange, (change) => changes.push({ ...change }));
|
|
546
|
-
expect(removeNamespacedStorageItem(host, { prefix: 'ns' }, 'a', signals)).toEqual({ reason: 'ok' });
|
|
565
|
+
expect(removeNamespacedStorageItem(host.storage.local, { prefix: 'ns' }, 'a', signals)).toEqual({ reason: 'ok' });
|
|
547
566
|
expect(changes).toEqual([{ key: 'ns.a', newValue: null, oldValue: '1' }]);
|
|
548
567
|
});
|
|
549
568
|
});
|
|
@@ -554,7 +573,7 @@ describe('removeStorageItem', () => {
|
|
|
554
573
|
const signals = createStorageSignals();
|
|
555
574
|
const changes: StorageChange[] = [];
|
|
556
575
|
connectSignal(signals.onChange, (change) => changes.push({ ...change }));
|
|
557
|
-
expect(removeStorageItem(localHost(backend), 'missing', signals)).toEqual({ reason: 'ok' });
|
|
576
|
+
expect(removeStorageItem(localHost(backend).storage.local, 'missing', signals)).toEqual({ reason: 'ok' });
|
|
558
577
|
expect(changes).toEqual([]);
|
|
559
578
|
});
|
|
560
579
|
});
|
|
@@ -563,7 +582,7 @@ describe('removeStorageItems', () => {
|
|
|
563
582
|
it('stops at the first failure and reports completed removals', () => {
|
|
564
583
|
const backend = memoryBackend({ a: '1', b: '2', c: '3' });
|
|
565
584
|
backend.removeFailures.set('b', 'security-denied');
|
|
566
|
-
expect(removeStorageItems(localHost(backend), ['a', 'b', 'c'])).toEqual({
|
|
585
|
+
expect(removeStorageItems(localHost(backend).storage.local, ['a', 'b', 'c'])).toEqual({
|
|
567
586
|
completed: 1,
|
|
568
587
|
failedKey: 'b',
|
|
569
588
|
reason: 'security-denied',
|
|
@@ -576,7 +595,7 @@ describe('setNamespacedStorageItem', () => {
|
|
|
576
595
|
it('prefixes namespaced keys', () => {
|
|
577
596
|
const backend = memoryBackend();
|
|
578
597
|
const host = localHost(backend);
|
|
579
|
-
expect(setNamespacedStorageItem(host, { prefix: 'app' }, 'key', 'value')).toEqual({ reason: 'ok' });
|
|
598
|
+
expect(setNamespacedStorageItem(host.storage.local, { prefix: 'app' }, 'key', 'value')).toEqual({ reason: 'ok' });
|
|
580
599
|
expect(backend.data).toEqual({ 'app.key': 'value' });
|
|
581
600
|
});
|
|
582
601
|
});
|
|
@@ -585,7 +604,7 @@ describe('setStorageBoolean', () => {
|
|
|
585
604
|
it('serializes booleans', () => {
|
|
586
605
|
const backend = memoryBackend();
|
|
587
606
|
const host = localHost(backend);
|
|
588
|
-
expect(setStorageBoolean(host, 'flag', true)).toEqual({ reason: 'ok' });
|
|
607
|
+
expect(setStorageBoolean(host.storage.local, 'flag', true)).toEqual({ reason: 'ok' });
|
|
589
608
|
expect(backend.data).toEqual({ flag: 'true' });
|
|
590
609
|
});
|
|
591
610
|
});
|
|
@@ -595,15 +614,15 @@ describe('setStorageItem', () => {
|
|
|
595
614
|
const backend = memoryBackend({ key: 'old' });
|
|
596
615
|
const host = localHost(backend);
|
|
597
616
|
const signals = createStorageSignals();
|
|
598
|
-
expect(setStorageItem(host, 'key', 'unobserved', signals)).toEqual({ reason: 'ok' });
|
|
617
|
+
expect(setStorageItem(host.storage.local, 'key', 'unobserved', signals)).toEqual({ reason: 'ok' });
|
|
599
618
|
expect(backend.getCalls).toBe(0);
|
|
600
619
|
const changes: StorageChange[] = [];
|
|
601
620
|
connectSignal(signals.onChange, (change) => changes.push({ ...change }));
|
|
602
621
|
backend.setFailures.set('key', 'quota-exceeded');
|
|
603
|
-
expect(setStorageItem(host, 'key', 'failed', signals)).toEqual({ reason: 'quota-exceeded' });
|
|
622
|
+
expect(setStorageItem(host.storage.local, 'key', 'failed', signals)).toEqual({ reason: 'quota-exceeded' });
|
|
604
623
|
expect(changes).toEqual([]);
|
|
605
624
|
backend.setFailures.delete('key');
|
|
606
|
-
expect(setStorageItem(host, 'key', 'new', signals)).toEqual({ reason: 'ok' });
|
|
625
|
+
expect(setStorageItem(host.storage.local, 'key', 'new', signals)).toEqual({ reason: 'ok' });
|
|
607
626
|
expect(changes).toEqual([{ key: 'key', newValue: 'new', oldValue: 'unobserved' }]);
|
|
608
627
|
});
|
|
609
628
|
});
|
|
@@ -612,7 +631,7 @@ describe('setStorageItems', () => {
|
|
|
612
631
|
it('stops after a failed write and exposes completed world state', () => {
|
|
613
632
|
const backend = memoryBackend();
|
|
614
633
|
backend.setFailures.set('b', 'quota-exceeded');
|
|
615
|
-
expect(setStorageItems(localHost(backend), { a: '1', b: '2', c: '3' })).toEqual({
|
|
634
|
+
expect(setStorageItems(localHost(backend).storage.local, { a: '1', b: '2', c: '3' })).toEqual({
|
|
616
635
|
completed: 1,
|
|
617
636
|
failedKey: 'b',
|
|
618
637
|
reason: 'quota-exceeded',
|
|
@@ -627,9 +646,9 @@ describe('setStorageJSON', () => {
|
|
|
627
646
|
const host = localHost(backend);
|
|
628
647
|
const cyclic: { self?: unknown } = {};
|
|
629
648
|
cyclic.self = cyclic;
|
|
630
|
-
expect(setStorageJSON(host, 'cyclic', cyclic)).toEqual({ reason: 'serialization-failed' });
|
|
631
|
-
expect(setStorageJSON(host, 'undefined', undefined)).toEqual({ reason: 'serialization-failed' });
|
|
632
|
-
expect(setStorageJSON(host, 'value', { x: 1 })).toEqual({ reason: 'ok' });
|
|
649
|
+
expect(setStorageJSON(host.storage.local, 'cyclic', cyclic)).toEqual({ reason: 'serialization-failed' });
|
|
650
|
+
expect(setStorageJSON(host.storage.local, 'undefined', undefined)).toEqual({ reason: 'serialization-failed' });
|
|
651
|
+
expect(setStorageJSON(host.storage.local, 'value', { x: 1 })).toEqual({ reason: 'ok' });
|
|
633
652
|
expect(backend.data.value).toBe('{"x":1}');
|
|
634
653
|
});
|
|
635
654
|
});
|
|
@@ -637,9 +656,9 @@ describe('setStorageNumber', () => {
|
|
|
637
656
|
it('stores finite values and throws RangeError for programmer misuse', () => {
|
|
638
657
|
const backend = memoryBackend();
|
|
639
658
|
const host = localHost(backend);
|
|
640
|
-
expect(setStorageNumber(host, 'number', 2.5)).toEqual({ reason: 'ok' });
|
|
659
|
+
expect(setStorageNumber(host.storage.local, 'number', 2.5)).toEqual({ reason: 'ok' });
|
|
641
660
|
expect(backend.data.number).toBe('2.5');
|
|
642
|
-
expect(() => setStorageNumber(host, 'nan', Number.NaN)).toThrow(RangeError);
|
|
643
|
-
expect(() => setStorageNumber(host, 'infinity', Infinity)).toThrow(RangeError);
|
|
661
|
+
expect(() => setStorageNumber(host.storage.local, 'nan', Number.NaN)).toThrow(RangeError);
|
|
662
|
+
expect(() => setStorageNumber(host.storage.local, 'infinity', Infinity)).toThrow(RangeError);
|
|
644
663
|
});
|
|
645
664
|
});
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { allocateEntity, finishEntity } from '@flighthq/entity/contract';
|
|
2
2
|
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
StoragePersistenceQueryBackend,
|
|
6
|
-
StoragePersistenceRequestBackend,
|
|
3
|
+
HostStoragePersistenceQueryProvider,
|
|
4
|
+
HostStoragePersistenceRequestProvider,
|
|
7
5
|
StoragePersistenceResult,
|
|
8
6
|
} from '@flighthq/types/contract';
|
|
9
7
|
import { describe, expect, it, vi } from 'vitest';
|
|
@@ -26,7 +24,7 @@ describe('getStoragePersistence', () => {
|
|
|
26
24
|
})(),
|
|
27
25
|
);
|
|
28
26
|
|
|
29
|
-
await expect(getStoragePersistence(host)).resolves.toEqual(result);
|
|
27
|
+
await expect(getStoragePersistence(host.storage.persistenceQuery)).resolves.toEqual(result);
|
|
30
28
|
expect(getPersistence).toHaveBeenCalledOnce();
|
|
31
29
|
});
|
|
32
30
|
|
|
@@ -47,8 +45,8 @@ describe('getStoragePersistence', () => {
|
|
|
47
45
|
})();
|
|
48
46
|
let reads = 0;
|
|
49
47
|
const storage = { persistenceRequest: request } as {
|
|
50
|
-
persistenceQuery:
|
|
51
|
-
persistenceRequest:
|
|
48
|
+
persistenceQuery: HostStoragePersistenceQueryProvider;
|
|
49
|
+
persistenceRequest: HostStoragePersistenceRequestProvider;
|
|
52
50
|
};
|
|
53
51
|
Object.defineProperty(storage, 'persistenceQuery', {
|
|
54
52
|
get() {
|
|
@@ -57,7 +55,7 @@ describe('getStoragePersistence', () => {
|
|
|
57
55
|
},
|
|
58
56
|
});
|
|
59
57
|
|
|
60
|
-
await expect(getStoragePersistence({ storage })).resolves.toEqual({
|
|
58
|
+
await expect(getStoragePersistence({ storage }.storage.persistenceQuery)).resolves.toEqual({
|
|
61
59
|
outcome: 'persistent',
|
|
62
60
|
permissionState: 'granted',
|
|
63
61
|
});
|
|
@@ -82,7 +80,7 @@ describe('requestStoragePersistence', () => {
|
|
|
82
80
|
})(),
|
|
83
81
|
);
|
|
84
82
|
|
|
85
|
-
await expect(requestStoragePersistence(host)).resolves.toEqual(result);
|
|
83
|
+
await expect(requestStoragePersistence(host.storage.persistenceRequest)).resolves.toEqual(result);
|
|
86
84
|
expect(requestPersistence).toHaveBeenCalledOnce();
|
|
87
85
|
});
|
|
88
86
|
|
|
@@ -103,8 +101,8 @@ describe('requestStoragePersistence', () => {
|
|
|
103
101
|
})();
|
|
104
102
|
let reads = 0;
|
|
105
103
|
const storage = { persistenceQuery: query } as {
|
|
106
|
-
persistenceQuery:
|
|
107
|
-
persistenceRequest:
|
|
104
|
+
persistenceQuery: HostStoragePersistenceQueryProvider;
|
|
105
|
+
persistenceRequest: HostStoragePersistenceRequestProvider;
|
|
108
106
|
};
|
|
109
107
|
Object.defineProperty(storage, 'persistenceRequest', {
|
|
110
108
|
get() {
|
|
@@ -113,7 +111,7 @@ describe('requestStoragePersistence', () => {
|
|
|
113
111
|
},
|
|
114
112
|
});
|
|
115
113
|
|
|
116
|
-
await expect(requestStoragePersistence({ storage })).resolves.toEqual({
|
|
114
|
+
await expect(requestStoragePersistence({ storage }.storage.persistenceRequest)).resolves.toEqual({
|
|
117
115
|
outcome: 'best-effort',
|
|
118
116
|
permissionState: null,
|
|
119
117
|
});
|
|
@@ -122,10 +120,14 @@ describe('requestStoragePersistence', () => {
|
|
|
122
120
|
});
|
|
123
121
|
});
|
|
124
122
|
|
|
125
|
-
function queryHost(backend:
|
|
123
|
+
function queryHost(backend: HostStoragePersistenceQueryProvider): {
|
|
124
|
+
readonly storage: { readonly persistenceQuery: HostStoragePersistenceQueryProvider };
|
|
125
|
+
} {
|
|
126
126
|
return { storage: { persistenceQuery: backend } };
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
function requestHost(backend:
|
|
129
|
+
function requestHost(backend: HostStoragePersistenceRequestProvider): {
|
|
130
|
+
readonly storage: { readonly persistenceRequest: HostStoragePersistenceRequestProvider };
|
|
131
|
+
} {
|
|
130
132
|
return { storage: { persistenceRequest: backend } };
|
|
131
133
|
}
|