dropcap 1.0.0 → 1.4.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/chunk-5N6O5FSZ.js +53 -0
- package/dist/chunk-5N6O5FSZ.js.map +1 -0
- package/dist/chunk-6X6FFIZN.js +9 -0
- package/dist/chunk-6X6FFIZN.js.map +1 -0
- package/dist/chunk-IEKJYSB2.js +38 -0
- package/dist/chunk-IEKJYSB2.js.map +1 -0
- package/dist/chunk-IL3H2YKT.js +20 -0
- package/dist/chunk-IL3H2YKT.js.map +1 -0
- package/dist/chunk-IQMQQI6W.js +35 -0
- package/dist/chunk-IQMQQI6W.js.map +1 -0
- package/dist/chunk-NIQOLOOJ.js +44 -0
- package/dist/chunk-NIQOLOOJ.js.map +1 -0
- package/dist/chunk-OURJLKNI.js +16 -0
- package/dist/chunk-OURJLKNI.js.map +1 -0
- package/dist/chunk-RXAMNVZW.js +9 -0
- package/dist/chunk-RXAMNVZW.js.map +1 -0
- package/dist/chunk-SDOWUYJK.js +1 -0
- package/dist/chunk-SDOWUYJK.js.map +1 -0
- package/dist/chunk-WBZCJMFI.js +14 -0
- package/dist/chunk-WBZCJMFI.js.map +1 -0
- package/dist/chunk-YPFVC6GE.js +29 -0
- package/dist/chunk-YPFVC6GE.js.map +1 -0
- package/dist/idb/idb.d.ts +45 -0
- package/dist/idb/idb.js +200 -0
- package/dist/idb/idb.js.map +1 -0
- package/dist/types/types.js +1 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/utils-color-hash.js +4 -39
- package/dist/utils/utils-color-hash.js.map +1 -0
- package/dist/utils/utils-create-log.js +5 -51
- package/dist/utils/utils-create-log.js.map +1 -0
- package/dist/utils/utils-ensure-array.js +4 -4
- package/dist/utils/utils-ensure-array.js.map +1 -0
- package/dist/utils/utils-is.js +4 -30
- package/dist/utils/utils-is.js.map +1 -0
- package/dist/utils/utils-link.d.ts +3 -0
- package/dist/utils/utils-link.js +8 -0
- package/dist/utils/utils-link.js.map +1 -0
- package/dist/utils/utils-queue.d.ts +2 -2
- package/dist/utils/utils-queue.js +6 -85
- package/dist/utils/utils-queue.js.map +1 -0
- package/dist/utils/utils-safe.js +6 -50
- package/dist/utils/utils-safe.js.map +1 -0
- package/dist/utils/utils-unique.js +4 -11
- package/dist/utils/utils-unique.js.map +1 -0
- package/dist/utils/utils-unit.js +6 -81
- package/dist/utils/utils-unit.js.map +1 -0
- package/dist/utils/utils-wait.js +4 -4
- package/dist/utils/utils-wait.js.map +1 -0
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.js +34 -198
- package/dist/utils/utils.js.map +1 -0
- package/package.json +4 -12
- package/src/types/types.ts +0 -5
- package/src/utils/utils-color-hash.ts +0 -55
- package/src/utils/utils-create-log.ts +0 -16
- package/src/utils/utils-ensure-array.ts +0 -3
- package/src/utils/utils-is.ts +0 -32
- package/src/utils/utils-queue.ts +0 -57
- package/src/utils/utils-safe.ts +0 -23
- package/src/utils/utils-unique.ts +0 -11
- package/src/utils/utils-unit.ts +0 -35
- package/src/utils/utils-wait.ts +0 -3
- package/src/utils/utils.ts +0 -13
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
safe
|
|
3
|
+
} from "./chunk-YPFVC6GE.js";
|
|
4
|
+
|
|
5
|
+
// src/utils/utils-queue.ts
|
|
6
|
+
var Queue = class {
|
|
7
|
+
name;
|
|
8
|
+
tasks = [];
|
|
9
|
+
running = false;
|
|
10
|
+
constructor(name = null) {
|
|
11
|
+
this.name = name;
|
|
12
|
+
}
|
|
13
|
+
async add(fn) {
|
|
14
|
+
const task = { fn, result$: Promise.withResolvers() };
|
|
15
|
+
this.tasks.push(task);
|
|
16
|
+
this.start();
|
|
17
|
+
return await task.result$.promise;
|
|
18
|
+
}
|
|
19
|
+
wrap(fn, thisValue = null) {
|
|
20
|
+
return (async (...args) => {
|
|
21
|
+
return await this.add(() => fn.call(thisValue, ...args));
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async wait() {
|
|
25
|
+
const lastTask = this.tasks.at(-1);
|
|
26
|
+
if (lastTask) await safe(lastTask.result$.promise);
|
|
27
|
+
}
|
|
28
|
+
isEmpty() {
|
|
29
|
+
return this.tasks.length === 0;
|
|
30
|
+
}
|
|
31
|
+
async start() {
|
|
32
|
+
if (this.running) return;
|
|
33
|
+
if (this.isEmpty()) return;
|
|
34
|
+
this.running = true;
|
|
35
|
+
while (this.tasks.length > 0) {
|
|
36
|
+
const task = this.tasks[0];
|
|
37
|
+
if (!task) break;
|
|
38
|
+
const [result, error] = await safe(task.fn);
|
|
39
|
+
this.tasks.shift();
|
|
40
|
+
if (error) {
|
|
41
|
+
task.result$.reject(error);
|
|
42
|
+
} else {
|
|
43
|
+
task.result$.resolve(result);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.running = false;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
Queue
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=chunk-5N6O5FSZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-queue.ts"],"sourcesContent":["import type { AsyncFn } from '../types/types'\nimport { safe } from './utils-safe'\n\nexport type TaskFn<T> = () => Promise<T>\nexport type Task<T = any> = { fn: TaskFn<T>; result$: PromiseWithResolvers<T> }\n\nexport class Queue {\n name: string | null\n tasks: Task[] = []\n private running = false\n\n constructor(name: string | null = null) {\n this.name = name\n }\n\n async add<T>(fn: TaskFn<T>): Promise<T> {\n const task: Task<T> = { fn, result$: Promise.withResolvers<T>() }\n this.tasks.push(task)\n this.start()\n return await task.result$.promise\n }\n\n wrap<T extends AsyncFn>(fn: T, thisValue: unknown = null) {\n return (async (...args: Parameters<T>) => {\n return await this.add(() => fn.call(thisValue, ...args))\n }) as T\n }\n\n async wait() {\n const lastTask = this.tasks.at(-1)\n if (lastTask) await safe(lastTask.result$.promise)\n }\n\n isEmpty() {\n return this.tasks.length === 0\n }\n\n private async start() {\n if (this.running) return\n if (this.isEmpty()) return\n\n this.running = true\n\n while (this.tasks.length > 0) {\n const task = this.tasks[0]\n if (!task) break\n const [result, error] = await safe(task.fn)\n this.tasks.shift()\n if (error) {\n task.result$.reject(error)\n } else {\n task.result$.resolve(result)\n }\n }\n\n this.running = false\n }\n}\n"],"mappings":";;;;;AAMO,IAAM,QAAN,MAAY;AAAA,EACjB;AAAA,EACA,QAAgB,CAAC;AAAA,EACT,UAAU;AAAA,EAElB,YAAY,OAAsB,MAAM;AACtC,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,IAAO,IAA2B;AACtC,UAAM,OAAgB,EAAE,IAAI,SAAS,QAAQ,cAAiB,EAAE;AAChE,SAAK,MAAM,KAAK,IAAI;AACpB,SAAK,MAAM;AACX,WAAO,MAAM,KAAK,QAAQ;AAAA,EAC5B;AAAA,EAEA,KAAwB,IAAO,YAAqB,MAAM;AACxD,YAAQ,UAAU,SAAwB;AACxC,aAAO,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,WAAW,GAAG,IAAI,CAAC;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,OAAO;AACX,UAAM,WAAW,KAAK,MAAM,GAAG,EAAE;AACjC,QAAI,SAAU,OAAM,KAAK,SAAS,QAAQ,OAAO;AAAA,EACnD;AAAA,EAEA,UAAU;AACR,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAc,QAAQ;AACpB,QAAI,KAAK,QAAS;AAClB,QAAI,KAAK,QAAQ,EAAG;AAEpB,SAAK,UAAU;AAEf,WAAO,KAAK,MAAM,SAAS,GAAG;AAC5B,YAAM,OAAO,KAAK,MAAM,CAAC;AACzB,UAAI,CAAC,KAAM;AACX,YAAM,CAAC,QAAQ,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE;AAC1C,WAAK,MAAM,MAAM;AACjB,UAAI,OAAO;AACT,aAAK,QAAQ,OAAO,KAAK;AAAA,MAC3B,OAAO;AACL,aAAK,QAAQ,QAAQ,MAAM;AAAA,MAC7B;AAAA,IACF;AAEA,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-ensure-array.ts"],"sourcesContent":["export function ensureArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value]\n}\n"],"mappings":";AAAO,SAAS,YAAe,OAAqB;AAClD,SAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAC9C;","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createLog
|
|
3
|
+
} from "./chunk-IL3H2YKT.js";
|
|
4
|
+
|
|
5
|
+
// src/utils/utils-unit.ts
|
|
6
|
+
var Unit = class {
|
|
7
|
+
$;
|
|
8
|
+
log = createLog(this.constructor.name);
|
|
9
|
+
#parent = null;
|
|
10
|
+
constructor(parent) {
|
|
11
|
+
this.$ = parent?.$ ?? this;
|
|
12
|
+
this.#parent = parent ?? null;
|
|
13
|
+
}
|
|
14
|
+
closest(Ancestor) {
|
|
15
|
+
let cursor = this.#parent;
|
|
16
|
+
while (cursor) {
|
|
17
|
+
if (cursor instanceof Ancestor) return cursor;
|
|
18
|
+
cursor = cursor.#parent;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
never(message) {
|
|
23
|
+
const details = message ? `: ${message}` : "";
|
|
24
|
+
const error = new Error(`[${this.constructor.name}] This should never happen${details}`);
|
|
25
|
+
Error.captureStackTrace(error, this.never);
|
|
26
|
+
return error;
|
|
27
|
+
}
|
|
28
|
+
Error(message) {
|
|
29
|
+
const error = new Error(`[${this.constructor.name}] ${message}`);
|
|
30
|
+
Error.captureStackTrace(error, this.Error);
|
|
31
|
+
return error;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
Unit
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-IEKJYSB2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-unit.ts"],"sourcesContent":["import type { Cls } from '../types/types'\nimport { createLog } from './utils-create-log'\n\nexport class Unit<TRoot = unknown> {\n $: TRoot\n log = createLog(this.constructor.name)\n #parent: Unit<TRoot> | null = null\n\n constructor(parent?: Unit<TRoot> | null) {\n this.$ = (parent?.$ ?? this) as TRoot\n this.#parent = parent ?? null\n }\n\n closest<T extends Unit<TRoot>>(Ancestor: Cls<T>): T | null {\n let cursor = this.#parent\n while (cursor) {\n if (cursor instanceof Ancestor) return cursor as T\n cursor = cursor.#parent\n }\n return null\n }\n\n never(message?: string) {\n const details = message ? `: ${message}` : ''\n const error = new Error(`[${this.constructor.name}] This should never happen${details}`)\n Error.captureStackTrace(error, this.never)\n return error\n }\n\n Error(message?: string) {\n const error = new Error(`[${this.constructor.name}] ${message}`)\n Error.captureStackTrace(error, this.Error)\n return error\n }\n}\n"],"mappings":";;;;;AAGO,IAAM,OAAN,MAA4B;AAAA,EACjC;AAAA,EACA,MAAM,UAAU,KAAK,YAAY,IAAI;AAAA,EACrC,UAA8B;AAAA,EAE9B,YAAY,QAA6B;AACvC,SAAK,IAAK,QAAQ,KAAK;AACvB,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA,EAEA,QAA+B,UAA4B;AACzD,QAAI,SAAS,KAAK;AAClB,WAAO,QAAQ;AACb,UAAI,kBAAkB,SAAU,QAAO;AACvC,eAAS,OAAO;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAkB;AACtB,UAAM,UAAU,UAAU,KAAK,OAAO,KAAK;AAC3C,UAAM,QAAQ,IAAI,MAAM,IAAI,KAAK,YAAY,IAAI,6BAA6B,OAAO,EAAE;AACvF,UAAM,kBAAkB,OAAO,KAAK,KAAK;AACzC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAkB;AACtB,UAAM,QAAQ,IAAI,MAAM,IAAI,KAAK,YAAY,IAAI,KAAK,OAAO,EAAE;AAC/D,UAAM,kBAAkB,OAAO,KAAK,KAAK;AACzC,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
colorHash
|
|
3
|
+
} from "./chunk-NIQOLOOJ.js";
|
|
4
|
+
|
|
5
|
+
// src/utils/utils-create-log.ts
|
|
6
|
+
function createLog(name) {
|
|
7
|
+
const color = colorHash(name);
|
|
8
|
+
const log = print.bind(null, "log", name, color);
|
|
9
|
+
log.warn = print.bind(null, "warn", name, color);
|
|
10
|
+
log.error = print.bind(null, "error", name, color);
|
|
11
|
+
return log;
|
|
12
|
+
}
|
|
13
|
+
function print(type, name, color, ...args) {
|
|
14
|
+
console[type](`%c[${name}]`, `color: ${color}`, ...args);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
createLog
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=chunk-IL3H2YKT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-create-log.ts"],"sourcesContent":["import type { Fn } from '../types/types'\nimport { colorHash } from './utils-color-hash'\n\nexport type Log = Fn<void> & { warn: Fn<void>; error: Fn<void> }\n\nexport function createLog(name: string) {\n const color = colorHash(name)\n const log = print.bind(null, 'log', name, color) as Log\n log.warn = print.bind(null, 'warn', name, color) as Log['warn']\n log.error = print.bind(null, 'error', name, color) as Log['error']\n return log\n}\n\nfunction print(type: 'log' | 'warn' | 'error', name: string, color: string, ...args: unknown[]) {\n console[type](`%c[${name}]`, `color: ${color}`, ...args)\n}\n"],"mappings":";;;;;AAKO,SAAS,UAAU,MAAc;AACtC,QAAM,QAAQ,UAAU,IAAI;AAC5B,QAAM,MAAM,MAAM,KAAK,MAAM,OAAO,MAAM,KAAK;AAC/C,MAAI,OAAO,MAAM,KAAK,MAAM,QAAQ,MAAM,KAAK;AAC/C,MAAI,QAAQ,MAAM,KAAK,MAAM,SAAS,MAAM,KAAK;AACjD,SAAO;AACT;AAEA,SAAS,MAAM,MAAgC,MAAc,UAAkB,MAAiB;AAC9F,UAAQ,IAAI,EAAE,MAAM,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,IAAI;AACzD;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/utils/utils-is.ts
|
|
2
|
+
var is = {
|
|
3
|
+
null: (v) => v === null,
|
|
4
|
+
undefined: (v) => v === void 0,
|
|
5
|
+
boolean: (v) => typeof v === "boolean",
|
|
6
|
+
number: (v) => typeof v === "number",
|
|
7
|
+
string: (v) => typeof v === "string",
|
|
8
|
+
symbol: (v) => typeof v === "symbol",
|
|
9
|
+
function: (v) => typeof v === "function",
|
|
10
|
+
object: (v) => Object.prototype.toString.call(v) === "[object Object]",
|
|
11
|
+
array: (v) => Array.isArray(v),
|
|
12
|
+
set: (v) => v instanceof Set,
|
|
13
|
+
map: (v) => v instanceof Map,
|
|
14
|
+
blob: (v) => v instanceof Blob,
|
|
15
|
+
date: (v) => v instanceof Date,
|
|
16
|
+
error: (v) => v instanceof Error,
|
|
17
|
+
regex: (v) => v instanceof RegExp,
|
|
18
|
+
promise: (v) => v instanceof Promise,
|
|
19
|
+
uint8Array: (v) => v instanceof Uint8Array,
|
|
20
|
+
uint16Array: (v) => v instanceof Uint16Array,
|
|
21
|
+
uint32Array: (v) => v instanceof Uint32Array,
|
|
22
|
+
nan: (v) => Number.isNaN(v),
|
|
23
|
+
numeric: (v) => !is.nan(Number(v)),
|
|
24
|
+
integer: (v) => Number.isInteger(v),
|
|
25
|
+
absent: (v) => v === null || v === void 0,
|
|
26
|
+
present: (v) => !is.absent(v),
|
|
27
|
+
primitive: (v) => v !== Object(v),
|
|
28
|
+
collection: (v) => is.array(v) || is.object(v),
|
|
29
|
+
compound: (v) => v !== null && typeof v === "object"
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
is
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunk-IQMQQI6W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-is.ts"],"sourcesContent":["import type { Fn, Obj, Arr } from '../types/types'\n\nexport const is = {\n null: (v: unknown) => v === null,\n undefined: (v: unknown) => v === undefined,\n boolean: (v: unknown) => typeof v === 'boolean',\n number: (v: unknown) => typeof v === 'number',\n string: (v: unknown) => typeof v === 'string',\n symbol: (v: unknown) => typeof v === 'symbol',\n function: (v: unknown): v is Fn => typeof v === 'function',\n object: (v: unknown): v is Obj => Object.prototype.toString.call(v) === '[object Object]',\n array: (v: unknown): v is Arr => Array.isArray(v),\n set: (v: unknown) => v instanceof Set,\n map: (v: unknown) => v instanceof Map,\n blob: (v: unknown) => v instanceof Blob,\n date: (v: unknown) => v instanceof Date,\n error: (v: unknown) => v instanceof Error,\n regex: (v: unknown) => v instanceof RegExp,\n promise: (v: unknown) => v instanceof Promise,\n uint8Array: (v: unknown) => v instanceof Uint8Array,\n uint16Array: (v: unknown) => v instanceof Uint16Array,\n uint32Array: (v: unknown) => v instanceof Uint32Array,\n\n nan: (v: unknown) => Number.isNaN(v),\n numeric: (v: unknown) => !is.nan(Number(v)),\n integer: (v: unknown): v is number => Number.isInteger(v),\n absent: (v: unknown) => v === null || v === undefined,\n present: <T>(v: T): v is NonNullable<T> => !is.absent(v),\n primitive: (v: unknown) => v !== Object(v),\n collection: (v: unknown) => is.array(v) || is.object(v),\n compound: (v: unknown) => v !== null && typeof v === 'object',\n}\n"],"mappings":";AAEO,IAAM,KAAK;AAAA,EAChB,MAAM,CAAC,MAAe,MAAM;AAAA,EAC5B,WAAW,CAAC,MAAe,MAAM;AAAA,EACjC,SAAS,CAAC,MAAe,OAAO,MAAM;AAAA,EACtC,QAAQ,CAAC,MAAe,OAAO,MAAM;AAAA,EACrC,QAAQ,CAAC,MAAe,OAAO,MAAM;AAAA,EACrC,QAAQ,CAAC,MAAe,OAAO,MAAM;AAAA,EACrC,UAAU,CAAC,MAAwB,OAAO,MAAM;AAAA,EAChD,QAAQ,CAAC,MAAyB,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AAAA,EACxE,OAAO,CAAC,MAAyB,MAAM,QAAQ,CAAC;AAAA,EAChD,KAAK,CAAC,MAAe,aAAa;AAAA,EAClC,KAAK,CAAC,MAAe,aAAa;AAAA,EAClC,MAAM,CAAC,MAAe,aAAa;AAAA,EACnC,MAAM,CAAC,MAAe,aAAa;AAAA,EACnC,OAAO,CAAC,MAAe,aAAa;AAAA,EACpC,OAAO,CAAC,MAAe,aAAa;AAAA,EACpC,SAAS,CAAC,MAAe,aAAa;AAAA,EACtC,YAAY,CAAC,MAAe,aAAa;AAAA,EACzC,aAAa,CAAC,MAAe,aAAa;AAAA,EAC1C,aAAa,CAAC,MAAe,aAAa;AAAA,EAE1C,KAAK,CAAC,MAAe,OAAO,MAAM,CAAC;AAAA,EACnC,SAAS,CAAC,MAAe,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;AAAA,EAC1C,SAAS,CAAC,MAA4B,OAAO,UAAU,CAAC;AAAA,EACxD,QAAQ,CAAC,MAAe,MAAM,QAAQ,MAAM;AAAA,EAC5C,SAAS,CAAI,MAA8B,CAAC,GAAG,OAAO,CAAC;AAAA,EACvD,WAAW,CAAC,MAAe,MAAM,OAAO,CAAC;AAAA,EACzC,YAAY,CAAC,MAAe,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;AAAA,EACtD,UAAU,CAAC,MAAe,MAAM,QAAQ,OAAO,MAAM;AACvD;","names":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// src/utils/utils-color-hash.ts
|
|
2
|
+
function colorHash(str) {
|
|
3
|
+
let hash = 5381;
|
|
4
|
+
for (let i = 0; i < str.length; i++) {
|
|
5
|
+
hash = hash * 33 ^ str.charCodeAt(i);
|
|
6
|
+
}
|
|
7
|
+
hash >>>= 0;
|
|
8
|
+
const hue = Math.floor(hash * 0.618033988749895 % 1 * 360);
|
|
9
|
+
const sat = 70;
|
|
10
|
+
let light = 50;
|
|
11
|
+
for (let i = 0; i < 20; i++) {
|
|
12
|
+
const rgb = hsl2rgb(hue, sat, light);
|
|
13
|
+
const l = lum(rgb);
|
|
14
|
+
const cW = contrast(1, l);
|
|
15
|
+
const cB = contrast(0, l);
|
|
16
|
+
if (cW >= 4.5 && cB >= 4.5) break;
|
|
17
|
+
light += cW < cB ? -5 : 5;
|
|
18
|
+
}
|
|
19
|
+
const hex = hsl2rgb(hue, sat, light).map((v) => v.toString(16).padStart(2, "0")).join("");
|
|
20
|
+
return `#${hex}`;
|
|
21
|
+
}
|
|
22
|
+
function hsl2rgb(hh, ss, ll) {
|
|
23
|
+
ss /= 100;
|
|
24
|
+
ll /= 100;
|
|
25
|
+
const k = (n) => (n + hh / 30) % 12;
|
|
26
|
+
const a = ss * Math.min(ll, 1 - ll);
|
|
27
|
+
const f = (n) => ll - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
|
|
28
|
+
return [f(0), f(8), f(4)].map((v) => Math.round(v * 255));
|
|
29
|
+
}
|
|
30
|
+
function lum([r, g, b]) {
|
|
31
|
+
const c = (x) => {
|
|
32
|
+
x /= 255;
|
|
33
|
+
return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
|
|
34
|
+
};
|
|
35
|
+
return 0.2126 * c(r) + 0.7152 * c(g) + 0.0722 * c(b);
|
|
36
|
+
}
|
|
37
|
+
function contrast(l1, l2) {
|
|
38
|
+
return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
colorHash
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=chunk-NIQOLOOJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-color-hash.ts"],"sourcesContent":["export type Rgb = [number, number, number]\n\nexport function colorHash(str: string) {\n // Calculate hash (djb2 xor) as 32‑bit unsigned\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i)\n }\n hash >>>= 0\n\n // Calculate hue. Golden‑ratio scramble gives maximum spread for 'near' strings.\n const hue = Math.floor(((hash * 0.618033988749895) % 1) * 360)\n\n // Start with vivid mid‑tone\n const sat = 70\n let light = 50\n\n // Adjust lightness until it reads on both white and black backgrounds.\n for (let i = 0; i < 20; i++) {\n const rgb = hsl2rgb(hue, sat, light)\n const l = lum(rgb)\n const cW = contrast(1, l) // Versus white\n const cB = contrast(0, l) // Versus black\n if (cW >= 4.5 && cB >= 4.5) break // Good on both\n light += cW < cB ? -5 : 5 // Move toward darker or lighter\n }\n\n // Convert to hex\n const hex = hsl2rgb(hue, sat, light)\n .map(v => v.toString(16).padStart(2, '0'))\n .join('')\n\n return `#${hex}`\n}\n\nfunction hsl2rgb(hh: number, ss: number, ll: number): Rgb {\n ss /= 100\n ll /= 100\n const k = (n: number) => (n + hh / 30) % 12\n const a = ss * Math.min(ll, 1 - ll)\n const f = (n: number) => ll - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))\n return [f(0), f(8), f(4)].map(v => Math.round(v * 255)) as Rgb\n}\n\nfunction lum([r, g, b]: Rgb) {\n const c = (x: number) => {\n x /= 255\n return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4\n }\n return 0.2126 * c(r) + 0.7152 * c(g) + 0.0722 * c(b)\n}\n\nfunction contrast(l1: number, l2: number) {\n return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05)\n}\n"],"mappings":";AAEO,SAAS,UAAU,KAAa;AAErC,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,WAAQ,OAAO,KAAM,IAAI,WAAW,CAAC;AAAA,EACvC;AACA,YAAU;AAGV,QAAM,MAAM,KAAK,MAAQ,OAAO,oBAAqB,IAAK,GAAG;AAG7D,QAAM,MAAM;AACZ,MAAI,QAAQ;AAGZ,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAM,MAAM,QAAQ,KAAK,KAAK,KAAK;AACnC,UAAM,IAAI,IAAI,GAAG;AACjB,UAAM,KAAK,SAAS,GAAG,CAAC;AACxB,UAAM,KAAK,SAAS,GAAG,CAAC;AACxB,QAAI,MAAM,OAAO,MAAM,IAAK;AAC5B,aAAS,KAAK,KAAK,KAAK;AAAA,EAC1B;AAGA,QAAM,MAAM,QAAQ,KAAK,KAAK,KAAK,EAChC,IAAI,OAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EACxC,KAAK,EAAE;AAEV,SAAO,IAAI,GAAG;AAChB;AAEA,SAAS,QAAQ,IAAY,IAAY,IAAiB;AACxD,QAAM;AACN,QAAM;AACN,QAAM,IAAI,CAAC,OAAe,IAAI,KAAK,MAAM;AACzC,QAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE;AAClC,QAAM,IAAI,CAAC,MAAc,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,SAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,OAAK,KAAK,MAAM,IAAI,GAAG,CAAC;AACxD;AAEA,SAAS,IAAI,CAAC,GAAG,GAAG,CAAC,GAAQ;AAC3B,QAAM,IAAI,CAAC,MAAc;AACvB,SAAK;AACL,WAAO,KAAK,UAAU,IAAI,UAAU,IAAI,SAAS,UAAU;AAAA,EAC7D;AACA,SAAO,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;AACrD;AAEA,SAAS,SAAS,IAAY,IAAY;AACxC,UAAQ,KAAK,IAAI,IAAI,EAAE,IAAI,SAAS,KAAK,IAAI,IAAI,EAAE,IAAI;AACzD;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/utils/utils-unique.ts
|
|
2
|
+
function unique(items, keyFn) {
|
|
3
|
+
if (!keyFn) return [...new Set(items)];
|
|
4
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5
|
+
return items.filter((item) => {
|
|
6
|
+
const key = keyFn(item);
|
|
7
|
+
if (seen.has(key)) return false;
|
|
8
|
+
seen.add(key);
|
|
9
|
+
return true;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
unique
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-OURJLKNI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-unique.ts"],"sourcesContent":["export function unique<T = unknown>(items: T[], keyFn?: (item: T) => unknown) {\n if (!keyFn) return [...new Set(items)]\n\n const seen = new Set()\n return items.filter(item => {\n const key = keyFn(item)\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n}\n"],"mappings":";AAAO,SAAS,OAAoB,OAAY,OAA8B;AAC5E,MAAI,CAAC,MAAO,QAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAErC,QAAM,OAAO,oBAAI,IAAI;AACrB,SAAO,MAAM,OAAO,UAAQ;AAC1B,UAAM,MAAM,MAAM,IAAI;AACtB,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACT,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-wait.ts"],"sourcesContent":["export async function wait(ms: number) {\n await new Promise(r => setTimeout(r, ms))\n}\n"],"mappings":";AAAA,eAAsB,KAAK,IAAY;AACrC,QAAM,IAAI,QAAQ,OAAK,WAAW,GAAG,EAAE,CAAC;AAC1C;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-SDOWUYJK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
is
|
|
3
|
+
} from "./chunk-IQMQQI6W.js";
|
|
4
|
+
|
|
5
|
+
// src/utils/utils-link.ts
|
|
6
|
+
function link(target, method) {
|
|
7
|
+
if (!is.function(target[method])) throw new Error(`Property '${String(method)}' is not a function`);
|
|
8
|
+
return target[method].bind(target);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
link
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chunk-WBZCJMFI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-link.ts"],"sourcesContent":["import { is } from './utils-is'\n\nexport function link<T, M extends keyof T>(target: T, method: M): T[M] {\n if (!is.function(target[method])) throw new Error(`Property '${String(method)}' is not a function`)\n return target[method].bind(target) as T[M]\n}\n"],"mappings":";;;;;AAEO,SAAS,KAA2B,QAAW,QAAiB;AACrE,MAAI,CAAC,GAAG,SAAS,OAAO,MAAM,CAAC,EAAG,OAAM,IAAI,MAAM,aAAa,OAAO,MAAM,CAAC,qBAAqB;AAClG,SAAO,OAAO,MAAM,EAAE,KAAK,MAAM;AACnC;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
is
|
|
3
|
+
} from "./chunk-IQMQQI6W.js";
|
|
4
|
+
|
|
5
|
+
// src/utils/utils-safe.ts
|
|
6
|
+
async function safe(effect) {
|
|
7
|
+
try {
|
|
8
|
+
const result = is.function(effect) ? await effect() : await effect;
|
|
9
|
+
return [result, null];
|
|
10
|
+
} catch (e) {
|
|
11
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
12
|
+
return [null, error];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function safeSync(effect) {
|
|
16
|
+
try {
|
|
17
|
+
const result = effect();
|
|
18
|
+
return [result, null];
|
|
19
|
+
} catch (e) {
|
|
20
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
21
|
+
return [null, error];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
safe,
|
|
27
|
+
safeSync
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=chunk-YPFVC6GE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/utils-safe.ts"],"sourcesContent":["import { is } from './utils-is'\n\nexport async function safe<T>(\n effect: (() => T | Promise<T>) | Promise<T>,\n): Promise<[T, null] | [null, Error]> {\n try {\n const result = is.function(effect) ? await effect() : await effect\n return [result, null]\n } catch (e) {\n const error = e instanceof Error ? e : new Error(String(e))\n return [null, error]\n }\n}\n\nexport function safeSync<T>(effect: () => T): [T, null] | [null, Error] {\n try {\n const result = effect()\n return [result, null]\n } catch (e) {\n const error = e instanceof Error ? e : new Error(String(e))\n return [null, error]\n }\n}\n"],"mappings":";;;;;AAEA,eAAsB,KACpB,QACoC;AACpC,MAAI;AACF,UAAM,SAAS,GAAG,SAAS,MAAM,IAAI,MAAM,OAAO,IAAI,MAAM;AAC5D,WAAO,CAAC,QAAQ,IAAI;AAAA,EACtB,SAAS,GAAG;AACV,UAAM,QAAQ,aAAa,QAAQ,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC;AAC1D,WAAO,CAAC,MAAM,KAAK;AAAA,EACrB;AACF;AAEO,SAAS,SAAY,QAA4C;AACtE,MAAI;AACF,UAAM,SAAS,OAAO;AACtB,WAAO,CAAC,QAAQ,IAAI;AAAA,EACtB,SAAS,GAAG;AACV,UAAM,QAAQ,aAAa,QAAQ,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC;AAC1D,WAAO,CAAC,MAAM,KAAK;AAAA,EACrB;AACF;","names":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
declare const _dispose_: unique symbol;
|
|
2
|
+
type Db = IDBDatabase & {
|
|
3
|
+
[_dispose_]?: () => void;
|
|
4
|
+
};
|
|
5
|
+
type DbName = string;
|
|
6
|
+
type DbStoreName = string;
|
|
7
|
+
type DbStoreKey = string;
|
|
8
|
+
declare class Idb {
|
|
9
|
+
private dbs;
|
|
10
|
+
private queues;
|
|
11
|
+
static _dispose_: symbol;
|
|
12
|
+
constructor();
|
|
13
|
+
/** Get a value from the store. */
|
|
14
|
+
get<T = unknown>(dbName: DbName, storeName: DbStoreName, key: DbStoreKey): Promise<T | null>;
|
|
15
|
+
/** Check if a key exists in the store. */
|
|
16
|
+
has(dbName: DbName, storeName: DbStoreName, key: DbStoreKey): Promise<boolean>;
|
|
17
|
+
/** Set a value in the store. */
|
|
18
|
+
set<T = unknown>(dbName: DbName, storeName: DbStoreName, key: DbStoreKey, value: T): Promise<void>;
|
|
19
|
+
/** Get a list of all keys in the store of the database. */
|
|
20
|
+
keys(dbName: DbName, storeName: DbStoreName): Promise<string[]>;
|
|
21
|
+
/** Delete a key from the store. */
|
|
22
|
+
delete(dbName: DbName, storeName: DbStoreName, key: DbStoreKey): Promise<void>;
|
|
23
|
+
/** Get a list of all store names in the database. */
|
|
24
|
+
listStores(dbName: DbName): Promise<string[]>;
|
|
25
|
+
/** Get a list of all database names. */
|
|
26
|
+
listDatabases(): Promise<string[]>;
|
|
27
|
+
/** Delete the store from the database. */
|
|
28
|
+
deleteStore(dbName: DbName, storeName: DbStoreName): Promise<void>;
|
|
29
|
+
/** Delete the entire database. */
|
|
30
|
+
deleteDatabase(dbName: DbName): Promise<void>;
|
|
31
|
+
/** Delete all databases. */
|
|
32
|
+
purge(): Promise<void>;
|
|
33
|
+
/** Check if a database with the given name exists. */
|
|
34
|
+
private exists;
|
|
35
|
+
/** Ensure that the database with the given name exists and returns it. */
|
|
36
|
+
private ensureDb;
|
|
37
|
+
/** Ensure that the store exists. Returns store's database. */
|
|
38
|
+
private ensureStore;
|
|
39
|
+
private register;
|
|
40
|
+
private unregister;
|
|
41
|
+
/** Wrap method to be run in a queue for the given database. */
|
|
42
|
+
private enqueueByDbName;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { type Db, type DbName, type DbStoreKey, type DbStoreName, Idb, _dispose_ };
|
package/dist/idb/idb.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import "../chunk-SDOWUYJK.js";
|
|
2
|
+
import "../chunk-OURJLKNI.js";
|
|
3
|
+
import "../chunk-IEKJYSB2.js";
|
|
4
|
+
import "../chunk-RXAMNVZW.js";
|
|
5
|
+
import "../chunk-IL3H2YKT.js";
|
|
6
|
+
import "../chunk-NIQOLOOJ.js";
|
|
7
|
+
import "../chunk-6X6FFIZN.js";
|
|
8
|
+
import "../chunk-WBZCJMFI.js";
|
|
9
|
+
import {
|
|
10
|
+
Queue
|
|
11
|
+
} from "../chunk-5N6O5FSZ.js";
|
|
12
|
+
import "../chunk-YPFVC6GE.js";
|
|
13
|
+
import {
|
|
14
|
+
is
|
|
15
|
+
} from "../chunk-IQMQQI6W.js";
|
|
16
|
+
|
|
17
|
+
// src/idb/idb.ts
|
|
18
|
+
var _dispose_ = /* @__PURE__ */ Symbol("dispose");
|
|
19
|
+
var Idb = class {
|
|
20
|
+
dbs = {};
|
|
21
|
+
queues = {};
|
|
22
|
+
static _dispose_ = _dispose_;
|
|
23
|
+
constructor() {
|
|
24
|
+
this.get = this.enqueueByDbName(this.get);
|
|
25
|
+
this.has = this.enqueueByDbName(this.has);
|
|
26
|
+
this.set = this.enqueueByDbName(this.set);
|
|
27
|
+
this.keys = this.enqueueByDbName(this.keys);
|
|
28
|
+
this.delete = this.enqueueByDbName(this.delete);
|
|
29
|
+
this.deleteStore = this.enqueueByDbName(this.deleteStore);
|
|
30
|
+
this.deleteDatabase = this.enqueueByDbName(this.deleteDatabase);
|
|
31
|
+
}
|
|
32
|
+
/** Get a value from the store. */
|
|
33
|
+
async get(dbName, storeName, key) {
|
|
34
|
+
const exists = await this.exists(dbName);
|
|
35
|
+
if (!exists) return null;
|
|
36
|
+
const db = await this.ensureDb(dbName);
|
|
37
|
+
if (!db.objectStoreNames.contains(storeName)) return null;
|
|
38
|
+
return await new Promise((resolve, reject) => {
|
|
39
|
+
const tx = db.transaction([storeName], "readonly");
|
|
40
|
+
const req = tx.objectStore(storeName).get(key);
|
|
41
|
+
req.onsuccess = () => resolve(req.result);
|
|
42
|
+
req.onerror = () => reject(req.error);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/** Check if a key exists in the store. */
|
|
46
|
+
async has(dbName, storeName, key) {
|
|
47
|
+
const exists = await this.exists(dbName);
|
|
48
|
+
if (!exists) return false;
|
|
49
|
+
const db = await this.ensureDb(dbName);
|
|
50
|
+
if (!db.objectStoreNames.contains(storeName)) return false;
|
|
51
|
+
return await new Promise((resolve, reject) => {
|
|
52
|
+
const tx = db.transaction([storeName], "readonly");
|
|
53
|
+
const req = tx.objectStore(storeName).getKey(key);
|
|
54
|
+
req.onsuccess = () => resolve(req.result !== void 0);
|
|
55
|
+
req.onerror = () => reject(req.error);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Set a value in the store. */
|
|
59
|
+
async set(dbName, storeName, key, value) {
|
|
60
|
+
const db = await this.ensureStore(dbName, storeName);
|
|
61
|
+
await new Promise((resolve, reject) => {
|
|
62
|
+
const tx = db.transaction([storeName], "readwrite");
|
|
63
|
+
const req = tx.objectStore(storeName).put(value, key);
|
|
64
|
+
req.onsuccess = () => resolve(true);
|
|
65
|
+
req.onerror = () => reject(req.error);
|
|
66
|
+
tx.onabort = () => reject(tx.error);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Get a list of all keys in the store of the database. */
|
|
70
|
+
async keys(dbName, storeName) {
|
|
71
|
+
const exists = await this.exists(dbName);
|
|
72
|
+
if (!exists) return [];
|
|
73
|
+
const db = await this.ensureDb(dbName);
|
|
74
|
+
if (!db.objectStoreNames.contains(storeName)) return [];
|
|
75
|
+
return await new Promise((resolve, reject) => {
|
|
76
|
+
const tx = db.transaction([storeName], "readonly");
|
|
77
|
+
const req = tx.objectStore(storeName).getAllKeys();
|
|
78
|
+
req.onsuccess = () => resolve(req.result.filter(is.string));
|
|
79
|
+
req.onerror = () => reject(req.error);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** Delete a key from the store. */
|
|
83
|
+
async delete(dbName, storeName, key) {
|
|
84
|
+
const exists = await this.exists(dbName);
|
|
85
|
+
if (!exists) return;
|
|
86
|
+
const db = await this.ensureDb(dbName);
|
|
87
|
+
if (!db.objectStoreNames.contains(storeName)) return;
|
|
88
|
+
await new Promise((resolve, reject) => {
|
|
89
|
+
const tx = db.transaction([storeName], "readwrite");
|
|
90
|
+
const req = tx.objectStore(storeName).delete(key);
|
|
91
|
+
req.onsuccess = () => resolve(true);
|
|
92
|
+
req.onerror = () => reject(req.error);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Get a list of all store names in the database. */
|
|
96
|
+
async listStores(dbName) {
|
|
97
|
+
const exists = await this.exists(dbName);
|
|
98
|
+
if (!exists) return [];
|
|
99
|
+
const db = await this.ensureDb(dbName);
|
|
100
|
+
return [...db.objectStoreNames];
|
|
101
|
+
}
|
|
102
|
+
/** Get a list of all database names. */
|
|
103
|
+
async listDatabases() {
|
|
104
|
+
const dbs = await indexedDB.databases();
|
|
105
|
+
return dbs.map((db) => db.name).filter(is.present);
|
|
106
|
+
}
|
|
107
|
+
/** Delete the store from the database. */
|
|
108
|
+
async deleteStore(dbName, storeName) {
|
|
109
|
+
const exists = await this.exists(dbName);
|
|
110
|
+
if (!exists) return;
|
|
111
|
+
const db = await this.ensureDb(dbName);
|
|
112
|
+
if (!db.objectStoreNames.contains(storeName)) return;
|
|
113
|
+
this.unregister(dbName);
|
|
114
|
+
const newDb = await new Promise((resolve, reject) => {
|
|
115
|
+
const req = indexedDB.open(dbName, db.version + 1);
|
|
116
|
+
req.onsuccess = () => resolve(req.result);
|
|
117
|
+
req.onerror = () => reject(req.error);
|
|
118
|
+
req.onupgradeneeded = () => req.result.deleteObjectStore(storeName);
|
|
119
|
+
});
|
|
120
|
+
this.register(dbName, newDb);
|
|
121
|
+
}
|
|
122
|
+
/** Delete the entire database. */
|
|
123
|
+
async deleteDatabase(dbName) {
|
|
124
|
+
const exists = await this.exists(dbName);
|
|
125
|
+
if (!exists) return;
|
|
126
|
+
this.unregister(dbName);
|
|
127
|
+
await new Promise((resolve, reject) => {
|
|
128
|
+
const req = indexedDB.deleteDatabase(dbName);
|
|
129
|
+
req.onsuccess = () => resolve(true);
|
|
130
|
+
req.onerror = () => reject(req.error);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/** Delete all databases. */
|
|
134
|
+
async purge() {
|
|
135
|
+
const names = await this.listDatabases();
|
|
136
|
+
for (const name of names) {
|
|
137
|
+
await this.deleteDatabase(name);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** Check if a database with the given name exists. */
|
|
141
|
+
async exists(dbName) {
|
|
142
|
+
if (this.dbs[dbName]) return true;
|
|
143
|
+
const dbs = await indexedDB.databases();
|
|
144
|
+
return !!dbs.find((db) => db.name === dbName);
|
|
145
|
+
}
|
|
146
|
+
/** Ensure that the database with the given name exists and returns it. */
|
|
147
|
+
async ensureDb(dbName) {
|
|
148
|
+
if (this.dbs[dbName]) return this.dbs[dbName];
|
|
149
|
+
const dbs = await indexedDB.databases();
|
|
150
|
+
const meta = dbs.find((db2) => db2.name === dbName);
|
|
151
|
+
const version = meta?.version || 1;
|
|
152
|
+
const db = await new Promise((resolve, reject) => {
|
|
153
|
+
const req = indexedDB.open(dbName, version);
|
|
154
|
+
req.onsuccess = () => resolve(req.result);
|
|
155
|
+
req.onerror = () => reject(req.error);
|
|
156
|
+
});
|
|
157
|
+
this.register(dbName, db);
|
|
158
|
+
return db;
|
|
159
|
+
}
|
|
160
|
+
/** Ensure that the store exists. Returns store's database. */
|
|
161
|
+
async ensureStore(dbName, storeName) {
|
|
162
|
+
const db = await this.ensureDb(dbName);
|
|
163
|
+
if (db.objectStoreNames.contains(storeName)) return db;
|
|
164
|
+
this.unregister(dbName);
|
|
165
|
+
const newDb = await new Promise((resolve, reject) => {
|
|
166
|
+
const req = indexedDB.open(dbName, db.version + 1);
|
|
167
|
+
req.onsuccess = () => resolve(req.result);
|
|
168
|
+
req.onerror = () => reject(req.error);
|
|
169
|
+
req.onupgradeneeded = () => req.result.createObjectStore(storeName);
|
|
170
|
+
});
|
|
171
|
+
this.register(dbName, newDb);
|
|
172
|
+
return newDb;
|
|
173
|
+
}
|
|
174
|
+
register(dbName, db) {
|
|
175
|
+
this.dbs[dbName] = db;
|
|
176
|
+
const onClose = () => delete this.dbs[dbName];
|
|
177
|
+
db.addEventListener("close", onClose);
|
|
178
|
+
db[_dispose_] = () => db.removeEventListener("close", onClose);
|
|
179
|
+
}
|
|
180
|
+
unregister(dbName) {
|
|
181
|
+
if (!this.dbs[dbName]) return;
|
|
182
|
+
this.dbs[dbName].close();
|
|
183
|
+
this.dbs[dbName][_dispose_]?.();
|
|
184
|
+
delete this.dbs[dbName];
|
|
185
|
+
}
|
|
186
|
+
/** Wrap method to be run in a queue for the given database. */
|
|
187
|
+
enqueueByDbName(fn) {
|
|
188
|
+
return (async (dbName, ...args) => {
|
|
189
|
+
const queue = this.queues[dbName] ??= new Queue(dbName);
|
|
190
|
+
const result = await queue.add(() => fn.call(this, dbName, ...args));
|
|
191
|
+
if (queue.isEmpty()) delete this.queues[dbName];
|
|
192
|
+
return result;
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
export {
|
|
197
|
+
Idb,
|
|
198
|
+
_dispose_
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=idb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/idb/idb.ts"],"sourcesContent":["import type { AsyncFn } from '../types/types'\nimport { Queue, is } from '../utils/utils'\n\nexport const _dispose_ = Symbol('dispose')\n\nexport type Db = IDBDatabase & { [_dispose_]?: () => void }\nexport type DbName = string\nexport type DbStoreName = string\nexport type DbStoreKey = string\n\nexport class Idb {\n private dbs: { [name: DbName]: Db } = {}\n private queues: Record<string, Queue> = {}\n static _dispose_ = _dispose_\n\n constructor() {\n this.get = this.enqueueByDbName(this.get)\n this.has = this.enqueueByDbName(this.has)\n this.set = this.enqueueByDbName(this.set)\n this.keys = this.enqueueByDbName(this.keys)\n this.delete = this.enqueueByDbName(this.delete)\n this.deleteStore = this.enqueueByDbName(this.deleteStore)\n this.deleteDatabase = this.enqueueByDbName(this.deleteDatabase)\n }\n\n /** Get a value from the store. */\n async get<T = unknown>(dbName: DbName, storeName: DbStoreName, key: DbStoreKey) {\n // DB does not exist? -> Return null\n const exists = await this.exists(dbName)\n if (!exists) return null\n\n // Store does not exist? -> Return null\n const db = await this.ensureDb(dbName)\n if (!db.objectStoreNames.contains(storeName)) return null\n\n // Get value from store\n return await new Promise<T>((resolve, reject) => {\n const tx = db.transaction([storeName], 'readonly')\n const req = tx.objectStore(storeName).get(key)\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n })\n }\n\n /** Check if a key exists in the store. */\n async has(dbName: DbName, storeName: DbStoreName, key: DbStoreKey) {\n // DB does not exist? -> Return false\n const exists = await this.exists(dbName)\n if (!exists) return false\n\n // Store does not exist? -> Return false\n const db = await this.ensureDb(dbName)\n if (!db.objectStoreNames.contains(storeName)) return false\n\n // Check if key exists in store\n return await new Promise<boolean>((resolve, reject) => {\n const tx = db.transaction([storeName], 'readonly')\n const req = tx.objectStore(storeName).getKey(key)\n req.onsuccess = () => resolve(req.result !== undefined)\n req.onerror = () => reject(req.error)\n })\n }\n\n /** Set a value in the store. */\n async set<T = unknown>(dbName: DbName, storeName: DbStoreName, key: DbStoreKey, value: T) {\n // Ensure store for the DB\n const db = await this.ensureStore(dbName, storeName)\n\n // Set value\n await new Promise((resolve, reject) => {\n const tx = db.transaction([storeName], 'readwrite')\n const req = tx.objectStore(storeName).put(value, key)\n req.onsuccess = () => resolve(true)\n req.onerror = () => reject(req.error)\n tx.onabort = () => reject(tx.error)\n })\n }\n\n /** Get a list of all keys in the store of the database. */\n async keys(dbName: DbName, storeName: DbStoreName) {\n // DB does not exist? -> Return []\n const exists = await this.exists(dbName)\n if (!exists) return []\n\n // Store does not exist? -> Return []\n const db = await this.ensureDb(dbName)\n if (!db.objectStoreNames.contains(storeName)) return []\n\n // Get store keys\n return await new Promise<DbStoreKey[]>((resolve, reject) => {\n const tx = db.transaction([storeName], 'readonly')\n const req = tx.objectStore(storeName).getAllKeys()\n req.onsuccess = () => resolve(req.result.filter(is.string))\n req.onerror = () => reject(req.error)\n })\n }\n\n /** Delete a key from the store. */\n async delete(dbName: DbName, storeName: DbStoreName, key: DbStoreKey) {\n // DB does not exist? -> Done\n const exists = await this.exists(dbName)\n if (!exists) return\n\n // Store does not exist? -> Done\n const db = await this.ensureDb(dbName)\n if (!db.objectStoreNames.contains(storeName)) return\n\n // Delete store key\n await new Promise((resolve, reject) => {\n const tx = db.transaction([storeName], 'readwrite')\n const req = tx.objectStore(storeName).delete(key)\n req.onsuccess = () => resolve(true)\n req.onerror = () => reject(req.error)\n })\n }\n\n /** Get a list of all store names in the database. */\n async listStores(dbName: DbName) {\n const exists = await this.exists(dbName)\n if (!exists) return []\n const db = await this.ensureDb(dbName)\n return [...db.objectStoreNames]\n }\n\n /** Get a list of all database names. */\n async listDatabases() {\n const dbs = await indexedDB.databases()\n return dbs.map(db => db.name).filter(is.present)\n }\n\n /** Delete the store from the database. */\n async deleteStore(dbName: DbName, storeName: DbStoreName) {\n // DB does not exist? -> Done\n const exists = await this.exists(dbName)\n if (!exists) return\n\n // Store does not exist? -> Done\n const db = await this.ensureDb(dbName)\n if (!db.objectStoreNames.contains(storeName)) return\n\n // Unregister DB\n this.unregister(dbName)\n\n // Delete store (new DB instance is created during upgrade)\n const newDb = await new Promise<Db>((resolve, reject) => {\n const req = indexedDB.open(dbName, db.version + 1)\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n req.onupgradeneeded = () => req.result.deleteObjectStore(storeName)\n })\n\n // Register new DB instance\n this.register(dbName, newDb)\n }\n\n /** Delete the entire database. */\n async deleteDatabase(dbName: DbName) {\n // DB does not exist? -> Done\n const exists = await this.exists(dbName)\n if (!exists) return\n\n // Unregister DB\n this.unregister(dbName)\n\n // Delete DB\n await new Promise((resolve, reject) => {\n const req = indexedDB.deleteDatabase(dbName)\n req.onsuccess = () => resolve(true)\n req.onerror = () => reject(req.error)\n })\n }\n\n /** Delete all databases. */\n async purge() {\n const names = await this.listDatabases()\n for (const name of names) {\n await this.deleteDatabase(name)\n }\n }\n\n /** Check if a database with the given name exists. */\n private async exists(dbName: DbName) {\n // Connected to the DB? -> true\n if (this.dbs[dbName]) return true\n\n // Check if DB exists\n const dbs = await indexedDB.databases()\n return !!dbs.find(db => db.name === dbName)\n }\n\n /** Ensure that the database with the given name exists and returns it. */\n private async ensureDb(dbName: DbName) {\n // Already connected? -> Just return DB\n if (this.dbs[dbName]) return this.dbs[dbName]\n\n // Get DB version if it exists, or start with version 1\n const dbs = await indexedDB.databases()\n const meta = dbs.find(db => db.name === dbName)\n const version = meta?.version || 1\n\n // Create DB / connnect to the existing one\n const db = await new Promise<Db>((resolve, reject) => {\n const req = indexedDB.open(dbName, version)\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n })\n\n // Register DB instance\n this.register(dbName, db)\n\n return db\n }\n\n /** Ensure that the store exists. Returns store's database. */\n private async ensureStore(dbName: DbName, storeName: DbStoreName) {\n // Ensure DB\n const db = await this.ensureDb(dbName)\n\n // Store already exists? -> Done\n if (db.objectStoreNames.contains(storeName)) return db\n\n // Unregister DB\n this.unregister(dbName)\n\n // Create store (new DB instance is created during upgrade)\n const newDb = await new Promise<Db>((resolve, reject) => {\n const req = indexedDB.open(dbName, db.version + 1)\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n req.onupgradeneeded = () => req.result.createObjectStore(storeName)\n })\n\n // Register new DB instance\n this.register(dbName, newDb)\n\n return newDb\n }\n\n private register(dbName: DbName, db: Db) {\n this.dbs[dbName] = db\n\n // 'close' event is fired when closed unexpectedly, e.g. by deleting via devtools\n const onClose = () => delete this.dbs[dbName]\n db.addEventListener('close', onClose)\n db[_dispose_] = () => db.removeEventListener('close', onClose)\n }\n\n private unregister(dbName: DbName) {\n if (!this.dbs[dbName]) return\n this.dbs[dbName].close()\n this.dbs[dbName][_dispose_]?.()\n delete this.dbs[dbName]\n }\n\n /** Wrap method to be run in a queue for the given database. */\n private enqueueByDbName<T extends AsyncFn>(fn: T) {\n return (async (dbName: DbName, ...args: unknown[]) => {\n const queue = (this.queues[dbName] ??= new Queue(dbName))\n const result = await queue.add(() => fn.call(this, dbName, ...args))\n if (queue.isEmpty()) delete this.queues[dbName]\n return result\n }) as T\n }\n}\n"],"mappings":"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","names":["db"]}
|
package/dist/types/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|