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