@iebh/tera-fy 2.3.8 → 2.3.10
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 +21 -0
- package/dist/lib/syncro/entities.d.ts +9 -3
- package/dist/lib/syncro/entities.js +103 -115
- package/dist/lib/syncro/entities.js.map +1 -1
- package/dist/lib/syncro/keyed (Rhino's conflicted copy 2026-05-10).js +287 -0
- package/dist/lib/syncro/keyed.js +1 -0
- package/dist/lib/syncro/keyed.js (Rhino's conflicted copy 2026-05-10).map +1 -0
- package/dist/lib/syncro/keyed.js.map +1 -1
- package/dist/lib/syncro/syncro (Rhino's conflicted copy 2026-05-10).js +765 -0
- package/dist/lib/syncro/syncro.d (Rhino's conflicted copy 2026-05-10).ts +336 -0
- package/dist/lib/syncro/syncro.d.ts +7 -0
- package/dist/lib/syncro/syncro.js +6 -0
- package/dist/lib/syncro/syncro.js (Rhino's conflicted copy 2026-05-10).map +1 -0
- package/dist/lib/syncro/syncro.js.map +1 -1
- package/dist/plugin.vue2.es2019 (Rhino's conflicted copy 2026-05-10).js +1271 -0
- package/dist/plugin.vue2.es2019.js +1 -1
- package/lib/syncro/entities.ts +126 -131
- package/lib/syncro/keyed.ts +1 -0
- package/lib/syncro/syncro.ts +9 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.3.10](https://github.com/IEBH/TERA-fy/compare/v2.3.9...v2.3.10) (2026-05-12)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### refactor
|
|
7
|
+
|
|
8
|
+
* Tidied up Syncro data fetching + force named arguments when calling merger ([220eef3](https://github.com/IEBH/TERA-fy/commit/220eef3c0b7d12b0cae87bfc169dfa67c87858f4))
|
|
9
|
+
|
|
10
|
+
## [2.3.9](https://github.com/IEBH/TERA-fy/compare/v2.3.8...v2.3.9) (2026-05-09)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### fix
|
|
14
|
+
|
|
15
|
+
* First draft at migrating away from Supabase(y) for row updates in the Syncro ([b1b65cb](https://github.com/IEBH/TERA-fy/commit/b1b65cb55ee08f3d87467061a8e26376251fab08))
|
|
16
|
+
* Tidup and fixes ([cd23fd8](https://github.com/IEBH/TERA-fy/commit/cd23fd81cd99f47fe15bdcc5ed06a9083fae243a))
|
|
17
|
+
* TS interface definition errors ([a8310de](https://github.com/IEBH/TERA-fy/commit/a8310de1d24f110761908aea80c943d8403bf16b))
|
|
18
|
+
* Wrong object binding in (probably unused) keyed utils ([77fba38](https://github.com/IEBH/TERA-fy/commit/77fba38137b19f524a25fbb1cb1ae8e5480e7b2f))
|
|
19
|
+
|
|
20
|
+
### refactor
|
|
21
|
+
|
|
22
|
+
* Change hyperdrive binding from db -> HYPERDRIVE so its consistant with other uses ([852d6c6](https://github.com/IEBH/TERA-fy/commit/852d6c6f4be9020b66075678a9477544b276eff2))
|
|
23
|
+
|
|
3
24
|
## [2.3.8](https://github.com/IEBH/TERA-fy/compare/v2.3.7...v2.3.8) (2026-04-30)
|
|
4
25
|
|
|
5
26
|
|
|
@@ -1,13 +1,19 @@
|
|
|
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: {
|
|
10
|
-
|
|
15
|
+
HYPERDRIVE: PostgresSql;
|
|
16
|
+
supabasey?: BoundSupabaseyFunction;
|
|
11
17
|
state: any;
|
|
12
18
|
id?: string;
|
|
13
19
|
fsId?: string;
|
|
@@ -21,8 +27,8 @@ 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 `({
|
|
25
|
-
* @property {Function} flushState Function called to flush state from Firebase to
|
|
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
|
|
31
|
+
* @property {Function} flushState Function called to flush state from Firebase to Postgres. Called the same as `initState` + `{state:Object}`
|
|
26
32
|
*/
|
|
27
33
|
declare const syncroConfig: SyncroConfig;
|
|
28
34
|
export default 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,48 @@ 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 `({
|
|
13
|
-
* @property {Function} flushState Function called to flush state from Firebase to
|
|
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
|
+
* @property {Function} flushState Function called to flush state from Firebase to Postgres. 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 rows = await HYPERDRIVE `
|
|
20
|
+
SELECT data
|
|
21
|
+
FROM institutes
|
|
22
|
+
WHERE id = ${id}
|
|
23
|
+
LIMIT 1
|
|
24
|
+
`;
|
|
25
|
+
if (rows.length > 0) {
|
|
26
|
+
return rows[0].data; // institute is valid and already exists
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error(`Syncro institute "${id}" not found`);
|
|
30
|
+
}
|
|
26
31
|
},
|
|
27
|
-
flushState({
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
flushState({ HYPERDRIVE, state, id }) {
|
|
33
|
+
return HYPERDRIVE `
|
|
34
|
+
SELECT syncro_merge_data(
|
|
35
|
+
table_name => 'institutes',
|
|
36
|
+
entity_id => ${id}::UUID,
|
|
37
|
+
new_data => ${HYPERDRIVE.json(state)}::JSONB
|
|
38
|
+
)
|
|
39
|
+
`;
|
|
34
40
|
},
|
|
35
41
|
}, // }}}
|
|
36
42
|
projects: {
|
|
37
43
|
singular: 'project',
|
|
38
|
-
async initState({ supabasey, id }) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
async initState({ HYPERDRIVE, supabasey, id }) {
|
|
45
|
+
let rows = await HYPERDRIVE `
|
|
46
|
+
SELECT data
|
|
47
|
+
FROM projects
|
|
48
|
+
WHERE id = ${id}
|
|
49
|
+
LIMIT 1
|
|
50
|
+
`;
|
|
51
|
+
if (rows.length == 0)
|
|
45
52
|
throw new Error(`Syncro project "${id}" not found`);
|
|
46
|
-
const data =
|
|
53
|
+
const data = rows[0].data;
|
|
47
54
|
// MIGRATION - Move data.temp{} into Supabase files + add pointer to filename {{{
|
|
48
55
|
if (data.temp // Project contains temp subkey
|
|
49
56
|
&& Object.values(data.temp).some((t) => typeof t == 'object') // Some of the temp keys are objects
|
|
@@ -52,7 +59,7 @@ const syncroConfig = {
|
|
|
52
59
|
const tempObject = data.temp;
|
|
53
60
|
await Promise.all(Object.entries(data.temp)
|
|
54
61
|
.filter(([, branch]) => typeof branch == 'object')
|
|
55
|
-
.map(([toolKey
|
|
62
|
+
.map(([toolKey]) => {
|
|
56
63
|
console.log(`[MIGRATION] Converting data.temp[${toolKey}]...`);
|
|
57
64
|
const toolName = toolKey.split('-')[0];
|
|
58
65
|
const fileName = `data-${toolName}-${nanoid()}.json`;
|
|
@@ -82,18 +89,19 @@ const syncroConfig = {
|
|
|
82
89
|
} // }}}
|
|
83
90
|
return data;
|
|
84
91
|
},
|
|
85
|
-
flushState({
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
flushState({ HYPERDRIVE, state, fsId }) {
|
|
93
|
+
return HYPERDRIVE `
|
|
94
|
+
SELECT syncro_merge_data(
|
|
95
|
+
table_name => 'projects',
|
|
96
|
+
entity_id => ${fsId}::UUID,
|
|
97
|
+
new_data => ${HYPERDRIVE.json(state)}::JSONB
|
|
98
|
+
)
|
|
99
|
+
`;
|
|
92
100
|
},
|
|
93
101
|
}, // }}}
|
|
94
102
|
project_libraries: {
|
|
95
103
|
singular: 'project library',
|
|
96
|
-
async initState({
|
|
104
|
+
async initState({ id, relation, supabasey }) {
|
|
97
105
|
if (!relation || !/_\*$/.test(relation))
|
|
98
106
|
throw new Error('Project library relation missing, path should resemble "project_library::${PROJECT}::${LIBRARY_FILE_ID}_*"');
|
|
99
107
|
const fileId = relation.replace(/_\*$/, '');
|
|
@@ -125,98 +133,78 @@ const syncroConfig = {
|
|
|
125
133
|
}, // }}}
|
|
126
134
|
project_namespaces: {
|
|
127
135
|
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
|
-
}
|
|
136
|
+
async initState() {
|
|
137
|
+
throw new Error('Updating project_namespaces is not yet supported');
|
|
155
138
|
},
|
|
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));
|
|
139
|
+
async flushState() {
|
|
140
|
+
throw new Error('Updating project_namespaces is not yet supported');
|
|
165
141
|
},
|
|
166
142
|
}, // }}}
|
|
167
143
|
test: {
|
|
168
144
|
singular: 'test',
|
|
169
|
-
async initState({
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
145
|
+
async initState({ HYPERDRIVE, id }) {
|
|
146
|
+
let rows = await HYPERDRIVE `
|
|
147
|
+
SELECT data
|
|
148
|
+
FROM test
|
|
149
|
+
WHERE id = ${id}
|
|
150
|
+
LIMIT 1
|
|
151
|
+
`;
|
|
152
|
+
if (rows.length > 0) {
|
|
153
|
+
return rows[0].data; // User is valid and already exists
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
throw new Error(`Syncro test "${id}" not found`);
|
|
157
|
+
}
|
|
178
158
|
},
|
|
179
|
-
flushState({
|
|
180
|
-
return
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
159
|
+
flushState({ HYPERDRIVE, state, fsId }) {
|
|
160
|
+
return HYPERDRIVE `
|
|
161
|
+
SELECT syncro_merge_data(
|
|
162
|
+
table_name => 'test',
|
|
163
|
+
entity_id => ${fsId}::UUID,
|
|
164
|
+
new_data => ${HYPERDRIVE.json(state)}::JSONB
|
|
165
|
+
)
|
|
166
|
+
`;
|
|
185
167
|
},
|
|
186
168
|
}, // }}}
|
|
187
169
|
users: {
|
|
188
170
|
singular: 'user',
|
|
189
|
-
async initState({
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
171
|
+
async initState({ HYPERDRIVE, id }) {
|
|
172
|
+
let rows = await HYPERDRIVE `
|
|
173
|
+
SELECT data
|
|
174
|
+
FROM users
|
|
175
|
+
WHERE id = ${id}
|
|
176
|
+
LIMIT 1
|
|
177
|
+
`;
|
|
178
|
+
if (rows.length > 0)
|
|
179
|
+
return rows[0].data; // User is valid and already exists
|
|
180
|
+
// User row doesn't already exist - this shouldn't happen if the user has correctly gone through the onboarding process
|
|
181
|
+
// but... *shrugs*, who knows
|
|
182
|
+
let newUser = await HYPERDRIVE `
|
|
183
|
+
INSERT INTO users
|
|
184
|
+
(
|
|
185
|
+
id,
|
|
186
|
+
data
|
|
187
|
+
)
|
|
188
|
+
VALUES (
|
|
189
|
+
${id},
|
|
190
|
+
${HYPERDRIVE.json({
|
|
201
191
|
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.
|
|
192
|
+
credits: 1000,
|
|
193
|
+
})}::JSONB
|
|
194
|
+
)
|
|
195
|
+
`;
|
|
196
|
+
if (!newUser?.length)
|
|
197
|
+
throw new Error(`Failed to create new user "${id}"`);
|
|
198
|
+
return newUser[0].data; // Return back the data that eventually got created - allowing for database triggers, default field values etc.
|
|
213
199
|
},
|
|
214
|
-
flushState({
|
|
215
|
-
return
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
200
|
+
flushState({ HYPERDRIVE, state, fsId }) {
|
|
201
|
+
return HYPERDRIVE `
|
|
202
|
+
SELECT syncro_merge_data(
|
|
203
|
+
table_name => 'users',
|
|
204
|
+
entity_id => ${fsId}::UUID,
|
|
205
|
+
new_data => ${HYPERDRIVE.json(state)}::JSONB
|
|
206
|
+
)
|
|
207
|
+
`;
|
|
220
208
|
},
|
|
221
209
|
}, // }}}
|
|
222
210
|
};
|
|
@@ -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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"}
|