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.
- package/LICENSE +21 -0
- package/dist/algorithm_catalog.d.ts +32 -0
- package/dist/algorithm_catalog.js +323 -0
- package/dist/algorithm_catalog.js.map +1 -0
- package/dist/ast.d.ts +244 -0
- package/dist/ast.js +8 -0
- package/dist/ast.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +605 -0
- package/dist/cli.js.map +1 -0
- package/dist/emit_batch.d.ts +7 -0
- package/dist/emit_batch.js +133 -0
- package/dist/emit_batch.js.map +1 -0
- package/dist/emit_capability.d.ts +7 -0
- package/dist/emit_capability.js +376 -0
- package/dist/emit_capability.js.map +1 -0
- package/dist/emit_composition.d.ts +22 -0
- package/dist/emit_composition.js +184 -0
- package/dist/emit_composition.js.map +1 -0
- package/dist/emit_deploy.d.ts +9 -0
- package/dist/emit_deploy.js +191 -0
- package/dist/emit_deploy.js.map +1 -0
- package/dist/emit_events.d.ts +14 -0
- package/dist/emit_events.js +305 -0
- package/dist/emit_events.js.map +1 -0
- package/dist/emit_extras.d.ts +12 -0
- package/dist/emit_extras.js +234 -0
- package/dist/emit_extras.js.map +1 -0
- package/dist/emit_full.d.ts +13 -0
- package/dist/emit_full.js +273 -0
- package/dist/emit_full.js.map +1 -0
- package/dist/emit_maintenance.d.ts +16 -0
- package/dist/emit_maintenance.js +442 -0
- package/dist/emit_maintenance.js.map +1 -0
- package/dist/emit_runtime.d.ts +13 -0
- package/dist/emit_runtime.js +691 -0
- package/dist/emit_runtime.js.map +1 -0
- package/dist/emit_sourcemap.d.ts +29 -0
- package/dist/emit_sourcemap.js +123 -0
- package/dist/emit_sourcemap.js.map +1 -0
- package/dist/emit_tests.d.ts +15 -0
- package/dist/emit_tests.js +185 -0
- package/dist/emit_tests.js.map +1 -0
- package/dist/emit_websocket.d.ts +6 -0
- package/dist/emit_websocket.js +223 -0
- package/dist/emit_websocket.js.map +1 -0
- package/dist/emitter.d.ts +25 -0
- package/dist/emitter.js +511 -0
- package/dist/emitter.js.map +1 -0
- package/dist/extension_manager.d.ts +38 -0
- package/dist/extension_manager.js +170 -0
- package/dist/extension_manager.js.map +1 -0
- package/dist/formatter.d.ts +34 -0
- package/dist/formatter.js +317 -0
- package/dist/formatter.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/ir.d.ts +168 -0
- package/dist/ir.js +10 -0
- package/dist/ir.js.map +1 -0
- package/dist/lexer.d.ts +195 -0
- package/dist/lexer.js +619 -0
- package/dist/lexer.js.map +1 -0
- package/dist/lowering.d.ts +25 -0
- package/dist/lowering.js +500 -0
- package/dist/lowering.js.map +1 -0
- package/dist/module_loader.d.ts +25 -0
- package/dist/module_loader.js +126 -0
- package/dist/module_loader.js.map +1 -0
- package/dist/optimizer.d.ts +26 -0
- package/dist/optimizer.js +158 -0
- package/dist/optimizer.js.map +1 -0
- package/dist/parse_decls.d.ts +13 -0
- package/dist/parse_decls.js +442 -0
- package/dist/parse_decls.js.map +1 -0
- package/dist/parse_decls2.d.ts +13 -0
- package/dist/parse_decls2.js +295 -0
- package/dist/parse_decls2.js.map +1 -0
- package/dist/parse_expr.d.ts +7 -0
- package/dist/parse_expr.js +197 -0
- package/dist/parse_expr.js.map +1 -0
- package/dist/parse_types.d.ts +6 -0
- package/dist/parse_types.js +51 -0
- package/dist/parse_types.js.map +1 -0
- package/dist/parser.d.ts +10 -0
- package/dist/parser.js +62 -0
- package/dist/parser.js.map +1 -0
- package/dist/parser_base.d.ts +19 -0
- package/dist/parser_base.js +50 -0
- package/dist/parser_base.js.map +1 -0
- package/dist/parser_recovery.d.ts +26 -0
- package/dist/parser_recovery.js +140 -0
- package/dist/parser_recovery.js.map +1 -0
- package/dist/scaffold.d.ts +13 -0
- package/dist/scaffold.js +376 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/solver.d.ts +26 -0
- package/dist/solver.js +281 -0
- package/dist/solver.js.map +1 -0
- package/dist/typechecker.d.ts +52 -0
- package/dist/typechecker.js +534 -0
- package/dist/typechecker.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.js +85 -0
- package/dist/types.js.map +1 -0
- package/dist/verifier.d.ts +46 -0
- package/dist/verifier.js +307 -0
- package/dist/verifier.js.map +1 -0
- package/package.json +52 -0
- package/src/algorithm_catalog.ts +345 -0
- package/src/ast.ts +334 -0
- package/src/cli.ts +624 -0
- package/src/emit_batch.ts +140 -0
- package/src/emit_capability.ts +436 -0
- package/src/emit_composition.ts +196 -0
- package/src/emit_deploy.ts +190 -0
- package/src/emit_events.ts +307 -0
- package/src/emit_extras.ts +240 -0
- package/src/emit_full.ts +309 -0
- package/src/emit_maintenance.ts +459 -0
- package/src/emit_runtime.ts +731 -0
- package/src/emit_sourcemap.ts +140 -0
- package/src/emit_tests.ts +205 -0
- package/src/emit_websocket.ts +229 -0
- package/src/emitter.ts +566 -0
- package/src/extension_manager.ts +187 -0
- package/src/formatter.ts +297 -0
- package/src/index.ts +88 -0
- package/src/ir.ts +215 -0
- package/src/lexer.ts +630 -0
- package/src/lowering.ts +556 -0
- package/src/module_loader.ts +114 -0
- package/src/optimizer.ts +196 -0
- package/src/parse_decls.ts +409 -0
- package/src/parse_decls2.ts +244 -0
- package/src/parse_expr.ts +197 -0
- package/src/parse_types.ts +54 -0
- package/src/parser.ts +64 -0
- package/src/parser_base.ts +57 -0
- package/src/parser_recovery.ts +153 -0
- package/src/scaffold.ts +375 -0
- package/src/solver.ts +330 -0
- package/src/typechecker.ts +591 -0
- package/src/types.ts +122 -0
- package/src/verifier.ts +348 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BoneScript Compiler — Public API
|
|
4
|
+
* Import this module to use the compiler programmatically.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
+
if (mod && mod.__esModule) return mod;
|
|
24
|
+
var result = {};
|
|
25
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
+
__setModuleDefault(result, mod);
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.compile = exports.validateExtensions = exports.extractImplementations = exports.mergeWithExisting = exports.listByCategory = exports.listAlgorithms = exports.lookupAlgorithm = exports.IR = exports.AST = exports.scaffold = exports.Formatter = exports.ModuleLoader = exports.optimize = exports.Verifier = exports.FullEmitter = exports.ConstraintSolver = exports.Lowering = exports.TypeChecker = exports.RecoveringParser = exports.ParseError = exports.Parser = exports.TokenKind = exports.LexerError = exports.Lexer = void 0;
|
|
31
|
+
// Core pipeline
|
|
32
|
+
var lexer_1 = require("./lexer");
|
|
33
|
+
Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return lexer_1.Lexer; } });
|
|
34
|
+
Object.defineProperty(exports, "LexerError", { enumerable: true, get: function () { return lexer_1.LexerError; } });
|
|
35
|
+
Object.defineProperty(exports, "TokenKind", { enumerable: true, get: function () { return lexer_1.TokenKind; } });
|
|
36
|
+
var parser_1 = require("./parser");
|
|
37
|
+
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_1.Parser; } });
|
|
38
|
+
Object.defineProperty(exports, "ParseError", { enumerable: true, get: function () { return parser_1.ParseError; } });
|
|
39
|
+
var parser_recovery_1 = require("./parser_recovery");
|
|
40
|
+
Object.defineProperty(exports, "RecoveringParser", { enumerable: true, get: function () { return parser_recovery_1.RecoveringParser; } });
|
|
41
|
+
var typechecker_1 = require("./typechecker");
|
|
42
|
+
Object.defineProperty(exports, "TypeChecker", { enumerable: true, get: function () { return typechecker_1.TypeChecker; } });
|
|
43
|
+
var lowering_1 = require("./lowering");
|
|
44
|
+
Object.defineProperty(exports, "Lowering", { enumerable: true, get: function () { return lowering_1.Lowering; } });
|
|
45
|
+
var solver_1 = require("./solver");
|
|
46
|
+
Object.defineProperty(exports, "ConstraintSolver", { enumerable: true, get: function () { return solver_1.ConstraintSolver; } });
|
|
47
|
+
var emit_full_1 = require("./emit_full");
|
|
48
|
+
Object.defineProperty(exports, "FullEmitter", { enumerable: true, get: function () { return emit_full_1.FullEmitter; } });
|
|
49
|
+
var verifier_1 = require("./verifier");
|
|
50
|
+
Object.defineProperty(exports, "Verifier", { enumerable: true, get: function () { return verifier_1.Verifier; } });
|
|
51
|
+
var optimizer_1 = require("./optimizer");
|
|
52
|
+
Object.defineProperty(exports, "optimize", { enumerable: true, get: function () { return optimizer_1.optimize; } });
|
|
53
|
+
var module_loader_1 = require("./module_loader");
|
|
54
|
+
Object.defineProperty(exports, "ModuleLoader", { enumerable: true, get: function () { return module_loader_1.ModuleLoader; } });
|
|
55
|
+
var formatter_1 = require("./formatter");
|
|
56
|
+
Object.defineProperty(exports, "Formatter", { enumerable: true, get: function () { return formatter_1.Formatter; } });
|
|
57
|
+
var scaffold_1 = require("./scaffold");
|
|
58
|
+
Object.defineProperty(exports, "scaffold", { enumerable: true, get: function () { return scaffold_1.scaffold; } });
|
|
59
|
+
// AST types
|
|
60
|
+
exports.AST = __importStar(require("./ast"));
|
|
61
|
+
// IR types
|
|
62
|
+
exports.IR = __importStar(require("./ir"));
|
|
63
|
+
// Algorithm catalog
|
|
64
|
+
var algorithm_catalog_1 = require("./algorithm_catalog");
|
|
65
|
+
Object.defineProperty(exports, "lookupAlgorithm", { enumerable: true, get: function () { return algorithm_catalog_1.lookupAlgorithm; } });
|
|
66
|
+
Object.defineProperty(exports, "listAlgorithms", { enumerable: true, get: function () { return algorithm_catalog_1.listAlgorithms; } });
|
|
67
|
+
Object.defineProperty(exports, "listByCategory", { enumerable: true, get: function () { return algorithm_catalog_1.listByCategory; } });
|
|
68
|
+
// Extension system
|
|
69
|
+
var extension_manager_1 = require("./extension_manager");
|
|
70
|
+
Object.defineProperty(exports, "mergeWithExisting", { enumerable: true, get: function () { return extension_manager_1.mergeWithExisting; } });
|
|
71
|
+
Object.defineProperty(exports, "extractImplementations", { enumerable: true, get: function () { return extension_manager_1.extractImplementations; } });
|
|
72
|
+
Object.defineProperty(exports, "validateExtensions", { enumerable: true, get: function () { return extension_manager_1.validateExtensions; } });
|
|
73
|
+
/**
|
|
74
|
+
* Convenience function: compile a .bone source string to files.
|
|
75
|
+
*/
|
|
76
|
+
async function compile(source, sourceFile = "program.bone") {
|
|
77
|
+
const { createHash } = await Promise.resolve().then(() => __importStar(require("crypto")));
|
|
78
|
+
const { Lexer: L } = await Promise.resolve().then(() => __importStar(require("./lexer")));
|
|
79
|
+
const { Parser: P } = await Promise.resolve().then(() => __importStar(require("./parser")));
|
|
80
|
+
const { TypeChecker: TC } = await Promise.resolve().then(() => __importStar(require("./typechecker")));
|
|
81
|
+
const { Lowering: Lo } = await Promise.resolve().then(() => __importStar(require("./lowering")));
|
|
82
|
+
const { ConstraintSolver: CS } = await Promise.resolve().then(() => __importStar(require("./solver")));
|
|
83
|
+
const { FullEmitter: FE } = await Promise.resolve().then(() => __importStar(require("./emit_full")));
|
|
84
|
+
const { optimize: opt } = await Promise.resolve().then(() => __importStar(require("./optimizer")));
|
|
85
|
+
const errors = [];
|
|
86
|
+
const warnings = [];
|
|
87
|
+
const tokens = new L(source).tokenize();
|
|
88
|
+
const ast = new P(tokens).parse();
|
|
89
|
+
const typeErrors = new TC().check(ast);
|
|
90
|
+
for (const err of typeErrors) {
|
|
91
|
+
errors.push(`${err.code} at ${err.loc.line}:${err.loc.column}: ${err.message}`);
|
|
92
|
+
}
|
|
93
|
+
if (errors.length > 0)
|
|
94
|
+
return { files: [], errors, warnings };
|
|
95
|
+
const hash = createHash("sha256").update(source).digest("hex").slice(0, 16);
|
|
96
|
+
const irSystems = new Lo().lower(ast, hash);
|
|
97
|
+
for (let i = 0; i < irSystems.length; i++) {
|
|
98
|
+
const result = opt(irSystems[i]);
|
|
99
|
+
irSystems[i] = result.system;
|
|
100
|
+
const solveResult = new CS().solve(irSystems[i]);
|
|
101
|
+
irSystems[i].resolution = solveResult.resolution;
|
|
102
|
+
for (const w of solveResult.warnings)
|
|
103
|
+
warnings.push(w);
|
|
104
|
+
}
|
|
105
|
+
const files = [];
|
|
106
|
+
const emitter = new FE();
|
|
107
|
+
for (const sys of irSystems) {
|
|
108
|
+
files.push(...emitter.emit(sys));
|
|
109
|
+
}
|
|
110
|
+
return { files, errors, warnings };
|
|
111
|
+
}
|
|
112
|
+
exports.compile = compile;
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ir.d.ts
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bone ir (Intermediate Representation)  Data structures.
|
|
3
|
+
* Implements spec/07_IR_SPEC.md.
|
|
4
|
+
*
|
|
5
|
+
* This is the canonical internal form: language-agnostic, fully resolved,
|
|
6
|
+
* strongly typed, and deterministically serializable.
|
|
7
|
+
*/
|
|
8
|
+
export type IRPrimitive = "string" | "uint" | "int" | "float" | "bool" | "timestamp" | "uuid" | "bytes" | "json";
|
|
9
|
+
export interface IRField {
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
nullable: boolean;
|
|
13
|
+
unique: boolean;
|
|
14
|
+
indexed: boolean;
|
|
15
|
+
default_value: string | null;
|
|
16
|
+
}
|
|
17
|
+
export interface IRIndex {
|
|
18
|
+
fields: string[];
|
|
19
|
+
unique: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface IRModelConstraint {
|
|
22
|
+
kind: "unique" | "non_null" | "range" | "enum" | "check";
|
|
23
|
+
target: string;
|
|
24
|
+
params: Record<string, string | number | string[]>;
|
|
25
|
+
}
|
|
26
|
+
export interface IRModel {
|
|
27
|
+
name: string;
|
|
28
|
+
fields: IRField[];
|
|
29
|
+
primary_key: string;
|
|
30
|
+
indexes: IRIndex[];
|
|
31
|
+
constraints: IRModelConstraint[];
|
|
32
|
+
}
|
|
33
|
+
export interface IRPrecondition {
|
|
34
|
+
expression: string;
|
|
35
|
+
description: string;
|
|
36
|
+
}
|
|
37
|
+
export interface IREffect {
|
|
38
|
+
target: string;
|
|
39
|
+
op: "assign" | "add" | "remove";
|
|
40
|
+
value: string;
|
|
41
|
+
}
|
|
42
|
+
export interface IRMethod {
|
|
43
|
+
name: string;
|
|
44
|
+
input: IRField[];
|
|
45
|
+
output: string;
|
|
46
|
+
preconditions: IRPrecondition[];
|
|
47
|
+
effects: IREffect[];
|
|
48
|
+
emissions: string[];
|
|
49
|
+
idempotent: boolean;
|
|
50
|
+
authenticated: boolean;
|
|
51
|
+
timeout_ms: number;
|
|
52
|
+
retry: IRRetryPolicy | null;
|
|
53
|
+
pipeline: IRPipeline | null;
|
|
54
|
+
algorithm: IRAlgorithm | null;
|
|
55
|
+
sync: string | null;
|
|
56
|
+
}
|
|
57
|
+
export interface IRPipeline {
|
|
58
|
+
parallel: boolean;
|
|
59
|
+
steps: IRPipelineStep[];
|
|
60
|
+
on_error: IRPipelineErrorHandler | null;
|
|
61
|
+
}
|
|
62
|
+
export interface IRPipelineStep {
|
|
63
|
+
call_name: string;
|
|
64
|
+
call_args: string[];
|
|
65
|
+
bind_as: string | null;
|
|
66
|
+
}
|
|
67
|
+
export interface IRPipelineErrorHandler {
|
|
68
|
+
action: "rollback" | "compensate" | "ignore" | "retry";
|
|
69
|
+
call_name: string | null;
|
|
70
|
+
call_args: string[];
|
|
71
|
+
}
|
|
72
|
+
export interface IRAlgorithm {
|
|
73
|
+
catalog_name: string;
|
|
74
|
+
bindings: {
|
|
75
|
+
param: string;
|
|
76
|
+
value: string;
|
|
77
|
+
}[];
|
|
78
|
+
}
|
|
79
|
+
export interface IRRetryPolicy {
|
|
80
|
+
max_attempts: number;
|
|
81
|
+
backoff: "fixed" | "linear" | "exponential";
|
|
82
|
+
interval_ms: number;
|
|
83
|
+
}
|
|
84
|
+
export interface IRInterface {
|
|
85
|
+
name: string;
|
|
86
|
+
methods: IRMethod[];
|
|
87
|
+
}
|
|
88
|
+
export type IRDeliveryMode = "at_least_once" | "at_most_once" | "exactly_once";
|
|
89
|
+
export type IROrderingMode = "fifo" | "causal" | "total" | "unordered";
|
|
90
|
+
export interface IREvent {
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
payload: IRField[];
|
|
94
|
+
source: string;
|
|
95
|
+
delivery: IRDeliveryMode;
|
|
96
|
+
ordering: IROrderingMode;
|
|
97
|
+
ttl_ms: number | null;
|
|
98
|
+
}
|
|
99
|
+
export interface IRTransition {
|
|
100
|
+
from: string;
|
|
101
|
+
to: string;
|
|
102
|
+
trigger: string;
|
|
103
|
+
guard: string | null;
|
|
104
|
+
}
|
|
105
|
+
export interface IRStateMachine {
|
|
106
|
+
entity: string;
|
|
107
|
+
states: string[];
|
|
108
|
+
initial: string;
|
|
109
|
+
transitions: IRTransition[];
|
|
110
|
+
}
|
|
111
|
+
export type IRModuleKind = "api_service" | "worker_service" | "realtime_service" | "auth_service" | "data_store" | "event_bus" | "cache" | "gateway" | "frontend";
|
|
112
|
+
export interface IRModule {
|
|
113
|
+
id: string;
|
|
114
|
+
kind: IRModuleKind;
|
|
115
|
+
name: string;
|
|
116
|
+
interfaces: IRInterface[];
|
|
117
|
+
models: IRModel[];
|
|
118
|
+
events: IREvent[];
|
|
119
|
+
state_machines: IRStateMachine[];
|
|
120
|
+
relations: IRRelation[];
|
|
121
|
+
dependencies: string[];
|
|
122
|
+
config: Record<string, string | number | boolean>;
|
|
123
|
+
}
|
|
124
|
+
export interface IRRelation {
|
|
125
|
+
name: string;
|
|
126
|
+
kind: "has_one" | "has_many" | "belongs_to" | "many_to_many";
|
|
127
|
+
from_entity: string;
|
|
128
|
+
to_entity: string;
|
|
129
|
+
from_table: string;
|
|
130
|
+
to_table: string;
|
|
131
|
+
foreign_key: string;
|
|
132
|
+
junction_table?: string;
|
|
133
|
+
}
|
|
134
|
+
export interface IRInvariant {
|
|
135
|
+
id: string;
|
|
136
|
+
expression: string;
|
|
137
|
+
scope: string;
|
|
138
|
+
}
|
|
139
|
+
export interface IRFlowStep {
|
|
140
|
+
name: string;
|
|
141
|
+
action: string;
|
|
142
|
+
compensation: string | null;
|
|
143
|
+
}
|
|
144
|
+
export interface IRFlow {
|
|
145
|
+
name: string;
|
|
146
|
+
steps: IRFlowStep[];
|
|
147
|
+
}
|
|
148
|
+
export interface IRSystem {
|
|
149
|
+
name: string;
|
|
150
|
+
version: string;
|
|
151
|
+
source_hash: string;
|
|
152
|
+
domain: string | null;
|
|
153
|
+
modules: IRModule[];
|
|
154
|
+
events: IREvent[];
|
|
155
|
+
flows: IRFlow[];
|
|
156
|
+
invariants: IRInvariant[];
|
|
157
|
+
resolution: Record<string, string>;
|
|
158
|
+
extension_points: IRExtensionPoint[];
|
|
159
|
+
}
|
|
160
|
+
export interface IRExtensionPoint {
|
|
161
|
+
name: string;
|
|
162
|
+
params: {
|
|
163
|
+
name: string;
|
|
164
|
+
type: string;
|
|
165
|
+
}[];
|
|
166
|
+
returns: string | null;
|
|
167
|
+
stable: boolean;
|
|
168
|
+
}
|
package/dist/ir.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* bone ir (Intermediate Representation)  Data structures.
|
|
4
|
+
* Implements spec/07_IR_SPEC.md.
|
|
5
|
+
*
|
|
6
|
+
* This is the canonical internal form: language-agnostic, fully resolved,
|
|
7
|
+
* strongly typed, and deterministically serializable.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=ir.js.map
|
package/dist/ir.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
package/dist/lexer.d.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bone lexer
|
|
3
|
+
* Converts source text into a token stream.
|
|
4
|
+
*
|
|
5
|
+
* This is a hand-written lexer (not regex-based) for precise error reporting
|
|
6
|
+
* and deterministic behavior. It implements the lexical rules from spec/02_GRAMMAR.peg.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum TokenKind {
|
|
9
|
+
LBrace = "LBrace",
|
|
10
|
+
RBrace = "RBrace",
|
|
11
|
+
LBracket = "LBracket",
|
|
12
|
+
RBracket = "RBracket",
|
|
13
|
+
LParen = "LParen",
|
|
14
|
+
RParen = "RParen",
|
|
15
|
+
LAngle = "LAngle",
|
|
16
|
+
RAngle = "RAngle",
|
|
17
|
+
Colon = "Colon",
|
|
18
|
+
Comma = "Comma",
|
|
19
|
+
Dot = "Dot",
|
|
20
|
+
DotDot = "DotDot",
|
|
21
|
+
Arrow = "Arrow",
|
|
22
|
+
Pipe = "Pipe",
|
|
23
|
+
Semicolon = "Semicolon",
|
|
24
|
+
Equals = "Equals",
|
|
25
|
+
EqEq = "EqEq",
|
|
26
|
+
NotEq = "NotEq",
|
|
27
|
+
LtEq = "LtEq",
|
|
28
|
+
GtEq = "GtEq",
|
|
29
|
+
Plus = "Plus",
|
|
30
|
+
Minus = "Minus",
|
|
31
|
+
Star = "Star",
|
|
32
|
+
Slash = "Slash",
|
|
33
|
+
Percent = "Percent",
|
|
34
|
+
PlusEq = "PlusEq",
|
|
35
|
+
MinusEq = "MinusEq",
|
|
36
|
+
AppendEq = "AppendEq",
|
|
37
|
+
Question = "Question",
|
|
38
|
+
Bang = "Bang",
|
|
39
|
+
StringLiteral = "StringLiteral",
|
|
40
|
+
IntLiteral = "IntLiteral",
|
|
41
|
+
FloatLiteral = "FloatLiteral",
|
|
42
|
+
KwSystem = "KwSystem",
|
|
43
|
+
KwEntity = "KwEntity",
|
|
44
|
+
KwCapability = "KwCapability",
|
|
45
|
+
KwChannel = "KwChannel",
|
|
46
|
+
KwStore = "KwStore",
|
|
47
|
+
KwEvent = "KwEvent",
|
|
48
|
+
KwConstraint = "KwConstraint",
|
|
49
|
+
KwPolicy = "KwPolicy",
|
|
50
|
+
KwFlow = "KwFlow",
|
|
51
|
+
KwImport = "KwImport",
|
|
52
|
+
KwFrom = "KwFrom",
|
|
53
|
+
KwDomain = "KwDomain",
|
|
54
|
+
KwOwns = "KwOwns",
|
|
55
|
+
KwConstraints = "KwConstraints",
|
|
56
|
+
KwStates = "KwStates",
|
|
57
|
+
KwAuth = "KwAuth",
|
|
58
|
+
KwRelation = "KwRelation",
|
|
59
|
+
KwIndex = "KwIndex",
|
|
60
|
+
KwDerived = "KwDerived",
|
|
61
|
+
KwRequires = "KwRequires",
|
|
62
|
+
KwEffects = "KwEffects",
|
|
63
|
+
KwEmits = "KwEmits",
|
|
64
|
+
KwSync = "KwSync",
|
|
65
|
+
KwTimeout = "KwTimeout",
|
|
66
|
+
KwRetry = "KwRetry",
|
|
67
|
+
KwIdempotent = "KwIdempotent",
|
|
68
|
+
KwTransport = "KwTransport",
|
|
69
|
+
KwOrdering = "KwOrdering",
|
|
70
|
+
KwParticipants = "KwParticipants",
|
|
71
|
+
KwPersistence = "KwPersistence",
|
|
72
|
+
KwFilter = "KwFilter",
|
|
73
|
+
KwMaxSize = "KwMaxSize",
|
|
74
|
+
KwEngine = "KwEngine",
|
|
75
|
+
KwSchema = "KwSchema",
|
|
76
|
+
KwRetention = "KwRetention",
|
|
77
|
+
KwPartition = "KwPartition",
|
|
78
|
+
KwReplicas = "KwReplicas",
|
|
79
|
+
KwPayload = "KwPayload",
|
|
80
|
+
KwDelivery = "KwDelivery",
|
|
81
|
+
KwTtl = "KwTtl",
|
|
82
|
+
KwRateLimit = "KwRateLimit",
|
|
83
|
+
KwAccess = "KwAccess",
|
|
84
|
+
KwAudit = "KwAudit",
|
|
85
|
+
KwEncryption = "KwEncryption",
|
|
86
|
+
KwStep = "KwStep",
|
|
87
|
+
KwCompensate = "KwCompensate",
|
|
88
|
+
KwPer = "KwPer",
|
|
89
|
+
KwHasOne = "KwHasOne",
|
|
90
|
+
KwHasMany = "KwHasMany",
|
|
91
|
+
KwBelongsTo = "KwBelongsTo",
|
|
92
|
+
KwManyToMany = "KwManyToMany",
|
|
93
|
+
KwJwt = "KwJwt",
|
|
94
|
+
KwOauth2 = "KwOauth2",
|
|
95
|
+
KwApikey = "KwApikey",
|
|
96
|
+
KwSession = "KwSession",
|
|
97
|
+
KwWebsocket = "KwWebsocket",
|
|
98
|
+
KwSse = "KwSse",
|
|
99
|
+
KwPolling = "KwPolling",
|
|
100
|
+
KwGrpcStream = "KwGrpcStream",
|
|
101
|
+
KwCausal = "KwCausal",
|
|
102
|
+
KwFifo = "KwFifo",
|
|
103
|
+
KwTotal = "KwTotal",
|
|
104
|
+
KwUnordered = "KwUnordered",
|
|
105
|
+
KwPostgresql = "KwPostgresql",
|
|
106
|
+
KwRedis = "KwRedis",
|
|
107
|
+
KwMongodb = "KwMongodb",
|
|
108
|
+
KwSqlite = "KwSqlite",
|
|
109
|
+
KwS3 = "KwS3",
|
|
110
|
+
KwDynamodb = "KwDynamodb",
|
|
111
|
+
KwAtLeastOnce = "KwAtLeastOnce",
|
|
112
|
+
KwAtMostOnce = "KwAtMostOnce",
|
|
113
|
+
KwExactlyOnce = "KwExactlyOnce",
|
|
114
|
+
KwAtRest = "KwAtRest",
|
|
115
|
+
KwInTransit = "KwInTransit",
|
|
116
|
+
KwBoth = "KwBoth",
|
|
117
|
+
KwRealtime = "KwRealtime",
|
|
118
|
+
KwEventual = "KwEventual",
|
|
119
|
+
KwBatch = "KwBatch",
|
|
120
|
+
KwTransactional = "KwTransactional",
|
|
121
|
+
KwMaxAttempts = "KwMaxAttempts",
|
|
122
|
+
KwBackoff = "KwBackoff",
|
|
123
|
+
KwInterval = "KwInterval",
|
|
124
|
+
KwString = "KwString",
|
|
125
|
+
KwUint = "KwUint",
|
|
126
|
+
KwInt = "KwInt",
|
|
127
|
+
KwFloat = "KwFloat",
|
|
128
|
+
KwBool = "KwBool",
|
|
129
|
+
KwTimestamp = "KwTimestamp",
|
|
130
|
+
KwUuid = "KwUuid",
|
|
131
|
+
KwBytes = "KwBytes",
|
|
132
|
+
KwMap = "KwMap",
|
|
133
|
+
KwJson = "KwJson",
|
|
134
|
+
KwSet = "KwSet",
|
|
135
|
+
KwList = "KwList",
|
|
136
|
+
KwOptional = "KwOptional",
|
|
137
|
+
KwResult = "KwResult",
|
|
138
|
+
KwTrue = "KwTrue",
|
|
139
|
+
KwFalse = "KwFalse",
|
|
140
|
+
KwNone = "KwNone",
|
|
141
|
+
KwAnd = "KwAnd",
|
|
142
|
+
KwOr = "KwOr",
|
|
143
|
+
KwNot = "KwNot",
|
|
144
|
+
KwIn = "KwIn",
|
|
145
|
+
KwContains = "KwContains",
|
|
146
|
+
KwUnique = "KwUnique",
|
|
147
|
+
KwFull = "KwFull",
|
|
148
|
+
KwPipeline = "KwPipeline",
|
|
149
|
+
KwParallel = "KwParallel",
|
|
150
|
+
KwOnError = "KwOnError",
|
|
151
|
+
KwReturns = "KwReturns",
|
|
152
|
+
KwAlgorithm = "KwAlgorithm",
|
|
153
|
+
KwUsing = "KwUsing",
|
|
154
|
+
KwExtensionPoint = "KwExtensionPoint",
|
|
155
|
+
KwStable = "KwStable",
|
|
156
|
+
KwLanguage = "KwLanguage",
|
|
157
|
+
KwNow = "KwNow",
|
|
158
|
+
Identifier = "Identifier",
|
|
159
|
+
EOF = "EOF"
|
|
160
|
+
}
|
|
161
|
+
export interface SourceLocation {
|
|
162
|
+
line: number;
|
|
163
|
+
column: number;
|
|
164
|
+
offset: number;
|
|
165
|
+
}
|
|
166
|
+
export interface Token {
|
|
167
|
+
kind: TokenKind;
|
|
168
|
+
value: string;
|
|
169
|
+
loc: SourceLocation;
|
|
170
|
+
}
|
|
171
|
+
export declare class LexerError extends Error {
|
|
172
|
+
loc: SourceLocation;
|
|
173
|
+
constructor(message: string, loc: SourceLocation);
|
|
174
|
+
}
|
|
175
|
+
export declare class Lexer {
|
|
176
|
+
private source;
|
|
177
|
+
private pos;
|
|
178
|
+
private line;
|
|
179
|
+
private column;
|
|
180
|
+
private tokens;
|
|
181
|
+
constructor(source: string);
|
|
182
|
+
tokenize(): Token[];
|
|
183
|
+
private currentLoc;
|
|
184
|
+
private peek;
|
|
185
|
+
private peekAt;
|
|
186
|
+
private advance;
|
|
187
|
+
private skipWhitespaceAndComments;
|
|
188
|
+
private nextToken;
|
|
189
|
+
private readString;
|
|
190
|
+
private readNumber;
|
|
191
|
+
private readIdentifierOrKeyword;
|
|
192
|
+
private isDigit;
|
|
193
|
+
private isIdentStart;
|
|
194
|
+
private isIdentChar;
|
|
195
|
+
}
|