bonescript-compiler 0.2.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.
Files changed (146) hide show
  1. package/LICENSE +21 -0
  2. package/dist/algorithm_catalog.d.ts +32 -0
  3. package/dist/algorithm_catalog.js +323 -0
  4. package/dist/algorithm_catalog.js.map +1 -0
  5. package/dist/ast.d.ts +244 -0
  6. package/dist/ast.js +8 -0
  7. package/dist/ast.js.map +1 -0
  8. package/dist/cli.d.ts +4 -0
  9. package/dist/cli.js +605 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/emit_batch.d.ts +7 -0
  12. package/dist/emit_batch.js +133 -0
  13. package/dist/emit_batch.js.map +1 -0
  14. package/dist/emit_capability.d.ts +7 -0
  15. package/dist/emit_capability.js +376 -0
  16. package/dist/emit_capability.js.map +1 -0
  17. package/dist/emit_composition.d.ts +22 -0
  18. package/dist/emit_composition.js +184 -0
  19. package/dist/emit_composition.js.map +1 -0
  20. package/dist/emit_deploy.d.ts +9 -0
  21. package/dist/emit_deploy.js +191 -0
  22. package/dist/emit_deploy.js.map +1 -0
  23. package/dist/emit_events.d.ts +14 -0
  24. package/dist/emit_events.js +305 -0
  25. package/dist/emit_events.js.map +1 -0
  26. package/dist/emit_extras.d.ts +12 -0
  27. package/dist/emit_extras.js +234 -0
  28. package/dist/emit_extras.js.map +1 -0
  29. package/dist/emit_full.d.ts +13 -0
  30. package/dist/emit_full.js +273 -0
  31. package/dist/emit_full.js.map +1 -0
  32. package/dist/emit_maintenance.d.ts +16 -0
  33. package/dist/emit_maintenance.js +442 -0
  34. package/dist/emit_maintenance.js.map +1 -0
  35. package/dist/emit_runtime.d.ts +13 -0
  36. package/dist/emit_runtime.js +691 -0
  37. package/dist/emit_runtime.js.map +1 -0
  38. package/dist/emit_sourcemap.d.ts +29 -0
  39. package/dist/emit_sourcemap.js +123 -0
  40. package/dist/emit_sourcemap.js.map +1 -0
  41. package/dist/emit_tests.d.ts +15 -0
  42. package/dist/emit_tests.js +185 -0
  43. package/dist/emit_tests.js.map +1 -0
  44. package/dist/emit_websocket.d.ts +6 -0
  45. package/dist/emit_websocket.js +223 -0
  46. package/dist/emit_websocket.js.map +1 -0
  47. package/dist/emitter.d.ts +25 -0
  48. package/dist/emitter.js +511 -0
  49. package/dist/emitter.js.map +1 -0
  50. package/dist/extension_manager.d.ts +38 -0
  51. package/dist/extension_manager.js +170 -0
  52. package/dist/extension_manager.js.map +1 -0
  53. package/dist/formatter.d.ts +34 -0
  54. package/dist/formatter.js +317 -0
  55. package/dist/formatter.js.map +1 -0
  56. package/dist/index.d.ts +42 -0
  57. package/dist/index.js +113 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/ir.d.ts +168 -0
  60. package/dist/ir.js +10 -0
  61. package/dist/ir.js.map +1 -0
  62. package/dist/lexer.d.ts +195 -0
  63. package/dist/lexer.js +619 -0
  64. package/dist/lexer.js.map +1 -0
  65. package/dist/lowering.d.ts +25 -0
  66. package/dist/lowering.js +500 -0
  67. package/dist/lowering.js.map +1 -0
  68. package/dist/module_loader.d.ts +25 -0
  69. package/dist/module_loader.js +126 -0
  70. package/dist/module_loader.js.map +1 -0
  71. package/dist/optimizer.d.ts +26 -0
  72. package/dist/optimizer.js +158 -0
  73. package/dist/optimizer.js.map +1 -0
  74. package/dist/parse_decls.d.ts +13 -0
  75. package/dist/parse_decls.js +442 -0
  76. package/dist/parse_decls.js.map +1 -0
  77. package/dist/parse_decls2.d.ts +13 -0
  78. package/dist/parse_decls2.js +295 -0
  79. package/dist/parse_decls2.js.map +1 -0
  80. package/dist/parse_expr.d.ts +7 -0
  81. package/dist/parse_expr.js +197 -0
  82. package/dist/parse_expr.js.map +1 -0
  83. package/dist/parse_types.d.ts +6 -0
  84. package/dist/parse_types.js +51 -0
  85. package/dist/parse_types.js.map +1 -0
  86. package/dist/parser.d.ts +10 -0
  87. package/dist/parser.js +62 -0
  88. package/dist/parser.js.map +1 -0
  89. package/dist/parser_base.d.ts +19 -0
  90. package/dist/parser_base.js +50 -0
  91. package/dist/parser_base.js.map +1 -0
  92. package/dist/parser_recovery.d.ts +26 -0
  93. package/dist/parser_recovery.js +140 -0
  94. package/dist/parser_recovery.js.map +1 -0
  95. package/dist/scaffold.d.ts +13 -0
  96. package/dist/scaffold.js +376 -0
  97. package/dist/scaffold.js.map +1 -0
  98. package/dist/solver.d.ts +26 -0
  99. package/dist/solver.js +281 -0
  100. package/dist/solver.js.map +1 -0
  101. package/dist/typechecker.d.ts +52 -0
  102. package/dist/typechecker.js +534 -0
  103. package/dist/typechecker.js.map +1 -0
  104. package/dist/types.d.ts +38 -0
  105. package/dist/types.js +85 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/verifier.d.ts +46 -0
  108. package/dist/verifier.js +307 -0
  109. package/dist/verifier.js.map +1 -0
  110. package/package.json +52 -0
  111. package/src/algorithm_catalog.ts +345 -0
  112. package/src/ast.ts +334 -0
  113. package/src/cli.ts +624 -0
  114. package/src/emit_batch.ts +140 -0
  115. package/src/emit_capability.ts +436 -0
  116. package/src/emit_composition.ts +196 -0
  117. package/src/emit_deploy.ts +190 -0
  118. package/src/emit_events.ts +307 -0
  119. package/src/emit_extras.ts +240 -0
  120. package/src/emit_full.ts +309 -0
  121. package/src/emit_maintenance.ts +459 -0
  122. package/src/emit_runtime.ts +731 -0
  123. package/src/emit_sourcemap.ts +140 -0
  124. package/src/emit_tests.ts +205 -0
  125. package/src/emit_websocket.ts +229 -0
  126. package/src/emitter.ts +566 -0
  127. package/src/extension_manager.ts +187 -0
  128. package/src/formatter.ts +297 -0
  129. package/src/index.ts +88 -0
  130. package/src/ir.ts +215 -0
  131. package/src/lexer.ts +630 -0
  132. package/src/lowering.ts +556 -0
  133. package/src/module_loader.ts +114 -0
  134. package/src/optimizer.ts +196 -0
  135. package/src/parse_decls.ts +409 -0
  136. package/src/parse_decls2.ts +244 -0
  137. package/src/parse_expr.ts +197 -0
  138. package/src/parse_types.ts +54 -0
  139. package/src/parser.ts +64 -0
  140. package/src/parser_base.ts +57 -0
  141. package/src/parser_recovery.ts +153 -0
  142. package/src/scaffold.ts +375 -0
  143. package/src/solver.ts +330 -0
  144. package/src/typechecker.ts +591 -0
  145. package/src/types.ts +122 -0
  146. package/src/verifier.ts +348 -0
