v1.2.2 - Fix network error on background, auto-retry streaming with reconnect
This commit is contained in:
16
node_modules/@kvs/storage/lib/JSONValue.d.ts
generated
vendored
Normal file
16
node_modules/@kvs/storage/lib/JSONValue.d.ts
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
Matches a JSON object.
|
||||
This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from. Don't use this as a direct return type as the user would have to double-cast it: `jsonObject as unknown as CustomResponse`. Instead, you could extend your CustomResponse type from it to ensure your type only uses JSON-compatible types: `interface CustomResponse extends JsonObject { … }`.
|
||||
*/
|
||||
export type JsonObject = {
|
||||
[Key in string]?: JsonValue;
|
||||
};
|
||||
/**
|
||||
Matches a JSON array.
|
||||
*/
|
||||
export interface JsonArray extends Array<JsonValue> {
|
||||
}
|
||||
/**
|
||||
Matches any valid JSON value.
|
||||
*/
|
||||
export type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
|
||||
3
node_modules/@kvs/storage/lib/JSONValue.js
generated
vendored
Normal file
3
node_modules/@kvs/storage/lib/JSONValue.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=JSONValue.js.map
|
||||
1
node_modules/@kvs/storage/lib/JSONValue.js.map
generated
vendored
Normal file
1
node_modules/@kvs/storage/lib/JSONValue.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"JSONValue.js","sourceRoot":"","sources":["../src/JSONValue.ts"],"names":[],"mappings":""}
|
||||
2
node_modules/@kvs/storage/lib/index.d.ts
generated
vendored
Normal file
2
node_modules/@kvs/storage/lib/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
export { kvsStorage, deleteItem, setItem, getItem, clearItem, createIterator, hasItem, KvsStorage, KVSStorageKey, KvsStorageOptions } from "./storage";
|
||||
export { JsonValue, JsonArray, JsonObject } from "./JSONValue";
|
||||
12
node_modules/@kvs/storage/lib/index.js
generated
vendored
Normal file
12
node_modules/@kvs/storage/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.hasItem = exports.createIterator = exports.clearItem = exports.getItem = exports.setItem = exports.deleteItem = exports.kvsStorage = void 0;
|
||||
var storage_1 = require("./storage");
|
||||
Object.defineProperty(exports, "kvsStorage", { enumerable: true, get: function () { return storage_1.kvsStorage; } });
|
||||
Object.defineProperty(exports, "deleteItem", { enumerable: true, get: function () { return storage_1.deleteItem; } });
|
||||
Object.defineProperty(exports, "setItem", { enumerable: true, get: function () { return storage_1.setItem; } });
|
||||
Object.defineProperty(exports, "getItem", { enumerable: true, get: function () { return storage_1.getItem; } });
|
||||
Object.defineProperty(exports, "clearItem", { enumerable: true, get: function () { return storage_1.clearItem; } });
|
||||
Object.defineProperty(exports, "createIterator", { enumerable: true, get: function () { return storage_1.createIterator; } });
|
||||
Object.defineProperty(exports, "hasItem", { enumerable: true, get: function () { return storage_1.hasItem; } });
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
node_modules/@kvs/storage/lib/index.js.map
generated
vendored
Normal file
1
node_modules/@kvs/storage/lib/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAWmB;AAVf,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,kGAAA,OAAO,OAAA;AACP,kGAAA,OAAO,OAAA;AACP,oGAAA,SAAS,OAAA;AACT,yGAAA,cAAc,OAAA;AACd,kGAAA,OAAO,OAAA"}
|
||||
20
node_modules/@kvs/storage/lib/storage.d.ts
generated
vendored
Normal file
20
node_modules/@kvs/storage/lib/storage.d.ts
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
import type { KVS, KVSOptions, StoreNames, StoreValue } from "@kvs/types";
|
||||
import { JsonValue } from "./JSONValue";
|
||||
export type KVSStorageKey = string;
|
||||
export declare const getItem: <Schema extends StorageSchema>(storage: Storage, tableName: string, key: StoreNames<Schema>) => any;
|
||||
export declare const hasItem: <Schema extends StorageSchema>(storage: Storage, tableName: string, key: StoreNames<Schema>) => boolean;
|
||||
export declare const setItem: <Schema extends StorageSchema>(storage: Storage, tableName: string, key: StoreNames<Schema>, value: StoreValue<Schema, StoreNames<Schema>> | undefined) => boolean | void;
|
||||
export declare const clearItem: (storage: Storage, tableName: string, kvsVersionKey: string, options: {
|
||||
force: boolean;
|
||||
}) => void;
|
||||
export declare const deleteItem: <Schema extends StorageSchema>(storage: Storage, tableName: string, key: StoreNames<Schema>) => boolean;
|
||||
export declare function createIterator<Schema extends StorageSchema>(storage: Storage, tableName: string, kvsVersionKey: string): Iterator<[StoreNames<Schema>, StoreValue<Schema, StoreNames<Schema>>]>;
|
||||
export type StorageSchema = {
|
||||
[index: string]: JsonValue;
|
||||
};
|
||||
export type KvsStorage<Schema extends StorageSchema> = KVS<Schema>;
|
||||
export type KvsStorageOptions<Schema extends StorageSchema> = KVSOptions<Schema> & {
|
||||
kvsVersionKey?: string;
|
||||
storage: Storage;
|
||||
};
|
||||
export declare const kvsStorage: <Schema extends StorageSchema>(options: KvsStorageOptions<Schema>) => Promise<KvsStorage<Schema>>;
|
||||
183
node_modules/@kvs/storage/lib/storage.js
generated
vendored
Normal file
183
node_modules/@kvs/storage/lib/storage.js
generated
vendored
Normal file
@@ -0,0 +1,183 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.kvsStorage = exports.deleteItem = exports.clearItem = exports.setItem = exports.hasItem = exports.getItem = void 0;
|
||||
exports.createIterator = createIterator;
|
||||
function invariant(condition, message) {
|
||||
if (condition) {
|
||||
return;
|
||||
}
|
||||
throw new Error(message);
|
||||
}
|
||||
const TABLE_KEY_MARKER = ".__.";
|
||||
const getItem = (storage, tableName, key) => {
|
||||
const storageKey = `${tableName}${TABLE_KEY_MARKER}${String(key)}`;
|
||||
const item = storage.getItem(storageKey);
|
||||
return item !== null ? JSON.parse(item) : undefined;
|
||||
};
|
||||
exports.getItem = getItem;
|
||||
const hasItem = (storage, tableName, key) => {
|
||||
const storageKey = `${tableName}${TABLE_KEY_MARKER}${String(key)}`;
|
||||
return storage.getItem(storageKey) !== null;
|
||||
};
|
||||
exports.hasItem = hasItem;
|
||||
const setItem = (storage, tableName, key, value) => {
|
||||
// It is difference with IndexedDB implementation.
|
||||
// This behavior compatible with localStorage.
|
||||
if (value === undefined) {
|
||||
return (0, exports.deleteItem)(storage, tableName, key);
|
||||
}
|
||||
const storageKey = `${tableName}${TABLE_KEY_MARKER}${String(key)}`;
|
||||
return storage.setItem(storageKey, JSON.stringify(value));
|
||||
};
|
||||
exports.setItem = setItem;
|
||||
const clearItem = (storage, tableName, kvsVersionKey, options) => {
|
||||
// TODO: kvsVersionKey is special type
|
||||
const currentVersion = (0, exports.getItem)(storage, tableName, kvsVersionKey);
|
||||
// clear all
|
||||
storage.clear();
|
||||
// if option.force is true, does not restore metadata.
|
||||
if (options.force) {
|
||||
return;
|
||||
}
|
||||
// set kvs version again
|
||||
if (currentVersion !== undefined) {
|
||||
(0, exports.setItem)(storage, tableName, kvsVersionKey, currentVersion);
|
||||
}
|
||||
};
|
||||
exports.clearItem = clearItem;
|
||||
const deleteItem = (storage, tableName, key) => {
|
||||
const storageKey = `${tableName}${TABLE_KEY_MARKER}${String(key)}`;
|
||||
try {
|
||||
storage.removeItem(storageKey);
|
||||
return true;
|
||||
}
|
||||
catch (_a) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
exports.deleteItem = deleteItem;
|
||||
function* createIterator(storage, tableName, kvsVersionKey) {
|
||||
const tableKeyPrefix = `${tableName}${TABLE_KEY_MARKER}`;
|
||||
for (let i = 0; i < storage.length; i++) {
|
||||
const key = storage.key(i);
|
||||
if (!key) {
|
||||
continue;
|
||||
}
|
||||
// skip another storage
|
||||
if (!key.startsWith(tableKeyPrefix)) {
|
||||
continue;
|
||||
}
|
||||
// skip meta key
|
||||
const keyWithoutPrefix = key.replace(tableKeyPrefix, "");
|
||||
if (keyWithoutPrefix === kvsVersionKey) {
|
||||
continue;
|
||||
}
|
||||
const value = (0, exports.getItem)(storage, tableName, keyWithoutPrefix);
|
||||
yield [keyWithoutPrefix, value];
|
||||
}
|
||||
}
|
||||
const DEFAULT_KVS_VERSION = 1;
|
||||
const openStorage = async ({ storage, version, tableName, kvsVersionKey, onUpgrade }) => {
|
||||
// kvsVersionKey is special type
|
||||
// first `oldVersion` is `0`
|
||||
let oldVersion = (0, exports.getItem)(storage, tableName, kvsVersionKey);
|
||||
if (oldVersion === undefined) {
|
||||
(0, exports.setItem)(storage, tableName, kvsVersionKey, DEFAULT_KVS_VERSION);
|
||||
// first `oldVersion` is `0`
|
||||
// https://github.com/azu/kvs/issues/8
|
||||
oldVersion = 0;
|
||||
}
|
||||
// if user set newVersion, upgrade it
|
||||
if (oldVersion !== version) {
|
||||
await onUpgrade({
|
||||
oldVersion,
|
||||
newVersion: version,
|
||||
storage
|
||||
});
|
||||
// save current version if upgrade is success
|
||||
(0, exports.setItem)(storage, tableName, kvsVersionKey, version);
|
||||
return storage;
|
||||
}
|
||||
return storage;
|
||||
};
|
||||
const createStore = ({ tableName, storage, kvsVersionKey }) => {
|
||||
const store = {
|
||||
get(key) {
|
||||
return Promise.resolve().then(() => {
|
||||
return (0, exports.getItem)(storage, tableName, key);
|
||||
});
|
||||
},
|
||||
has(key) {
|
||||
return Promise.resolve().then(() => {
|
||||
return (0, exports.hasItem)(storage, tableName, key);
|
||||
});
|
||||
},
|
||||
set(key, value) {
|
||||
return Promise.resolve()
|
||||
.then(() => {
|
||||
return (0, exports.setItem)(storage, tableName, key, value);
|
||||
})
|
||||
.then(() => {
|
||||
return store;
|
||||
});
|
||||
},
|
||||
clear() {
|
||||
return Promise.resolve().then(() => {
|
||||
return (0, exports.clearItem)(storage, tableName, kvsVersionKey, { force: false });
|
||||
});
|
||||
},
|
||||
delete(key) {
|
||||
return Promise.resolve().then(() => {
|
||||
return (0, exports.deleteItem)(storage, tableName, key);
|
||||
});
|
||||
},
|
||||
dropInstance() {
|
||||
return Promise.resolve().then(() => {
|
||||
return (0, exports.clearItem)(storage, tableName, kvsVersionKey, { force: true });
|
||||
});
|
||||
},
|
||||
close() {
|
||||
// Noop function
|
||||
return Promise.resolve();
|
||||
},
|
||||
[Symbol.asyncIterator]() {
|
||||
const iterator = createIterator(storage, tableName, kvsVersionKey);
|
||||
return {
|
||||
next() {
|
||||
return Promise.resolve().then(() => {
|
||||
return iterator.next();
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
return store;
|
||||
};
|
||||
const kvsStorage = async (options) => {
|
||||
var _a;
|
||||
const { name, version, upgrade, ...kvStorageOptions } = options;
|
||||
invariant(typeof name === "string", "name should be string");
|
||||
invariant(name.length > 0, "name should not be empty");
|
||||
invariant(!name.includes(TABLE_KEY_MARKER), `name can not include ${TABLE_KEY_MARKER}. It is reserved in kvs.`);
|
||||
invariant(typeof version === "number", `version should be number`);
|
||||
const kvsVersionKey = (_a = kvStorageOptions.kvsVersionKey) !== null && _a !== void 0 ? _a : "__kvs_version__";
|
||||
const storage = await openStorage({
|
||||
storage: options.storage,
|
||||
version: options.version,
|
||||
tableName: name,
|
||||
onUpgrade: ({ oldVersion, newVersion, storage }) => {
|
||||
if (!options.upgrade) {
|
||||
return;
|
||||
}
|
||||
return options.upgrade({
|
||||
kvs: createStore({ tableName: name, storage, kvsVersionKey }),
|
||||
oldVersion,
|
||||
newVersion
|
||||
});
|
||||
},
|
||||
kvsVersionKey
|
||||
});
|
||||
return createStore({ tableName: name, storage, kvsVersionKey });
|
||||
};
|
||||
exports.kvsStorage = kvsStorage;
|
||||
//# sourceMappingURL=storage.js.map
|
||||
1
node_modules/@kvs/storage/lib/storage.js.map
generated
vendored
Normal file
1
node_modules/@kvs/storage/lib/storage.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user