@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
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * Создание и управление контекстом линковки
4
+ * @module linking/context
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 () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.createLinkingContext = createLinkingContext;
41
+ exports.prepareDistDirectory = prepareDistDirectory;
42
+ exports.addLinkedPackage = addLinkedPackage;
43
+ exports.addApiExtEntry = addApiExtEntry;
44
+ exports.addExecutable = addExecutable;
45
+ exports.getLinkingStats = getLinkingStats;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const cache_1 = require("./cache");
49
+ const logger_1 = require("../logger");
50
+ /**
51
+ * Создаёт новый контекст линковки
52
+ *
53
+ * @param options - Опции для создания контекста
54
+ * @returns Инициализированный контекст линковки
55
+ *
56
+ * @remarks
57
+ * Контекст содержит:
58
+ * - Пути к проекту и dist директории
59
+ * - Списки слинкованных пакетов и api_ext записей
60
+ * - Глобальную карту executables
61
+ * - Кэш линковки
62
+ * - Логгер
63
+ */
64
+ function createLinkingContext(options) {
65
+ const { projectPath, systemLinkMode = 'component', noCache = false, logger = logger_1.logger, devMode = false, changedFiles = [] } = options;
66
+ const distPath = path.join(projectPath, 'dist');
67
+ const cache = new cache_1.LinkingCache(projectPath, !noCache);
68
+ return {
69
+ projectPath,
70
+ distPath,
71
+ systemLinkMode,
72
+ cache,
73
+ linkedPackages: [],
74
+ apiExtEntries: [],
75
+ executables: new Map(),
76
+ logger,
77
+ devMode,
78
+ changedFiles
79
+ };
80
+ }
81
+ /**
82
+ * Подготавливает директорию dist
83
+ *
84
+ * @param ctx - Контекст линковки
85
+ * @param clean - Очистить директорию перед созданием (кэш очищается отдельно до создания контекста)
86
+ */
87
+ function prepareDistDirectory(ctx, clean = false) {
88
+ if (clean) {
89
+ // Очищаем dist
90
+ if (fs.existsSync(ctx.distPath)) {
91
+ fs.rmSync(ctx.distPath, { recursive: true, force: true });
92
+ }
93
+ // Кэш уже очищен до создания контекста
94
+ ctx.logger.success('🧹 Cleaned dist directory and cache');
95
+ }
96
+ if (!fs.existsSync(ctx.distPath)) {
97
+ fs.mkdirSync(ctx.distPath, { recursive: true });
98
+ }
99
+ }
100
+ /**
101
+ * Добавляет результат линковки в контекст
102
+ *
103
+ * @param ctx - Контекст линковки
104
+ * @param result - Результат линковки пакета
105
+ */
106
+ function addLinkedPackage(ctx, result) {
107
+ ctx.linkedPackages.push(result);
108
+ if (result.apiext) {
109
+ ctx.apiExtEntries.push(result.apiext);
110
+ }
111
+ }
112
+ /**
113
+ * Добавляет запись в api_ext напрямую
114
+ *
115
+ * @param ctx - Контекст линковки
116
+ * @param entry - Запись для api_ext.xml
117
+ */
118
+ function addApiExtEntry(ctx, entry) {
119
+ ctx.apiExtEntries.push(entry);
120
+ }
121
+ /**
122
+ * Добавляет executable в глобальную карту
123
+ *
124
+ * @param ctx - Контекст линковки
125
+ * @param key - Ключ файла (packageName+version+filePath)
126
+ * @param url - URL файла (x-local://...)
127
+ */
128
+ function addExecutable(ctx, key, url) {
129
+ ctx.executables.set(key, url);
130
+ }
131
+ /**
132
+ * Получает статистику линковки
133
+ *
134
+ * @param ctx - Контекст линковки
135
+ * @returns Объект со статистикой
136
+ */
137
+ function getLinkingStats(ctx) {
138
+ const packagesByType = {};
139
+ for (const pkg of ctx.linkedPackages) {
140
+ const type = pkg.info.packageType;
141
+ packagesByType[type] = (packagesByType[type] || 0) + 1;
142
+ }
143
+ return {
144
+ totalPackages: ctx.linkedPackages.length,
145
+ totalApiExtEntries: ctx.apiExtEntries.length,
146
+ totalExecutables: ctx.executables.size,
147
+ packagesByType
148
+ };
149
+ }
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ /**
3
+ * Дерево зависимостей проекта
4
+ *
5
+ * Построение, обход и вывод дерева npm-зависимостей.
6
+ * Используется линковкой для определения @boristype/* пакетов.
7
+ *
8
+ * @module linking/dependencies
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.DependencyNode = void 0;
45
+ exports.getCompilerRequiredDependencies = getCompilerRequiredDependencies;
46
+ exports.buildDependencyTree = buildDependencyTree;
47
+ exports.flattenDependencyTreeIterative = flattenDependencyTreeIterative;
48
+ exports.printDependencyTree = printDependencyTree;
49
+ exports.printFlattenedTree = printFlattenedTree;
50
+ exports.extractBorisTypeDependencies = extractBorisTypeDependencies;
51
+ const node_fs_1 = require("node:fs");
52
+ const path = __importStar(require("node:path"));
53
+ const node_crypto_1 = require("node:crypto");
54
+ const logger_1 = require("../utils/logger");
55
+ /**
56
+ * Узел дерева зависимостей
57
+ */
58
+ class DependencyNode {
59
+ packageJson;
60
+ name;
61
+ version;
62
+ dependencies;
63
+ projectPath;
64
+ hash;
65
+ constructor(packageJson, projectPath = '') {
66
+ this.packageJson = packageJson;
67
+ this.name = packageJson.name;
68
+ this.version = packageJson.version;
69
+ this.dependencies = [];
70
+ this.projectPath = projectPath;
71
+ this.hash = (0, node_crypto_1.randomUUID)();
72
+ }
73
+ }
74
+ exports.DependencyNode = DependencyNode;
75
+ /**
76
+ * Собирает @boristype/* зависимости компилятора из node_modules.
77
+ *
78
+ * @param projectPath - путь к корню проекта
79
+ * @returns массив узлов зависимостей
80
+ */
81
+ async function getCompilerRequiredDependencies(projectPath) {
82
+ const rootPackageJsonPath = path.join(projectPath, 'package.json');
83
+ const nodeModulesPath = path.join(projectPath, 'node_modules');
84
+ const rootPackageJson = JSON.parse(await node_fs_1.promises.readFile(rootPackageJsonPath, 'utf-8'));
85
+ const devDependencies = rootPackageJson.devDependencies || {};
86
+ const btcRemoteDependency = devDependencies['@boristype/bt-cli'] !== undefined;
87
+ if (!btcRemoteDependency) {
88
+ logger_1.logger.warning(`Предупреждение: В devDependencies отсутствует зависимость '@boristype/bt-cli'.`);
89
+ return [];
90
+ }
91
+ const btcPath = path.join(nodeModulesPath, '@boristype', 'bt-cli');
92
+ const btcPackageJsonPath = path.join(btcPath, 'package.json');
93
+ const btcPackageJson = JSON.parse(await node_fs_1.promises.readFile(btcPackageJsonPath, 'utf-8'));
94
+ const btcDependencies = btcPackageJson.dependencies || {};
95
+ const result = [];
96
+ logger_1.logger.info(`Загрузка зависимостей компилятора из ${btcPath}`);
97
+ for (const [depName, depVersion] of Object.entries(btcDependencies)) {
98
+ if (depName.startsWith('@boristype/')) {
99
+ const depPath = path.join(nodeModulesPath, '@boristype', depName.replace('@boristype/', ''));
100
+ logger_1.logger.info(`Загрузка зависимости компилятора: ${depName} из ${depPath}`);
101
+ try {
102
+ const depPackageJsonPath = path.join(depPath, 'package.json');
103
+ const depPackageJson = JSON.parse(await node_fs_1.promises.readFile(depPackageJsonPath, 'utf-8'));
104
+ const depNode = new DependencyNode(depPackageJson, depPath);
105
+ result.push(depNode);
106
+ }
107
+ catch (err) {
108
+ const message = err instanceof Error ? err.message : String(err);
109
+ logger_1.logger.warning(`Не удалось обработать зависимость ${depName}: ${message}`);
110
+ }
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ /**
116
+ * Строит полное дерево зависимостей проекта.
117
+ *
118
+ * @param projectPath - путь к корню проекта
119
+ * @returns корневой узел дерева
120
+ */
121
+ async function buildDependencyTree(projectPath) {
122
+ const rootPackageJsonPath = path.join(projectPath, 'package.json');
123
+ const nodeModulesPath = path.join(projectPath, 'node_modules');
124
+ const rootPackageJson = JSON.parse(await node_fs_1.promises.readFile(rootPackageJsonPath, 'utf-8'));
125
+ const rootNode = new DependencyNode(rootPackageJson, projectPath);
126
+ const processedModules = new Map();
127
+ async function processDependencies(parentNode, nodeModulesDir, packageJsonPath, visited = new Set()) {
128
+ let dependencies = {};
129
+ try {
130
+ const packageJson = JSON.parse(await node_fs_1.promises.readFile(packageJsonPath, 'utf-8'));
131
+ dependencies = packageJson.dependencies || {};
132
+ }
133
+ catch (err) {
134
+ logger_1.logger.warning(`Не удалось прочитать package.json для ${parentNode.name}: ${packageJsonPath}`);
135
+ return;
136
+ }
137
+ for (const [depName, depVersion] of Object.entries(dependencies)) {
138
+ const depKey = `${depName}@${depVersion}`;
139
+ if (visited.has(depKey)) {
140
+ logger_1.logger.warning(`Обнаружена циклическая зависимость: ${depKey}`);
141
+ continue;
142
+ }
143
+ const depPath = path.join(nodeModulesDir, depName);
144
+ try {
145
+ const depPackageJsonPath = path.join(depPath, 'package.json');
146
+ const depPackageJson = JSON.parse(await node_fs_1.promises.readFile(depPackageJsonPath, 'utf-8'));
147
+ const processedKey = `${depPackageJson.name}@${depPackageJson.version}`;
148
+ let depNode;
149
+ if (processedModules.has(processedKey)) {
150
+ depNode = processedModules.get(processedKey);
151
+ }
152
+ else {
153
+ depNode = new DependencyNode(depPackageJson, depPath);
154
+ processedModules.set(processedKey, depNode);
155
+ const newVisited = new Set(visited);
156
+ newVisited.add(depKey);
157
+ await processDependencies(depNode, nodeModulesDir, depPackageJsonPath, newVisited);
158
+ }
159
+ parentNode.dependencies.push(depNode);
160
+ }
161
+ catch (err) {
162
+ const message = err instanceof Error ? err.message : String(err);
163
+ logger_1.logger.warning(`Не удалось обработать зависимость ${depName}: ${message}`);
164
+ }
165
+ }
166
+ }
167
+ await processDependencies(rootNode, nodeModulesPath, rootPackageJsonPath);
168
+ return rootNode;
169
+ }
170
+ /**
171
+ * Итеративное уплощение дерева зависимостей (безопасно для больших деревьев).
172
+ *
173
+ * @param rootNode - корневой узел
174
+ * @returns массив узлов в порядке загрузки
175
+ */
176
+ function flattenDependencyTreeIterative(rootNode) {
177
+ const visited = new Set();
178
+ const result = [];
179
+ const stack = [];
180
+ stack.push({ node: rootNode, path: new Set() });
181
+ while (stack.length > 0) {
182
+ const { node, path } = stack.pop();
183
+ if (path.has(node.hash)) {
184
+ logger_1.logger.warning(`Обнаружена циклическая зависимость: ${node.name}@${node.version}`);
185
+ continue;
186
+ }
187
+ if (visited.has(node.hash)) {
188
+ continue;
189
+ }
190
+ const unprocessedDeps = node.dependencies.filter(dep => !visited.has(dep.hash));
191
+ if (unprocessedDeps.length === 0) {
192
+ visited.add(node.hash);
193
+ result.push(node);
194
+ }
195
+ else {
196
+ stack.push({ node, path });
197
+ const newPath = new Set(path);
198
+ newPath.add(node.hash);
199
+ for (const dep of unprocessedDeps) {
200
+ if (!path.has(dep.hash)) {
201
+ stack.push({ node: dep, path: newPath });
202
+ }
203
+ }
204
+ }
205
+ }
206
+ return result;
207
+ }
208
+ /**
209
+ * Выводит дерево зависимостей в консоль.
210
+ */
211
+ function printDependencyTree(node, depth = 0) {
212
+ logger_1.logger.info('\n📦 Дерево зависимостей:');
213
+ function printInternal(node, depth) {
214
+ logger_1.logger.info('='.repeat(50));
215
+ logger_1.logger.info(`${' '.repeat(depth * 2)}${node.name}@${node.version} [${node.hash}]`);
216
+ for (const dep of node.dependencies) {
217
+ printInternal(dep, depth + 1);
218
+ }
219
+ }
220
+ printInternal(node, depth);
221
+ }
222
+ /**
223
+ * Выводит плоский список зависимостей в консоль.
224
+ */
225
+ function printFlattenedTree(flatTree) {
226
+ logger_1.logger.info('\n📦 Плоский список зависимостей (в порядке загрузки):');
227
+ logger_1.logger.info('='.repeat(50));
228
+ flatTree.forEach((node, index) => {
229
+ logger_1.logger.info(`${(index + 1).toString().padStart(2)}. ${node.name}@${node.version} [${node.hash}]`);
230
+ });
231
+ }
232
+ /**
233
+ * Извлекает только ws:package зависимости из плоского списка.
234
+ */
235
+ function extractBorisTypeDependencies(flatTree) {
236
+ return flatTree.filter(node => {
237
+ const wsPackage = node.packageJson['ws:package'];
238
+ return typeof wsPackage === 'string';
239
+ });
240
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Сбор информации об исполняемых объектах (executables) из пакетов
4
+ *
5
+ * @module linking/executables
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.collectExecutables = collectExecutables;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const url_js_1 = require("./utils/url.js");
45
+ const context_js_1 = require("./context.js");
46
+ /**
47
+ * Собирает executables из .executables.json пакета
48
+ * и регистрирует их в контексте линковки
49
+ */
50
+ function collectExecutables(pkgInfo, ctx) {
51
+ const executablesPath = path.join(pkgInfo.sourceDir, '.executables.json');
52
+ if (!fs.existsSync(executablesPath)) {
53
+ return;
54
+ }
55
+ const executablesData = JSON.parse(fs.readFileSync(executablesPath, 'utf-8'));
56
+ for (const exec of executablesData) {
57
+ const fileKey = `${exec.packageName}+${exec.packageVersion}+${exec.filePath}`;
58
+ const fileAbsoluteUrl = (0, url_js_1.UrlAppenPath)(pkgInfo.rootUrl, exec.filePath.replace(/\.ts$/, '.js').substring(exec.filePath.indexOf('/')));
59
+ (0, context_js_1.addExecutable)(ctx, fileKey, fileAbsoluteUrl);
60
+ }
61
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Генератор api_ext.xml
4
+ * @module linking/generators/api-ext
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildApiExt = buildApiExt;
8
+ const xml_1 = require("../../utils/xml");
9
+ /**
10
+ * Генерирует содержимое api_ext.xml файла
11
+ *
12
+ * @param entries - Массив записей для api_ext.xml
13
+ * @returns Содержимое api_ext.xml файла
14
+ *
15
+ * @remarks
16
+ * api_ext.xml содержит список модулей и их библиотек (libs).
17
+ * Создаётся один раз для всего проекта в dist/source/api_ext.xml.
18
+ *
19
+ * Структура:
20
+ * ```xml
21
+ * <api_ext>
22
+ * <apis>
23
+ * <api>
24
+ * <name>module:mypackage</name>
25
+ * <libs>
26
+ * <lib><path>x-local://wt/mypackage/init.xml</path></lib>
27
+ * </libs>
28
+ * </api>
29
+ * </apis>
30
+ * </api_ext>
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const entries = [
36
+ * { name: 'module:polyfill', libs: ['x-local://wt/polyfill/init.xml'] },
37
+ * { name: 'module:myapp', libs: ['x-local://wt/myapp/init.xml'] }
38
+ * ];
39
+ * const xml = buildApiExt(entries);
40
+ * ```
41
+ */
42
+ function buildApiExt(entries) {
43
+ const xmlObj = {
44
+ '?xml': { '@_version': '1.0', '@_encoding': 'utf-8' },
45
+ 'api_ext': {
46
+ 'apis': {
47
+ 'api': entries.map(entry => ({
48
+ 'name': entry.name,
49
+ 'libs': {
50
+ 'lib': entry.libs.map(libPath => ({ 'path': libPath })),
51
+ },
52
+ })),
53
+ },
54
+ },
55
+ };
56
+ return xml_1.xmlBuilderKeepEmpty.build(xmlObj);
57
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ /**
3
+ * Генераторы для компонентов (spxml файлы)
4
+ * @module linking/generators/component
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildComponentXml = buildComponentXml;
8
+ exports.buildComponentJs = buildComponentJs;
9
+ exports.buildComponentFiles = buildComponentFiles;
10
+ const xml_1 = require("../../utils/xml");
11
+ /**
12
+ * Генерирует содержимое XML файла компонента (spxml/<name>.xml)
13
+ *
14
+ * @param componentName - Имя компонента (обычно name из package.json)
15
+ * @returns Содержимое XML файла компонента
16
+ *
17
+ * @remarks
18
+ * XML файл компонента создаётся в директории spxml/.
19
+ * Содержит определение компонента с атрибутом CODE-LIB="1".
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * buildComponentXml('my-component')
24
+ * // Возвращает XML с тегом <my-component></my-component>
25
+ * ```
26
+ */
27
+ function buildComponentXml(componentName) {
28
+ const xmlObj = {
29
+ '?xml': { '@_version': '1.0', '@_encoding': 'utf-8' },
30
+ 'SPXML-INLINE-FORM': {
31
+ '@_CODE-LIB': '1',
32
+ [componentName]: '',
33
+ },
34
+ };
35
+ return xml_1.xmlBuilderKeepEmpty.build(xmlObj);
36
+ }
37
+ /**
38
+ * Генерирует содержимое JS файла компонента (spxml/<name>.js)
39
+ *
40
+ * @param componentName - Имя компонента (обычно name из package.json)
41
+ * @param mainFile - Путь к главному файлу (main из package.json)
42
+ * @param rootUrl - URL корневой директории пакета (x-local://...)
43
+ * @returns Содержимое JS файла компонента
44
+ *
45
+ * @remarks
46
+ * JS файл компонента содержит функцию init(), которая:
47
+ * - Загружает модуль через bt.require
48
+ * - Логирует состояние инициализации
49
+ * - Обрабатывает ошибки
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * buildComponentJs('my-component', './index.js', 'x-local://components/my-component')
54
+ * ```
55
+ */
56
+ function buildComponentJs(componentName, mainFile, rootUrl) {
57
+ const content = `function init() {
58
+ try {
59
+ alert('Component ${componentName} initializing...');
60
+ bt.require('${mainFile}', '${rootUrl}/spxml')
61
+ alert('Component ${componentName} initialized');
62
+ } catch (g_err) {
63
+ alert('ERROR: Component initializing: ${componentName}:\\r\\n' + g_err);
64
+ throw g_err;
65
+ }
66
+ }`;
67
+ return content;
68
+ }
69
+ /**
70
+ * Генерирует все файлы для компонента
71
+ *
72
+ * @param componentName - Имя компонента
73
+ * @param mainFile - Путь к главному файлу
74
+ * @param rootUrl - URL корневой директории
75
+ * @returns Объект с содержимым XML и JS файлов
76
+ */
77
+ function buildComponentFiles(componentName, mainFile, rootUrl) {
78
+ return {
79
+ xml: buildComponentXml(componentName),
80
+ js: buildComponentJs(componentName, mainFile, rootUrl),
81
+ fileName: componentName
82
+ };
83
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Генератор filemap для executable модулей
4
+ * @module linking/generators/filemap
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.generateFilemapJson = generateFilemapJson;
8
+ exports.generateFilemapJsonForPackage = generateFilemapJsonForPackage;
9
+ /**
10
+ * Генерирует содержимое .filemap.json для модуля
11
+ *
12
+ * @param executables - Карта исполняемых файлов: ключ -> URL
13
+ * @returns JSON-строка для записи в .filemap.json
14
+ *
15
+ * @remarks
16
+ * Filemap используется для маппинга ключей файлов на их URL.
17
+ * Теперь создаётся per-module (в каждом модуле) вместо глобального bt:filemap.
18
+ *
19
+ * Структура ключа: `${packageName}+${packageVersion}+${filePath}`
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const executables = new Map([
24
+ * ['mypackage+1.0.0+src/handler.js', 'x-local://wt/mypackage/handler.js']
25
+ * ]);
26
+ * const json = generateFilemapJson(executables);
27
+ * // -> { "mypackage+1.0.0+src/handler.js": "x-local://wt/mypackage/handler.js" }
28
+ * ```
29
+ */
30
+ function generateFilemapJson(executables) {
31
+ const data = {};
32
+ for (const [key, value] of executables.entries()) {
33
+ data[key] = value;
34
+ }
35
+ return JSON.stringify(data, null, 2);
36
+ }
37
+ /**
38
+ * Генерирует filemap только для конкретного пакета
39
+ *
40
+ * @param executables - Полная карта исполняемых файлов
41
+ * @param packageName - Имя пакета для фильтрации
42
+ * @returns JSON-строка с данными только для указанного пакета
43
+ */
44
+ function generateFilemapJsonForPackage(executables, packageName) {
45
+ const data = {};
46
+ const prefix = `${packageName}+`;
47
+ for (const [key, value] of executables.entries()) {
48
+ if (key.startsWith(prefix)) {
49
+ data[key] = value;
50
+ }
51
+ }
52
+ return JSON.stringify(data, null, 2);
53
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Генераторы для linking модуля
4
+ * @module linking/generators
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildComponentPackageJsonString = exports.buildComponentPackageJson = exports.generateFilemapJsonForPackage = exports.generateFilemapJson = exports.buildApiExt = exports.buildComponentFiles = exports.buildComponentJs = exports.buildComponentXml = exports.buildInitXml = void 0;
8
+ var init_xml_1 = require("./init-xml");
9
+ Object.defineProperty(exports, "buildInitXml", { enumerable: true, get: function () { return init_xml_1.buildInitXml; } });
10
+ var component_1 = require("./component");
11
+ Object.defineProperty(exports, "buildComponentXml", { enumerable: true, get: function () { return component_1.buildComponentXml; } });
12
+ Object.defineProperty(exports, "buildComponentJs", { enumerable: true, get: function () { return component_1.buildComponentJs; } });
13
+ Object.defineProperty(exports, "buildComponentFiles", { enumerable: true, get: function () { return component_1.buildComponentFiles; } });
14
+ var api_ext_1 = require("./api-ext");
15
+ Object.defineProperty(exports, "buildApiExt", { enumerable: true, get: function () { return api_ext_1.buildApiExt; } });
16
+ var filemap_1 = require("./filemap");
17
+ Object.defineProperty(exports, "generateFilemapJson", { enumerable: true, get: function () { return filemap_1.generateFilemapJson; } });
18
+ Object.defineProperty(exports, "generateFilemapJsonForPackage", { enumerable: true, get: function () { return filemap_1.generateFilemapJsonForPackage; } });
19
+ var package_json_1 = require("./package-json");
20
+ Object.defineProperty(exports, "buildComponentPackageJson", { enumerable: true, get: function () { return package_json_1.buildComponentPackageJson; } });
21
+ Object.defineProperty(exports, "buildComponentPackageJsonString", { enumerable: true, get: function () { return package_json_1.buildComponentPackageJsonString; } });