@mgarlik/datastore 0.1.0

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.
@@ -0,0 +1,413 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React, { ReactNode } from 'react';
3
+ import * as SQL from 'expo-sqlite';
4
+
5
+ declare class SQLite$1 {
6
+ dbName: string;
7
+ private db;
8
+ constructor(name?: string);
9
+ private initDB;
10
+ private getDb;
11
+ private createTable;
12
+ private createTables;
13
+ /**
14
+ * Smazani starych logu
15
+ */
16
+ private deleteLogs;
17
+ read<T>(query: string, args?: SQL.SQLiteBindParams): Promise<T[]>;
18
+ query<T>(query: string, args?: SQL.SQLiteBindParams): Promise<T[]>;
19
+ dropTable(table: string): Promise<SQL.SQLiteRunResult>;
20
+ emptyTable(table: string): Promise<SQL.SQLiteRunResult>;
21
+ getTables(): Promise<unknown[]>;
22
+ resetDatabase(): Promise<void>;
23
+ }
24
+
25
+ type ProviderTypes = string;
26
+ type ProviderDataSource = {
27
+ uri?: string;
28
+ crud?: {
29
+ create?: string;
30
+ read?: string;
31
+ update?: string;
32
+ delete?: string;
33
+ updates?: {
34
+ [key: string]: string;
35
+ };
36
+ };
37
+ data?: any[];
38
+ addData?: Record<string, any>[];
39
+ readAllFields?: boolean;
40
+ filter?: Record<string, any>;
41
+ socketListeners?: string[];
42
+ params?: Record<string, any>;
43
+ select?: any;
44
+ file?: string;
45
+ };
46
+ type DataProvider = {
47
+ id: ProviderTypes;
48
+ dataSource?: ProviderDataSource;
49
+ isPermanent?: boolean;
50
+ isPersisting?: boolean;
51
+ depend?: string;
52
+ autoCreate?: boolean;
53
+ schema?: Record<string, any>;
54
+ editor?: Record<string, any>;
55
+ actions?: string[];
56
+ };
57
+ type DataProviders = Record<string, DataProvider>;
58
+
59
+ type Uuid = string;
60
+ type JSONType = string | number | boolean | {
61
+ [x: string]: JSONType;
62
+ } | Array<JSONType>;
63
+ type SocketServerType = {
64
+ url: string;
65
+ params: Record<string, any>;
66
+ };
67
+ type SocketItem = {
68
+ listeners: number;
69
+ data: any[];
70
+ };
71
+ type DispatcherActionType = "registerProvider" | "unregisterProvider" | "updateDataStore" | "createDocument" | "updateDocument" | "updateDocuments" | "removeItem" | "deleteDocument" | "createProviderItem" | "deleteProviderItem";
72
+ type DispatcherType = {
73
+ isBussy: Boolean;
74
+ actions: {
75
+ action: DispatcherActionType;
76
+ data: any;
77
+ callback?: (data: JSONType) => void;
78
+ }[];
79
+ };
80
+ type SchemaTypeItem = {
81
+ /**
82
+ * Nazev zdrojoveho pole dat
83
+ */
84
+ source?: string;
85
+ /**
86
+ * povolene hodnoty
87
+ */
88
+ enum?: string[];
89
+ /**
90
+ * Je pole vyzadovano ?
91
+ */
92
+ required?: boolean;
93
+ /**
94
+ * Je pole vyditelne ?
95
+ */
96
+ visibility?: "visible" | "hidden";
97
+ /**
98
+ * Lze pole editovat ?
99
+ */
100
+ editable?: boolean;
101
+ type?: "string" | "number" | "boolean";
102
+ form?: "select" | "textInput" | "dateTime" | "radio";
103
+ mode?: "screen";
104
+ title?: string;
105
+ placeholder?: string;
106
+ description?: string;
107
+ dataSource?: {
108
+ dataProvider: string;
109
+ };
110
+ itemRules?: string;
111
+ options?: {
112
+ dataProvider: string;
113
+ };
114
+ validations?: {
115
+ required?: string;
116
+ pattern?: JSONType;
117
+ };
118
+ };
119
+ type SchemaType = {
120
+ [key: string]: SchemaTypeItem;
121
+ };
122
+ /**
123
+ * Data Provider Filter
124
+ */
125
+ type filterItemType = {
126
+ id: Uuid;
127
+ priority: number;
128
+ name: string;
129
+ value: string;
130
+ count?: number;
131
+ };
132
+ type FilterType = {
133
+ id: Uuid;
134
+ name: string;
135
+ priority: number;
136
+ values: Partial<filterItemType>[];
137
+ type: string;
138
+ };
139
+ /**
140
+ *
141
+ */
142
+ type ProductFiltersType = {
143
+ /** Text input box ? */
144
+ name?: string;
145
+ /** Objekt filterovacich parametru {[filterId]: valuesId[]} */
146
+ filteringParameters: {
147
+ [key: Uuid]: Uuid[];
148
+ };
149
+ };
150
+ interface DataStoreProps {
151
+ providers: DataProviders;
152
+ /** Adresa REST/CRUD serveru */
153
+ restServer: string;
154
+ socketServer: SocketServerType;
155
+ /** false - provider nebude cist/ukladat data do persistentniho uloziste */
156
+ usePersistentStorage?: boolean;
157
+ children: ReactNode;
158
+ }
159
+ interface DataStore {
160
+ providers: Record<string, any>;
161
+ documents: Record<string, any>;
162
+ updateDocuments: (data: {
163
+ model: string;
164
+ documents: any;
165
+ mode?: "update" | "replace";
166
+ }) => Promise<void>;
167
+ dispatch: (action: DispatcherActionType, data: any, callback?: (data: JSONType) => void) => void;
168
+ initProvider: (id: string, data?: any) => Promise<any>;
169
+ /** Smaze data providera z databaze */
170
+ resetProvider: (id: ProviderTypes) => Promise<void>;
171
+ registerProvider: (provider: DataProvider) => Promise<any>;
172
+ unregisterProvider: (id: string) => Promise<void>;
173
+ updateProviderListeners: (id: string, val: number) => Promise<void>;
174
+ resetDataStore: () => Promise<void>;
175
+ counterProviders: Record<string, number>;
176
+ counterDocuments: Record<string, number>;
177
+ presetProviders: Record<ProviderTypes, DataProvider>;
178
+ sockets: Record<string, SocketItem>;
179
+ isLive: boolean;
180
+ isSynchronizing: boolean;
181
+ startSockets: () => void;
182
+ stopSockets: () => void;
183
+ registerProviderSockets: (sockets: string | string[]) => void;
184
+ unregisterProviderSockets: (sockets: string | string[]) => void;
185
+ }
186
+
187
+ declare const SQLite: SQLite$1;
188
+ type DataStoreMetaType = Pick<DataStore, "isLive" | "isSynchronizing" | "sockets" | "counterProviders" | "counterDocuments">;
189
+ type DataStoreActionsType = Pick<DataStore, "dispatch" | "initProvider" | "resetProvider" | "registerProvider" | "unregisterProvider" | "updateProviderListeners" | "resetDataStore" | "startSockets" | "stopSockets" | "registerProviderSockets" | "unregisterProviderSockets" | "updateDocuments" | "presetProviders">;
190
+ type DataStoreStableType = {
191
+ dispatch: DataStore["dispatch"];
192
+ presetProviders: DataStore["presetProviders"];
193
+ updateProviderListeners: DataStore["updateProviderListeners"];
194
+ subscribeToProvider: (providerId: string, callback: () => void) => () => void;
195
+ getProviderLastUpdate: (providerId: string) => string | null;
196
+ getExternalDocuments: () => Record<string, any>;
197
+ getExternalProviders: () => Record<string, any>;
198
+ };
199
+ /** Meta (isLive, isSynchronizing, sockets, counters) */
200
+ declare const DataStoreContext: React.Context<DataStoreMetaType>;
201
+ /** Raw documents map */
202
+ declare const DataStoreDocumentsContext: React.Context<Record<string, any>>;
203
+ /** Raw providers map */
204
+ declare const DataStoreProvidersContext: React.Context<Record<string, any>>;
205
+ /** Stable action callbacks */
206
+ declare const DataStoreActionsContext: React.Context<DataStoreActionsType>;
207
+ /** Stable datastore API for provider-scoped subscriptions */
208
+ declare const DataStoreStableContext: React.Context<DataStoreStableType>;
209
+ /** Returns all stable action callbacks. Components using this hook never re-render due to document changes. */
210
+ declare const useDataStoreActions: () => DataStoreActionsType;
211
+ /**
212
+ *
213
+ * @param filter - objekt filteru
214
+ * @param resultType - "object"(default) | "array"
215
+ * @returns {documents, filter}
216
+ */
217
+ declare const useFilteredDocuments: (filter: Record<string, any>) => {
218
+ documents: any[] | Record<string, any>;
219
+ setFilter: React.Dispatch<React.SetStateAction<Record<string, any>>>;
220
+ };
221
+ /**
222
+ * Vrati objekt vsech dokumentu
223
+ *
224
+ * @returns {} documentu
225
+ */
226
+ declare const useDocuments: () => {
227
+ [key: string]: any;
228
+ };
229
+ /**
230
+ * Vrati object of documents daneho providera. Dokumenty lze vyfiltrovat
231
+ *
232
+ * @param {*} provider
233
+ * @param {*} filter
234
+ * @returns
235
+ */
236
+ declare const useProviderDocuments: (provider: ProviderTypes, settings?: {
237
+ filter?: Record<string, any>;
238
+ documentId?: Uuid;
239
+ document?: Record<string, any>;
240
+ }) => {
241
+ [key: string]: any;
242
+ };
243
+ declare const useProvider: (val: ProviderTypes) => any;
244
+ /** Full DataStore — merges all sub-contexts. Components using this re-render on any state change. */
245
+ declare const useDataStore: () => DataStore;
246
+ declare const DataStoreProvider: ({ socketServer, restServer, usePersistentStorage, ...props }: DataStoreProps) => react_jsx_runtime.JSX.Element;
247
+
248
+ /**
249
+ *
250
+ * @param id ID providera z ProviderTypes
251
+ * @param params parametry pro doplneni URI adresy z dataProviders
252
+ * @param dataFilter Filter dat providera
253
+ * @param settings documentId ID dokumentu pouziteho k prepocitani dokumentu providera, document: JSON dokument k prepocitani dokumentu providera
254
+ * @returns void
255
+ */
256
+ declare const useDataProvider: (
257
+ /**
258
+ * Provider id nebo objekt data {key: value}
259
+ */
260
+ id: ProviderTypes | {
261
+ [key: string]: any;
262
+ },
263
+ /**
264
+ * Parametry pro prerenderovani providera (profiles/<%= profileId %>)
265
+ */
266
+ params?: {
267
+ [key: string]: string;
268
+ } | null,
269
+ /**
270
+ * Filtrovani dat
271
+ */
272
+ dataFilter?: JSONType | null,
273
+ /**
274
+ * Nejake nastaveni
275
+ */
276
+ settings?: {
277
+ documentId?: string;
278
+ document?: JSONType;
279
+ }) => {
280
+ documents: any;
281
+ schema: any;
282
+ update: (val: JSONType) => void;
283
+ updateItem: ({ params, data, variant, documentId }: {
284
+ params?: JSONType;
285
+ data?: JSONType;
286
+ variant?: string;
287
+ documentId?: string;
288
+ }, callback?: (resp: JSONType) => void) => void;
289
+ deleteItem: ({ params, data }: {
290
+ params?: JSONType;
291
+ data?: JSONType;
292
+ }, callback?: (resp: JSONType) => void) => void;
293
+ createItem: (data: JSONType, callback?: () => void) => void;
294
+ };
295
+
296
+ /**
297
+ * blabla
298
+ */
299
+ interface UseDocumentParams {
300
+ /**
301
+ * UUID dokumentu
302
+ */
303
+ documentId: Uuid;
304
+ model?: string;
305
+ /**
306
+ * nazev Providera, nebo objekt definice Providera
307
+ */
308
+ provider?: string | {};
309
+ /**
310
+ * Polozky ktere chceme ziskat. Ty co nejsou ulozene se pokusi stahnout z modelu nebo podle definice Providera a doplnit. Pokud nejsou nastavena zadne polozky, tak vrati to co ma v zarizeni.
311
+ */
312
+ fields?: string[];
313
+ /**
314
+ * true|false - pozadujeme kompletni dokument.
315
+ */
316
+ allFields?: boolean;
317
+ }
318
+ interface UseDocumentResult {
319
+ /**
320
+ * Vraci neco
321
+ */
322
+ document: Record<string, any>;
323
+ }
324
+ /**
325
+ * Provider dokumentu z DataProvider
326
+ *
327
+ * Example: useDocument({documentId: "123-123123-123123-12", model: "products", fields: ["name", "image"]})
328
+ *
329
+ * @param documentId - ID dokumentu
330
+ * @param model - nazev modelu
331
+ * @param provider - nazev providera
332
+ * @param fields - seznam polozek dokumentu ktere chceme ziskat
333
+ * @param allFields - kompletni dokument
334
+ *
335
+ * @returns - vraci dokument
336
+ */
337
+ declare const useDocument: ({ documentId, model, provider, fields, allFields }: UseDocumentParams) => UseDocumentResult;
338
+
339
+ declare const useProviderActions: (providerId: Uuid, data?: JSONType) => {
340
+ schema: any;
341
+ update: (val: JSONType) => void;
342
+ updateItem: ({ params, data, variant, documentId }: {
343
+ params?: JSONType;
344
+ data?: any;
345
+ variant?: string;
346
+ documentId?: Uuid;
347
+ }, callback?: (value: JSONType) => void) => void;
348
+ deleteItem: ({ params, data }: {
349
+ params: JSONType;
350
+ data?: JSONType;
351
+ }, callback?: () => void) => void;
352
+ createItem: (data: JSONType, callback?: (value: JSONType) => void) => void;
353
+ };
354
+
355
+ declare function recalculateObjectWithDocument(obj: any, document: any): any;
356
+ declare function getValueByRules(data: any, document: any, { mode, ruleId }: {
357
+ mode?: any;
358
+ ruleId?: any;
359
+ }): any;
360
+ declare function doesValueMatchFilter(objVal: any, value: any, documents?: any): any;
361
+ declare function doesObjectMatchFilter(obj: any, filter: any, documents?: any): any;
362
+ /**
363
+ *
364
+ * Filteruje pole dokumentu podle filteru
365
+ *
366
+ * @param {*} documents Pole dokumentu
367
+ * @param {*} filter object filteru
368
+ * @returns vraci pole vyfilterovanych dokumentu
369
+ */
370
+ declare const filterDocuments: <T>(documents: T[] | T, filter: any) => any;
371
+ declare const filterDocumentsAsync: <T>(documents: T[] | T, filter: any) => Promise<any>;
372
+ declare const dataStoreFilterObject: (obj: any, filter: any) => any;
373
+ /**
374
+ *
375
+ * @returns UUID v4
376
+ *
377
+ * Vygeneruje unikatni UUID v4
378
+ */
379
+ declare function uuid(): string;
380
+ declare function isUuid(val: string): boolean;
381
+
382
+ /**
383
+ * Black: \x1b[30m
384
+ * Red: \x1b[31m
385
+ * Green: \x1b[32m
386
+ *Yellow: \x1b[33m
387
+ * Blue: \x1b[34m
388
+ * Magenta: \x1b[35m
389
+ * Cyan: \x1b[36m
390
+ * White: \x1b[37m
391
+ */
392
+ declare const COLOR_WHITE = "\u001B[37m%s\u001B[0m";
393
+ declare const COLOR_MAGENTA = "\u001B[35m%s\u001B[0m";
394
+ declare const COLOR_BLUE = "\u001B[34m%s\u001B[0m";
395
+ declare const COLOR_CYAN = "\u001B[36m%s\u001B[0m";
396
+ declare const COLOR_GREEN = "\u001B[32m%s\u001B[0m";
397
+ declare const COLOR_RED = "\u001B[31m%s\u001B[0m";
398
+ declare const COLOR_ERROR = "\u001B[31m%s\u001B[0m";
399
+ declare const COLOR_YELLOW = "\u001B[33m%s\u001B[0m";
400
+ declare const COLOR_ORANGE = "\u001B[38;5;208m%s\u001B[0m";
401
+ declare const COLOR_WARNING = "\u001B[33m%s\u001B[0m";
402
+ declare const COLOR_PROVIDER = "\u001B[35m%s\u001B[0m";
403
+ declare const COLOR_CONTEXT = "\u001B[35m%s\u001B[0m";
404
+ declare const COLOR_RENDER = "\u001B[34m%s\u001B[0m";
405
+ declare const COLOR_FUNCTION = "\u001B[36m%s\u001B[0m";
406
+ declare const COLOR_SCREEN = "\u001B[32m%s\u001B[0m";
407
+ declare const COLOR_SOCKET = "\u001B[36m%s\u001B[0m";
408
+ declare const COLOR_SOCKETS = "\u001B[33m%s\u001B[0m";
409
+ declare const COLOR_AXIOS = "\u001B[33m%s\u001B[0m";
410
+ declare const COLOR_APP = "\u001B[34m%s\u001B[0m";
411
+ declare const COLOR_DS = "\u001B[35m%s\u001B[0m";
412
+
413
+ export { COLOR_APP, COLOR_AXIOS, COLOR_BLUE, COLOR_CONTEXT, COLOR_CYAN, COLOR_DS, COLOR_ERROR, COLOR_FUNCTION, COLOR_GREEN, COLOR_MAGENTA, COLOR_ORANGE, COLOR_PROVIDER, COLOR_RED, COLOR_RENDER, COLOR_SCREEN, COLOR_SOCKET, COLOR_SOCKETS, COLOR_WARNING, COLOR_WHITE, COLOR_YELLOW, type DataProvider, type DataProviders, type DataStore, DataStoreActionsContext, DataStoreContext, DataStoreDocumentsContext, type DataStoreProps, DataStoreProvider, DataStoreProvidersContext, DataStoreStableContext, type DispatcherActionType, type DispatcherType, type FilterType, type JSONType, type ProductFiltersType, type ProviderDataSource, type ProviderTypes, SQLite, type SchemaType, type SocketItem, type SocketServerType, type Uuid, dataStoreFilterObject, doesObjectMatchFilter, doesValueMatchFilter, filterDocuments, filterDocumentsAsync, type filterItemType, getValueByRules, isUuid, recalculateObjectWithDocument, useDataProvider, useDataStore, useDataStoreActions, useDocument, useDocuments, useFilteredDocuments, useProvider, useProviderActions, useProviderDocuments, uuid };