@@ -0,0 +1,511 @@
1
+ "use strict";
2
+ /**
3
+ * BoneScript Code Emitter — Stage 6 of the compilation pipeline.
4
+ * Implements spec/09_CODEGEN.md.
5
+ *
6
+ * Generates target code from the IR. Every IR node maps to code.
7
+ * No orphan logic. No hidden behavior. Deterministic formatting.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.Emitter = void 0;
11
+ // ─── Type Mapping ────────────────────────────────────────────────────────────
12
+ const TS_TYPE_MAP = {
13
+ string: "string",
14
+ uint: "number",
15
+ int: "number",
16
+ float: "number",
17
+ bool: "boolean",
18
+ timestamp: "Date",
19
+ uuid: "string",
20
+ bytes: "Buffer",
21
+ json: "unknown",
22
+ };
23
+ const SQL_TYPE_MAP = {
24
+ string: "VARCHAR",
25
+ uint: "BIGINT",
26
+ int: "BIGINT",
27
+ float: "DOUBLE PRECISION",
28
+ bool: "BOOLEAN",
29
+ timestamp: "TIMESTAMPTZ",
30
+ uuid: "UUID",
31
+ bytes: "BYTEA",
32
+ json: "JSONB",
33
+ };
34
+ function toTsType(irType) {
35
+ if (TS_TYPE_MAP[irType])
36
+ return TS_TYPE_MAP[irType];
37
+ const listMatch = irType.match(/^list<(.+)>$/);
38
+ if (listMatch)
39
+ return `${toTsType(listMatch[1])}[]`;
40
+ const setMatch = irType.match(/^set<(.+)>$/);
41
+ if (setMatch)
42
+ return `Set<${toTsType(setMatch[1])}>`;
43
+ const mapMatch = irType.match(/^map<(.+),\s*(.+)>$/);
44
+ if (mapMatch)
45
+ return `Map<${toTsType(mapMatch[1])}, ${toTsType(mapMatch[2])}>`;
46
+ const optMatch = irType.match(/^optional<(.+)>$/);
47
+ if (optMatch)
48
+ return `${toTsType(optMatch[1])} | null`;
49
+ // Entity reference or unknown
50
+ return irType;
51
+ }
52
+ function toSqlType(irType) {
53
+ if (SQL_TYPE_MAP[irType])
54
+ return SQL_TYPE_MAP[irType];
55
+ if (irType.startsWith("list<") || irType.startsWith("set<") || irType.startsWith("map<"))
56
+ return "JSONB";
57
+ if (irType.startsWith("optional<"))
58
+ return toSqlType(irType.slice(9, -1));
59
+ return "JSONB";
60
+ }
61
+ function toSnakeCase(s) {
62
+ return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
63
+ }
64
+ // ─── Emitter ─────────────────────────────────────────────────────────────────
65
+ class Emitter {
66
+ emit(system) {
67
+ const files = [];
68
+ // 1. Schema files (SQL)
69
+ for (const mod of system.modules) {
70
+ if (mod.kind === "data_store" || mod.kind === "api_service") {
71
+ for (const model of mod.models) {
72
+ files.push(this.emitSchema(model, mod, system));
73
+ }
74
+ }
75
+ }
76
+ // 2. Type definition files (TypeScript)
77
+ files.push(this.emitSharedTypes(system));
78
+ // 3. Event types (TypeScript)
79
+ if (system.events.length > 0) {
80
+ files.push(this.emitEventTypes(system));
81
+ }
82
+ // 4. Service files (TypeScript)
83
+ for (const mod of system.modules) {
84
+ if (mod.kind === "api_service") {
85
+ files.push(this.emitService(mod, system));
86
+ }
87
+ }
88
+ // 5. State machine files (TypeScript)
89
+ for (const mod of system.modules) {
90
+ for (const sm of mod.state_machines) {
91
+ files.push(this.emitStateMachine(sm, mod, system));
92
+ }
93
+ }
94
+ // 6. Config files (YAML)
95
+ files.push(this.emitServiceConfig(system));
96
+ // 7. Infrastructure config (YAML)
97
+ files.push(this.emitInfraConfig(system));
98
+ return files;
99
+ }
100
+ // ─── SQL Schema ────────────────────────────────────────────────────────────
101
+ emitSchema(model, mod, system) {
102
+ const tableName = toSnakeCase(model.name) + "s";
103
+ const lines = [];
104
+ lines.push(`-- Generated by BoneScript compiler. DO NOT EDIT.`);
105
+ lines.push(`-- Source: ${system.source_hash}`);
106
+ lines.push(`-- Module: ${mod.name}`);
107
+ lines.push(``);
108
+ lines.push(`CREATE TABLE IF NOT EXISTS ${tableName} (`);
109
+ const fieldLines = [];
110
+ for (const field of model.fields) {
111
+ let line = ` ${field.name} ${toSqlType(field.type)}`;
112
+ if (!field.nullable)
113
+ line += " NOT NULL";
114
+ if (field.default_value) {
115
+ if (field.default_value === "gen_random_uuid()")
116
+ line += " DEFAULT gen_random_uuid()";
117
+ else if (field.default_value === "now()")
118
+ line += " DEFAULT NOW()";
119
+ else
120
+ line += ` DEFAULT ${field.default_value}`;
121
+ }
122
+ else if (field.name === "created_at" || field.name === "updated_at") {
123
+ // Always add DEFAULT NOW() for timestamp audit fields
124
+ line += " DEFAULT NOW()";
125
+ }
126
+ else if (field.name === "id" && field.type === "uuid") {
127
+ // Always add DEFAULT gen_random_uuid() for uuid primary keys
128
+ line += " DEFAULT gen_random_uuid()";
129
+ }
130
+ if (field.name === model.primary_key)
131
+ line += " PRIMARY KEY";
132
+ fieldLines.push(line);
133
+ }
134
+ // Add unique constraints
135
+ for (const c of model.constraints) {
136
+ if (c.kind === "unique") {
137
+ fieldLines.push(` CONSTRAINT ${tableName}_${c.target}_unique UNIQUE (${c.target})`);
138
+ }
139
+ }
140
+ // Add foreign key constraints from relations
141
+ for (const rel of mod.relations || []) {
142
+ if (rel.kind === "belongs_to") {
143
+ // belongs_to: FK is on this table
144
+ fieldLines.push(` CONSTRAINT fk_${tableName}_${rel.foreign_key} FOREIGN KEY (${rel.foreign_key}) REFERENCES ${rel.to_table}(id) ON DELETE CASCADE`);
145
+ }
146
+ }
147
+ lines.push(fieldLines.join(",\n"));
148
+ lines.push(`);`);
149
+ lines.push(``);
150
+ // Indexes
151
+ for (const idx of model.indexes) {
152
+ const idxName = `idx_${tableName}_${idx.fields.join("_")}`;
153
+ const unique = idx.unique ? "UNIQUE " : "";
154
+ lines.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idxName} ON ${tableName} (${idx.fields.join(", ")});`);
155
+ }
156
+ // FK indexes for belongs_to relations
157
+ for (const rel of mod.relations || []) {
158
+ if (rel.kind === "belongs_to") {
159
+ lines.push(`CREATE INDEX IF NOT EXISTS idx_${tableName}_${rel.foreign_key} ON ${tableName} (${rel.foreign_key});`);
160
+ }
161
+ }
162
+ // Junction tables for many_to_many
163
+ for (const rel of mod.relations || []) {
164
+ if (rel.kind === "many_to_many" && rel.junction_table) {
165
+ lines.push(``);
166
+ lines.push(`CREATE TABLE IF NOT EXISTS ${rel.junction_table} (`);
167
+ lines.push(` ${rel.from_table.slice(0, -1)}_id UUID NOT NULL REFERENCES ${rel.from_table}(id) ON DELETE CASCADE,`);
168
+ lines.push(` ${rel.to_table.slice(0, -1)}_id UUID NOT NULL REFERENCES ${rel.to_table}(id) ON DELETE CASCADE,`);
169
+ lines.push(` created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),`);
170
+ lines.push(` PRIMARY KEY (${rel.from_table.slice(0, -1)}_id, ${rel.to_table.slice(0, -1)}_id)`);
171
+ lines.push(`);`);
172
+ lines.push(`CREATE INDEX IF NOT EXISTS idx_${rel.junction_table}_${rel.from_table.slice(0, -1)} ON ${rel.junction_table} (${rel.from_table.slice(0, -1)}_id);`);
173
+ lines.push(`CREATE INDEX IF NOT EXISTS idx_${rel.junction_table}_${rel.to_table.slice(0, -1)} ON ${rel.junction_table} (${rel.to_table.slice(0, -1)}_id);`);
174
+ }
175
+ }
176
+ // Updated_at trigger
177
+ if (model.fields.some(f => f.name === "updated_at")) {
178
+ lines.push(``);
179
+ lines.push(`CREATE OR REPLACE FUNCTION update_${tableName}_updated_at()`);
180
+ lines.push(`RETURNS TRIGGER AS $$`);
181
+ lines.push(`BEGIN`);
182
+ lines.push(` NEW.updated_at = NOW();`);
183
+ lines.push(` RETURN NEW;`);
184
+ lines.push(`END;`);
185
+ lines.push(`$$ LANGUAGE plpgsql;`);
186
+ lines.push(``);
187
+ lines.push(`CREATE TRIGGER trg_${tableName}_updated_at`);
188
+ lines.push(` BEFORE UPDATE ON ${tableName}`);
189
+ lines.push(` FOR EACH ROW`);
190
+ lines.push(` EXECUTE FUNCTION update_${tableName}_updated_at();`);
191
+ }
192
+ lines.push(``);
193
+ return {
194
+ path: `schema/${toSnakeCase(model.name)}.sql`,
195
+ content: lines.join("\n"),
196
+ language: "sql",
197
+ source_module: mod.id,
198
+ };
199
+ }
200
+ // ─── Shared Types ──────────────────────────────────────────────────────────
201
+ emitSharedTypes(system) {
202
+ const lines = [];
203
+ lines.push(`// Generated by BoneScript compiler. DO NOT EDIT.`);
204
+ lines.push(`// Source: ${system.source_hash}`);
205
+ lines.push(``);
206
+ for (const mod of system.modules) {
207
+ for (const model of mod.models) {
208
+ lines.push(`export interface ${model.name} {`);
209
+ for (const field of model.fields) {
210
+ const nullable = field.nullable ? " | null" : "";
211
+ lines.push(` ${field.name}: ${toTsType(field.type)}${nullable};`);
212
+ }
213
+ lines.push(`}`);
214
+ lines.push(``);
215
+ }
216
+ }
217
+ // Common types
218
+ lines.push(`export interface ServiceError {`);
219
+ lines.push(` code: string;`);
220
+ lines.push(` message: string;`);
221
+ lines.push(` details?: unknown;`);
222
+ lines.push(`}`);
223
+ lines.push(``);
224
+ lines.push(`export type Result<T, E = ServiceError> =`);
225
+ lines.push(` | { ok: true; value: T }`);
226
+ lines.push(` | { ok: false; error: E };`);
227
+ lines.push(``);
228
+ lines.push(`export interface RequestContext {`);
229
+ lines.push(` authenticated: boolean;`);
230
+ lines.push(` actor_id: string | null;`);
231
+ lines.push(` trace_id: string;`);
232
+ lines.push(` correlation_id: string;`);
233
+ lines.push(`}`);
234
+ lines.push(``);
235
+ lines.push(`export interface PaginatedResult<T> {`);
236
+ lines.push(` items: T[];`);
237
+ lines.push(` total: number;`);
238
+ lines.push(` page: number;`);
239
+ lines.push(` page_size: number;`);
240
+ lines.push(`}`);
241
+ lines.push(``);
242
+ return {
243
+ path: `types/models.ts`,
244
+ content: lines.join("\n"),
245
+ language: "typescript",
246
+ source_module: "shared",
247
+ };
248
+ }
249
+ // ─── Event Types ───────────────────────────────────────────────────────────
250
+ emitEventTypes(system) {
251
+ const lines = [];
252
+ lines.push(`// Generated by BoneScript compiler. DO NOT EDIT.`);
253
+ lines.push(`// Source: ${system.source_hash}`);
254
+ lines.push(``);
255
+ for (const ev of system.events) {
256
+ lines.push(`export interface ${ev.name}Event {`);
257
+ lines.push(` type: "${ev.name}";`);
258
+ lines.push(` payload: {`);
259
+ for (const field of ev.payload) {
260
+ const nullable = field.nullable ? " | null" : "";
261
+ lines.push(` ${field.name}: ${toTsType(field.type)}${nullable};`);
262
+ }
263
+ lines.push(` };`);
264
+ lines.push(` metadata: {`);
265
+ lines.push(` source: string;`);
266
+ lines.push(` timestamp: Date;`);
267
+ lines.push(` correlation_id: string;`);
268
+ lines.push(` causation_id: string;`);
269
+ lines.push(` };`);
270
+ lines.push(`}`);
271
+ lines.push(``);
272
+ }
273
+ // Union type of all events
274
+ const eventNames = system.events.map(e => `${e.name}Event`);
275
+ lines.push(`export type SystemEvent = ${eventNames.join(" | ")};`);
276
+ lines.push(``);
277
+ // Event bus interface
278
+ lines.push(`export interface EventBus {`);
279
+ lines.push(` publish(event: SystemEvent): Promise<void>;`);
280
+ lines.push(` subscribe(type: string, handler: (event: SystemEvent) => Promise<void>): void;`);
281
+ lines.push(`}`);
282
+ lines.push(``);
283
+ return {
284
+ path: `types/events.ts`,
285
+ content: lines.join("\n"),
286
+ language: "typescript",
287
+ source_module: "shared",
288
+ };
289
+ }
290
+ // ─── Service Implementation ────────────────────────────────────────────────
291
+ emitService(mod, system) {
292
+ const lines = [];
293
+ lines.push(`// Generated by BoneScript compiler. DO NOT EDIT.`);
294
+ lines.push(`// Source: ${system.source_hash}`);
295
+ lines.push(`// Module: ${mod.name} (${mod.kind})`);
296
+ lines.push(``);
297
+ lines.push(`import { Result, RequestContext, ServiceError, PaginatedResult } from "../types/models";`);
298
+ lines.push(``);
299
+ for (const iface of mod.interfaces) {
300
+ // Interface definition
301
+ lines.push(`export interface ${iface.name} {`);
302
+ for (const method of iface.methods) {
303
+ const params = method.input.map(f => `${f.name}: ${toTsType(f.type)}`).join(", ");
304
+ const ctxParam = method.authenticated ? "ctx: RequestContext" : "";
305
+ const allParams = [ctxParam, params].filter(Boolean).join(", ");
306
+ lines.push(` ${method.name}(${allParams}): Promise<Result<${toTsType(method.output)}>>;`);
307
+ }
308
+ lines.push(`}`);
309
+ lines.push(``);
310
+ // Implementation class
311
+ lines.push(`export class ${mod.name} implements ${iface.name} {`);
312
+ for (const method of iface.methods) {
313
+ lines.push(this.emitMethod(method));
314
+ }
315
+ lines.push(`}`);
316
+ lines.push(``);
317
+ }
318
+ return {
319
+ path: `services/${toSnakeCase(mod.name)}.ts`,
320
+ content: lines.join("\n"),
321
+ language: "typescript",
322
+ source_module: mod.id,
323
+ };
324
+ }
325
+ emitMethod(method) {
326
+ const lines = [];
327
+ const params = method.input.map(f => `${f.name}: ${toTsType(f.type)}`).join(", ");
328
+ const ctxParam = method.authenticated ? "ctx: RequestContext" : "";
329
+ const allParams = [ctxParam, params].filter(Boolean).join(", ");
330
+ lines.push(` async ${method.name}(${allParams}): Promise<Result<${toTsType(method.output)}>> {`);
331
+ // Auth check
332
+ if (method.authenticated) {
333
+ lines.push(` // [Guard] Authentication required`);
334
+ lines.push(` if (!ctx.authenticated) {`);
335
+ lines.push(` return { ok: false, error: { code: "UNAUTHORIZED", message: "Authentication required" } };`);
336
+ lines.push(` }`);
337
+ lines.push(``);
338
+ }
339
+ // Preconditions
340
+ if (method.preconditions.length > 0) {
341
+ lines.push(` // [Preconditions]`);
342
+ for (const pre of method.preconditions) {
343
+ lines.push(` // CHECK: ${pre.description}`);
344
+ }
345
+ lines.push(``);
346
+ }
347
+ // Effects
348
+ if (method.effects.length > 0) {
349
+ lines.push(` // [Effects] Applied in declaration order (deterministic)`);
350
+ for (const eff of method.effects) {
351
+ const opSymbol = eff.op === "assign" ? "=" : eff.op === "add" ? "+=" : "-=";
352
+ lines.push(` // EFFECT: ${eff.target} ${opSymbol} ${eff.value}`);
353
+ }
354
+ lines.push(``);
355
+ }
356
+ // Emissions
357
+ if (method.emissions.length > 0) {
358
+ lines.push(` // [Events]`);
359
+ for (const ev of method.emissions) {
360
+ lines.push(` // EMIT: ${ev}`);
361
+ }
362
+ lines.push(``);
363
+ }
364
+ lines.push(` // TODO: Implementation`);
365
+ lines.push(` throw new Error("Not implemented: ${method.name}");`);
366
+ lines.push(` }`);
367
+ lines.push(``);
368
+ return lines.join("\n");
369
+ }
370
+ // ─── State Machine ─────────────────────────────────────────────────────────
371
+ emitStateMachine(sm, mod, system) {
372
+ const lines = [];
373
+ lines.push(`// Generated by BoneScript compiler. DO NOT EDIT.`);
374
+ lines.push(`// Source: ${system.source_hash}`);
375
+ lines.push(`// Entity: ${sm.entity}`);
376
+ lines.push(``);
377
+ // State type
378
+ const stateUnion = sm.states.map(s => `"${s}"`).join(" | ");
379
+ lines.push(`export type ${sm.entity}State = ${stateUnion};`);
380
+ lines.push(``);
381
+ // Transition table
382
+ lines.push(`export const ${sm.entity.toUpperCase()}_TRANSITIONS: Record<${sm.entity}State, Record<string, ${sm.entity}State>> = {`);
383
+ for (const state of sm.states) {
384
+ const transitions = sm.transitions.filter(t => t.from === state);
385
+ const entries = transitions.map(t => `"${t.trigger}": "${t.to}"`).join(", ");
386
+ lines.push(` "${state}": { ${entries} },`);
387
+ }
388
+ lines.push(`};`);
389
+ lines.push(``);
390
+ // Transition function
391
+ lines.push(`export interface TransitionError {`);
392
+ lines.push(` current: ${sm.entity}State;`);
393
+ lines.push(` trigger: string;`);
394
+ lines.push(` message: string;`);
395
+ lines.push(`}`);
396
+ lines.push(``);
397
+ lines.push(`export function transition${sm.entity}(`);
398
+ lines.push(` current: ${sm.entity}State,`);
399
+ lines.push(` trigger: string`);
400
+ lines.push(`): { ok: true; state: ${sm.entity}State } | { ok: false; error: TransitionError } {`);
401
+ lines.push(` const next = ${sm.entity.toUpperCase()}_TRANSITIONS[current]?.[trigger];`);
402
+ lines.push(` if (!next) {`);
403
+ lines.push(` return {`);
404
+ lines.push(` ok: false,`);
405
+ lines.push(` error: {`);
406
+ lines.push(` current,`);
407
+ lines.push(` trigger,`);
408
+ lines.push(` message: \`Invalid transition: \${current} --[\${trigger}]--> ?\``);
409
+ lines.push(` }`);
410
+ lines.push(` };`);
411
+ lines.push(` }`);
412
+ lines.push(` return { ok: true, state: next };`);
413
+ lines.push(`}`);
414
+ lines.push(``);
415
+ // Initial state
416
+ lines.push(`export const ${sm.entity.toUpperCase()}_INITIAL: ${sm.entity}State = "${sm.initial}";`);
417
+ lines.push(``);
418
+ return {
419
+ path: `services/state_machines/${toSnakeCase(sm.entity)}_states.ts`,
420
+ content: lines.join("\n"),
421
+ language: "typescript",
422
+ source_module: mod.id,
423
+ };
424
+ }
425
+ // ─── Service Config (YAML) ─────────────────────────────────────────────────
426
+ emitServiceConfig(system) {
427
+ const lines = [];
428
+ lines.push(`# Generated by BoneScript compiler. DO NOT EDIT.`);
429
+ lines.push(`# Source: ${system.source_hash}`);
430
+ lines.push(``);
431
+ lines.push(`system:`);
432
+ lines.push(` name: ${system.name}`);
433
+ lines.push(` version: ${system.version}`);
434
+ lines.push(` domain: ${system.domain || "generic"}`);
435
+ lines.push(``);
436
+ lines.push(`services:`);
437
+ for (const mod of system.modules) {
438
+ if (mod.kind === "api_service" || mod.kind === "realtime_service") {
439
+ lines.push(` - name: ${toSnakeCase(mod.name)}`);
440
+ lines.push(` kind: ${mod.kind}`);
441
+ lines.push(` dependencies:`);
442
+ for (const dep of mod.dependencies) {
443
+ const depMod = system.modules.find(m => m.id === dep);
444
+ if (depMod)
445
+ lines.push(` - ${toSnakeCase(depMod.name)}`);
446
+ }
447
+ for (const [key, val] of Object.entries(mod.config)) {
448
+ lines.push(` ${key}: ${val}`);
449
+ }
450
+ lines.push(``);
451
+ }
452
+ }
453
+ return {
454
+ path: `config/services.yaml`,
455
+ content: lines.join("\n"),
456
+ language: "yaml",
457
+ source_module: "config",
458
+ };
459
+ }
460
+ // ─── Infrastructure Config (YAML) ──────────────────────────────────────────
461
+ emitInfraConfig(system) {
462
+ const lines = [];
463
+ lines.push(`# Generated by BoneScript compiler. DO NOT EDIT.`);
464
+ lines.push(`# Source: ${system.source_hash}`);
465
+ lines.push(``);
466
+ lines.push(`infrastructure:`);
467
+ // Data stores
468
+ lines.push(` datastores:`);
469
+ for (const mod of system.modules) {
470
+ if (mod.kind === "data_store") {
471
+ lines.push(` - name: ${toSnakeCase(mod.name)}`);
472
+ lines.push(` engine: ${mod.config["engine"] || "postgresql"}`);
473
+ lines.push(` replicas: ${mod.config["replicas"] || 1}`);
474
+ if (mod.config["retention_ms"])
475
+ lines.push(` retention_ms: ${mod.config["retention_ms"]}`);
476
+ if (mod.config["partition_key"])
477
+ lines.push(` partition_key: ${mod.config["partition_key"]}`);
478
+ lines.push(``);
479
+ }
480
+ }
481
+ // Gateway
482
+ lines.push(` gateway:`);
483
+ const gw = system.modules.find(m => m.kind === "gateway");
484
+ if (gw) {
485
+ for (const [key, val] of Object.entries(gw.config)) {
486
+ lines.push(` ${key}: ${val}`);
487
+ }
488
+ }
489
+ lines.push(``);
490
+ // Events
491
+ if (system.events.length > 0) {
492
+ lines.push(` events:`);
493
+ for (const ev of system.events) {
494
+ lines.push(` - name: ${ev.name}`);
495
+ lines.push(` delivery: ${ev.delivery}`);
496
+ lines.push(` ordering: ${ev.ordering}`);
497
+ if (ev.ttl_ms)
498
+ lines.push(` ttl_ms: ${ev.ttl_ms}`);
499
+ lines.push(``);
500
+ }
501
+ }
502
+ return {
503
+ path: `config/infrastructure.yaml`,
504
+ content: lines.join("\n"),
505
+ language: "yaml",
506
+ source_module: "config",
507
+ };
508
+ }
509
+ }
510
+ exports.Emitter = Emitter;
511
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * BoneScript Extension Manager
3
+ *
4
+ * Handles the escape hatch system: extension_point declarations.
5
+ *
6
+ * How it works:
7
+ * 1. Compiler emits a stub with sentinel comments around the implementation region.
8
+ * 2. On recompile, the merger reads the existing output file and extracts any
9
+ * user code between the sentinels.
10
+ * 3. The user's code is re-injected into the newly generated file.
11
+ * 4. If stable: true and no implementation exists, compilation fails.
12
+ *
13
+ * Sentinel format (must be unique and parseable):
14
+ * // <bonescript:ext:NAME:begin>
15
+ * ... user code here ...
16
+ * // <bonescript:ext:NAME:end>
17
+ */
18
+ import * as AST from "./ast";
19
+ export declare function beginSentinel(name: string): string;
20
+ export declare function endSentinel(name: string): string;
21
+ export declare function isStubImplementation(code: string): boolean;
22
+ export declare function emitExtensionPointStub(ext: AST.ExtensionPointDeclNode): string;
23
+ export interface ExtractedImpl {
24
+ name: string;
25
+ code: string;
26
+ isStub: boolean;
27
+ }
28
+ export declare function extractImplementations(existingContent: string): Map<string, ExtractedImpl>;
29
+ export declare function mergeImplementations(newContent: string, existingImpls: Map<string, ExtractedImpl>): string;
30
+ export interface ExtensionValidationError {
31
+ name: string;
32
+ message: string;
33
+ }
34
+ export declare function validateExtensions(extensions: AST.ExtensionPointDeclNode[], existingImpls: Map<string, ExtractedImpl>): ExtensionValidationError[];
35
+ export declare function mergeWithExisting(newContent: string, outputPath: string, extensions: AST.ExtensionPointDeclNode[]): {
36
+ content: string;
37
+ validationErrors: ExtensionValidationError[];
38
+ };