@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.cjs CHANGED
@@ -56,7 +56,6 @@ __export(index_exports, {
56
56
  DataStoreProvider: () => DataStoreProvider_default,
57
57
  DataStoreProvidersContext: () => DataStoreProvidersContext,
58
58
  DataStoreStableContext: () => DataStoreStableContext,
59
- SQLite: () => SQLite2,
60
59
  dataStoreFilterObject: () => dataStoreFilterObject,
61
60
  doesObjectMatchFilter: () => doesObjectMatchFilter,
62
61
  doesValueMatchFilter: () => doesValueMatchFilter,
@@ -84,11 +83,6 @@ var import_react = require("react");
84
83
  // src/log.ts
85
84
  function systemLog(..._args) {
86
85
  }
87
- function systemLogError(...args) {
88
- if (typeof console !== "undefined" && typeof console.error === "function") {
89
- console.error(...args);
90
- }
91
- }
92
86
 
93
87
  // src/handleSocketMessage.ts
94
88
  var handleSocketMessage = (model, msg, dataProvider) => {
@@ -120,9 +114,6 @@ var handleSocketMessage = (model, msg, dataProvider) => {
120
114
  // src/handleData.ts
121
115
  var import_axios = __toESM(require("axios"), 1);
122
116
 
123
- // src/utils.ts
124
- var Crypto = __toESM(require("expo-crypto"), 1);
125
-
126
117
  // src/dotPath.ts
127
118
  function propToArray(prop) {
128
119
  return prop.split(".").reduce((ret, el, index, list) => {
@@ -167,6 +158,13 @@ function getValueByDotPath(obj, prop, value) {
167
158
 
168
159
  // src/utils.ts
169
160
  var import_dayjs = __toESM(require("dayjs"), 1);
161
+ function randomUuidSegment(template) {
162
+ return template.replace(/[xy]/g, (char) => {
163
+ const random = Math.floor(Math.random() * 16);
164
+ const value = char === "x" ? random : random & 3 | 8;
165
+ return value.toString(16);
166
+ });
167
+ }
170
168
  function escapeRegExp(string) {
171
169
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
172
170
  }
@@ -629,7 +627,13 @@ var dataStoreFilterObject = (obj, filter) => {
629
627
  return result;
630
628
  };
631
629
  function uuid() {
632
- return Crypto.randomUUID();
630
+ return [
631
+ randomUuidSegment("xxxxxxxx"),
632
+ randomUuidSegment("xxxx"),
633
+ "4" + randomUuidSegment("xxx"),
634
+ randomUuidSegment("yxxx"),
635
+ randomUuidSegment("xxxxxxxxxxxx")
636
+ ].join("-");
633
637
  }
634
638
  function isUuid(val) {
635
639
  if (typeof val !== "string") return false;
@@ -642,7 +646,7 @@ var saveData = async ({
642
646
  providerId,
643
647
  newData,
644
648
  dateUpdate,
645
- SQLite: SQLite3
649
+ SQLite
646
650
  }) => {
647
651
  console.time(`[SQL] saveData ${providerId}`);
648
652
  const batchSize = 8e3;
@@ -657,8 +661,7 @@ var saveData = async ({
657
661
  }
658
662
  }
659
663
  const placeholdersArray = Array.from({ length: Math.ceil(values.length / 4) }, () => placeholders).join(",");
660
- if (placeholdersArray.length < 10) console.log("DATA TO UPDATE", JSON.stringify(values, null, 2));
661
- const row = await SQLite3.query(`INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES ${placeholdersArray}`, values);
664
+ const row = await SQLite.query(`INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES ${placeholdersArray}`, values);
662
665
  systemLog("axios", "saveData result: ", JSON.stringify(row));
663
666
  }
664
667
  console.timeEnd(`[SQL] saveData ${providerId}`);
@@ -680,7 +683,7 @@ var buildUri = ({
680
683
  }
681
684
  return dataSource.uri || `${dataSource.model || ""}/`;
682
685
  };
683
- var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, changeTime }) => {
686
+ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime }) => {
684
687
  if (dataSource) systemLog("axios", "GET Data Source: ", buildUri({ dataSource, method: "read" }));
685
688
  else systemLog("axios", "No DataSource for ", id);
686
689
  let persistedData = [];
@@ -697,12 +700,24 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, ch
697
700
  } else {
698
701
  if (changeTime) {
699
702
  params.changeTime = changeTime;
700
- } else if (isPersisting && SQLite3) {
703
+ } else if (isPersisting && SQLite) {
701
704
  console.time("Persisted Data");
702
- const qDatum = await SQLite3.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
705
+ const qDatum = await SQLite.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
703
706
  systemLog("axios", "SQLite.read Posledni datum update: ", qDatum[0]?.lastUpdate);
704
707
  if (qDatum[0]?.lastUpdate) params.changeTime = qDatum[0].lastUpdate;
705
- persistedData = qDatum.map((item) => ({ id: item.id, ...JSON.parse(item.data) }));
708
+ persistedData = qDatum.map((item) => {
709
+ try {
710
+ const parsedData = typeof item.data === "string" ? JSON.parse(item.data) : item.data;
711
+ if (!parsedData || typeof parsedData !== "object" || Array.isArray(parsedData)) {
712
+ systemLog("axios", "SQLite.read Preskakuji neplatny dokument:", item.id);
713
+ return null;
714
+ }
715
+ return { id: item.id, ...parsedData };
716
+ } catch (error) {
717
+ console.error("[datastore] Nepodarilo se zpracovat SQL data pro dokument", item.id, error);
718
+ return null;
719
+ }
720
+ }).filter((item) => item !== null);
706
721
  console.timeEnd("Persisted Data");
707
722
  }
708
723
  if (dataSource) {
@@ -750,8 +765,8 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, ch
750
765
  JSON.stringify(newData).length,
751
766
  "Bytes"
752
767
  );
753
- if (isPersisting && SQLite3) {
754
- await saveData({ providerId: id, newData, SQLite: SQLite3, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
768
+ if (isPersisting && SQLite) {
769
+ await saveData({ providerId: id, newData, SQLite, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
755
770
  }
756
771
  }
757
772
  }
@@ -816,7 +831,6 @@ var deleteData = async ({ dataSource, data }) => {
816
831
  // src/DataStoreProvider.tsx
817
832
  var import_socket = require("socket.io-client");
818
833
  var import_axios2 = __toESM(require("axios"), 1);
819
- var import_expo_localization = require("expo-localization");
820
834
 
821
835
  // src/templates.ts
822
836
  var _renderMyTemplate = (templateString, data) => {
@@ -847,162 +861,7 @@ function renderJSONTemplate(val, data) {
847
861
 
848
862
  // src/DataStoreProvider.tsx
849
863
  var import_isEqual = __toESM(require("lodash/isEqual.js"), 1);
850
-
851
- // src/database.ts
852
- var SQL = __toESM(require("expo-sqlite"), 1);
853
- var SQLite = class {
854
- constructor(name) {
855
- this.db = null;
856
- this.dbName = name || "modelaz.db";
857
- this.initDB();
858
- }
859
- async initDB() {
860
- if (!this.db) {
861
- try {
862
- systemLog("sql", "[initDB]");
863
- this.db = await SQL.openDatabaseAsync(this.dbName);
864
- await this.createTables({
865
- documents: "id TEXT PRIMARY KEY, data TEXT, model TEXT, lastUpdate TEXT"
866
- // logs: "time TEXT PRIMARY KEY, module TEXT, message TEXT",
867
- });
868
- } catch (e) {
869
- console.log("INITDB ERROR", e);
870
- throw e;
871
- }
872
- }
873
- }
874
- async getDb() {
875
- if (!this.db) {
876
- await this.initDB();
877
- }
878
- if (!this.db) {
879
- throw new Error("Database is not initialized");
880
- }
881
- return this.db;
882
- }
883
- async createTable(table, tableSchema) {
884
- try {
885
- systemLog("sql", "[createTable]", table);
886
- const db = await this.getDb();
887
- const result = await db.runAsync(`CREATE TABLE IF NOT EXISTS '${table}' (${tableSchema})`);
888
- systemLog("sql", "[createTable] result: ", JSON.stringify(result));
889
- return result;
890
- } catch (e) {
891
- systemLogError("sql", "[createTable]", e);
892
- throw e;
893
- }
894
- }
895
- async createTables(tables) {
896
- try {
897
- systemLog("sql", "[createTables]", tables);
898
- const query = Object.entries(tables).reduce((acc, [table, schema]) => {
899
- return acc + `CREATE TABLE IF NOT EXISTS '${table}' (${schema});`;
900
- }, "");
901
- const db = await this.getDb();
902
- const result = await db.runAsync(query);
903
- systemLog("sql", "[createTables] result: ", JSON.stringify(result));
904
- return result;
905
- } catch (e) {
906
- systemLogError("sql", "[createTable]", e);
907
- throw e;
908
- }
909
- }
910
- /**
911
- * Smazani starych logu
912
- */
913
- async deleteLogs() {
914
- systemLog("sql", "[query] delete old Logs", this.db);
915
- try {
916
- const db = await this.getDb();
917
- await db.runAsync(`DELETE FROM logs WHERE strftime('%s', 'now') - strftime('%s', time) > 3600`);
918
- } catch (error) {
919
- throw error;
920
- }
921
- }
922
- async read(query, args) {
923
- try {
924
- systemLog("sql", "[read]", query);
925
- const db = await this.getDb();
926
- const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
927
- systemLog("sql", "[read] result ", result.length);
928
- return result;
929
- } catch (e) {
930
- systemLogError("sql", "[read]", e);
931
- throw e;
932
- }
933
- }
934
- async query(query, args) {
935
- try {
936
- systemLog("sql", "[query]->", query);
937
- const db = await this.getDb();
938
- const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
939
- systemLog("sql", result);
940
- return result;
941
- } catch (error) {
942
- console.error("INSERT ERROR", error);
943
- systemLogError("sql", error);
944
- throw error;
945
- }
946
- }
947
- async dropTable(table) {
948
- try {
949
- systemLog("sql", "dropTable", table);
950
- console.time("[SQL] dropTable");
951
- const db = await this.getDb();
952
- const result = await db.runAsync(`DROP TABLE ${table}`);
953
- console.timeEnd("[SQL] dropTable");
954
- return result;
955
- } catch (error) {
956
- throw error;
957
- }
958
- }
959
- async emptyTable(table) {
960
- try {
961
- systemLog("sql", `[emptyTable]`, table);
962
- const db = await this.getDb();
963
- const result = await db.runAsync(`DELETE FROM '${table}'`);
964
- systemLog("sql", "[emptyTable] result", result);
965
- return result;
966
- } catch (error) {
967
- throw error;
968
- }
969
- }
970
- async getTables() {
971
- systemLog("sql", "Jdu zkusit nacist tabulky z ", JSON.stringify(this.dbName));
972
- try {
973
- const db = await this.getDb();
974
- const result = await db.getAllAsync('SELECT name FROM sqlite_master WHERE type="table"');
975
- systemLog("sql", "DB Result:", result);
976
- return result;
977
- } catch (error) {
978
- throw error;
979
- }
980
- }
981
- async resetDatabase() {
982
- try {
983
- systemLog("sql", "Reset database", this.dbName);
984
- console.time("DELETING");
985
- systemLog("sql", "Closing");
986
- const db = await this.getDb();
987
- await db.closeAsync();
988
- systemLog("sql", "Deleting");
989
- await SQL.deleteDatabaseAsync(this.dbName);
990
- console.timeEnd("DELETING");
991
- console.time("INIT");
992
- this.db = null;
993
- systemLog("sql", "Zacinam inicializovat databazi databaze");
994
- await this.initDB();
995
- systemLog("sql", "Inicializovana databaze");
996
- console.timeEnd("INIT");
997
- } catch (e) {
998
- systemLogError("sql", "[resetDatabase]", e);
999
- }
1000
- }
1001
- };
1002
-
1003
- // src/DataStoreProvider.tsx
1004
864
  var import_jsx_runtime = require("react/jsx-runtime");
1005
- var SQLite2 = new SQLite("modelaz.db");
1006
865
  var DataStoreContext = (0, import_react.createContext)({});
1007
866
  var DataStoreDocumentsContext = (0, import_react.createContext)({});
1008
867
  var DataStoreProvidersContext = (0, import_react.createContext)({});
@@ -1082,7 +941,23 @@ var buildDocumentTemplateParams = (model, documentId) => {
1082
941
  [templateIdKey]: documentId
1083
942
  };
1084
943
  };
1085
- var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, ...props }) => {
944
+ var resolveLocale = () => {
945
+ if (typeof Intl !== "undefined" && typeof Intl.DateTimeFormat === "function") {
946
+ const locale = Intl.DateTimeFormat().resolvedOptions().locale;
947
+ if (locale) return locale;
948
+ }
949
+ if (typeof navigator !== "undefined") {
950
+ if (typeof navigator.language === "string" && navigator.language.length > 0) {
951
+ return navigator.language;
952
+ }
953
+ if (Array.isArray(navigator.languages) && navigator.languages.length > 0) {
954
+ const firstLocale = navigator.languages.find((value) => typeof value === "string" && value.length > 0);
955
+ if (firstLocale) return firstLocale;
956
+ }
957
+ }
958
+ return void 0;
959
+ };
960
+ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, locale, storage = null, ...props }) => {
1086
961
  const [isLive, setIsLive] = (0, import_react.useState)(false);
1087
962
  const [isSynchronizing, setIsSynchronizing] = (0, import_react.useState)(true);
1088
963
  const [sockets, setSockets] = (0, import_react.useState)({});
@@ -1096,11 +971,17 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1096
971
  const [counterProviders, setCounterProviders] = (0, import_react.useState)({});
1097
972
  const [counterDocuments, setCounterDocuments] = (0, import_react.useState)({});
1098
973
  const didInitialLiveSyncRef = (0, import_react.useRef)(false);
974
+ const persistenceStorage = (0, import_react.useMemo)(
975
+ () => usePersistentStorage ? storage : null,
976
+ [storage, usePersistentStorage]
977
+ );
1099
978
  (0, import_react.useEffect)(() => {
1100
979
  if (!restServer) return;
1101
- const localization = (0, import_expo_localization.getLocales)();
980
+ const resolvedLocale = locale || resolveLocale();
1102
981
  import_axios2.default.defaults.baseURL = restServer;
1103
- import_axios2.default.defaults.headers.common["Accept-Language"] = localization[0]?.languageCode;
982
+ if (resolvedLocale) {
983
+ import_axios2.default.defaults.headers.common["Accept-Language"] = resolvedLocale;
984
+ }
1104
985
  systemLog("dsp", "[INIT] Axios baseURL:", restServer);
1105
986
  async function checkServer() {
1106
987
  try {
@@ -1120,7 +1001,12 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1120
1001
  }
1121
1002
  }
1122
1003
  checkServer();
1123
- }, [restServer]);
1004
+ }, [locale, restServer]);
1005
+ (0, import_react.useEffect)(() => {
1006
+ if (usePersistentStorage && !storage) {
1007
+ systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
1008
+ }
1009
+ }, [persistenceStorage, storage, usePersistentStorage]);
1124
1010
  const socketRoomHandlersRef = (0, import_react.useRef)({});
1125
1011
  const socketActionHandlersRef = (0, import_react.useRef)({});
1126
1012
  systemLog("dsp", "START");
@@ -1179,22 +1065,22 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1179
1065
  data,
1180
1066
  lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
1181
1067
  }) => {
1182
- if (!usePersistentStorage) return;
1183
- await SQLite2.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
1068
+ if (!persistenceStorage) return;
1069
+ await persistenceStorage.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
1184
1070
  documentId,
1185
1071
  JSON.stringify(data),
1186
1072
  model,
1187
1073
  lastUpdate
1188
1074
  ]);
1189
1075
  },
1190
- [usePersistentStorage]
1076
+ [persistenceStorage]
1191
1077
  );
1192
1078
  const removePersistedDocument = (0, import_react.useCallback)(
1193
1079
  async (documentId) => {
1194
- if (!usePersistentStorage) return;
1195
- await SQLite2.query("DELETE FROM documents WHERE id = ?", [documentId]);
1080
+ if (!persistenceStorage) return;
1081
+ await persistenceStorage.query("DELETE FROM documents WHERE id = ?", [documentId]);
1196
1082
  },
1197
- [usePersistentStorage]
1083
+ [persistenceStorage]
1198
1084
  );
1199
1085
  const synchronizeDataStore = (0, import_react.useCallback)(async () => {
1200
1086
  setIsSynchronizing(true);
@@ -1267,8 +1153,8 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1267
1153
  }, [socket]);
1268
1154
  const resetDataStore = (0, import_react.useCallback)(async () => {
1269
1155
  console.time("[DSP] resetDataStore");
1270
- if (usePersistentStorage) {
1271
- await SQLite2.emptyTable("documents");
1156
+ if (persistenceStorage?.emptyTable) {
1157
+ await persistenceStorage.emptyTable("documents");
1272
1158
  }
1273
1159
  setSockets({});
1274
1160
  setProviders({});
@@ -1276,13 +1162,13 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1276
1162
  setCounterProviders({});
1277
1163
  setCounterDocuments({});
1278
1164
  console.timeEnd("[DSP] resetDataStore");
1279
- }, [usePersistentStorage]);
1165
+ }, [persistenceStorage]);
1280
1166
  const resetProvider = (0, import_react.useCallback)(
1281
1167
  async (provider) => {
1282
- if (!usePersistentStorage) return;
1283
- await SQLite2.query(`DELETE FROM documents WHERE model='${provider}'`);
1168
+ if (!persistenceStorage) return;
1169
+ await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
1284
1170
  },
1285
- [usePersistentStorage]
1171
+ [persistenceStorage]
1286
1172
  );
1287
1173
  const initProvider = (0, import_react.useCallback)(
1288
1174
  async (id, data) => {
@@ -1294,7 +1180,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1294
1180
  }
1295
1181
  return false;
1296
1182
  },
1297
- [presetProviders]
1183
+ [persistenceStorage, presetProviders, usePersistentStorage]
1298
1184
  );
1299
1185
  const dispatch = (0, import_react.useCallback)((action, data, callback) => {
1300
1186
  systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
@@ -1460,12 +1346,12 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1460
1346
  };
1461
1347
  return newP;
1462
1348
  });
