@signaldb/indexeddb 1.0.0 → 1.1.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/index.d.ts CHANGED
@@ -4,8 +4,12 @@
4
4
  * @template T - The type of the items in the collection.
5
5
  * @template I - The type of the unique identifier for the items.
6
6
  * @param name - A unique name for the collection, used as the database name.
7
+ * @param options - Optional configuration for the adapter.
8
+ * @param options.prefix - A prefix to be added to the database name (default: 'signaldb-').
7
9
  * @returns A SignalDB persistence adapter for managing data in IndexedDB.
8
10
  */
9
11
  export default function createIndexedDBAdapter<T extends {
10
12
  id: I;
11
- } & Record<string, any>, I extends IDBValidKey>(name: string): import("@signaldb/core").PersistenceAdapter<T, I>;
13
+ } & Record<string, any>, I extends IDBValidKey>(name: string, options?: {
14
+ prefix?: string;
15
+ }): import("@signaldb/core").PersistenceAdapter<T, I>;
package/dist/index.mjs CHANGED
@@ -1,50 +1,46 @@
1
- import { createPersistenceAdapter as f } from "@signaldb/core";
2
- function g(u) {
3
- const l = `signaldb-${u}`, s = "items";
4
- function d() {
5
- return new Promise((a, c) => {
1
+ import { createPersistenceAdapter as w } from "@signaldb/core";
2
+ function v(u, m) {
3
+ const { prefix: E = "signaldb-" } = m || {}, l = `${E}${u}`, s = "items";
4
+ function i() {
5
+ return new Promise((o, c) => {
6
6
  const e = indexedDB.open(l, 1);
7
- e.onupgradeneeded = () => {
7
+ e.addEventListener("upgradeneeded", () => {
8
8
  const r = e.result;
9
9
  r.objectStoreNames.contains(s) || r.createObjectStore(s, { keyPath: "id" });
10
- }, e.onsuccess = () => a(e.result), e.onerror = () => {
10
+ }), e.addEventListener("success", () => o(e.result)), e.addEventListener("error", () => {
11
11
  var r;
12
- return c(new Error(((r = e.error) === null || r === void 0 ? void 0 : r.message) || "Database error"));
13
- };
12
+ return c(new Error(((r = e.error) == null ? void 0 : r.message) || "Database error"));
13
+ });
14
14
  });
15
15
  }
16
- async function m() {
17
- const a = await d();
16
+ async function b() {
17
+ const o = await i();
18
18
  return new Promise((c, e) => {
19
- const t = a.transaction(s, "readonly").objectStore(s).getAll();
20
- t.onsuccess = () => {
21
- const { result: o } = t;
22
- c(o);
23
- }, t.onerror = () => {
24
- var o;
25
- return e(new Error(((o = t.error) === null || o === void 0 ? void 0 : o.message) || "Error fetching items"));
26
- };
19
+ const t = o.transaction(s, "readonly").objectStore(s).getAll();
20
+ t.addEventListener("success", () => c(t.result)), t.addEventListener("error", () => {
21
+ var n;
22
+ return e(new Error(((n = t.error) == null ? void 0 : n.message) || "Error fetching items"));
23
+ });
27
24
  });
28
25
  }
29
- return f({
26
+ return w({
30
27
  async load() {
31
- return { items: await m() };
28
+ return { items: await b() };
32
29
  },
33
- async save(a, { added: c, modified: e, removed: r }) {
34
- const t = (await d()).transaction(s, "readwrite"), o = t.objectStore(s);
35
- return c.forEach((n) => o.add(n)), e.forEach((n) => o.put(n)), r.forEach((n) => o.delete(n.id)), new Promise((n, v) => {
36
- t.oncomplete = () => n(), t.onerror = () => {
37
- var i;
38
- return v(new Error(((i = t.error) === null || i === void 0 ? void 0 : i.message) || "Transaction error"));
39
- };
30
+ async save(o, { added: c, modified: e, removed: r }) {
31
+ const t = (await i()).transaction(s, "readwrite"), n = t.objectStore(s);
32
+ return c.forEach((a) => n.add(a)), e.forEach((a) => n.put(a)), r.forEach((a) => n.delete(a.id)), new Promise((a, p) => {
33
+ t.addEventListener("complete", () => a()), t.addEventListener("error", () => {
34
+ var d;
35
+ return p(new Error(((d = t.error) == null ? void 0 : d.message) || "Transaction error"));
36
+ });
40
37
  });
41
38
  },
42
39
  async register() {
43
- return Promise.resolve();
44
40
  }
45
41
  });
46
42
  }
47
43
  export {
48
- g as default
44
+ v as default
49
45
  };
50
46
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { createPersistenceAdapter } from '@signaldb/core';\n/**\n * Creates a persistence adapter for managing a SignalDB collection using IndexedDB.\n * This adapter reads and writes data to an IndexedDB object store, with customizable serialization and deserialization.\n * @template T - The type of the items in the collection.\n * @template I - The type of the unique identifier for the items.\n * @param name - A unique name for the collection, used as the database name.\n * @returns A SignalDB persistence adapter for managing data in IndexedDB.\n */\nexport default function createIndexedDBAdapter(name) {\n const dbName = `signaldb-${name}`;\n const storeName = 'items';\n function openDatabase() {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => { var _a; return reject(new Error(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || 'Database error')); };\n });\n }\n async function getAllItems() {\n const db = await openDatabase();\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(storeName, 'readonly');\n const store = transaction.objectStore(storeName);\n const request = store.getAll();\n request.onsuccess = () => {\n const { result } = request;\n resolve(result); // Ensure proper typing\n };\n request.onerror = () => { var _a; return reject(new Error(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || 'Error fetching items')); };\n });\n }\n return createPersistenceAdapter({\n async load() {\n const items = await getAllItems();\n return { items };\n },\n async save(items, { added, modified, removed }) {\n const db = await openDatabase();\n const transaction = db.transaction(storeName, 'readwrite');\n const store = transaction.objectStore(storeName);\n added.forEach(item => store.add(item));\n modified.forEach(item => store.put(item));\n removed.forEach(item => store.delete(item.id));\n return new Promise((resolve, reject) => {\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => { var _a; return reject(new Error(((_a = transaction.error) === null || _a === void 0 ? void 0 : _a.message) || 'Transaction error')); };\n });\n },\n async register() {\n return Promise.resolve();\n },\n });\n}\n"],"names":["createIndexedDBAdapter","name","dbName","storeName","openDatabase","resolve","reject","request","db","_a","getAllItems","result","createPersistenceAdapter","items","added","modified","removed","transaction","store","item"],"mappings":";AASA,SAAwBA,EAAuBC,GAAM;AAC3C,QAAAC,IAAS,YAAYD,CAAI,IACzBE,IAAY;AAClB,WAASC,IAAe;AACpB,WAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACpC,YAAMC,IAAU,UAAU,KAAKL,GAAQ,CAAC;AACxC,MAAAK,EAAQ,kBAAkB,MAAM;AAC5B,cAAMC,IAAKD,EAAQ;AACnB,QAAKC,EAAG,iBAAiB,SAASL,CAAS,KACvCK,EAAG,kBAAkBL,GAAW,EAAE,SAAS,MAAM;AAAA,MAEzD,GACAI,EAAQ,YAAY,MAAMF,EAAQE,EAAQ,MAAM,GAChDA,EAAQ,UAAU,MAAM;AAAM,YAAAE;AAAI,eAAOH,EAAO,IAAI,QAAQG,IAAKF,EAAQ,WAAW,QAAQE,MAAO,SAAS,SAASA,EAAG,YAAY,gBAAgB,CAAC;AAAA,MAAG;AAAA,IAAA,CAC3J;AAAA,EAAA;AAEL,iBAAeC,IAAc;AACnB,UAAAF,IAAK,MAAMJ,EAAa;AAC9B,WAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AAG9B,YAAAC,IAFcC,EAAG,YAAYL,GAAW,UAAU,EAC9B,YAAYA,CAAS,EACzB,OAAO;AAC7B,MAAAI,EAAQ,YAAY,MAAM;AAChB,cAAA,EAAE,QAAAI,MAAWJ;AACnB,QAAAF,EAAQM,CAAM;AAAA,MAClB,GACAJ,EAAQ,UAAU,MAAM;AAAM,YAAAE;AAAI,eAAOH,EAAO,IAAI,QAAQG,IAAKF,EAAQ,WAAW,QAAQE,MAAO,SAAS,SAASA,EAAG,YAAY,sBAAsB,CAAC;AAAA,MAAG;AAAA,IAAA,CACjK;AAAA,EAAA;AAEL,SAAOG,EAAyB;AAAA,IAC5B,MAAM,OAAO;AAET,aAAO,EAAE,OADK,MAAMF,EAAY,EACjB;AAAA,IACnB;AAAA,IACA,MAAM,KAAKG,GAAO,EAAE,OAAAC,GAAO,UAAAC,GAAU,SAAAC,KAAW;AAE5C,YAAMC,KADK,MAAMb,EAAa,GACP,YAAYD,GAAW,WAAW,GACnDe,IAAQD,EAAY,YAAYd,CAAS;AAC/C,aAAAW,EAAM,QAAQ,CAAAK,MAAQD,EAAM,IAAIC,CAAI,CAAC,GACrCJ,EAAS,QAAQ,CAAAI,MAAQD,EAAM,IAAIC,CAAI,CAAC,GACxCH,EAAQ,QAAQ,CAAQG,MAAAD,EAAM,OAAOC,EAAK,EAAE,CAAC,GACtC,IAAI,QAAQ,CAACd,GAASC,MAAW;AACxB,QAAAW,EAAA,aAAa,MAAMZ,EAAQ,GACvCY,EAAY,UAAU,MAAM;AAAM,cAAAR;AAAI,iBAAOH,EAAO,IAAI,QAAQG,IAAKQ,EAAY,WAAW,QAAQR,MAAO,SAAS,SAASA,EAAG,YAAY,mBAAmB,CAAC;AAAA,QAAG;AAAA,MAAA,CACtK;AAAA,IACL;AAAA,IACA,MAAM,WAAW;AACb,aAAO,QAAQ,QAAQ;AAAA,IAAA;AAAA,EAC3B,CACH;AACL;"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { createPersistenceAdapter } from '@signaldb/core';\n/**\n * Creates a persistence adapter for managing a SignalDB collection using IndexedDB.\n * This adapter reads and writes data to an IndexedDB object store, with customizable serialization and deserialization.\n * @template T - The type of the items in the collection.\n * @template I - The type of the unique identifier for the items.\n * @param name - A unique name for the collection, used as the database name.\n * @param options - Optional configuration for the adapter.\n * @param options.prefix - A prefix to be added to the database name (default: 'signaldb-').\n * @returns A SignalDB persistence adapter for managing data in IndexedDB.\n */\nexport default function createIndexedDBAdapter(name, options) {\n const { prefix = 'signaldb-' } = options || {};\n const databaseName = `${prefix}${name}`;\n const storeName = 'items';\n /**\n * Opens the IndexedDB database and creates the object store if it doesn't exist.\n * @returns A promise that resolves with the opened database.\n */\n function openDatabase() {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(databaseName, 1);\n request.addEventListener('upgradeneeded', () => {\n const database = request.result;\n if (!database.objectStoreNames.contains(storeName)) {\n database.createObjectStore(storeName, { keyPath: 'id' });\n }\n });\n request.addEventListener('success', () => resolve(request.result));\n request.addEventListener('error', () => reject(new Error(request.error?.message || 'Database error')));\n });\n }\n /**\n * Retrieves all items from the IndexedDB object store.\n * @returns A promise that resolves with an array of items.\n */\n async function getAllItems() {\n const database = await openDatabase();\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(storeName, 'readonly');\n const store = transaction.objectStore(storeName);\n const request = store.getAll();\n request.addEventListener('success', () => resolve(request.result));\n request.addEventListener('error', () => reject(new Error(request.error?.message || 'Error fetching items')));\n });\n }\n return createPersistenceAdapter({\n async load() {\n const items = await getAllItems();\n return { items };\n },\n async save(items, { added, modified, removed }) {\n const database = await openDatabase();\n const transaction = database.transaction(storeName, 'readwrite');\n const store = transaction.objectStore(storeName);\n added.forEach(item => store.add(item));\n modified.forEach(item => store.put(item));\n removed.forEach(item => store.delete(item.id));\n return new Promise((resolve, reject) => {\n transaction.addEventListener('complete', () => resolve());\n transaction.addEventListener('error', () => reject(new Error(transaction.error?.message || 'Transaction error')));\n });\n },\n async register() {\n return;\n },\n });\n}\n"],"names":["createIndexedDBAdapter","name","options","prefix","databaseName","storeName","openDatabase","resolve","reject","request","database","_a","getAllItems","createPersistenceAdapter","items","added","modified","removed","transaction","store","item"],"mappings":";AAWwB,SAAAA,EAAuBC,GAAMC,GAAS;AAC1D,QAAM,EAAE,QAAAC,IAAS,YAAY,IAAID,KAAW,CAAC,GACvCE,IAAe,GAAGD,CAAM,GAAGF,CAAI,IAC/BI,IAAY;AAKlB,WAASC,IAAe;AACpB,WAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACpC,YAAMC,IAAU,UAAU,KAAKL,GAAc,CAAC;AACtC,MAAAK,EAAA,iBAAiB,iBAAiB,MAAM;AAC5C,cAAMC,IAAWD,EAAQ;AACzB,QAAKC,EAAS,iBAAiB,SAASL,CAAS,KAC7CK,EAAS,kBAAkBL,GAAW,EAAE,SAAS,MAAM;AAAA,MAC3D,CACH,GACDI,EAAQ,iBAAiB,WAAW,MAAMF,EAAQE,EAAQ,MAAM,CAAC,GACzDA,EAAA,iBAAiB,SAAS,MAAA;;AAAM,eAAAD,EAAO,IAAI,QAAMG,IAAAF,EAAQ,UAAR,gBAAAE,EAAe,YAAW,gBAAgB,CAAC;AAAA,OAAC;AAAA,IAAA,CACxG;AAAA,EAAA;AAML,iBAAeC,IAAc;AACnB,UAAAF,IAAW,MAAMJ,EAAa;AACpC,WAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AAG9B,YAAAC,IAFcC,EAAS,YAAYL,GAAW,UAAU,EACpC,YAAYA,CAAS,EACzB,OAAO;AAC7B,MAAAI,EAAQ,iBAAiB,WAAW,MAAMF,EAAQE,EAAQ,MAAM,CAAC,GACzDA,EAAA,iBAAiB,SAAS,MAAA;;AAAM,eAAAD,EAAO,IAAI,QAAMG,IAAAF,EAAQ,UAAR,gBAAAE,EAAe,YAAW,sBAAsB,CAAC;AAAA,OAAC;AAAA,IAAA,CAC9G;AAAA,EAAA;AAEL,SAAOE,EAAyB;AAAA,IAC5B,MAAM,OAAO;AAET,aAAO,EAAE,OADK,MAAMD,EAAY,EACjB;AAAA,IACnB;AAAA,IACA,MAAM,KAAKE,GAAO,EAAE,OAAAC,GAAO,UAAAC,GAAU,SAAAC,KAAW;AAE5C,YAAMC,KADW,MAAMZ,EAAa,GACP,YAAYD,GAAW,WAAW,GACzDc,IAAQD,EAAY,YAAYb,CAAS;AAC/C,aAAAU,EAAM,QAAQ,CAAAK,MAAQD,EAAM,IAAIC,CAAI,CAAC,GACrCJ,EAAS,QAAQ,CAAAI,MAAQD,EAAM,IAAIC,CAAI,CAAC,GACxCH,EAAQ,QAAQ,CAAQG,MAAAD,EAAM,OAAOC,EAAK,EAAE,CAAC,GACtC,IAAI,QAAQ,CAACb,GAASC,MAAW;AACpC,QAAAU,EAAY,iBAAiB,YAAY,MAAMX,EAAA,CAAS,GAC5CW,EAAA,iBAAiB,SAAS,MAAA;;AAAM,iBAAAV,EAAO,IAAI,QAAMG,IAAAO,EAAY,UAAZ,gBAAAP,EAAmB,YAAW,mBAAmB,CAAC;AAAA,SAAC;AAAA,MAAA,CACnH;AAAA,IACL;AAAA,IACA,MAAM,WAAW;AAAA,IACb;AAAA,EACJ,CACH;AACL;"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(s,i){typeof exports=="object"&&typeof module<"u"?module.exports=i(require("@signaldb/core")):typeof define=="function"&&define.amd?define(["@signaldb/core"],i):(s=typeof globalThis<"u"?globalThis:s||self,s.SignalDB=i(s.core))})(this,function(s){"use strict";function i(m){const f=`signaldb-${m}`,a="items";function l(){return new Promise((c,d)=>{const e=indexedDB.open(f,1);e.onupgradeneeded=()=>{const r=e.result;r.objectStoreNames.contains(a)||r.createObjectStore(a,{keyPath:"id"})},e.onsuccess=()=>c(e.result),e.onerror=()=>{var r;return d(new Error(((r=e.error)===null||r===void 0?void 0:r.message)||"Database error"))}})}async function b(){const c=await l();return new Promise((d,e)=>{const t=c.transaction(a,"readonly").objectStore(a).getAll();t.onsuccess=()=>{const{result:n}=t;d(n)},t.onerror=()=>{var n;return e(new Error(((n=t.error)===null||n===void 0?void 0:n.message)||"Error fetching items"))}})}return s.createPersistenceAdapter({async load(){return{items:await b()}},async save(c,{added:d,modified:e,removed:r}){const t=(await l()).transaction(a,"readwrite"),n=t.objectStore(a);return d.forEach(o=>n.add(o)),e.forEach(o=>n.put(o)),r.forEach(o=>n.delete(o.id)),new Promise((o,g)=>{t.oncomplete=()=>o(),t.onerror=()=>{var u;return g(new Error(((u=t.error)===null||u===void 0?void 0:u.message)||"Transaction error"))}})},async register(){return Promise.resolve()}})}return i});
1
+ (function(s,i){typeof exports=="object"&&typeof module<"u"?module.exports=i(require("@signaldb/core")):typeof define=="function"&&define.amd?define(["@signaldb/core"],i):(s=typeof globalThis<"u"?globalThis:s||self,s.SignalDB=i(s.core))})(this,function(s){"use strict";function i(m,l){const{prefix:b="signaldb-"}=l||{},p=`${b}${m}`,a="items";function u(){return new Promise((c,d)=>{const e=indexedDB.open(p,1);e.addEventListener("upgradeneeded",()=>{const r=e.result;r.objectStoreNames.contains(a)||r.createObjectStore(a,{keyPath:"id"})}),e.addEventListener("success",()=>c(e.result)),e.addEventListener("error",()=>{var r;return d(new Error(((r=e.error)==null?void 0:r.message)||"Database error"))})})}async function E(){const c=await u();return new Promise((d,e)=>{const t=c.transaction(a,"readonly").objectStore(a).getAll();t.addEventListener("success",()=>d(t.result)),t.addEventListener("error",()=>{var o;return e(new Error(((o=t.error)==null?void 0:o.message)||"Error fetching items"))})})}return s.createPersistenceAdapter({async load(){return{items:await E()}},async save(c,{added:d,modified:e,removed:r}){const t=(await u()).transaction(a,"readwrite"),o=t.objectStore(a);return d.forEach(n=>o.add(n)),e.forEach(n=>o.put(n)),r.forEach(n=>o.delete(n.id)),new Promise((n,w)=>{t.addEventListener("complete",()=>n()),t.addEventListener("error",()=>{var f;return w(new Error(((f=t.error)==null?void 0:f.message)||"Transaction error"))})})},async register(){}})}return i});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { createPersistenceAdapter } from '@signaldb/core';\n/**\n * Creates a persistence adapter for managing a SignalDB collection using IndexedDB.\n * This adapter reads and writes data to an IndexedDB object store, with customizable serialization and deserialization.\n * @template T - The type of the items in the collection.\n * @template I - The type of the unique identifier for the items.\n * @param name - A unique name for the collection, used as the database name.\n * @returns A SignalDB persistence adapter for managing data in IndexedDB.\n */\nexport default function createIndexedDBAdapter(name) {\n const dbName = `signaldb-${name}`;\n const storeName = 'items';\n function openDatabase() {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => { var _a; return reject(new Error(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || 'Database error')); };\n });\n }\n async function getAllItems() {\n const db = await openDatabase();\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(storeName, 'readonly');\n const store = transaction.objectStore(storeName);\n const request = store.getAll();\n request.onsuccess = () => {\n const { result } = request;\n resolve(result); // Ensure proper typing\n };\n request.onerror = () => { var _a; return reject(new Error(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || 'Error fetching items')); };\n });\n }\n return createPersistenceAdapter({\n async load() {\n const items = await getAllItems();\n return { items };\n },\n async save(items, { added, modified, removed }) {\n const db = await openDatabase();\n const transaction = db.transaction(storeName, 'readwrite');\n const store = transaction.objectStore(storeName);\n added.forEach(item => store.add(item));\n modified.forEach(item => store.put(item));\n removed.forEach(item => store.delete(item.id));\n return new Promise((resolve, reject) => {\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => { var _a; return reject(new Error(((_a = transaction.error) === null || _a === void 0 ? void 0 : _a.message) || 'Transaction error')); };\n });\n },\n async register() {\n return Promise.resolve();\n },\n });\n}\n"],"names":["createIndexedDBAdapter","name","dbName","storeName","openDatabase","resolve","reject","request","db","_a","getAllItems","result","createPersistenceAdapter","items","added","modified","removed","transaction","store","item"],"mappings":"4QASA,SAAwBA,EAAuBC,EAAM,CAC3C,MAAAC,EAAS,YAAYD,CAAI,GACzBE,EAAY,QAClB,SAASC,GAAe,CACpB,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpC,MAAMC,EAAU,UAAU,KAAKL,EAAQ,CAAC,EACxCK,EAAQ,gBAAkB,IAAM,CAC5B,MAAMC,EAAKD,EAAQ,OACdC,EAAG,iBAAiB,SAASL,CAAS,GACvCK,EAAG,kBAAkBL,EAAW,CAAE,QAAS,KAAM,CAEzD,EACAI,EAAQ,UAAY,IAAMF,EAAQE,EAAQ,MAAM,EAChDA,EAAQ,QAAU,IAAM,CAAM,IAAAE,EAAI,OAAOH,EAAO,IAAI,QAAQG,EAAKF,EAAQ,SAAW,MAAQE,IAAO,OAAS,OAASA,EAAG,UAAY,gBAAgB,CAAC,CAAG,CAAA,CAC3J,CAAA,CAEL,eAAeC,GAAc,CACnB,MAAAF,EAAK,MAAMJ,EAAa,EAC9B,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAG9B,MAAAC,EAFcC,EAAG,YAAYL,EAAW,UAAU,EAC9B,YAAYA,CAAS,EACzB,OAAO,EAC7BI,EAAQ,UAAY,IAAM,CAChB,KAAA,CAAE,OAAAI,GAAWJ,EACnBF,EAAQM,CAAM,CAClB,EACAJ,EAAQ,QAAU,IAAM,CAAM,IAAAE,EAAI,OAAOH,EAAO,IAAI,QAAQG,EAAKF,EAAQ,SAAW,MAAQE,IAAO,OAAS,OAASA,EAAG,UAAY,sBAAsB,CAAC,CAAG,CAAA,CACjK,CAAA,CAEL,OAAOG,2BAAyB,CAC5B,MAAM,MAAO,CAET,MAAO,CAAE,MADK,MAAMF,EAAY,CACjB,CACnB,EACA,MAAM,KAAKG,EAAO,CAAE,MAAAC,EAAO,SAAAC,EAAU,QAAAC,GAAW,CAE5C,MAAMC,GADK,MAAMb,EAAa,GACP,YAAYD,EAAW,WAAW,EACnDe,EAAQD,EAAY,YAAYd,CAAS,EAC/C,OAAAW,EAAM,QAAQK,GAAQD,EAAM,IAAIC,CAAI,CAAC,EACrCJ,EAAS,QAAQI,GAAQD,EAAM,IAAIC,CAAI,CAAC,EACxCH,EAAQ,QAAgBG,GAAAD,EAAM,OAAOC,EAAK,EAAE,CAAC,EACtC,IAAI,QAAQ,CAACd,EAASC,IAAW,CACxBW,EAAA,WAAa,IAAMZ,EAAQ,EACvCY,EAAY,QAAU,IAAM,CAAM,IAAAR,EAAI,OAAOH,EAAO,IAAI,QAAQG,EAAKQ,EAAY,SAAW,MAAQR,IAAO,OAAS,OAASA,EAAG,UAAY,mBAAmB,CAAC,CAAG,CAAA,CACtK,CACL,EACA,MAAM,UAAW,CACb,OAAO,QAAQ,QAAQ,CAAA,CAC3B,CACH,CACL"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { createPersistenceAdapter } from '@signaldb/core';\n/**\n * Creates a persistence adapter for managing a SignalDB collection using IndexedDB.\n * This adapter reads and writes data to an IndexedDB object store, with customizable serialization and deserialization.\n * @template T - The type of the items in the collection.\n * @template I - The type of the unique identifier for the items.\n * @param name - A unique name for the collection, used as the database name.\n * @param options - Optional configuration for the adapter.\n * @param options.prefix - A prefix to be added to the database name (default: 'signaldb-').\n * @returns A SignalDB persistence adapter for managing data in IndexedDB.\n */\nexport default function createIndexedDBAdapter(name, options) {\n const { prefix = 'signaldb-' } = options || {};\n const databaseName = `${prefix}${name}`;\n const storeName = 'items';\n /**\n * Opens the IndexedDB database and creates the object store if it doesn't exist.\n * @returns A promise that resolves with the opened database.\n */\n function openDatabase() {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(databaseName, 1);\n request.addEventListener('upgradeneeded', () => {\n const database = request.result;\n if (!database.objectStoreNames.contains(storeName)) {\n database.createObjectStore(storeName, { keyPath: 'id' });\n }\n });\n request.addEventListener('success', () => resolve(request.result));\n request.addEventListener('error', () => reject(new Error(request.error?.message || 'Database error')));\n });\n }\n /**\n * Retrieves all items from the IndexedDB object store.\n * @returns A promise that resolves with an array of items.\n */\n async function getAllItems() {\n const database = await openDatabase();\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(storeName, 'readonly');\n const store = transaction.objectStore(storeName);\n const request = store.getAll();\n request.addEventListener('success', () => resolve(request.result));\n request.addEventListener('error', () => reject(new Error(request.error?.message || 'Error fetching items')));\n });\n }\n return createPersistenceAdapter({\n async load() {\n const items = await getAllItems();\n return { items };\n },\n async save(items, { added, modified, removed }) {\n const database = await openDatabase();\n const transaction = database.transaction(storeName, 'readwrite');\n const store = transaction.objectStore(storeName);\n added.forEach(item => store.add(item));\n modified.forEach(item => store.put(item));\n removed.forEach(item => store.delete(item.id));\n return new Promise((resolve, reject) => {\n transaction.addEventListener('complete', () => resolve());\n transaction.addEventListener('error', () => reject(new Error(transaction.error?.message || 'Transaction error')));\n });\n },\n async register() {\n return;\n },\n });\n}\n"],"names":["createIndexedDBAdapter","name","options","prefix","databaseName","storeName","openDatabase","resolve","reject","request","database","_a","getAllItems","createPersistenceAdapter","items","added","modified","removed","transaction","store","item"],"mappings":"4QAWwB,SAAAA,EAAuBC,EAAMC,EAAS,CAC1D,KAAM,CAAE,OAAAC,EAAS,WAAY,EAAID,GAAW,CAAC,EACvCE,EAAe,GAAGD,CAAM,GAAGF,CAAI,GAC/BI,EAAY,QAKlB,SAASC,GAAe,CACpB,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpC,MAAMC,EAAU,UAAU,KAAKL,EAAc,CAAC,EACtCK,EAAA,iBAAiB,gBAAiB,IAAM,CAC5C,MAAMC,EAAWD,EAAQ,OACpBC,EAAS,iBAAiB,SAASL,CAAS,GAC7CK,EAAS,kBAAkBL,EAAW,CAAE,QAAS,KAAM,CAC3D,CACH,EACDI,EAAQ,iBAAiB,UAAW,IAAMF,EAAQE,EAAQ,MAAM,CAAC,EACzDA,EAAA,iBAAiB,QAAS,IAAA,OAAM,OAAAD,EAAO,IAAI,QAAMG,EAAAF,EAAQ,QAAR,YAAAE,EAAe,UAAW,gBAAgB,CAAC,EAAC,CAAA,CACxG,CAAA,CAML,eAAeC,GAAc,CACnB,MAAAF,EAAW,MAAMJ,EAAa,EACpC,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAG9B,MAAAC,EAFcC,EAAS,YAAYL,EAAW,UAAU,EACpC,YAAYA,CAAS,EACzB,OAAO,EAC7BI,EAAQ,iBAAiB,UAAW,IAAMF,EAAQE,EAAQ,MAAM,CAAC,EACzDA,EAAA,iBAAiB,QAAS,IAAA,OAAM,OAAAD,EAAO,IAAI,QAAMG,EAAAF,EAAQ,QAAR,YAAAE,EAAe,UAAW,sBAAsB,CAAC,EAAC,CAAA,CAC9G,CAAA,CAEL,OAAOE,2BAAyB,CAC5B,MAAM,MAAO,CAET,MAAO,CAAE,MADK,MAAMD,EAAY,CACjB,CACnB,EACA,MAAM,KAAKE,EAAO,CAAE,MAAAC,EAAO,SAAAC,EAAU,QAAAC,GAAW,CAE5C,MAAMC,GADW,MAAMZ,EAAa,GACP,YAAYD,EAAW,WAAW,EACzDc,EAAQD,EAAY,YAAYb,CAAS,EAC/C,OAAAU,EAAM,QAAQK,GAAQD,EAAM,IAAIC,CAAI,CAAC,EACrCJ,EAAS,QAAQI,GAAQD,EAAM,IAAIC,CAAI,CAAC,EACxCH,EAAQ,QAAgBG,GAAAD,EAAM,OAAOC,EAAK,EAAE,CAAC,EACtC,IAAI,QAAQ,CAACb,EAASC,IAAW,CACpCU,EAAY,iBAAiB,WAAY,IAAMX,EAAA,CAAS,EAC5CW,EAAA,iBAAiB,QAAS,IAAA,OAAM,OAAAV,EAAO,IAAI,QAAMG,EAAAO,EAAY,QAAZ,YAAAP,EAAmB,UAAW,mBAAmB,CAAC,EAAC,CAAA,CACnH,CACL,EACA,MAAM,UAAW,CACb,CACJ,CACH,CACL"}
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "@signaldb/indexeddb",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "",
5
5
  "scripts": {
6
- "build": "rimraf dist && vite build"
6
+ "build": "rimraf dist && vite build",
7
+ "analyze-bundle": "bundle-analyzer ./dist --upload-token=$BUNDLE_ANALYZER_UPLOAD_TOKEN --bundle-name=@signaldb/indexeddb",
8
+ "test": "vitest"
7
9
  },
8
10
  "repository": {
9
11
  "type": "git",