@mgarlik/datastore 0.1.0 → 0.1.2

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,1002 +941,1037 @@ var buildDocumentTemplateParams = (model, documentId) => {
1082
941
  [templateIdKey]: documentId
1083
942
  };
1084
943
  };
1085
- var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, ...props }) => {
1086
- const [isLive, setIsLive] = (0, import_react.useState)(false);
1087
- const [isSynchronizing, setIsSynchronizing] = (0, import_react.useState)(true);
1088
- const [sockets, setSockets] = (0, import_react.useState)({});
1089
- const [providers, setProviders] = (0, import_react.useState)({});
1090
- const [documents, setDocuments] = (0, import_react.useState)({});
1091
- const externalProvidersRef = (0, import_react.useRef)({});
1092
- const externalDocumentsRef = (0, import_react.useRef)({});
1093
- const providerSubscribersRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
1094
- const previousProviderUpdateIdsRef = (0, import_react.useRef)({});
1095
- const [dispatcher, setDispatcher] = (0, import_react.useState)({ isBussy: false, actions: [] });
1096
- const [counterProviders, setCounterProviders] = (0, import_react.useState)({});
1097
- const [counterDocuments, setCounterDocuments] = (0, import_react.useState)({});
1098
- const didInitialLiveSyncRef = (0, import_react.useRef)(false);
1099
- (0, import_react.useEffect)(() => {
1100
- if (!restServer) return;
1101
- const localization = (0, import_expo_localization.getLocales)();
1102
- import_axios2.default.defaults.baseURL = restServer;
1103
- import_axios2.default.defaults.headers.common["Accept-Language"] = localization[0]?.languageCode;
1104
- systemLog("dsp", "[INIT] Axios baseURL:", restServer);
1105
- async function checkServer() {
1106
- try {
1107
- const response = await import_axios2.default.head("/", {
1108
- timeout: 7e3,
1109
- validateStatus: () => true
1110
- });
1111
- systemLog("dsp", "[INIT] Axios Success, status:", response.status);
1112
- } catch (e) {
1113
- if (import_axios2.default.isAxiosError(e)) {
1114
- systemLog("dsp", "[INIT] Axios Error:", e.code ?? "UNKNOWN", e.message);
1115
- } else {
1116
- systemLog("dsp", "[INIT] Axios Error:", String(e));
1117
- }
1118
- } finally {
1119
- systemLog("dsp", "[INIT] Axios check done");
1120
- }
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;
1121
952
  }
1122
- checkServer();
1123
- }, [restServer]);
1124
- const socketRoomHandlersRef = (0, import_react.useRef)({});
1125
- const socketActionHandlersRef = (0, import_react.useRef)({});
1126
- systemLog("dsp", "START");
1127
- const socket = (0, import_react.useMemo)(() => (0, import_socket.io)(socketServer?.url, socketServer?.params), [socketServer?.url, socketServer.params]);
1128
- const handleSocketConnect = (0, import_react.useCallback)(() => setIsLive(true), []);
1129
- const handleSocketDisconnect = (0, import_react.useCallback)(() => setIsLive(false), []);
1130
- const getSocketAuthToken = (0, import_react.useCallback)(() => {
1131
- const authorizationHeader = import_axios2.default.defaults.headers.common["Authorization"];
1132
- if (typeof authorizationHeader === "string" && authorizationHeader.length > 0) {
1133
- return authorizationHeader.startsWith("Bearer ") ? authorizationHeader : `Bearer ${authorizationHeader}`;
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;
1134
956
  }
1135
- return "Bearer ";
1136
- }, []);
1137
- const subscribeToProvider = (0, import_react.useCallback)((providerId, callback) => {
1138
- const subscribersByProvider = providerSubscribersRef.current;
1139
- const providerSubscribers = subscribersByProvider.get(providerId) || /* @__PURE__ */ new Set();
1140
- providerSubscribers.add(callback);
1141
- subscribersByProvider.set(providerId, providerSubscribers);
1142
- return () => {
1143
- const activeSubscribers = subscribersByProvider.get(providerId);
1144
- if (!activeSubscribers) return;
1145
- activeSubscribers.delete(callback);
1146
- if (activeSubscribers.size === 0) subscribersByProvider.delete(providerId);
1147
- };
1148
- }, []);
1149
- const getProviderLastUpdate = (0, import_react.useCallback)((providerId) => {
1150
- return externalProvidersRef.current?.[providerId]?.lastUpdate?.id ?? null;
1151
- }, []);
1152
- const getExternalDocuments = (0, import_react.useCallback)(() => externalDocumentsRef.current, []);
1153
- const getExternalProviders = (0, import_react.useCallback)(() => externalProvidersRef.current, []);
1154
- (0, import_react.useEffect)(() => {
1155
- externalProvidersRef.current = providers;
1156
- const currentUpdateIds = {};
1157
- Object.keys(providers).forEach((providerId) => {
1158
- currentUpdateIds[providerId] = providers[providerId]?.lastUpdate?.id ?? null;
1159
- if (previousProviderUpdateIdsRef.current[providerId] !== currentUpdateIds[providerId]) {
1160
- const subscribers = providerSubscribersRef.current.get(providerId);
1161
- subscribers?.forEach((callback) => callback());
957
+ }
958
+ return void 0;
959
+ };
960
+ var DataStoreProvider = (0, import_react.forwardRef)(
961
+ ({ socketServer, restServer, usePersistentStorage = true, locale, storage = null, ...props }, ref) => {
962
+ const [isLive, setIsLive] = (0, import_react.useState)(false);
963
+ const [isSynchronizing, setIsSynchronizing] = (0, import_react.useState)(true);
964
+ const [sockets, setSockets] = (0, import_react.useState)({});
965
+ const [providers, setProviders] = (0, import_react.useState)({});
966
+ const [documents, setDocuments] = (0, import_react.useState)({});
967
+ const externalProvidersRef = (0, import_react.useRef)({});
968
+ const externalDocumentsRef = (0, import_react.useRef)({});
969
+ const providerSubscribersRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
970
+ const previousProviderUpdateIdsRef = (0, import_react.useRef)({});
971
+ const [dispatcher, setDispatcher] = (0, import_react.useState)({ isBussy: false, actions: [] });
972
+ const [counterProviders, setCounterProviders] = (0, import_react.useState)({});
973
+ const [counterDocuments, setCounterDocuments] = (0, import_react.useState)({});
974
+ const didInitialLiveSyncRef = (0, import_react.useRef)(false);
975
+ const persistenceStorage = (0, import_react.useMemo)(
976
+ () => usePersistentStorage ? storage : null,
977
+ [storage, usePersistentStorage]
978
+ );
979
+ (0, import_react.useEffect)(() => {
980
+ if (!restServer) return;
981
+ const resolvedLocale = locale || resolveLocale();
982
+ import_axios2.default.defaults.baseURL = restServer;
983
+ if (resolvedLocale) {
984
+ import_axios2.default.defaults.headers.common["Accept-Language"] = resolvedLocale;
1162
985
  }
1163
- });
1164
- Object.keys(previousProviderUpdateIdsRef.current).forEach((providerId) => {
1165
- if (!(providerId in currentUpdateIds)) {
1166
- const subscribers = providerSubscribersRef.current.get(providerId);
1167
- subscribers?.forEach((callback) => callback());
986
+ systemLog("dsp", "[INIT] Axios baseURL:", restServer);
987
+ async function checkServer() {
988
+ try {
989
+ const response = await import_axios2.default.head("/", {
990
+ timeout: 7e3,
991
+ validateStatus: () => true
992
+ });
993
+ systemLog("dsp", "[INIT] Axios Success, status:", response.status);
994
+ } catch (e) {
995
+ if (import_axios2.default.isAxiosError(e)) {
996
+ systemLog("dsp", "[INIT] Axios Error:", e.code ?? "UNKNOWN", e.message);
997
+ } else {
998
+ systemLog("dsp", "[INIT] Axios Error:", String(e));
999
+ }
1000
+ } finally {
1001
+ systemLog("dsp", "[INIT] Axios check done");
1002
+ }
1168
1003
  }
1169
- });
1170
- previousProviderUpdateIdsRef.current = currentUpdateIds;
1171
- }, [providers]);
1172
- (0, import_react.useEffect)(() => {
1173
- externalDocumentsRef.current = documents;
1174
- }, [documents]);
1175
- const persistDocument = (0, import_react.useCallback)(
1176
- async ({
1177
- documentId,
1178
- model,
1179
- data,
1180
- lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
1181
- }) => {
1182
- if (!usePersistentStorage) return;
1183
- await SQLite2.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
1004
+ checkServer();
1005
+ }, [locale, restServer]);
1006
+ (0, import_react.useEffect)(() => {
1007
+ if (usePersistentStorage && !storage) {
1008
+ systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
1009
+ }
1010
+ }, [persistenceStorage, storage, usePersistentStorage]);
1011
+ const socketRoomHandlersRef = (0, import_react.useRef)({});
1012
+ const socketActionHandlersRef = (0, import_react.useRef)({});
1013
+ systemLog("dsp", "START");
1014
+ const socket = (0, import_react.useMemo)(() => (0, import_socket.io)(socketServer?.url, socketServer?.params), [socketServer?.url, socketServer.params]);
1015
+ const handleSocketConnect = (0, import_react.useCallback)(() => setIsLive(true), []);
1016
+ const handleSocketDisconnect = (0, import_react.useCallback)(() => setIsLive(false), []);
1017
+ const getSocketAuthToken = (0, import_react.useCallback)(() => {
1018
+ const authorizationHeader = import_axios2.default.defaults.headers.common["Authorization"];
1019
+ if (typeof authorizationHeader === "string" && authorizationHeader.length > 0) {
1020
+ return authorizationHeader.startsWith("Bearer ") ? authorizationHeader : `Bearer ${authorizationHeader}`;
1021
+ }
1022
+ return "Bearer ";
1023
+ }, []);
1024
+ const subscribeToProvider = (0, import_react.useCallback)((providerId, callback) => {
1025
+ const subscribersByProvider = providerSubscribersRef.current;
1026
+ const providerSubscribers = subscribersByProvider.get(providerId) || /* @__PURE__ */ new Set();
1027
+ providerSubscribers.add(callback);
1028
+ subscribersByProvider.set(providerId, providerSubscribers);
1029
+ return () => {
1030
+ const activeSubscribers = subscribersByProvider.get(providerId);
1031
+ if (!activeSubscribers) return;
1032
+ activeSubscribers.delete(callback);
1033
+ if (activeSubscribers.size === 0) subscribersByProvider.delete(providerId);
1034
+ };
1035
+ }, []);
1036
+ const getProviderLastUpdate = (0, import_react.useCallback)((providerId) => {
1037
+ return externalProvidersRef.current?.[providerId]?.lastUpdate?.id ?? null;
1038
+ }, []);
1039
+ const getExternalDocuments = (0, import_react.useCallback)(() => externalDocumentsRef.current, []);
1040
+ const getExternalProviders = (0, import_react.useCallback)(() => externalProvidersRef.current, []);
1041
+ (0, import_react.useEffect)(() => {
1042
+ externalProvidersRef.current = providers;
1043
+ const currentUpdateIds = {};
1044
+ Object.keys(providers).forEach((providerId) => {
1045
+ currentUpdateIds[providerId] = providers[providerId]?.lastUpdate?.id ?? null;
1046
+ if (previousProviderUpdateIdsRef.current[providerId] !== currentUpdateIds[providerId]) {
1047
+ const subscribers = providerSubscribersRef.current.get(providerId);
1048
+ subscribers?.forEach((callback) => callback());
1049
+ }
1050
+ });
1051
+ Object.keys(previousProviderUpdateIdsRef.current).forEach((providerId) => {
1052
+ if (!(providerId in currentUpdateIds)) {
1053
+ const subscribers = providerSubscribersRef.current.get(providerId);
1054
+ subscribers?.forEach((callback) => callback());
1055
+ }
1056
+ });
1057
+ previousProviderUpdateIdsRef.current = currentUpdateIds;
1058
+ }, [providers]);
1059
+ (0, import_react.useEffect)(() => {
1060
+ externalDocumentsRef.current = documents;
1061
+ }, [documents]);
1062
+ const persistDocument = (0, import_react.useCallback)(
1063
+ async ({
1184
1064
  documentId,
1185
- JSON.stringify(data),
1186
1065
  model,
1187
- lastUpdate
1188
- ]);
1189
- },
1190
- [usePersistentStorage]
1191
- );
1192
- const removePersistedDocument = (0, import_react.useCallback)(
1193
- async (documentId) => {
1194
- if (!usePersistentStorage) return;
1195
- await SQLite2.query("DELETE FROM documents WHERE id = ?", [documentId]);
1196
- },
1197
- [usePersistentStorage]
1198
- );
1199
- const synchronizeDataStore = (0, import_react.useCallback)(async () => {
1200
- setIsSynchronizing(true);
1201
- const stats = { processed: 0, updated: 0, failed: 0 };
1202
- try {
1203
- for (const key of Object.keys(providers)) {
1204
- stats.processed++;
1205
- try {
1206
- const { data, lastUpdate, ...rest } = providers[key];
1207
- const response = await getData({
1208
- id: key,
1209
- ...rest,
1210
- changeTime: lastUpdate.time
1211
- });
1212
- if (response.length > 0) {
1213
- const updateData = {};
1214
- response.forEach((item) => {
1215
- const { id, ...d } = item;
1216
- updateData[id] = d;
1066
+ data,
1067
+ lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
1068
+ }) => {
1069
+ if (!persistenceStorage) return;
1070
+ await persistenceStorage.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
1071
+ documentId,
1072
+ JSON.stringify(data),
1073
+ model,
1074
+ lastUpdate
1075
+ ]);
1076
+ },
1077
+ [persistenceStorage]
1078
+ );
1079
+ const removePersistedDocument = (0, import_react.useCallback)(
1080
+ async (documentId) => {
1081
+ if (!persistenceStorage) return;
1082
+ await persistenceStorage.query("DELETE FROM documents WHERE id = ?", [documentId]);
1083
+ },
1084
+ [persistenceStorage]
1085
+ );
1086
+ const synchronizeDataStore = (0, import_react.useCallback)(async () => {
1087
+ setIsSynchronizing(true);
1088
+ const stats = { processed: 0, updated: 0, failed: 0 };
1089
+ try {
1090
+ for (const key of Object.keys(providers)) {
1091
+ stats.processed++;
1092
+ try {
1093
+ const { data, lastUpdate, ...rest } = providers[key];
1094
+ const response = await getData({
1095
+ id: key,
1096
+ ...rest,
1097
+ changeTime: lastUpdate.time
1217
1098
  });
1218
- await updateDocuments({ model: key, documents: updateData, mode: "replace" });
1219
- stats.updated++;
1099
+ if (response.length > 0) {
1100
+ const updateData = {};
1101
+ response.forEach((item) => {
1102
+ const { id, ...d } = item;
1103
+ updateData[id] = d;
1104
+ });
1105
+ await updateDocuments({ model: key, documents: updateData, mode: "replace" });
1106
+ stats.updated++;
1107
+ }
1108
+ } catch (e) {
1109
+ stats.failed++;
1110
+ console.error("[DSP] synchronizeDataStore provider error:", key, e);
1220
1111
  }
1221
- } catch (e) {
1222
- stats.failed++;
1223
- console.error("[DSP] synchronizeDataStore provider error:", key, e);
1224
1112
  }
1113
+ } finally {
1114
+ setIsSynchronizing(false);
1115
+ systemLog("dsp", "[synchronizeDataStore] Hotovo:", stats);
1225
1116
  }
1226
- } finally {
1227
- setIsSynchronizing(false);
1228
- systemLog("dsp", "[synchronizeDataStore] Hotovo:", stats);
1229
- }
1230
- }, [providers]);
1231
- (0, import_react.useEffect)(() => {
1232
- if (isLive) {
1233
- systemLog("dsp", "useEffect[isLive] Sockets: ", JSON.stringify(sockets, null, 2));
1234
- const ss = Object.keys(sockets);
1235
- systemLog("dsp", "useEffect[isLive] registruji", ss);
1236
- if (ss?.length > 0) socket.emit("joinRooms", JSON.stringify(ss));
1237
- if (!didInitialLiveSyncRef.current) {
1238
- didInitialLiveSyncRef.current = true;
1239
- systemLog("dsp", "useEffect[isLive] Zacinam synchronizovat");
1240
- synchronizeDataStore();
1117
+ }, [providers]);
1118
+ (0, import_react.useEffect)(() => {
1119
+ if (isLive) {
1120
+ systemLog("dsp", "useEffect[isLive] Sockets: ", JSON.stringify(sockets, null, 2));
1121
+ const ss = Object.keys(sockets);
1122
+ systemLog("dsp", "useEffect[isLive] registruji", ss);
1123
+ if (ss?.length > 0) socket.emit("joinRooms", JSON.stringify(ss));
1124
+ if (!didInitialLiveSyncRef.current) {
1125
+ didInitialLiveSyncRef.current = true;
1126
+ systemLog("dsp", "useEffect[isLive] Zacinam synchronizovat");
1127
+ synchronizeDataStore();
1128
+ }
1129
+ } else {
1130
+ didInitialLiveSyncRef.current = false;
1241
1131
  }
1242
- } else {
1243
- didInitialLiveSyncRef.current = false;
1244
- }
1245
- }, [isLive, socket, sockets, synchronizeDataStore]);
1246
- const presetProviders = props.providers;
1247
- (0, import_react.useEffect)(() => {
1248
- socket.on("connect", handleSocketConnect);
1249
- socket.on("disconnect", handleSocketDisconnect);
1250
- return () => {
1251
- socket.off("connect", handleSocketConnect);
1252
- socket.off("disconnect", handleSocketDisconnect);
1253
- };
1254
- }, [socket, handleSocketConnect, handleSocketDisconnect]);
1255
- const startSockets = (0, import_react.useCallback)(() => {
1256
- socket.auth = {
1257
- ...socket.auth || {},
1258
- ...socketServer?.params?.auth || {},
1259
- token: getSocketAuthToken()
1260
- };
1261
- systemLog("dsp", "PRIPOJUJI LIVE SOCKETS");
1262
- socket.connect();
1263
- }, [socket, socketServer?.params?.auth, getSocketAuthToken]);
1264
- const stopSockets = (0, import_react.useCallback)(() => {
1265
- systemLog("dsp", "[DSP] ODPOJUJI LIVE SOCKETS");
1266
- socket.disconnect();
1267
- }, [socket]);
1268
- const resetDataStore = (0, import_react.useCallback)(async () => {
1269
- console.time("[DSP] resetDataStore");
1270
- if (usePersistentStorage) {
1271
- await SQLite2.emptyTable("documents");
1272
- }
1273
- setSockets({});
1274
- setProviders({});
1275
- setDocuments({});
1276
- setCounterProviders({});
1277
- setCounterDocuments({});
1278
- console.timeEnd("[DSP] resetDataStore");
1279
- }, [usePersistentStorage]);
1280
- const resetProvider = (0, import_react.useCallback)(
1281
- async (provider) => {
1282
- if (!usePersistentStorage) return;
1283
- await SQLite2.query(`DELETE FROM documents WHERE model='${provider}'`);
1284
- },
1285
- [usePersistentStorage]
1286
- );
1287
- const initProvider = (0, import_react.useCallback)(
1288
- async (id, data) => {
1289
- const providerPreset = presetProviders[id];
1290
- const prov = renderJSONTemplate({ ...providerPreset || {}, id }, data);
1291
- systemLog("dsp", "[INIT PROVIDER] ", id, "(", data || "", ")");
1292
- if (typeof prov !== "boolean") {
1293
- return await registerProvider(prov);
1132
+ }, [isLive, socket, sockets, synchronizeDataStore]);
1133
+ const presetProviders = props.providers;
1134
+ (0, import_react.useEffect)(() => {
1135
+ socket.on("connect", handleSocketConnect);
1136
+ socket.on("disconnect", handleSocketDisconnect);
1137
+ return () => {
1138
+ socket.off("connect", handleSocketConnect);
1139
+ socket.off("disconnect", handleSocketDisconnect);
1140
+ };
1141
+ }, [socket, handleSocketConnect, handleSocketDisconnect]);
1142
+ const startSockets = (0, import_react.useCallback)(() => {
1143
+ socket.auth = {
1144
+ ...socket.auth || {},
1145
+ ...socketServer?.params?.auth || {},
1146
+ token: getSocketAuthToken()
1147
+ };
1148
+ systemLog("dsp", "PRIPOJUJI LIVE SOCKETS");
1149
+ socket.connect();
1150
+ }, [socket, socketServer?.params?.auth, getSocketAuthToken]);
1151
+ const stopSockets = (0, import_react.useCallback)(() => {
1152
+ systemLog("dsp", "[DSP] ODPOJUJI LIVE SOCKETS");
1153
+ socket.disconnect();
1154
+ }, [socket]);
1155
+ const resetDataStore = (0, import_react.useCallback)(async () => {
1156
+ console.time("[DSP] resetDataStore");
1157
+ if (persistenceStorage?.emptyTable) {
1158
+ await persistenceStorage.emptyTable("documents");
1294
1159
  }
1295
- return false;
1296
- },
1297
- [presetProviders]
1298
- );
1299
- const dispatch = (0, import_react.useCallback)((action, data, callback) => {
1300
- systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
1301
- setDispatcher((prev) => ({
1302
- isBussy: prev.isBussy,
1303
- actions: [...prev.actions, { action, data, callback }]
1304
- }));
1305
- }, []);
1306
- (0, import_react.useEffect)(() => {
1307
- async function processDispatcher() {
1308
- if (dispatcher.actions.length > 0) {
1309
- let result;
1310
- systemLog("dsp", "[DSP] DISPATCHER Zpracovavam", dispatcher.actions[0].action);
1311
- const timeCode = uuid();
1312
- console.time(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1313
- setDispatcher((prev) => ({ ...prev, isBussy: true }));
1314
- const item = dispatcher.actions[0];
1315
- switch (item.action) {
1316
- case "registerProvider":
1317
- await registerProvider(item.data);
1318
- break;
1319
- case "unregisterProvider":
1320
- await unregisterProvider(item.data);
1321
- break;
1322
- case "updateDataStore":
1323
- result = await updateDataStore(item.data);
1324
- break;
1325
- case "createDocument":
1326
- await createDocument(item.data);
1327
- break;
1328
- case "updateDocument":
1329
- await updateDocument(item.data);
1330
- break;
1331
- case "updateDocuments":
1332
- await updateDocuments(item.data);
1333
- break;
1334
- case "removeItem":
1335
- break;
1336
- case "deleteDocument":
1337
- await deleteDocument(item.data);
1338
- break;
1339
- case "createProviderItem":
1340
- result = await createProviderItem(item.data);
1341
- break;
1342
- case "deleteProviderItem":
1343
- result = await deleteProviderItem(item.data);
1344
- break;
1345
- default:
1346
- console.error("Unknown Action ", item.action, "Data: ", item.data);
1160
+ setSockets({});
1161
+ setProviders({});
1162
+ setDocuments({});
1163
+ setCounterProviders({});
1164
+ setCounterDocuments({});
1165
+ console.timeEnd("[DSP] resetDataStore");
1166
+ }, [persistenceStorage]);
1167
+ const resetProvider = (0, import_react.useCallback)(
1168
+ async (provider) => {
1169
+ if (!persistenceStorage) return;
1170
+ await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
1171
+ },
1172
+ [persistenceStorage]
1173
+ );
1174
+ const initProvider = (0, import_react.useCallback)(
1175
+ async (id, data) => {
1176
+ const providerPreset = presetProviders[id];
1177
+ const prov = renderJSONTemplate({ ...providerPreset || {}, id }, data);
1178
+ systemLog("dsp", "[INIT PROVIDER] ", id, "(", data || "", ")");
1179
+ if (typeof prov !== "boolean") {
1180
+ return await registerProvider(prov);
1181
+ }
1182
+ return false;
1183
+ },
1184
+ [persistenceStorage, presetProviders, usePersistentStorage]
1185
+ );
1186
+ const dispatch = (0, import_react.useCallback)((action, data, callback) => {
1187
+ systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
1188
+ setDispatcher((prev) => ({
1189
+ isBussy: prev.isBussy,
1190
+ actions: [...prev.actions, { action, data, callback }]
1191
+ }));
1192
+ }, []);
1193
+ (0, import_react.useEffect)(() => {
1194
+ async function processDispatcher() {
1195
+ if (dispatcher.actions.length > 0) {
1196
+ let result;
1197
+ systemLog("dsp", "[DSP] DISPATCHER Zpracovavam", dispatcher.actions[0].action);
1198
+ const timeCode = uuid();
1199
+ console.time(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1200
+ setDispatcher((prev) => ({ ...prev, isBussy: true }));
1201
+ const item = dispatcher.actions[0];
1202
+ switch (item.action) {
1203
+ case "registerProvider":
1204
+ await registerProvider(item.data);
1205
+ break;
1206
+ case "unregisterProvider":
1207
+ await unregisterProvider(item.data);
1208
+ break;
1209
+ case "updateDataStore":
1210
+ result = await updateDataStore(item.data);
1211
+ break;
1212
+ case "createDocument":
1213
+ await createDocument(item.data);
1214
+ break;
1215
+ case "updateDocument":
1216
+ await updateDocument(item.data);
1217
+ break;
1218
+ case "updateDocuments":
1219
+ await updateDocuments(item.data);
1220
+ break;
1221
+ case "removeItem":
1222
+ break;
1223
+ case "deleteDocument":
1224
+ await deleteDocument(item.data);
1225
+ break;
1226
+ case "createProviderItem":
1227
+ result = await createProviderItem(item.data);
1228
+ break;
1229
+ case "deleteProviderItem":
1230
+ result = await deleteProviderItem(item.data);
1231
+ break;
1232
+ default:
1233
+ console.error("Unknown Action ", item.action, "Data: ", item.data);
1234
+ }
1235
+ item.callback && item.callback(result);
1236
+ setDispatcher((prev) => ({
1237
+ isBussy: false,
1238
+ actions: prev.actions.slice(1)
1239
+ }));
1240
+ console.timeEnd(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1347
1241
  }
1348
- item.callback && item.callback(result);
1349
- setDispatcher((prev) => ({
1350
- isBussy: false,
1351
- actions: prev.actions.slice(1)
1352
- }));
1353
- console.timeEnd(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1354
- }
1355
- }
1356
- if (!dispatcher.isBussy) processDispatcher();
1357
- }, [dispatcher]);
1358
- const updateDocuments = (0, import_react.useCallback)(
1359
- async ({
1360
- model,
1361
- documents: uDocuments,
1362
- mode = "update"
1363
- }) => {
1364
- systemLog("dsp", "[DSP] updateDocuments updatuji model:", model, "Documents:", Object.keys(uDocuments).length);
1365
- const modelProvider = providers[model];
1366
- if (!modelProvider) {
1367
- systemLog("dsp", "[DSP] updateDocuments - provider neexistuje:", model);
1368
- return;
1369
1242
  }
1370
- let data = [...modelProvider.data || []];
1371
- const documentsToPersist = [];
1372
- const documentIdsToDelete = [];
1373
- setDocuments((prev) => {
1374
- console.time("updateDocuments");
1375
- let newDocs = { ...prev };
1376
- if (Array.isArray(uDocuments)) {
1377
- uDocuments.forEach((document) => {
1378
- const { id, ...doc } = document;
1379
- switch (mode) {
1380
- case "replace":
1381
- systemLog("dsp", "updateDocuments - replace", id);
1382
- newDocs[id] = doc;
1383
- if (doc._deleted) {
1384
- data = data.filter((d) => d !== id);
1385
- documentIdsToDelete.push(id);
1386
- delete newDocs[id];
1387
- } else {
1388
- if (!data.includes(id)) data.push(id);
1389
- documentsToPersist.push({ id, data: newDocs[id] });
1390
- }
1391
- break;
1392
- case "update":
1393
- default:
1394
- if (!newDocs[id]) {
1395
- systemLog("dsp", "updateDocuments - vytvarim", id);
1396
- data.push(id);
1243
+ if (!dispatcher.isBussy) processDispatcher();
1244
+ }, [dispatcher]);
1245
+ const updateDocuments = (0, import_react.useCallback)(
1246
+ async ({
1247
+ model,
1248
+ documents: uDocuments,
1249
+ mode = "update"
1250
+ }) => {
1251
+ systemLog("dsp", "[DSP] updateDocuments updatuji model:", model, "Documents:", Object.keys(uDocuments).length);
1252
+ const modelProvider = providers[model];
1253
+ if (!modelProvider) {
1254
+ systemLog("dsp", "[DSP] updateDocuments - provider neexistuje:", model);
1255
+ return;
1256
+ }
1257
+ let data = [...modelProvider.data || []];
1258
+ const documentsToPersist = [];
1259
+ const documentIdsToDelete = [];
1260
+ setDocuments((prev) => {
1261
+ console.time("updateDocuments");
1262
+ let newDocs = { ...prev };
1263
+ if (Array.isArray(uDocuments)) {
1264
+ uDocuments.forEach((document) => {
1265
+ const { id, ...doc } = document;
1266
+ switch (mode) {
1267
+ case "replace":
1268
+ systemLog("dsp", "updateDocuments - replace", id);
1397
1269
  newDocs[id] = doc;
1398
- documentsToPersist.push({ id, data: newDocs[id] });
1399
- } else if (doc._deleted) {
1400
- systemLog("dsp", "updateDocuments - mazu", id);
1401
- data = data.filter((d) => d !== id);
1402
- documentIdsToDelete.push(id);
1403
- delete newDocs[id];
1404
- } else {
1405
- systemLog("dsp", "updateDocuments - updatuji", id);
1406
- newDocs[id] = { ...newDocs[id], ...doc };
1407
- documentsToPersist.push({ id, data: newDocs[id] });
1408
- }
1409
- break;
1410
- }
1411
- });
1412
- } else {
1413
- for (const key in uDocuments) {
1414
- switch (mode) {
1415
- case "replace":
1416
- if (!newDocs[key]) {
1417
- data.push(key);
1418
- }
1419
- if (uDocuments[key]._deleted) {
1420
- data = data.filter((d) => d !== key);
1421
- documentIdsToDelete.push(key);
1422
- }
1423
- newDocs[key] = uDocuments[key];
1424
- if (uDocuments[key]._deleted) {
1425
- delete newDocs[key];
1426
- } else {
1427
- documentsToPersist.push({ id: key, data: newDocs[key] });
1428
- }
1429
- break;
1430
- case "update":
1431
- default:
1432
- if (!newDocs[key]) {
1433
- data.push(key);
1270
+ if (doc._deleted) {
1271
+ data = data.filter((d) => d !== id);
1272
+ documentIdsToDelete.push(id);
1273
+ delete newDocs[id];
1274
+ } else {
1275
+ if (!data.includes(id)) data.push(id);
1276
+ documentsToPersist.push({ id, data: newDocs[id] });
1277
+ }
1278
+ break;
1279
+ case "update":
1280
+ default:
1281
+ if (!newDocs[id]) {
1282
+ systemLog("dsp", "updateDocuments - vytvarim", id);
1283
+ data.push(id);
1284
+ newDocs[id] = doc;
1285
+ documentsToPersist.push({ id, data: newDocs[id] });
1286
+ } else if (doc._deleted) {
1287
+ systemLog("dsp", "updateDocuments - mazu", id);
1288
+ data = data.filter((d) => d !== id);
1289
+ documentIdsToDelete.push(id);
1290
+ delete newDocs[id];
1291
+ } else {
1292
+ systemLog("dsp", "updateDocuments - updatuji", id);
1293
+ newDocs[id] = { ...newDocs[id], ...doc };
1294
+ documentsToPersist.push({ id, data: newDocs[id] });
1295
+ }
1296
+ break;
1297
+ }
1298
+ });
1299
+ } else {
1300
+ for (const key in uDocuments) {
1301
+ switch (mode) {
1302
+ case "replace":
1303
+ if (!newDocs[key]) {
1304
+ data.push(key);
1305
+ }
1306
+ if (uDocuments[key]._deleted) {
1307
+ data = data.filter((d) => d !== key);
1308
+ documentIdsToDelete.push(key);
1309
+ }
1434
1310
  newDocs[key] = uDocuments[key];
1435
- documentsToPersist.push({ id: key, data: newDocs[key] });
1311
+ if (uDocuments[key]._deleted) {
1312
+ delete newDocs[key];
1313
+ } else {
1314
+ documentsToPersist.push({ id: key, data: newDocs[key] });
1315
+ }
1436
1316
  break;
1437
- }
1438
- if (uDocuments[key]._deleted) {
1439
- data = data.filter((d) => d !== key);
1440
- documentIdsToDelete.push(key);
1441
- delete newDocs[key];
1442
- } else {
1443
- newDocs[key] = { ...newDocs[key], ...uDocuments[key] };
1444
- documentsToPersist.push({ id: key, data: newDocs[key] });
1445
- }
1446
- break;
1317
+ case "update":
1318
+ default:
1319
+ if (!newDocs[key]) {
1320
+ data.push(key);
1321
+ newDocs[key] = uDocuments[key];
1322
+ documentsToPersist.push({ id: key, data: newDocs[key] });
1323
+ break;
1324
+ }
1325
+ if (uDocuments[key]._deleted) {
1326
+ data = data.filter((d) => d !== key);
1327
+ documentIdsToDelete.push(key);
1328
+ delete newDocs[key];
1329
+ } else {
1330
+ newDocs[key] = { ...newDocs[key], ...uDocuments[key] };
1331
+ documentsToPersist.push({ id: key, data: newDocs[key] });
1332
+ }
1333
+ break;
1334
+ }
1447
1335
  }
1448
1336
  }
1337
+ console.timeEnd("updateDocuments");
1338
+ return newDocs;
1339
+ });
1340
+ const unique = uuid();
1341
+ setProviders((prev) => {
1342
+ const newP = { ...prev };
1343
+ newP[model] = {
1344
+ ...newP[model],
1345
+ data,
1346
+ lastUpdate: { id: unique, time: /* @__PURE__ */ new Date() }
1347
+ };
1348
+ return newP;
1349
+ });
1350
+ if (modelProvider?.isPersisting && persistenceStorage) {
1351
+ await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
1352
+ await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1449
1353
  }
1450
- console.timeEnd("updateDocuments");
1451
- return newDocs;
1452
- });
1453
- const unique = uuid();
1454
- setProviders((prev) => {
1455
- const newP = { ...prev };
1456
- newP[model] = {
1457
- ...newP[model],
1458
- data,
1459
- lastUpdate: { id: unique, time: /* @__PURE__ */ new Date() }
1460
- };
1461
- return newP;
1462
- });
1463
- if (modelProvider?.isPersisting && usePersistentStorage) {
1464
- await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
1465
- await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1466
- }
1467
- },
1468
- [providers, setDocuments, setProviders, persistDocument, removePersistedDocument]
1469
- );
1470
- const updateDocument = (0, import_react.useCallback)(
1471
- async ({ documentId, model, fields, data: pData }) => {
1472
- systemLog("dsp", "[updateDocument]:", documentId, ", model:", model);
1473
- let data = pData;
1474
- if (typeof pData === "function") data = pData(documents[documentId]);
1475
- if (fields) {
1476
- systemLog("dsp", "[updateDocument] Stahovani ", model, ", document: ", documentId, ", fields: ", fields);
1477
- systemLog("dsp", "[updateDocument] Providers: ", Object.keys(providers));
1478
- const provider = presetProviders[model];
1479
- systemLog("dsp", "[updateDocument]", provider);
1480
- let dP = renderJSONTemplate(presetProviders[model], buildDocumentTemplateParams(model, documentId));
1481
- if (dP) {
1482
- const dataFromSource = await getData({
1483
- id: dP.id,
1484
- dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
1485
- isPersisting: !!dP.isPersisting && usePersistentStorage,
1486
- schema: dP.schema,
1487
- SQLite: SQLite2
1488
- });
1489
- systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
1490
- data = dataFromSource;
1354
+ },
1355
+ [providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
1356
+ );
1357
+ const updateDocument = (0, import_react.useCallback)(
1358
+ async ({ documentId, model, fields, data: pData }) => {
1359
+ systemLog("dsp", "[updateDocument]:", documentId, ", model:", model);
1360
+ let data = pData;
1361
+ if (typeof pData === "function") data = pData(documents[documentId]);
1362
+ if (fields) {
1363
+ systemLog("dsp", "[updateDocument] Stahovani ", model, ", document: ", documentId, ", fields: ", fields);
1364
+ systemLog("dsp", "[updateDocument] Providers: ", Object.keys(providers));
1365
+ const provider = presetProviders[model];
1366
+ systemLog("dsp", "[updateDocument]", provider);
1367
+ let dP = renderJSONTemplate(presetProviders[model], buildDocumentTemplateParams(model, documentId));
1368
+ if (dP) {
1369
+ const dataFromSource = await getData({
1370
+ id: dP.id,
1371
+ dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
1372
+ isPersisting: !!dP.isPersisting && !!persistenceStorage,
1373
+ schema: dP.schema,
1374
+ SQLite: persistenceStorage || void 0
1375
+ });
1376
+ systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
1377
+ data = dataFromSource;
1378
+ }
1491
1379
  }
1492
- }
1493
- if (data) {
1494
- var listeningProviders = 0;
1495
- var isProvidersUpdated = false;
1496
- const rand = uuid();
1497
- setProviders((prev) => {
1498
- systemLog("dsp", "[updateDocument] setProviders", rand);
1499
- console.time("[DSP UPDATE PROVIDERS INSIDE]");
1500
- var newProviders = { ...prev };
1501
- Object.keys(newProviders).forEach((key) => {
1502
- const provider = newProviders[key];
1503
- const providerNext = {
1504
- ...provider,
1505
- data: Array.isArray(provider?.data) ? [...provider.data] : []
1506
- };
1507
- var socketListeners = providerNext.dataSource?.socketListeners || [];
1508
- if (socketListeners.length === 0) {
1509
- if (providerNext.data.includes(documentId)) {
1510
- if (!providerNext.dataSource?.filter || filterDocuments(data, providerNext.dataSource?.filter)) {
1511
- systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
1380
+ if (data) {
1381
+ var listeningProviders = 0;
1382
+ var isProvidersUpdated = false;
1383
+ const rand = uuid();
1384
+ setProviders((prev) => {
1385
+ systemLog("dsp", "[updateDocument] setProviders", rand);
1386
+ console.time("[DSP UPDATE PROVIDERS INSIDE]");
1387
+ var newProviders = { ...prev };
1388
+ Object.keys(newProviders).forEach((key) => {
1389
+ const provider = newProviders[key];
1390
+ const providerNext = {
1391
+ ...provider,
1392
+ data: Array.isArray(provider?.data) ? [...provider.data] : []
1393
+ };
1394
+ var socketListeners = providerNext.dataSource?.socketListeners || [];
1395
+ if (socketListeners.length === 0) {
1396
+ if (providerNext.data.includes(documentId)) {
1397
+ if (!providerNext.dataSource?.filter || filterDocuments(data, providerNext.dataSource?.filter)) {
1398
+ systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
1399
+ listeningProviders++;
1400
+ providerNext.lastUpdate = {
1401
+ id: uuid(),
1402
+ time: /* @__PURE__ */ new Date(),
1403
+ documentId
1404
+ };
1405
+ } else {
1406
+ providerNext.data = providerNext.data.filter((item) => item !== documentId);
1407
+ isProvidersUpdated = true;
1408
+ providerNext.lastUpdate = {
1409
+ id: uuid(),
1410
+ time: /* @__PURE__ */ new Date(),
1411
+ documentId
1412
+ };
1413
+ }
1414
+ }
1415
+ } else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
1416
+ key === model) {
1417
+ if (!providerNext.dataSource.filter || filterDocuments(data, providerNext.dataSource.filter)) {
1512
1418
  listeningProviders++;
1513
1419
  providerNext.lastUpdate = {
1514
1420
  id: uuid(),
1515
1421
  time: /* @__PURE__ */ new Date(),
1516
1422
  documentId
1517
1423
  };
1424
+ if (!providerNext.data.includes(documentId)) {
1425
+ providerNext.data.push(documentId);
1426
+ isProvidersUpdated = true;
1427
+ }
1518
1428
  } else {
1519
- providerNext.data = providerNext.data.filter((item) => item !== documentId);
1520
- isProvidersUpdated = true;
1521
- providerNext.lastUpdate = {
1522
- id: uuid(),
1523
- time: /* @__PURE__ */ new Date(),
1524
- documentId
1525
- };
1429
+ if (providerNext.data.includes(documentId)) {
1430
+ systemLog("dsp", "[updateDocument] - mazu:", key);
1431
+ providerNext.data = providerNext.data.filter((item) => item !== documentId);
1432
+ isProvidersUpdated = true;
1433
+ providerNext.lastUpdate = {
1434
+ id: uuid(),
1435
+ time: /* @__PURE__ */ new Date(),
1436
+ documentId
1437
+ };
1438
+ }
1526
1439
  }
1527
1440
  }
1528
- } else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
1529
- key === model) {
1530
- if (!providerNext.dataSource.filter || filterDocuments(data, providerNext.dataSource.filter)) {
1531
- listeningProviders++;
1532
- providerNext.lastUpdate = {
1533
- id: uuid(),
1534
- time: /* @__PURE__ */ new Date(),
1535
- documentId
1536
- };
1537
- if (!providerNext.data.includes(documentId)) {
1538
- providerNext.data.push(documentId);
1539
- isProvidersUpdated = true;
1540
- }
1541
- } else {
1542
- if (providerNext.data.includes(documentId)) {
1543
- systemLog("dsp", "[updateDocument] - mazu:", key);
1544
- providerNext.data = providerNext.data.filter((item) => item !== documentId);
1545
- isProvidersUpdated = true;
1546
- providerNext.lastUpdate = {
1547
- id: uuid(),
1548
- time: /* @__PURE__ */ new Date(),
1549
- documentId
1441
+ newProviders[key] = providerNext;
1442
+ });
1443
+ console.timeEnd("[DSP UPDATE PROVIDERS INSIDE]");
1444
+ console.time("[DSP UPDATE DOCUMENTS OUTSIDE]");
1445
+ setDocuments((prev2) => {
1446
+ console.time("[DSP UPDATE DOCUMENTS INSIDE]");
1447
+ if (prev2[documentId]) {
1448
+ if (listeningProviders === 0) {
1449
+ const newD = { ...prev2 };
1450
+ delete newD[documentId];
1451
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1452
+ return newD;
1453
+ } else {
1454
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1455
+ return {
1456
+ ...prev2,
1457
+ [documentId]: { ...prev2[documentId], ...data }
1550
1458
  };
1551
1459
  }
1460
+ } else if (listeningProviders > 0) {
1461
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1462
+ return { ...prev2, [documentId]: data };
1552
1463
  }
1553
- }
1554
- newProviders[key] = providerNext;
1464
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1465
+ return prev2;
1466
+ });
1467
+ console.timeEnd("[DSP UPDATE DOCUMENTS OUTSIDE]");
1468
+ systemLog("dsp", "OUTSIDE", documentId);
1469
+ return newProviders;
1555
1470
  });
1556
- console.timeEnd("[DSP UPDATE PROVIDERS INSIDE]");
1557
- console.time("[DSP UPDATE DOCUMENTS OUTSIDE]");
1558
- setDocuments((prev2) => {
1559
- console.time("[DSP UPDATE DOCUMENTS INSIDE]");
1560
- if (prev2[documentId]) {
1471
+ systemLog("dsp", "updateDocument - meni se pocet naslouchajicich Provideru ?", isProvidersUpdated ? "true" : "false");
1472
+ if (isProvidersUpdated) {
1473
+ systemLog("dsp", "updateDocument - menim counterDocuments pro", listeningProviders, "Providers");
1474
+ setCounterDocuments((prev) => {
1561
1475
  if (listeningProviders === 0) {
1562
- const newD = { ...prev2 };
1476
+ const newD = { ...prev };
1563
1477
  delete newD[documentId];
1564
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1565
1478
  return newD;
1566
1479
  } else {
1567
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1568
- return {
1569
- ...prev2,
1570
- [documentId]: { ...prev2[documentId], ...data }
1571
- };
1480
+ return { ...prev, [documentId]: listeningProviders };
1572
1481
  }
1573
- } else if (listeningProviders > 0) {
1574
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1575
- return { ...prev2, [documentId]: data };
1576
- }
1577
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1578
- return prev2;
1579
- });
1580
- console.timeEnd("[DSP UPDATE DOCUMENTS OUTSIDE]");
1581
- systemLog("dsp", "OUTSIDE", documentId);
1582
- return newProviders;
1583
- });
1584
- systemLog("dsp", "updateDocument - meni se pocet naslouchajicich Provideru ?", isProvidersUpdated ? "true" : "false");
1585
- if (isProvidersUpdated) {
1586
- systemLog("dsp", "updateDocument - menim counterDocuments pro", listeningProviders, "Providers");
1587
- setCounterDocuments((prev) => {
1588
- if (listeningProviders === 0) {
1589
- const newD = { ...prev };
1590
- delete newD[documentId];
1591
- return newD;
1592
- } else {
1593
- return { ...prev, [documentId]: listeningProviders };
1594
- }
1595
- });
1596
- } else {
1597
- systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
1598
- }
1599
- if (providers[model]?.isPersisting && usePersistentStorage) {
1600
- if (listeningProviders > 0) {
1601
- await persistDocument({
1602
- documentId,
1603
- model,
1604
- data: { ...documents[documentId], ...data }
1605
1482
  });
1606
1483
  } else {
1607
- await removePersistedDocument(documentId);
1484
+ systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
1485
+ }
1486
+ if (providers[model]?.isPersisting && persistenceStorage) {
1487
+ if (listeningProviders > 0) {
1488
+ await persistDocument({
1489
+ documentId,
1490
+ model,
1491
+ data: { ...documents[documentId], ...data }
1492
+ });
1493
+ } else {
1494
+ await removePersistedDocument(documentId);
1495
+ }
1608
1496
  }
1609
1497
  }
1610
- }
1611
- },
1612
- [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument]
1613
- );
1614
- const updateDataStore = (0, import_react.useCallback)(
1615
- async ({
1616
- id,
1617
- documentId,
1618
- params,
1619
- variant,
1620
- data
1621
- }) => {
1622
- if (!providers[id]) {
1623
- systemLog("dsp", "[updateDataStore] Provider neexistuje:", id);
1624
- return;
1625
- }
1626
- if (!providers[id].dataSource?.uri && !providers[id].dataSource?.crud) {
1627
- if (!documents[documentId] && providers[id]?.autoCreate) {
1628
- await createProviderItem({ id, data: { id: documentId, ...data } });
1629
- } else updateDocument({ documentId, model: id, data });
1630
- return true;
1631
- }
1632
- systemLog(
1633
- "dsp",
1634
- "[updateDataStore] Posilam patchData: ",
1498
+ },
1499
+ [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
1500
+ );
1501
+ const updateDataStore = (0, import_react.useCallback)(
1502
+ async ({
1635
1503
  id,
1636
- ",\n params: ",
1637
- JSON.stringify(params, null, 2),
1638
- "\n data: ",
1639
- JSON.stringify(data, null, 2)
1640
- );
1641
- const result = await patchData({
1642
- dataSource: renderJSONTemplate(providers[id].dataSource, params),
1504
+ documentId,
1505
+ params,
1643
1506
  variant,
1644
1507
  data
1645
- });
1646
- if (typeof result === "object") {
1647
- const { id: rDocumentId, ...document } = result;
1648
- if (!isLive) {
1649
- systemLog("dsp", "[updateDataStore] UPDATE DATA STORE RESULT: ", result);
1650
- updateDocument({ documentId: rDocumentId, model: id, data: document });
1651
- } else {
1652
- systemLog("dsp", "[updateDataStore] Updatuje Socket");
1508
+ }) => {
1509
+ if (!providers[id]) {
1510
+ systemLog("dsp", "[updateDataStore] Provider neexistuje:", id);
1511
+ return;
1653
1512
  }
1654
- }
1655
- return result;
1656
- },
1657
- [providers, documents, isLive, updateDocument]
1658
- );
1659
- (0, import_react.useEffect)(() => {
1660
- socketActionHandlersRef.current = { dispatch, updateDocument };
1661
- }, [dispatch, updateDocument]);
1662
- const createDocument = (0, import_react.useCallback)(
1663
- async ({ model, documentId, data }) => {
1664
- const newDocument = data;
1665
- systemLog("dsp", `Registruji model ${model}, documentId ${documentId}, data: ${JSON.stringify(data)}`);
1666
- var providerListenersCount = 0;
1667
- Object.keys(providers).forEach((key) => {
1668
- const provider = providers[key];
1669
- var socketListeners = provider.dataSource?.socketListeners;
1670
- if ((socketListeners?.includes(model) || key === model) && (!provider.dataSource?.filter || filterDocuments(data, provider.dataSource?.filter))) {
1671
- systemLog("dsp", "[createDocument] Provider data: ", provider.data.length, " Bytes, documentId: ", documentId);
1672
- if (!provider.data.includes(documentId)) {
1673
- providerListenersCount++;
1674
- setProviders((prev) => ({
1675
- ...prev,
1676
- [key]: {
1677
- ...prev[key],
1678
- data: [...prev[key].data, documentId],
1679
- lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1680
- }
1681
- }));
1682
- }
1683
- }
1684
- });
1685
- if (providerListenersCount > 0) {
1686
- if (providers[model]?.isPersisting && usePersistentStorage) {
1687
- await persistDocument({ documentId, model, data: newDocument });
1513
+ if (!providers[id].dataSource?.uri && !providers[id].dataSource?.crud) {
1514
+ if (!documents[documentId] && providers[id]?.autoCreate) {
1515
+ await createProviderItem({ id, data: { id: documentId, ...data } });
1516
+ } else updateDocument({ documentId, model: id, data });
1517
+ return true;
1688
1518
  }
1689
- setCounterDocuments((prev) => {
1690
- const newC = { ...prev };
1691
- if (newC[documentId]) {
1692
- setDocuments((prev2) => ({
1693
- ...prev2,
1694
- [documentId]: { ...prev2[documentId], ...newDocument }
1695
- }));
1696
- newC[documentId] = prev[documentId] + providerListenersCount;
1519
+ systemLog(
1520
+ "dsp",
1521
+ "[updateDataStore] Posilam patchData: ",
1522
+ id,
1523
+ ",\n params: ",
1524
+ JSON.stringify(params, null, 2),
1525
+ "\n data: ",
1526
+ JSON.stringify(data, null, 2)
1527
+ );
1528
+ const result = await patchData({
1529
+ dataSource: renderJSONTemplate(providers[id].dataSource, params),
1530
+ variant,
1531
+ data
1532
+ });
1533
+ if (typeof result === "object") {
1534
+ const { id: rDocumentId, ...document } = result;
1535
+ if (!isLive) {
1536
+ systemLog("dsp", "[updateDataStore] UPDATE DATA STORE RESULT: ", result);
1537
+ updateDocument({ documentId: rDocumentId, model: id, data: document });
1697
1538
  } else {
1698
- setDocuments((prev2) => ({ ...prev2, [documentId]: newDocument }));
1699
- newC[documentId] = providerListenersCount;
1539
+ systemLog("dsp", "[updateDataStore] Updatuje Socket");
1700
1540
  }
1701
- return newC;
1702
- });
1703
- return { id: documentId, document: newDocument };
1704
- } else return false;
1705
- },
1706
- [providers, setProviders, setCounterDocuments, setDocuments, persistDocument]
1707
- );
1708
- const deleteDocument = (0, import_react.useCallback)(
1709
- async ({ documentId }) => {
1710
- systemLog("dsp", `[deleteDocument] Mazu document ${documentId}}`);
1711
- await removePersistedDocument(documentId);
1712
- setDocuments((prev) => {
1713
- const newDocs = { ...prev };
1714
- systemLog("dsp", "[deleteDocument] MAZU ", documentId, " z ", newDocs);
1715
- delete newDocs[documentId];
1716
- systemLog("dsp", "[deleteDocument] NEW DOCS: ", newDocs);
1717
- return newDocs;
1718
- });
1719
- setCounterDocuments((prev) => {
1720
- const newC = { ...prev };
1721
- delete newC[documentId];
1722
- return newC;
1723
- });
1724
- setProviders((prev) => {
1725
- var deletedCount = 0;
1726
- const updatedDataObj = { ...prev };
1727
- for (const key in updatedDataObj) {
1728
- const initialLength = updatedDataObj[key].data.length;
1729
- updatedDataObj[key].data = updatedDataObj[key].data.filter((element) => element !== documentId);
1730
- updatedDataObj[key].lastUpdate = { id: uuid(), time: /* @__PURE__ */ new Date() };
1731
- deletedCount += initialLength - updatedDataObj[key].data.length;
1732
- if (initialLength - updatedDataObj[key].data.length > 0) systemLog("dsp", "[deleteDocument] Smazan zaznam...", deletedCount);
1733
1541
  }
1734
- return updatedDataObj;
1735
- });
1736
- },
1737
- [setDocuments, setCounterDocuments, setProviders, removePersistedDocument]
1738
- );
1739
- const createProviderItem = (0, import_react.useCallback)(
1740
- async ({ id, data }) => {
1741
- if (!providers[id]) {
1742
- systemLog("dsp", "[createProviderItem] Provider neexistuje:", id);
1743
- return;
1744
- }
1745
- if (!providers[id].dataSource) {
1746
- const { id: dId, ...rData } = data;
1747
- const documentId = dId || uuid();
1748
- const result2 = createDocument({ model: id, documentId, data: rData });
1749
- return result2;
1750
- }
1751
- const result = await postData({
1752
- dataSource: providers[id].dataSource,
1753
- schema: providers[id].schema,
1754
- val: data
1755
- });
1756
- return result;
1757
- },
1758
- [providers, createDocument]
1759
- );
1760
- const deleteProviderItem = (0, import_react.useCallback)(
1761
- async ({ providerId, data, params }) => {
1762
- if (!providers[providerId]) {
1763
- systemLog("dsp", "[deleteProviderItem] Provider neexistuje:", providerId);
1764
- return;
1765
- }
1766
- const response = await deleteData({
1767
- dataSource: renderJSONTemplate(providers[providerId].dataSource, params),
1768
- // dataSource: providers[providerId].dataSource,
1769
- data
1770
- });
1771
- return response;
1772
- },
1773
- [providers]
1774
- );
1775
- const registerProviderSockets = (0, import_react.useCallback)(
1776
- (sockets2) => {
1777
- if (sockets2) {
1778
- systemLog("dsp", "[registerProviderSockets]", sockets2);
1779
- var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1780
- setSockets((prev) => {
1781
- const newS = { ...prev };
1782
- d.forEach((item) => {
1783
- if (newS[item]) {
1784
- newS[item].listeners = newS[item].listeners + 1;
1542
+ return result;
1543
+ },
1544
+ [providers, documents, isLive, updateDocument]
1545
+ );
1546
+ (0, import_react.useEffect)(() => {
1547
+ socketActionHandlersRef.current = { dispatch, updateDocument };
1548
+ }, [dispatch, updateDocument]);
1549
+ const createDocument = (0, import_react.useCallback)(
1550
+ async ({ model, documentId, data }) => {
1551
+ const newDocument = data;
1552
+ systemLog("dsp", `Registruji model ${model}, documentId ${documentId}, data: ${JSON.stringify(data)}`);
1553
+ var providerListenersCount = 0;
1554
+ Object.keys(providers).forEach((key) => {
1555
+ const provider = providers[key];
1556
+ var socketListeners = provider.dataSource?.socketListeners;
1557
+ if ((socketListeners?.includes(model) || key === model) && (!provider.dataSource?.filter || filterDocuments(data, provider.dataSource?.filter))) {
1558
+ systemLog("dsp", "[createDocument] Provider data: ", provider.data.length, " Bytes, documentId: ", documentId);
1559
+ if (!provider.data.includes(documentId)) {
1560
+ providerListenersCount++;
1561
+ setProviders((prev) => ({
1562
+ ...prev,
1563
+ [key]: {
1564
+ ...prev[key],
1565
+ data: [...prev[key].data, documentId],
1566
+ lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1567
+ }
1568
+ }));
1569
+ }
1570
+ }
1571
+ });
1572
+ if (providerListenersCount > 0) {
1573
+ if (providers[model]?.isPersisting && persistenceStorage) {
1574
+ await persistDocument({ documentId, model, data: newDocument });
1575
+ }
1576
+ setCounterDocuments((prev) => {
1577
+ const newC = { ...prev };
1578
+ if (newC[documentId]) {
1579
+ setDocuments((prev2) => ({
1580
+ ...prev2,
1581
+ [documentId]: { ...prev2[documentId], ...newDocument }
1582
+ }));
1583
+ newC[documentId] = prev[documentId] + providerListenersCount;
1785
1584
  } else {
1786
- const roomHandler = (msg) => {
1787
- const { dispatch: currentDispatch, updateDocument: currentUpdateDocument } = socketActionHandlersRef.current;
1788
- handleSocketMessage(item, msg, {
1789
- dispatch: currentDispatch,
1790
- updateDocument: currentUpdateDocument
1791
- });
1792
- };
1793
- socketRoomHandlersRef.current[item] = roomHandler;
1794
- newS[item] = { listeners: 1, data: [] };
1795
- socket.emit("joinRoom", item);
1796
- socket.on(item, roomHandler);
1585
+ setDocuments((prev2) => ({ ...prev2, [documentId]: newDocument }));
1586
+ newC[documentId] = providerListenersCount;
1797
1587
  }
1588
+ return newC;
1798
1589
  });
1799
- return newS;
1590
+ return { id: documentId, document: newDocument };
1591
+ } else return false;
1592
+ },
1593
+ [providers, setProviders, setCounterDocuments, setDocuments, persistDocument, persistenceStorage]
1594
+ );
1595
+ const deleteDocument = (0, import_react.useCallback)(
1596
+ async ({ documentId }) => {
1597
+ systemLog("dsp", `[deleteDocument] Mazu document ${documentId}}`);
1598
+ await removePersistedDocument(documentId);
1599
+ setDocuments((prev) => {
1600
+ const newDocs = { ...prev };
1601
+ systemLog("dsp", "[deleteDocument] MAZU ", documentId, " z ", newDocs);
1602
+ delete newDocs[documentId];
1603
+ systemLog("dsp", "[deleteDocument] NEW DOCS: ", newDocs);
1604
+ return newDocs;
1800
1605
  });
1801
- }
1802
- },
1803
- [setSockets, socket]
1804
- );
1805
- const unregisterProviderSockets = (0, import_react.useCallback)(
1806
- (sockets2) => {
1807
- systemLog("dsp", "[unregisterProviderSockets] Mazu sockety ", JSON.stringify(sockets2, null, 2));
1808
- var removeSocketListeners = [];
1809
- var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1810
- setSockets((prev) => {
1811
- const newS = { ...prev };
1812
- d.forEach((item) => {
1813
- if (newS[item]?.listeners <= 1) {
1814
- removeSocketListeners.push(item);
1815
- const roomHandler = socketRoomHandlersRef.current[item];
1816
- if (roomHandler) {
1817
- socket.off(item, roomHandler);
1818
- delete socketRoomHandlersRef.current[item];
1819
- }
1820
- delete newS[item];
1821
- } else if (newS[item]) newS[item].listeners = newS[item].listeners - 1;
1606
+ setCounterDocuments((prev) => {
1607
+ const newC = { ...prev };
1608
+ delete newC[documentId];
1609
+ return newC;
1822
1610
  });
1823
- if (removeSocketListeners.length > 0) {
1824
- socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1611
+ setProviders((prev) => {
1612
+ var deletedCount = 0;
1613
+ const updatedDataObj = { ...prev };
1614
+ for (const key in updatedDataObj) {
1615
+ const initialLength = updatedDataObj[key].data.length;
1616
+ updatedDataObj[key].data = updatedDataObj[key].data.filter((element) => element !== documentId);
1617
+ updatedDataObj[key].lastUpdate = { id: uuid(), time: /* @__PURE__ */ new Date() };
1618
+ deletedCount += initialLength - updatedDataObj[key].data.length;
1619
+ if (initialLength - updatedDataObj[key].data.length > 0) systemLog("dsp", "[deleteDocument] Smazan zaznam...", deletedCount);
1620
+ }
1621
+ return updatedDataObj;
1622
+ });
1623
+ },
1624
+ [setDocuments, setCounterDocuments, setProviders, removePersistedDocument]
1625
+ );
1626
+ const createProviderItem = (0, import_react.useCallback)(
1627
+ async ({ id, data }) => {
1628
+ if (!providers[id]) {
1629
+ systemLog("dsp", "[createProviderItem] Provider neexistuje:", id);
1630
+ return;
1825
1631
  }
1826
- return newS;
1827
- });
1828
- },
1829
- [setSockets, socket]
1830
- );
1831
- const updateProviderListeners = (0, import_react.useCallback)(
1832
- async (id, val) => {
1833
- systemLog("dsp", `[updateProviderListeners] provider:`, id, "menim o", val);
1834
- setCounterProviders((prev) => {
1835
- if (!prev[id]) return prev;
1836
- if (prev[id] + val > 0) {
1837
- return {
1838
- ...prev,
1839
- [id]: prev[id] + val
1840
- };
1841
- } else {
1842
- setProviders((prevP) => {
1843
- systemLog("dsp", "[DSP] UPDATE PROVIDER - mazu sockets ", id);
1844
- setSockets((prevS) => {
1845
- var removeSocketListeners = [];
1846
- const newS = { ...prevS };
1847
- const providerSocketListeners = prevP[id].dataSource?.socketListeners || [];
1848
- providerSocketListeners.forEach((socketName) => {
1849
- if (!newS[socketName]) return;
1850
- if (newS[socketName].listeners + val <= 0) {
1851
- const roomHandler = socketRoomHandlersRef.current[socketName];
1852
- if (roomHandler) {
1853
- socket.off(socketName, roomHandler);
1854
- delete socketRoomHandlersRef.current[socketName];
1855
- }
1856
- delete newS[socketName];
1857
- removeSocketListeners.push(socketName);
1858
- } else {
1859
- newS[socketName].listeners = newS[socketName].listeners + val;
1860
- }
1861
- });
1862
- if (removeSocketListeners.length > 0) {
1863
- socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1864
- }
1865
- return newS;
1866
- });
1867
- setCounterDocuments((prevC) => {
1868
- const newC = { ...prevC };
1869
- prevP[id].data.forEach((document) => {
1870
- if (newC[document] + val <= 0) {
1871
- setDocuments((prev2) => {
1872
- const newD = { ...prev2 };
1873
- delete newD[document];
1874
- return newD;
1875
- });
1876
- delete newC[document];
1877
- } else {
1878
- newC[document] = newC[document] + val;
1879
- }
1880
- });
1881
- return newC;
1882
- });
1883
- const newP = { ...prevP };
1884
- delete newP[id];
1885
- return newP;
1886
- });
1887
- const newProvs = { ...prev };
1888
- delete newProvs[id];
1889
- return newProvs;
1632
+ if (!providers[id].dataSource) {
1633
+ const { id: dId, ...rData } = data;
1634
+ const documentId = dId || uuid();
1635
+ const result2 = createDocument({ model: id, documentId, data: rData });
1636
+ return result2;
1890
1637
  }
1891
- });
1892
- },
1893
- [setCounterProviders, setProviders, setCounterDocuments, setDocuments, socket]
1894
- );
1895
- const registerProvider = (0, import_react.useCallback)(
1896
- async (newItem) => {
1897
- systemLog("dsp", "[registerProvider]", newItem.id);
1898
- let result;
1899
- const { id, ...provider } = newItem;
1900
- if (providers[id]) {
1901
- setCounterProviders((prev) => {
1902
- systemLog("dsp", "[registerProvider] Pouze navysuji ", id, " ", prev[id], " -> ", prev[id] + 1);
1903
- return {
1904
- ...prev,
1905
- [id]: prev[id] + 1
1906
- };
1907
- });
1908
- result = providers[id];
1909
- } 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
1638
+ const result = await postData({
1639
+ dataSource: providers[id].dataSource,
1640
+ schema: providers[id].schema,
1641
+ val: data
1916
1642
  });
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
- }
1643
+ return result;
1644
+ },
1645
+ [providers, createDocument]
1646
+ );
1647
+ const deleteProviderItem = (0, import_react.useCallback)(
1648
+ async ({ providerId, data, params }) => {
1649
+ if (!providers[providerId]) {
1650
+ systemLog("dsp", "[deleteProviderItem] Provider neexistuje:", providerId);
1651
+ return;
1652
+ }
1653
+ const response = await deleteData({
1654
+ dataSource: renderJSONTemplate(providers[providerId].dataSource, params),
1655
+ // dataSource: providers[providerId].dataSource,
1656
+ data
1934
1657
  });
1935
- setCounterDocuments((prev) => {
1936
- {
1937
- const newC = { ...prev };
1938
- dataList.forEach((i) => {
1939
- if (newC[i]) {
1940
- newC[i] = newC[i] + 1;
1658
+ return response;
1659
+ },
1660
+ [providers]
1661
+ );
1662
+ const registerProviderSockets = (0, import_react.useCallback)(
1663
+ (sockets2) => {
1664
+ if (sockets2) {
1665
+ systemLog("dsp", "[registerProviderSockets]", sockets2);
1666
+ var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1667
+ setSockets((prev) => {
1668
+ const newS = { ...prev };
1669
+ d.forEach((item) => {
1670
+ if (newS[item]) {
1671
+ newS[item].listeners = newS[item].listeners + 1;
1941
1672
  } else {
1942
- newC[i] = 1;
1673
+ const roomHandler = (msg) => {
1674
+ const { dispatch: currentDispatch, updateDocument: currentUpdateDocument } = socketActionHandlersRef.current;
1675
+ handleSocketMessage(item, msg, {
1676
+ dispatch: currentDispatch,
1677
+ updateDocument: currentUpdateDocument
1678
+ });
1679
+ };
1680
+ socketRoomHandlersRef.current[item] = roomHandler;
1681
+ newS[item] = { listeners: 1, data: [] };
1682
+ socket.emit("joinRoom", item);
1683
+ socket.on(item, roomHandler);
1943
1684
  }
1944
1685
  });
1945
- return newC;
1686
+ return newS;
1687
+ });
1688
+ }
1689
+ },
1690
+ [setSockets, socket]
1691
+ );
1692
+ const unregisterProviderSockets = (0, import_react.useCallback)(
1693
+ (sockets2) => {
1694
+ systemLog("dsp", "[unregisterProviderSockets] Mazu sockety ", JSON.stringify(sockets2, null, 2));
1695
+ var removeSocketListeners = [];
1696
+ var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1697
+ setSockets((prev) => {
1698
+ const newS = { ...prev };
1699
+ d.forEach((item) => {
1700
+ if (newS[item]?.listeners <= 1) {
1701
+ removeSocketListeners.push(item);
1702
+ const roomHandler = socketRoomHandlersRef.current[item];
1703
+ if (roomHandler) {
1704
+ socket.off(item, roomHandler);
1705
+ delete socketRoomHandlersRef.current[item];
1706
+ }
1707
+ delete newS[item];
1708
+ } else if (newS[item]) newS[item].listeners = newS[item].listeners - 1;
1709
+ });
1710
+ if (removeSocketListeners.length > 0) {
1711
+ socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1946
1712
  }
1713
+ return newS;
1947
1714
  });
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}`);
1966
- }
1967
- return result;
1968
- },
1969
- [providers, SQLite2, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets]
1970
- );
1971
- const unregisterProvider = (0, import_react.useCallback)(
1972
- async (itemId) => {
1973
- setCounterProviders((prev) => {
1974
- if (prev[itemId]) {
1975
- if (prev[itemId] > 1) {
1976
- systemLog("dsp", "[unregisterProvider] snizuji ", itemId, "z ", prev[itemId], " na ", prev[itemId] - 1);
1715
+ },
1716
+ [setSockets, socket]
1717
+ );
1718
+ const updateProviderListeners = (0, import_react.useCallback)(
1719
+ async (id, val) => {
1720
+ systemLog("dsp", `[updateProviderListeners] provider:`, id, "menim o", val);
1721
+ setCounterProviders((prev) => {
1722
+ if (!prev[id]) return prev;
1723
+ if (prev[id] + val > 0) {
1977
1724
  return {
1978
1725
  ...prev,
1979
- [itemId]: prev[itemId] - 1
1726
+ [id]: prev[id] + val
1980
1727
  };
1981
1728
  } else {
1982
- systemLog("dsp", "[unregisterProvider] mazu ", Object.keys(providers));
1983
- unregisterProviderSockets(providers[itemId]?.dataSource.socketListeners);
1984
- systemLog("dsp", "[unregisterProvider] Mazu dokumenty providera ", itemId);
1985
- setCounterDocuments((cd) => {
1986
- const newC = { ...cd };
1987
- const deleteDocumentIds = [];
1988
- providers[itemId].data.forEach((docId) => {
1989
- if (newC[docId] <= 1) {
1990
- deleteDocumentIds.push(docId);
1991
- delete newC[docId];
1992
- } else newC[docId] = newC[docId] - 1;
1729
+ setProviders((prevP) => {
1730
+ systemLog("dsp", "[DSP] UPDATE PROVIDER - mazu sockets ", id);
1731
+ setSockets((prevS) => {
1732
+ var removeSocketListeners = [];
1733
+ const newS = { ...prevS };
1734
+ const providerSocketListeners = prevP[id].dataSource?.socketListeners || [];
1735
+ providerSocketListeners.forEach((socketName) => {
1736
+ if (!newS[socketName]) return;
1737
+ if (newS[socketName].listeners + val <= 0) {
1738
+ const roomHandler = socketRoomHandlersRef.current[socketName];
1739
+ if (roomHandler) {
1740
+ socket.off(socketName, roomHandler);
1741
+ delete socketRoomHandlersRef.current[socketName];
1742
+ }
1743
+ delete newS[socketName];
1744
+ removeSocketListeners.push(socketName);
1745
+ } else {
1746
+ newS[socketName].listeners = newS[socketName].listeners + val;
1747
+ }
1748
+ });
1749
+ if (removeSocketListeners.length > 0) {
1750
+ socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1751
+ }
1752
+ return newS;
1993
1753
  });
1994
- if (deleteDocumentIds.length > 0) {
1995
- setDocuments((pd) => {
1996
- const newD = { ...pd };
1997
- deleteDocumentIds.forEach((docId) => {
1998
- delete newD[docId];
1999
- });
2000
- return newD;
1754
+ setCounterDocuments((prevC) => {
1755
+ const newC = { ...prevC };
1756
+ prevP[id].data.forEach((document) => {
1757
+ if (newC[document] + val <= 0) {
1758
+ setDocuments((prev2) => {
1759
+ const newD = { ...prev2 };
1760
+ delete newD[document];
1761
+ return newD;
1762
+ });
1763
+ delete newC[document];
1764
+ } else {
1765
+ newC[document] = newC[document] + val;
1766
+ }
2001
1767
  });
2002
- }
2003
- return newC;
2004
- });
2005
- setProviders((pp) => {
2006
- const newProvs2 = { ...pp };
2007
- delete newProvs2[itemId];
2008
- return newProvs2;
1768
+ return newC;
1769
+ });
1770
+ const newP = { ...prevP };
1771
+ delete newP[id];
1772
+ return newP;
2009
1773
  });
2010
1774
  const newProvs = { ...prev };
2011
- delete newProvs[itemId];
1775
+ delete newProvs[id];
2012
1776
  return newProvs;
2013
1777
  }
2014
- } else return prev;
2015
- });
2016
- },
2017
- [setCounterProviders, providers, setCounterDocuments, setDocuments, setProviders, unregisterProviderSockets]
2018
- );
2019
- const actionsValue = (0, import_react.useMemo)(
2020
- () => ({
2021
- dispatch,
2022
- initProvider,
2023
- resetProvider,
2024
- registerProvider,
2025
- unregisterProvider,
2026
- updateProviderListeners,
2027
- resetDataStore,
2028
- startSockets,
2029
- stopSockets,
2030
- registerProviderSockets,
2031
- unregisterProviderSockets,
2032
- updateDocuments,
2033
- presetProviders
2034
- }),
2035
- [
2036
- dispatch,
2037
- initProvider,
2038
- resetProvider,
2039
- registerProvider,
2040
- unregisterProvider,
2041
- updateProviderListeners,
2042
- resetDataStore,
2043
- startSockets,
2044
- stopSockets,
2045
- registerProviderSockets,
2046
- unregisterProviderSockets,
2047
- updateDocuments,
2048
- presetProviders
2049
- ]
2050
- );
2051
- const metaValue = (0, import_react.useMemo)(
2052
- () => ({ isLive, isSynchronizing, sockets, counterProviders, counterDocuments }),
2053
- [isLive, isSynchronizing, sockets, counterProviders, counterDocuments]
2054
- );
2055
- const stableValue = (0, import_react.useMemo)(
2056
- () => ({
2057
- dispatch,
2058
- presetProviders,
2059
- updateProviderListeners,
2060
- subscribeToProvider,
2061
- getProviderLastUpdate,
2062
- getExternalDocuments,
2063
- getExternalProviders
2064
- }),
2065
- [
2066
- dispatch,
2067
- presetProviders,
2068
- updateProviderListeners,
2069
- subscribeToProvider,
2070
- getProviderLastUpdate,
2071
- getExternalDocuments,
2072
- getExternalProviders
2073
- ]
2074
- );
2075
- systemLog("dsp", "END");
2076
- return (
2077
- // <DatabaseProvider>
2078
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreStableContext.Provider, { value: stableValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreActionsContext.Provider, { value: actionsValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreProvidersContext.Provider, { value: providers, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreDocumentsContext.Provider, { value: documents, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreContext.Provider, { value: metaValue, children: props.children }) }) }) }) })
2079
- );
2080
- };
1778
+ });
1779
+ },
1780
+ [setCounterProviders, setProviders, setCounterDocuments, setDocuments, socket]
1781
+ );
1782
+ const registerProvider = (0, import_react.useCallback)(
1783
+ async (newItem) => {
1784
+ systemLog("dsp", "[registerProvider]", newItem.id);
1785
+ let result;
1786
+ const { id, ...provider } = newItem;
1787
+ if (providers[id]) {
1788
+ setCounterProviders((prev) => {
1789
+ systemLog("dsp", "[registerProvider] Pouze navysuji ", id, " ", prev[id], " -> ", prev[id] + 1);
1790
+ return {
1791
+ ...prev,
1792
+ [id]: prev[id] + 1
1793
+ };
1794
+ });
1795
+ result = providers[id];
1796
+ } else {
1797
+ try {
1798
+ const dataFromSource = await getData({
1799
+ schema: newItem.schema,
1800
+ dataSource: newItem.dataSource || {},
1801
+ id: newItem.id,
1802
+ isPersisting: !!newItem.isPersisting && !!persistenceStorage,
1803
+ SQLite: persistenceStorage || void 0
1804
+ });
1805
+ console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1806
+ var dataList = [];
1807
+ var items = {};
1808
+ const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1809
+ dataS.forEach((item) => {
1810
+ if (!item) return;
1811
+ const { id: itId, ...data } = item;
1812
+ const normalizedId = itId || uuid();
1813
+ dataList.push(normalizedId);
1814
+ if (documents[normalizedId]) {
1815
+ items[normalizedId] = {
1816
+ ...documents[normalizedId],
1817
+ ...data
1818
+ };
1819
+ } else {
1820
+ items[normalizedId] = data;
1821
+ }
1822
+ });
1823
+ setCounterDocuments((prev) => {
1824
+ const newC = { ...prev };
1825
+ dataList.forEach((itemId) => {
1826
+ if (newC[itemId]) {
1827
+ newC[itemId] = newC[itemId] + 1;
1828
+ } else {
1829
+ newC[itemId] = 1;
1830
+ }
1831
+ });
1832
+ return newC;
1833
+ });
1834
+ if (Object.keys(items).length > 0) {
1835
+ setDocuments((prev) => ({ ...prev, ...items }));
1836
+ }
1837
+ result = {
1838
+ ...provider,
1839
+ data: dataList,
1840
+ lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1841
+ };
1842
+ setProviders((prev) => ({
1843
+ ...prev,
1844
+ [id]: result
1845
+ }));
1846
+ setCounterProviders((prev) => ({
1847
+ ...prev,
1848
+ [id]: 1
1849
+ }));
1850
+ if (provider.dataSource?.socketListeners) {
1851
+ registerProviderSockets(provider.dataSource.socketListeners);
1852
+ }
1853
+ console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1854
+ } catch (error) {
1855
+ console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
1856
+ throw error;
1857
+ }
1858
+ }
1859
+ return result;
1860
+ },
1861
+ [providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
1862
+ );
1863
+ const unregisterProvider = (0, import_react.useCallback)(
1864
+ async (itemId) => {
1865
+ setCounterProviders((prev) => {
1866
+ if (prev[itemId]) {
1867
+ if (prev[itemId] > 1) {
1868
+ systemLog("dsp", "[unregisterProvider] snizuji ", itemId, "z ", prev[itemId], " na ", prev[itemId] - 1);
1869
+ return {
1870
+ ...prev,
1871
+ [itemId]: prev[itemId] - 1
1872
+ };
1873
+ } else {
1874
+ systemLog("dsp", "[unregisterProvider] mazu ", Object.keys(providers));
1875
+ unregisterProviderSockets(providers[itemId]?.dataSource.socketListeners);
1876
+ systemLog("dsp", "[unregisterProvider] Mazu dokumenty providera ", itemId);
1877
+ setCounterDocuments((cd) => {
1878
+ const newC = { ...cd };
1879
+ const deleteDocumentIds = [];
1880
+ providers[itemId].data.forEach((docId) => {
1881
+ if (newC[docId] <= 1) {
1882
+ deleteDocumentIds.push(docId);
1883
+ delete newC[docId];
1884
+ } else newC[docId] = newC[docId] - 1;
1885
+ });
1886
+ if (deleteDocumentIds.length > 0) {
1887
+ setDocuments((pd) => {
1888
+ const newD = { ...pd };
1889
+ deleteDocumentIds.forEach((docId) => {
1890
+ delete newD[docId];
1891
+ });
1892
+ return newD;
1893
+ });
1894
+ }
1895
+ return newC;
1896
+ });
1897
+ setProviders((pp) => {
1898
+ const newProvs2 = { ...pp };
1899
+ delete newProvs2[itemId];
1900
+ return newProvs2;
1901
+ });
1902
+ const newProvs = { ...prev };
1903
+ delete newProvs[itemId];
1904
+ return newProvs;
1905
+ }
1906
+ } else return prev;
1907
+ });
1908
+ },
1909
+ [setCounterProviders, providers, setCounterDocuments, setDocuments, setProviders, unregisterProviderSockets]
1910
+ );
1911
+ const actionsValue = (0, import_react.useMemo)(
1912
+ () => ({
1913
+ dispatch,
1914
+ initProvider,
1915
+ resetProvider,
1916
+ registerProvider,
1917
+ unregisterProvider,
1918
+ updateProviderListeners,
1919
+ resetDataStore,
1920
+ startSockets,
1921
+ stopSockets,
1922
+ registerProviderSockets,
1923
+ unregisterProviderSockets,
1924
+ updateDocuments,
1925
+ presetProviders
1926
+ }),
1927
+ [
1928
+ dispatch,
1929
+ initProvider,
1930
+ resetProvider,
1931
+ registerProvider,
1932
+ unregisterProvider,
1933
+ updateProviderListeners,
1934
+ resetDataStore,
1935
+ startSockets,
1936
+ stopSockets,
1937
+ registerProviderSockets,
1938
+ unregisterProviderSockets,
1939
+ updateDocuments,
1940
+ presetProviders
1941
+ ]
1942
+ );
1943
+ const metaValue = (0, import_react.useMemo)(
1944
+ () => ({ isLive, isSynchronizing, sockets, counterProviders, counterDocuments }),
1945
+ [isLive, isSynchronizing, sockets, counterProviders, counterDocuments]
1946
+ );
1947
+ const stableValue = (0, import_react.useMemo)(
1948
+ () => ({
1949
+ dispatch,
1950
+ presetProviders,
1951
+ updateProviderListeners,
1952
+ subscribeToProvider,
1953
+ getProviderLastUpdate,
1954
+ getExternalDocuments,
1955
+ getExternalProviders
1956
+ }),
1957
+ [
1958
+ dispatch,
1959
+ presetProviders,
1960
+ updateProviderListeners,
1961
+ subscribeToProvider,
1962
+ getProviderLastUpdate,
1963
+ getExternalDocuments,
1964
+ getExternalProviders
1965
+ ]
1966
+ );
1967
+ (0, import_react.useImperativeHandle)(ref, () => actionsValue, [actionsValue]);
1968
+ systemLog("dsp", "END");
1969
+ return (
1970
+ // <DatabaseProvider>
1971
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreStableContext.Provider, { value: stableValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreActionsContext.Provider, { value: actionsValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreProvidersContext.Provider, { value: providers, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreDocumentsContext.Provider, { value: documents, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreContext.Provider, { value: metaValue, children: props.children }) }) }) }) })
1972
+ );
1973
+ }
1974
+ );
2081
1975
  var DataStoreProvider_default = DataStoreProvider;
2082
1976
 
2083
1977
  // src/useDataProvider.tsx
@@ -2347,7 +2241,6 @@ var COLOR_DS = COLOR_MAGENTA;
2347
2241
  DataStoreProvider,
2348
2242
  DataStoreProvidersContext,
2349
2243
  DataStoreStableContext,
2350
- SQLite,
2351
2244
  dataStoreFilterObject,
2352
2245
  doesObjectMatchFilter,
2353
2246
  doesValueMatchFilter,