1463
- if (modelProvider?.isPersisting && usePersistentStorage) {
1349
+ if (modelProvider?.isPersisting && persistenceStorage) {
1464
1350
  await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
1465
1351
  await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1466
1352
  }
1467
1353
  },
1468
- [providers, setDocuments, setProviders, persistDocument, removePersistedDocument]
1354
+ [providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
1469
1355
  );
1470
1356
  const updateDocument = (0, import_react.useCallback)(
1471
1357
  async ({ documentId, model, fields, data: pData }) => {
@@ -1482,9 +1368,9 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1482
1368
  const dataFromSource = await getData({
1483
1369
  id: dP.id,
1484
1370
  dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
1485
- isPersisting: !!dP.isPersisting && usePersistentStorage,
1371
+ isPersisting: !!dP.isPersisting && !!persistenceStorage,
1486
1372
  schema: dP.schema,
1487
- SQLite: SQLite2
1373
+ SQLite: persistenceStorage || void 0
1488
1374
  });
1489
1375
  systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
1490
1376
  data = dataFromSource;
@@ -1596,7 +1482,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1596
1482
  } else {
1597
1483
  systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
1598
1484
  }
1599
- if (providers[model]?.isPersisting && usePersistentStorage) {
1485
+ if (providers[model]?.isPersisting && persistenceStorage) {
1600
1486
  if (listeningProviders > 0) {
1601
1487
  await persistDocument({
1602
1488
  documentId,
@@ -1609,7 +1495,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1609
1495
  }
1610
1496
  }
1611
1497
  },
1612
- [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument]
1498
+ [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
1613
1499
  );
1614
1500
  const updateDataStore = (0, import_react.useCallback)(
1615
1501
  async ({
@@ -1683,7 +1569,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1683
1569
  }
1684
1570
  });
1685
1571
  if (providerListenersCount > 0) {
1686
- if (providers[model]?.isPersisting && usePersistentStorage) {
1572
+ if (providers[model]?.isPersisting && persistenceStorage) {
1687
1573
  await persistDocument({ documentId, model, data: newDocument });
1688
1574
  }
1689
1575
  setCounterDocuments((prev) => {
@@ -1703,7 +1589,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1703
1589
  return { id: documentId, document: newDocument };
1704
1590
  } else return false;
1705
1591
  },
1706
- [providers, setProviders, setCounterDocuments, setDocuments, persistDocument]
1592
+ [providers, setProviders, setCounterDocuments, setDocuments, persistDocument, persistenceStorage]
1707
1593
  );
1708
1594
  const deleteDocument = (0, import_react.useCallback)(
1709
1595
  async ({ documentId }) => {
@@ -1907,66 +1793,71 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
1907
1793
  });
1908
1794
  result = providers[id];
1909
1795
  } else {
1910
- const dataFromSource = await getData({
1911
- schema: newItem.schema,
1912
- dataSource: newItem.dataSource || {},
1913
- id: newItem.id,
1914
- isPersisting: !!newItem.isPersisting && usePersistentStorage,
1915
- SQLite: SQLite2
1916
- });
1917
- console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1918
- var dataList = [];
1919
- var items = {};
1920
- const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1921
- dataS.forEach((item) => {
1922
- if (!item) return;
1923
- const { id: itId, ...data } = item;
1924
- const id2 = itId || uuid();
1925
- dataList.push(id2);
1926
- if (documents[id2]) {
1927
- items[id2] = {
1928
- ...documents[id2],
1929
- ...data
1930
- };
1931
- } else {
1932
- items[id2] = data;
1933
- }
1934
- });
1935
- setCounterDocuments((prev) => {
1936
- {
1796
+ try {
1797
+ const dataFromSource = await getData({
1798
+ schema: newItem.schema,
1799
+ dataSource: newItem.dataSource || {},
1800
+ id: newItem.id,
1801
+ isPersisting: !!newItem.isPersisting && !!persistenceStorage,
1802
+ SQLite: persistenceStorage || void 0
1803
+ });
1804
+ console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1805
+ var dataList = [];
1806
+ var items = {};
1807
+ const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1808
+ dataS.forEach((item) => {
1809
+ if (!item) return;
1810
+ const { id: itId, ...data } = item;
1811
+ const normalizedId = itId || uuid();
1812
+ dataList.push(normalizedId);
1813
+ if (documents[normalizedId]) {
1814
+ items[normalizedId] = {
1815
+ ...documents[normalizedId],
1816
+ ...data
1817
+ };
1818
+ } else {
1819
+ items[normalizedId] = data;
1820
+ }
1821
+ });
1822
+ setCounterDocuments((prev) => {
1937
1823
  const newC = { ...prev };
1938
- dataList.forEach((i) => {
1939
- if (newC[i]) {
1940
- newC[i] = newC[i] + 1;
1824
+ dataList.forEach((itemId) => {
1825
+ if (newC[itemId]) {
1826
+ newC[itemId] = newC[itemId] + 1;
1941
1827
  } else {
1942
- newC[i] = 1;
1828
+ newC[itemId] = 1;
1943
1829
  }
1944
1830
  });
1945
1831
  return newC;
1832
+ });
1833
+ if (Object.keys(items).length > 0) {
1834
+ setDocuments((prev) => ({ ...prev, ...items }));
1946
1835
  }
1947
- });
1948
- if (Object.keys(items).length > 0)
1949
- setDocuments((prev) => ({ ...prev, ...items }));
1950
- result = {
1951
- ...provider,
1952
- data: dataList,
1953
- lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1954
- };
1955
- setProviders((prev) => ({
1956
- ...prev,
1957
- [id]: result
1958
- }));
1959
- setCounterProviders((prev) => ({
1960
- ...prev,
1961
- [id]: 1
1962
- }));
1963
- dataList;
1964
- if (provider.dataSource?.socketListeners) registerProviderSockets(provider.dataSource.socketListeners);
1965
- console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1836
+ result = {
1837
+ ...provider,
1838
+ data: dataList,
1839
+ lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1840
+ };
1841
+ setProviders((prev) => ({
1842
+ ...prev,
1843
+ [id]: result
1844
+ }));
1845
+ setCounterProviders((prev) => ({
1846
+ ...prev,
1847
+ [id]: 1
1848
+ }));
1849
+ if (provider.dataSource?.socketListeners) {
1850
+ registerProviderSockets(provider.dataSource.socketListeners);
1851
+ }
1852
+ console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1853
+ } catch (error) {
1854
+ console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
1855
+ throw error;
1856
+ }
1966
1857
  }
1967
1858
  return result;
1968
1859
  },
1969
- [providers, SQLite2, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets]
1860
+ [providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
1970
1861
  );
1971
1862
  const unregisterProvider = (0, import_react.useCallback)(
1972
1863
  async (itemId) => {
@@ -2347,7 +2238,6 @@ var COLOR_DS = COLOR_MAGENTA;
2347
2238
  DataStoreProvider,
2348
2239
  DataStoreProvidersContext,
2349
2240
  DataStoreStableContext,
2350
- SQLite,
2351
2241
  dataStoreFilterObject,
2352
2242
  doesObjectMatchFilter,
2353
2243
  doesValueMatchFilter,