@legendapp/state 2.2.0-next.75 → 2.2.0-next.76

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.
Files changed (48) hide show
  1. package/helpers/time.d.ts +2 -2
  2. package/index.js +7 -5
  3. package/index.js.map +1 -1
  4. package/index.mjs +7 -5
  5. package/index.mjs.map +1 -1
  6. package/package.json +11 -1
  7. package/persist.js +82 -87
  8. package/persist.js.map +1 -1
  9. package/persist.mjs +82 -87
  10. package/persist.mjs.map +1 -1
  11. package/src/batching.ts +2 -0
  12. package/src/computed.ts +4 -2
  13. package/src/globals.ts +1 -1
  14. package/src/helpers.ts +1 -1
  15. package/src/history/undoRedo.ts +111 -0
  16. package/src/observableInterfaces.ts +6 -5
  17. package/src/observe.ts +1 -1
  18. package/src/sync/activateSyncedNode.ts +2 -20
  19. package/src/sync/syncObservable.ts +88 -73
  20. package/src/sync-plugins/crud.ts +109 -98
  21. package/src/sync-plugins/fetch.ts +56 -26
  22. package/src/sync-plugins/keel.ts +447 -0
  23. package/src/sync-plugins/supabase.ts +225 -0
  24. package/src/syncTypes.ts +10 -4
  25. package/sync-plugins/crud.d.ts +27 -26
  26. package/sync-plugins/crud.js +50 -42
  27. package/sync-plugins/crud.js.map +1 -1
  28. package/sync-plugins/crud.mjs +50 -42
  29. package/sync-plugins/crud.mjs.map +1 -1
  30. package/sync-plugins/fetch.d.ts +8 -7
  31. package/sync-plugins/fetch.js +33 -11
  32. package/sync-plugins/fetch.js.map +1 -1
  33. package/sync-plugins/fetch.mjs +34 -12
  34. package/sync-plugins/fetch.mjs.map +1 -1
  35. package/sync-plugins/keel.d.ts +91 -0
  36. package/sync-plugins/keel.js +278 -0
  37. package/sync-plugins/keel.js.map +1 -0
  38. package/sync-plugins/keel.mjs +274 -0
  39. package/sync-plugins/keel.mjs.map +1 -0
  40. package/sync-plugins/supabase.d.ts +32 -0
  41. package/sync-plugins/supabase.js +134 -0
  42. package/sync-plugins/supabase.js.map +1 -0
  43. package/sync-plugins/supabase.mjs +131 -0
  44. package/sync-plugins/supabase.mjs.map +1 -0
  45. package/sync.js +82 -87
  46. package/sync.js.map +1 -1
  47. package/sync.mjs +83 -88
  48. package/sync.mjs.map +1 -1
