schema-idb 0.0.2 → 0.0.3
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/createSchemaDB.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export type SchemaDatabase<TStores extends readonly AnySchemaStore[]> = {
|
|
|
31
31
|
readonly ready: boolean;
|
|
32
32
|
waitForReady(): Promise<void>;
|
|
33
33
|
close(): void;
|
|
34
|
-
startTransaction<TNames extends StoreNames<TStores>>(storeNames: TNames[], options?: TransactionOptions): Transaction<TStores, TNames>;
|
|
34
|
+
startTransaction<TNames extends StoreNames<TStores>>(storeNames: TNames | TNames[], options?: TransactionOptions): Transaction<TStores, TNames>;
|
|
35
35
|
} & {
|
|
36
36
|
[K in TStores[number]['name']]: SchemaStoreAccessor<Extract<TStores[number], {
|
|
37
37
|
name: K;
|
package/dist/createSchemaDB.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var P=Object.defineProperty;var
|
|
1
|
+
"use strict";var P=Object.defineProperty;var c=(e,r)=>P(e,"name",{value:r,configurable:!0});import{openDatabase as T}from"./utils.js";import{createStoreAccessor as b}from"./storeAccessor.js";import{createStartTransaction as v}from"./transaction.js";import{determineAutoVersion as D,applySafeChanges as E,openDatabaseForSchemaRead as h}from"./schemaDetection.js";import{ensureSchemaHistoryStore as A,getAppliedMigrations as p,recordMigrationApplied as R,initializeSchemaHistory as x}from"./migrationHistory.js";function G(e){return e}c(G,"getKeyPathString");function z(e,r,o){const t=c(async()=>{if(await e.readyPromise,!e.idb)throw new Error("Database initialization failed");return b(e.idb,r,o)},"getAccessor");return new Proxy({},{get(n,d){return d==="query"?s=>s?t().then(i=>i.query(s)):M(e,r,o):async(...s)=>(await t())[d](...s)}})}c(z,"createLazyStoreAccessor");function M(e,r,o){const t=c(async()=>{if(await e.readyPromise,!e.idb)throw new Error("Database initialization failed");return b(e.idb,r,o).query()},"getQueryBuilder"),n=c(d=>new Proxy({},{get(s,i){return i==="findAll"||i==="find"||i==="count"?()=>d().then(a=>a[i]()):(...a)=>n(c(()=>d().then(l=>l[i](...a)),"newGetBuilder"))}}),"createBuilderProxy");return n(t)}c(M,"createLazyQueryBuilder");function k(e,r){const o={get name(){return e.idb?.name??r},get version(){return e.idb?.version??0},get raw(){if(!e.idb)throw new Error("Database not ready. Call waitForReady() first or check ready property.");return e.idb},get ready(){return e.ready},waitForReady(){return e.readyPromise},close(){e.idb?.close()},startTransaction(...t){if(!e.startTransaction){const[n,d]=t,s=Array.isArray(n)?n:[n];return j(e,s,d)}return e.startTransaction(...t)}};for(const t of e.stores)Object.defineProperty(o,t.name,{get(){return z(e,t.name,t.defaults)},enumerable:!0});return o}c(k,"buildSchemaDatabase");function j(e,r,o){const t={get raw(){throw new Error("Transaction raw is not available before ready state. Use await db.waitForReady() before starting transactions.")},async commit(){if(await e.readyPromise,!e.startTransaction)throw new Error("Database initialization failed");return e.startTransaction(r,o).commit()},abort(){}};for(const n of r)e.stores.find(s=>s.name===n)&&Object.defineProperty(t,n,{get(){throw new Error("Transaction operations before ready state are not yet supported. Use await db.waitForReady() before starting transactions.")},enumerable:!0});return t}c(j,"createLazyTransaction");function q(e){const r=[],o=new Set;for(const t of e)for(const n of t.migrations){if(o.has(n.name))throw new Error(`Duplicate migration name "${n.name}" found across stores`);o.add(n.name),r.push(n)}return r.sort((t,n)=>t.name.localeCompare(n.name))}c(q,"collectMigrations");function S(e,r){const o=new Set(r);return e.filter(t=>!o.has(t.name)).sort((t,n)=>t.name.localeCompare(n.name))}c(S,"filterPendingMigrations");function B(e,r,o,t,n,d,s){if(A(e),o===0){for(const a of t){const f=e.createObjectStore(a.name,{keyPath:a.keyPath});for(const l of a.indexes)f.createIndex(l.name,l.keyPath,{unique:l.unique??!1,multiEntry:l.multiEntry??!1})}x(r)}else s&&s.safe.length>0&&E(e,r,s.safe,t);let i=[...d];for(const a of n)try{const f=a.up(e,r);f instanceof Promise&&f.catch(l=>{console.error(`Migration "${a.name}" failed:`,l),r.abort()}),R(r,a.name,i),i=[...i,a.name].sort()}catch(f){throw console.error(`Migration "${a.name}" failed:`,f),r.abort(),f}}c(B,"handleUpgrade");export function openDB(e){const{name:r,version:o,versionStrategy:t="explicit",stores:n,onBlocked:d,onVersionChange:s}=e,i=new Set;for(const m of n){if(i.has(m.name))throw new Error(`Duplicate store name: "${m.name}"`);i.add(m.name)}const a=q(n);let f=c(()=>{},"readyResolve"),l=c(()=>{},"readyReject");const w={idb:null,ready:!1,error:null,readyPromise:new Promise((m,y)=>{f=m,l=y}),readyResolve:f,readyReject:l,stores:n,startTransaction:null},u=k(w,r);return C(w,r,o,t,n,a,d,s),u}c(openDB,"openDB");async function C(e,r,o,t,n,d,s,i){try{let a=[],f=null,l;if(t==="auto"){const u=await D(r,n);if(l=u.version,f=u.changes,u.version>1){const y=await h(r);y&&(a=await p(y),y.close())}S(d,a).length>0&&!u.needsUpgrade&&(l=u.version+1)}else{if(o===void 0)throw new Error('Version is required when versionStrategy is "explicit"');l=o;const u=await h(r);u&&(a=await p(u),u.close())}const g=S(d,a),w=await T(r,l,(u,m,y)=>{B(u,m,y,n,g,a,f)},s);i&&(w.onversionchange=i),e.idb=w,e.startTransaction=v(w,n),e.ready=!0,e.readyResolve()}catch(a){e.error=a instanceof Error?a:new Error(String(a)),e.readyReject(e.error)}}c(C,"initializeDatabase");
|
package/dist/transaction.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { SchemaStoreDefinition } from './schema.js';
|
|
|
3
3
|
type IDBCompatibleKey = IDBValidKey;
|
|
4
4
|
type ConstrainedKey<S extends StoreSchema> = PrimaryKeyType<S> & IDBCompatibleKey;
|
|
5
5
|
export interface TransactionOptions {
|
|
6
|
-
mode?: '
|
|
6
|
+
mode?: 'write';
|
|
7
7
|
durability?: 'default' | 'strict' | 'relaxed';
|
|
8
8
|
}
|
|
9
9
|
export interface TransactionStoreAccessor<S extends StoreSchema> {
|
|
@@ -23,8 +23,9 @@ type GetStoreSchema<TStores extends readonly AnySchemaStore[], TName extends str
|
|
|
23
23
|
export type Transaction<TStores extends readonly AnySchemaStore[], TNames extends StoreNames<TStores>> = {
|
|
24
24
|
[K in TNames]: TransactionStoreAccessor<GetStoreSchema<TStores, K>>;
|
|
25
25
|
} & {
|
|
26
|
+
readonly raw: IDBTransaction;
|
|
26
27
|
commit(): Promise<void>;
|
|
27
28
|
abort(): void;
|
|
28
29
|
};
|
|
29
|
-
export declare function createStartTransaction<TStores extends readonly AnySchemaStore[]>(db: IDBDatabase, _storeDefinitions: TStores): <TNames extends StoreNames<TStores>>(
|
|
30
|
+
export declare function createStartTransaction<TStores extends readonly AnySchemaStore[]>(db: IDBDatabase, _storeDefinitions: TStores): <TNames extends StoreNames<TStores>>(storeNamesInput: TNames | TNames[], options?: TransactionOptions) => Transaction<TStores, TNames>;
|
|
30
31
|
export {};
|
package/dist/transaction.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var a=(e,c)=>f(e,"name",{value:c,configurable:!0});function A(e,c){const r=e.objectStore(c);return{get(t){r.get(t)},getAll(){r.getAll()},getAllByIndex(t,o){r.index(t).getAll(o)},put(t,o){r.put(t,o)},add(t,o){r.add(t,o)},delete(t){r.delete(t)},clear(){r.clear()}}}a(A,"createTransactionStoreAccessor");function m(e,c,r,t){return{...e,raw:c,commit:r,abort:t}}a(m,"buildTransaction");export function createStartTransaction(e,c){return a(function(t,o={}){const s=Array.isArray(t)?t:[t],{mode:u,durability:b="default"}=o,n=e.transaction(s,"readwrite",{durability:b}),d={};for(const i of s)d[i]=A(n,i);return m(d,n,a(()=>new Promise((i,l)=>{n.oncomplete=()=>i(),n.onerror=()=>l(n.error),n.onabort=()=>l(new Error("Transaction aborted"))}),"commit"),a(()=>{n.abort()},"abort"))},"startTransaction")}a(createStartTransaction,"createStartTransaction");
|