@boristype/bt-cli 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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -0
  3. package/build/builder/config.js +88 -0
  4. package/build/cli/commands/artifact.js +14 -0
  5. package/build/cli/commands/build.js +25 -0
  6. package/build/cli/commands/dev.js +190 -0
  7. package/build/cli/commands/index.js +18 -0
  8. package/build/cli/commands/init.js +15 -0
  9. package/build/cli/commands/link.js +18 -0
  10. package/build/cli/commands/push.js +28 -0
  11. package/build/cli/index.js +14 -0
  12. package/build/cli/types.js +2 -0
  13. package/build/core/artifacting/context.js +54 -0
  14. package/build/core/artifacting/index.js +37 -0
  15. package/build/core/artifacting/stages/index.js +10 -0
  16. package/build/core/artifacting/stages/main-archive.js +72 -0
  17. package/build/core/artifacting/stages/validate.js +70 -0
  18. package/build/core/artifacting/types.js +6 -0
  19. package/build/core/artifacting/utils/index.js +10 -0
  20. package/build/core/artifacting/utils/zip.js +94 -0
  21. package/build/core/babel.js +96 -0
  22. package/build/core/btconfig.types.js +6 -0
  23. package/build/core/build.js +280 -0
  24. package/build/core/building/compile-mode.js +146 -0
  25. package/build/core/building/compiler.js +281 -0
  26. package/build/core/building/coordinator.js +71 -0
  27. package/build/core/building/files.js +290 -0
  28. package/build/core/building/index.js +102 -0
  29. package/build/core/building/output.js +92 -0
  30. package/build/core/building/transformers.js +110 -0
  31. package/build/core/building/types.js +19 -0
  32. package/build/core/config.js +157 -0
  33. package/build/core/dependencies.js +223 -0
  34. package/build/core/linking/cache.js +260 -0
  35. package/build/core/linking/context.js +149 -0
  36. package/build/core/linking/dependencies.js +240 -0
  37. package/build/core/linking/executables.js +61 -0
  38. package/build/core/linking/generators/api-ext.js +57 -0
  39. package/build/core/linking/generators/component.js +83 -0
  40. package/build/core/linking/generators/filemap.js +53 -0
  41. package/build/core/linking/generators/index.js +21 -0
  42. package/build/core/linking/generators/init-xml.js +37 -0
  43. package/build/core/linking/generators/package-json.js +50 -0
  44. package/build/core/linking/index.js +213 -0
  45. package/build/core/linking/linkers/component.js +175 -0
  46. package/build/core/linking/linkers/index.js +69 -0
  47. package/build/core/linking/linkers/standalone.js +144 -0
  48. package/build/core/linking/linkers/system.js +86 -0
  49. package/build/core/linking/parsers.js +278 -0
  50. package/build/core/linking/types.js +6 -0
  51. package/build/core/linking/utils/copy.js +101 -0
  52. package/build/core/linking/utils/index.js +26 -0
  53. package/build/core/linking/utils/node-modules.js +226 -0
  54. package/build/core/linking/utils/package-type.js +101 -0
  55. package/build/core/linking/utils/url.js +73 -0
  56. package/build/core/linking/utils/write.js +91 -0
  57. package/build/core/logger.js +10 -0
  58. package/build/core/pushing/config.js +90 -0
  59. package/build/core/pushing/index.js +96 -0
  60. package/build/core/pushing/init-scripts.js +173 -0
  61. package/build/core/pushing/queue.js +95 -0
  62. package/build/core/pushing/reinit.js +61 -0
  63. package/build/core/pushing/session.js +167 -0
  64. package/build/core/pushing/types.js +6 -0
  65. package/build/core/pushing/upload.js +35 -0
  66. package/build/core/tsconfig.js +78 -0
  67. package/build/core/utils/index.js +17 -0
  68. package/build/core/utils/logger.js +46 -0
  69. package/build/core/utils/properties.js +81 -0
  70. package/build/core/utils/xml.js +44 -0
  71. package/build/core/utils.js +59 -0
  72. package/build/index.js +76 -0
  73. package/build/plugins/destructuring.js +83 -0
  74. package/build/plugins/forOfToForIn.js +14 -0
  75. package/build/plugins/loopHoistVariables.js +160 -0
  76. package/build/plugins/precedence.js +172 -0
  77. package/build/plugins/removeImportExport.js +42 -0
  78. package/build/plugins/replaceDollar.js +16 -0
  79. package/build/plugins/spreadArray.js +42 -0
  80. package/build/plugins/spreadObject.js +91 -0
  81. package/build/transformers/arrayFunctional.js +467 -0
  82. package/build/transformers/arrayGeneral.js +222 -0
  83. package/build/transformers/blockScoping.js +212 -0
  84. package/build/transformers/destructuring.js +133 -0
  85. package/build/transformers/dirname.js +79 -0
  86. package/build/transformers/enumsToObjects.js +25 -0
  87. package/build/transformers/execObj.js +220 -0
  88. package/build/transformers/forOfToForIn.js +45 -0
  89. package/build/transformers/funcSemantic.js +113 -0
  90. package/build/transformers/functions.js +270 -0
  91. package/build/transformers/globalCache.js +34 -0
  92. package/build/transformers/loopHoistVariables.js +352 -0
  93. package/build/transformers/math.js +39 -0
  94. package/build/transformers/namespaces.js +22 -0
  95. package/build/transformers/numericSeparator.js +46 -0
  96. package/build/transformers/objectProperties.js +54 -0
  97. package/build/transformers/precedence.js +192 -0
  98. package/build/transformers/propSemantic.js +467 -0
  99. package/build/transformers/remodule.js +620 -0
  100. package/build/transformers/removeImportExport.js +135 -0
  101. package/build/transformers/replaceDollar.js +46 -0
  102. package/build/transformers/shorthandProperties.js +34 -0
  103. package/build/transformers/spreadArray.js +68 -0
  104. package/build/transformers/spreadObject.js +134 -0
  105. package/build/transformers/string.js +138 -0
  106. package/build/transformers/templateLiterals.js +104 -0
  107. package/build/transformers/tocodelibrary.js +178 -0
  108. package/build/transformers/utils.js +202 -0
  109. package/build/wshcm/client.js +193 -0
  110. package/build/wshcm/evaluator.js +111 -0
  111. package/build/wshcm/exceptions.js +25 -0
  112. package/build/wshcm/index.js +20 -0
  113. package/build/wshcm/soap-utils.js +228 -0
  114. package/build/wshcm/types.js +2 -0
  115. package/build/wshcm/uploader.js +320 -0
  116. package/package.json +51 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 BorisType
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # btc — BorisType Compiler
2
+
3
+ Транспилятор TypeScript → BorisScript для платформы WebSoft HCM.
4
+
5
+ Использует [bt-ir](../bt-ir/) для emit: TypeScript Compiler API создаёт Program с `noEmit: true`, а кодогенерация выполняется через `compileSourceFile()` из bt-ir.
6
+
7
+ ## CLI-команды
8
+
9
+ ```
10
+ btc init # Создать проект (scaffold)
11
+ btc build # Однократная сборка
12
+ btc dev # Watch mode с инкрементальной компиляцией и авто-линковкой
13
+ btc link # Линковка модулей в dist/
14
+ btc push # Деплой dist/ на сервер WSHCM
15
+ btc artifact # Создание артефакта для развёртывания
16
+ ```
17
+
18
+ ## Структура `src/`
19
+
20
+ ```
21
+ src/
22
+ ├── index.ts # Точка входа (CLI bootstrap)
23
+ ├── cli/ # Тонкие обёртки над commander
24
+ │ ├── index.ts # Регистрация команд
25
+ │ └── commands/ # Обработчики CLI-команд
26
+ ├── core/ # Вся бизнес-логика
27
+ │ ├── config.ts # Чтение tsconfig / btconfig
28
+ │ ├── logger.ts # Re-export логгера
29
+ │ ├── utils/ # Общие утилиты
30
+ │ │ ├── logger.ts # Logger (singleton)
31
+ │ │ ├── properties.ts # Парсер .properties файлов
32
+ │ │ └── xml.ts # Общие XML builder/parser
33
+ │ ├── building/ # Компиляция TS → BS
34
+ │ │ ├── compiler.ts # Program + emit через bt-ir
35
+ │ │ ├── compile-mode.ts # Определение режима файла (module/script)
36
+ │ │ ├── coordinator.ts # Координатор dev mode (multi-package)
37
+ │ │ ├── files.ts # Копирование non-TS файлов
38
+ │ │ ├── output.ts # Пост-обработка вывода
39
+ │ │ └── types.ts # BuildContext, BuildResult, BtcCompileOptions
40
+ │ ├── linking/ # Сборка dist/ из модулей
41
+ │ │ ├── index.ts # Pipeline: resolve → link → finalize
42
+ │ │ ├── parsers.ts # Парсеры PackageInfo
43
+ │ │ ├── executables.ts # Сбор executables
44
+ │ │ ├── dependencies.ts # Дерево зависимостей
45
+ │ │ ├── cache.ts # Кэширование линковки
46
+ │ │ ├── context.ts # LinkingContext
47
+ │ │ ├── types.ts # PackageInfo, LinkingOptions
48
+ │ │ ├── linkers/ # Линковщики по типу пакета
49
+ │ │ ├── generators/ # Генерация api_ext.xml, init.xml и т.д.
50
+ │ │ └── utils/ # URL, copy, node_modules
51
+ │ ├── pushing/ # Деплой на сервер WSHCM
52
+ │ │ ├── session.ts # DeploySession (с retry/reconnect)
53
+ │ │ ├── upload.ts # Загрузка файлов
54
+ │ │ ├── config.ts # Чтение btconfig.properties
55
+ │ │ ├── queue.ts # DebouncedPushQueue для dev mode
56
+ │ │ └── reinit.ts # Реинициализация на сервере
57
+ │ └── artifacting/ # Создание архивов для деплоя
58
+ ```
59
+
60
+ ## Сборка
61
+
62
+ ```bash
63
+ npm run build # tsc → build/
64
+ ```
65
+
66
+ Требуется Node.js 22+.
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getTSConfig = getTSConfig;
40
+ exports.getBTConfig = getBTConfig;
41
+ const typescript_1 = __importDefault(require("typescript"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const logger_1 = require("../core/logger");
45
+ function getTSConfig(cwd, project = 'tsconfig.json') {
46
+ const tsconfigPath = typescript_1.default.findConfigFile(cwd, typescript_1.default.sys.fileExists, project);
47
+ if (!tsconfigPath) {
48
+ logger_1.logger.error(`There is no any configuration files at "${cwd}". Execute npx tsc -init to create a new one.`);
49
+ process.exit(1);
50
+ }
51
+ const { config, error } = typescript_1.default.readConfigFile(tsconfigPath, typescript_1.default.sys.readFile);
52
+ if (error) {
53
+ logger_1.logger.error(error.messageText.toString());
54
+ process.exit(1);
55
+ }
56
+ // Используем директорию tsconfig.json как базу для резолва путей
57
+ const configDir = path.dirname(tsconfigPath);
58
+ const configFileContent = typescript_1.default.parseJsonConfigFileContent(config, typescript_1.default.sys, configDir);
59
+ if (configFileContent.errors.length > 0) {
60
+ configFileContent.errors.forEach(diagnostic => {
61
+ logger_1.logger.error(diagnostic.messageText.toString());
62
+ });
63
+ process.exit(1);
64
+ }
65
+ return configFileContent;
66
+ }
67
+ /**
68
+ * Читает и парсит btconfig.json
69
+ * @param cwd Рабочая директория
70
+ * @param project Имя файла конфигурации (по умолчанию btconfig.json)
71
+ * @returns Объект конфигурации BtConfig или undefined если файл не найден
72
+ */
73
+ function getBTConfig(cwd, project = 'btconfig.json') {
74
+ const btconfigPath = path.join(cwd, project);
75
+ // Если файл не существует, возвращаем undefined
76
+ if (!fs.existsSync(btconfigPath)) {
77
+ return undefined;
78
+ }
79
+ try {
80
+ const configContent = fs.readFileSync(btconfigPath, 'utf-8');
81
+ const config = JSON.parse(configContent);
82
+ return config;
83
+ }
84
+ catch (error) {
85
+ logger_1.logger.error(`Error reading or parsing ${project}: ${error}`);
86
+ process.exit(1);
87
+ }
88
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.artifactCommand = artifactCommand;
4
+ const artifacting_1 = require("../../core/artifacting");
5
+ /**
6
+ * Команда artifact - создание архивов для поставки
7
+ * Создаёт zip-архив из директории dist
8
+ *
9
+ * @param options - Опции команды
10
+ */
11
+ async function artifactCommand(options = {}) {
12
+ const cwd = process.cwd();
13
+ await (0, artifacting_1.processArtifact)(cwd, { clean: options.clean ?? false });
14
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCommand = buildCommand;
4
+ const config_js_1 = require("../../core/config.js");
5
+ const index_js_1 = require("../../core/building/index.js");
6
+ /**
7
+ * Команда build - транспиляция TypeScript в BorisScript
8
+ *
9
+ * @param files - Список файлов для компиляции (пустой = все файлы из tsconfig)
10
+ * @param options - Опции компиляции
11
+ */
12
+ async function buildCommand(files, options) {
13
+ const cwd = process.cwd();
14
+ const tsConfig = (0, config_js_1.getTSConfig)(cwd, 'tsconfig.json');
15
+ const _btConfig = (0, config_js_1.getBTConfig)(cwd, 'btconfig.json'); // TODO: использовать в будущем
16
+ const result = index_js_1.BuildPipeline.run({
17
+ tsConfig,
18
+ options,
19
+ files,
20
+ cwd,
21
+ });
22
+ if (!result.success) {
23
+ process.exitCode = 1;
24
+ }
25
+ }
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.devCommand = devCommand;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs"));
39
+ const logger_1 = require("../../core/logger");
40
+ const index_1 = require("../../core/linking/index");
41
+ const config_1 = require("../../core/config");
42
+ const index_2 = require("../../core/building/index");
43
+ const index_3 = require("../../core/pushing/index");
44
+ const queue_1 = require("../../core/pushing/queue");
45
+ const coordinator_1 = require("../../core/building/coordinator");
46
+ /**
47
+ * Команда dev - режим разработки с watch
48
+ *
49
+ * Использует TypeScript watch API для инкрементальной компиляции.
50
+ * Координирует сборку и линковку для multi-package проектов:
51
+ * 1. Запускает watch для всех пакетов
52
+ * 2. Ждёт завершения initial build всех пакетов
53
+ * 3. Выполняет полную линковку
54
+ * 4. Переходит в инкрементальный режим
55
+ */
56
+ async function devCommand(options = {}) {
57
+ const projectPath = process.cwd();
58
+ const enablePush = options.push !== false;
59
+ logger_1.logger.info('🔧 Starting dev mode...');
60
+ // 1. Получаем пакеты для линковки
61
+ const packages = (0, index_1.resolvePackagesToLink)(projectPath);
62
+ logger_1.logger.info(`📦 Found ${packages.length} package(s) to process`);
63
+ // 2. Фильтруем только ws:package пакеты (не статический контент)
64
+ const watchPackages = resolveWatchPackages(projectPath, packages);
65
+ if (watchPackages.length === 0) {
66
+ logger_1.logger.warning('⚠️ No ws:package packages found to watch');
67
+ return;
68
+ }
69
+ logger_1.logger.info(`👀 Watching ${watchPackages.length} package(s):`);
70
+ for (const pkg of watchPackages) {
71
+ logger_1.logger.info(` - ${pkg.wsName} (${pkg.packageType}) at ${pkg.name}`);
72
+ }
73
+ // 3. Создаём координатор
74
+ let pushQueue = null;
75
+ if (enablePush) {
76
+ logger_1.logger.info('📤 Auto-push enabled (use --no-push to disable)');
77
+ const connectionOptions = (0, index_3.resolvePushConnectionOptions)(projectPath);
78
+ logger_1.logger.info(`📡 Server: ${connectionOptions.https ? 'https' : 'http'}://${connectionOptions.host}:${connectionOptions.port}`);
79
+ const distPath = path.join(projectPath, 'dist');
80
+ const session = new index_3.DeploySession(connectionOptions);
81
+ pushQueue = new queue_1.DebouncedPushQueue(session, distPath);
82
+ }
83
+ const coordinator = new coordinator_1.DevCoordinator(projectPath, watchPackages, packages, pushQueue);
84
+ // 4. Запускаем watchers для каждого пакета
85
+ logger_1.logger.info('🔨 Starting initial build...');
86
+ const watchers = [];
87
+ for (const pkg of watchPackages) {
88
+ const watcher = startPackageWatch(pkg, coordinator);
89
+ if (watcher) {
90
+ watchers.push(watcher);
91
+ }
92
+ }
93
+ // Обработка graceful shutdown
94
+ process.on('SIGINT', async () => {
95
+ logger_1.logger.info('\n🛑 Stopping dev mode...');
96
+ for (const w of watchers) {
97
+ w.close();
98
+ }
99
+ if (pushQueue) {
100
+ await pushQueue.close();
101
+ }
102
+ process.exit(0);
103
+ });
104
+ }
105
+ /**
106
+ * Определяет какие пакеты являются ws:package и могут быть watch-ены
107
+ */
108
+ function resolveWatchPackages(projectPath, packages) {
109
+ const result = [];
110
+ for (const pkg of packages) {
111
+ const packageDir = pkg.name === '.'
112
+ ? projectPath
113
+ : path.join(projectPath, pkg.name);
114
+ const packageJsonPath = path.join(packageDir, 'package.json');
115
+ if (!fs.existsSync(packageJsonPath)) {
116
+ // Нет package.json - это статический контент, не watch-им
117
+ continue;
118
+ }
119
+ try {
120
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
121
+ const wsPackage = packageJson['ws:package'];
122
+ const wsName = packageJson['ws:name'];
123
+ // Только пакеты с ws:package (standalone, component, system)
124
+ if (!wsPackage || !wsName) {
125
+ // Не BT пакет - пропускаем
126
+ continue;
127
+ }
128
+ // library пакеты не watch-им напрямую
129
+ if (wsPackage === 'library' || wsPackage === 'lib') {
130
+ continue;
131
+ }
132
+ result.push({
133
+ name: pkg.name,
134
+ absolutePath: packageDir,
135
+ wsName,
136
+ packageType: wsPackage,
137
+ });
138
+ }
139
+ catch (error) {
140
+ logger_1.logger.warning(`⚠️ Failed to parse package.json in ${pkg.name}: ${error}`);
141
+ }
142
+ }
143
+ return result;
144
+ }
145
+ /**
146
+ * Запускает watch для пакета используя BuildPipeline.watch()
147
+ *
148
+ * @param pkg - Информация о пакете
149
+ * @param coordinator - Координатор dev mode
150
+ */
151
+ function startPackageWatch(pkg, coordinator) {
152
+ const tsconfigPath = path.join(pkg.absolutePath, 'tsconfig.json');
153
+ if (!fs.existsSync(tsconfigPath)) {
154
+ logger_1.logger.warning(`⚠️ No tsconfig.json found for ${pkg.wsName}, skipping watch`);
155
+ return null;
156
+ }
157
+ logger_1.logger.info(` 🔄 Starting watcher for ${pkg.wsName}...`);
158
+ // Получаем tsconfig
159
+ const tsConfig = (0, config_1.getTSConfig)(pkg.absolutePath, 'tsconfig.json');
160
+ // Запускаем watch через BuildPipeline
161
+ const watcher = index_2.BuildPipeline.watch({
162
+ tsConfig,
163
+ options: {
164
+ includeNonTsFiles: true,
165
+ retainNonAsciiCharacters: false,
166
+ removeComments: false,
167
+ useBabel: false,
168
+ usePolyfill: true,
169
+ useRemodule: true,
170
+ },
171
+ files: [],
172
+ cwd: pkg.absolutePath,
173
+ }, {
174
+ onRebuild: (result) => {
175
+ if (result.success) {
176
+ logger_1.logger.success(`✅ [${pkg.wsName}] Build successful (${result.duration}ms)`);
177
+ // Координатор решает: полная или инкрементальная линковка
178
+ coordinator.onPackageBuild(pkg, result.emittedFiles);
179
+ }
180
+ else {
181
+ logger_1.logger.error(`❌ [${pkg.wsName}] Build failed`);
182
+ }
183
+ },
184
+ onNonTsFileChange: (filePath) => {
185
+ // Координатор обрабатывает изменения non-TS файлов
186
+ coordinator.onNonTsFileChange(pkg, filePath);
187
+ },
188
+ });
189
+ return watcher;
190
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pushCommand = exports.devCommand = exports.artifactCommand = exports.linkCommand = exports.buildCommand = exports.initCommand = void 0;
4
+ /**
5
+ * Реэкспорт всех команд CLI
6
+ */
7
+ var init_1 = require("./init");
8
+ Object.defineProperty(exports, "initCommand", { enumerable: true, get: function () { return init_1.initCommand; } });
9
+ var build_1 = require("./build");
10
+ Object.defineProperty(exports, "buildCommand", { enumerable: true, get: function () { return build_1.buildCommand; } });
11
+ var link_1 = require("./link");
12
+ Object.defineProperty(exports, "linkCommand", { enumerable: true, get: function () { return link_1.linkCommand; } });
13
+ var artifact_1 = require("./artifact");
14
+ Object.defineProperty(exports, "artifactCommand", { enumerable: true, get: function () { return artifact_1.artifactCommand; } });
15
+ var dev_1 = require("./dev");
16
+ Object.defineProperty(exports, "devCommand", { enumerable: true, get: function () { return dev_1.devCommand; } });
17
+ var push_1 = require("./push");
18
+ Object.defineProperty(exports, "pushCommand", { enumerable: true, get: function () { return push_1.pushCommand; } });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initCommand = initCommand;
4
+ const config_1 = require("../../core/config");
5
+ const logger_1 = require("../../core/logger");
6
+ /**
7
+ * Команда init - инициализация BorisType проекта
8
+ * Создаёт tsconfig.json с настройками по умолчанию
9
+ */
10
+ async function initCommand() {
11
+ const cwd = process.cwd();
12
+ logger_1.logger.info('🚀 Initializing BorisType project...');
13
+ (0, config_1.generateDefaultTSConfig)(cwd);
14
+ logger_1.logger.success('✅ Project initialized successfully');
15
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.linkCommand = linkCommand;
4
+ const index_1 = require("../../core/linking/index");
5
+ /**
6
+ * Команда link - компоновка модулей и зависимостей
7
+ * Собирает все необходимые модули в директорию dist
8
+ *
9
+ * @param options - Опции команды
10
+ */
11
+ async function linkCommand(options = {}) {
12
+ const linkingOptions = {
13
+ clean: options.clean,
14
+ noCache: options.noCache,
15
+ systemLinkMode: options.linkingSystemAs ?? 'component'
16
+ };
17
+ await (0, index_1.processLinking)(linkingOptions);
18
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * Команда push — CLI обёртка для загрузки dist на WSHCM сервер
4
+ *
5
+ * Тонкая обёртка над core/pushing/processPush().
6
+ * Вся бизнес-логика находится в core/pushing/.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.pushCommand = pushCommand;
10
+ const index_1 = require("../../core/pushing/index");
11
+ /**
12
+ * Команда push - загрузка dist на WSHCM сервер
13
+ *
14
+ * Выполняет:
15
+ * 1. Отправку dist на WSHCM сервер
16
+ * 2. Сброс кеша модулей
17
+ * 3. Reinit для standalone и components
18
+ *
19
+ * Приоритет опций:
20
+ * 1. CLI параметры
21
+ * 2. btconfig.properties
22
+ * 3. Дефолтные значения (localhost:80, user1:user1)
23
+ *
24
+ * @param cliOptions - Опции из CLI (опциональные)
25
+ */
26
+ async function pushCommand(cliOptions = {}) {
27
+ await (0, index_1.processPush)(process.cwd(), cliOptions);
28
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pushCommand = exports.devCommand = exports.artifactCommand = exports.linkCommand = exports.buildCommand = exports.initCommand = void 0;
4
+ /**
5
+ * CLI модуль btc
6
+ * Реэкспорт команд и типов
7
+ */
8
+ var commands_1 = require("./commands");
9
+ Object.defineProperty(exports, "initCommand", { enumerable: true, get: function () { return commands_1.initCommand; } });
10
+ Object.defineProperty(exports, "buildCommand", { enumerable: true, get: function () { return commands_1.buildCommand; } });
11
+ Object.defineProperty(exports, "linkCommand", { enumerable: true, get: function () { return commands_1.linkCommand; } });
12
+ Object.defineProperty(exports, "artifactCommand", { enumerable: true, get: function () { return commands_1.artifactCommand; } });
13
+ Object.defineProperty(exports, "devCommand", { enumerable: true, get: function () { return commands_1.devCommand; } });
14
+ Object.defineProperty(exports, "pushCommand", { enumerable: true, get: function () { return commands_1.pushCommand; } });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createArtifactContext = createArtifactContext;
37
+ const path = __importStar(require("path"));
38
+ /**
39
+ * Создаёт начальный контекст для artifact pipeline
40
+ *
41
+ * @param cwd - Рабочая директория
42
+ * @param options - Опции pipeline
43
+ * @returns Начальный контекст
44
+ */
45
+ function createArtifactContext(cwd, options) {
46
+ const distPath = path.join(cwd, 'dist');
47
+ const artifactPath = path.join(cwd, 'artifact');
48
+ return {
49
+ cwd,
50
+ distPath,
51
+ artifactPath,
52
+ options,
53
+ };
54
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * Artifact Pipeline
4
+ *
5
+ * Создание архива для поставки из директории dist
6
+ *
7
+ * Pipeline stages:
8
+ * 1. Validate - проверка dist, очистка/создание artifact/
9
+ * 2. Create Archive - создание main.zip (полное содержимое dist)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.processArtifact = processArtifact;
13
+ const logger_1 = require("../logger");
14
+ const context_1 = require("./context");
15
+ const stages_1 = require("./stages");
16
+ /**
17
+ * Выполняет artifact pipeline
18
+ *
19
+ * @param cwd - Рабочая директория
20
+ * @param options - Опции pipeline
21
+ * @returns Финальный контекст с информацией о созданном архиве
22
+ */
23
+ async function processArtifact(cwd, options) {
24
+ logger_1.logger.info('🚀 Artifact Pipeline Started');
25
+ logger_1.logger.info('─'.repeat(40));
26
+ // Создаём начальный контекст
27
+ let ctx = (0, context_1.createArtifactContext)(cwd, options);
28
+ // Stage 1: Validate
29
+ ctx = (0, stages_1.stageValidate)(ctx);
30
+ // Stage 2: Create Archive
31
+ ctx = await (0, stages_1.stageMainArchive)(ctx);
32
+ // Summary
33
+ logger_1.logger.info('─'.repeat(40));
34
+ logger_1.logger.info(`✅ Artifact Pipeline Completed`);
35
+ logger_1.logger.info(` Архив: ${ctx.archivePath}`);
36
+ return ctx;
37
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stageMainArchive = exports.stageValidate = void 0;
4
+ /**
5
+ * Реэкспорт stages для artifact pipeline
6
+ */
7
+ var validate_1 = require("./validate");
8
+ Object.defineProperty(exports, "stageValidate", { enumerable: true, get: function () { return validate_1.stageValidate; } });
9
+ var main_archive_1 = require("./main-archive");
10
+ Object.defineProperty(exports, "stageMainArchive", { enumerable: true, get: function () { return main_archive_1.stageMainArchive; } });