@mgarlik/datastore 0.1.0 → 0.1.1

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.js CHANGED
@@ -1,15 +1,10 @@
1
+ import {
2
+ systemLog
3
+ } from "./chunk-7XDRKNJQ.js";
4
+
1
5
  // src/DataStoreProvider.tsx
2
6
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
3
7
 
4
- // src/log.ts
5
- function systemLog(..._args) {
6
- }
7
- function systemLogError(...args) {
8
- if (typeof console !== "undefined" && typeof console.error === "function") {
9
- console.error(...args);
10
- }
11
- }
12
-
13
8
  // src/handleSocketMessage.ts
14
9
  var handleSocketMessage = (model, msg, dataProvider) => {
15
10
  const { dispatch, updateDocument } = dataProvider;
@@ -40,9 +35,6 @@ var handleSocketMessage = (model, msg, dataProvider) => {
40
35
  // src/handleData.ts
41
36
  import axios from "axios";
42
37
 
43
- // src/utils.ts
44
- import * as Crypto from "expo-crypto";
45
-
46
38
  // src/dotPath.ts
47
39
  function propToArray(prop) {
48
40
  return prop.split(".").reduce((ret, el, index, list) => {
@@ -87,6 +79,13 @@ function getValueByDotPath(obj, prop, value) {
87
79
 
88
80
  // src/utils.ts
89
81
  import dayjs from "dayjs";
82
+ function randomUuidSegment(template) {
83
+ return template.replace(/[xy]/g, (char) => {
84
+ const random = Math.floor(Math.random() * 16);
85
+ const value = char === "x" ? random : random & 3 | 8;
86
+ return value.toString(16);
87
+ });
88
+ }
90
89
  function escapeRegExp(string) {
91
90
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
92
91
  }
@@ -549,7 +548,13 @@ var dataStoreFilterObject = (obj, filter) => {
549
548
  return result;
550
549
  };
551
550
  function uuid() {
552
- return Crypto.randomUUID();
551
+ return [
552
+ randomUuidSegment("xxxxxxxx"),
553
+ randomUuidSegment("xxxx"),
554
+ "4" + randomUuidSegment("xxx"),
555
+ randomUuidSegment("yxxx"),
556
+ randomUuidSegment("xxxxxxxxxxxx")
557
+ ].join("-");
553
558
  }
554
559
  function isUuid(val) {
555
560
  if (typeof val !== "string") return false;
@@ -562,7 +567,7 @@ var saveData = async ({
562
567
  providerId,
563
568
  newData,
564
569
  dateUpdate,
565
- SQLite: SQLite3
570
+ SQLite
566
571
  }) => {
567
572
  console.time(`[SQL] saveData ${providerId}`);
568
573
  const batchSize = 8e3;
@@ -577,8 +582,7 @@ var saveData = async ({
577
582
  }
578
583
  }
579
584
  const placeholdersArray = Array.from({ length: Math.ceil(values.length / 4) }, () => placeholders).join(",");
580
- if (placeholdersArray.length < 10) console.log("DATA TO UPDATE", JSON.stringify(values, null, 2));
581
- const row = await SQLite3.query(`INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES ${placeholdersArray}`, values);
585
+ const row = await SQLite.query(`INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES ${placeholdersArray}`, values);
582
586
  systemLog("axios", "saveData result: ", JSON.stringify(row));
583
587
  }
584
588
  console.timeEnd(`[SQL] saveData ${providerId}`);
@@ -600,7 +604,7 @@ var buildUri = ({
600
604
  }
601
605
  return dataSource.uri || `${dataSource.model || ""}/`;
602
606
  };
603
- var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, changeTime }) => {
607
+ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime }) => {
604
608
  if (dataSource) systemLog("axios", "GET Data Source: ", buildUri({ dataSource, method: "read" }));
605
609
  else systemLog("axios", "No DataSource for ", id);
606
610
  let persistedData = [];
@@ -617,12 +621,24 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, ch
617
621
  } else {
618
622
  if (changeTime) {
619
623
  params.changeTime = changeTime;
620
- } else if (isPersisting && SQLite3) {
624
+ } else if (isPersisting && SQLite) {
621
625
  console.time("Persisted Data");
622
- const qDatum = await SQLite3.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
626
+ const qDatum = await SQLite.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
623
627
  systemLog("axios", "SQLite.read Posledni datum update: ", qDatum[0]?.lastUpdate);
624
628
  if (qDatum[0]?.lastUpdate) params.changeTime = qDatum[0].lastUpdate;
625
- persistedData = qDatum.map((item) => ({ id: item.id, ...JSON.parse(item.data) }));
629
+ persistedData = qDatum.map((item) => {
630
+ try {
631
+ const parsedData = typeof item.data === "string" ? JSON.parse(item.data) : item.data;
632
+ if (!parsedData || typeof parsedData !== "object" || Array.isArray(parsedData)) {
633
+ systemLog("axios", "SQLite.read Preskakuji neplatny dokument:", item.id);
634
+ return null;
635
+ }
636
+ return { id: item.id, ...parsedData };
637
+ } catch (error) {
638
+ console.error("[datastore] Nepodarilo se zpracovat SQL data pro dokument", item.id, error);
639
+ return null;
640
+ }
641
+ }).filter((item) => item !== null);
626
642
  console.timeEnd("Persisted Data");
627
643
  }
628
644
  if (dataSource) {
@@ -670,8 +686,8 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, ch
670
686
  JSON.stringify(newData).length,
671
687
  "Bytes"
672
688
  );
673
- if (isPersisting && SQLite3) {
674
- await saveData({ providerId: id, newData, SQLite: SQLite3, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
689
+ if (isPersisting && SQLite) {
690
+ await saveData({ providerId: id, newData, SQLite, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
675
691
  }
676
692
  }
677
693
  }
@@ -736,7 +752,6 @@ var deleteData = async ({ dataSource, data }) => {
736
752
  // src/DataStoreProvider.tsx
737
753
  import { io as ioSockets } from "socket.io-client";
738
754
  import axios2 from "axios";
739
- import { getLocales } from "expo-localization";
740
755
 
741
756
  // src/templates.ts
742
757
  var _renderMyTemplate = (templateString, data) => {
@@ -767,162 +782,7 @@ function renderJSONTemplate(val, data) {
767
782
 
768
783
  // src/DataStoreProvider.tsx
769
784
  import isEqual from "lodash/isEqual.js";
770
-
771
- // src/database.ts
772
- import * as SQL from "expo-sqlite";
773
- var SQLite = class {
774
- constructor(name) {
775
- this.db = null;
776
- this.dbName = name || "modelaz.db";
777
- this.initDB();
778
- }
779
- async initDB() {
780
- if (!this.db) {
781
- try {
782
- systemLog("sql", "[initDB]");
783
- this.db = await SQL.openDatabaseAsync(this.dbName);
784
- await this.createTables({
785
- documents: "id TEXT PRIMARY KEY, data TEXT, model TEXT, lastUpdate TEXT"
786
- // logs: "time TEXT PRIMARY KEY, module TEXT, message TEXT",
787
- });
788
- } catch (e) {
789
- console.log("INITDB ERROR", e);
790
- throw e;
791
- }
792
- }
793
- }
794
- async getDb() {
795
- if (!this.db) {
796
- await this.initDB();
797
- }
798
- if (!this.db) {
799
- throw new Error("Database is not initialized");
800
- }
801
- return this.db;
802
- }
803
- async createTable(table, tableSchema) {
804
- try {
805
- systemLog("sql", "[createTable]", table);
806
- const db = await this.getDb();
807
- const result = await db.runAsync(`CREATE TABLE IF NOT EXISTS '${table}' (${tableSchema})`);
808
- systemLog("sql", "[createTable] result: ", JSON.stringify(result));
809
- return result;
810
- } catch (e) {
811
- systemLogError("sql", "[createTable]", e);
812
- throw e;
813
- }
814
- }
815
- async createTables(tables) {
816
- try {
817
- systemLog("sql", "[createTables]", tables);
818
- const query = Object.entries(tables).reduce((acc, [table, schema]) => {
819
- return acc + `CREATE TABLE IF NOT EXISTS '${table}' (${schema});`;
820
- }, "");
821
- const db = await this.getDb();
822
- const result = await db.runAsync(query);
823
- systemLog("sql", "[createTables] result: ", JSON.stringify(result));
824
- return result;
825
- } catch (e) {
826
- systemLogError("sql", "[createTable]", e);
827
- throw e;
828
- }
829
- }
830
- /**
831
- * Smazani starych logu
832
- */
833
- async deleteLogs() {
834
- systemLog("sql", "[query] delete old Logs", this.db);
835
- try {
836
- const db = await this.getDb();
837
- await db.runAsync(`DELETE FROM logs WHERE strftime('%s', 'now') - strftime('%s', time) > 3600`);
838
- } catch (error) {
839
- throw error;
840
- }
841
- }
842
- async read(query, args) {
843
- try {
844
- systemLog("sql", "[read]", query);
845
- const db = await this.getDb();
846
- const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
847
- systemLog("sql", "[read] result ", result.length);
848
- return result;
849
- } catch (e) {
850
- systemLogError("sql", "[read]", e);
851
- throw e;
852
- }
853
- }
854
- async query(query, args) {
855
- try {
856
- systemLog("sql", "[query]->", query);
857
- const db = await this.getDb();
858
- const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
859
- systemLog("sql", result);
860
- return result;
861
- } catch (error) {
862
- console.error("INSERT ERROR", error);
863
- systemLogError("sql", error);
864
- throw error;
865
- }
866
- }
867
- async dropTable(table) {
868
- try {
869
- systemLog("sql", "dropTable", table);
870
- console.time("[SQL] dropTable");
871
- const db = await this.getDb();
872
- const result = await db.runAsync(`DROP TABLE ${table}`);
873
- console.timeEnd("[SQL] dropTable");
874
- return result;
875
- } catch (error) {
876
- throw error;
877
- }
878
- }
879
- async emptyTable(table) {
880
- try {
881
- systemLog("sql", `[emptyTable]`, table);
882
- const db = await this.getDb();
883
- const result = await db.runAsync(`DELETE FROM '${table}'`);
884
- systemLog("sql", "[emptyTable] result", result);
885
- return result;
886
- } catch (error) {
887
- throw error;
888
- }
889
- }
890
- async getTables() {
891
- systemLog("sql", "Jdu zkusit nacist tabulky z ", JSON.stringify(this.dbName));
892
- try {
893
- const db = await this.getDb();
894
- const result = await db.getAllAsync('SELECT name FROM sqlite_master WHERE type="table"');
895
- systemLog("sql", "DB Result:", result);
896
- return result;
897
- } catch (error) {
898
- throw error;
899
- }
900
- }
901
- async resetDatabase() {
902
- try {
903
- systemLog("sql", "Reset database", this.dbName);
904
- console.time("DELETING");
905
- systemLog("sql", "Closing");
906
- const db = await this.getDb();
907
- await db.closeAsync();
908
- systemLog("sql", "Deleting");
909
- await SQL.deleteDatabaseAsync(this.dbName);
910
- console.timeEnd("DELETING");
911
- console.time("INIT");
912
- this.db = null;
913
- systemLog("sql", "Zacinam inicializovat databazi databaze");
914
- await this.initDB();
915
- systemLog("sql", "Inicializovana databaze");
916
- console.timeEnd("INIT");
917
- } catch (e) {
918
- systemLogError("sql", "[resetDatabase]", e);
919
- }
920
- }
921
- };
922
-
923
- // src/DataStoreProvider.tsx
924
785
  import { jsx } from "react/jsx-runtime";
925
- var SQLite2 = new SQLite("modelaz.db");
926
786
  var DataStoreContext = createContext({});
927
787
  var DataStoreDocumentsContext = createContext({});
928
788
  var DataStoreProvidersContext = createContext({});
@@ -1002,7 +862,23 @@ var buildDocumentTemplateParams = (model, documentId) => {
1002
862
  [templateIdKey]: documentId
1003
863
  };
1004
864
  };
1005
- var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, ...props }) => {
865
+ var resolveLocale = () => {
866
+ if (typeof Intl !== "undefined" && typeof Intl.DateTimeFormat === "function") {
867
+ const locale = Intl.DateTimeFormat().resolvedOptions().locale;
868
+ if (locale) return locale;
869
+ }
870
+ if (typeof navigator !== "undefined") {
871
+ if (typeof navigator.language === "string" && navigator.language.length > 0) {
872
+ return navigator.language;
873
+ }
874
+ if (Array.isArray(navigator.languages) && navigator.languages.length > 0) {
875
+ const firstLocale = navigator.languages.find((value) => typeof value === "string" && value.length > 0);
876
+ if (firstLocale) return firstLocale;
877
+ }
878
+ }
879
+ return void 0;
880
+ };
881
+ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, locale, storage = null, ...props }) => {
1006
882
  const [isLive, setIsLive] = useState(false);
1007
883
  const [isSynchronizing, setIsSynchronizing] = useState(true);
1008
884
  const [sockets, setSockets] = useState({});
@@ -1016,11 +892,17 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1016
892
  const [counterProviders, setCounterProviders] = useState({});
1017
893
  const [counterDocuments, setCounterDocuments] = useState({});
1018
894
  const didInitialLiveSyncRef = useRef(false);
895
+ const persistenceStorage = useMemo(
896
+ () => usePersistentStorage ? storage : null,
897
+ [storage, usePersistentStorage]
898
+ );
1019
899
  useEffect(() => {
1020
900
  if (!restServer) return;
1021
- const localization = getLocales();
901
+ const resolvedLocale = locale || resolveLocale();
1022
902
  axios2.defaults.baseURL = restServer;
1023
- axios2.defaults.headers.common["Accept-Language"] = localization[0]?.languageCode;
903
+ if (resolvedLocale) {
904
+ axios2.defaults.headers.common["Accept-Language"] = resolvedLocale;
905
+ }
1024
906
  systemLog("dsp", "[INIT] Axios baseURL:", restServer);
1025
907
  async function checkServer() {
1026
908
  try {
@@ -1040,7 +922,12 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1040
922
  }
1041
923
  }
1042
924
  checkServer();
1043
- }, [restServer]);
925
+ }, [locale, restServer]);
926
+ useEffect(() => {
927
+ if (usePersistentStorage && !storage) {
928
+ systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
929
+ }
930
+ }, [persistenceStorage, storage, usePersistentStorage]);
1044
931
  const socketRoomHandlersRef = useRef({});
1045
932
  const socketActionHandlersRef = useRef({});
1046
933
  systemLog("dsp", "START");
@@ -1099,22 +986,22 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1099
986
  data,
1100
987
  lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
1101
988
  }) => {
1102
- if (!usePersistentStorage) return;
1103
- await SQLite2.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
989
+ if (!persistenceStorage) return;
990
+ await persistenceStorage.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
1104
991
  documentId,
1105
992
  JSON.stringify(data),
1106
993
  model,
1107
994
  lastUpdate
1108
995
  ]);
1109
996
  },
1110
- [usePersistentStorage]
997
+ [persistenceStorage]
1111
998
  );
1112
999
  const removePersistedDocument = useCallback(
1113
1000
  async (documentId) => {
1114
- if (!usePersistentStorage) return;
1115
- await SQLite2.query("DELETE FROM documents WHERE id = ?", [documentId]);
1001
+ if (!persistenceStorage) return;
1002
+ await persistenceStorage.query("DELETE FROM documents WHERE id = ?", [documentId]);
1116
1003
  },
1117
- [usePersistentStorage]
1004
+ [persistenceStorage]
1118
1005
  );
1119
1006
  const synchronizeDataStore = useCallback(async () => {
1120
1007
  setIsSynchronizing(true);
@@ -1187,8 +1074,8 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1187
1074
  }, [socket]);
1188
1075
  const resetDataStore = useCallback(async () => {
1189
1076
  console.time("[DSP] resetDataStore");
1190
- if (usePersistentStorage) {
1191
- await SQLite2.emptyTable("documents");
1077
+ if (persistenceStorage?.emptyTable) {
1078
+ await persistenceStorage.emptyTable("documents");
1192
1079
  }
1193
1080
  setSockets({});
1194
1081
  setProviders({});
@@ -1196,13 +1083,13 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1196
1083
  setCounterProviders({});
1197
1084
  setCounterDocuments({});
1198
1085
  console.timeEnd("[DSP] resetDataStore");
1199
- }, [usePersistentStorage]);
1086
+ }, [persistenceStorage]);
1200
1087
  const resetProvider = useCallback(
1201
1088
  async (provider) => {
1202
- if (!usePersistentStorage) return;
1203
- await SQLite2.query(`DELETE FROM documents WHERE model='${provider}'`);
1089
+ if (!persistenceStorage) return;
1090
+ await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
1204
1091
  },
1205
- [usePersistentStorage]
1092
+ [persistenceStorage]
1206
1093
  );
