bonescript-compiler 0.2.1 → 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/LICENSE +21 -21
- package/dist/algorithm_catalog.js +166 -166
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +75 -543
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.d.ts +5 -0
- package/dist/commands/check.js +34 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/compile.d.ts +5 -0
- package/dist/commands/compile.js +183 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/debug.d.ts +5 -0
- package/dist/commands/debug.js +59 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/diff.d.ts +5 -0
- package/dist/commands/diff.js +125 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/fmt.d.ts +5 -0
- package/dist/commands/fmt.js +49 -0
- package/dist/commands/fmt.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.js +69 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/ir.d.ts +5 -0
- package/dist/commands/ir.js +27 -0
- package/dist/commands/ir.js.map +1 -0
- package/dist/commands/lex.d.ts +5 -0
- package/dist/commands/lex.js +21 -0
- package/dist/commands/lex.js.map +1 -0
- package/dist/commands/parse.d.ts +5 -0
- package/dist/commands/parse.js +30 -0
- package/dist/commands/parse.js.map +1 -0
- package/dist/commands/test.d.ts +5 -0
- package/dist/commands/test.js +61 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/verify_determinism.d.ts +5 -0
- package/dist/commands/verify_determinism.js +64 -0
- package/dist/commands/verify_determinism.js.map +1 -0
- package/dist/commands/watch.d.ts +5 -0
- package/dist/commands/watch.js +50 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/emit_auth.d.ts +6 -0
- package/dist/emit_auth.js +69 -0
- package/dist/emit_auth.js.map +1 -0
- package/dist/emit_capability.d.ts +13 -0
- package/dist/emit_capability.js +235 -125
- package/dist/emit_capability.js.map +1 -1
- package/dist/emit_database.d.ts +7 -0
- package/dist/emit_database.js +74 -0
- package/dist/emit_database.js.map +1 -0
- package/dist/emit_deploy.js +162 -162
- package/dist/emit_events.js +274 -274
- package/dist/emit_full.js +102 -95
- package/dist/emit_full.js.map +1 -1
- package/dist/emit_index.d.ts +6 -0
- package/dist/emit_index.js +157 -0
- package/dist/emit_index.js.map +1 -0
- package/dist/emit_maintenance.js +249 -249
- package/dist/emit_package.d.ts +7 -0
- package/dist/emit_package.js +70 -0
- package/dist/emit_package.js.map +1 -0
- package/dist/emit_router.d.ts +12 -0
- package/dist/emit_router.js +375 -0
- package/dist/emit_router.js.map +1 -0
- package/dist/emit_runtime.d.ts +17 -11
- package/dist/emit_runtime.js +29 -686
- package/dist/emit_runtime.js.map +1 -1
- package/dist/emit_sourcemap.js +66 -66
- package/dist/extension_manager.d.ts +2 -2
- package/dist/extension_manager.js +6 -3
- package/dist/extension_manager.js.map +1 -1
- package/dist/lowering.d.ts +5 -14
- package/dist/lowering.js +32 -417
- package/dist/lowering.js.map +1 -1
- package/dist/lowering_channels.d.ts +11 -0
- package/dist/lowering_channels.js +102 -0
- package/dist/lowering_channels.js.map +1 -0
- package/dist/lowering_entities.d.ts +11 -0
- package/dist/lowering_entities.js +222 -0
- package/dist/lowering_entities.js.map +1 -0
- package/dist/lowering_helpers.d.ts +13 -0
- package/dist/lowering_helpers.js +76 -0
- package/dist/lowering_helpers.js.map +1 -0
- package/dist/module_loader.d.ts +2 -2
- package/dist/module_loader.js +20 -23
- package/dist/module_loader.js.map +1 -1
- package/dist/scaffold.d.ts +2 -2
- package/dist/scaffold.js +316 -319
- package/dist/scaffold.js.map +1 -1
- package/package.json +62 -52
- package/src/algorithm_catalog.ts +345 -345
- package/src/ast.ts +334 -334
- package/src/cli.ts +98 -624
- package/src/commands/check.ts +33 -0
- package/src/commands/compile.ts +160 -0
- package/src/commands/debug.ts +33 -0
- package/src/commands/diff.ts +108 -0
- package/src/commands/fmt.ts +22 -0
- package/src/commands/init.ts +46 -0
- package/src/commands/ir.ts +23 -0
- package/src/commands/lex.ts +17 -0
- package/src/commands/parse.ts +24 -0
- package/src/commands/test.ts +36 -0
- package/src/commands/verify_determinism.ts +66 -0
- package/src/commands/watch.ts +25 -0
- package/src/emit_auth.ts +67 -0
- package/src/emit_batch.ts +140 -140
- package/src/emit_capability.ts +562 -436
- package/src/emit_composition.ts +196 -196
- package/src/emit_database.ts +75 -0
- package/src/emit_deploy.ts +190 -190
- package/src/emit_events.ts +307 -307
- package/src/emit_extras.ts +240 -240
- package/src/emit_full.ts +316 -309
- package/src/emit_index.ts +161 -0
- package/src/emit_maintenance.ts +459 -459
- package/src/emit_package.ts +69 -0
- package/src/emit_router.ts +395 -0
- package/src/emit_runtime.ts +17 -728
- package/src/emit_sourcemap.ts +140 -140
- package/src/emit_tests.ts +205 -205
- package/src/emit_websocket.ts +229 -229
- package/src/emitter.ts +566 -566
- package/src/extension_manager.ts +189 -187
- package/src/formatter.ts +297 -297
- package/src/index.ts +88 -88
- package/src/ir.ts +215 -215
- package/src/lexer.ts +630 -630
- package/src/lowering.ts +124 -556
- package/src/lowering_channels.ts +107 -0
- package/src/lowering_entities.ts +248 -0
- package/src/lowering_helpers.ts +75 -0
- package/src/module_loader.ts +112 -114
- package/src/optimizer.ts +196 -196
- package/src/parse_decls.ts +409 -409
- package/src/parse_decls2.ts +244 -244
- package/src/parse_expr.ts +197 -197
- package/src/parse_types.ts +54 -54
- package/src/parser.ts +1 -1
- package/src/parser_base.ts +57 -57
- package/src/parser_recovery.ts +153 -153
- package/src/scaffold.ts +372 -375
- package/src/solver.ts +330 -330
- package/src/typechecker.ts +591 -591
- package/src/types.ts +122 -122
- package/src/verifier.ts +348 -348
package/dist/emit_capability.js
CHANGED
|
@@ -3,48 +3,46 @@
|
|
|
3
3
|
* BoneScript Capability Body Emitter
|
|
4
4
|
*
|
|
5
5
|
* Translates IR effects and preconditions into real TypeScript + SQL.
|
|
6
|
+
*
|
|
7
|
+
* Performance strategies applied (PERF-003):
|
|
8
|
+
*
|
|
9
|
+
* 1. Entity fetches — same-table fetches batched into WHERE id = ANY($1::uuid[])
|
|
10
|
+
* and resolved with a Map lookup. Different-table fetches run in parallel via
|
|
11
|
+
* Promise.all rather than sequentially.
|
|
12
|
+
*
|
|
13
|
+
* 2. Effect batching — multiple effects targeting the same entity+table are
|
|
14
|
+
* collapsed into a single UPDATE ... SET a=$1, b=$2 ... WHERE id = $n
|
|
15
|
+
* instead of one UPDATE per field.
|
|
16
|
+
*
|
|
17
|
+
* 3. LIST queries — combined with COUNT(*) OVER() window function to avoid a
|
|
18
|
+
* separate COUNT(*) round-trip (handled in emit_router.ts).
|
|
6
19
|
*/
|
|
7
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
21
|
exports.emitCapabilityBody = void 0;
|
|
9
22
|
function parseExprStr(s) {
|
|
10
23
|
s = s.trim();
|
|
11
|
-
|
|
12
|
-
if (s.startsWith("(") && s.endsWith(")")) {
|
|
24
|
+
if (s.startsWith("(") && s.endsWith(")"))
|
|
13
25
|
return parseExprStr(s.slice(1, -1));
|
|
14
|
-
|
|
15
|
-
// String literal
|
|
16
|
-
if (s.startsWith('"') && s.endsWith('"')) {
|
|
26
|
+
if (s.startsWith('"') && s.endsWith('"'))
|
|
17
27
|
return { kind: "literal", value: s.slice(1, -1), raw: s };
|
|
18
|
-
|
|
19
|
-
// Number literal
|
|
20
|
-
if (/^-?\d+(\.\d+)?$/.test(s)) {
|
|
28
|
+
if (/^-?\d+(\.\d+)?$/.test(s))
|
|
21
29
|
return { kind: "literal", value: s, raw: s };
|
|
22
|
-
|
|
23
|
-
// Boolean
|
|
24
|
-
if (s === "true" || s === "false") {
|
|
30
|
+
if (s === "true" || s === "false")
|
|
25
31
|
return { kind: "literal", value: s, raw: s };
|
|
26
|
-
}
|
|
27
|
-
// Binary operators (check in precedence order, right-to-left to handle left-assoc)
|
|
28
32
|
const binOps = [" or ", " and ", " == ", " != ", " >= ", " <= ", " > ", " < ", " in ", " contains ", " + ", " - ", " * ", " / "];
|
|
29
33
|
for (const op of binOps) {
|
|
30
34
|
const idx = findBinOp(s, op);
|
|
31
35
|
if (idx !== -1) {
|
|
32
|
-
|
|
33
|
-
const right = parseExprStr(s.slice(idx + op.length));
|
|
34
|
-
return { kind: "binop", op: op.trim(), left, right };
|
|
36
|
+
return { kind: "binop", op: op.trim(), left: parseExprStr(s.slice(0, idx)), right: parseExprStr(s.slice(idx + op.length)) };
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
|
-
// Function call: name(args)
|
|
38
39
|
const callMatch = s.match(/^(\w+)\((.*)?\)$/);
|
|
39
40
|
if (callMatch) {
|
|
40
41
|
const args = callMatch[2] ? splitArgs(callMatch[2]).map(parseExprStr) : [];
|
|
41
42
|
return { kind: "call", name: callMatch[1], args };
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
-
if (/^[\w.]+$/.test(s)) {
|
|
44
|
+
if (/^[\w.]+$/.test(s))
|
|
45
45
|
return { kind: "field", path: s.split(".") };
|
|
46
|
-
}
|
|
47
|
-
// Fallback: treat as opaque literal
|
|
48
46
|
return { kind: "literal", value: s, raw: s };
|
|
49
47
|
}
|
|
50
48
|
function findBinOp(s, op) {
|
|
@@ -55,9 +53,8 @@ function findBinOp(s, op) {
|
|
|
55
53
|
depth++;
|
|
56
54
|
else if (ch === ")" || ch === "]")
|
|
57
55
|
depth--;
|
|
58
|
-
else if (depth === 0 && s.slice(i, i + op.length) === op)
|
|
56
|
+
else if (depth === 0 && s.slice(i, i + op.length) === op)
|
|
59
57
|
return i;
|
|
60
|
-
}
|
|
61
58
|
}
|
|
62
59
|
return -1;
|
|
63
60
|
}
|
|
@@ -87,8 +84,7 @@ function toSnakeCase(s) {
|
|
|
87
84
|
function getEntityFetches(method, mod, system) {
|
|
88
85
|
const fetches = [];
|
|
89
86
|
const seen = new Set();
|
|
90
|
-
|
|
91
|
-
const allModels = new Map(); // entityName → tableName
|
|
87
|
+
const allModels = new Map();
|
|
92
88
|
for (const m of system.modules) {
|
|
93
89
|
for (const model of m.models) {
|
|
94
90
|
allModels.set(model.name, toSnakeCase(model.name) + "s");
|
|
@@ -99,16 +95,12 @@ function getEntityFetches(method, mod, system) {
|
|
|
99
95
|
const tableName = allModels.get(param.type) || allModels.get(param.type.toLowerCase());
|
|
100
96
|
if (tableName && !seen.has(param.name)) {
|
|
101
97
|
seen.add(param.name);
|
|
102
|
-
fetches.push({
|
|
103
|
-
paramName: param.name,
|
|
104
|
-
entityType: param.type,
|
|
105
|
-
tableName,
|
|
106
|
-
idField: param.name + "_id",
|
|
107
|
-
});
|
|
98
|
+
fetches.push({ paramName: param.name, entityType: param.type, tableName, idField: param.name + "_id" });
|
|
108
99
|
}
|
|
109
100
|
}
|
|
110
101
|
return fetches;
|
|
111
102
|
}
|
|
103
|
+
// ─── Precondition Compiler ────────────────────────────────────────────────────
|
|
112
104
|
function compilePrecondition(expr, indent) {
|
|
113
105
|
const condition = exprToTs(expr, true);
|
|
114
106
|
const description = exprToDescription(expr).replace(/"/g, '\\"');
|
|
@@ -133,7 +125,6 @@ function exprToTsInner(expr) {
|
|
|
133
125
|
return expr.raw;
|
|
134
126
|
return expr.value;
|
|
135
127
|
case "field":
|
|
136
|
-
// Convert field path to JS property access
|
|
137
128
|
return expr.path.join("?.");
|
|
138
129
|
case "binop": {
|
|
139
130
|
const l = exprToTsInner(expr.left);
|
|
@@ -145,15 +136,6 @@ function exprToTsInner(expr) {
|
|
|
145
136
|
case "or": return `(${l} || ${r})`;
|
|
146
137
|
case "in": return `[${r}].flat().includes(${l})`;
|
|
147
138
|
case "contains": return `${l}?.includes(${r})`;
|
|
148
|
-
case ">":
|
|
149
|
-
case "<":
|
|
150
|
-
case ">=":
|
|
151
|
-
case "<=":
|
|
152
|
-
case "+":
|
|
153
|
-
case "-":
|
|
154
|
-
case "*":
|
|
155
|
-
case "/":
|
|
156
|
-
return `${l} ${expr.op} ${r}`;
|
|
157
139
|
default: return `${l} ${expr.op} ${r}`;
|
|
158
140
|
}
|
|
159
141
|
}
|
|
@@ -167,137 +149,254 @@ function exprToDescription(expr) {
|
|
|
167
149
|
switch (expr.kind) {
|
|
168
150
|
case "literal": return expr.raw;
|
|
169
151
|
case "field": return expr.path.join(".");
|
|
170
|
-
case "binop": {
|
|
171
|
-
const l = exprToDescription(expr.left);
|
|
172
|
-
const r = exprToDescription(expr.right);
|
|
173
|
-
return `${l} ${expr.op} ${r}`;
|
|
174
|
-
}
|
|
152
|
+
case "binop": return `${exprToDescription(expr.left)} ${expr.op} ${exprToDescription(expr.right)}`;
|
|
175
153
|
case "call": return `${expr.name}(${expr.args.map(exprToDescription).join(", ")})`;
|
|
176
154
|
}
|
|
177
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Compile a single effect into a structured form.
|
|
158
|
+
* Returns null if the effect target can't be resolved.
|
|
159
|
+
*/
|
|
178
160
|
function compileEffect(effect, mod, system, paramIdx) {
|
|
179
161
|
const targetParts = effect.target.split(".");
|
|
180
162
|
if (targetParts.length < 2)
|
|
181
163
|
return null;
|
|
182
|
-
const entityParam = targetParts[0];
|
|
183
|
-
const fieldName = targetParts[1];
|
|
184
|
-
const nestedPath = targetParts.slice(2);
|
|
185
|
-
// Find the model for this entity param — search across all modules
|
|
164
|
+
const entityParam = targetParts[0];
|
|
165
|
+
const fieldName = targetParts[1];
|
|
166
|
+
const nestedPath = targetParts.slice(2);
|
|
186
167
|
const model = (() => {
|
|
187
168
|
for (const m of system.modules) {
|
|
188
|
-
const found = m.models.find(mdl => toSnakeCase(mdl.name) === entityParam ||
|
|
189
|
-
mdl.name.toLowerCase() === entityParam.toLowerCase());
|
|
169
|
+
const found = m.models.find(mdl => toSnakeCase(mdl.name) === entityParam || mdl.name.toLowerCase() === entityParam.toLowerCase());
|
|
190
170
|
if (found)
|
|
191
171
|
return found;
|
|
192
172
|
}
|
|
193
|
-
return mod.models.find(m => toSnakeCase(m.name) === entityParam ||
|
|
194
|
-
m.name.toLowerCase() === entityParam.toLowerCase());
|
|
173
|
+
return mod.models.find(m => toSnakeCase(m.name) === entityParam || m.name.toLowerCase() === entityParam.toLowerCase());
|
|
195
174
|
})();
|
|
196
175
|
if (!model)
|
|
197
176
|
return null;
|
|
198
177
|
const tableName = toSnakeCase(model.name) + "s";
|
|
199
|
-
const
|
|
200
|
-
const valueTs = exprToTsInner(valueExpr);
|
|
178
|
+
const valueTs = exprToTsInner(parseExprStr(effect.value));
|
|
201
179
|
const idParam = `req.body.${entityParam}_id || req.params.id`;
|
|
202
|
-
//
|
|
203
|
-
const isBulk = effect.target.includes("[]") ||
|
|
204
|
-
(entityParam.endsWith("s") && !model.name.toLowerCase().endsWith("s"));
|
|
205
|
-
const bulkIdParam = `req.body.${entityParam}_ids || req.body.${entityParam}?.map((x: any) => x.id)`;
|
|
206
|
-
const whereClause = isBulk
|
|
207
|
-
? `WHERE id = ANY($2::uuid[])`
|
|
208
|
-
: `WHERE id = ${`$${2}`}`;
|
|
209
|
-
// Handle nested JSONB path: trade.offered_items.owner_id
|
|
180
|
+
// JSONB nested path — must be standalone (jsonb_set can't be batched cleanly)
|
|
210
181
|
if (nestedPath.length > 0) {
|
|
211
|
-
const jsonbField = fieldName;
|
|
212
|
-
const jsonbPath = nestedPath.join(".");
|
|
213
182
|
const p1 = `$${paramIdx.n++}`;
|
|
214
183
|
const p2 = `$${paramIdx.n++}`;
|
|
215
|
-
// Use jsonb_set to update nested path
|
|
216
184
|
const jsonbPathLiteral = `'{${nestedPath.join(",")}}'`;
|
|
217
185
|
return {
|
|
218
|
-
|
|
219
|
-
|
|
186
|
+
tableName, entityParam, idParam,
|
|
187
|
+
assignments: [],
|
|
220
188
|
description: `${effect.target} = ${effect.value}`,
|
|
189
|
+
standalone: {
|
|
190
|
+
sql: `UPDATE ${tableName} SET ${fieldName} = jsonb_set(COALESCE(${fieldName}, '{}'), ${jsonbPathLiteral}, to_jsonb(${p1}::text), true), updated_at = NOW() WHERE id = ${p2} RETURNING *`,
|
|
191
|
+
params: [valueTs, idParam],
|
|
192
|
+
},
|
|
221
193
|
};
|
|
222
194
|
}
|
|
195
|
+
const fieldType = model.fields.find(f => f.name === fieldName)?.type || "";
|
|
196
|
+
const isNumeric = ["uint", "int", "float"].includes(fieldType);
|
|
223
197
|
switch (effect.op) {
|
|
224
198
|
case "assign": {
|
|
225
199
|
const p1 = `$${paramIdx.n++}`;
|
|
226
|
-
const p2 = `$${paramIdx.n++}`;
|
|
227
200
|
return {
|
|
228
|
-
|
|
229
|
-
|
|
201
|
+
tableName, entityParam, idParam,
|
|
202
|
+
assignments: [{ column: fieldName, placeholder: p1, tsValue: valueTs }],
|
|
230
203
|
description: `${effect.target} = ${effect.value}`,
|
|
231
204
|
};
|
|
232
205
|
}
|
|
233
206
|
case "add": {
|
|
234
207
|
const p1 = `$${paramIdx.n++}`;
|
|
235
|
-
const p2 = `$${paramIdx.n++}`;
|
|
236
|
-
const fieldType = model.fields.find(f => f.name === fieldName)?.type || "";
|
|
237
|
-
const isNumeric = ["uint", "int", "float"].includes(fieldType);
|
|
238
208
|
if (isNumeric) {
|
|
239
209
|
return {
|
|
240
|
-
|
|
241
|
-
|
|
210
|
+
tableName, entityParam, idParam,
|
|
211
|
+
assignments: [{ column: `${fieldName} = ${fieldName} + `, placeholder: p1, tsValue: valueTs }],
|
|
242
212
|
description: `${effect.target} += ${effect.value}`,
|
|
243
213
|
};
|
|
244
214
|
}
|
|
245
|
-
|
|
246
|
-
|
|
215
|
+
// Array append — standalone
|
|
216
|
+
const p2 = `$${paramIdx.n++}`;
|
|
217
|
+
return {
|
|
218
|
+
tableName, entityParam, idParam,
|
|
219
|
+
assignments: [],
|
|
220
|
+
description: `${effect.target} += ${effect.value}`,
|
|
221
|
+
standalone: {
|
|
247
222
|
sql: `UPDATE ${tableName} SET ${fieldName} = ${fieldName} || jsonb_build_array(${p1}::jsonb), updated_at = NOW() WHERE id = ${p2} RETURNING *`,
|
|
248
223
|
params: [valueTs, idParam],
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
224
|
+
},
|
|
225
|
+
};
|
|
252
226
|
}
|
|
253
227
|
case "remove": {
|
|
254
228
|
const p1 = `$${paramIdx.n++}`;
|
|
255
|
-
const p2 = `$${paramIdx.n++}`;
|
|
256
|
-
const fieldType = model.fields.find(f => f.name === fieldName)?.type || "";
|
|
257
|
-
const isNumeric = ["uint", "int", "float"].includes(fieldType);
|
|
258
229
|
if (isNumeric) {
|
|
259
230
|
return {
|
|
260
|
-
|
|
261
|
-
|
|
231
|
+
tableName, entityParam, idParam,
|
|
232
|
+
assignments: [{ column: `${fieldName} = ${fieldName} - `, placeholder: p1, tsValue: valueTs }],
|
|
262
233
|
description: `${effect.target} -= ${effect.value}`,
|
|
263
234
|
};
|
|
264
235
|
}
|
|
265
|
-
|
|
266
|
-
|
|
236
|
+
// Array remove — standalone
|
|
237
|
+
const p2 = `$${paramIdx.n++}`;
|
|
238
|
+
return {
|
|
239
|
+
tableName, entityParam, idParam,
|
|
240
|
+
assignments: [],
|
|
241
|
+
description: `${effect.target} -= ${effect.value}`,
|
|
242
|
+
standalone: {
|
|
267
243
|
sql: `UPDATE ${tableName} SET ${fieldName} = (SELECT jsonb_agg(elem) FROM jsonb_array_elements(${fieldName}) elem WHERE elem != ${p1}::jsonb), updated_at = NOW() WHERE id = ${p2} RETURNING *`,
|
|
268
244
|
params: [valueTs, idParam],
|
|
269
|
-
|
|
270
|
-
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function batchEffects(compiled) {
|
|
251
|
+
const batches = new Map(); // key: `${tableName}::${entityParam}::${idParam}`
|
|
252
|
+
const standalones = [];
|
|
253
|
+
// Re-number parameters globally across all batches
|
|
254
|
+
let globalParamN = 1;
|
|
255
|
+
for (const effect of compiled) {
|
|
256
|
+
if (!effect)
|
|
257
|
+
continue;
|
|
258
|
+
if (effect.standalone) {
|
|
259
|
+
// Re-number the standalone params
|
|
260
|
+
let sql = effect.standalone.sql;
|
|
261
|
+
const params = effect.standalone.params;
|
|
262
|
+
const renumbered = [];
|
|
263
|
+
let localN = 1;
|
|
264
|
+
for (const p of params) {
|
|
265
|
+
sql = sql.replace(`$${localN}`, `$${globalParamN}`);
|
|
266
|
+
renumbered.push(p);
|
|
267
|
+
globalParamN++;
|
|
268
|
+
localN++;
|
|
269
|
+
}
|
|
270
|
+
standalones.push({ sql, params: renumbered, description: effect.description });
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (effect.assignments.length === 0)
|
|
274
|
+
continue;
|
|
275
|
+
const key = `${effect.tableName}::${effect.entityParam}::${effect.idParam}`;
|
|
276
|
+
if (!batches.has(key)) {
|
|
277
|
+
batches.set(key, {
|
|
278
|
+
tableName: effect.tableName,
|
|
279
|
+
entityParam: effect.entityParam,
|
|
280
|
+
idParam: effect.idParam,
|
|
281
|
+
setClauses: [],
|
|
282
|
+
paramValues: [],
|
|
283
|
+
descriptions: [],
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
const batch = batches.get(key);
|
|
287
|
+
for (const { column, placeholder, tsValue } of effect.assignments) {
|
|
288
|
+
// column may be "fieldName" (assign) or "fieldName = fieldName + " (numeric add/remove)
|
|
289
|
+
if (column.includes(" = ")) {
|
|
290
|
+
// Numeric add/remove: column is already "field = field + " — append placeholder
|
|
291
|
+
batch.setClauses.push(`${column}$${globalParamN}`);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
batch.setClauses.push(`${column} = $${globalParamN}`);
|
|
271
295
|
}
|
|
296
|
+
batch.paramValues.push(tsValue);
|
|
297
|
+
globalParamN++;
|
|
272
298
|
}
|
|
299
|
+
batch.descriptions.push(effect.description);
|
|
273
300
|
}
|
|
301
|
+
return { batches: Array.from(batches.values()), standalones };
|
|
274
302
|
}
|
|
275
303
|
// ─── Main Capability Body Emitter ─────────────────────────────────────────────
|
|
276
304
|
function emitCapabilityBody(method, mod, system, indent = " ") {
|
|
277
305
|
const lines = [];
|
|
278
306
|
const fetches = getEntityFetches(method, mod, system);
|
|
279
|
-
// 0. Destructure primitive params
|
|
307
|
+
// 0. Destructure primitive params
|
|
280
308
|
const primitiveParams = method.input.filter(p => {
|
|
281
309
|
const isPrimitive = ["string", "uint", "int", "float", "bool", "timestamp", "uuid", "bytes", "json"].includes(p.type);
|
|
282
310
|
const isListOrSet = p.type.startsWith("list<") || p.type.startsWith("set<");
|
|
283
|
-
|
|
284
|
-
return (isPrimitive || isListOrSet) && !isEntityFetch;
|
|
311
|
+
return (isPrimitive || isListOrSet) && !fetches.some(f => f.paramName === p.name);
|
|
285
312
|
});
|
|
286
313
|
if (primitiveParams.length > 0) {
|
|
287
|
-
const
|
|
288
|
-
lines.push(`${indent}const { ${destructured} } = req.body;`);
|
|
314
|
+
lines.push(`${indent}const { ${primitiveParams.map(p => p.name).join(", ")} } = req.body;`);
|
|
289
315
|
lines.push(``);
|
|
290
316
|
}
|
|
291
|
-
// 1. Fetch entities
|
|
317
|
+
// 1. Fetch entities — batch same-table fetches, parallelize different-table fetches
|
|
292
318
|
if (fetches.length > 0) {
|
|
293
319
|
lines.push(`${indent}// Fetch entities`);
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
320
|
+
// Group fetches by table
|
|
321
|
+
const byTable = new Map();
|
|
322
|
+
for (const f of fetches) {
|
|
323
|
+
if (!byTable.has(f.tableName))
|
|
324
|
+
byTable.set(f.tableName, []);
|
|
325
|
+
byTable.get(f.tableName).push(f);
|
|
326
|
+
}
|
|
327
|
+
const fetchGroups = Array.from(byTable.entries());
|
|
328
|
+
if (fetchGroups.length === 1 && fetchGroups[0][1].length === 1) {
|
|
329
|
+
// Single fetch — simple queryOne
|
|
330
|
+
const f = fetchGroups[0][1][0];
|
|
331
|
+
const idExpr = `req.body.${f.idField} || req.params.id`;
|
|
332
|
+
lines.push(`${indent}const ${f.paramName} = await queryOne(\`SELECT * FROM ${f.tableName} WHERE id = $1\`, [${idExpr}]);`);
|
|
333
|
+
lines.push(`${indent}if (!${f.paramName}) {`);
|
|
334
|
+
lines.push(`${indent} return res.status(404).json({ error: { code: "NOT_FOUND", message: "${f.paramName} not found" } });`);
|
|
299
335
|
lines.push(`${indent}}`);
|
|
300
336
|
}
|
|
337
|
+
else if (fetchGroups.length === 1 && fetchGroups[0][1].length > 1) {
|
|
338
|
+
// Multiple fetches from the SAME table — batch into WHERE id = ANY($1::uuid[])
|
|
339
|
+
const [tableName, group] = fetchGroups[0];
|
|
340
|
+
const idExprs = group.map(f => `req.body.${f.idField} || req.params.id`);
|
|
341
|
+
lines.push(`${indent}// Batch fetch: ${group.map(f => f.paramName).join(", ")} from ${tableName} in one query`);
|
|
342
|
+
lines.push(`${indent}const __ids_${tableName} = [${idExprs.join(", ")}];`);
|
|
343
|
+
lines.push(`${indent}const __rows_${tableName} = await query(\`SELECT * FROM ${tableName} WHERE id = ANY($1::uuid[])\`, [__ids_${tableName}]);`);
|
|
344
|
+
lines.push(`${indent}const __map_${tableName} = new Map(__rows_${tableName}.map((r: any) => [r.id, r]));`);
|
|
345
|
+
for (const f of group) {
|
|
346
|
+
const idExpr = `req.body.${f.idField} || req.params.id`;
|
|
347
|
+
lines.push(`${indent}const ${f.paramName} = __map_${tableName}.get(${idExpr}) ?? null;`);
|
|
348
|
+
lines.push(`${indent}if (!${f.paramName}) {`);
|
|
349
|
+
lines.push(`${indent} return res.status(404).json({ error: { code: "NOT_FOUND", message: "${f.paramName} not found" } });`);
|
|
350
|
+
lines.push(`${indent}}`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
// Multiple fetches from DIFFERENT tables — run in parallel with Promise.all
|
|
355
|
+
lines.push(`${indent}// Parallel fetch from ${fetchGroups.length} tables`);
|
|
356
|
+
const resultVars = [];
|
|
357
|
+
const fetchExprs = [];
|
|
358
|
+
for (const [tableName, group] of fetchGroups) {
|
|
359
|
+
if (group.length === 1) {
|
|
360
|
+
const f = group[0];
|
|
361
|
+
const idExpr = `req.body.${f.idField} || req.params.id`;
|
|
362
|
+
resultVars.push(`__r_${f.paramName}`);
|
|
363
|
+
fetchExprs.push(`queryOne(\`SELECT * FROM ${tableName} WHERE id = $1\`, [${idExpr}])`);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
// Same-table batch within a multi-table parallel fetch
|
|
367
|
+
const idExprs = group.map(f => `req.body.${f.idField} || req.params.id`);
|
|
368
|
+
resultVars.push(`__rows_${tableName}`);
|
|
369
|
+
fetchExprs.push(`query(\`SELECT * FROM ${tableName} WHERE id = ANY($1::uuid[])\`, [[${idExprs.join(", ")}]])`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
lines.push(`${indent}const [${resultVars.join(", ")}] = await Promise.all([`);
|
|
373
|
+
for (const expr of fetchExprs)
|
|
374
|
+
lines.push(`${indent} ${expr},`);
|
|
375
|
+
lines.push(`${indent}]);`);
|
|
376
|
+
// Unpack results
|
|
377
|
+
let resultIdx = 0;
|
|
378
|
+
for (const [tableName, group] of fetchGroups) {
|
|
379
|
+
if (group.length === 1) {
|
|
380
|
+
const f = group[0];
|
|
381
|
+
lines.push(`${indent}const ${f.paramName} = ${resultVars[resultIdx]};`);
|
|
382
|
+
lines.push(`${indent}if (!${f.paramName}) {`);
|
|
383
|
+
lines.push(`${indent} return res.status(404).json({ error: { code: "NOT_FOUND", message: "${f.paramName} not found" } });`);
|
|
384
|
+
lines.push(`${indent}}`);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
const mapVar = `__map_${tableName}`;
|
|
388
|
+
lines.push(`${indent}const ${mapVar} = new Map((${resultVars[resultIdx]} as any[]).map((r: any) => [r.id, r]));`);
|
|
389
|
+
for (const f of group) {
|
|
390
|
+
const idExpr = `req.body.${f.idField} || req.params.id`;
|
|
391
|
+
lines.push(`${indent}const ${f.paramName} = ${mapVar}.get(${idExpr}) ?? null;`);
|
|
392
|
+
lines.push(`${indent}if (!${f.paramName}) {`);
|
|
393
|
+
lines.push(`${indent} return res.status(404).json({ error: { code: "NOT_FOUND", message: "${f.paramName} not found" } });`);
|
|
394
|
+
lines.push(`${indent}}`);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
resultIdx++;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
301
400
|
lines.push(``);
|
|
302
401
|
}
|
|
303
402
|
// 2. Precondition checks
|
|
@@ -305,34 +404,48 @@ function emitCapabilityBody(method, mod, system, indent = " ") {
|
|
|
305
404
|
lines.push(`${indent}// Preconditions`);
|
|
306
405
|
for (const pre of method.preconditions) {
|
|
307
406
|
try {
|
|
308
|
-
|
|
309
|
-
lines.push(compilePrecondition(expr, indent));
|
|
407
|
+
lines.push(compilePrecondition(parseExprStr(pre.expression), indent));
|
|
310
408
|
}
|
|
311
409
|
catch {
|
|
312
|
-
// Fallback: emit as comment if parsing fails
|
|
313
410
|
lines.push(`${indent}// CHECK: ${pre.description}`);
|
|
314
411
|
}
|
|
315
412
|
}
|
|
316
413
|
lines.push(``);
|
|
317
414
|
}
|
|
318
|
-
// 3. Effects
|
|
415
|
+
// 3. Effects — batch same-entity updates into single UPDATEs
|
|
319
416
|
if (method.effects.length > 0) {
|
|
320
|
-
lines.push(`${indent}// Effects (
|
|
321
|
-
const
|
|
417
|
+
lines.push(`${indent}// Effects (batched by entity to minimise round-trips)`);
|
|
418
|
+
const paramIdx = { n: 1 };
|
|
419
|
+
const compiled = method.effects.map(e => compileEffect(e, mod, system, paramIdx));
|
|
420
|
+
const { batches, standalones } = batchEffects(compiled);
|
|
421
|
+
// Emit batched UPDATEs
|
|
422
|
+
for (const batch of batches) {
|
|
423
|
+
if (batch.setClauses.length === 0)
|
|
424
|
+
continue;
|
|
425
|
+
const idParamN = paramIdx.n++;
|
|
426
|
+
const setClauses = batch.setClauses.join(", ");
|
|
427
|
+
const sql = `UPDATE ${batch.tableName} SET ${setClauses}, updated_at = NOW() WHERE id = $${idParamN} RETURNING *`;
|
|
428
|
+
const params = [...batch.paramValues, batch.idParam].join(", ");
|
|
429
|
+
const resultVar = `__upd_${batch.entityParam}`;
|
|
430
|
+
lines.push(`${indent}// ${batch.descriptions.join("; ")}`);
|
|
431
|
+
lines.push(`${indent}const ${resultVar} = await query(\`${sql}\`, [${params}]);`);
|
|
432
|
+
lines.push(`${indent}if (!${resultVar} || ${resultVar}.length === 0) {`);
|
|
433
|
+
lines.push(`${indent} throw new Error("Update failed for ${batch.entityParam}");`);
|
|
434
|
+
lines.push(`${indent}}`);
|
|
435
|
+
}
|
|
436
|
+
// Emit standalone effects (JSONB, array ops)
|
|
437
|
+
for (const s of standalones) {
|
|
438
|
+
const resultVar = `__eff_${standalones.indexOf(s)}`;
|
|
439
|
+
lines.push(`${indent}// ${s.description}`);
|
|
440
|
+
lines.push(`${indent}const ${resultVar} = await query(\`${s.sql}\`, [${s.params.join(", ")}]);`);
|
|
441
|
+
lines.push(`${indent}if (!${resultVar} || ${resultVar}.length === 0) {`);
|
|
442
|
+
lines.push(`${indent} throw new Error("Effect failed: ${s.description.replace(/"/g, '\\"')}");`);
|
|
443
|
+
lines.push(`${indent}}`);
|
|
444
|
+
}
|
|
445
|
+
// Fallback for effects that couldn't be compiled
|
|
322
446
|
for (const effect of method.effects) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
const compiled = compileEffect(effect, mod, system, paramIdx);
|
|
326
|
-
if (compiled) {
|
|
327
|
-
const resultVar = `__effect_${effectResults.length}`;
|
|
328
|
-
effectResults.push(resultVar);
|
|
329
|
-
lines.push(`${indent}const ${resultVar} = await query(\`${compiled.sql}\`, [${compiled.params.join(", ")}]);`);
|
|
330
|
-
lines.push(`${indent}if (!${resultVar} || ${resultVar}.length === 0) {`);
|
|
331
|
-
lines.push(`${indent} throw new Error("Effect failed: ${compiled.description.replace(/"/g, '\\"')}");`);
|
|
332
|
-
lines.push(`${indent}}`);
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
// Fallback for complex effects we can't compile
|
|
447
|
+
const paramIdx2 = { n: 1 };
|
|
448
|
+
if (!compileEffect(effect, mod, system, paramIdx2)) {
|
|
336
449
|
lines.push(`${indent}// EFFECT: ${effect.target} ${effect.op === "assign" ? "=" : effect.op === "add" ? "+=" : "-="} ${effect.value}`);
|
|
337
450
|
lines.push(`${indent}// TODO: Implement this effect manually`);
|
|
338
451
|
}
|
|
@@ -365,10 +478,7 @@ function emitCapabilityBody(method, mod, system, indent = " ") {
|
|
|
365
478
|
}
|
|
366
479
|
exports.emitCapabilityBody = emitCapabilityBody;
|
|
367
480
|
function buildEventPayload(method, fetches) {
|
|
368
|
-
const fields =
|
|
369
|
-
for (const fetch of fetches) {
|
|
370
|
-
fields.push(`${fetch.paramName}_id: ${fetch.paramName}?.id`);
|
|
371
|
-
}
|
|
481
|
+
const fields = fetches.map(f => `${f.paramName}_id: ${f.paramName}?.id`);
|
|
372
482
|
fields.push(`timestamp: new Date().toISOString()`);
|
|
373
483
|
fields.push(`actor_id: auth.actor_id`);
|
|
374
484
|
return `{ ${fields.join(", ")} }`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_capability.js","sourceRoot":"","sources":["../src/emit_capability.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emit_capability.js","sourceRoot":"","sources":["../src/emit_capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BoneScript Database Emitter
|
|
3
|
+
* Generates db.ts (connection pool) and migrate.ts (migration runner).
|
|
4
|
+
*/
|
|
5
|
+
import * as IR from "./ir";
|
|
6
|
+
export declare function emitDbClient(system: IR.IRSystem): string;
|
|
7
|
+
export declare function emitMigration(system: IR.IRSystem, schemas: string[]): string;
|