@@ -0,0 +1,278 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+ var crud = require('@legendapp/state/sync-plugins/crud');
5
+
6
+ const { clone } = state.internal;
7
+ const KeelKeys = ['createdAt', 'updatedAt'];
8
+ let _client;
9
+ let _asOption;
10
+ let _realtimePlugin;
11
+ let _onError;
12
+ const modifiedClients = new WeakSet();
13
+ const isEnabled$ = state.observable(true);
14
+ async function ensureAuthToken() {
15
+ await state.when(isEnabled$.get());
16
+ let isAuthed = await _client.auth.isAuthenticated();
17
+ if (!isAuthed) {
18
+ isAuthed = await _client.auth.refresh();
19
+ }
20
+ return isAuthed;
21
+ }
22
+ async function handleApiError(error, retry) {
23
+ if (error.type === 'unauthorized' || error.type === 'forbidden') {
24
+ console.warn('Keel token expired, refreshing...');
25
+ await ensureAuthToken();
26
+ // Retry
27
+ retry === null || retry === void 0 ? void 0 : retry();
28
+ }
29
+ }
30
+ function convertObjectToCreate(item) {
31
+ const cloned = clone(item);
32
+ Object.keys(cloned).forEach((key) => {
33
+ if (key.endsWith('Id')) {
34
+ if (cloned[key]) {
35
+ cloned[key.slice(0, -2)] = { id: cloned[key] };
36
+ }
37
+ delete cloned[key];
38
+ }
39
+ });
40
+ delete cloned.createdAt;
41
+ delete cloned.updatedAt;
42
+ return cloned;
43
+ }
44
+ function configureSyncedKeel({ realtimePlugin, as: asOption, client, enabled, onError, }) {
45
+ if (asOption) {
46
+ _asOption = asOption;
47
+ }
48
+ if (client) {
49
+ _client = client;
50
+ }
51
+ if (enabled !== undefined) {
52
+ isEnabled$.set(enabled);
53
+ }
54
+ if (realtimePlugin) {
55
+ _realtimePlugin = realtimePlugin;
56
+ if (client && !modifiedClients.has(client)) {
57
+ modifiedClients.add(client);
58
+ const queries = client.api.queries;
59
+ Object.keys(queries).forEach((key) => {
60
+ const oldFn = queries[key];
61
+ queries[key] = (i) => {
62
+ const subscribe = key.startsWith('list') &&
63
+ i.where &&
64
+ (({ refresh }) => {
65
+ const realtimeChild = Object.values(i.where)
66
+ .filter((value) => value && typeof value !== 'object')
67
+ .join('/');
68
+ if (realtimeChild) {
69
+ const realtimeKey = `${key}/${realtimeChild}`;
70
+ realtimePlugin.subscribe(realtimeKey, refresh);
71
+ return realtimeKey;
72
+ }
73
+ });
74
+ return oldFn(i).then((ret) => {
75
+ if (subscribe) {
76
+ ret.subscribe = subscribe;
77
+ }
78
+ return ret;
79
+ });
80
+ };
81
+ });
82
+ }
83
+ }
84
+ if (onError) {
85
+ _onError = onError;
86
+ }
87
+ }
88
+ const NumPerPage = 200;
89
+ async function getAllPages(listFn, params) {
90
+ const allData = [];
91
+ let pageInfo = undefined;
92
+ let subscribe_;
93
+ const { maxResults } = params;
94
+ do {
95
+ const first = maxResults ? Math.min(maxResults - allData.length, NumPerPage) : NumPerPage;
96
+ if (first < 1) {
97
+ break;
98
+ }
99
+ const pageEndCursor = pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.endCursor;
100
+ const paramsWithCursor = pageEndCursor
101
+ ? { first, ...params, after: pageEndCursor }
102
+ : { first, ...params };
103
+ pageInfo = undefined;
104
+ const ret = await listFn(paramsWithCursor);
105
+ if (ret) {
106
+ // @ts-expect-error TODOKEEL
107
+ const { data, error, subscribe } = ret;
108
+ if (subscribe) {
109
+ subscribe_ = subscribe;
110
+ }
111
+ if (error) {
112
+ await handleApiError(error);
113
+ throw new Error(error.message);
114
+ }
115
+ else if (data) {
116
+ pageInfo = data.pageInfo;
117
+ allData.push(...data.results);
118
+ }
119
+ }
120
+ } while (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.hasNextPage);
121
+ return { results: allData, subscribe: subscribe_ };
122
+ }
123
+ function syncedKeel(props) {
124
+ const { get: getParam, list: listParam, create: createParam, update: updateParam, delete: deleteParam, maxResults, initial, waitFor, waitForSet, ...rest } = props;
125
+ let asType = props.as;
126
+ if (!asType) {
127
+ asType = (getParam ? 'first' : _asOption || undefined);
128
+ }
129
+ let realtimeKeyList = undefined;
130
+ let realtimeKeyGet = undefined;
131
+ const fieldCreatedAt = 'createdAt';
132
+ const fieldUpdatedAt = 'updatedAt';
133
+ const list = listParam
134
+ ? async (listParams) => {
135
+ const { lastSync, refresh } = listParams;
136
+ const queryBySync = !!lastSync;
137
+ const isRawRequest = (listParam || getParam).toString().includes('rawRequest');
138
+ const where = queryBySync ? { updatedAt: { after: new Date(+new Date(lastSync) + 1) } } : {};
139
+ const params = isRawRequest ? { where, maxResults } : { where, refresh, maxResults };
140
+ // TODO: Error?
141
+ const { results, subscribe } = await getAllPages(listParam, params);
142
+ if (!realtimeKeyList) {
143
+ realtimeKeyList = subscribe === null || subscribe === void 0 ? void 0 : subscribe({ refresh });
144
+ }
145
+ return results;
146
+ }
147
+ : undefined;
148
+ const get = getParam
149
+ ? async (getParams) => {
150
+ const { refresh } = getParams;
151
+ // @ts-expect-error TODOKEEL
152
+ const { data, error, subscribe } = await getParam({ refresh });
153
+ if (!realtimeKeyGet) {
154
+ realtimeKeyGet = subscribe === null || subscribe === void 0 ? void 0 : subscribe({ refresh });
155
+ }
156
+ if (error) {
157
+ throw new Error(error.message);
158
+ }
159
+ else {
160
+ return data;
161
+ }
162
+ }
163
+ : undefined;
164
+ const onSaved = (data, input, isCreate) => {
165
+ if (data) {
166
+ const savedOut = {};
167
+ if (isCreate) {
168
+ // Update with any fields that were undefined when creating
169
+ Object.keys(data).forEach((key) => {
170
+ if (input[key] === undefined) {
171
+ savedOut[key] = data[key];
172
+ }
173
+ });
174
+ }
175
+ else {
176
+ // Update with any fields ending in createdAt or updatedAt
177
+ Object.keys(data).forEach((key) => {
178
+ const k = key;
179
+ const keyLower = key.toLowerCase();
180
+ if ((keyLower.endsWith('createdat') || keyLower.endsWith('updatedat')) && data[k] instanceof Date) {
181
+ savedOut[k] = data[k];
182
+ }
183
+ });
184
+ }
185
+ const updatedAt = data[fieldUpdatedAt];
186
+ if (updatedAt && _realtimePlugin) {
187
+ if (realtimeKeyGet) {
188
+ _realtimePlugin.setLatestChange(realtimeKeyGet, updatedAt);
189
+ }
190
+ if (realtimeKeyList) {
191
+ _realtimePlugin.setLatestChange(realtimeKeyList, updatedAt);
192
+ }
193
+ }
194
+ return savedOut;
195
+ }
196
+ };
197
+ const handleSetError = async (error, params, isCreate) => {
198
+ var _a, _b;
199
+ const { retryNum, cancelRetry, update } = params;
200
+ if (isCreate &&
201
+ ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('for the unique')) &&
202
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('must be unique'))) {
203
+ if (__DEV__) {
204
+ console.log('Creating duplicate data already saved, just ignore.');
205
+ }
206
+ // This has already been saved but didn't update pending changes, so just update with {} to clear the pending state
207
+ update({
208
+ value: {},
209
+ mode: 'assign',
210
+ });
211
+ }
212
+ else if (error.type === 'bad_request') {
213
+ _onError === null || _onError === void 0 ? void 0 : _onError(error);
214
+ if (retryNum > 4) {
215
+ cancelRetry();
216
+ }
217
+ throw new Error(error.message);
218
+ }
219
+ else {
220
+ await handleApiError(error);
221
+ throw new Error(error.message);
222
+ }
223
+ };
224
+ const create = createParam
225
+ ? async (input, params) => {
226
+ const { data, error } = await createParam(convertObjectToCreate(input));
227
+ if (error) {
228
+ handleSetError(error, params, true);
229
+ }
230
+ return data;
231
+ }
232
+ : undefined;
233
+ const update = updateParam
234
+ ? async (input, params) => {
235
+ const id = input.id;
236
+ const values = input;
237
+ delete values.id;
238
+ delete values.createdAt;
239
+ delete values.updatedAt;
240
+ const { data, error } = await updateParam({ where: { id }, values: input });
241
+ if (error) {
242
+ handleSetError(error, params, false);
243
+ }
244
+ return data;
245
+ }
246
+ : undefined;
247
+ const deleteFn = deleteParam
248
+ ? async (input, params) => {
249
+ const { data, error } = await deleteParam({ id: input.id });
250
+ if (error) {
251
+ handleSetError(error, params, false);
252
+ }
253
+ return data;
254
+ }
255
+ : undefined;
256
+ return crud.syncedCrud({
257
+ ...rest,
258
+ as: asType,
259
+ list,
260
+ create,
261
+ update,
262
+ delete: deleteFn,
263
+ retry: { infinite: true },
264
+ waitFor: () => isEnabled$.get() && (waitFor ? state.computeSelector(waitFor) : true),
265
+ waitForSet: () => isEnabled$.get() && (waitForSet ? state.computeSelector(waitForSet) : true),
266
+ onSaved,
267
+ fieldCreatedAt,
268
+ fieldUpdatedAt,
269
+ initial: initial, // This errors because of the get/list union type
270
+ // @ts-expect-error This errors because of the get/list union type
271
+ get: get,
272
+ });
273
+ }
274
+
275
+ exports.KeelKeys = KeelKeys;
276
+ exports.configureSyncedKeel = configureSyncedKeel;
277
+ exports.syncedKeel = syncedKeel;
278
+ //# sourceMappingURL=keel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keel.js","sources":["../src/sync-plugins/keel.ts"],"sourcesContent":[null],"names":["internal","observable","when","syncedCrud","computeSelector"],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ import { observable, computeSelector, internal, when } from '@legendapp/state';
2
+ import { syncedCrud } from '@legendapp/state/sync-plugins/crud';
3
+
4
+ const { clone } = internal;
5
+ const KeelKeys = ['createdAt', 'updatedAt'];
6
+ let _client;
7
+ let _asOption;
8
+ let _realtimePlugin;
9
+ let _onError;
10
+ const modifiedClients = new WeakSet();
11
+ const isEnabled$ = observable(true);
12
+ async function ensureAuthToken() {
13
+ await when(isEnabled$.get());
14
+ let isAuthed = await _client.auth.isAuthenticated();
15
+ if (!isAuthed) {
16
+ isAuthed = await _client.auth.refresh();
17
+ }
18
+ return isAuthed;
19
+ }
20
+ async function handleApiError(error, retry) {
21
+ if (error.type === 'unauthorized' || error.type === 'forbidden') {
22
+ console.warn('Keel token expired, refreshing...');
23
+ await ensureAuthToken();
24
+ // Retry
25
+ retry === null || retry === void 0 ? void 0 : retry();
26
+ }
27
+ }
28
+ function convertObjectToCreate(item) {
29
+ const cloned = clone(item);
30
+ Object.keys(cloned).forEach((key) => {
31
+ if (key.endsWith('Id')) {
32
+ if (cloned[key]) {
33
+ cloned[key.slice(0, -2)] = { id: cloned[key] };
34
+ }
35
+ delete cloned[key];
36
+ }
37
+ });
38
+ delete cloned.createdAt;
39
+ delete cloned.updatedAt;
40
+ return cloned;
41
+ }
42
+ function configureSyncedKeel({ realtimePlugin, as: asOption, client, enabled, onError, }) {
43
+ if (asOption) {
44
+ _asOption = asOption;
45
+ }
46
+ if (client) {
47
+ _client = client;
48
+ }
49
+ if (enabled !== undefined) {
50
+ isEnabled$.set(enabled);
51
+ }
52
+ if (realtimePlugin) {
53
+ _realtimePlugin = realtimePlugin;
54
+ if (client && !modifiedClients.has(client)) {
55
+ modifiedClients.add(client);
56
+ const queries = client.api.queries;
57
+ Object.keys(queries).forEach((key) => {
58
+ const oldFn = queries[key];
59
+ queries[key] = (i) => {
60
+ const subscribe = key.startsWith('list') &&
61
+ i.where &&
62
+ (({ refresh }) => {
63
+ const realtimeChild = Object.values(i.where)
64
+ .filter((value) => value && typeof value !== 'object')
65
+ .join('/');
66
+ if (realtimeChild) {
67
+ const realtimeKey = `${key}/${realtimeChild}`;
68
+ realtimePlugin.subscribe(realtimeKey, refresh);
69
+ return realtimeKey;
70
+ }
71
+ });
72
+ return oldFn(i).then((ret) => {
73
+ if (subscribe) {
74
+ ret.subscribe = subscribe;
75
+ }
76
+ return ret;
77
+ });
78
+ };
79
+ });
80
+ }
81
+ }
82
+ if (onError) {
83
+ _onError = onError;
84
+ }
85
+ }
86
+ const NumPerPage = 200;
87
+ async function getAllPages(listFn, params) {
88
+ const allData = [];
89
+ let pageInfo = undefined;
90
+ let subscribe_;
91
+ const { maxResults } = params;
92
+ do {
93
+ const first = maxResults ? Math.min(maxResults - allData.length, NumPerPage) : NumPerPage;
94
+ if (first < 1) {
95
+ break;
96
+ }
97
+ const pageEndCursor = pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.endCursor;
98
+ const paramsWithCursor = pageEndCursor
99
+ ? { first, ...params, after: pageEndCursor }
100
+ : { first, ...params };
101
+ pageInfo = undefined;
102
+ const ret = await listFn(paramsWithCursor);
103
+ if (ret) {
104
+ // @ts-expect-error TODOKEEL
105
+ const { data, error, subscribe } = ret;
106
+ if (subscribe) {
107
+ subscribe_ = subscribe;
108
+ }
109
+ if (error) {
110
+ await handleApiError(error);
111
+ throw new Error(error.message);
112
+ }
113
+ else if (data) {
114
+ pageInfo = data.pageInfo;
115
+ allData.push(...data.results);
116
+ }
117
+ }
118
+ } while (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.hasNextPage);
119
+ return { results: allData, subscribe: subscribe_ };
120
+ }
121
+ function syncedKeel(props) {
122
+ const { get: getParam, list: listParam, create: createParam, update: updateParam, delete: deleteParam, maxResults, initial, waitFor, waitForSet, ...rest } = props;
123
+ let asType = props.as;
124
+ if (!asType) {
125
+ asType = (getParam ? 'first' : _asOption || undefined);
126
+ }
127
+ let realtimeKeyList = undefined;
128
+ let realtimeKeyGet = undefined;
129
+ const fieldCreatedAt = 'createdAt';
130
+ const fieldUpdatedAt = 'updatedAt';
131
+ const list = listParam
132
+ ? async (listParams) => {
133
+ const { lastSync, refresh } = listParams;
134
+ const queryBySync = !!lastSync;
135
+ const isRawRequest = (listParam || getParam).toString().includes('rawRequest');
136
+ const where = queryBySync ? { updatedAt: { after: new Date(+new Date(lastSync) + 1) } } : {};
137
+ const params = isRawRequest ? { where, maxResults } : { where, refresh, maxResults };
138
+ // TODO: Error?
139
+ const { results, subscribe } = await getAllPages(listParam, params);
140
+ if (!realtimeKeyList) {
141
+ realtimeKeyList = subscribe === null || subscribe === void 0 ? void 0 : subscribe({ refresh });
142
+ }
143
+ return results;
144
+ }
145
+ : undefined;
146
+ const get = getParam
147
+ ? async (getParams) => {
148
+ const { refresh } = getParams;
149
+ // @ts-expect-error TODOKEEL
150
+ const { data, error, subscribe } = await getParam({ refresh });
151
+ if (!realtimeKeyGet) {
152
+ realtimeKeyGet = subscribe === null || subscribe === void 0 ? void 0 : subscribe({ refresh });
153
+ }
154
+ if (error) {
155
+ throw new Error(error.message);
156
+ }
157
+ else {
158
+ return data;
159
+ }
160
+ }
161
+ : undefined;
162
+ const onSaved = (data, input, isCreate) => {
163
+ if (data) {
164
+ const savedOut = {};
165
+ if (isCreate) {
166
+ // Update with any fields that were undefined when creating
167
+ Object.keys(data).forEach((key) => {
168
+ if (input[key] === undefined) {
169
+ savedOut[key] = data[key];
170
+ }
171
+ });
172
+ }
173
+ else {
174
+ // Update with any fields ending in createdAt or updatedAt
175
+ Object.keys(data).forEach((key) => {
176
+ const k = key;
177
+ const keyLower = key.toLowerCase();
178
+ if ((keyLower.endsWith('createdat') || keyLower.endsWith('updatedat')) && data[k] instanceof Date) {
179
+ savedOut[k] = data[k];
180
+ }
181
+ });
182
+ }
183
+ const updatedAt = data[fieldUpdatedAt];
184
+ if (updatedAt && _realtimePlugin) {
185
+ if (realtimeKeyGet) {
186
+ _realtimePlugin.setLatestChange(realtimeKeyGet, updatedAt);
187
+ }
188
+ if (realtimeKeyList) {
189
+ _realtimePlugin.setLatestChange(realtimeKeyList, updatedAt);
190
+ }
191
+ }
192
+ return savedOut;
193
+ }
194
+ };
195
+ const handleSetError = async (error, params, isCreate) => {
196
+ var _a, _b;
197
+ const { retryNum, cancelRetry, update } = params;
198
+ if (isCreate &&
199
+ ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('for the unique')) &&
200
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('must be unique'))) {
201
+ if (__DEV__) {
202
+ console.log('Creating duplicate data already saved, just ignore.');
203
+ }
204
+ // This has already been saved but didn't update pending changes, so just update with {} to clear the pending state
205
+ update({
206
+ value: {},
207
+ mode: 'assign',
208
+ });
209
+ }
210
+ else if (error.type === 'bad_request') {
211
+ _onError === null || _onError === void 0 ? void 0 : _onError(error);
212
+ if (retryNum > 4) {
213
+ cancelRetry();
214
+ }
215
+ throw new Error(error.message);
216
+ }
217
+ else {
218
+ await handleApiError(error);
219
+ throw new Error(error.message);
220
+ }
221
+ };
222
+ const create = createParam
223
+ ? async (input, params) => {
224
+ const { data, error } = await createParam(convertObjectToCreate(input));
225
+ if (error) {
226
+ handleSetError(error, params, true);
227
+ }
228
+ return data;
229
+ }
230
+ : undefined;
231
+ const update = updateParam
232
+ ? async (input, params) => {
233
+ const id = input.id;
234
+ const values = input;
235
+ delete values.id;
236
+ delete values.createdAt;
237
+ delete values.updatedAt;
238
+ const { data, error } = await updateParam({ where: { id }, values: input });
239
+ if (error) {
240
+ handleSetError(error, params, false);
241
+ }
242
+ return data;
243
+ }
244
+ : undefined;
245
+ const deleteFn = deleteParam
246
+ ? async (input, params) => {
247
+ const { data, error } = await deleteParam({ id: input.id });
248
+ if (error) {
249
+ handleSetError(error, params, false);
250
+ }
251
+ return data;
252
+ }
253
+ : undefined;
254
+ return syncedCrud({
255
+ ...rest,
256
+ as: asType,
257
+ list,
258
+ create,
259
+ update,
260
+ delete: deleteFn,
261
+ retry: { infinite: true },
262
+ waitFor: () => isEnabled$.get() && (waitFor ? computeSelector(waitFor) : true),
263
+ waitForSet: () => isEnabled$.get() && (waitForSet ? computeSelector(waitForSet) : true),
264
+ onSaved,
265
+ fieldCreatedAt,
266
+ fieldUpdatedAt,
267
+ initial: initial, // This errors because of the get/list union type
268
+ // @ts-expect-error This errors because of the get/list union type
269
+ get: get,
270
+ });
271
+ }
272
+
273
+ export { KeelKeys, configureSyncedKeel, syncedKeel };
274
+ //# sourceMappingURL=keel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keel.mjs","sources":["../src/sync-plugins/keel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Observable, SyncedOptionsGlobal, type SyncedGetParams } from '@legendapp/state';
2
+ import { CrudAsOption, SyncedCrudPropsBase, SyncedCrudPropsMany, SyncedCrudReturnType } from '@legendapp/state/sync-plugins/crud';
3
+ import type { PostgrestFilterBuilder } from '@supabase/postgrest-js';
4
+ import type { SupabaseClient } from '@supabase/supabase-js';
5
+ type SchemaOf<TClient extends SupabaseClient> = TClient extends SupabaseClient<infer _, infer __, infer TSchema> ? TSchema : never;
6
+ type TableOf<TClient extends SupabaseClient> = SchemaOf<TClient>['Tables'];
7
+ type CollectionOf<TClient extends SupabaseClient> = keyof TableOf<TClient>;
8
+ type RowOf<TClient extends SupabaseClient, TCollection extends CollectionOf<TClient>> = TableOf<TClient>[TCollection]['Row'];
9
+ export type SyncedSupabaseConfig<T extends {
10
+ id: string;
11
+ }> = Omit<SyncedCrudPropsBase<T>, 'create' | 'update' | 'delete' | 'onSaved' | 'transform' | 'fieldCreatedAt' | 'updatePartial' | 'subscribe'>;
12
+ export interface SyncedSupabaseGlobalConfig extends Omit<SyncedSupabaseConfig<{
13
+ id: string;
14
+ }>, 'persist'> {
15
+ persist?: SyncedOptionsGlobal;
16
+ enabled?: Observable<boolean>;
17
+ }
18
+ interface SyncedSupabaseProps<TClient extends SupabaseClient, TCollection extends CollectionOf<TClient>, TOption extends CrudAsOption = 'object'> extends SyncedSupabaseConfig<RowOf<TClient, TCollection>>, SyncedCrudPropsMany<RowOf<TClient, TCollection>, RowOf<TClient, TCollection>, TOption> {
19
+ supabase: TClient;
20
+ collection: TCollection;
21
+ filter?: (select: PostgrestFilterBuilder<SchemaOf<TClient>, RowOf<TClient, TCollection>, RowOf<TClient, TCollection>[], TCollection, [
22
+ ]>, params: SyncedGetParams) => PostgrestFilterBuilder<SchemaOf<TClient>, RowOf<TClient, TCollection>, RowOf<TClient, TCollection>[], TCollection, [
23
+ ]>;
24
+ actions?: ('create' | 'read' | 'update' | 'delete')[];
25
+ realtime?: {
26
+ schema?: string;
27
+ filter?: string;
28
+ };
29
+ }
30
+ export declare function configureSyncedSupabase(config: SyncedSupabaseGlobalConfig): void;
31
+ export declare function syncedSupabase<Client extends SupabaseClient, Collection extends CollectionOf<Client> & string, AsOption extends CrudAsOption = 'object'>(props: SyncedSupabaseProps<Client, Collection, AsOption>): SyncedCrudReturnType<RowOf<Client, Collection>, AsOption>;
32
+ export {};