@inflector/aura 0.2.13 → 0.3.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.
- package/dist/bin.js +1 -1
- package/dist/database.d.ts +695 -198
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +22 -52
- package/dist/hooks/react.d.ts.map +1 -1
- package/dist/hooks/react.js +35 -25
- package/package.json +1 -2
package/dist/database.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/database.js
CHANGED
|
@@ -8,75 +8,53 @@ class RemoteTable {
|
|
|
8
8
|
this.Name = name;
|
|
9
9
|
this.WorkSpace = workspace;
|
|
10
10
|
}
|
|
11
|
+
post(body) {
|
|
12
|
+
return axios.post(`/api/db/${this.WorkSpace}/${this.Name}`, body, { withCredentials: true }).then(r => r.data);
|
|
13
|
+
}
|
|
11
14
|
Get = () => {
|
|
12
15
|
return createFluentBuilder(async (data) => {
|
|
13
|
-
return
|
|
14
|
-
operation: "Get",
|
|
15
|
-
settings: data,
|
|
16
|
-
}, { withCredentials: true })).data;
|
|
16
|
+
return this.post({ operation: "Get", settings: data });
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
19
|
GetOne = () => {
|
|
20
20
|
return createFluentBuilder(async (data) => {
|
|
21
|
-
return
|
|
22
|
-
operation: "GetOne",
|
|
23
|
-
settings: data,
|
|
24
|
-
}, { withCredentials: true })).data;
|
|
21
|
+
return this.post({ operation: "GetOne", settings: data });
|
|
25
22
|
});
|
|
26
23
|
};
|
|
27
24
|
Delete = () => {
|
|
28
25
|
return createFluentBuilder(async (data) => {
|
|
29
|
-
return
|
|
26
|
+
return this.post({
|
|
30
27
|
operation: "Delete",
|
|
31
28
|
settings: { ...data, returning: true },
|
|
32
|
-
}
|
|
29
|
+
});
|
|
33
30
|
});
|
|
34
31
|
};
|
|
35
|
-
|
|
36
|
-
return createFluentBuilder(async () => {
|
|
37
|
-
return
|
|
38
|
-
operation: "Add",
|
|
39
|
-
settings: {
|
|
40
|
-
returning: true,
|
|
41
|
-
},
|
|
42
|
-
data: record,
|
|
43
|
-
}, { withCredentials: true })).data;
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
AddMany = (record) => {
|
|
47
|
-
return createFluentBuilder(async () => {
|
|
48
|
-
return (await axios.post(`/api/db/${this.WorkSpace}/${this.Name}`, {
|
|
32
|
+
Insert = (record) => {
|
|
33
|
+
return createFluentBuilder(async (data) => {
|
|
34
|
+
return this.post({
|
|
49
35
|
operation: "AddMany",
|
|
50
|
-
settings: {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
data: record,
|
|
54
|
-
}, { withCredentials: true })).data;
|
|
36
|
+
settings: { returning: data.returning ?? true },
|
|
37
|
+
data: Array.isArray(record) ? record : [record],
|
|
38
|
+
});
|
|
55
39
|
});
|
|
56
40
|
};
|
|
57
41
|
Update = (record) => {
|
|
58
42
|
return createFluentBuilder(async (data) => {
|
|
59
|
-
return
|
|
43
|
+
return this.post({
|
|
60
44
|
operation: "Update",
|
|
61
|
-
settings: { ...data, returning: true },
|
|
45
|
+
settings: { ...data, returning: data.returning ?? true },
|
|
62
46
|
data: record,
|
|
63
|
-
}
|
|
47
|
+
});
|
|
64
48
|
});
|
|
65
49
|
};
|
|
66
50
|
Count = () => {
|
|
67
51
|
return createFluentBuilder(async (data) => {
|
|
68
|
-
return
|
|
69
|
-
operation: "Count",
|
|
70
|
-
settings: data,
|
|
71
|
-
}, { withCredentials: true })).data;
|
|
52
|
+
return this.post({ operation: "Count", settings: data });
|
|
72
53
|
});
|
|
73
54
|
};
|
|
74
55
|
Exist = () => {
|
|
75
56
|
return createFluentBuilder(async (data) => {
|
|
76
|
-
return
|
|
77
|
-
operation: "Exist",
|
|
78
|
-
settings: data,
|
|
79
|
-
}, { withCredentials: true })).data;
|
|
57
|
+
return this.post({ operation: "Exist", settings: data });
|
|
80
58
|
});
|
|
81
59
|
};
|
|
82
60
|
Subscribe = (callback, where, init) => {
|
|
@@ -86,34 +64,26 @@ class RemoteTable {
|
|
|
86
64
|
if (init)
|
|
87
65
|
params.push("init=true");
|
|
88
66
|
const query = params.length ? "?" + params.join("&") : "";
|
|
89
|
-
const tableName = this.Name;
|
|
90
67
|
const url = `/api/db/${this.WorkSpace}/${this.Name}${query}`;
|
|
91
|
-
const source = new SSE(url, {
|
|
92
|
-
|
|
93
|
-
});
|
|
94
|
-
source.addEventListener(tableName, (event) => {
|
|
68
|
+
const source = new SSE(url, { withCredentials: true });
|
|
69
|
+
source.addEventListener(this.Name, (event) => {
|
|
95
70
|
try {
|
|
96
71
|
const { op, data } = JSON.parse(event.data);
|
|
97
72
|
callback({ action: op, data });
|
|
98
73
|
}
|
|
99
|
-
catch (
|
|
100
|
-
// Ignore parse errors
|
|
101
|
-
}
|
|
74
|
+
catch (_) { }
|
|
102
75
|
});
|
|
103
76
|
source.addEventListener("error", (error) => {
|
|
104
77
|
console.error("SSE stream error:", error);
|
|
105
78
|
});
|
|
106
79
|
source.stream();
|
|
107
|
-
return () =>
|
|
108
|
-
source.close();
|
|
109
|
-
};
|
|
80
|
+
return () => source.close();
|
|
110
81
|
};
|
|
111
82
|
}
|
|
112
83
|
export const AuraDatabase = (workspace, tables) => {
|
|
113
84
|
const Tables = {};
|
|
114
85
|
for (const key in tables) {
|
|
115
86
|
if (Object.prototype.hasOwnProperty.call(tables, key)) {
|
|
116
|
-
// @ts-ignore
|
|
117
87
|
Tables[key] = new RemoteTable(key, workspace);
|
|
118
88
|
}
|
|
119
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/hooks/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,IAAI,CAAA;AAI3C,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAkB5B,wBAAgB,QAAQ,CACtB,IAAI,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAElF,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE;IACR,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CACnE,
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/hooks/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,IAAI,CAAA;AAI3C,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAkB5B,wBAAgB,QAAQ,CACtB,IAAI,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAElF,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE;IACR,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CACnE,GA0Dc,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAChD;AAED,wBAAgB,SAAS,CACvB,IAAI,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAElF,KAAK,EAAE,IAAI,EACX,OAAO,EAAE;IACP,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CACnE,GA6Cc,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnD;AAED,eAAO,MAAM,OAAO,GAAI,UAAU,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;;;;;;;;aAGjF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,UAAU,GAAG,QAGvC,CAAA"}
|
package/dist/hooks/react.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useStore } from '@nanostores/react';
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
2
|
+
import { useEffect, useState, useRef } from 'react';
|
|
3
3
|
function deepEqual(a, b) {
|
|
4
4
|
if (a === b)
|
|
5
5
|
return true;
|
|
@@ -19,61 +19,71 @@ function deepEqual(a, b) {
|
|
|
19
19
|
}
|
|
20
20
|
export function useTable(table, Options) {
|
|
21
21
|
const [data, setData] = useState([]);
|
|
22
|
+
// 1. Keep the ref logic
|
|
22
23
|
const whereString = JSON.stringify(Options?.where);
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
const whereRef = useRef(whereString);
|
|
25
|
+
// 2. Cleanup: If the filter changed, clear the state immediately
|
|
26
|
+
// This happens during render to prevent showing old data
|
|
27
|
+
if (whereRef.current !== whereString) {
|
|
28
|
+
whereRef.current = whereString;
|
|
25
29
|
setData([]);
|
|
30
|
+
}
|
|
31
|
+
useEffect(() => {
|
|
26
32
|
const unsubscribe = table.Subscribe((event) => {
|
|
27
33
|
setData((prev) => {
|
|
34
|
+
// Helper to prevent duplicates (The "Upsert" logic)
|
|
35
|
+
const merge = (existing, incoming) => {
|
|
36
|
+
const incomingItems = Array.isArray(incoming) ? incoming : [incoming];
|
|
37
|
+
const filtered = existing.filter((ex) => !incomingItems.some((inc) => deepEqual(ex, inc)));
|
|
38
|
+
return [...filtered, ...incomingItems];
|
|
39
|
+
};
|
|
28
40
|
switch (event.action) {
|
|
29
41
|
case 'Get':
|
|
30
|
-
// 2. Replace the state for 'Get' (initial load)
|
|
31
|
-
// instead of appending to prevent duplicates on reconnections/re-runs
|
|
32
|
-
return Array.isArray(event.data) ? event.data : [event.data];
|
|
33
42
|
case 'Add':
|
|
34
|
-
return [...prev, event.data];
|
|
35
43
|
case 'AddMany':
|
|
36
|
-
return
|
|
44
|
+
return merge(prev, event.data);
|
|
37
45
|
case 'Delete':
|
|
38
|
-
|
|
46
|
+
const toDelete = Array.isArray(event.data) ? event.data : [event.data];
|
|
47
|
+
return prev.filter((x) => !toDelete.some((d) => deepEqual(d, x)));
|
|
39
48
|
case 'Update':
|
|
49
|
+
const updates = Array.isArray(event.data) ? event.data : [event.data];
|
|
40
50
|
return prev.map((item) => {
|
|
41
|
-
const
|
|
42
|
-
return
|
|
51
|
+
const found = updates.find((d) => deepEqual(d.old, item));
|
|
52
|
+
return found ? found.new : item;
|
|
43
53
|
});
|
|
44
54
|
default:
|
|
45
55
|
return prev;
|
|
46
56
|
}
|
|
47
57
|
});
|
|
48
58
|
}, Options?.where, true);
|
|
49
|
-
return () =>
|
|
50
|
-
unsubscribe();
|
|
51
|
-
};
|
|
59
|
+
return () => unsubscribe();
|
|
52
60
|
}, [table, whereString]);
|
|
53
61
|
return data;
|
|
54
62
|
}
|
|
55
63
|
export function useRecord(table, Options) {
|
|
56
64
|
const [data, setData] = useState(undefined);
|
|
65
|
+
// Ref logic for single record
|
|
57
66
|
const whereString = JSON.stringify(Options.where);
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
const whereRef = useRef(whereString);
|
|
68
|
+
if (whereRef.current !== whereString) {
|
|
69
|
+
whereRef.current = whereString;
|
|
60
70
|
setData(undefined);
|
|
71
|
+
}
|
|
72
|
+
useEffect(() => {
|
|
61
73
|
const unsubscribe = table.Subscribe((event) => {
|
|
62
74
|
setData((prev) => {
|
|
63
75
|
switch (event.action) {
|
|
64
76
|
case 'Get':
|
|
65
77
|
case 'Add':
|
|
66
|
-
|
|
67
|
-
return event.data;
|
|
78
|
+
return Array.isArray(event.data) ? event.data[0] : event.data;
|
|
68
79
|
case 'Delete':
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return prev;
|
|
80
|
+
const deleteList = Array.isArray(event.data) ? event.data : [event.data];
|
|
81
|
+
const isMatch = deleteList.some(d => deepEqual(d, prev) || deepEqual(d.old, prev));
|
|
82
|
+
return isMatch ? undefined : prev;
|
|
72
83
|
case 'Update':
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return prev;
|
|
84
|
+
const updates = Array.isArray(event.data) ? event.data : [event.data];
|
|
85
|
+
const match = updates.find((d) => deepEqual(d.old, prev));
|
|
86
|
+
return match ? match.new : prev;
|
|
77
87
|
default:
|
|
78
88
|
return prev;
|
|
79
89
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inflector/aura",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
"@nanostores/react": "^1.0.0"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@inflector/optima": "1.1.0",
|
|
39
38
|
"@types/react": "^19.2.10",
|
|
40
39
|
"axios": "^1.13.2",
|
|
41
40
|
"better-auth": "^1.4.16",
|