{"_id":"@boristype/bt-ir","_rev":"5-193b1b6f3baffbde079af276c9f39ce3","name":"@boristype/bt-ir","dist-tags":{"latest":"0.1.0-alpha.5"},"versions":{"0.1.0-alpha.0":{"name":"@boristype/bt-ir","version":"0.1.0-alpha.0","keywords":["boristype","compiler","transpiler","ir"],"author":{"name":"punkhomov"},"license":"MIT","_id":"@boristype/bt-ir@0.1.0-alpha.0","maintainers":[{"name":"punkhomov","email":"punkhomov@gmail.com"}],"homepage":"https://github.com/BorisType/BorisType#readme","bugs":{"url":"https://github.com/BorisType/BorisType/issues"},"bin":{"bt-ir":"build/cli.js"},"dist":{"shasum":"1ff7496bcf077181f21bcbc6e44c14ad40f6e326","tarball":"https://registry.npmjs.org/@boristype/bt-ir/-/bt-ir-0.1.0-alpha.0.tgz","fileCount":87,"integrity":"sha512-hv4WLcZ4x89yVjOdy0nQzZkzdIulAuesinijwOK1RWmFGpbvqNOVCDBZXy0NABgBE8pbTvP1tWS1xdXdG70tKQ==","signatures":[{"sig":"MEUCIQDmH+vG4u0gUJqsWlzaUMsRlDT8aO+yPD/c4xfdoyOdvQIgQBqBBVBeKNZG+cc8ev8yN58/4KIJx+dF5jg2f3KE7ak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529618},"main":"build/index.js","type":"module","_from":"file:boristype-bt-ir-0.1.0-alpha.0.tgz","types":"build/index.d.ts","engines":{"node":">=22.0.0"},"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"punkhomov","email":"punkhomov@gmail.com"},"_resolved":"C:\\Users\\vomoh\\AppData\\Local\\Temp\\7a5d8d68f3ae6e262249a1210b4a050f\\boristype-bt-ir-0.1.0-alpha.0.tgz","_integrity":"sha512-hv4WLcZ4x89yVjOdy0nQzZkzdIulAuesinijwOK1RWmFGpbvqNOVCDBZXy0NABgBE8pbTvP1tWS1xdXdG70tKQ==","repository":{"url":"git+https://github.com/BorisType/BorisType.git","type":"git"},"_npmVersion":"10.9.3","description":"IR-based backend for BorisType compiler","directories":{},"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2","@types/node":"^24.7.2"},"peerDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/bt-ir_0.1.0-alpha.0_1771918366192_0.5623240787347412","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.2":{"name":"@boristype/bt-ir","version":"0.1.0-alpha.2","keywords":["boristype","compiler","transpiler","ir"],"author":{"name":"punkhomov"},"license":"MIT","_id":"@boristype/bt-ir@0.1.0-alpha.2","maintainers":[{"name":"punkhomov","email":"punkhomov@gmail.com"}],"homepage":"https://github.com/BorisType/BorisType#readme","bugs":{"url":"https://github.com/BorisType/BorisType/issues"},"bin":{"bt-ir":"build/cli.js"},"dist":{"shasum":"2044474a8cd88dd2b843f3284c2fa7c3e92c4578","tarball":"https://registry.npmjs.org/@boristype/bt-ir/-/bt-ir-0.1.0-alpha.2.tgz","fileCount":87,"integrity":"sha512-YOP/8wU8Pww5db3Y1eZANu2D9mP90AFOvGH8Ym3mRWpzjSulgvy52sWn8SKqs+S6YVSqxX+FsyuFXn/9MOmxfQ==","signatures":[{"sig":"MEUCIQDyRJG2q3LbcQZH4fQKuPy9e1tebZYhCk0suB1oc9hRFAIgHvxSlrHQUngFEArsef8ZjH8ZCEfNLrwx18uaGbzifUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529579},"main":"build/index.js","type":"module","_from":"file:boristype-bt-ir-0.1.0-alpha.2.tgz","types":"build/index.d.ts","engines":{"node":">=22.0.0"},"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"punkhomov","email":"punkhomov@gmail.com"},"_resolved":"C:\\Users\\vomoh\\AppData\\Local\\Temp\\4ce448c0873babd4e60543aeb1b86d01\\boristype-bt-ir-0.1.0-alpha.2.tgz","_integrity":"sha512-YOP/8wU8Pww5db3Y1eZANu2D9mP90AFOvGH8Ym3mRWpzjSulgvy52sWn8SKqs+S6YVSqxX+FsyuFXn/9MOmxfQ==","repository":{"url":"git+https://github.com/BorisType/BorisType.git","type":"git"},"_npmVersion":"10.9.3","description":"IR-based backend for BorisType compiler","directories":{},"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2","@types/node":"^24.7.2"},"peerDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/bt-ir_0.1.0-alpha.2_1772039907238_0.9964308077819028","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.3":{"name":"@boristype/bt-ir","version":"0.1.0-alpha.3","keywords":["boristype","compiler","transpiler","ir"],"author":{"name":"punkhomov"},"license":"MIT","_id":"@boristype/bt-ir@0.1.0-alpha.3","maintainers":[{"name":"punkhomov","email":"punkhomov@gmail.com"}],"homepage":"https://github.com/BorisType/BorisType#readme","bugs":{"url":"https://github.com/BorisType/BorisType/issues"},"bin":{"bt-ir":"build/cli.js"},"dist":{"shasum":"4a78f03d57fe88c183e08f74694b347cba47721a","tarball":"https://registry.npmjs.org/@boristype/bt-ir/-/bt-ir-0.1.0-alpha.3.tgz","fileCount":87,"integrity":"sha512-ziuOSbu9/sTU1oG0UgJM/R742plBLrfcbglaKePysOgjSN0DFNmLLDh0eV7ED/7O9g/B/cbH6oEYCod4oCqJaw==","signatures":[{"sig":"MEYCIQDeLbGaxhCeJFg/L4VabzwX1kDaA1EUR4tljQ7CFO5ZWgIhAMSn9XmAHy/P4mVHIFLejw98cR/yJZXURWQhSzMDfY7F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":534083},"main":"build/index.js","type":"module","_from":"file:boristype-bt-ir-0.1.0-alpha.3.tgz","types":"build/index.d.ts","engines":{"node":">=22.0.0"},"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"punkhomov","email":"punkhomov@gmail.com"},"_resolved":"C:\\Users\\vomoh\\AppData\\Local\\Temp\\f88ce7c4f6c72f086408e3c0278b4a4f\\boristype-bt-ir-0.1.0-alpha.3.tgz","_integrity":"sha512-ziuOSbu9/sTU1oG0UgJM/R742plBLrfcbglaKePysOgjSN0DFNmLLDh0eV7ED/7O9g/B/cbH6oEYCod4oCqJaw==","repository":{"url":"git+https://github.com/BorisType/BorisType.git","type":"git"},"_npmVersion":"10.9.3","description":"IR-based backend for BorisType compiler","directories":{},"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2","@types/node":"^24.7.2"},"peerDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/bt-ir_0.1.0-alpha.3_1772044375929_0.30562419474917824","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.4":{"name":"@boristype/bt-ir","version":"0.1.0-alpha.4","keywords":["boristype","compiler","transpiler","ir"],"author":{"name":"punkhomov"},"license":"MIT","_id":"@boristype/bt-ir@0.1.0-alpha.4","maintainers":[{"name":"punkhomov","email":"punkhomov@gmail.com"}],"homepage":"https://github.com/BorisType/BorisType#readme","bugs":{"url":"https://github.com/BorisType/BorisType/issues"},"bin":{"bt-ir":"build/cli.js"},"dist":{"shasum":"311c77834cd153af8abdd84d7555d9dba82c44d1","tarball":"https://registry.npmjs.org/@boristype/bt-ir/-/bt-ir-0.1.0-alpha.4.tgz","fileCount":87,"integrity":"sha512-xdEu1yj8Yg8w70LmJBFvGJvgYXRZfkb2O8RR/D7zma7KsSYCl2SyucBCfOvDclkm48KJTGLPAJSBnsqGLalUMQ==","signatures":[{"sig":"MEUCICvO7JGznAFyt/3Gp8X9dol8ZEaPTJj5t8Lww9RW3Zr3AiEAwx28UmmFC0/6YUBVUOQ33sE7CnmMEQZQypPdK5FVwjY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548262},"main":"build/index.js","type":"module","_from":"file:boristype-bt-ir-0.1.0-alpha.4.tgz","types":"build/index.d.ts","engines":{"node":">=22.0.0"},"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"punkhomov","email":"punkhomov@gmail.com"},"_resolved":"C:\\Users\\vomoh\\AppData\\Local\\Temp\\f1e34f20f8c586836bcd957683dbe936\\boristype-bt-ir-0.1.0-alpha.4.tgz","_integrity":"sha512-xdEu1yj8Yg8w70LmJBFvGJvgYXRZfkb2O8RR/D7zma7KsSYCl2SyucBCfOvDclkm48KJTGLPAJSBnsqGLalUMQ==","repository":{"url":"git+https://github.com/BorisType/BorisType.git","type":"git"},"_npmVersion":"10.9.3","description":"IR-based backend for BorisType compiler","directories":{},"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2","@types/node":"^24.7.2"},"peerDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/bt-ir_0.1.0-alpha.4_1772103562706_0.886999787603568","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.5":{"name":"@boristype/bt-ir","version":"0.1.0-alpha.5","description":"IR-based backend for BorisType compiler","type":"module","main":"build/index.js","types":"build/index.d.ts","bin":{"bt-ir":"build/cli.js"},"keywords":["boristype","compiler","transpiler","ir"],"author":{"name":"punkhomov"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/BorisType/BorisType.git"},"bugs":{"url":"https://github.com/BorisType/BorisType/issues"},"homepage":"https://github.com/BorisType/BorisType#readme","publishConfig":{"access":"public"},"devDependencies":{"@types/node":"^24.7.2","typescript":"^5.9.2"},"peerDependencies":{"typescript":"^5.9.2"},"engines":{"node":">=22.0.0"},"scripts":{"build":"tsc","dev":"tsc --watch"},"_id":"@boristype/bt-ir@0.1.0-alpha.5","_integrity":"sha512-uBIgZIhb4hgLA/F82d8V3a+KyqHiNpIrnlf5DfX0lV6AP4smTEsDVxKgolzX72ypKUxzzH6gCyTRhttgWFEBMw==","_resolved":"C:\\Users\\vomoh\\AppData\\Local\\Temp\\8902701d3e96eff1356df039def0a131\\boristype-bt-ir-0.1.0-alpha.5.tgz","_from":"file:boristype-bt-ir-0.1.0-alpha.5.tgz","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-uBIgZIhb4hgLA/F82d8V3a+KyqHiNpIrnlf5DfX0lV6AP4smTEsDVxKgolzX72ypKUxzzH6gCyTRhttgWFEBMw==","shasum":"7fffe2d63400b1ca2f2964c21303a1f4dadb201e","tarball":"https://registry.npmjs.org/@boristype/bt-ir/-/bt-ir-0.1.0-alpha.5.tgz","fileCount":91,"unpackedSize":598745,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGmKiusGXH6h3pJdtsa0dKA0GAZjQCn0OC5RvTwoHeq6AiA02hpBq56FVdb1n8/MmGZ3k/VrgF6AYLMcVmjTqutgMg=="}]},"_npmUser":{"name":"punkhomov","email":"punkhomov@gmail.com"},"directories":{},"maintainers":[{"name":"punkhomov","email":"punkhomov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bt-ir_0.1.0-alpha.5_1773077116914_0.5189242519779749"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-24T07:32:46.101Z","modified":"2026-03-09T17:25:17.208Z","0.1.0-alpha.0":"2026-02-24T07:32:46.377Z","0.1.0-alpha.2":"2026-02-25T17:18:27.379Z","0.1.0-alpha.3":"2026-02-25T18:32:56.088Z","0.1.0-alpha.4":"2026-02-26T10:59:22.864Z","0.1.0-alpha.5":"2026-03-09T17:25:17.083Z"},"bugs":{"url":"https://github.com/BorisType/BorisType/issues"},"author":{"name":"punkhomov"},"license":"MIT","homepage":"https://github.com/BorisType/BorisType#readme","keywords":["boristype","compiler","transpiler","ir"],"repository":{"type":"git","url":"git+https://github.com/BorisType/BorisType.git"},"description":"IR-based backend for BorisType compiler","maintainers":[{"name":"punkhomov","email":"punkhomov@gmail.com"}],"readme":"# bt-ir\n\n**IR-based компилятор TypeScript → BorisScript**\n\nbt-ir — бэкенд компиляции для [BorisType](../README.md), транспилирующий TypeScript в BorisScript через промежуточное представление (IR).\n\n## Обзор\n\n- **Вход:** TypeScript исходный код\n- **Выход:** BorisScript (.js файлы)\n- **Метод:** TypeScript AST → IR (Intermediate Representation) → BorisScript\n\n**Зачем IR?** Проще, легче поддерживать и корректнее, чем предыдущий подход на основе трансформеров.\n\n## Установка\n\n```bash\nnpm install bt-ir\n```\n\n## API\n\n### compile(sourceCode, options?)\n\nКомпилирует строку TypeScript исходного кода.\n\n```typescript\nimport { compile } from \"bt-ir\";\n\nconst result = compile(\n  `\n  const greet = (name: string) => {\n    alert(\\`Hello, \\${name}!\\`);\n  };\n  greet(\"World\");\n`,\n  {\n    filename: \"test.ts\",\n    compileMode: \"script\",\n  },\n);\n\nconsole.log(result.outputs[0].code);\n```\n\n**Параметры:**\n\n- `sourceCode: string` — TypeScript код для компиляции\n- `options?: CompileOptions` — Опции компиляции\n\n**Возвращает:** `CompileResult`\n\n### compileFile(filePath, options?)\n\nКомпилирует TypeScript файл.\n\n```typescript\nimport { compileFile } from \"bt-ir\";\n\nconst result = compileFile(\"./src/index.ts\", {\n  compileMode: \"module\",\n});\n\nconsole.log(result.outputs[0].code);\n```\n\n**Параметры:**\n\n- `filePath: string` — Путь к TypeScript файлу\n- `options?: CompileOptions` — Опции компиляции\n\n**Возвращает:** `CompileResult`\n\n### compileSourceFile(sourceFile, program, options?)\n\nКомпилирует TypeScript SourceFile (для интеграции с существующим TypeScript Program).\n\n```typescript\nimport ts from \"typescript\";\nimport { compileSourceFile } from \"bt-ir\";\n\nconst program = ts.createProgram([\"src/index.ts\"], {});\nconst sourceFile = program.getSourceFile(\"src/index.ts\")!;\n\nconst result = compileSourceFile(sourceFile, program, {\n  compileMode: \"module\",\n  cwd: process.cwd(),\n});\n\nconsole.log(result.outputs[0].code);\n```\n\n**Параметры:**\n\n- `sourceFile: ts.SourceFile` — TypeScript SourceFile для компиляции\n- `program: ts.Program` — Экземпляр TypeScript Program\n- `options?: CompileOptions` — Опции компиляции\n\n**Возвращает:** `CompileResult`\n\n## Типы\n\n### CompileOptions\n\n```typescript\ninterface CompileOptions {\n  /** Режим компиляции: bare, script или module */\n  compileMode?: \"bare\" | \"script\" | \"module\";\n\n  /** Текущая рабочая директория (для разрешения относительных путей) */\n  cwd?: string;\n\n  /** Имя исходного файла (для функции compile()) */\n  filename?: string;\n}\n```\n\n### CompileResult\n\n```typescript\ninterface CompileResult {\n  /** Результаты компиляции (обычно один файл) */\n  outputs: CompileOutput[];\n\n  /** Диагностика TypeScript (ошибки/предупреждения) */\n  diagnostics: ts.Diagnostic[];\n\n  /** Флаг успеха */\n  success: boolean;\n}\n```\n\n### CompileOutput\n\n```typescript\ninterface CompileOutput {\n  /** Путь к выходному файлу (относительно входного) */\n  path: string;\n\n  /** Сгенерированный BorisScript код */\n  code: string;\n\n  /** Source map (если включено) */\n  map?: string;\n}\n```\n\n## Режимы компиляции\n\nbt-ir поддерживает три режима компиляции:\n\n| Режим      | Назначение                           | Возможности                                    |\n| ---------- | ------------------------------------ | ---------------------------------------------- |\n| **bare**   | Runtime polyfills, встроенные модули | Минимальный вывод, нет bt.\\* обёрток           |\n| **script** | Тестовые файлы, executable объекты   | Полные возможности с bt.getProperty, polyfills |\n| **module** | Codelibrary пакеты (по умолчанию)    | Обёрнуто в \\_\\_init(), hoisting переменных     |\n\nСм. [Справка по режимам компиляции](../docs/reference/compile-modes.md) для деталей.\n\n## Примеры\n\n### Базовое использование\n\n```typescript\nimport { compile } from \"bt-ir\";\n\nconst result = compile(`\n  function add(a: number, b: number): number {\n    return a + b;\n  }\n  \n  const result = add(2, 3);\n  alert(result);\n`);\n\nif (result.success) {\n  console.log(result.outputs[0].code);\n}\n```\n\n### С конкретным режимом\n\n```typescript\nimport { compile } from \"bt-ir\";\n\n// Bare mode - минимальный overhead\nconst bareResult = compile(\n  `\n  export function fastHash(str: string): number {\n    return str.length;\n  }\n`,\n  { compileMode: \"bare\" },\n);\n\n// Script mode - полные возможности\nconst scriptResult = compile(\n  `\n  const obj = { foo: \"bar\" };\n  alert(obj.foo);\n`,\n  { compileMode: \"script\" },\n);\n\n// Module mode - codelibrary\nconst moduleResult = compile(\n  `\n  export function greet(name: string) {\n    alert(\"Hello \" + name);\n  }\n`,\n  { compileMode: \"module\" },\n);\n```\n\n### Интеграция с TypeScript Watch\n\n```typescript\nimport ts from \"typescript\";\nimport { compileSourceFile } from \"bt-ir\";\n\nconst host = ts.createWatchCompilerHost(\n  \"tsconfig.json\",\n  { noEmit: true }, // TypeScript только для диагностики\n  ts.sys,\n  ts.createProgram,\n  (diagnostic) => console.log(diagnostic.messageText),\n);\n\nconst originalAfterProgramCreate = host.afterProgramCreate;\nhost.afterProgramCreate = (program) => {\n  originalAfterProgramCreate?.(program);\n\n  // Emit через bt-ir\n  for (const sourceFile of program.getSourceFiles()) {\n    if (!sourceFile.isDeclarationFile) {\n      const result = compileSourceFile(sourceFile, program);\n      // Записать result.outputs[0].code на диск\n    }\n  }\n};\n\nts.createWatchProgram(host);\n```\n\n## Архитектура\n\n```\nTypeScript Source\n      ↓\n[TypeScript Parser]  ← TypeScript Compiler API\n      ↓\n[Scope Analyzer]     ← Анализ captured переменных\n      ↓\n[IR Lowering]        ← Преобразование TS AST → IR\n      ↓\n[BT Emitter]         ← Генерация BorisScript\n      ↓\nBorisScript Output\n```\n\nДля детальной архитектуры, см.:\n\n- [Архитектура IR Pipeline](../ref/architecture/ir-pipeline.md)\n- [Ограничения BorisScript](../docs/reference/borisscript-constraints.md)\n\n## Ключевые возможности\n\n### Автоматические трансформации\n\n- **Стрелочные функции** → Обычные функции с env/desc\n- **Шаблонные литералы** → Конкатенация строк\n- **for...of** → for...in (массивы BorisScript)\n- **let/const** → var с hoisting\n- **Замыкания** → цепочка \\_\\_env для captured переменных\n- **Доступ к свойствам** → bt.getProperty() (script/module mode)\n- **Вызовы методов** → bt.callFunction() (script/module mode)\n\n### Polyfills\n\nАвтоматическое внедрение polyfill для:\n\n- Методы массивов: map, filter, reduce, forEach, ...\n- Методы строк: split, trim, substring, ...\n- Методы чисел: toFixed, toString, ...\n\n### Анализ Scope\n\n- Обнаруживает captured переменные в замыканиях\n- Генерирует минимальную цепочку \\_\\_env\n- Правильный variable hoisting\n\n## CLI (Разработка)\n\nbt-ir включает CLI для тестирования:\n\n```bash\n# Компилировать один файл\nnode --experimental-strip-types src/cli.ts example/src/index.ts\n\n# Компилировать с выводом\nnode --experimental-strip-types src/cli.ts example/src/index.ts -o example/build/index.js\n\n# После сборки\nnpm run build\nnode build/cli.js example/src/index.ts\n```\n\n## Разработка\n\n```bash\n# Установить зависимости\nnpm install\n\n# Собрать\nnpm run build\n\n# Запустить тесты\nnpm test\n\n# Разработка с примерами\nnpm run build && node build/cli.js example/src/index.ts\n```\n\n## Структура проекта\n\n```\nbt-ir/\n├── src/\n│   ├── index.ts          # Public API\n│   ├── pipeline/         # Конвейер компиляции\n│   ├── analyzer/         # Анализ scope\n│   ├── ir/               # Определения IR нод\n│   ├── lowering/         # Трансформация TS AST → IR\n│   └── emitter/          # Генерация IR → BorisScript\n├── example/              # Примеры использования\n├── build/                # Скомпилированный вывод\n└── README.md             # Этот файл\n```\n\n## Версия TypeScript\n\nТребуется TypeScript 5.0+\n\n## Лицензия\n\nMIT\n\n## См. также\n\n- [Основной проект BorisType](../)\n- [Компилятор btc](../btc/)\n- [Справка по режимам компиляции](../docs/reference/compile-modes.md)\n- [Ограничения BorisScript](../docs/reference/borisscript-constraints.md)\n- [Архитектура IR Pipeline](../ref/architecture/ir-pipeline.md)\n","readmeFilename":"README.md"}