@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.
- package/LICENSE +21 -0
- package/README.md +66 -0
- package/build/builder/config.js +88 -0
- package/build/cli/commands/artifact.js +14 -0
- package/build/cli/commands/build.js +25 -0
- package/build/cli/commands/dev.js +190 -0
- package/build/cli/commands/index.js +18 -0
- package/build/cli/commands/init.js +15 -0
- package/build/cli/commands/link.js +18 -0
- package/build/cli/commands/push.js +28 -0
- package/build/cli/index.js +14 -0
- package/build/cli/types.js +2 -0
- package/build/core/artifacting/context.js +54 -0
- package/build/core/artifacting/index.js +37 -0
- package/build/core/artifacting/stages/index.js +10 -0
- package/build/core/artifacting/stages/main-archive.js +72 -0
- package/build/core/artifacting/stages/validate.js +70 -0
- package/build/core/artifacting/types.js +6 -0
- package/build/core/artifacting/utils/index.js +10 -0
- package/build/core/artifacting/utils/zip.js +94 -0
- package/build/core/babel.js +96 -0
- package/build/core/btconfig.types.js +6 -0
- package/build/core/build.js +280 -0
- package/build/core/building/compile-mode.js +146 -0
- package/build/core/building/compiler.js +281 -0
- package/build/core/building/coordinator.js +71 -0
- package/build/core/building/files.js +290 -0
- package/build/core/building/index.js +102 -0
- package/build/core/building/output.js +92 -0
- package/build/core/building/transformers.js +110 -0
- package/build/core/building/types.js +19 -0
- package/build/core/config.js +157 -0
- package/build/core/dependencies.js +223 -0
- package/build/core/linking/cache.js +260 -0
- package/build/core/linking/context.js +149 -0
- package/build/core/linking/dependencies.js +240 -0
- package/build/core/linking/executables.js +61 -0
- package/build/core/linking/generators/api-ext.js +57 -0
- package/build/core/linking/generators/component.js +83 -0
- package/build/core/linking/generators/filemap.js +53 -0
- package/build/core/linking/generators/index.js +21 -0
- package/build/core/linking/generators/init-xml.js +37 -0
- package/build/core/linking/generators/package-json.js +50 -0
- package/build/core/linking/index.js +213 -0
- package/build/core/linking/linkers/component.js +175 -0
- package/build/core/linking/linkers/index.js +69 -0
- package/build/core/linking/linkers/standalone.js +144 -0
- package/build/core/linking/linkers/system.js +86 -0
- package/build/core/linking/parsers.js +278 -0
- package/build/core/linking/types.js +6 -0
- package/build/core/linking/utils/copy.js +101 -0
- package/build/core/linking/utils/index.js +26 -0
- package/build/core/linking/utils/node-modules.js +226 -0
- package/build/core/linking/utils/package-type.js +101 -0
- package/build/core/linking/utils/url.js +73 -0
- package/build/core/linking/utils/write.js +91 -0
- package/build/core/logger.js +10 -0
- package/build/core/pushing/config.js +90 -0
- package/build/core/pushing/index.js +96 -0
- package/build/core/pushing/init-scripts.js +173 -0
- package/build/core/pushing/queue.js +95 -0
- package/build/core/pushing/reinit.js +61 -0
- package/build/core/pushing/session.js +167 -0
- package/build/core/pushing/types.js +6 -0
- package/build/core/pushing/upload.js +35 -0
- package/build/core/tsconfig.js +78 -0
- package/build/core/utils/index.js +17 -0
- package/build/core/utils/logger.js +46 -0
- package/build/core/utils/properties.js +81 -0
- package/build/core/utils/xml.js +44 -0
- package/build/core/utils.js +59 -0
- package/build/index.js +76 -0
- package/build/plugins/destructuring.js +83 -0
- package/build/plugins/forOfToForIn.js +14 -0
- package/build/plugins/loopHoistVariables.js +160 -0
- package/build/plugins/precedence.js +172 -0
- package/build/plugins/removeImportExport.js +42 -0
- package/build/plugins/replaceDollar.js +16 -0
- package/build/plugins/spreadArray.js +42 -0
- package/build/plugins/spreadObject.js +91 -0
- package/build/transformers/arrayFunctional.js +467 -0
- package/build/transformers/arrayGeneral.js +222 -0
- package/build/transformers/blockScoping.js +212 -0
- package/build/transformers/destructuring.js +133 -0
- package/build/transformers/dirname.js +79 -0
- package/build/transformers/enumsToObjects.js +25 -0
- package/build/transformers/execObj.js +220 -0
- package/build/transformers/forOfToForIn.js +45 -0
- package/build/transformers/funcSemantic.js +113 -0
- package/build/transformers/functions.js +270 -0
- package/build/transformers/globalCache.js +34 -0
- package/build/transformers/loopHoistVariables.js +352 -0
- package/build/transformers/math.js +39 -0
- package/build/transformers/namespaces.js +22 -0
- package/build/transformers/numericSeparator.js +46 -0
- package/build/transformers/objectProperties.js +54 -0
- package/build/transformers/precedence.js +192 -0
- package/build/transformers/propSemantic.js +467 -0
- package/build/transformers/remodule.js +620 -0
- package/build/transformers/removeImportExport.js +135 -0
- package/build/transformers/replaceDollar.js +46 -0
- package/build/transformers/shorthandProperties.js +34 -0
- package/build/transformers/spreadArray.js +68 -0
- package/build/transformers/spreadObject.js +134 -0
- package/build/transformers/string.js +138 -0
- package/build/transformers/templateLiterals.js +104 -0
- package/build/transformers/tocodelibrary.js +178 -0
- package/build/transformers/utils.js +202 -0
- package/build/wshcm/client.js +193 -0
- package/build/wshcm/evaluator.js +111 -0
- package/build/wshcm/exceptions.js +25 -0
- package/build/wshcm/index.js +20 -0
- package/build/wshcm/soap-utils.js +228 -0
- package/build/wshcm/types.js +2 -0
- package/build/wshcm/uploader.js +320 -0
- 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
|
+
}
|