@boristype/bt-ir 0.1.0-alpha.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/README.md +338 -0
- package/build/analyzer/index.d.ts +7 -0
- package/build/analyzer/index.d.ts.map +1 -0
- package/build/analyzer/index.js +7 -0
- package/build/analyzer/index.js.map +1 -0
- package/build/analyzer/scope-analyzer.d.ts +88 -0
- package/build/analyzer/scope-analyzer.d.ts.map +1 -0
- package/build/analyzer/scope-analyzer.js +565 -0
- package/build/analyzer/scope-analyzer.js.map +1 -0
- package/build/cli.d.ts +10 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +96 -0
- package/build/cli.js.map +1 -0
- package/build/emitter/bt-emitter.d.ts +31 -0
- package/build/emitter/bt-emitter.d.ts.map +1 -0
- package/build/emitter/bt-emitter.js +919 -0
- package/build/emitter/bt-emitter.js.map +1 -0
- package/build/emitter/index.d.ts +7 -0
- package/build/emitter/index.d.ts.map +1 -0
- package/build/emitter/index.js +7 -0
- package/build/emitter/index.js.map +1 -0
- package/build/index.d.ts +25 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +24 -0
- package/build/index.js.map +1 -0
- package/build/ir/builders.d.ts +235 -0
- package/build/ir/builders.d.ts.map +1 -0
- package/build/ir/builders.js +387 -0
- package/build/ir/builders.js.map +1 -0
- package/build/ir/index.d.ts +8 -0
- package/build/ir/index.d.ts.map +1 -0
- package/build/ir/index.js +8 -0
- package/build/ir/index.js.map +1 -0
- package/build/ir/nodes.d.ts +596 -0
- package/build/ir/nodes.d.ts.map +1 -0
- package/build/ir/nodes.js +16 -0
- package/build/ir/nodes.js.map +1 -0
- package/build/lowering/bare-visitors.d.ts +72 -0
- package/build/lowering/bare-visitors.d.ts.map +1 -0
- package/build/lowering/bare-visitors.js +287 -0
- package/build/lowering/bare-visitors.js.map +1 -0
- package/build/lowering/binding.d.ts +127 -0
- package/build/lowering/binding.d.ts.map +1 -0
- package/build/lowering/binding.js +194 -0
- package/build/lowering/binding.js.map +1 -0
- package/build/lowering/expressions.d.ts +106 -0
- package/build/lowering/expressions.d.ts.map +1 -0
- package/build/lowering/expressions.js +1172 -0
- package/build/lowering/expressions.js.map +1 -0
- package/build/lowering/function-builder.d.ts +111 -0
- package/build/lowering/function-builder.d.ts.map +1 -0
- package/build/lowering/function-builder.js +111 -0
- package/build/lowering/function-builder.js.map +1 -0
- package/build/lowering/helpers.d.ts +88 -0
- package/build/lowering/helpers.d.ts.map +1 -0
- package/build/lowering/helpers.js +347 -0
- package/build/lowering/helpers.js.map +1 -0
- package/build/lowering/index.d.ts +21 -0
- package/build/lowering/index.d.ts.map +1 -0
- package/build/lowering/index.js +28 -0
- package/build/lowering/index.js.map +1 -0
- package/build/lowering/precedence.d.ts +18 -0
- package/build/lowering/precedence.d.ts.map +1 -0
- package/build/lowering/precedence.js +104 -0
- package/build/lowering/precedence.js.map +1 -0
- package/build/lowering/spread-helpers.d.ts +12 -0
- package/build/lowering/spread-helpers.d.ts.map +1 -0
- package/build/lowering/spread-helpers.js +32 -0
- package/build/lowering/spread-helpers.js.map +1 -0
- package/build/lowering/statements.d.ts +85 -0
- package/build/lowering/statements.d.ts.map +1 -0
- package/build/lowering/statements.js +713 -0
- package/build/lowering/statements.js.map +1 -0
- package/build/lowering/visitor.d.ts +121 -0
- package/build/lowering/visitor.d.ts.map +1 -0
- package/build/lowering/visitor.js +165 -0
- package/build/lowering/visitor.js.map +1 -0
- package/build/pipeline/index.d.ts +84 -0
- package/build/pipeline/index.d.ts.map +1 -0
- package/build/pipeline/index.js +224 -0
- package/build/pipeline/index.js.map +1 -0
- package/build/polyfill-spec.d.ts +18 -0
- package/build/polyfill-spec.d.ts.map +1 -0
- package/build/polyfill-spec.js +26 -0
- package/build/polyfill-spec.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compilation Pipeline
|
|
3
|
+
*
|
|
4
|
+
* Координирует процесс компиляции TypeScript → IR → BorisScript
|
|
5
|
+
*
|
|
6
|
+
* @module pipeline
|
|
7
|
+
*/
|
|
8
|
+
import * as ts from "typescript";
|
|
9
|
+
import * as fs from "node:fs";
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
import { transformToIR } from "../lowering/index.js";
|
|
12
|
+
import { emit } from "../emitter/index.js";
|
|
13
|
+
import { analyzeScopes, printScopeTree } from "../analyzer/index.js";
|
|
14
|
+
/**
|
|
15
|
+
* Компилирует TypeScript код в BorisScript
|
|
16
|
+
*
|
|
17
|
+
* @param sourceCode - Исходный код TypeScript
|
|
18
|
+
* @param options - Опции компиляции
|
|
19
|
+
* @returns Результат компиляции
|
|
20
|
+
*/
|
|
21
|
+
export function compile(sourceCode, options = {}) {
|
|
22
|
+
const filename = options.filename ?? "input.ts";
|
|
23
|
+
const errors = [];
|
|
24
|
+
// Создаём TypeScript Program
|
|
25
|
+
const tsOptions = {
|
|
26
|
+
target: ts.ScriptTarget.Latest,
|
|
27
|
+
module: ts.ModuleKind.ESNext,
|
|
28
|
+
strict: true,
|
|
29
|
+
noEmit: true,
|
|
30
|
+
...options.tsCompilerOptions,
|
|
31
|
+
};
|
|
32
|
+
// Создаём виртуальный CompilerHost
|
|
33
|
+
const host = createVirtualCompilerHost(filename, sourceCode, tsOptions);
|
|
34
|
+
const program = ts.createProgram([filename], tsOptions, host);
|
|
35
|
+
const sourceFile = program.getSourceFile(filename);
|
|
36
|
+
const typeChecker = program.getTypeChecker();
|
|
37
|
+
if (!sourceFile) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
outputs: [],
|
|
41
|
+
errors: ["Failed to parse source file"],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Проверяем TypeScript ошибки (фильтруем ошибки из node_modules)
|
|
45
|
+
const diagnostics = ts.getPreEmitDiagnostics(program);
|
|
46
|
+
for (const diag of diagnostics) {
|
|
47
|
+
// Пропускаем ошибки из node_modules
|
|
48
|
+
if (diag.file?.fileName.includes("node_modules")) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const message = ts.flattenDiagnosticMessageText(diag.messageText, "\n");
|
|
52
|
+
if (diag.file && diag.start !== undefined) {
|
|
53
|
+
const { line, character } = diag.file.getLineAndCharacterOfPosition(diag.start);
|
|
54
|
+
errors.push(`${diag.file.fileName}:${line + 1}:${character + 1}: ${message}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
errors.push(message);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Анализируем scopes
|
|
61
|
+
const scopeAnalysis = analyzeScopes(sourceFile);
|
|
62
|
+
if (options.debugScopes) {
|
|
63
|
+
console.log("\n=== Scope Tree ===");
|
|
64
|
+
printScopeTree(scopeAnalysis.moduleScope);
|
|
65
|
+
if (scopeAnalysis.capturedVariables.length > 0) {
|
|
66
|
+
console.log("\n=== Captured Variables ===");
|
|
67
|
+
for (const v of scopeAnalysis.capturedVariables) {
|
|
68
|
+
console.log(` ${v.name} (declared in ${v.declarationScope.name || v.declarationScope.type})`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const mode = options.mode ?? "module";
|
|
73
|
+
let ir;
|
|
74
|
+
try {
|
|
75
|
+
ir = transformToIR(sourceFile, typeChecker, scopeAnalysis, {
|
|
76
|
+
mode,
|
|
77
|
+
fileKey: options.fileKey,
|
|
78
|
+
currentFileJs: options.currentFileJs,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
outputs: [],
|
|
85
|
+
errors: [`IR transformation failed: ${e}`],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (options.debugIR) {
|
|
89
|
+
console.log("\n=== IR ===");
|
|
90
|
+
console.log(JSON.stringify(ir, null, 2));
|
|
91
|
+
}
|
|
92
|
+
const result = emit(ir, options.emitOptions);
|
|
93
|
+
const outputPath = options.filename
|
|
94
|
+
? options.filename.replace(/\.tsx?$/, ".js")
|
|
95
|
+
: "output.js";
|
|
96
|
+
return {
|
|
97
|
+
success: errors.length === 0,
|
|
98
|
+
outputs: [
|
|
99
|
+
{
|
|
100
|
+
path: outputPath,
|
|
101
|
+
code: result.code,
|
|
102
|
+
map: result.map,
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
ir: options.debugIR ? ir : undefined,
|
|
106
|
+
errors,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Компилирует файл TypeScript в BorisScript
|
|
111
|
+
*
|
|
112
|
+
* @param filePath - Путь к TypeScript файлу
|
|
113
|
+
* @param options - Опции компиляции
|
|
114
|
+
* @returns Результат компиляции
|
|
115
|
+
*/
|
|
116
|
+
export function compileFile(filePath, options = {}) {
|
|
117
|
+
const absolutePath = path.resolve(filePath);
|
|
118
|
+
if (!fs.existsSync(absolutePath)) {
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
outputs: [],
|
|
122
|
+
errors: [`File not found: ${absolutePath}`],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const sourceCode = fs.readFileSync(absolutePath, "utf-8");
|
|
126
|
+
return compile(sourceCode, {
|
|
127
|
+
...options,
|
|
128
|
+
filename: absolutePath,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Компилирует SourceFile из существующего Program (для интеграции с btc).
|
|
133
|
+
* Не создаёт Program — использует переданный для type checker и зависимостей.
|
|
134
|
+
*
|
|
135
|
+
* @param sourceFile - TypeScript SourceFile для компиляции
|
|
136
|
+
* @param program - Существующий TypeScript Program (с noEmit для диагностики)
|
|
137
|
+
* @param options - Опции компиляции
|
|
138
|
+
* @returns Результат компиляции
|
|
139
|
+
*/
|
|
140
|
+
export function compileSourceFile(sourceFile, program, options = {}) {
|
|
141
|
+
const typeChecker = program.getTypeChecker();
|
|
142
|
+
const errors = [];
|
|
143
|
+
// Диагностика — фильтруем только для этого файла (btc уже выводит общую диагностику)
|
|
144
|
+
const diagnostics = ts.getPreEmitDiagnostics(program, sourceFile);
|
|
145
|
+
for (const diag of diagnostics) {
|
|
146
|
+
if (diag.file?.fileName.includes("node_modules"))
|
|
147
|
+
continue;
|
|
148
|
+
const message = ts.flattenDiagnosticMessageText(diag.messageText, "\n");
|
|
149
|
+
if (diag.file && diag.start !== undefined) {
|
|
150
|
+
const { line, character } = diag.file.getLineAndCharacterOfPosition(diag.start);
|
|
151
|
+
errors.push(`${diag.file.fileName}:${line + 1}:${character + 1}: ${message}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
errors.push(message);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const scopeAnalysis = analyzeScopes(sourceFile);
|
|
158
|
+
if (options.debugScopes) {
|
|
159
|
+
console.log("\n=== Scope Tree ===");
|
|
160
|
+
printScopeTree(scopeAnalysis.moduleScope);
|
|
161
|
+
}
|
|
162
|
+
const mode = options.mode ?? "module";
|
|
163
|
+
let ir;
|
|
164
|
+
try {
|
|
165
|
+
ir = transformToIR(sourceFile, typeChecker, scopeAnalysis, {
|
|
166
|
+
mode,
|
|
167
|
+
fileKey: options.fileKey,
|
|
168
|
+
currentFileJs: options.currentFileJs,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
outputs: [],
|
|
175
|
+
errors: [`IR transformation failed: ${e}`],
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
if (options.debugIR) {
|
|
179
|
+
console.log("\n=== IR ===");
|
|
180
|
+
console.log(JSON.stringify(ir, null, 2));
|
|
181
|
+
}
|
|
182
|
+
const result = emit(ir, options.emitOptions);
|
|
183
|
+
const outputPath = options.outputPath ??
|
|
184
|
+
(options.filename ?? sourceFile.fileName).replace(/\.tsx?$/, ".js");
|
|
185
|
+
return {
|
|
186
|
+
success: errors.length === 0,
|
|
187
|
+
outputs: [
|
|
188
|
+
{
|
|
189
|
+
path: outputPath,
|
|
190
|
+
code: result.code,
|
|
191
|
+
map: result.map,
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
ir: options.debugIR ? ir : undefined,
|
|
195
|
+
errors,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Создаёт виртуальный CompilerHost для компиляции строки
|
|
200
|
+
*/
|
|
201
|
+
function createVirtualCompilerHost(filename, content, options) {
|
|
202
|
+
const host = ts.createCompilerHost(options);
|
|
203
|
+
const originalGetSourceFile = host.getSourceFile;
|
|
204
|
+
const originalFileExists = host.fileExists;
|
|
205
|
+
const originalReadFile = host.readFile;
|
|
206
|
+
host.getSourceFile = (name, languageVersion, onError) => {
|
|
207
|
+
if (name === filename) {
|
|
208
|
+
return ts.createSourceFile(name, content, languageVersion, true);
|
|
209
|
+
}
|
|
210
|
+
return originalGetSourceFile.call(host, name, languageVersion, onError);
|
|
211
|
+
};
|
|
212
|
+
host.fileExists = (name) => {
|
|
213
|
+
if (name === filename)
|
|
214
|
+
return true;
|
|
215
|
+
return originalFileExists.call(host, name);
|
|
216
|
+
};
|
|
217
|
+
host.readFile = (name) => {
|
|
218
|
+
if (name === filename)
|
|
219
|
+
return content;
|
|
220
|
+
return originalReadFile.call(host, name);
|
|
221
|
+
};
|
|
222
|
+
return host;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Спецификация polyfill методов для BT.
|
|
3
|
+
* Используется в emitter (генерация кода) и lowering (сбор аргументов).
|
|
4
|
+
*
|
|
5
|
+
* BT polyfill методы требуют точное количество аргументов.
|
|
6
|
+
* restAsArray — последний параметр собирает rest в массив (splice, unshift, toSpliced).
|
|
7
|
+
*
|
|
8
|
+
* @module polyfill-spec
|
|
9
|
+
*/
|
|
10
|
+
export declare const POLYFILL_REST_AS_ARRAY_METHODS: Record<string, string[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Для restAsArray методов: количество позиционных аргументов до rest.
|
|
13
|
+
* splice(start, deleteCount, ...items) → 2 позиционных
|
|
14
|
+
* unshift(...items) → 0 позиционных, все в items
|
|
15
|
+
* toSpliced(start, deleteCount, ...items) → 2 позиционных
|
|
16
|
+
*/
|
|
17
|
+
export declare const POLYFILL_REST_POSITIONAL_COUNT: Record<string, Record<string, number>>;
|
|
18
|
+
//# sourceMappingURL=polyfill-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill-spec.d.ts","sourceRoot":"","sources":["../src/polyfill-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAEnE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMjF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Спецификация polyfill методов для BT.
|
|
3
|
+
* Используется в emitter (генерация кода) и lowering (сбор аргументов).
|
|
4
|
+
*
|
|
5
|
+
* BT polyfill методы требуют точное количество аргументов.
|
|
6
|
+
* restAsArray — последний параметр собирает rest в массив (splice, unshift, toSpliced).
|
|
7
|
+
*
|
|
8
|
+
* @module polyfill-spec
|
|
9
|
+
*/
|
|
10
|
+
export const POLYFILL_REST_AS_ARRAY_METHODS = {
|
|
11
|
+
Array: ["splice", "unshift", "toSpliced"],
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Для restAsArray методов: количество позиционных аргументов до rest.
|
|
15
|
+
* splice(start, deleteCount, ...items) → 2 позиционных
|
|
16
|
+
* unshift(...items) → 0 позиционных, все в items
|
|
17
|
+
* toSpliced(start, deleteCount, ...items) → 2 позиционных
|
|
18
|
+
*/
|
|
19
|
+
export const POLYFILL_REST_POSITIONAL_COUNT = {
|
|
20
|
+
Array: {
|
|
21
|
+
splice: 2,
|
|
22
|
+
unshift: 0,
|
|
23
|
+
toSpliced: 2,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=polyfill-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill-spec.js","sourceRoot":"","sources":["../src/polyfill-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAA6B;IACtE,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC;CAC1C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAA2C;IACpF,KAAK,EAAE;QACL,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC;KACb;CACF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@boristype/bt-ir",
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
|
+
"description": "IR-based backend for BorisType compiler",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "build/index.js",
|
|
7
|
+
"types": "build/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"bt-ir": "./build/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"build",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"keywords": [
|
|
16
|
+
"boristype",
|
|
17
|
+
"compiler",
|
|
18
|
+
"transpiler",
|
|
19
|
+
"ir"
|
|
20
|
+
],
|
|
21
|
+
"author": "punkhomov",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/BorisType/BorisType.git"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/BorisType/BorisType/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/BorisType/BorisType#readme",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^24.7.2",
|
|
36
|
+
"typescript": "^5.9.2"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"typescript": "^5.9.2"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=22.0.0"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc",
|
|
46
|
+
"dev": "tsc --watch"
|
|
47
|
+
}
|
|
48
|
+
}
|