1207
1094
  const initProvider = useCallback(
1208
1095
  async (id, data) => {
@@ -1214,7 +1101,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1214
1101
  }
1215
1102
  return false;
1216
1103
  },
1217
- [presetProviders]
1104
+ [persistenceStorage, presetProviders, usePersistentStorage]
1218
1105
  );
1219
1106
  const dispatch = useCallback((action, data, callback) => {
1220
1107
  systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
@@ -1380,12 +1267,12 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1380
1267
  };
1381
1268
  return newP;
1382
1269
  });
1383
- if (modelProvider?.isPersisting && usePersistentStorage) {
1270
+ if (modelProvider?.isPersisting && persistenceStorage) {
1384
1271
  await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
1385
1272
  await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1386
1273
  }
1387
1274
  },
1388
- [providers, setDocuments, setProviders, persistDocument, removePersistedDocument]
1275
+ [providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
1389
1276
  );
1390
1277
  const updateDocument = useCallback(
1391
1278
  async ({ documentId, model, fields, data: pData }) => {
@@ -1402,9 +1289,9 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1402
1289
  const dataFromSource = await getData({
1403
1290
  id: dP.id,
1404
1291
  dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
1405
- isPersisting: !!dP.isPersisting && usePersistentStorage,
1292
+ isPersisting: !!dP.isPersisting && !!persistenceStorage,
1406
1293
  schema: dP.schema,
1407
- SQLite: SQLite2
1294
+ SQLite: persistenceStorage || void 0
1408
1295
  });
1409
1296
  systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
1410
1297
  data = dataFromSource;
@@ -1516,7 +1403,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1516
1403
  } else {
1517
1404
  systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
1518
1405
  }
1519
- if (providers[model]?.isPersisting && usePersistentStorage) {
1406
+ if (providers[model]?.isPersisting && persistenceStorage) {
1520
1407
  if (listeningProviders > 0) {
1521
1408
  await persistDocument({
1522
1409
  documentId,
@@ -1529,7 +1416,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1529
1416
  }
1530
1417
  }
1531
1418
  },
1532
- [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument]
1419
+ [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
1533
1420
  );
1534
1421
  const updateDataStore = useCallback(
1535
1422
  async ({
@@ -1603,7 +1490,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1603
1490
  }
1604
1491
  });
1605
1492
  if (providerListenersCount > 0) {
1606
- if (providers[model]?.isPersisting && usePersistentStorage) {
1493
+ if (providers[model]?.isPersisting && persistenceStorage) {
1607
1494
  await persistDocument({ documentId, model, data: newDocument });
1608
1495
  }
1609
1496
  setCounterDocuments((prev) => {
@@ -1623,7 +1510,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1623
1510
  return { id: documentId, document: newDocument };
1624
1511
  } else return false;
1625
1512
  },
1626
- [providers, setProviders, setCounterDocuments, setDocuments, persistDocument]
1513
+ [providers, setProviders, setCounterDocuments, setDocuments, persistDocument, persistenceStorage]
1627
1514
  );
1628
1515
  const deleteDocument = useCallback(
1629
1516
  async ({ documentId }) => {
@@ -1827,66 +1714,71 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1827
1714
  });
1828
1715
  result = providers[id];
1829
1716
  } else {
1830
- const dataFromSource = await getData({
1831
- schema: newItem.schema,
1832
- dataSource: newItem.dataSource || {},
1833
- id: newItem.id,
1834
- isPersisting: !!newItem.isPersisting && usePersistentStorage,
1835
- SQLite: SQLite2
1836
- });
1837
- console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1838
- var dataList = [];
1839
- var items = {};
1840
- const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1841
- dataS.forEach((item) => {
1842
- if (!item) return;
1843
- const { id: itId, ...data } = item;
1844
- const id2 = itId || uuid();
1845
- dataList.push(id2);
1846
- if (documents[id2]) {
1847
- items[id2] = {
1848
- ...documents[id2],
1849
- ...data
1850
- };
1851
- } else {
1852
- items[id2] = data;
1853
- }
1854
- });
1855
- setCounterDocuments((prev) => {
1856
- {
1717
+ try {
1718
+ const dataFromSource = await getData({
1719
+ schema: newItem.schema,
1720
+ dataSource: newItem.dataSource || {},
1721
+ id: newItem.id,
1722
+ isPersisting: !!newItem.isPersisting && !!persistenceStorage,
1723
+ SQLite: persistenceStorage || void 0
1724
+ });
1725
+ console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1726
+ var dataList = [];
1727
+ var items = {};
1728
+ const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1729
+ dataS.forEach((item) => {
1730
+ if (!item) return;
1731
+ const { id: itId, ...data } = item;
1732
+ const normalizedId = itId || uuid();
1733
+ dataList.push(normalizedId);
1734
+ if (documents[normalizedId]) {
1735
+ items[normalizedId] = {
1736
+ ...documents[normalizedId],
1737
+ ...data
1738
+ };
1739
+ } else {
1740
+ items[normalizedId] = data;
1741
+ }
1742
+ });
1743
+ setCounterDocuments((prev) => {
1857
1744
  const newC = { ...prev };
1858
- dataList.forEach((i) => {
1859
- if (newC[i]) {
1860
- newC[i] = newC[i] + 1;
1745
+ dataList.forEach((itemId) => {
1746
+ if (newC[itemId]) {
1747
+ newC[itemId] = newC[itemId] + 1;
1861
1748
  } else {
1862
- newC[i] = 1;
1749
+ newC[itemId] = 1;
1863
1750
  }
1864
1751
  });
1865
1752
  return newC;
1753
+ });
1754
+ if (Object.keys(items).length > 0) {
1755
+ setDocuments((prev) => ({ ...prev, ...items }));
1866
1756
  }
1867
- });
1868
- if (Object.keys(items).length > 0)
1869
- setDocuments((prev) => ({ ...prev, ...items }));
1870
- result = {
1871
- ...provider,
1872
- data: dataList,
1873
- lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1874
- };
1875
- setProviders((prev) => ({
1876
- ...prev,
1877
- [id]: result
1878
- }));
1879
- setCounterProviders((prev) => ({
1880
- ...prev,
1881
- [id]: 1
1882
- }));
1883
- dataList;
1884
- if (provider.dataSource?.socketListeners) registerProviderSockets(provider.dataSource.socketListeners);
1885
- console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1757
+ result = {
1758
+ ...provider,
1759
+ data: dataList,
1760
+ lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1761
+ };
1762
+ setProviders((prev) => ({
1763
+ ...prev,
1764
+ [id]: result
1765
+ }));
1766
+ setCounterProviders((prev) => ({
1767
+ ...prev,
1768
+ [id]: 1
1769
+ }));
1770
+ if (provider.dataSource?.socketListeners) {
1771
+ registerProviderSockets(provider.dataSource.socketListeners);
1772
+ }
1773
+ console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1774
+ } catch (error) {
1775
+ console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
1776
+ throw error;
1777
+ }
1886
1778
  }
1887
1779
  return result;
1888
1780
  },
1889
- [providers, SQLite2, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets]
1781
+ [providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
1890
1782
  );
1891
1783
  const unregisterProvider = useCallback(
1892
1784
  async (itemId) => {
@@ -2266,7 +2158,6 @@ export {
2266
2158
  DataStoreProvider_default as DataStoreProvider,
2267
2159
  DataStoreProvidersContext,
2268
2160
  DataStoreStableContext,
2269
- SQLite2 as SQLite,
2270
2161
  dataStoreFilterObject,
2271
2162
  doesObjectMatchFilter,
2272
2163
  doesValueMatchFilter,