@mgarlik/datastore 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -1
- package/dist/chunk-7XDRKNJQ.js +14 -0
- package/dist/chunk-7XDRKNJQ.js.map +1 -0
- package/dist/expo-sqlite.cjs +210 -0
- package/dist/expo-sqlite.cjs.map +1 -0
- package/dist/expo-sqlite.d.cts +31 -0
- package/dist/expo-sqlite.d.ts +31 -0
- package/dist/expo-sqlite.js +166 -0
- package/dist/expo-sqlite.js.map +1 -0
- package/dist/index.cjs +142 -252
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +89 -74
- package/dist/index.d.ts +89 -74
- package/dist/index.js +146 -255
- package/dist/index.js.map +1 -1
- package/dist/storage-D_xv8gFb.d.cts +18 -0
- package/dist/storage-D_xv8gFb.d.ts +18 -0
- package/package.json +16 -6
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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 &&
|
|
703
|
+
} else if (isPersisting && SQLite) {
|
|
701
704
|
console.time("Persisted Data");
|
|
702
|
-
const qDatum = await
|
|
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) =>
|
|
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 &&
|
|
754
|
-
await saveData({ providerId: id, newData, SQLite
|
|
768
|
+
if (isPersisting && SQLite) {
|
|
769
|
+
await saveData({ providerId: id, newData, SQLite, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
|
|
755
770
|
}
|
|
756
771
|
}
|
|
757
772
|
}
|
|
@@ -816,7 +831,6 @@ var deleteData = async ({ dataSource, data }) => {
|
|
|
816
831
|
// src/DataStoreProvider.tsx
|
|
817
832
|
var import_socket = require("socket.io-client");
|
|
818
833
|
var import_axios2 = __toESM(require("axios"), 1);
|
|
819
|
-
var import_expo_localization = require("expo-localization");
|
|
820
834
|
|
|
821
835
|
// src/templates.ts
|
|
822
836
|
var _renderMyTemplate = (templateString, data) => {
|
|
@@ -847,162 +861,7 @@ function renderJSONTemplate(val, data) {
|
|
|
847
861
|
|
|
848
862
|
// src/DataStoreProvider.tsx
|
|
849
863
|
var import_isEqual = __toESM(require("lodash/isEqual.js"), 1);
|
|
850
|
-
|
|
851
|
-
// src/database.ts
|
|
852
|
-
var SQL = __toESM(require("expo-sqlite"), 1);
|
|
853
|
-
var SQLite = class {
|
|
854
|
-
constructor(name) {
|
|
855
|
-
this.db = null;
|
|
856
|
-
this.dbName = name || "modelaz.db";
|
|
857
|
-
this.initDB();
|
|
858
|
-
}
|
|
859
|
-
async initDB() {
|
|
860
|
-
if (!this.db) {
|
|
861
|
-
try {
|
|
862
|
-
systemLog("sql", "[initDB]");
|
|
863
|
-
this.db = await SQL.openDatabaseAsync(this.dbName);
|
|
864
|
-
await this.createTables({
|
|
865
|
-
documents: "id TEXT PRIMARY KEY, data TEXT, model TEXT, lastUpdate TEXT"
|
|
866
|
-
// logs: "time TEXT PRIMARY KEY, module TEXT, message TEXT",
|
|
867
|
-
});
|
|
868
|
-
} catch (e) {
|
|
869
|
-
console.log("INITDB ERROR", e);
|
|
870
|
-
throw e;
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
|
-
}
|
|
874
|
-
async getDb() {
|
|
875
|
-
if (!this.db) {
|
|
876
|
-
await this.initDB();
|
|
877
|
-
}
|
|
878
|
-
if (!this.db) {
|
|
879
|
-
throw new Error("Database is not initialized");
|
|
880
|
-
}
|
|
881
|
-
return this.db;
|
|
882
|
-
}
|
|
883
|
-
async createTable(table, tableSchema) {
|
|
884
|
-
try {
|
|
885
|
-
systemLog("sql", "[createTable]", table);
|
|
886
|
-
const db = await this.getDb();
|
|
887
|
-
const result = await db.runAsync(`CREATE TABLE IF NOT EXISTS '${table}' (${tableSchema})`);
|
|
888
|
-
systemLog("sql", "[createTable] result: ", JSON.stringify(result));
|
|
889
|
-
return result;
|
|
890
|
-
} catch (e) {
|
|
891
|
-
systemLogError("sql", "[createTable]", e);
|
|
892
|
-
throw e;
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
async createTables(tables) {
|
|
896
|
-
try {
|
|
897
|
-
systemLog("sql", "[createTables]", tables);
|
|
898
|
-
const query = Object.entries(tables).reduce((acc, [table, schema]) => {
|
|
899
|
-
return acc + `CREATE TABLE IF NOT EXISTS '${table}' (${schema});`;
|
|
900
|
-
}, "");
|
|
901
|
-
const db = await this.getDb();
|
|
902
|
-
const result = await db.runAsync(query);
|
|
903
|
-
systemLog("sql", "[createTables] result: ", JSON.stringify(result));
|
|
904
|
-
return result;
|
|
905
|
-
} catch (e) {
|
|
906
|
-
systemLogError("sql", "[createTable]", e);
|
|
907
|
-
throw e;
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
/**
|
|
911
|
-
* Smazani starych logu
|
|
912
|
-
*/
|
|
913
|
-
async deleteLogs() {
|
|
914
|
-
systemLog("sql", "[query] delete old Logs", this.db);
|
|
915
|
-
try {
|
|
916
|
-
const db = await this.getDb();
|
|
917
|
-
await db.runAsync(`DELETE FROM logs WHERE strftime('%s', 'now') - strftime('%s', time) > 3600`);
|
|
918
|
-
} catch (error) {
|
|
919
|
-
throw error;
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
async read(query, args) {
|
|
923
|
-
try {
|
|
924
|
-
systemLog("sql", "[read]", query);
|
|
925
|
-
const db = await this.getDb();
|
|
926
|
-
const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
|
|
927
|
-
systemLog("sql", "[read] result ", result.length);
|
|
928
|
-
return result;
|
|
929
|
-
} catch (e) {
|
|
930
|
-
systemLogError("sql", "[read]", e);
|
|
931
|
-
throw e;
|
|
932
|
-
}
|
|
933
|
-
}
|
|
934
|
-
async query(query, args) {
|
|
935
|
-
try {
|
|
936
|
-
systemLog("sql", "[query]->", query);
|
|
937
|
-
const db = await this.getDb();
|
|
938
|
-
const result = args === void 0 ? await db.getAllAsync(query) : await db.getAllAsync(query, args);
|
|
939
|
-
systemLog("sql", result);
|
|
940
|
-
return result;
|
|
941
|
-
} catch (error) {
|
|
942
|
-
console.error("INSERT ERROR", error);
|
|
943
|
-
systemLogError("sql", error);
|
|
944
|
-
throw error;
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
async dropTable(table) {
|
|
948
|
-
try {
|
|
949
|
-
systemLog("sql", "dropTable", table);
|
|
950
|
-
console.time("[SQL] dropTable");
|
|
951
|
-
const db = await this.getDb();
|
|
952
|
-
const result = await db.runAsync(`DROP TABLE ${table}`);
|
|
953
|
-
console.timeEnd("[SQL] dropTable");
|
|
954
|
-
return result;
|
|
955
|
-
} catch (error) {
|
|
956
|
-
throw error;
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
async emptyTable(table) {
|
|
960
|
-
try {
|
|
961
|
-
systemLog("sql", `[emptyTable]`, table);
|
|
962
|
-
const db = await this.getDb();
|
|
963
|
-
const result = await db.runAsync(`DELETE FROM '${table}'`);
|
|
964
|
-
systemLog("sql", "[emptyTable] result", result);
|
|
965
|
-
return result;
|
|
966
|
-
} catch (error) {
|
|
967
|
-
throw error;
|
|
968
|
-
}
|
|
969
|
-
}
|
|
970
|
-
async getTables() {
|
|
971
|
-
systemLog("sql", "Jdu zkusit nacist tabulky z ", JSON.stringify(this.dbName));
|
|
972
|
-
try {
|
|
973
|
-
const db = await this.getDb();
|
|
974
|
-
const result = await db.getAllAsync('SELECT name FROM sqlite_master WHERE type="table"');
|
|
975
|
-
systemLog("sql", "DB Result:", result);
|
|
976
|
-
return result;
|
|
977
|
-
} catch (error) {
|
|
978
|
-
throw error;
|
|
979
|
-
}
|
|
980
|
-
}
|
|
981
|
-
async resetDatabase() {
|
|
982
|
-
try {
|
|
983
|
-
systemLog("sql", "Reset database", this.dbName);
|
|
984
|
-
console.time("DELETING");
|
|
985
|
-
systemLog("sql", "Closing");
|
|
986
|
-
const db = await this.getDb();
|
|
987
|
-
await db.closeAsync();
|
|
988
|
-
systemLog("sql", "Deleting");
|
|
989
|
-
await SQL.deleteDatabaseAsync(this.dbName);
|
|
990
|
-
console.timeEnd("DELETING");
|
|
991
|
-
console.time("INIT");
|
|
992
|
-
this.db = null;
|
|
993
|
-
systemLog("sql", "Zacinam inicializovat databazi databaze");
|
|
994
|
-
await this.initDB();
|
|
995
|
-
systemLog("sql", "Inicializovana databaze");
|
|
996
|
-
console.timeEnd("INIT");
|
|
997
|
-
} catch (e) {
|
|
998
|
-
systemLogError("sql", "[resetDatabase]", e);
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
};
|
|
1002
|
-
|
|
1003
|
-
// src/DataStoreProvider.tsx
|
|
1004
864
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
1005
|
-
var SQLite2 = new SQLite("modelaz.db");
|
|
1006
865
|
var DataStoreContext = (0, import_react.createContext)({});
|
|
1007
866
|
var DataStoreDocumentsContext = (0, import_react.createContext)({});
|
|
1008
867
|
var DataStoreProvidersContext = (0, import_react.createContext)({});
|
|
@@ -1082,7 +941,23 @@ var buildDocumentTemplateParams = (model, documentId) => {
|
|
|
1082
941
|
[templateIdKey]: documentId
|
|
1083
942
|
};
|
|
1084
943
|
};
|
|
1085
|
-
var
|
|
944
|
+
var resolveLocale = () => {
|
|
945
|
+
if (typeof Intl !== "undefined" && typeof Intl.DateTimeFormat === "function") {
|
|
946
|
+
const locale = Intl.DateTimeFormat().resolvedOptions().locale;
|
|
947
|
+
if (locale) return locale;
|
|
948
|
+
}
|
|
949
|
+
if (typeof navigator !== "undefined") {
|
|
950
|
+
if (typeof navigator.language === "string" && navigator.language.length > 0) {
|
|
951
|
+
return navigator.language;
|
|
952
|
+
}
|
|
953
|
+
if (Array.isArray(navigator.languages) && navigator.languages.length > 0) {
|
|
954
|
+
const firstLocale = navigator.languages.find((value) => typeof value === "string" && value.length > 0);
|
|
955
|
+
if (firstLocale) return firstLocale;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
return void 0;
|
|
959
|
+
};
|
|
960
|
+
var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true, locale, storage = null, ...props }) => {
|
|
1086
961
|
const [isLive, setIsLive] = (0, import_react.useState)(false);
|
|
1087
962
|
const [isSynchronizing, setIsSynchronizing] = (0, import_react.useState)(true);
|
|
1088
963
|
const [sockets, setSockets] = (0, import_react.useState)({});
|
|
@@ -1096,11 +971,17 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1096
971
|
const [counterProviders, setCounterProviders] = (0, import_react.useState)({});
|
|
1097
972
|
const [counterDocuments, setCounterDocuments] = (0, import_react.useState)({});
|
|
1098
973
|
const didInitialLiveSyncRef = (0, import_react.useRef)(false);
|
|
974
|
+
const persistenceStorage = (0, import_react.useMemo)(
|
|
975
|
+
() => usePersistentStorage ? storage : null,
|
|
976
|
+
[storage, usePersistentStorage]
|
|
977
|
+
);
|
|
1099
978
|
(0, import_react.useEffect)(() => {
|
|
1100
979
|
if (!restServer) return;
|
|
1101
|
-
const
|
|
980
|
+
const resolvedLocale = locale || resolveLocale();
|
|
1102
981
|
import_axios2.default.defaults.baseURL = restServer;
|
|
1103
|
-
|
|
982
|
+
if (resolvedLocale) {
|
|
983
|
+
import_axios2.default.defaults.headers.common["Accept-Language"] = resolvedLocale;
|
|
984
|
+
}
|
|
1104
985
|
systemLog("dsp", "[INIT] Axios baseURL:", restServer);
|
|
1105
986
|
async function checkServer() {
|
|
1106
987
|
try {
|
|
@@ -1120,7 +1001,12 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1120
1001
|
}
|
|
1121
1002
|
}
|
|
1122
1003
|
checkServer();
|
|
1123
|
-
}, [restServer]);
|
|
1004
|
+
}, [locale, restServer]);
|
|
1005
|
+
(0, import_react.useEffect)(() => {
|
|
1006
|
+
if (usePersistentStorage && !storage) {
|
|
1007
|
+
systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
|
|
1008
|
+
}
|
|
1009
|
+
}, [persistenceStorage, storage, usePersistentStorage]);
|
|
1124
1010
|
const socketRoomHandlersRef = (0, import_react.useRef)({});
|
|
1125
1011
|
const socketActionHandlersRef = (0, import_react.useRef)({});
|
|
1126
1012
|
systemLog("dsp", "START");
|
|
@@ -1179,22 +1065,22 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1179
1065
|
data,
|
|
1180
1066
|
lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
|
|
1181
1067
|
}) => {
|
|
1182
|
-
if (!
|
|
1183
|
-
await
|
|
1068
|
+
if (!persistenceStorage) return;
|
|
1069
|
+
await persistenceStorage.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
|
|
1184
1070
|
documentId,
|
|
1185
1071
|
JSON.stringify(data),
|
|
1186
1072
|
model,
|
|
1187
1073
|
lastUpdate
|
|
1188
1074
|
]);
|
|
1189
1075
|
},
|
|
1190
|
-
[
|
|
1076
|
+
[persistenceStorage]
|
|
1191
1077
|
);
|
|
1192
1078
|
const removePersistedDocument = (0, import_react.useCallback)(
|
|
1193
1079
|
async (documentId) => {
|
|
1194
|
-
if (!
|
|
1195
|
-
await
|
|
1080
|
+
if (!persistenceStorage) return;
|
|
1081
|
+
await persistenceStorage.query("DELETE FROM documents WHERE id = ?", [documentId]);
|
|
1196
1082
|
},
|
|
1197
|
-
[
|
|
1083
|
+
[persistenceStorage]
|
|
1198
1084
|
);
|
|
1199
1085
|
const synchronizeDataStore = (0, import_react.useCallback)(async () => {
|
|
1200
1086
|
setIsSynchronizing(true);
|
|
@@ -1267,8 +1153,8 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1267
1153
|
}, [socket]);
|
|
1268
1154
|
const resetDataStore = (0, import_react.useCallback)(async () => {
|
|
1269
1155
|
console.time("[DSP] resetDataStore");
|
|
1270
|
-
if (
|
|
1271
|
-
await
|
|
1156
|
+
if (persistenceStorage?.emptyTable) {
|
|
1157
|
+
await persistenceStorage.emptyTable("documents");
|
|
1272
1158
|
}
|
|
1273
1159
|
setSockets({});
|
|
1274
1160
|
setProviders({});
|
|
@@ -1276,13 +1162,13 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1276
1162
|
setCounterProviders({});
|
|
1277
1163
|
setCounterDocuments({});
|
|
1278
1164
|
console.timeEnd("[DSP] resetDataStore");
|
|
1279
|
-
}, [
|
|
1165
|
+
}, [persistenceStorage]);
|
|
1280
1166
|
const resetProvider = (0, import_react.useCallback)(
|
|
1281
1167
|
async (provider) => {
|
|
1282
|
-
if (!
|
|
1283
|
-
await
|
|
1168
|
+
if (!persistenceStorage) return;
|
|
1169
|
+
await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
|
|
1284
1170
|
},
|
|
1285
|
-
[
|
|
1171
|
+
[persistenceStorage]
|
|
1286
1172
|
);
|
|
1287
1173
|
const initProvider = (0, import_react.useCallback)(
|
|
1288
1174
|
async (id, data) => {
|
|
@@ -1294,7 +1180,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1294
1180
|
}
|
|
1295
1181
|
return false;
|
|
1296
1182
|
},
|
|
1297
|
-
[presetProviders]
|
|
1183
|
+
[persistenceStorage, presetProviders, usePersistentStorage]
|
|
1298
1184
|
);
|
|
1299
1185
|
const dispatch = (0, import_react.useCallback)((action, data, callback) => {
|
|
1300
1186
|
systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
|
|
@@ -1460,12 +1346,12 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1460
1346
|
};
|
|
1461
1347
|
return newP;
|
|
1462
1348
|
});
|
|
1463
|
-
if (modelProvider?.isPersisting &&
|
|
1349
|
+
if (modelProvider?.isPersisting && persistenceStorage) {
|
|
1464
1350
|
await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
|
|
1465
1351
|
await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
|
|
1466
1352
|
}
|
|
1467
1353
|
},
|
|
1468
|
-
[providers, setDocuments, setProviders, persistDocument, removePersistedDocument]
|
|
1354
|
+
[providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
|
|
1469
1355
|
);
|
|
1470
1356
|
const updateDocument = (0, import_react.useCallback)(
|
|
1471
1357
|
async ({ documentId, model, fields, data: pData }) => {
|
|
@@ -1482,9 +1368,9 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1482
1368
|
const dataFromSource = await getData({
|
|
1483
1369
|
id: dP.id,
|
|
1484
1370
|
dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
|
|
1485
|
-
isPersisting: !!dP.isPersisting &&
|
|
1371
|
+
isPersisting: !!dP.isPersisting && !!persistenceStorage,
|
|
1486
1372
|
schema: dP.schema,
|
|
1487
|
-
SQLite:
|
|
1373
|
+
SQLite: persistenceStorage || void 0
|
|
1488
1374
|
});
|
|
1489
1375
|
systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
|
|
1490
1376
|
data = dataFromSource;
|
|
@@ -1596,7 +1482,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1596
1482
|
} else {
|
|
1597
1483
|
systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
|
|
1598
1484
|
}
|
|
1599
|
-
if (providers[model]?.isPersisting &&
|
|
1485
|
+
if (providers[model]?.isPersisting && persistenceStorage) {
|
|
1600
1486
|
if (listeningProviders > 0) {
|
|
1601
1487
|
await persistDocument({
|
|
1602
1488
|
documentId,
|
|
@@ -1609,7 +1495,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1609
1495
|
}
|
|
1610
1496
|
}
|
|
1611
1497
|
},
|
|
1612
|
-
[documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument]
|
|
1498
|
+
[documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
|
|
1613
1499
|
);
|
|
1614
1500
|
const updateDataStore = (0, import_react.useCallback)(
|
|
1615
1501
|
async ({
|
|
@@ -1683,7 +1569,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1683
1569
|
}
|
|
1684
1570
|
});
|
|
1685
1571
|
if (providerListenersCount > 0) {
|
|
1686
|
-
if (providers[model]?.isPersisting &&
|
|
1572
|
+
if (providers[model]?.isPersisting && persistenceStorage) {
|
|
1687
1573
|
await persistDocument({ documentId, model, data: newDocument });
|
|
1688
1574
|
}
|
|
1689
1575
|
setCounterDocuments((prev) => {
|
|
@@ -1703,7 +1589,7 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1703
1589
|
return { id: documentId, document: newDocument };
|
|
1704
1590
|
} else return false;
|
|
1705
1591
|
},
|
|
1706
|
-
[providers, setProviders, setCounterDocuments, setDocuments, persistDocument]
|
|
1592
|
+
[providers, setProviders, setCounterDocuments, setDocuments, persistDocument, persistenceStorage]
|
|
1707
1593
|
);
|
|
1708
1594
|
const deleteDocument = (0, import_react.useCallback)(
|
|
1709
1595
|
async ({ documentId }) => {
|
|
@@ -1907,66 +1793,71 @@ var DataStoreProvider = ({ socketServer, restServer, usePersistentStorage = true
|
|
|
1907
1793
|
});
|
|
1908
1794
|
result = providers[id];
|
|
1909
1795
|
} else {
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
{
|
|
1796
|
+
try {
|
|
1797
|
+
const dataFromSource = await getData({
|
|
1798
|
+
schema: newItem.schema,
|
|
1799
|
+
dataSource: newItem.dataSource || {},
|
|
1800
|
+
id: newItem.id,
|
|
1801
|
+
isPersisting: !!newItem.isPersisting && !!persistenceStorage,
|
|
1802
|
+
SQLite: persistenceStorage || void 0
|
|
1803
|
+
});
|
|
1804
|
+
console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
|
|
1805
|
+
var dataList = [];
|
|
1806
|
+
var items = {};
|
|
1807
|
+
const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
|
|
1808
|
+
dataS.forEach((item) => {
|
|
1809
|
+
if (!item) return;
|
|
1810
|
+
const { id: itId, ...data } = item;
|
|
1811
|
+
const normalizedId = itId || uuid();
|
|
1812
|
+
dataList.push(normalizedId);
|
|
1813
|
+
if (documents[normalizedId]) {
|
|
1814
|
+
items[normalizedId] = {
|
|
1815
|
+
...documents[normalizedId],
|
|
1816
|
+
...data
|
|
1817
|
+
};
|
|
1818
|
+
} else {
|
|
1819
|
+
items[normalizedId] = data;
|
|
1820
|
+
}
|
|
1821
|
+
});
|
|
1822
|
+
setCounterDocuments((prev) => {
|
|
1937
1823
|
const newC = { ...prev };
|
|
1938
|
-
dataList.forEach((
|
|
1939
|
-
if (newC[
|
|
1940
|
-
newC[
|
|
1824
|
+
dataList.forEach((itemId) => {
|
|
1825
|
+
if (newC[itemId]) {
|
|
1826
|
+
newC[itemId] = newC[itemId] + 1;
|
|
1941
1827
|
} else {
|
|
1942
|
-
newC[
|
|
1828
|
+
newC[itemId] = 1;
|
|
1943
1829
|
}
|
|
1944
1830
|
});
|
|
1945
1831
|
return newC;
|
|
1832
|
+
});
|
|
1833
|
+
if (Object.keys(items).length > 0) {
|
|
1834
|
+
setDocuments((prev) => ({ ...prev, ...items }));
|
|
1946
1835
|
}
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1836
|
+
result = {
|
|
1837
|
+
...provider,
|
|
1838
|
+
data: dataList,
|
|
1839
|
+
lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
|
|
1840
|
+
};
|
|
1841
|
+
setProviders((prev) => ({
|
|
1842
|
+
...prev,
|
|
1843
|
+
[id]: result
|
|
1844
|
+
}));
|
|
1845
|
+
setCounterProviders((prev) => ({
|
|
1846
|
+
...prev,
|
|
1847
|
+
[id]: 1
|
|
1848
|
+
}));
|
|
1849
|
+
if (provider.dataSource?.socketListeners) {
|
|
1850
|
+
registerProviderSockets(provider.dataSource.socketListeners);
|
|
1851
|
+
}
|
|
1852
|
+
console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
|
|
1853
|
+
} catch (error) {
|
|
1854
|
+
console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
|
|
1855
|
+
throw error;
|
|
1856
|
+
}
|
|
1966
1857
|
}
|
|
1967
1858
|
return result;
|
|
1968
1859
|
},
|
|
1969
|
-
[providers,
|
|
1860
|
+
[providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
|
|
1970
1861
|
);
|
|
1971
1862
|
const unregisterProvider = (0, import_react.useCallback)(
|
|
1972
1863
|
async (itemId) => {
|
|
@@ -2347,7 +2238,6 @@ var COLOR_DS = COLOR_MAGENTA;
|
|
|
2347
2238
|
DataStoreProvider,
|
|
2348
2239
|
DataStoreProvidersContext,
|
|
2349
2240
|
DataStoreStableContext,
|
|
2350
|
-
SQLite,
|
|
2351
2241
|
dataStoreFilterObject,
|
|
2352
2242
|
doesObjectMatchFilter,
|
|
2353
2243
|
doesValueMatchFilter,
|