@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,226 @@
1
+ "use strict";
2
+ /**
3
+ * Утилиты для копирования node_modules
4
+ * @module linking/utils/node-modules
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.copyNodeModulesWithCache = copyNodeModulesWithCache;
41
+ exports.copyNodeModules = copyNodeModules;
42
+ exports.processPackageDirectory = processPackageDirectory;
43
+ exports.copyPackageContent = copyPackageContent;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const copy_1 = require("./copy");
47
+ /**
48
+ * Копирует структуру node_modules с поддержкой кэширования
49
+ *
50
+ * @param options - Опции копирования
51
+ * @returns true если копирование было выполнено, false если пропущено (из кэша)
52
+ *
53
+ * @remarks
54
+ * - Проверяет кэш по hash от package-lock.json
55
+ * - Если hash не изменился - пропускает копирование
56
+ * - После копирования обновляет кэш
57
+ */
58
+ function copyNodeModulesWithCache(options) {
59
+ const { searchDir, targetDir, wsName, cache, logger } = options;
60
+ // Проверяем нужно ли копировать
61
+ if (!cache.shouldCopyNodeModules(wsName, searchDir)) {
62
+ logger.success(` ├─ node_modules skipped (cached)`);
63
+ return false;
64
+ }
65
+ // Копируем
66
+ copyNodeModules(searchDir, targetDir);
67
+ // Обновляем кэш
68
+ cache.updateNodeModulesCache(wsName, searchDir);
69
+ logger.success(` ├─ Copied node_modules`);
70
+ return true;
71
+ }
72
+ /**
73
+ * Копирует структуру node_modules из исходной директории в целевую
74
+ *
75
+ * @param searchDir - Директория для поиска node_modules
76
+ * @param targetDir - Директория куда нужно скопировать найденные пакеты
77
+ *
78
+ * @remarks
79
+ * - Копирует только пакеты с свойством `ws:package` в package.json
80
+ * - Поддерживает scoped packages (@scope/package)
81
+ * - Пропускает служебные директории, начинающиеся с точки
82
+ * - Рекурсивно обрабатывает вложенные node_modules
83
+ */
84
+ function copyNodeModules(searchDir, targetDir) {
85
+ const nodeModulesPath = path.join(searchDir, 'node_modules');
86
+ // Проверяем существование node_modules в исходной директории
87
+ if (!fs.existsSync(nodeModulesPath)) {
88
+ return;
89
+ }
90
+ const targetNodeModulesPath = path.join(targetDir, 'node_modules');
91
+ // Создаем целевую директорию node_modules если её нет
92
+ if (!fs.existsSync(targetNodeModulesPath)) {
93
+ fs.mkdirSync(targetNodeModulesPath, { recursive: true });
94
+ }
95
+ // Проходим по всем элементам в node_modules
96
+ const items = fs.readdirSync(nodeModulesPath);
97
+ for (const itemName of items) {
98
+ // Пропускаем служебные директории и файлы (например .bin, .package-lock.json и т.д.)
99
+ if (itemName.startsWith('.')) {
100
+ continue;
101
+ }
102
+ const sourcePath = path.join(nodeModulesPath, itemName);
103
+ const targetPath = path.join(targetNodeModulesPath, itemName);
104
+ // Используем lstat чтобы НЕ следовать по symlink на этапе проверки
105
+ const lstat = fs.lstatSync(sourcePath);
106
+ // Если это директория, начинающаяся с @ (scoped packages)
107
+ if (lstat.isDirectory() && itemName.startsWith('@')) {
108
+ // Scoped директория - это просто контейнер для пакетов
109
+ // Создаем её только если в ней будут валидные пакеты
110
+ const scopedItems = fs.readdirSync(sourcePath);
111
+ let hasValidPackages = false;
112
+ for (const scopedItemName of scopedItems) {
113
+ const scopedSourcePath = path.join(sourcePath, scopedItemName);
114
+ const scopedTargetPath = path.join(targetPath, scopedItemName);
115
+ const scopedLstat = fs.lstatSync(scopedSourcePath);
116
+ if (scopedLstat.isDirectory() || scopedLstat.isSymbolicLink()) {
117
+ const copied = processPackageDirectory(scopedSourcePath, scopedTargetPath);
118
+ if (copied && !hasValidPackages) {
119
+ // Создаем scope директорию при первом успешном копировании
120
+ if (!fs.existsSync(targetPath)) {
121
+ fs.mkdirSync(targetPath, { recursive: true });
122
+ }
123
+ hasValidPackages = true;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ // Если это обычная директория или symlink (потенциально пакет)
129
+ else if (lstat.isDirectory() || lstat.isSymbolicLink()) {
130
+ processPackageDirectory(sourcePath, targetPath);
131
+ }
132
+ }
133
+ }
134
+ /**
135
+ * Обрабатывает директорию пакета - проверяет наличие ws:package и копирует
136
+ *
137
+ * @param packagePath - Путь к пакету (может быть symlink)
138
+ * @param targetPath - Целевой путь для копирования
139
+ * @returns true если пакет был скопирован, false иначе
140
+ *
141
+ * @remarks
142
+ * - Следует по symlink для получения реального пути
143
+ * - Проверяет наличие package.json и свойства ws:package
144
+ * - Копирует содержимое пакета (исключая вложенный node_modules)
145
+ * - Рекурсивно обрабатывает вложенные node_modules
146
+ */
147
+ function processPackageDirectory(packagePath, targetPath) {
148
+ // Проверяем является ли путь symlink
149
+ const lstat = fs.lstatSync(packagePath);
150
+ const isSymlink = lstat.isSymbolicLink();
151
+ // Получаем реальный путь (следуем по symlink если есть)
152
+ let realPackagePath;
153
+ try {
154
+ realPackagePath = isSymlink ? fs.realpathSync(packagePath) : packagePath;
155
+ }
156
+ catch (error) {
157
+ console.error(`Error resolving path ${packagePath}:`, error);
158
+ return false;
159
+ }
160
+ // Проверяем что это директория
161
+ const stats = fs.statSync(realPackagePath);
162
+ if (!stats.isDirectory()) {
163
+ return false;
164
+ }
165
+ // Проверяем наличие package.json
166
+ const packageJsonPath = path.join(realPackagePath, 'package.json');
167
+ if (!fs.existsSync(packageJsonPath)) {
168
+ return false;
169
+ }
170
+ // Читаем и парсим package.json
171
+ let packageJson;
172
+ try {
173
+ packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
174
+ }
175
+ catch (error) {
176
+ console.error(`Error reading ${packageJsonPath}:`, error);
177
+ return false;
178
+ }
179
+ // Проверяем наличие свойства ws:package
180
+ const wsPackage = packageJson['ws:package'];
181
+ if (!wsPackage) {
182
+ return false;
183
+ }
184
+ // Копируем содержимое пакета (кроме вложенного node_modules)
185
+ copyPackageContent(realPackagePath, targetPath);
186
+ // Рекурсивно обрабатываем вложенный node_modules
187
+ copyNodeModules(realPackagePath, targetPath);
188
+ return true;
189
+ }
190
+ /**
191
+ * Копирует содержимое пакета, исключая вложенную папку node_modules
192
+ *
193
+ * @param sourcePath - Путь к исходному пакету
194
+ * @param targetPath - Целевой путь
195
+ *
196
+ * @remarks
197
+ * - Исключает директорию node_modules (обрабатывается отдельно)
198
+ * - Исключает директорию .git
199
+ * - Рекурсивно копирует все остальные файлы и директории
200
+ */
201
+ function copyPackageContent(sourcePath, targetPath) {
202
+ // Создаем целевую директорию
203
+ if (!fs.existsSync(targetPath)) {
204
+ fs.mkdirSync(targetPath, { recursive: true });
205
+ }
206
+ const items = fs.readdirSync(sourcePath);
207
+ for (const itemName of items) {
208
+ // Пропускаем вложенную папку node_modules
209
+ if (itemName === 'node_modules') {
210
+ continue;
211
+ }
212
+ if (itemName === '.git') {
213
+ continue;
214
+ }
215
+ const itemSourcePath = path.join(sourcePath, itemName);
216
+ const itemTargetPath = path.join(targetPath, itemName);
217
+ // Используем statSync чтобы следовать по symlink при копировании содержимого
218
+ const stats = fs.statSync(itemSourcePath);
219
+ if (stats.isDirectory()) {
220
+ (0, copy_1.copyRecursive)(itemSourcePath, itemTargetPath);
221
+ }
222
+ else {
223
+ fs.copyFileSync(itemSourcePath, itemTargetPath);
224
+ }
225
+ }
226
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * Утилиты для работы с типами пакетов
4
+ * @module linking/utils/package-type
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.normalizePackageType = normalizePackageType;
8
+ exports.isExecutablePackageType = isExecutablePackageType;
9
+ exports.getValidPackageTypes = getValidPackageTypes;
10
+ exports.getLegacyPackageTypes = getLegacyPackageTypes;
11
+ exports.formatValidPackageTypes = formatValidPackageTypes;
12
+ /**
13
+ * Маппинг устаревших типов пакетов на новые
14
+ * Поддерживает обратную совместимость со старыми конфигурациями
15
+ */
16
+ const LEGACY_TYPE_MAPPING = {
17
+ 'app': 'standalone',
18
+ 'lib': 'library',
19
+ 'bt': 'system', // bt переименован в system
20
+ };
21
+ /**
22
+ * Валидные типы пакетов
23
+ */
24
+ const VALID_PACKAGE_TYPES = ['standalone', 'component', 'library', 'system'];
25
+ /**
26
+ * Нормализует тип пакета, мапит старые значения на новые для обратной совместимости
27
+ *
28
+ * @param wsPackage - значение ws:package из package.json
29
+ * @returns нормализованный тип или null если не является BT пакетом
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * normalizePackageType('app') // -> 'standalone'
34
+ * normalizePackageType('lib') // -> 'library'
35
+ * normalizePackageType('bt') // -> 'system'
36
+ * normalizePackageType('standalone') // -> 'standalone'
37
+ * normalizePackageType(undefined) // -> null
38
+ * normalizePackageType('invalid') // -> null
39
+ * ```
40
+ */
41
+ function normalizePackageType(wsPackage) {
42
+ if (!wsPackage) {
43
+ return null;
44
+ }
45
+ // Проверяем маппинг устаревших типов
46
+ if (LEGACY_TYPE_MAPPING[wsPackage]) {
47
+ return LEGACY_TYPE_MAPPING[wsPackage];
48
+ }
49
+ // Проверяем валидные типы
50
+ if (VALID_PACKAGE_TYPES.includes(wsPackage)) {
51
+ return wsPackage;
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Проверяет, является ли тип пакета исполняемым (требует полной линковки)
57
+ *
58
+ * @param packageType - тип пакета
59
+ * @returns true если пакет требует полной линковки
60
+ *
61
+ * @remarks
62
+ * - standalone, component, system - полная линковка (node_modules, init.xml/spxml, api_ext.xml)
63
+ * - library - только копирование в node_modules родительского пакета
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * isExecutablePackageType('standalone') // -> true
68
+ * isExecutablePackageType('component') // -> true
69
+ * isExecutablePackageType('system') // -> true
70
+ * isExecutablePackageType('library') // -> false
71
+ * ```
72
+ */
73
+ function isExecutablePackageType(packageType) {
74
+ return packageType === 'standalone' || packageType === 'component' || packageType === 'system';
75
+ }
76
+ /**
77
+ * Возвращает список всех валидных типов пакетов
78
+ */
79
+ function getValidPackageTypes() {
80
+ return VALID_PACKAGE_TYPES;
81
+ }
82
+ /**
83
+ * Возвращает список всех устаревших типов пакетов (для сообщений об ошибках)
84
+ */
85
+ function getLegacyPackageTypes() {
86
+ return Object.keys(LEGACY_TYPE_MAPPING);
87
+ }
88
+ /**
89
+ * Форматирует список валидных типов для вывода в сообщения об ошибках
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * formatValidPackageTypes()
94
+ * // -> 'standalone, component, system, library (or legacy: app, lib, bt)'
95
+ * ```
96
+ */
97
+ function formatValidPackageTypes() {
98
+ const validTypes = VALID_PACKAGE_TYPES.join(', ');
99
+ const legacyTypes = Object.keys(LEGACY_TYPE_MAPPING).join(', ');
100
+ return `${validTypes} (or legacy: ${legacyTypes})`;
101
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * URL-утилиты для linking
4
+ *
5
+ * Функции для работы с x-local:// URL, используемыми в BorisScript среде.
6
+ * Написаны в стиле BorisScript для совместимости.
7
+ *
8
+ * @module linking/utils/url
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.UrlAppenPath = UrlAppenPath;
12
+ /**
13
+ * Добавляет путь к URL.
14
+ *
15
+ * @param url - базовый URL (например `x-local://wt/myapp`)
16
+ * @param appendPath - путь для добавления (например `init.xml`)
17
+ * @returns URL с добавленным путём
18
+ */
19
+ function UrlAppenPath(url, appendPath) {
20
+ var parsedUrl;
21
+ var addPath;
22
+ parsedUrl = BmParseUrl(url);
23
+ if (!parsedUrl.path.endsWith("/"))
24
+ parsedUrl.path += '/';
25
+ addPath = appendPath;
26
+ if (addPath.charAt(0) == '/')
27
+ addPath = addPath.slice(1);
28
+ parsedUrl.path += addPath;
29
+ return BmParsedUrl__GetStrValue(parsedUrl);
30
+ }
31
+ function BmParseUrl(urlStr) {
32
+ var obj = {};
33
+ var tempStr;
34
+ var pos;
35
+ tempStr = urlStr;
36
+ pos = String(tempStr).indexOf(':');
37
+ if (pos >= 0) {
38
+ obj.schema = tempStr.slice(0, pos);
39
+ tempStr = tempStr.slice(pos + 1);
40
+ }
41
+ if (tempStr.startsWith('//')) {
42
+ pos = String(tempStr).indexOf('/', 2);
43
+ if (pos < 0)
44
+ pos = tempStr.length;
45
+ obj.host = tempStr.slice(2, pos);
46
+ tempStr = tempStr.slice(pos);
47
+ }
48
+ if ((pos = String(tempStr).lastIndexOf('#')) > 0) {
49
+ obj.anchor = tempStr.slice(pos + 1);
50
+ tempStr = tempStr.slice(0, pos);
51
+ }
52
+ if ((pos = String(tempStr).lastIndexOf('?')) > 0) {
53
+ obj.param = tempStr.slice(pos + 1);
54
+ tempStr = tempStr.slice(0, pos);
55
+ }
56
+ obj.path = tempStr;
57
+ if (obj.path == "" && obj.host)
58
+ obj.path = "/";
59
+ return obj;
60
+ }
61
+ function BmParsedUrl__GetStrValue(url) {
62
+ var tempStr = "";
63
+ if (url.schema)
64
+ tempStr = url.schema + ":";
65
+ if (url.host || url.schema == "file")
66
+ tempStr += "//" + url.host;
67
+ tempStr += url.path;
68
+ if (url.param)
69
+ tempStr += "?" + url.param;
70
+ if (url.fragment)
71
+ tempStr += "#" + url.fragment;
72
+ return tempStr;
73
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Утилиты для записи файлов при линковке
4
+ * @module linking/utils/write
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.writeIfChanged = writeIfChanged;
41
+ exports.copyIfChanged = copyIfChanged;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ /**
45
+ * Записывает файл только если содержимое изменилось
46
+ *
47
+ * Сравнивает новое содержимое с существующим файлом.
48
+ * Если файл не существует или содержимое отличается — записывает.
49
+ * Автоматически создаёт директории.
50
+ *
51
+ * @param filePath - Путь к файлу
52
+ * @param content - Новое содержимое
53
+ * @returns true если файл был записан, false если содержимое не изменилось
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * if (writeIfChanged('dist/api_ext.xml', newContent)) {
58
+ * logger.info('api_ext.xml updated');
59
+ * }
60
+ * ```
61
+ */
62
+ function writeIfChanged(filePath, content) {
63
+ if (fs.existsSync(filePath)) {
64
+ const existing = fs.readFileSync(filePath, 'utf-8');
65
+ if (existing === content) {
66
+ return false;
67
+ }
68
+ }
69
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
70
+ fs.writeFileSync(filePath, content, 'utf-8');
71
+ return true;
72
+ }
73
+ /**
74
+ * Копирует файл только если содержимое изменилось
75
+ *
76
+ * @param srcPath - Путь к исходному файлу
77
+ * @param dstPath - Путь к целевому файлу
78
+ * @returns true если файл был скопирован, false если содержимое не изменилось
79
+ */
80
+ function copyIfChanged(srcPath, dstPath) {
81
+ const content = fs.readFileSync(srcPath);
82
+ if (fs.existsSync(dstPath)) {
83
+ const existing = fs.readFileSync(dstPath);
84
+ if (content.equals(existing)) {
85
+ return false;
86
+ }
87
+ }
88
+ fs.mkdirSync(path.dirname(dstPath), { recursive: true });
89
+ fs.copyFileSync(srcPath, dstPath);
90
+ return true;
91
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ /**
5
+ * Re-export логгера из utils для обратной совместимости импортов.
6
+ * Основная реализация: {@link ./utils/logger.ts}
7
+ * @module core/logger
8
+ */
9
+ var logger_js_1 = require("./utils/logger.js");
10
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_js_1.logger; } });
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Конфигурация подключения для push
4
+ *
5
+ * Парсинг btconfig.properties и мерж опций с приоритетом:
6
+ * CLI > btconfig.properties > defaults
7
+ *
8
+ * @module core/pushing/config
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.parseBtConfigProperties = parseBtConfigProperties;
45
+ exports.resolvePushConnectionOptions = resolvePushConnectionOptions;
46
+ const path = __importStar(require("node:path"));
47
+ const properties_1 = require("../utils/properties");
48
+ /**
49
+ * Дефолтные значения для подключения к WSHCM серверу
50
+ */
51
+ const DEFAULTS = {
52
+ https: false,
53
+ host: 'localhost',
54
+ port: 80,
55
+ username: 'user1',
56
+ password: 'user1',
57
+ };
58
+ /**
59
+ * Парсит файл btconfig.properties
60
+ *
61
+ * @param cwd - директория проекта
62
+ * @returns частичные опции подключения
63
+ */
64
+ function parseBtConfigProperties(cwd) {
65
+ const result = (0, properties_1.parsePropertiesFile)(path.join(cwd, 'btconfig.properties'));
66
+ return {
67
+ https: result['https'] === 'true' ? true : undefined,
68
+ host: result['host'] || undefined,
69
+ port: result['port'] ? parseInt(result['port'], 10) : undefined,
70
+ username: result['username'] || undefined,
71
+ password: result['password'] || undefined,
72
+ };
73
+ }
74
+ /**
75
+ * Резолвит опции подключения с приоритетом: CLI > btconfig.properties > defaults
76
+ *
77
+ * @param cwd - директория проекта (для чтения btconfig.properties)
78
+ * @param cliOptions - опции из CLI (наивысший приоритет)
79
+ * @returns полные опции подключения с заполненными дефолтами
80
+ */
81
+ function resolvePushConnectionOptions(cwd, cliOptions = {}) {
82
+ const configOptions = parseBtConfigProperties(cwd);
83
+ return {
84
+ https: cliOptions.https ?? configOptions.https ?? DEFAULTS.https,
85
+ host: cliOptions.host ?? configOptions.host ?? DEFAULTS.host,
86
+ port: cliOptions.port ?? configOptions.port ?? DEFAULTS.port,
87
+ username: cliOptions.username ?? configOptions.username ?? DEFAULTS.username,
88
+ password: cliOptions.password ?? configOptions.password ?? DEFAULTS.password,
89
+ };
90
+ }