@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.js CHANGED
@@ -1,14 +1,19 @@
1
- // src/DataStoreProvider.tsx
2
- import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
1
+ import {
2
+ systemLog
3
+ } from "./chunk-7XDRKNJQ.js";
3
4
 
4
- // src/log.ts
5
- function systemLog(..._args) {
6
- }
7
- function systemLogError(...args) {
8
- if (typeof console !== "undefined" && typeof console.error === "function") {
9
- console.error(...args);
10
- }
11
- }
5
+ // src/DataStoreProvider.tsx
6
+ import {
7
+ createContext,
8
+ forwardRef,
9
+ useCallback,
10
+ useContext,
11
+ useEffect,
12
+ useImperativeHandle,
13
+ useMemo,
14
+ useRef,
15
+ useState
16
+ } from "react";
12
17
 
13
18
  // src/handleSocketMessage.ts
14
19
  var handleSocketMessage = (model, msg, dataProvider) => {
@@ -40,9 +45,6 @@ var handleSocketMessage = (model, msg, dataProvider) => {
40
45
  // src/handleData.ts
41
46
  import axios from "axios";
42
47
 
43
- // src/utils.ts
44
- import * as Crypto from "expo-crypto";
45
-
46
48
  // src/dotPath.ts
47
49
  function propToArray(prop) {
48
50
  return prop.split(".").reduce((ret, el, index, list) => {
@@ -87,6 +89,13 @@ function getValueByDotPath(obj, prop, value) {
87
89
 
88
90
  // src/utils.ts
89
91
  import dayjs from "dayjs";
92
+ function randomUuidSegment(template) {
93
+ return template.replace(/[xy]/g, (char) => {
94
+ const random = Math.floor(Math.random() * 16);
95
+ const value = char === "x" ? random : random & 3 | 8;
96
+ return value.toString(16);
97
+ });
98
+ }
90
99
  function escapeRegExp(string) {
91
100
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
92
101
  }
@@ -549,7 +558,13 @@ var dataStoreFilterObject = (obj, filter) => {
549
558
  return result;
550
559
  };
551
560
  function uuid() {
552
- return Crypto.randomUUID();
561
+ return [
562
+ randomUuidSegment("xxxxxxxx"),
563
+ randomUuidSegment("xxxx"),
564
+ "4" + randomUuidSegment("xxx"),
565
+ randomUuidSegment("yxxx"),
566
+ randomUuidSegment("xxxxxxxxxxxx")
567
+ ].join("-");
553
568
  }
554
569
  function isUuid(val) {
555
570
  if (typeof val !== "string") return false;
@@ -562,7 +577,7 @@ var saveData = async ({
562
577
  providerId,
563
578
  newData,
564
579
  dateUpdate,
565
- SQLite: SQLite3
580
+ SQLite
566
581
  }) => {
567
582
  console.time(`[SQL] saveData ${providerId}`);
568
583
  const batchSize = 8e3;
@@ -577,8 +592,7 @@ var saveData = async ({
577
592
  }
578
593
  }
579
594
  const placeholdersArray = Array.from({ length: Math.ceil(values.length / 4) }, () => placeholders).join(",");
580
- if (placeholdersArray.length < 10) console.log("DATA TO UPDATE", JSON.stringify(values, null, 2));
581
- const row = await SQLite3.query(`INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES ${placeholdersArray}`, values);
595
+ const row = await SQLite.query(`INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES ${placeholdersArray}`, values);
582
596
  systemLog("axios", "saveData result: ", JSON.stringify(row));
583
597
  }
584
598
  console.timeEnd(`[SQL] saveData ${providerId}`);
@@ -600,7 +614,7 @@ var buildUri = ({
600
614
  }
601
615
  return dataSource.uri || `${dataSource.model || ""}/`;
602
616
  };
603
- var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, changeTime }) => {
617
+ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime }) => {
604
618
  if (dataSource) systemLog("axios", "GET Data Source: ", buildUri({ dataSource, method: "read" }));
605
619
  else systemLog("axios", "No DataSource for ", id);
606
620
  let persistedData = [];
@@ -617,12 +631,24 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, ch
617
631
  } else {
618
632
  if (changeTime) {
619
633
  params.changeTime = changeTime;
620
- } else if (isPersisting && SQLite3) {
634
+ } else if (isPersisting && SQLite) {
621
635
  console.time("Persisted Data");
622
- const qDatum = await SQLite3.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
636
+ const qDatum = await SQLite.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
623
637
  systemLog("axios", "SQLite.read Posledni datum update: ", qDatum[0]?.lastUpdate);
624
638
  if (qDatum[0]?.lastUpdate) params.changeTime = qDatum[0].lastUpdate;
625
- persistedData = qDatum.map((item) => ({ id: item.id, ...JSON.parse(item.data) }));
639
+ persistedData = qDatum.map((item) => {
640
+ try {
641
+ const parsedData = typeof item.data === "string" ? JSON.parse(item.data) : item.data;
642
+ if (!parsedData || typeof parsedData !== "object" || Array.isArray(parsedData)) {
643
+ systemLog("axios", "SQLite.read Preskakuji neplatny dokument:", item.id);
644
+ return null;
645
+ }
646
+ return { id: item.id, ...parsedData };
647
+ } catch (error) {
648
+ console.error("[datastore] Nepodarilo se zpracovat SQL data pro dokument", item.id, error);
649
+ return null;
650
+ }
651
+ }).filter((item) => item !== null);
626
652
  console.timeEnd("Persisted Data");
627
653
  }
628
654
  if (dataSource) {
@@ -670,8 +696,8 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite: SQLite3, ch
670
696
  JSON.stringify(newData).length,
671
697
  "Bytes"
672
698
  );
673
- if (isPersisting && SQLite3) {
674
- await saveData({ providerId: id, newData, SQLite: SQLite3, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
699
+ if (isPersisting && SQLite) {
700
+ await saveData({ providerId: id, newData, SQLite, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
675
701
  }
676
702
  }
677
703
  }
@@ -736,7 +762,6 @@ var deleteData = async ({ dataSource, data }) => {
736
762
  // src/DataStoreProvider.tsx
737
763
  import { io as ioSockets } from "socket.io-client";
738
764
  import axios2 from "axios";
739
- import { getLocales } from "expo-localization";
740
765
 
741
766
  // src/templates.ts
742
767
  var _renderMyTemplate = (templateString, data) => {
@@ -767,162 +792,7 @@ function renderJSONTemplate(val, data) {
767
792
 
768
793
  // src/DataStoreProvider.tsx
769
794
  import isEqual from "lodash/isEqual.js";
770
-
771
- // src/database.ts
772
- import * as SQL from "expo-sqlite";
773
- var SQLite = class {
774
- constructor(name) {
775
- this.db = null;
776
- this.dbName = name || "modelaz.db";
777
- this.initDB();
778
- }
779
- async initDB() {
780
- if (!this.db) {
781
- try {
782
- systemLog("sql", "[initDB]");
783
- this.db = await SQL.openDatabaseAsync(this.dbName);
784
- await this.createTables({
785
- documents: "id TEXT PRIMARY KEY, data TEXT, model TEXT, lastUpdate TEXT"
786
- // logs: "time TEXT PRIMARY KEY, module TEXT, message TEXT",
787
- });
788
- } catch (e) {
789
- console.log("INITDB ERROR", e);
790
- throw e;
791
- }
792
- }
793
- }
794
- async getDb() {
795
- if (!this.db) {
796
- await this.initDB();
797
- }
798
- if (!this.db) {
799
- throw new Error("Database is not initialized");
800
- }
801
- return this.db;
802
- }
803
- async createTable(table, tableSchema) {
804
- try {
805
- systemLog("sql", "[createTable]", table);
806
- const db = await this.getDb();
807
- const result = await db.runAsync(`CREATE TABLE IF NOT EXISTS '${table}' (${tableSchema})`);
808
- systemLog("sql", "[createTable] result: ", JSON.stringify(result));
809
- return result;
810
- } catch (e) {
811
- systemLogError("sql", "[createTable]", e);
812
- throw e;
813
- }
814
- }
815
- async createTables(tables) {
816
- try {
817
- systemLog("sql", "[createTables]", tables);
818
- const query = Object.entries(tables).reduce((acc, [table, schema]) => {
819
- return acc + `CREATE TABLE IF NOT EXISTS '${table}' (${schema});`;
820
- }, "");
821
- const db = await this.getDb();
822
- const result = await db.runAsync(query);
823
- systemLog("sql", "[createTables] result: ", JSON.stringify(result));
824
- return result;
825
- } catch (e) {
826
- systemLogError("sql", "[createTable]", e);
827
- throw e;
828
- }
829
- }
830
- /**
831
- * Smazani starych logu
832
- */
833
- async deleteLogs() {
834
- systemLog("sql", "[query] delete old Logs", this.db);
835
- try {
836
- const db = await this.getDb();
837
- await db.runAsync(`DELETE FROM logs WHERE strftime('%s', 'now') - strftime('%s', time) > 3600`);
838
- } catch (error) {
839
- throw error;
840
- }
841
- }
842
- async read(query, args) {
843
- try {
844
- systemLog("sql", "[read]", query);
845
- const db = await this.getDb();
846
- const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
847
- systemLog("sql", "[read] result ", result.length);
848
- return result;
849
- } catch (e) {
850
- systemLogError("sql", "[read]", e);
851
- throw e;
852
- }
853
- }
854
- async query(query, args) {
855
- try {
856
- systemLog("sql", "[query]->", query);
857
- const db = await this.getDb();
858
- const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
859
- systemLog("sql", result);
860
- return result;
861
- } catch (error) {
862
- console.error("INSERT ERROR", error);
863
- systemLogError("sql", error);
864
- throw error;
865
- }
866
- }
867
- async dropTable(table) {
868
- try {
869
- systemLog("sql", "dropTable", table);
870
- console.time("[SQL] dropTable");
871
- const db = await this.getDb();
872
- const result = await db.runAsync(`DROP TABLE ${table}`);
873
- console.timeEnd("[SQL] dropTable");
874
- return result;
875
- } catch (error) {
876
- throw error;
877
- }
878
- }
879
- async emptyTable(table) {
880
- try {
881
- systemLog("sql", `[emptyTable]`, table);
882
- const db = await this.getDb();
883
- const result = await db.runAsync(`DELETE FROM '${table}'`);
884
- systemLog("sql", "[emptyTable] result", result);
885
- return result;
886
- } catch (error) {
887
- throw error;
888
- }
889
- }
890
- async getTables() {
891
- systemLog("sql", "Jdu zkusit nacist tabulky z ", JSON.stringify(this.dbName));
892
- try {
893
- const db = await this.getDb();
894
- const result = await db.getAllAsync('SELECT name FROM sqlite_master WHERE type="table"');
895
- systemLog("sql", "DB Result:", result);
896
- return result;
897
- } catch (error) {
898
- throw error;
899
- }
900
- }
901
- async resetDatabase() {
902
- try {
903
- systemLog("sql", "Reset database", this.dbName);
904
- console.time("DELETING");
905
- systemLog("sql", "Closing");
906
- const db = await this.getDb();
907
- await db.closeAsync();
908
- systemLog("sql", "Deleting");
909
- await SQL.deleteDatabaseAsync(this.dbName);
910
- console.timeEnd("DELETING");
911
- console.time("INIT");
912
- this.db = null;
913
- systemLog("sql", "Zacinam inicializovat databazi databaze");
914
- await this.initDB();
915
- systemLog("sql", "Inicializovana databaze");
916
- console.timeEnd("INIT");
917
- } catch (e) {
918
- systemLogError("sql", "[resetDatabase]", e);
919
- }
920
- }
921
- };
922
-
923
- // src/DataStoreProvider.tsx
924
795
  import { jsx } from "react/jsx-runtime";
925
- var SQLite2 = new SQLite("modelaz.db");
926
796
  var DataStoreContext = createContext({});
927
797
  var DataStoreDocumentsContext = createContext({});
928
798
  var DataStoreProvidersContext = createContext({});
@@ -1002,1002 +872,1037 @@ var buildDocumentTemplateParams = (model, documentId) => {
1002
872
  [templateIdKey]: documentId
1003
873
  };
1004
874
  };
1005
- var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, ...props }) => {
1006
- const [isLive, setIsLive] = useState(false);
1007
- const [isSynchronizing, setIsSynchronizing] = useState(true);
1008
- const [sockets, setSockets] = useState({});
1009
- const [providers, setProviders] = useState({});
1010
- const [documents, setDocuments] = useState({});
1011
- const externalProvidersRef = useRef({});
1012
- const externalDocumentsRef = useRef({});
1013
- const providerSubscribersRef = useRef(/* @__PURE__ */ new Map());
1014
- const previousProviderUpdateIdsRef = useRef({});
1015
- const [dispatcher, setDispatcher] = useState({ isBussy: false, actions: [] });
1016
- const [counterProviders, setCounterProviders] = useState({});
1017
- const [counterDocuments, setCounterDocuments] = useState({});
1018
- const didInitialLiveSyncRef = useRef(false);
1019
- useEffect(() => {
1020
- if (!restServer) return;
1021
- const localization = getLocales();
1022
- axios2.defaults.baseURL = restServer;
1023
- axios2.defaults.headers.common["Accept-Language"] = localization[0]?.languageCode;
1024
- systemLog("dsp", "[INIT] Axios baseURL:", restServer);
1025
- async function checkServer() {
1026
- try {
1027
- const response = await axios2.head("/", {
1028
- timeout: 7e3,
1029
- validateStatus: () => true
1030
- });
1031
- systemLog("dsp", "[INIT] Axios Success, status:", response.status);
1032
- } catch (e) {
1033
- if (axios2.isAxiosError(e)) {
1034
- systemLog("dsp", "[INIT] Axios Error:", e.code ?? "UNKNOWN", e.message);
1035
- } else {
1036
- systemLog("dsp", "[INIT] Axios Error:", String(e));
1037
- }
1038
- } finally {
1039
- systemLog("dsp", "[INIT] Axios check done");
1040
- }
875
+ var resolveLocale = () => {
876
+ if (typeof Intl !== "undefined" && typeof Intl.DateTimeFormat === "function") {
877
+ const locale = Intl.DateTimeFormat().resolvedOptions().locale;
878
+ if (locale) return locale;
879
+ }
880
+ if (typeof navigator !== "undefined") {
881
+ if (typeof navigator.language === "string" && navigator.language.length > 0) {
882
+ return navigator.language;
1041
883
  }
1042
- checkServer();
1043
- }, [restServer]);
1044
- const socketRoomHandlersRef = useRef({});
1045
- const socketActionHandlersRef = useRef({});
1046
- systemLog("dsp", "START");
1047
- const socket = useMemo(() => ioSockets(socketServer?.url, socketServer?.params), [socketServer?.url, socketServer.params]);
1048
- const handleSocketConnect = useCallback(() => setIsLive(true), []);
1049
- const handleSocketDisconnect = useCallback(() => setIsLive(false), []);
1050
- const getSocketAuthToken = useCallback(() => {
1051
- const authorizationHeader = axios2.defaults.headers.common["Authorization"];
1052
- if (typeof authorizationHeader === "string" && authorizationHeader.length > 0) {
1053
- return authorizationHeader.startsWith("Bearer ") ? authorizationHeader : `Bearer ${authorizationHeader}`;
884
+ if (Array.isArray(navigator.languages) && navigator.languages.length > 0) {
885
+ const firstLocale = navigator.languages.find((value) => typeof value === "string" && value.length > 0);
886
+ if (firstLocale) return firstLocale;
1054
887
  }
1055
- return "Bearer ";
1056
- }, []);
1057
- const subscribeToProvider = useCallback((providerId, callback) => {
1058
- const subscribersByProvider = providerSubscribersRef.current;
1059
- const providerSubscribers = subscribersByProvider.get(providerId) || /* @__PURE__ */ new Set();
1060
- providerSubscribers.add(callback);
1061
- subscribersByProvider.set(providerId, providerSubscribers);
1062
- return () => {
1063
- const activeSubscribers = subscribersByProvider.get(providerId);
1064
- if (!activeSubscribers) return;
1065
- activeSubscribers.delete(callback);
1066
- if (activeSubscribers.size === 0) subscribersByProvider.delete(providerId);
1067
- };
1068
- }, []);
1069
- const getProviderLastUpdate = useCallback((providerId) => {
1070
- return externalProvidersRef.current?.[providerId]?.lastUpdate?.id ?? null;
1071
- }, []);
1072
- const getExternalDocuments = useCallback(() => externalDocumentsRef.current, []);
1073
- const getExternalProviders = useCallback(() => externalProvidersRef.current, []);
1074
- useEffect(() => {
1075
- externalProvidersRef.current = providers;
1076
- const currentUpdateIds = {};
1077
- Object.keys(providers).forEach((providerId) => {
1078
- currentUpdateIds[providerId] = providers[providerId]?.lastUpdate?.id ?? null;
1079
- if (previousProviderUpdateIdsRef.current[providerId] !== currentUpdateIds[providerId]) {
1080
- const subscribers = providerSubscribersRef.current.get(providerId);
1081
- subscribers?.forEach((callback) => callback());
888
+ }
889
+ return void 0;
890
+ };
891
+ var DataStoreProvider = forwardRef(
892
+ ({ socketServer, restServer, usePersistentStorage = true, locale, storage = null, ...props }, ref) => {
893
+ const [isLive, setIsLive] = useState(false);
894
+ const [isSynchronizing, setIsSynchronizing] = useState(true);
895
+ const [sockets, setSockets] = useState({});
896
+ const [providers, setProviders] = useState({});
897
+ const [documents, setDocuments] = useState({});
898
+ const externalProvidersRef = useRef({});
899
+ const externalDocumentsRef = useRef({});
900
+ const providerSubscribersRef = useRef(/* @__PURE__ */ new Map());
901
+ const previousProviderUpdateIdsRef = useRef({});
902
+ const [dispatcher, setDispatcher] = useState({ isBussy: false, actions: [] });
903
+ const [counterProviders, setCounterProviders] = useState({});
904
+ const [counterDocuments, setCounterDocuments] = useState({});
905
+ const didInitialLiveSyncRef = useRef(false);
906
+ const persistenceStorage = useMemo(
907
+ () => usePersistentStorage ? storage : null,
908
+ [storage, usePersistentStorage]
909
+ );
910
+ useEffect(() => {
911
+ if (!restServer) return;
912
+ const resolvedLocale = locale || resolveLocale();
913
+ axios2.defaults.baseURL = restServer;
914
+ if (resolvedLocale) {
915
+ axios2.defaults.headers.common["Accept-Language"] = resolvedLocale;
1082
916
  }
1083
- });
1084
- Object.keys(previousProviderUpdateIdsRef.current).forEach((providerId) => {
1085
- if (!(providerId in currentUpdateIds)) {
1086
- const subscribers = providerSubscribersRef.current.get(providerId);
1087
- subscribers?.forEach((callback) => callback());
917
+ systemLog("dsp", "[INIT] Axios baseURL:", restServer);
918
+ async function checkServer() {
919
+ try {
920
+ const response = await axios2.head("/", {
921
+ timeout: 7e3,
922
+ validateStatus: () => true
923
+ });
924
+ systemLog("dsp", "[INIT] Axios Success, status:", response.status);
925
+ } catch (e) {
926
+ if (axios2.isAxiosError(e)) {
927
+ systemLog("dsp", "[INIT] Axios Error:", e.code ?? "UNKNOWN", e.message);
928
+ } else {
929
+ systemLog("dsp", "[INIT] Axios Error:", String(e));
930
+ }
931
+ } finally {
932
+ systemLog("dsp", "[INIT] Axios check done");
933
+ }
1088
934
  }
1089
- });
1090
- previousProviderUpdateIdsRef.current = currentUpdateIds;
1091
- }, [providers]);
1092
- useEffect(() => {
1093
- externalDocumentsRef.current = documents;
1094
- }, [documents]);
1095
- const persistDocument = useCallback(
1096
- async ({
1097
- documentId,
1098
- model,
1099
- data,
1100
- lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
1101
- }) => {
1102
- if (!usePersistentStorage) return;
1103
- await SQLite2.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
935
+ checkServer();
936
+ }, [locale, restServer]);
937
+ useEffect(() => {
938
+ if (usePersistentStorage && !storage) {
939
+ systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
940
+ }
941
+ }, [persistenceStorage, storage, usePersistentStorage]);
942
+ const socketRoomHandlersRef = useRef({});
943
+ const socketActionHandlersRef = useRef({});
944
+ systemLog("dsp", "START");
945
+ const socket = useMemo(() => ioSockets(socketServer?.url, socketServer?.params), [socketServer?.url, socketServer.params]);
946
+ const handleSocketConnect = useCallback(() => setIsLive(true), []);
947
+ const handleSocketDisconnect = useCallback(() => setIsLive(false), []);
948
+ const getSocketAuthToken = useCallback(() => {
949
+ const authorizationHeader = axios2.defaults.headers.common["Authorization"];
950
+ if (typeof authorizationHeader === "string" && authorizationHeader.length > 0) {
951
+ return authorizationHeader.startsWith("Bearer ") ? authorizationHeader : `Bearer ${authorizationHeader}`;
952
+ }
953
+ return "Bearer ";
954
+ }, []);
955
+ const subscribeToProvider = useCallback((providerId, callback) => {
956
+ const subscribersByProvider = providerSubscribersRef.current;
957
+ const providerSubscribers = subscribersByProvider.get(providerId) || /* @__PURE__ */ new Set();
958
+ providerSubscribers.add(callback);
959
+ subscribersByProvider.set(providerId, providerSubscribers);
960
+ return () => {
961
+ const activeSubscribers = subscribersByProvider.get(providerId);
962
+ if (!activeSubscribers) return;
963
+ activeSubscribers.delete(callback);
964
+ if (activeSubscribers.size === 0) subscribersByProvider.delete(providerId);
965
+ };
966
+ }, []);
967
+ const getProviderLastUpdate = useCallback((providerId) => {
968
+ return externalProvidersRef.current?.[providerId]?.lastUpdate?.id ?? null;
969
+ }, []);
970
+ const getExternalDocuments = useCallback(() => externalDocumentsRef.current, []);
971
+ const getExternalProviders = useCallback(() => externalProvidersRef.current, []);
972
+ useEffect(() => {
973
+ externalProvidersRef.current = providers;
974
+ const currentUpdateIds = {};
975
+ Object.keys(providers).forEach((providerId) => {
976
+ currentUpdateIds[providerId] = providers[providerId]?.lastUpdate?.id ?? null;
977
+ if (previousProviderUpdateIdsRef.current[providerId] !== currentUpdateIds[providerId]) {
978
+ const subscribers = providerSubscribersRef.current.get(providerId);
979
+ subscribers?.forEach((callback) => callback());
980
+ }
981
+ });
982
+ Object.keys(previousProviderUpdateIdsRef.current).forEach((providerId) => {
983
+ if (!(providerId in currentUpdateIds)) {
984
+ const subscribers = providerSubscribersRef.current.get(providerId);
985
+ subscribers?.forEach((callback) => callback());
986
+ }
987
+ });
988
+ previousProviderUpdateIdsRef.current = currentUpdateIds;
989
+ }, [providers]);
990
+ useEffect(() => {
991
+ externalDocumentsRef.current = documents;
992
+ }, [documents]);
993
+ const persistDocument = useCallback(
994
+ async ({
1104
995
  documentId,
1105
- JSON.stringify(data),
1106
996
  model,
1107
- lastUpdate
1108
- ]);
1109
- },
1110
- [usePersistentStorage]
1111
- );
1112
- const removePersistedDocument = useCallback(
1113
- async (documentId) => {
1114
- if (!usePersistentStorage) return;
1115
- await SQLite2.query("DELETE FROM documents WHERE id = ?", [documentId]);
1116
- },
1117
- [usePersistentStorage]
1118
- );
1119
- const synchronizeDataStore = useCallback(async () => {
1120
- setIsSynchronizing(true);
1121
- const stats = { processed: 0, updated: 0, failed: 0 };
1122
- try {
1123
- for (const key of Object.keys(providers)) {
1124
- stats.processed++;
1125
- try {
1126
- const { data, lastUpdate, ...rest } = providers[key];
1127
- const response = await getData({
1128
- id: key,
1129
- ...rest,
1130
- changeTime: lastUpdate.time
1131
- });
1132
- if (response.length > 0) {
1133
- const updateData = {};
1134
- response.forEach((item) => {
1135
- const { id, ...d } = item;
1136
- updateData[id] = d;
997
+ data,
998
+ lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
999
+ }) => {
1000
+ if (!persistenceStorage) return;
1001
+ await persistenceStorage.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
1002
+ documentId,
1003
+ JSON.stringify(data),
1004
+ model,
1005
+ lastUpdate
1006
+ ]);
1007
+ },
1008
+ [persistenceStorage]
1009
+ );
1010
+ const removePersistedDocument = useCallback(
1011
+ async (documentId) => {
1012
+ if (!persistenceStorage) return;
1013
+ await persistenceStorage.query("DELETE FROM documents WHERE id = ?", [documentId]);
1014
+ },
1015
+ [persistenceStorage]
1016
+ );
1017
+ const synchronizeDataStore = useCallback(async () => {
1018
+ setIsSynchronizing(true);
1019
+ const stats = { processed: 0, updated: 0, failed: 0 };
1020
+ try {
1021
+ for (const key of Object.keys(providers)) {
1022
+ stats.processed++;
1023
+ try {
1024
+ const { data, lastUpdate, ...rest } = providers[key];
1025
+ const response = await getData({
1026
+ id: key,
1027
+ ...rest,
1028
+ changeTime: lastUpdate.time
1137
1029
  });
1138
- await updateDocuments({ model: key, documents: updateData, mode: "replace" });
1139
- stats.updated++;
1030
+ if (response.length > 0) {
1031
+ const updateData = {};
1032
+ response.forEach((item) => {
1033
+ const { id, ...d } = item;
1034
+ updateData[id] = d;
1035
+ });
1036
+ await updateDocuments({ model: key, documents: updateData, mode: "replace" });
1037
+ stats.updated++;
1038
+ }
1039
+ } catch (e) {
1040
+ stats.failed++;
1041
+ console.error("[DSP] synchronizeDataStore provider error:", key, e);
1140
1042
  }
1141
- } catch (e) {
1142
- stats.failed++;
1143
- console.error("[DSP] synchronizeDataStore provider error:", key, e);
1144
1043
  }
1044
+ } finally {
1045
+ setIsSynchronizing(false);
1046
+ systemLog("dsp", "[synchronizeDataStore] Hotovo:", stats);
1145
1047
  }
1146
- } finally {
1147
- setIsSynchronizing(false);
1148
- systemLog("dsp", "[synchronizeDataStore] Hotovo:", stats);
1149
- }
1150
- }, [providers]);
1151
- useEffect(() => {
1152
- if (isLive) {
1153
- systemLog("dsp", "useEffect[isLive] Sockets: ", JSON.stringify(sockets, null, 2));
1154
- const ss = Object.keys(sockets);
1155
- systemLog("dsp", "useEffect[isLive] registruji", ss);
1156
- if (ss?.length > 0) socket.emit("joinRooms", JSON.stringify(ss));
1157
- if (!didInitialLiveSyncRef.current) {
1158
- didInitialLiveSyncRef.current = true;
1159
- systemLog("dsp", "useEffect[isLive] Zacinam synchronizovat");
1160
- synchronizeDataStore();
1048
+ }, [providers]);
1049
+ useEffect(() => {
1050
+ if (isLive) {
1051
+ systemLog("dsp", "useEffect[isLive] Sockets: ", JSON.stringify(sockets, null, 2));
1052
+ const ss = Object.keys(sockets);
1053
+ systemLog("dsp", "useEffect[isLive] registruji", ss);
1054
+ if (ss?.length > 0) socket.emit("joinRooms", JSON.stringify(ss));
1055
+ if (!didInitialLiveSyncRef.current) {
1056
+ didInitialLiveSyncRef.current = true;
1057
+ systemLog("dsp", "useEffect[isLive] Zacinam synchronizovat");
1058
+ synchronizeDataStore();
1059
+ }
1060
+ } else {
1061
+ didInitialLiveSyncRef.current = false;
1161
1062
  }
1162
- } else {
1163
- didInitialLiveSyncRef.current = false;
1164
- }
1165
- }, [isLive, socket, sockets, synchronizeDataStore]);
1166
- const presetProviders = props.providers;
1167
- useEffect(() => {
1168
- socket.on("connect", handleSocketConnect);
1169
- socket.on("disconnect", handleSocketDisconnect);
1170
- return () => {
1171
- socket.off("connect", handleSocketConnect);
1172
- socket.off("disconnect", handleSocketDisconnect);
1173
- };
1174
- }, [socket, handleSocketConnect, handleSocketDisconnect]);
1175
- const startSockets = useCallback(() => {
1176
- socket.auth = {
1177
- ...socket.auth || {},
1178
- ...socketServer?.params?.auth || {},
1179
- token: getSocketAuthToken()
1180
- };
1181
- systemLog("dsp", "PRIPOJUJI LIVE SOCKETS");
1182
- socket.connect();
1183
- }, [socket, socketServer?.params?.auth, getSocketAuthToken]);
1184
- const stopSockets = useCallback(() => {
1185
- systemLog("dsp", "[DSP] ODPOJUJI LIVE SOCKETS");
1186
- socket.disconnect();
1187
- }, [socket]);
1188
- const resetDataStore = useCallback(async () => {
1189
- console.time("[DSP] resetDataStore");
1190
- if (usePersistentStorage) {
1191
- await SQLite2.emptyTable("documents");
1192
- }
1193
- setSockets({});
1194
- setProviders({});
1195
- setDocuments({});
1196
- setCounterProviders({});
1197
- setCounterDocuments({});
1198
- console.timeEnd("[DSP] resetDataStore");
1199
- }, [usePersistentStorage]);
1200
- const resetProvider = useCallback(
1201
- async (provider) => {
1202
- if (!usePersistentStorage) return;
1203
- await SQLite2.query(`DELETE FROM documents WHERE model='${provider}'`);
1204
- },
1205
- [usePersistentStorage]
1206
- );
1207
- const initProvider = useCallback(
1208
- async (id, data) => {
1209
- const providerPreset = presetProviders[id];
1210
- const prov = renderJSONTemplate({ ...providerPreset || {}, id }, data);
1211
- systemLog("dsp", "[INIT PROVIDER] ", id, "(", data || "", ")");
1212
- if (typeof prov !== "boolean") {
1213
- return await registerProvider(prov);
1063
+ }, [isLive, socket, sockets, synchronizeDataStore]);
1064
+ const presetProviders = props.providers;
1065
+ useEffect(() => {
1066
+ socket.on("connect", handleSocketConnect);
1067
+ socket.on("disconnect", handleSocketDisconnect);
1068
+ return () => {
1069
+ socket.off("connect", handleSocketConnect);
1070
+ socket.off("disconnect", handleSocketDisconnect);
1071
+ };
1072
+ }, [socket, handleSocketConnect, handleSocketDisconnect]);
1073
+ const startSockets = useCallback(() => {
1074
+ socket.auth = {
1075
+ ...socket.auth || {},
1076
+ ...socketServer?.params?.auth || {},
1077
+ token: getSocketAuthToken()
1078
+ };
1079
+ systemLog("dsp", "PRIPOJUJI LIVE SOCKETS");
1080
+ socket.connect();
1081
+ }, [socket, socketServer?.params?.auth, getSocketAuthToken]);
1082
+ const stopSockets = useCallback(() => {
1083
+ systemLog("dsp", "[DSP] ODPOJUJI LIVE SOCKETS");
1084
+ socket.disconnect();
1085
+ }, [socket]);
1086
+ const resetDataStore = useCallback(async () => {
1087
+ console.time("[DSP] resetDataStore");
1088
+ if (persistenceStorage?.emptyTable) {
1089
+ await persistenceStorage.emptyTable("documents");
1214
1090
  }
1215
- return false;
1216
- },
1217
- [presetProviders]
1218
- );
1219
- const dispatch = useCallback((action, data, callback) => {
1220
- systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
1221
- setDispatcher((prev) => ({
1222
- isBussy: prev.isBussy,
1223
- actions: [...prev.actions, { action, data, callback }]
1224
- }));
1225
- }, []);
1226
- useEffect(() => {
1227
- async function processDispatcher() {
1228
- if (dispatcher.actions.length > 0) {
1229
- let result;
1230
- systemLog("dsp", "[DSP] DISPATCHER Zpracovavam", dispatcher.actions[0].action);
1231
- const timeCode = uuid();
1232
- console.time(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1233
- setDispatcher((prev) => ({ ...prev, isBussy: true }));
1234
- const item = dispatcher.actions[0];
1235
- switch (item.action) {
1236
- case "registerProvider":
1237
- await registerProvider(item.data);
1238
- break;
1239
- case "unregisterProvider":
1240
- await unregisterProvider(item.data);
1241
- break;
1242
- case "updateDataStore":
1243
- result = await updateDataStore(item.data);
1244
- break;
1245
- case "createDocument":
1246
- await createDocument(item.data);
1247
- break;
1248
- case "updateDocument":
1249
- await updateDocument(item.data);
1250
- break;
1251
- case "updateDocuments":
1252
- await updateDocuments(item.data);
1253
- break;
1254
- case "removeItem":
1255
- break;
1256
- case "deleteDocument":
1257
- await deleteDocument(item.data);
1258
- break;
1259
- case "createProviderItem":
1260
- result = await createProviderItem(item.data);
1261
- break;
1262
- case "deleteProviderItem":
1263
- result = await deleteProviderItem(item.data);
1264
- break;
1265
- default:
1266
- console.error("Unknown Action ", item.action, "Data: ", item.data);
1091
+ setSockets({});
1092
+ setProviders({});
1093
+ setDocuments({});
1094
+ setCounterProviders({});
1095
+ setCounterDocuments({});
1096
+ console.timeEnd("[DSP] resetDataStore");
1097
+ }, [persistenceStorage]);
1098
+ const resetProvider = useCallback(
1099
+ async (provider) => {
1100
+ if (!persistenceStorage) return;
1101
+ await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
1102
+ },
1103
+ [persistenceStorage]
1104
+ );
1105
+ const initProvider = useCallback(
1106
+ async (id, data) => {
1107
+ const providerPreset = presetProviders[id];
1108
+ const prov = renderJSONTemplate({ ...providerPreset || {}, id }, data);
1109
+ systemLog("dsp", "[INIT PROVIDER] ", id, "(", data || "", ")");
1110
+ if (typeof prov !== "boolean") {
1111
+ return await registerProvider(prov);
1112
+ }
1113
+ return false;
1114
+ },
1115
+ [persistenceStorage, presetProviders, usePersistentStorage]
1116
+ );
1117
+ const dispatch = useCallback((action, data, callback) => {
1118
+ systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
1119
+ setDispatcher((prev) => ({
1120
+ isBussy: prev.isBussy,
1121
+ actions: [...prev.actions, { action, data, callback }]
1122
+ }));
1123
+ }, []);
1124
+ useEffect(() => {
1125
+ async function processDispatcher() {
1126
+ if (dispatcher.actions.length > 0) {
1127
+ let result;
1128
+ systemLog("dsp", "[DSP] DISPATCHER Zpracovavam", dispatcher.actions[0].action);
1129
+ const timeCode = uuid();
1130
+ console.time(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1131
+ setDispatcher((prev) => ({ ...prev, isBussy: true }));
1132
+ const item = dispatcher.actions[0];
1133
+ switch (item.action) {
1134
+ case "registerProvider":
1135
+ await registerProvider(item.data);
1136
+ break;
1137
+ case "unregisterProvider":
1138
+ await unregisterProvider(item.data);
1139
+ break;
1140
+ case "updateDataStore":
1141
+ result = await updateDataStore(item.data);
1142
+ break;
1143
+ case "createDocument":
1144
+ await createDocument(item.data);
1145
+ break;
1146
+ case "updateDocument":
1147
+ await updateDocument(item.data);
1148
+ break;
1149
+ case "updateDocuments":
1150
+ await updateDocuments(item.data);
1151
+ break;
1152
+ case "removeItem":
1153
+ break;
1154
+ case "deleteDocument":
1155
+ await deleteDocument(item.data);
1156
+ break;
1157
+ case "createProviderItem":
1158
+ result = await createProviderItem(item.data);
1159
+ break;
1160
+ case "deleteProviderItem":
1161
+ result = await deleteProviderItem(item.data);
1162
+ break;
1163
+ default:
1164
+ console.error("Unknown Action ", item.action, "Data: ", item.data);
1165
+ }
1166
+ item.callback && item.callback(result);
1167
+ setDispatcher((prev) => ({
1168
+ isBussy: false,
1169
+ actions: prev.actions.slice(1)
1170
+ }));
1171
+ console.timeEnd(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1267
1172
  }
1268
- item.callback && item.callback(result);
1269
- setDispatcher((prev) => ({
1270
- isBussy: false,
1271
- actions: prev.actions.slice(1)
1272
- }));
1273
- console.timeEnd(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
1274
- }
1275
- }
1276
- if (!dispatcher.isBussy) processDispatcher();
1277
- }, [dispatcher]);
1278
- const updateDocuments = useCallback(
1279
- async ({
1280
- model,
1281
- documents: uDocuments,
1282
- mode = "update"
1283
- }) => {
1284
- systemLog("dsp", "[DSP] updateDocuments updatuji model:", model, "Documents:", Object.keys(uDocuments).length);
1285
- const modelProvider = providers[model];
1286
- if (!modelProvider) {
1287
- systemLog("dsp", "[DSP] updateDocuments - provider neexistuje:", model);
1288
- return;
1289
1173
  }
1290
- let data = [...modelProvider.data || []];
1291
- const documentsToPersist = [];
1292
- const documentIdsToDelete = [];
1293
- setDocuments((prev) => {
1294
- console.time("updateDocuments");
1295
- let newDocs = { ...prev };
1296
- if (Array.isArray(uDocuments)) {
1297
- uDocuments.forEach((document) => {
1298
- const { id, ...doc } = document;
1299
- switch (mode) {
1300
- case "replace":
1301
- systemLog("dsp", "updateDocuments - replace", id);
1302
- newDocs[id] = doc;
1303
- if (doc._deleted) {
1304
- data = data.filter((d) => d !== id);
1305
- documentIdsToDelete.push(id);
1306
- delete newDocs[id];
1307
- } else {
1308
- if (!data.includes(id)) data.push(id);
1309
- documentsToPersist.push({ id, data: newDocs[id] });
1310
- }
1311
- break;
1312
- case "update":
1313
- default:
1314
- if (!newDocs[id]) {
1315
- systemLog("dsp", "updateDocuments - vytvarim", id);
1316
- data.push(id);
1174
+ if (!dispatcher.isBussy) processDispatcher();
1175
+ }, [dispatcher]);
1176
+ const updateDocuments = useCallback(
1177
+ async ({
1178
+ model,
1179
+ documents: uDocuments,
1180
+ mode = "update"
1181
+ }) => {
1182
+ systemLog("dsp", "[DSP] updateDocuments updatuji model:", model, "Documents:", Object.keys(uDocuments).length);
1183
+ const modelProvider = providers[model];
1184
+ if (!modelProvider) {
1185
+ systemLog("dsp", "[DSP] updateDocuments - provider neexistuje:", model);
1186
+ return;
1187
+ }
1188
+ let data = [...modelProvider.data || []];
1189
+ const documentsToPersist = [];
1190
+ const documentIdsToDelete = [];
1191
+ setDocuments((prev) => {
1192
+ console.time("updateDocuments");
1193
+ let newDocs = { ...prev };
1194
+ if (Array.isArray(uDocuments)) {
1195
+ uDocuments.forEach((document) => {
1196
+ const { id, ...doc } = document;
1197
+ switch (mode) {
1198
+ case "replace":
1199
+ systemLog("dsp", "updateDocuments - replace", id);
1317
1200
  newDocs[id] = doc;
1318
- documentsToPersist.push({ id, data: newDocs[id] });
1319
- } else if (doc._deleted) {
1320
- systemLog("dsp", "updateDocuments - mazu", id);
1321
- data = data.filter((d) => d !== id);
1322
- documentIdsToDelete.push(id);
1323
- delete newDocs[id];
1324
- } else {
1325
- systemLog("dsp", "updateDocuments - updatuji", id);
1326
- newDocs[id] = { ...newDocs[id], ...doc };
1327
- documentsToPersist.push({ id, data: newDocs[id] });
1328
- }
1329
- break;
1330
- }
1331
- });
1332
- } else {
1333
- for (const key in uDocuments) {
1334
- switch (mode) {
1335
- case "replace":
1336
- if (!newDocs[key]) {
1337
- data.push(key);
1338
- }
1339
- if (uDocuments[key]._deleted) {
1340
- data = data.filter((d) => d !== key);
1341
- documentIdsToDelete.push(key);
1342
- }
1343
- newDocs[key] = uDocuments[key];
1344
- if (uDocuments[key]._deleted) {
1345
- delete newDocs[key];
1346
- } else {
1347
- documentsToPersist.push({ id: key, data: newDocs[key] });
1348
- }
1349
- break;
1350
- case "update":
1351
- default:
1352
- if (!newDocs[key]) {
1353
- data.push(key);
1201
+ if (doc._deleted) {
1202
+ data = data.filter((d) => d !== id);
1203
+ documentIdsToDelete.push(id);
1204
+ delete newDocs[id];
1205
+ } else {
1206
+ if (!data.includes(id)) data.push(id);
1207
+ documentsToPersist.push({ id, data: newDocs[id] });
1208
+ }
1209
+ break;
1210
+ case "update":
1211
+ default:
1212
+ if (!newDocs[id]) {
1213
+ systemLog("dsp", "updateDocuments - vytvarim", id);
1214
+ data.push(id);
1215
+ newDocs[id] = doc;
1216
+ documentsToPersist.push({ id, data: newDocs[id] });
1217
+ } else if (doc._deleted) {
1218
+ systemLog("dsp", "updateDocuments - mazu", id);
1219
+ data = data.filter((d) => d !== id);
1220
+ documentIdsToDelete.push(id);
1221
+ delete newDocs[id];
1222
+ } else {
1223
+ systemLog("dsp", "updateDocuments - updatuji", id);
1224
+ newDocs[id] = { ...newDocs[id], ...doc };
1225
+ documentsToPersist.push({ id, data: newDocs[id] });
1226
+ }
1227
+ break;
1228
+ }
1229
+ });
1230
+ } else {
1231
+ for (const key in uDocuments) {
1232
+ switch (mode) {
1233
+ case "replace":
1234
+ if (!newDocs[key]) {
1235
+ data.push(key);
1236
+ }
1237
+ if (uDocuments[key]._deleted) {
1238
+ data = data.filter((d) => d !== key);
1239
+ documentIdsToDelete.push(key);
1240
+ }
1354
1241
  newDocs[key] = uDocuments[key];
1355
- documentsToPersist.push({ id: key, data: newDocs[key] });
1242
+ if (uDocuments[key]._deleted) {
1243
+ delete newDocs[key];
1244
+ } else {
1245
+ documentsToPersist.push({ id: key, data: newDocs[key] });
1246
+ }
1356
1247
  break;
1357
- }
1358
- if (uDocuments[key]._deleted) {
1359
- data = data.filter((d) => d !== key);
1360
- documentIdsToDelete.push(key);
1361
- delete newDocs[key];
1362
- } else {
1363
- newDocs[key] = { ...newDocs[key], ...uDocuments[key] };
1364
- documentsToPersist.push({ id: key, data: newDocs[key] });
1365
- }
1366
- break;
1248
+ case "update":
1249
+ default:
1250
+ if (!newDocs[key]) {
1251
+ data.push(key);
1252
+ newDocs[key] = uDocuments[key];
1253
+ documentsToPersist.push({ id: key, data: newDocs[key] });
1254
+ break;
1255
+ }
1256
+ if (uDocuments[key]._deleted) {
1257
+ data = data.filter((d) => d !== key);
1258
+ documentIdsToDelete.push(key);
1259
+ delete newDocs[key];
1260
+ } else {
1261
+ newDocs[key] = { ...newDocs[key], ...uDocuments[key] };
1262
+ documentsToPersist.push({ id: key, data: newDocs[key] });
1263
+ }
1264
+ break;
1265
+ }
1367
1266
  }
1368
1267
  }
1268
+ console.timeEnd("updateDocuments");
1269
+ return newDocs;
1270
+ });
1271
+ const unique = uuid();
1272
+ setProviders((prev) => {
1273
+ const newP = { ...prev };
1274
+ newP[model] = {
1275
+ ...newP[model],
1276
+ data,
1277
+ lastUpdate: { id: unique, time: /* @__PURE__ */ new Date() }
1278
+ };
1279
+ return newP;
1280
+ });
1281
+ if (modelProvider?.isPersisting && persistenceStorage) {
1282
+ await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
1283
+ await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1369
1284
  }
1370
- console.timeEnd("updateDocuments");
1371
- return newDocs;
1372
- });
1373
- const unique = uuid();
1374
- setProviders((prev) => {
1375
- const newP = { ...prev };
1376
- newP[model] = {
1377
- ...newP[model],
1378
- data,
1379
- lastUpdate: { id: unique, time: /* @__PURE__ */ new Date() }
1380
- };
1381
- return newP;
1382
- });
1383
- if (modelProvider?.isPersisting && usePersistentStorage) {
1384
- await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
1385
- await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1386
- }
1387
- },
1388
- [providers, setDocuments, setProviders, persistDocument, removePersistedDocument]
1389
- );
1390
- const updateDocument = useCallback(
1391
- async ({ documentId, model, fields, data: pData }) => {
1392
- systemLog("dsp", "[updateDocument]:", documentId, ", model:", model);
1393
- let data = pData;
1394
- if (typeof pData === "function") data = pData(documents[documentId]);
1395
- if (fields) {
1396
- systemLog("dsp", "[updateDocument] Stahovani ", model, ", document: ", documentId, ", fields: ", fields);
1397
- systemLog("dsp", "[updateDocument] Providers: ", Object.keys(providers));
1398
- const provider = presetProviders[model];
1399
- systemLog("dsp", "[updateDocument]", provider);
1400
- let dP = renderJSONTemplate(presetProviders[model], buildDocumentTemplateParams(model, documentId));
1401
- if (dP) {
1402
- const dataFromSource = await getData({
1403
- id: dP.id,
1404
- dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
1405
- isPersisting: !!dP.isPersisting && usePersistentStorage,
1406
- schema: dP.schema,
1407
- SQLite: SQLite2
1408
- });
1409
- systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
1410
- data = dataFromSource;
1285
+ },
1286
+ [providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
1287
+ );
1288
+ const updateDocument = useCallback(
1289
+ async ({ documentId, model, fields, data: pData }) => {
1290
+ systemLog("dsp", "[updateDocument]:", documentId, ", model:", model);
1291
+ let data = pData;
1292
+ if (typeof pData === "function") data = pData(documents[documentId]);
1293
+ if (fields) {
1294
+ systemLog("dsp", "[updateDocument] Stahovani ", model, ", document: ", documentId, ", fields: ", fields);
1295
+ systemLog("dsp", "[updateDocument] Providers: ", Object.keys(providers));
1296
+ const provider = presetProviders[model];
1297
+ systemLog("dsp", "[updateDocument]", provider);
1298
+ let dP = renderJSONTemplate(presetProviders[model], buildDocumentTemplateParams(model, documentId));
1299
+ if (dP) {
1300
+ const dataFromSource = await getData({
1301
+ id: dP.id,
1302
+ dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
1303
+ isPersisting: !!dP.isPersisting && !!persistenceStorage,
1304
+ schema: dP.schema,
1305
+ SQLite: persistenceStorage || void 0
1306
+ });
1307
+ systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
1308
+ data = dataFromSource;
1309
+ }
1411
1310
  }
1412
- }
1413
- if (data) {
1414
- var listeningProviders = 0;
1415
- var isProvidersUpdated = false;
1416
- const rand = uuid();
1417
- setProviders((prev) => {
1418
- systemLog("dsp", "[updateDocument] setProviders", rand);
1419
- console.time("[DSP UPDATE PROVIDERS INSIDE]");
1420
- var newProviders = { ...prev };
1421
- Object.keys(newProviders).forEach((key) => {
1422
- const provider = newProviders[key];
1423
- const providerNext = {
1424
- ...provider,
1425
- data: Array.isArray(provider?.data) ? [...provider.data] : []
1426
- };
1427
- var socketListeners = providerNext.dataSource?.socketListeners || [];
1428
- if (socketListeners.length === 0) {
1429
- if (providerNext.data.includes(documentId)) {
1430
- if (!providerNext.dataSource?.filter || filterDocuments(data, providerNext.dataSource?.filter)) {
1431
- systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
1311
+ if (data) {
1312
+ var listeningProviders = 0;
1313
+ var isProvidersUpdated = false;
1314
+ const rand = uuid();
1315
+ setProviders((prev) => {
1316
+ systemLog("dsp", "[updateDocument] setProviders", rand);
1317
+ console.time("[DSP UPDATE PROVIDERS INSIDE]");
1318
+ var newProviders = { ...prev };
1319
+ Object.keys(newProviders).forEach((key) => {
1320
+ const provider = newProviders[key];
1321
+ const providerNext = {
1322
+ ...provider,
1323
+ data: Array.isArray(provider?.data) ? [...provider.data] : []
1324
+ };
1325
+ var socketListeners = providerNext.dataSource?.socketListeners || [];
1326
+ if (socketListeners.length === 0) {
1327
+ if (providerNext.data.includes(documentId)) {
1328
+ if (!providerNext.dataSource?.filter || filterDocuments(data, providerNext.dataSource?.filter)) {
1329
+ systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
1330
+ listeningProviders++;
1331
+ providerNext.lastUpdate = {
1332
+ id: uuid(),
1333
+ time: /* @__PURE__ */ new Date(),
1334
+ documentId
1335
+ };
1336
+ } else {
1337
+ providerNext.data = providerNext.data.filter((item) => item !== documentId);
1338
+ isProvidersUpdated = true;
1339
+ providerNext.lastUpdate = {
1340
+ id: uuid(),
1341
+ time: /* @__PURE__ */ new Date(),
1342
+ documentId
1343
+ };
1344
+ }
1345
+ }
1346
+ } else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
1347
+ key === model) {
1348
+ if (!providerNext.dataSource.filter || filterDocuments(data, providerNext.dataSource.filter)) {
1432
1349
  listeningProviders++;
1433
1350
  providerNext.lastUpdate = {
1434
1351
  id: uuid(),
1435
1352
  time: /* @__PURE__ */ new Date(),
1436
1353
  documentId
1437
1354
  };
1355
+ if (!providerNext.data.includes(documentId)) {
1356
+ providerNext.data.push(documentId);
1357
+ isProvidersUpdated = true;
1358
+ }
1438
1359
  } else {
1439
- providerNext.data = providerNext.data.filter((item) => item !== documentId);
1440
- isProvidersUpdated = true;
1441
- providerNext.lastUpdate = {
1442
- id: uuid(),
1443
- time: /* @__PURE__ */ new Date(),
1444
- documentId
1445
- };
1360
+ if (providerNext.data.includes(documentId)) {
1361
+ systemLog("dsp", "[updateDocument] - mazu:", key);
1362
+ providerNext.data = providerNext.data.filter((item) => item !== documentId);
1363
+ isProvidersUpdated = true;
1364
+ providerNext.lastUpdate = {
1365
+ id: uuid(),
1366
+ time: /* @__PURE__ */ new Date(),
1367
+ documentId
1368
+ };
1369
+ }
1446
1370
  }
1447
1371
  }
1448
- } else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
1449
- key === model) {
1450
- if (!providerNext.dataSource.filter || filterDocuments(data, providerNext.dataSource.filter)) {
1451
- listeningProviders++;
1452
- providerNext.lastUpdate = {
1453
- id: uuid(),
1454
- time: /* @__PURE__ */ new Date(),
1455
- documentId
1456
- };
1457
- if (!providerNext.data.includes(documentId)) {
1458
- providerNext.data.push(documentId);
1459
- isProvidersUpdated = true;
1460
- }
1461
- } else {
1462
- if (providerNext.data.includes(documentId)) {
1463
- systemLog("dsp", "[updateDocument] - mazu:", key);
1464
- providerNext.data = providerNext.data.filter((item) => item !== documentId);
1465
- isProvidersUpdated = true;
1466
- providerNext.lastUpdate = {
1467
- id: uuid(),
1468
- time: /* @__PURE__ */ new Date(),
1469
- documentId
1372
+ newProviders[key] = providerNext;
1373
+ });
1374
+ console.timeEnd("[DSP UPDATE PROVIDERS INSIDE]");
1375
+ console.time("[DSP UPDATE DOCUMENTS OUTSIDE]");
1376
+ setDocuments((prev2) => {
1377
+ console.time("[DSP UPDATE DOCUMENTS INSIDE]");
1378
+ if (prev2[documentId]) {
1379
+ if (listeningProviders === 0) {
1380
+ const newD = { ...prev2 };
1381
+ delete newD[documentId];
1382
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1383
+ return newD;
1384
+ } else {
1385
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1386
+ return {
1387
+ ...prev2,
1388
+ [documentId]: { ...prev2[documentId], ...data }
1470
1389
  };
1471
1390
  }
1391
+ } else if (listeningProviders > 0) {
1392
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1393
+ return { ...prev2, [documentId]: data };
1472
1394
  }
1473
- }
1474
- newProviders[key] = providerNext;
1395
+ console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1396
+ return prev2;
1397
+ });
1398
+ console.timeEnd("[DSP UPDATE DOCUMENTS OUTSIDE]");
1399
+ systemLog("dsp", "OUTSIDE", documentId);
1400
+ return newProviders;
1475
1401
  });
1476
- console.timeEnd("[DSP UPDATE PROVIDERS INSIDE]");
1477
- console.time("[DSP UPDATE DOCUMENTS OUTSIDE]");
1478
- setDocuments((prev2) => {
1479
- console.time("[DSP UPDATE DOCUMENTS INSIDE]");
1480
- if (prev2[documentId]) {
1402
+ systemLog("dsp", "updateDocument - meni se pocet naslouchajicich Provideru ?", isProvidersUpdated ? "true" : "false");
1403
+ if (isProvidersUpdated) {
1404
+ systemLog("dsp", "updateDocument - menim counterDocuments pro", listeningProviders, "Providers");
1405
+ setCounterDocuments((prev) => {
1481
1406
  if (listeningProviders === 0) {
1482
- const newD = { ...prev2 };
1407
+ const newD = { ...prev };
1483
1408
  delete newD[documentId];
1484
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1485
1409
  return newD;
1486
1410
  } else {
1487
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1488
- return {
1489
- ...prev2,
1490
- [documentId]: { ...prev2[documentId], ...data }
1491
- };
1411
+ return { ...prev, [documentId]: listeningProviders };
1492
1412
  }
1493
- } else if (listeningProviders > 0) {
1494
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1495
- return { ...prev2, [documentId]: data };
1496
- }
1497
- console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1498
- return prev2;
1499
- });
1500
- console.timeEnd("[DSP UPDATE DOCUMENTS OUTSIDE]");
1501
- systemLog("dsp", "OUTSIDE", documentId);
1502
- return newProviders;
1503
- });
1504
- systemLog("dsp", "updateDocument - meni se pocet naslouchajicich Provideru ?", isProvidersUpdated ? "true" : "false");
1505
- if (isProvidersUpdated) {
1506
- systemLog("dsp", "updateDocument - menim counterDocuments pro", listeningProviders, "Providers");
1507
- setCounterDocuments((prev) => {
1508
- if (listeningProviders === 0) {
1509
- const newD = { ...prev };
1510
- delete newD[documentId];
1511
- return newD;
1512
- } else {
1513
- return { ...prev, [documentId]: listeningProviders };
1514
- }
1515
- });
1516
- } else {
1517
- systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
1518
- }
1519
- if (providers[model]?.isPersisting && usePersistentStorage) {
1520
- if (listeningProviders > 0) {
1521
- await persistDocument({
1522
- documentId,
1523
- model,
1524
- data: { ...documents[documentId], ...data }
1525
1413
  });
1526
1414
  } else {
1527
- await removePersistedDocument(documentId);
1415
+ systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
1416
+ }
1417
+ if (providers[model]?.isPersisting && persistenceStorage) {
1418
+ if (listeningProviders > 0) {
1419
+ await persistDocument({
1420
+ documentId,
1421
+ model,
1422
+ data: { ...documents[documentId], ...data }
1423
+ });
1424
+ } else {
1425
+ await removePersistedDocument(documentId);
1426
+ }
1528
1427
  }
1529
1428
  }
1530
- }
1531
- },
1532
- [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument]
1533
- );
1534
- const updateDataStore = useCallback(
1535
- async ({
1536
- id,
1537
- documentId,
1538
- params,
1539
- variant,
1540
- data
1541
- }) => {
1542
- if (!providers[id]) {
1543
- systemLog("dsp", "[updateDataStore] Provider neexistuje:", id);
1544
- return;
1545
- }
1546
- if (!providers[id].dataSource?.uri && !providers[id].dataSource?.crud) {
1547
- if (!documents[documentId] && providers[id]?.autoCreate) {
1548
- await createProviderItem({ id, data: { id: documentId, ...data } });
1549
- } else updateDocument({ documentId, model: id, data });
1550
- return true;
1551
- }
1552
- systemLog(
1553
- "dsp",
1554
- "[updateDataStore] Posilam patchData: ",
1429
+ },
1430
+ [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
1431
+ );
1432
+ const updateDataStore = useCallback(
1433
+ async ({
1555
1434
  id,
1556
- ",\n params: ",
1557
- JSON.stringify(params, null, 2),
1558
- "\n data: ",
1559
- JSON.stringify(data, null, 2)
1560
- );
1561
- const result = await patchData({
1562
- dataSource: renderJSONTemplate(providers[id].dataSource, params),
1435
+ documentId,
1436
+ params,
1563
1437
  variant,
1564
1438
  data
1565
- });
1566
- if (typeof result === "object") {
1567
- const { id: rDocumentId, ...document } = result;
1568
- if (!isLive) {
1569
- systemLog("dsp", "[updateDataStore] UPDATE DATA STORE RESULT: ", result);
1570
- updateDocument({ documentId: rDocumentId, model: id, data: document });
1571
- } else {
1572
- systemLog("dsp", "[updateDataStore] Updatuje Socket");
1439
+ }) => {
1440
+ if (!providers[id]) {
1441
+ systemLog("dsp", "[updateDataStore] Provider neexistuje:", id);
1442
+ return;
1573
1443
  }
1574
- }
1575
- return result;
1576
- },
1577
- [providers, documents, isLive, updateDocument]
1578
- );
1579
- useEffect(() => {
1580
- socketActionHandlersRef.current = { dispatch, updateDocument };
1581
- }, [dispatch, updateDocument]);
1582
- const createDocument = useCallback(
1583
- async ({ model, documentId, data }) => {
1584
- const newDocument = data;
1585
- systemLog("dsp", `Registruji model ${model}, documentId ${documentId}, data: ${JSON.stringify(data)}`);
1586
- var providerListenersCount = 0;
1587
- Object.keys(providers).forEach((key) => {
1588
- const provider = providers[key];
1589
- var socketListeners = provider.dataSource?.socketListeners;
1590
- if ((socketListeners?.includes(model) || key === model) && (!provider.dataSource?.filter || filterDocuments(data, provider.dataSource?.filter))) {
1591
- systemLog("dsp", "[createDocument] Provider data: ", provider.data.length, " Bytes, documentId: ", documentId);
1592
- if (!provider.data.includes(documentId)) {
1593
- providerListenersCount++;
1594
- setProviders((prev) => ({
1595
- ...prev,
1596
- [key]: {
1597
- ...prev[key],
1598
- data: [...prev[key].data, documentId],
1599
- lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1600
- }
1601
- }));
1602
- }
1444
+ if (!providers[id].dataSource?.uri && !providers[id].dataSource?.crud) {
1445
+ if (!documents[documentId] && providers[id]?.autoCreate) {
1446
+ await createProviderItem({ id, data: { id: documentId, ...data } });
1447
+ } else updateDocument({ documentId, model: id, data });
1448
+ return true;
1603
1449
  }
1604
- });
1605
- if (providerListenersCount > 0) {
1606
- if (providers[model]?.isPersisting && usePersistentStorage) {
1607
- await persistDocument({ documentId, model, data: newDocument });
1608
- }
1609
- setCounterDocuments((prev) => {
1610
- const newC = { ...prev };
1611
- if (newC[documentId]) {
1612
- setDocuments((prev2) => ({
1613
- ...prev2,
1614
- [documentId]: { ...prev2[documentId], ...newDocument }
1615
- }));
1616
- newC[documentId] = prev[documentId] + providerListenersCount;
1450
+ systemLog(
1451
+ "dsp",
1452
+ "[updateDataStore] Posilam patchData: ",
1453
+ id,
1454
+ ",\n params: ",
1455
+ JSON.stringify(params, null, 2),
1456
+ "\n data: ",
1457
+ JSON.stringify(data, null, 2)
1458
+ );
1459
+ const result = await patchData({
1460
+ dataSource: renderJSONTemplate(providers[id].dataSource, params),
1461
+ variant,
1462
+ data
1463
+ });
1464
+ if (typeof result === "object") {
1465
+ const { id: rDocumentId, ...document } = result;
1466
+ if (!isLive) {
1467
+ systemLog("dsp", "[updateDataStore] UPDATE DATA STORE RESULT: ", result);
1468
+ updateDocument({ documentId: rDocumentId, model: id, data: document });
1617
1469
  } else {
1618
- setDocuments((prev2) => ({ ...prev2, [documentId]: newDocument }));
1619
- newC[documentId] = providerListenersCount;
1470
+ systemLog("dsp", "[updateDataStore] Updatuje Socket");
1620
1471
  }
1621
- return newC;
1622
- });
1623
- return { id: documentId, document: newDocument };
1624
- } else return false;
1625
- },
1626
- [providers, setProviders, setCounterDocuments, setDocuments, persistDocument]
1627
- );
1628
- const deleteDocument = useCallback(
1629
- async ({ documentId }) => {
1630
- systemLog("dsp", `[deleteDocument] Mazu document ${documentId}}`);
1631
- await removePersistedDocument(documentId);
1632
- setDocuments((prev) => {
1633
- const newDocs = { ...prev };
1634
- systemLog("dsp", "[deleteDocument] MAZU ", documentId, " z ", newDocs);
1635
- delete newDocs[documentId];
1636
- systemLog("dsp", "[deleteDocument] NEW DOCS: ", newDocs);
1637
- return newDocs;
1638
- });
1639
- setCounterDocuments((prev) => {
1640
- const newC = { ...prev };
1641
- delete newC[documentId];
1642
- return newC;
1643
- });
1644
- setProviders((prev) => {
1645
- var deletedCount = 0;
1646
- const updatedDataObj = { ...prev };
1647
- for (const key in updatedDataObj) {
1648
- const initialLength = updatedDataObj[key].data.length;
1649
- updatedDataObj[key].data = updatedDataObj[key].data.filter((element) => element !== documentId);
1650
- updatedDataObj[key].lastUpdate = { id: uuid(), time: /* @__PURE__ */ new Date() };
1651
- deletedCount += initialLength - updatedDataObj[key].data.length;
1652
- if (initialLength - updatedDataObj[key].data.length > 0) systemLog("dsp", "[deleteDocument] Smazan zaznam...", deletedCount);
1653
1472
  }
1654
- return updatedDataObj;
1655
- });
1656
- },
1657
- [setDocuments, setCounterDocuments, setProviders, removePersistedDocument]
1658
- );
1659
- const createProviderItem = useCallback(
1660
- async ({ id, data }) => {
1661
- if (!providers[id]) {
1662
- systemLog("dsp", "[createProviderItem] Provider neexistuje:", id);
1663
- return;
1664
- }
1665
- if (!providers[id].dataSource) {
1666
- const { id: dId, ...rData } = data;
1667
- const documentId = dId || uuid();
1668
- const result2 = createDocument({ model: id, documentId, data: rData });
1669
- return result2;
1670
- }
1671
- const result = await postData({
1672
- dataSource: providers[id].dataSource,
1673
- schema: providers[id].schema,
1674
- val: data
1675
- });
1676
- return result;
1677
- },
1678
- [providers, createDocument]
1679
- );
1680
- const deleteProviderItem = useCallback(
1681
- async ({ providerId, data, params }) => {
1682
- if (!providers[providerId]) {
1683
- systemLog("dsp", "[deleteProviderItem] Provider neexistuje:", providerId);
1684
- return;
1685
- }
1686
- const response = await deleteData({
1687
- dataSource: renderJSONTemplate(providers[providerId].dataSource, params),
1688
- // dataSource: providers[providerId].dataSource,
1689
- data
1690
- });
1691
- return response;
1692
- },
1693
- [providers]
1694
- );
1695
- const registerProviderSockets = useCallback(
1696
- (sockets2) => {
1697
- if (sockets2) {
1698
- systemLog("dsp", "[registerProviderSockets]", sockets2);
1699
- var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1700
- setSockets((prev) => {
1701
- const newS = { ...prev };
1702
- d.forEach((item) => {
1703
- if (newS[item]) {
1704
- newS[item].listeners = newS[item].listeners + 1;
1473
+ return result;
1474
+ },
1475
+ [providers, documents, isLive, updateDocument]
1476
+ );
1477
+ useEffect(() => {
1478
+ socketActionHandlersRef.current = { dispatch, updateDocument };
1479
+ }, [dispatch, updateDocument]);
1480
+ const createDocument = useCallback(
1481
+ async ({ model, documentId, data }) => {
1482
+ const newDocument = data;
1483
+ systemLog("dsp", `Registruji model ${model}, documentId ${documentId}, data: ${JSON.stringify(data)}`);
1484
+ var providerListenersCount = 0;
1485
+ Object.keys(providers).forEach((key) => {
1486
+ const provider = providers[key];
1487
+ var socketListeners = provider.dataSource?.socketListeners;
1488
+ if ((socketListeners?.includes(model) || key === model) && (!provider.dataSource?.filter || filterDocuments(data, provider.dataSource?.filter))) {
1489
+ systemLog("dsp", "[createDocument] Provider data: ", provider.data.length, " Bytes, documentId: ", documentId);
1490
+ if (!provider.data.includes(documentId)) {
1491
+ providerListenersCount++;
1492
+ setProviders((prev) => ({
1493
+ ...prev,
1494
+ [key]: {
1495
+ ...prev[key],
1496
+ data: [...prev[key].data, documentId],
1497
+ lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1498
+ }
1499
+ }));
1500
+ }
1501
+ }
1502
+ });
1503
+ if (providerListenersCount > 0) {
1504
+ if (providers[model]?.isPersisting && persistenceStorage) {
1505
+ await persistDocument({ documentId, model, data: newDocument });
1506
+ }
1507
+ setCounterDocuments((prev) => {
1508
+ const newC = { ...prev };
1509
+ if (newC[documentId]) {
1510
+ setDocuments((prev2) => ({
1511
+ ...prev2,
1512
+ [documentId]: { ...prev2[documentId], ...newDocument }
1513
+ }));
1514
+ newC[documentId] = prev[documentId] + providerListenersCount;
1705
1515
  } else {
1706
- const roomHandler = (msg) => {
1707
- const { dispatch: currentDispatch, updateDocument: currentUpdateDocument } = socketActionHandlersRef.current;
1708
- handleSocketMessage(item, msg, {
1709
- dispatch: currentDispatch,
1710
- updateDocument: currentUpdateDocument
1711
- });
1712
- };
1713
- socketRoomHandlersRef.current[item] = roomHandler;
1714
- newS[item] = { listeners: 1, data: [] };
1715
- socket.emit("joinRoom", item);
1716
- socket.on(item, roomHandler);
1516
+ setDocuments((prev2) => ({ ...prev2, [documentId]: newDocument }));
1517
+ newC[documentId] = providerListenersCount;
1717
1518
  }
1519
+ return newC;
1718
1520
  });
1719
- return newS;
1521
+ return { id: documentId, document: newDocument };
1522
+ } else return false;
1523
+ },
1524
+ [providers, setProviders, setCounterDocuments, setDocuments, persistDocument, persistenceStorage]
1525
+ );
1526
+ const deleteDocument = useCallback(
1527
+ async ({ documentId }) => {
1528
+ systemLog("dsp", `[deleteDocument] Mazu document ${documentId}}`);
1529
+ await removePersistedDocument(documentId);
1530
+ setDocuments((prev) => {
1531
+ const newDocs = { ...prev };
1532
+ systemLog("dsp", "[deleteDocument] MAZU ", documentId, " z ", newDocs);
1533
+ delete newDocs[documentId];
1534
+ systemLog("dsp", "[deleteDocument] NEW DOCS: ", newDocs);
1535
+ return newDocs;
1720
1536
  });
1721
- }
1722
- },
1723
- [setSockets, socket]
1724
- );
1725
- const unregisterProviderSockets = useCallback(
1726
- (sockets2) => {
1727
- systemLog("dsp", "[unregisterProviderSockets] Mazu sockety ", JSON.stringify(sockets2, null, 2));
1728
- var removeSocketListeners = [];
1729
- var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1730
- setSockets((prev) => {
1731
- const newS = { ...prev };
1732
- d.forEach((item) => {
1733
- if (newS[item]?.listeners <= 1) {
1734
- removeSocketListeners.push(item);
1735
- const roomHandler = socketRoomHandlersRef.current[item];
1736
- if (roomHandler) {
1737
- socket.off(item, roomHandler);
1738
- delete socketRoomHandlersRef.current[item];
1739
- }
1740
- delete newS[item];
1741
- } else if (newS[item]) newS[item].listeners = newS[item].listeners - 1;
1537
+ setCounterDocuments((prev) => {
1538
+ const newC = { ...prev };
1539
+ delete newC[documentId];
1540
+ return newC;
1541
+ });
1542
+ setProviders((prev) => {
1543
+ var deletedCount = 0;
1544
+ const updatedDataObj = { ...prev };
1545
+ for (const key in updatedDataObj) {
1546
+ const initialLength = updatedDataObj[key].data.length;
1547
+ updatedDataObj[key].data = updatedDataObj[key].data.filter((element) => element !== documentId);
1548
+ updatedDataObj[key].lastUpdate = { id: uuid(), time: /* @__PURE__ */ new Date() };
1549
+ deletedCount += initialLength - updatedDataObj[key].data.length;
1550
+ if (initialLength - updatedDataObj[key].data.length > 0) systemLog("dsp", "[deleteDocument] Smazan zaznam...", deletedCount);
1551
+ }
1552
+ return updatedDataObj;
1742
1553
  });
1743
- if (removeSocketListeners.length > 0) {
1744
- socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1554
+ },
1555
+ [setDocuments, setCounterDocuments, setProviders, removePersistedDocument]
1556
+ );
1557
+ const createProviderItem = useCallback(
1558
+ async ({ id, data }) => {
1559
+ if (!providers[id]) {
1560
+ systemLog("dsp", "[createProviderItem] Provider neexistuje:", id);
1561
+ return;
1745
1562
  }
1746
- return newS;
1747
- });
1748
- },
1749
- [setSockets, socket]
1750
- );
1751
- const updateProviderListeners = useCallback(
1752
- async (id, val) => {
1753
- systemLog("dsp", `[updateProviderListeners] provider:`, id, "menim o", val);
1754
- setCounterProviders((prev) => {
1755
- if (!prev[id]) return prev;
1756
- if (prev[id] + val > 0) {
1757
- return {
1758
- ...prev,
1759
- [id]: prev[id] + val
1760
- };
1761
- } else {
1762
- setProviders((prevP) => {
1763
- systemLog("dsp", "[DSP] UPDATE PROVIDER - mazu sockets ", id);
1764
- setSockets((prevS) => {
1765
- var removeSocketListeners = [];
1766
- const newS = { ...prevS };
1767
- const providerSocketListeners = prevP[id].dataSource?.socketListeners || [];
1768
- providerSocketListeners.forEach((socketName) => {
1769
- if (!newS[socketName]) return;
1770
- if (newS[socketName].listeners + val <= 0) {
1771
- const roomHandler = socketRoomHandlersRef.current[socketName];
1772
- if (roomHandler) {
1773
- socket.off(socketName, roomHandler);
1774
- delete socketRoomHandlersRef.current[socketName];
1775
- }
1776
- delete newS[socketName];
1777
- removeSocketListeners.push(socketName);
1778
- } else {
1779
- newS[socketName].listeners = newS[socketName].listeners + val;
1780
- }
1781
- });
1782
- if (removeSocketListeners.length > 0) {
1783
- socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1784
- }
1785
- return newS;
1786
- });
1787
- setCounterDocuments((prevC) => {
1788
- const newC = { ...prevC };
1789
- prevP[id].data.forEach((document) => {
1790
- if (newC[document] + val <= 0) {
1791
- setDocuments((prev2) => {
1792
- const newD = { ...prev2 };
1793
- delete newD[document];
1794
- return newD;
1795
- });
1796
- delete newC[document];
1797
- } else {
1798
- newC[document] = newC[document] + val;
1799
- }
1800
- });
1801
- return newC;
1802
- });
1803
- const newP = { ...prevP };
1804
- delete newP[id];
1805
- return newP;
1806
- });
1807
- const newProvs = { ...prev };
1808
- delete newProvs[id];
1809
- return newProvs;
1563
+ if (!providers[id].dataSource) {
1564
+ const { id: dId, ...rData } = data;
1565
+ const documentId = dId || uuid();
1566
+ const result2 = createDocument({ model: id, documentId, data: rData });
1567
+ return result2;
1810
1568
  }
1811
- });
1812
- },
1813
- [setCounterProviders, setProviders, setCounterDocuments, setDocuments, socket]
1814
- );
1815
- const registerProvider = useCallback(
1816
- async (newItem) => {
1817
- systemLog("dsp", "[registerProvider]", newItem.id);
1818
- let result;
1819
- const { id, ...provider } = newItem;
1820
- if (providers[id]) {
1821
- setCounterProviders((prev) => {
1822
- systemLog("dsp", "[registerProvider] Pouze navysuji ", id, " ", prev[id], " -> ", prev[id] + 1);
1823
- return {
1824
- ...prev,
1825
- [id]: prev[id] + 1
1826
- };
1827
- });
1828
- result = providers[id];
1829
- } else {
1830
- const dataFromSource = await getData({
1831
- schema: newItem.schema,
1832
- dataSource: newItem.dataSource || {},
1833
- id: newItem.id,
1834
- isPersisting: !!newItem.isPersisting && usePersistentStorage,
1835
- SQLite: SQLite2
1569
+ const result = await postData({
1570
+ dataSource: providers[id].dataSource,
1571
+ schema: providers[id].schema,
1572
+ val: data
1836
1573
  });
1837
- console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1838
- var dataList = [];
1839
- var items = {};
1840
- const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1841
- dataS.forEach((item) => {
1842
- if (!item) return;
1843
- const { id: itId, ...data } = item;
1844
- const id2 = itId || uuid();
1845
- dataList.push(id2);
1846
- if (documents[id2]) {
1847
- items[id2] = {
1848
- ...documents[id2],
1849
- ...data
1850
- };
1851
- } else {
1852
- items[id2] = data;
1853
- }
1574
+ return result;
1575
+ },
1576
+ [providers, createDocument]
1577
+ );
1578
+ const deleteProviderItem = useCallback(
1579
+ async ({ providerId, data, params }) => {
1580
+ if (!providers[providerId]) {
1581
+ systemLog("dsp", "[deleteProviderItem] Provider neexistuje:", providerId);
1582
+ return;
1583
+ }
1584
+ const response = await deleteData({
1585
+ dataSource: renderJSONTemplate(providers[providerId].dataSource, params),
1586
+ // dataSource: providers[providerId].dataSource,
1587
+ data
1854
1588
  });
1855
- setCounterDocuments((prev) => {
1856
- {
1857
- const newC = { ...prev };
1858
- dataList.forEach((i) => {
1859
- if (newC[i]) {
1860
- newC[i] = newC[i] + 1;
1589
+ return response;
1590
+ },
1591
+ [providers]
1592
+ );
1593
+ const registerProviderSockets = useCallback(
1594
+ (sockets2) => {
1595
+ if (sockets2) {
1596
+ systemLog("dsp", "[registerProviderSockets]", sockets2);
1597
+ var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1598
+ setSockets((prev) => {
1599
+ const newS = { ...prev };
1600
+ d.forEach((item) => {
1601
+ if (newS[item]) {
1602
+ newS[item].listeners = newS[item].listeners + 1;
1861
1603
  } else {
1862
- newC[i] = 1;
1604
+ const roomHandler = (msg) => {
1605
+ const { dispatch: currentDispatch, updateDocument: currentUpdateDocument } = socketActionHandlersRef.current;
1606
+ handleSocketMessage(item, msg, {
1607
+ dispatch: currentDispatch,
1608
+ updateDocument: currentUpdateDocument
1609
+ });
1610
+ };
1611
+ socketRoomHandlersRef.current[item] = roomHandler;
1612
+ newS[item] = { listeners: 1, data: [] };
1613
+ socket.emit("joinRoom", item);
1614
+ socket.on(item, roomHandler);
1863
1615
  }
1864
1616
  });
1865
- return newC;
1617
+ return newS;
1618
+ });
1619
+ }
1620
+ },
1621
+ [setSockets, socket]
1622
+ );
1623
+ const unregisterProviderSockets = useCallback(
1624
+ (sockets2) => {
1625
+ systemLog("dsp", "[unregisterProviderSockets] Mazu sockety ", JSON.stringify(sockets2, null, 2));
1626
+ var removeSocketListeners = [];
1627
+ var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
1628
+ setSockets((prev) => {
1629
+ const newS = { ...prev };
1630
+ d.forEach((item) => {
1631
+ if (newS[item]?.listeners <= 1) {
1632
+ removeSocketListeners.push(item);
1633
+ const roomHandler = socketRoomHandlersRef.current[item];
1634
+ if (roomHandler) {
1635
+ socket.off(item, roomHandler);
1636
+ delete socketRoomHandlersRef.current[item];
1637
+ }
1638
+ delete newS[item];
1639
+ } else if (newS[item]) newS[item].listeners = newS[item].listeners - 1;
1640
+ });
1641
+ if (removeSocketListeners.length > 0) {
1642
+ socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1866
1643
  }
1644
+ return newS;
1867
1645
  });
1868
- if (Object.keys(items).length > 0)
1869
- setDocuments((prev) => ({ ...prev, ...items }));
1870
- result = {
1871
- ...provider,
1872
- data: dataList,
1873
- lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1874
- };
1875
- setProviders((prev) => ({
1876
- ...prev,
1877
- [id]: result
1878
- }));
1879
- setCounterProviders((prev) => ({
1880
- ...prev,
1881
- [id]: 1
1882
- }));
1883
- dataList;
1884
- if (provider.dataSource?.socketListeners) registerProviderSockets(provider.dataSource.socketListeners);
1885
- console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1886
- }
1887
- return result;
1888
- },
1889
- [providers, SQLite2, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets]
1890
- );
1891
- const unregisterProvider = useCallback(
1892
- async (itemId) => {
1893
- setCounterProviders((prev) => {
1894
- if (prev[itemId]) {
1895
- if (prev[itemId] > 1) {
1896
- systemLog("dsp", "[unregisterProvider] snizuji ", itemId, "z ", prev[itemId], " na ", prev[itemId] - 1);
1646
+ },
1647
+ [setSockets, socket]
1648
+ );
1649
+ const updateProviderListeners = useCallback(
1650
+ async (id, val) => {
1651
+ systemLog("dsp", `[updateProviderListeners] provider:`, id, "menim o", val);
1652
+ setCounterProviders((prev) => {
1653
+ if (!prev[id]) return prev;
1654
+ if (prev[id] + val > 0) {
1897
1655
  return {
1898
1656
  ...prev,
1899
- [itemId]: prev[itemId] - 1
1657
+ [id]: prev[id] + val
1900
1658
  };
1901
1659
  } else {
1902
- systemLog("dsp", "[unregisterProvider] mazu ", Object.keys(providers));
1903
- unregisterProviderSockets(providers[itemId]?.dataSource.socketListeners);
1904
- systemLog("dsp", "[unregisterProvider] Mazu dokumenty providera ", itemId);
1905
- setCounterDocuments((cd) => {
1906
- const newC = { ...cd };
1907
- const deleteDocumentIds = [];
1908
- providers[itemId].data.forEach((docId) => {
1909
- if (newC[docId] <= 1) {
1910
- deleteDocumentIds.push(docId);
1911
- delete newC[docId];
1912
- } else newC[docId] = newC[docId] - 1;
1660
+ setProviders((prevP) => {
1661
+ systemLog("dsp", "[DSP] UPDATE PROVIDER - mazu sockets ", id);
1662
+ setSockets((prevS) => {
1663
+ var removeSocketListeners = [];
1664
+ const newS = { ...prevS };
1665
+ const providerSocketListeners = prevP[id].dataSource?.socketListeners || [];
1666
+ providerSocketListeners.forEach((socketName) => {
1667
+ if (!newS[socketName]) return;
1668
+ if (newS[socketName].listeners + val <= 0) {
1669
+ const roomHandler = socketRoomHandlersRef.current[socketName];
1670
+ if (roomHandler) {
1671
+ socket.off(socketName, roomHandler);
1672
+ delete socketRoomHandlersRef.current[socketName];
1673
+ }
1674
+ delete newS[socketName];
1675
+ removeSocketListeners.push(socketName);
1676
+ } else {
1677
+ newS[socketName].listeners = newS[socketName].listeners + val;
1678
+ }
1679
+ });
1680
+ if (removeSocketListeners.length > 0) {
1681
+ socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
1682
+ }
1683
+ return newS;
1913
1684
  });
1914
- if (deleteDocumentIds.length > 0) {
1915
- setDocuments((pd) => {
1916
- const newD = { ...pd };
1917
- deleteDocumentIds.forEach((docId) => {
1918
- delete newD[docId];
1919
- });
1920
- return newD;
1685
+ setCounterDocuments((prevC) => {
1686
+ const newC = { ...prevC };
1687
+ prevP[id].data.forEach((document) => {
1688
+ if (newC[document] + val <= 0) {
1689
+ setDocuments((prev2) => {
1690
+ const newD = { ...prev2 };
1691
+ delete newD[document];
1692
+ return newD;
1693
+ });
1694
+ delete newC[document];
1695
+ } else {
1696
+ newC[document] = newC[document] + val;
1697
+ }
1921
1698
  });
1922
- }
1923
- return newC;
1924
- });
1925
- setProviders((pp) => {
1926
- const newProvs2 = { ...pp };
1927
- delete newProvs2[itemId];
1928
- return newProvs2;
1699
+ return newC;
1700
+ });
1701
+ const newP = { ...prevP };
1702
+ delete newP[id];
1703
+ return newP;
1929
1704
  });
1930
1705
  const newProvs = { ...prev };
1931
- delete newProvs[itemId];
1706
+ delete newProvs[id];
1932
1707
  return newProvs;
1933
1708
  }
1934
- } else return prev;
1935
- });
1936
- },
1937
- [setCounterProviders, providers, setCounterDocuments, setDocuments, setProviders, unregisterProviderSockets]
1938
- );
1939
- const actionsValue = useMemo(
1940
- () => ({
1941
- dispatch,
1942
- initProvider,
1943
- resetProvider,
1944
- registerProvider,
1945
- unregisterProvider,
1946
- updateProviderListeners,
1947
- resetDataStore,
1948
- startSockets,
1949
- stopSockets,
1950
- registerProviderSockets,
1951
- unregisterProviderSockets,
1952
- updateDocuments,
1953
- presetProviders
1954
- }),
1955
- [
1956
- dispatch,
1957
- initProvider,
1958
- resetProvider,
1959
- registerProvider,
1960
- unregisterProvider,
1961
- updateProviderListeners,
1962
- resetDataStore,
1963
- startSockets,
1964
- stopSockets,
1965
- registerProviderSockets,
1966
- unregisterProviderSockets,
1967
- updateDocuments,
1968
- presetProviders
1969
- ]
1970
- );
1971
- const metaValue = useMemo(
1972
- () => ({ isLive, isSynchronizing, sockets, counterProviders, counterDocuments }),
1973
- [isLive, isSynchronizing, sockets, counterProviders, counterDocuments]
1974
- );
1975
- const stableValue = useMemo(
1976
- () => ({
1977
- dispatch,
1978
- presetProviders,
1979
- updateProviderListeners,
1980
- subscribeToProvider,
1981
- getProviderLastUpdate,
1982
- getExternalDocuments,
1983
- getExternalProviders
1984
- }),
1985
- [
1986
- dispatch,
1987
- presetProviders,
1988
- updateProviderListeners,
1989
- subscribeToProvider,
1990
- getProviderLastUpdate,
1991
- getExternalDocuments,
1992
- getExternalProviders
1993
- ]
1994
- );
1995
- systemLog("dsp", "END");
1996
- return (
1997
- // <DatabaseProvider>
1998
- /* @__PURE__ */ jsx(DataStoreStableContext.Provider, { value: stableValue, children: /* @__PURE__ */ jsx(DataStoreActionsContext.Provider, { value: actionsValue, children: /* @__PURE__ */ jsx(DataStoreProvidersContext.Provider, { value: providers, children: /* @__PURE__ */ jsx(DataStoreDocumentsContext.Provider, { value: documents, children: /* @__PURE__ */ jsx(DataStoreContext.Provider, { value: metaValue, children: props.children }) }) }) }) })
1999
- );
2000
- };
1709
+ });
1710
+ },
1711
+ [setCounterProviders, setProviders, setCounterDocuments, setDocuments, socket]
1712
+ );
1713
+ const registerProvider = useCallback(
1714
+ async (newItem) => {
1715
+ systemLog("dsp", "[registerProvider]", newItem.id);
1716
+ let result;
1717
+ const { id, ...provider } = newItem;
1718
+ if (providers[id]) {
1719
+ setCounterProviders((prev) => {
1720
+ systemLog("dsp", "[registerProvider] Pouze navysuji ", id, " ", prev[id], " -> ", prev[id] + 1);
1721
+ return {
1722
+ ...prev,
1723
+ [id]: prev[id] + 1
1724
+ };
1725
+ });
1726
+ result = providers[id];
1727
+ } else {
1728
+ try {
1729
+ const dataFromSource = await getData({
1730
+ schema: newItem.schema,
1731
+ dataSource: newItem.dataSource || {},
1732
+ id: newItem.id,
1733
+ isPersisting: !!newItem.isPersisting && !!persistenceStorage,
1734
+ SQLite: persistenceStorage || void 0
1735
+ });
1736
+ console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
1737
+ var dataList = [];
1738
+ var items = {};
1739
+ const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
1740
+ dataS.forEach((item) => {
1741
+ if (!item) return;
1742
+ const { id: itId, ...data } = item;
1743
+ const normalizedId = itId || uuid();
1744
+ dataList.push(normalizedId);
1745
+ if (documents[normalizedId]) {
1746
+ items[normalizedId] = {
1747
+ ...documents[normalizedId],
1748
+ ...data
1749
+ };
1750
+ } else {
1751
+ items[normalizedId] = data;
1752
+ }
1753
+ });
1754
+ setCounterDocuments((prev) => {
1755
+ const newC = { ...prev };
1756
+ dataList.forEach((itemId) => {
1757
+ if (newC[itemId]) {
1758
+ newC[itemId] = newC[itemId] + 1;
1759
+ } else {
1760
+ newC[itemId] = 1;
1761
+ }
1762
+ });
1763
+ return newC;
1764
+ });
1765
+ if (Object.keys(items).length > 0) {
1766
+ setDocuments((prev) => ({ ...prev, ...items }));
1767
+ }
1768
+ result = {
1769
+ ...provider,
1770
+ data: dataList,
1771
+ lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
1772
+ };
1773
+ setProviders((prev) => ({
1774
+ ...prev,
1775
+ [id]: result
1776
+ }));
1777
+ setCounterProviders((prev) => ({
1778
+ ...prev,
1779
+ [id]: 1
1780
+ }));
1781
+ if (provider.dataSource?.socketListeners) {
1782
+ registerProviderSockets(provider.dataSource.socketListeners);
1783
+ }
1784
+ console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
1785
+ } catch (error) {
1786
+ console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
1787
+ throw error;
1788
+ }
1789
+ }
1790
+ return result;
1791
+ },
1792
+ [providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
1793
+ );
1794
+ const unregisterProvider = useCallback(
1795
+ async (itemId) => {
1796
+ setCounterProviders((prev) => {
1797
+ if (prev[itemId]) {
1798
+ if (prev[itemId] > 1) {
1799
+ systemLog("dsp", "[unregisterProvider] snizuji ", itemId, "z ", prev[itemId], " na ", prev[itemId] - 1);
1800
+ return {
1801
+ ...prev,
1802
+ [itemId]: prev[itemId] - 1
1803
+ };
1804
+ } else {
1805
+ systemLog("dsp", "[unregisterProvider] mazu ", Object.keys(providers));
1806
+ unregisterProviderSockets(providers[itemId]?.dataSource.socketListeners);
1807
+ systemLog("dsp", "[unregisterProvider] Mazu dokumenty providera ", itemId);
1808
+ setCounterDocuments((cd) => {
1809
+ const newC = { ...cd };
1810
+ const deleteDocumentIds = [];
1811
+ providers[itemId].data.forEach((docId) => {
1812
+ if (newC[docId] <= 1) {
1813
+ deleteDocumentIds.push(docId);
1814
+ delete newC[docId];
1815
+ } else newC[docId] = newC[docId] - 1;
1816
+ });
1817
+ if (deleteDocumentIds.length > 0) {
1818
+ setDocuments((pd) => {
1819
+ const newD = { ...pd };
1820
+ deleteDocumentIds.forEach((docId) => {
1821
+ delete newD[docId];
1822
+ });
1823
+ return newD;
1824
+ });
1825
+ }
1826
+ return newC;
1827
+ });
1828
+ setProviders((pp) => {
1829
+ const newProvs2 = { ...pp };
1830
+ delete newProvs2[itemId];
1831
+ return newProvs2;
1832
+ });
1833
+ const newProvs = { ...prev };
1834
+ delete newProvs[itemId];
1835
+ return newProvs;
1836
+ }
1837
+ } else return prev;
1838
+ });
1839
+ },
1840
+ [setCounterProviders, providers, setCounterDocuments, setDocuments, setProviders, unregisterProviderSockets]
1841
+ );
1842
+ const actionsValue = useMemo(
1843
+ () => ({
1844
+ dispatch,
1845
+ initProvider,
1846
+ resetProvider,
1847
+ registerProvider,
1848
+ unregisterProvider,
1849
+ updateProviderListeners,
1850
+ resetDataStore,
1851
+ startSockets,
1852
+ stopSockets,
1853
+ registerProviderSockets,
1854
+ unregisterProviderSockets,
1855
+ updateDocuments,
1856
+ presetProviders
1857
+ }),
1858
+ [
1859
+ dispatch,
1860
+ initProvider,
1861
+ resetProvider,
1862
+ registerProvider,
1863
+ unregisterProvider,
1864
+ updateProviderListeners,
1865
+ resetDataStore,
1866
+ startSockets,
1867
+ stopSockets,
1868
+ registerProviderSockets,
1869
+ unregisterProviderSockets,
1870
+ updateDocuments,
1871
+ presetProviders
1872
+ ]
1873
+ );
1874
+ const metaValue = useMemo(
1875
+ () => ({ isLive, isSynchronizing, sockets, counterProviders, counterDocuments }),
1876
+ [isLive, isSynchronizing, sockets, counterProviders, counterDocuments]
1877
+ );
1878
+ const stableValue = useMemo(
1879
+ () => ({
1880
+ dispatch,
1881
+ presetProviders,
1882
+ updateProviderListeners,
1883
+ subscribeToProvider,
1884
+ getProviderLastUpdate,
1885
+ getExternalDocuments,
1886
+ getExternalProviders
1887
+ }),
1888
+ [
1889
+ dispatch,
1890
+ presetProviders,
1891
+ updateProviderListeners,
1892
+ subscribeToProvider,
1893
+ getProviderLastUpdate,
1894
+ getExternalDocuments,
1895
+ getExternalProviders
1896
+ ]
1897
+ );
1898
+ useImperativeHandle(ref, () => actionsValue, [actionsValue]);
1899
+ systemLog("dsp", "END");
1900
+ return (
1901
+ // <DatabaseProvider>
1902
+ /* @__PURE__ */ jsx(DataStoreStableContext.Provider, { value: stableValue, children: /* @__PURE__ */ jsx(DataStoreActionsContext.Provider, { value: actionsValue, children: /* @__PURE__ */ jsx(DataStoreProvidersContext.Provider, { value: providers, children: /* @__PURE__ */ jsx(DataStoreDocumentsContext.Provider, { value: documents, children: /* @__PURE__ */ jsx(DataStoreContext.Provider, { value: metaValue, children: props.children }) }) }) }) })
1903
+ );
1904
+ }
1905
+ );
2001
1906
  var DataStoreProvider_default = DataStoreProvider;
2002
1907
 
2003
1908
  // src/useDataProvider.tsx
@@ -2266,7 +2171,6 @@ export {
2266
2171
  DataStoreProvider_default as DataStoreProvider,
2267
2172
  DataStoreProvidersContext,
2268
2173
  DataStoreStableContext,
2269
- SQLite2 as SQLite,
2270
2174
  dataStoreFilterObject,
2271
2175
  doesObjectMatchFilter,
2272
2176
  doesValueMatchFilter,