@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +338 -0
  3. package/build/analyzer/index.d.ts +7 -0
  4. package/build/analyzer/index.d.ts.map +1 -0
  5. package/build/analyzer/index.js +7 -0
  6. package/build/analyzer/index.js.map +1 -0
  7. package/build/analyzer/scope-analyzer.d.ts +88 -0
  8. package/build/analyzer/scope-analyzer.d.ts.map +1 -0
  9. package/build/analyzer/scope-analyzer.js +565 -0
  10. package/build/analyzer/scope-analyzer.js.map +1 -0
  11. package/build/cli.d.ts +10 -0
  12. package/build/cli.d.ts.map +1 -0
  13. package/build/cli.js +96 -0
  14. package/build/cli.js.map +1 -0
  15. package/build/emitter/bt-emitter.d.ts +31 -0
  16. package/build/emitter/bt-emitter.d.ts.map +1 -0
  17. package/build/emitter/bt-emitter.js +919 -0
  18. package/build/emitter/bt-emitter.js.map +1 -0
  19. package/build/emitter/index.d.ts +7 -0
  20. package/build/emitter/index.d.ts.map +1 -0
  21. package/build/emitter/index.js +7 -0
  22. package/build/emitter/index.js.map +1 -0
  23. package/build/index.d.ts +25 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +24 -0
  26. package/build/index.js.map +1 -0
  27. package/build/ir/builders.d.ts +235 -0
  28. package/build/ir/builders.d.ts.map +1 -0
  29. package/build/ir/builders.js +387 -0
  30. package/build/ir/builders.js.map +1 -0
  31. package/build/ir/index.d.ts +8 -0
  32. package/build/ir/index.d.ts.map +1 -0
  33. package/build/ir/index.js +8 -0
  34. package/build/ir/index.js.map +1 -0
  35. package/build/ir/nodes.d.ts +596 -0
  36. package/build/ir/nodes.d.ts.map +1 -0
  37. package/build/ir/nodes.js +16 -0
  38. package/build/ir/nodes.js.map +1 -0
  39. package/build/lowering/bare-visitors.d.ts +72 -0
  40. package/build/lowering/bare-visitors.d.ts.map +1 -0
  41. package/build/lowering/bare-visitors.js +287 -0
  42. package/build/lowering/bare-visitors.js.map +1 -0
  43. package/build/lowering/binding.d.ts +127 -0
  44. package/build/lowering/binding.d.ts.map +1 -0
  45. package/build/lowering/binding.js +194 -0
  46. package/build/lowering/binding.js.map +1 -0
  47. package/build/lowering/expressions.d.ts +106 -0
  48. package/build/lowering/expressions.d.ts.map +1 -0
  49. package/build/lowering/expressions.js +1172 -0
  50. package/build/lowering/expressions.js.map +1 -0
  51. package/build/lowering/function-builder.d.ts +111 -0
  52. package/build/lowering/function-builder.d.ts.map +1 -0
  53. package/build/lowering/function-builder.js +111 -0
  54. package/build/lowering/function-builder.js.map +1 -0
  55. package/build/lowering/helpers.d.ts +88 -0
  56. package/build/lowering/helpers.d.ts.map +1 -0
  57. package/build/lowering/helpers.js +347 -0
  58. package/build/lowering/helpers.js.map +1 -0
  59. package/build/lowering/index.d.ts +21 -0
  60. package/build/lowering/index.d.ts.map +1 -0
  61. package/build/lowering/index.js +28 -0
  62. package/build/lowering/index.js.map +1 -0
  63. package/build/lowering/precedence.d.ts +18 -0
  64. package/build/lowering/precedence.d.ts.map +1 -0
  65. package/build/lowering/precedence.js +104 -0
  66. package/build/lowering/precedence.js.map +1 -0
  67. package/build/lowering/spread-helpers.d.ts +12 -0
  68. package/build/lowering/spread-helpers.d.ts.map +1 -0
  69. package/build/lowering/spread-helpers.js +32 -0
  70. package/build/lowering/spread-helpers.js.map +1 -0
  71. package/build/lowering/statements.d.ts +85 -0
  72. package/build/lowering/statements.d.ts.map +1 -0
  73. package/build/lowering/statements.js +713 -0
  74. package/build/lowering/statements.js.map +1 -0
  75. package/build/lowering/visitor.d.ts +121 -0
  76. package/build/lowering/visitor.d.ts.map +1 -0
  77. package/build/lowering/visitor.js +165 -0
  78. package/build/lowering/visitor.js.map +1 -0
  79. package/build/pipeline/index.d.ts +84 -0
  80. package/build/pipeline/index.d.ts.map +1 -0
  81. package/build/pipeline/index.js +224 -0
  82. package/build/pipeline/index.js.map +1 -0
  83. package/build/polyfill-spec.d.ts +18 -0
  84. package/build/polyfill-spec.d.ts.map +1 -0
  85. package/build/polyfill-spec.js +26 -0
  86. package/build/polyfill-spec.js.map +1 -0
  87. 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
+ }