@iebh/tera-fy 2.3.7 → 2.3.9
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/CHANGELOG.md +35 -0
- package/dist/lib/projectFile.js +118 -6
- package/dist/lib/projectFile.js.map +1 -1
- package/dist/lib/syncro/entities.d.ts +7 -1
- package/dist/lib/syncro/entities.js +79 -95
- package/dist/lib/syncro/entities.js.map +1 -1
- package/dist/lib/syncro/keyed.js +24 -23
- package/dist/lib/syncro/keyed.js.map +1 -1
- package/dist/lib/syncro/syncro.d.ts +15 -2
- package/dist/lib/syncro/syncro.js +124 -43
- package/dist/lib/syncro/syncro.js.map +1 -1
- package/dist/lib/terafy.bootstrapper.js +11 -11
- package/dist/lib/terafy.bootstrapper.js.map +1 -1
- package/dist/lib/terafy.client.js +157 -158
- package/dist/lib/terafy.client.js.map +1 -1
- package/dist/lib/terafy.proxy.js +32 -27
- package/dist/lib/terafy.proxy.js.map +1 -1
- package/dist/lib/terafy.server.js +52 -54
- package/dist/lib/terafy.server.js.map +1 -1
- package/dist/plugin.vue2.es2019.js +27 -27
- package/dist/plugins/firebase.js +22 -10
- package/dist/plugins/firebase.js.map +1 -1
- package/dist/plugins/vue2.d.ts +1 -2
- package/dist/plugins/vue2.js +24 -17
- package/dist/plugins/vue2.js.map +1 -1
- package/dist/plugins/vue3.d.ts +1 -2
- package/dist/plugins/vue3.js +7 -11
- package/dist/plugins/vue3.js.map +1 -1
- package/dist/terafy.bootstrapper.es2019.js +2 -2
- package/dist/terafy.bootstrapper.js +2 -2
- package/dist/terafy.es2019.js +2 -2
- package/dist/terafy.js +1 -1
- package/lib/syncro/entities.ts +94 -103
- package/lib/syncro/keyed.ts +1 -0
- package/lib/syncro/syncro.ts +44 -8
- package/lib/terafy.client.ts +0 -1
- package/lib/terafy.server.ts +6 -7
- package/package.json +4 -3
- package/plugins/vue2.ts +2 -3
- package/plugins/vue3.ts +2 -4
- package/tsconfig.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.3.9](https://github.com/IEBH/TERA-fy/compare/v2.3.8...v2.3.9) (2026-05-09)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### fix
|
|
7
|
+
|
|
8
|
+
* First draft at migrating away from Supabase(y) for row updates in the Syncro ([b1b65cb](https://github.com/IEBH/TERA-fy/commit/b1b65cb55ee08f3d87467061a8e26376251fab08))
|
|
9
|
+
* Tidup and fixes ([cd23fd8](https://github.com/IEBH/TERA-fy/commit/cd23fd81cd99f47fe15bdcc5ed06a9083fae243a))
|
|
10
|
+
* TS interface definition errors ([a8310de](https://github.com/IEBH/TERA-fy/commit/a8310de1d24f110761908aea80c943d8403bf16b))
|
|
11
|
+
* Wrong object binding in (probably unused) keyed utils ([77fba38](https://github.com/IEBH/TERA-fy/commit/77fba38137b19f524a25fbb1cb1ae8e5480e7b2f))
|
|
12
|
+
|
|
13
|
+
### refactor
|
|
14
|
+
|
|
15
|
+
* Change hyperdrive binding from db -> HYPERDRIVE so its consistant with other uses ([852d6c6](https://github.com/IEBH/TERA-fy/commit/852d6c6f4be9020b66075678a9477544b276eff2))
|
|
16
|
+
|
|
17
|
+
## [2.3.8](https://github.com/IEBH/TERA-fy/compare/v2.3.7...v2.3.8) (2026-04-30)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### feat
|
|
21
|
+
|
|
22
|
+
* Throttling for excessive state writes ([2fd9c47](https://github.com/IEBH/TERA-fy/commit/2fd9c4731615f9bbec85f2a2910ac3bb3397a5a5))
|
|
23
|
+
|
|
24
|
+
### fix
|
|
25
|
+
|
|
26
|
+
* Bumped TSC to ES2022 spec so that Error with {cause:Error} are supported when compiling ([336e153](https://github.com/IEBH/TERA-fy/commit/336e15384d896653ae063f7e52cea43e55dbdee0))
|
|
27
|
+
* Misc fixes to keep TS happy ([073b35f](https://github.com/IEBH/TERA-fy/commit/073b35f2cad11e30e22de0ed2c3dda2331f9d12c))
|
|
28
|
+
* Not correctly watching .ts files with nodemon ([731b0c5](https://github.com/IEBH/TERA-fy/commit/731b0c5ca983452928ca17361f4c0572c4aa1042))
|
|
29
|
+
|
|
30
|
+
### refactor
|
|
31
|
+
|
|
32
|
+
* Various fixes to keep Eslint happy ([8e18f40](https://github.com/IEBH/TERA-fy/commit/8e18f401aec76b7e6b4ab6c1105b08571d19388d))
|
|
33
|
+
|
|
34
|
+
### task
|
|
35
|
+
|
|
36
|
+
* Bump NPMs ([f92fcd5](https://github.com/IEBH/TERA-fy/commit/f92fcd5f133cb8bb06f35c6a038d07b2b72863fd))
|
|
37
|
+
|
|
3
38
|
## [2.3.6](https://github.com/IEBH/TERA-fy/compare/v2.3.5...v2.3.6) (2026-04-07)
|
|
4
39
|
|
|
5
40
|
|
package/dist/lib/projectFile.js
CHANGED
|
@@ -7,6 +7,124 @@ import { pick, omit } from 'lodash-es';
|
|
|
7
7
|
* @class ProjectFile
|
|
8
8
|
*/
|
|
9
9
|
export default class ProjectFile {
|
|
10
|
+
/**
|
|
11
|
+
* Parent TeraClient instance used by all helper functions
|
|
12
|
+
* @type {TeraClient}
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
_tera;
|
|
16
|
+
/**
|
|
17
|
+
* The TERA compatible unique ID of the file
|
|
18
|
+
* NOTE: This is computed each time from the Base64 of the file path
|
|
19
|
+
* @type {String}
|
|
20
|
+
*/
|
|
21
|
+
id;
|
|
22
|
+
/**
|
|
23
|
+
* The raw Supabase UUID of the file
|
|
24
|
+
* @type {String}
|
|
25
|
+
*/
|
|
26
|
+
sbId;
|
|
27
|
+
/**
|
|
28
|
+
* Relative name path (can contain prefix directories) for the human readable file name
|
|
29
|
+
* @type {String}
|
|
30
|
+
*/
|
|
31
|
+
name;
|
|
32
|
+
/**
|
|
33
|
+
* CSS class to use as the file icon
|
|
34
|
+
* @type {String}
|
|
35
|
+
*/
|
|
36
|
+
icon;
|
|
37
|
+
/**
|
|
38
|
+
* Full path to the file
|
|
39
|
+
* This is also used as the unique identifier within the project
|
|
40
|
+
* @type {String}
|
|
41
|
+
*/
|
|
42
|
+
path;
|
|
43
|
+
/**
|
|
44
|
+
* Fully qualified URL to view / access / download the file from TERA
|
|
45
|
+
* This will usually open an edit UI within the TERA site
|
|
46
|
+
* @type {String}
|
|
47
|
+
*/
|
|
48
|
+
url;
|
|
49
|
+
/**
|
|
50
|
+
* Rewrite of the URL where the absolute URL has been removed in place of a relative path, assuming the owner project is active
|
|
51
|
+
* This is used to direct to the edit/view/download UI when the files project is active and is usually used in place of URL for TERA related operations
|
|
52
|
+
* @type {String}
|
|
53
|
+
*/
|
|
54
|
+
teraUrl;
|
|
55
|
+
/**
|
|
56
|
+
* An object representing meta file parts of a file name
|
|
57
|
+
* @type {Object}
|
|
58
|
+
* @property {String} basename The filename + extension (i.e. everything without directory name)
|
|
59
|
+
* @property {String} filename The file portion of the name (basename without the extension)
|
|
60
|
+
* @property {String} ext The extension portion of the name (always lower case)
|
|
61
|
+
* @property {String} dirName The directory path portion of the name
|
|
62
|
+
*/
|
|
63
|
+
// Using 'any' for simplicity, define an interface for better type safety if desired
|
|
64
|
+
parsedName;
|
|
65
|
+
/**
|
|
66
|
+
* A date representing when the file was created
|
|
67
|
+
* @type {Date}
|
|
68
|
+
*/
|
|
69
|
+
// Using Date | undefined because constructor checks if it exists
|
|
70
|
+
created;
|
|
71
|
+
/**
|
|
72
|
+
* A human readable, formatted version of "created"
|
|
73
|
+
* @type {String}
|
|
74
|
+
*/
|
|
75
|
+
createdFormatted;
|
|
76
|
+
/**
|
|
77
|
+
* A date representing when the file was created
|
|
78
|
+
* @type {Date}
|
|
79
|
+
*/
|
|
80
|
+
// Using Date | undefined because constructor checks if it exists
|
|
81
|
+
modified;
|
|
82
|
+
/**
|
|
83
|
+
* A human readable, formatted version of "modified"
|
|
84
|
+
* @type {String}
|
|
85
|
+
*/
|
|
86
|
+
modifiedFormatted;
|
|
87
|
+
/**
|
|
88
|
+
* A date representing when the file was last accessed
|
|
89
|
+
* @type {Date}
|
|
90
|
+
*/
|
|
91
|
+
// Using Date | undefined because constructor checks if it exists
|
|
92
|
+
accessed;
|
|
93
|
+
/**
|
|
94
|
+
* A human readable, formatted version of "accessed"
|
|
95
|
+
* @type {String}
|
|
96
|
+
*/
|
|
97
|
+
accessedFormatted;
|
|
98
|
+
/**
|
|
99
|
+
* Size, in bytes, of the file
|
|
100
|
+
* @type {Number}
|
|
101
|
+
*/
|
|
102
|
+
// Using number | undefined because constructor uses `|| 0`
|
|
103
|
+
size;
|
|
104
|
+
/**
|
|
105
|
+
* A human readable, formatted version of the file size
|
|
106
|
+
* @type {String}
|
|
107
|
+
*/
|
|
108
|
+
sizeFormatted;
|
|
109
|
+
/**
|
|
110
|
+
* The associated mime type for the file
|
|
111
|
+
* @type {String}
|
|
112
|
+
*/
|
|
113
|
+
mime;
|
|
114
|
+
/**
|
|
115
|
+
* Additional meta information for the file
|
|
116
|
+
* @type {Object}
|
|
117
|
+
*/
|
|
118
|
+
// Using Record<string, any> for a generic object, adjust if meta has a known structure
|
|
119
|
+
meta = {};
|
|
120
|
+
/**
|
|
121
|
+
* Whether this is a folder or not
|
|
122
|
+
*/
|
|
123
|
+
isFolder;
|
|
124
|
+
/**
|
|
125
|
+
* If it is a folder, it will have an array of files in the folder
|
|
126
|
+
*/
|
|
127
|
+
files;
|
|
10
128
|
/**
|
|
11
129
|
* ProjectFile constructor
|
|
12
130
|
* Takes the input basic file type from Supabase and adds additional formatted fields
|
|
@@ -14,12 +132,6 @@ export default class ProjectFile {
|
|
|
14
132
|
* @param {TeraFyClient} baseFile.tera The associated TeraFyClient instance to use for some file methods
|
|
15
133
|
*/
|
|
16
134
|
constructor(baseFile) {
|
|
17
|
-
/**
|
|
18
|
-
* Additional meta information for the file
|
|
19
|
-
* @type {Object}
|
|
20
|
-
*/
|
|
21
|
-
// Using Record<string, any> for a generic object, adjust if meta has a known structure
|
|
22
|
-
this.meta = {};
|
|
23
135
|
// Note: baseFile.tera is assumed to exist based on the check below and the SupabaseFile type definition above
|
|
24
136
|
if (!baseFile.tera)
|
|
25
137
|
throw new Error('Basic file requires a `tera` key to access the Tera instance');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectFile.js","sourceRoot":"","sources":["../../lib/projectFile.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAStC,CAAC;AAIF;;;EAGE;AACF,MAAM,CAAC,OAAO,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"projectFile.js","sourceRoot":"","sources":["../../lib/projectFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { BoundSupabaseyFunction } from '@iebh/supabasey';
|
|
2
|
+
export interface PostgresSql {
|
|
3
|
+
(strings: TemplateStringsArray, ...values: any[]): Promise<any[]>;
|
|
4
|
+
json(value: any): any;
|
|
5
|
+
}
|
|
2
6
|
interface SyncroEntityConfig {
|
|
3
7
|
singular: string;
|
|
4
8
|
initState: (args: {
|
|
9
|
+
HYPERDRIVE: PostgresSql;
|
|
5
10
|
supabasey: BoundSupabaseyFunction;
|
|
6
11
|
id: string;
|
|
7
12
|
relation?: string;
|
|
8
13
|
}) => Promise<any>;
|
|
9
14
|
flushState: (args: {
|
|
15
|
+
HYPERDRIVE?: PostgresSql;
|
|
10
16
|
supabasey: BoundSupabaseyFunction;
|
|
11
17
|
state: any;
|
|
12
18
|
id?: string;
|
|
@@ -21,7 +27,7 @@ type SyncroConfig = Record<string, SyncroEntityConfig>;
|
|
|
21
27
|
* @type {Object} An object lookup of entities
|
|
22
28
|
*
|
|
23
29
|
* @property {String} singular The singular noun for the item
|
|
24
|
-
* @property {Function} initState Function called to initialize state when Firestore has no existing document. Called as `({
|
|
30
|
+
* @property {Function} initState Function called to initialize state when Firestore has no existing document. Called as `({HYPERDRIVE:PostgresSql, supabasey:BoundSupabaseyFunction, id:String, relation?:string})` and expected to return the initial data object state
|
|
25
31
|
* @property {Function} flushState Function called to flush state from Firebase to Supabase. Called the same as `initState` + `{state:Object}`
|
|
26
32
|
*/
|
|
27
33
|
declare const syncroConfig: SyncroConfig;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* eslint-disable no-unused-vars */
|
|
1
|
+
/* eslint-disable jsdoc/reject-function-type, no-unused-vars */
|
|
2
2
|
// @ts-expect-error TODO: Remove when reflib gets declaration file
|
|
3
3
|
import Reflib from '@iebh/reflib';
|
|
4
4
|
import { v4 as uuid4 } from 'uuid';
|
|
@@ -9,41 +9,47 @@ import { nanoid } from 'nanoid';
|
|
|
9
9
|
* @type {Object} An object lookup of entities
|
|
10
10
|
*
|
|
11
11
|
* @property {String} singular The singular noun for the item
|
|
12
|
-
* @property {Function} initState Function called to initialize state when Firestore has no existing document. Called as `({
|
|
12
|
+
* @property {Function} initState Function called to initialize state when Firestore has no existing document. Called as `({HYPERDRIVE:PostgresSql, supabasey:BoundSupabaseyFunction, id:String, relation?:string})` and expected to return the initial data object state
|
|
13
13
|
* @property {Function} flushState Function called to flush state from Firebase to Supabase. Called the same as `initState` + `{state:Object}`
|
|
14
14
|
*/
|
|
15
15
|
const syncroConfig = {
|
|
16
16
|
institutes: {
|
|
17
17
|
singular: 'institute',
|
|
18
|
-
async initState({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
async initState({ HYPERDRIVE, id }) {
|
|
19
|
+
let institute = await HYPERDRIVE `
|
|
20
|
+
SELECT data
|
|
21
|
+
FROM institutes
|
|
22
|
+
WHERE id = ${id}
|
|
23
|
+
LIMIT 1
|
|
24
|
+
`;
|
|
25
|
+
if (institute.length > 0) {
|
|
26
|
+
return institute[0].data; // institute is valid and already exists
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error(`Syncro institute "${id}" not found`);
|
|
30
|
+
}
|
|
26
31
|
},
|
|
27
32
|
flushState({ supabasey, state, id }) {
|
|
28
|
-
//
|
|
29
|
-
return supabasey.rpc('syncro_merge_data', {
|
|
33
|
+
// FIXME: Better to reuse `env.HYPERDRIVE` instead of supabasey here in future
|
|
34
|
+
return supabasey((supabase) => supabase.rpc('syncro_merge_data', {
|
|
30
35
|
table_name: 'institutes',
|
|
31
36
|
entity_id: id,
|
|
32
37
|
new_data: state,
|
|
33
|
-
});
|
|
38
|
+
}));
|
|
34
39
|
},
|
|
35
40
|
}, // }}}
|
|
36
41
|
projects: {
|
|
37
42
|
singular: 'project',
|
|
38
|
-
async initState({ supabasey, id }) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
async initState({ HYPERDRIVE, supabasey, id }) {
|
|
44
|
+
let projects = await HYPERDRIVE `
|
|
45
|
+
SELECT data
|
|
46
|
+
FROM projects
|
|
47
|
+
WHERE id = ${id}
|
|
48
|
+
LIMIT 1
|
|
49
|
+
`;
|
|
50
|
+
if (projects.length == 0)
|
|
45
51
|
throw new Error(`Syncro project "${id}" not found`);
|
|
46
|
-
const data =
|
|
52
|
+
const data = projects[0].data;
|
|
47
53
|
// MIGRATION - Move data.temp{} into Supabase files + add pointer to filename {{{
|
|
48
54
|
if (data.temp // Project contains temp subkey
|
|
49
55
|
&& Object.values(data.temp).some((t) => typeof t == 'object') // Some of the temp keys are objects
|
|
@@ -52,7 +58,7 @@ const syncroConfig = {
|
|
|
52
58
|
const tempObject = data.temp;
|
|
53
59
|
await Promise.all(Object.entries(data.temp)
|
|
54
60
|
.filter(([, branch]) => typeof branch == 'object')
|
|
55
|
-
.map(([toolKey
|
|
61
|
+
.map(([toolKey]) => {
|
|
56
62
|
console.log(`[MIGRATION] Converting data.temp[${toolKey}]...`);
|
|
57
63
|
const toolName = toolKey.split('-')[0];
|
|
58
64
|
const fileName = `data-${toolName}-${nanoid()}.json`;
|
|
@@ -83,8 +89,8 @@ const syncroConfig = {
|
|
|
83
89
|
return data;
|
|
84
90
|
},
|
|
85
91
|
flushState({ supabasey, state, fsId }) {
|
|
86
|
-
//
|
|
87
|
-
return supabasey(supabase => supabase.rpc('syncro_merge_data', {
|
|
92
|
+
// FIXME: Better to reuse `env.HYPERDRIVE` instead of supabasey here in future
|
|
93
|
+
return supabasey((supabase) => supabase.rpc('syncro_merge_data', {
|
|
88
94
|
table_name: 'projects',
|
|
89
95
|
entity_id: fsId,
|
|
90
96
|
new_data: state,
|
|
@@ -93,7 +99,7 @@ const syncroConfig = {
|
|
|
93
99
|
}, // }}}
|
|
94
100
|
project_libraries: {
|
|
95
101
|
singular: 'project library',
|
|
96
|
-
async initState({
|
|
102
|
+
async initState({ id, relation, supabasey }) {
|
|
97
103
|
if (!relation || !/_\*$/.test(relation))
|
|
98
104
|
throw new Error('Project library relation missing, path should resemble "project_library::${PROJECT}::${LIBRARY_FILE_ID}_*"');
|
|
99
105
|
const fileId = relation.replace(/_\*$/, '');
|
|
@@ -125,59 +131,32 @@ const syncroConfig = {
|
|
|
125
131
|
}, // }}}
|
|
126
132
|
project_namespaces: {
|
|
127
133
|
singular: 'project namespace',
|
|
128
|
-
async initState(
|
|
129
|
-
|
|
130
|
-
throw new Error('Project namespace relation missing, path should resemble "project_namespaces::${PROJECT}::${RELATION}"');
|
|
131
|
-
const rows = await supabasey((supabase) => supabase
|
|
132
|
-
.from('project_namespaces')
|
|
133
|
-
.select('data')
|
|
134
|
-
.eq('project', id)
|
|
135
|
-
.eq('name', relation)
|
|
136
|
-
.limit(1));
|
|
137
|
-
if (rows && rows.length == 1) {
|
|
138
|
-
return rows[0].data;
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
const newItem = await supabasey((supabase) => supabase
|
|
142
|
-
.from('project_namespaces') // Doesn't exist - create it
|
|
143
|
-
.insert({
|
|
144
|
-
project: id,
|
|
145
|
-
name: relation,
|
|
146
|
-
data: {},
|
|
147
|
-
})
|
|
148
|
-
.select('data')
|
|
149
|
-
.single() // Assuming insert returns the single inserted row
|
|
150
|
-
);
|
|
151
|
-
if (!newItem)
|
|
152
|
-
throw new Error('Failed to create project namespace');
|
|
153
|
-
return newItem.data;
|
|
154
|
-
}
|
|
134
|
+
async initState() {
|
|
135
|
+
throw new Error('Updating project_namespaces is not yet supported');
|
|
155
136
|
},
|
|
156
|
-
flushState(
|
|
157
|
-
|
|
158
|
-
.from('project_namespaces')
|
|
159
|
-
.update({
|
|
160
|
-
edited_at: new Date().toISOString(),
|
|
161
|
-
data: state,
|
|
162
|
-
})
|
|
163
|
-
.eq('project', id)
|
|
164
|
-
.eq('name', relation));
|
|
137
|
+
async flushState() {
|
|
138
|
+
throw new Error('Updating project_namespaces is not yet supported');
|
|
165
139
|
},
|
|
166
140
|
}, // }}}
|
|
167
141
|
test: {
|
|
168
142
|
singular: 'test',
|
|
169
|
-
async initState({
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
143
|
+
async initState({ HYPERDRIVE, id }) {
|
|
144
|
+
let rows = await HYPERDRIVE `
|
|
145
|
+
SELECT data
|
|
146
|
+
FROM test
|
|
147
|
+
WHERE id = ${id}
|
|
148
|
+
LIMIT 1
|
|
149
|
+
`;
|
|
150
|
+
if (rows.length > 0) {
|
|
151
|
+
return rows[0].data; // User is valid and already exists
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
throw new Error(`Syncro test "${id}" not found`);
|
|
155
|
+
}
|
|
178
156
|
},
|
|
179
157
|
flushState({ supabasey, state, fsId }) {
|
|
180
|
-
|
|
158
|
+
// FIXME: Better to reuse `env.HYPERDRIVE` instead of supabasey here in future
|
|
159
|
+
return supabasey((supabase) => supabase.rpc('syncro_merge_data', {
|
|
181
160
|
table_name: 'test',
|
|
182
161
|
entity_id: fsId,
|
|
183
162
|
new_data: state,
|
|
@@ -186,33 +165,38 @@ const syncroConfig = {
|
|
|
186
165
|
}, // }}}
|
|
187
166
|
users: {
|
|
188
167
|
singular: 'user',
|
|
189
|
-
async initState({
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
168
|
+
async initState({ HYPERDRIVE, id }) {
|
|
169
|
+
let user = await HYPERDRIVE `
|
|
170
|
+
SELECT data
|
|
171
|
+
FROM users
|
|
172
|
+
WHERE id = ${id}
|
|
173
|
+
LIMIT 1
|
|
174
|
+
`;
|
|
175
|
+
if (user.length > 0)
|
|
176
|
+
return user[0].data; // User is valid and already exists
|
|
177
|
+
// User row doesn't already exist - this shouldn't happen if the user has correctly gone through the onboarding process
|
|
178
|
+
// but... *shrugs*, who knows
|
|
179
|
+
let newUser = await HYPERDRIVE `
|
|
180
|
+
INSERT INTO users
|
|
181
|
+
(
|
|
182
|
+
id,
|
|
183
|
+
data
|
|
184
|
+
)
|
|
185
|
+
VALUES (
|
|
186
|
+
${id},
|
|
187
|
+
${HYPERDRIVE.json({
|
|
201
188
|
id,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
);
|
|
210
|
-
if (!newUser)
|
|
211
|
-
throw new Error('Failed to create user');
|
|
212
|
-
return newUser.data; // Return back the data that eventually got created - allowing for database triggers, default field values etc.
|
|
189
|
+
credits: 1000,
|
|
190
|
+
})}::JSONB
|
|
191
|
+
)
|
|
192
|
+
`;
|
|
193
|
+
if (!newUser?.length)
|
|
194
|
+
throw new Error(`Failed to create new user "${id}"`);
|
|
195
|
+
return newUser[0].data; // Return back the data that eventually got created - allowing for database triggers, default field values etc.
|
|
213
196
|
},
|
|
214
197
|
flushState({ supabasey, state, fsId }) {
|
|
215
|
-
|
|
198
|
+
// FIXME: Better to reuse `env.HYPERDRIVE` instead of supabasey here in future
|
|
199
|
+
return supabasey((supabase) => supabase.rpc('syncro_merge_data', {
|
|
216
200
|
table_name: 'users',
|
|
217
201
|
entity_id: fsId,
|
|
218
202
|
new_data: state,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../lib/syncro/entities.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../lib/syncro/entities.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/syncro/keyed.js
CHANGED
|
@@ -10,6 +10,29 @@ import SyncroEntities from './entities.js';
|
|
|
10
10
|
* The original impetus is to allow TERA citation libraries to be held in a Syncro object and flushed back to Supabase when editing has completed
|
|
11
11
|
*/
|
|
12
12
|
export default class SyncroKeyed extends Syncro {
|
|
13
|
+
/**
|
|
14
|
+
* Config used by this instance to configure behaviour
|
|
15
|
+
*
|
|
16
|
+
* @type {Object}
|
|
17
|
+
* @property {Number} maxKeys The maximum number of keys a member can contain before needing to add a member
|
|
18
|
+
*/
|
|
19
|
+
keyedConfig = {
|
|
20
|
+
maxKeys: 2,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Various storage about keyed path
|
|
24
|
+
*/
|
|
25
|
+
keyedPath = {
|
|
26
|
+
getKey(path, index) {
|
|
27
|
+
return path + '_' + index;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Member Syncros which form part of this meta Syncro
|
|
32
|
+
*
|
|
33
|
+
* @type {Array<Syncro>}
|
|
34
|
+
*/
|
|
35
|
+
members = [];
|
|
13
36
|
/**
|
|
14
37
|
* Instance constructor
|
|
15
38
|
*
|
|
@@ -18,29 +41,6 @@ export default class SyncroKeyed extends Syncro {
|
|
|
18
41
|
*/
|
|
19
42
|
constructor(path, options) {
|
|
20
43
|
super(path, options);
|
|
21
|
-
/**
|
|
22
|
-
* Config used by this instance to configure behaviour
|
|
23
|
-
*
|
|
24
|
-
* @type {Object}
|
|
25
|
-
* @property {Number} maxKeys The maximum number of keys a member can contain before needing to add a member
|
|
26
|
-
*/
|
|
27
|
-
this.keyedConfig = {
|
|
28
|
-
maxKeys: 2,
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Various storage about keyed path
|
|
32
|
-
*/
|
|
33
|
-
this.keyedPath = {
|
|
34
|
-
getKey(path, index) {
|
|
35
|
-
return path + '_' + index;
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Member Syncros which form part of this meta Syncro
|
|
40
|
-
*
|
|
41
|
-
* @type {Array<Syncro>}
|
|
42
|
-
*/
|
|
43
|
-
this.members = [];
|
|
44
44
|
if (!/\*/.test(path))
|
|
45
45
|
throw new Error('SyncroKeyed paths must contain at least one asterisk as an object pagination indicator');
|
|
46
46
|
const { prefix, suffix } = /^(?<prefix>.+)\*(?<suffix>.*)$/.exec(path).groups;
|
|
@@ -98,6 +98,7 @@ export default class SyncroKeyed extends Syncro {
|
|
|
98
98
|
throw new Error(`Unknown Sync entity "${entity}"`);
|
|
99
99
|
// Go fetch the initial state object
|
|
100
100
|
const state = await SyncroEntities[entityKey].initState({
|
|
101
|
+
HYPERDRIVE: Syncro.db,
|
|
101
102
|
supabasey: Syncro.supabasey,
|
|
102
103
|
id, relation,
|
|
103
104
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyed.js","sourceRoot":"","sources":["../../../lib/syncro/keyed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,WAAW,CAAC;AAChC,OAAO,EAAC,GAAG,IAAI,eAAe,EAAE,MAAM,IAAI,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACrF,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,cAAc,MAAM,eAAe,CAAC;AAgB3C;;;;;;EAME;AACF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,MAAM;
|
|
1
|
+
{"version":3,"file":"keyed.js","sourceRoot":"","sources":["../../../lib/syncro/keyed.ts"],"names":[],"mappings":"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"}
|