@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,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.precedenceTransformer = precedenceTransformer;
|
|
7
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
/**
|
|
9
|
+
* Трансформер для явной расстановки скобок в выражениях.
|
|
10
|
+
*
|
|
11
|
+
* Добавляет скобки вокруг операндов в бинарных выражениях,
|
|
12
|
+
* чтобы гарантировать корректный порядок вычисления в BorisScript.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Вход: a + b * c
|
|
16
|
+
* // Выход: a + (b * c)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Вход: a && b || c
|
|
20
|
+
* // Выход: (a && b) || c
|
|
21
|
+
*/
|
|
22
|
+
// Таблица приоритетов операторов согласно MDN
|
|
23
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_precedence
|
|
24
|
+
const PRECEDENCE = {
|
|
25
|
+
// 13: Exponentiation (right-to-left)
|
|
26
|
+
[typescript_1.default.SyntaxKind.AsteriskAsteriskToken]: 13,
|
|
27
|
+
// 12: Multiplicative operators (left-to-right)
|
|
28
|
+
[typescript_1.default.SyntaxKind.AsteriskToken]: 12,
|
|
29
|
+
[typescript_1.default.SyntaxKind.SlashToken]: 12,
|
|
30
|
+
[typescript_1.default.SyntaxKind.PercentToken]: 12,
|
|
31
|
+
// 11: Additive operators (left-to-right)
|
|
32
|
+
[typescript_1.default.SyntaxKind.PlusToken]: 11,
|
|
33
|
+
[typescript_1.default.SyntaxKind.MinusToken]: 11,
|
|
34
|
+
// 10: Bitwise shift (left-to-right)
|
|
35
|
+
[typescript_1.default.SyntaxKind.LessThanLessThanToken]: 10,
|
|
36
|
+
[typescript_1.default.SyntaxKind.GreaterThanGreaterThanToken]: 10,
|
|
37
|
+
[typescript_1.default.SyntaxKind.GreaterThanGreaterThanGreaterThanToken]: 10,
|
|
38
|
+
// 9: Relational operators (left-to-right)
|
|
39
|
+
[typescript_1.default.SyntaxKind.LessThanToken]: 9,
|
|
40
|
+
[typescript_1.default.SyntaxKind.LessThanEqualsToken]: 9,
|
|
41
|
+
[typescript_1.default.SyntaxKind.GreaterThanToken]: 9,
|
|
42
|
+
[typescript_1.default.SyntaxKind.GreaterThanEqualsToken]: 9,
|
|
43
|
+
[typescript_1.default.SyntaxKind.InKeyword]: 9,
|
|
44
|
+
[typescript_1.default.SyntaxKind.InstanceOfKeyword]: 9,
|
|
45
|
+
// 8: Equality operators (left-to-right)
|
|
46
|
+
[typescript_1.default.SyntaxKind.EqualsEqualsToken]: 8,
|
|
47
|
+
[typescript_1.default.SyntaxKind.ExclamationEqualsToken]: 8,
|
|
48
|
+
[typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken]: 8,
|
|
49
|
+
[typescript_1.default.SyntaxKind.ExclamationEqualsEqualsToken]: 8,
|
|
50
|
+
// 7: Bitwise AND (left-to-right)
|
|
51
|
+
[typescript_1.default.SyntaxKind.AmpersandToken]: 7,
|
|
52
|
+
// 6: Bitwise XOR (left-to-right)
|
|
53
|
+
[typescript_1.default.SyntaxKind.CaretToken]: 6,
|
|
54
|
+
// 5: Bitwise OR (left-to-right)
|
|
55
|
+
[typescript_1.default.SyntaxKind.BarToken]: 5,
|
|
56
|
+
// 4: Logical AND (left-to-right)
|
|
57
|
+
[typescript_1.default.SyntaxKind.AmpersandAmpersandToken]: 4,
|
|
58
|
+
// 3: Logical OR, Nullish coalescing (left-to-right)
|
|
59
|
+
[typescript_1.default.SyntaxKind.BarBarToken]: 3,
|
|
60
|
+
[typescript_1.default.SyntaxKind.QuestionQuestionToken]: 3,
|
|
61
|
+
// 2: Assignment operators (right-to-left)
|
|
62
|
+
[typescript_1.default.SyntaxKind.EqualsToken]: 2,
|
|
63
|
+
[typescript_1.default.SyntaxKind.PlusEqualsToken]: 2,
|
|
64
|
+
[typescript_1.default.SyntaxKind.MinusEqualsToken]: 2,
|
|
65
|
+
[typescript_1.default.SyntaxKind.AsteriskEqualsToken]: 2,
|
|
66
|
+
[typescript_1.default.SyntaxKind.AsteriskAsteriskEqualsToken]: 2,
|
|
67
|
+
[typescript_1.default.SyntaxKind.SlashEqualsToken]: 2,
|
|
68
|
+
[typescript_1.default.SyntaxKind.PercentEqualsToken]: 2,
|
|
69
|
+
[typescript_1.default.SyntaxKind.LessThanLessThanEqualsToken]: 2,
|
|
70
|
+
[typescript_1.default.SyntaxKind.GreaterThanGreaterThanEqualsToken]: 2,
|
|
71
|
+
[typescript_1.default.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken]: 2,
|
|
72
|
+
[typescript_1.default.SyntaxKind.AmpersandEqualsToken]: 2,
|
|
73
|
+
[typescript_1.default.SyntaxKind.CaretEqualsToken]: 2,
|
|
74
|
+
[typescript_1.default.SyntaxKind.BarEqualsToken]: 2,
|
|
75
|
+
[typescript_1.default.SyntaxKind.AmpersandAmpersandEqualsToken]: 2,
|
|
76
|
+
[typescript_1.default.SyntaxKind.BarBarEqualsToken]: 2,
|
|
77
|
+
[typescript_1.default.SyntaxKind.QuestionQuestionEqualsToken]: 2,
|
|
78
|
+
// 1: Comma operator (left-to-right)
|
|
79
|
+
[typescript_1.default.SyntaxKind.CommaToken]: 1,
|
|
80
|
+
};
|
|
81
|
+
// Операторы с правоассоциативностью (вычисляются справа налево)
|
|
82
|
+
const RIGHT_ASSOCIATIVE = new Set([
|
|
83
|
+
typescript_1.default.SyntaxKind.AsteriskAsteriskToken, // **
|
|
84
|
+
typescript_1.default.SyntaxKind.EqualsToken,
|
|
85
|
+
typescript_1.default.SyntaxKind.PlusEqualsToken,
|
|
86
|
+
typescript_1.default.SyntaxKind.MinusEqualsToken,
|
|
87
|
+
typescript_1.default.SyntaxKind.AsteriskEqualsToken,
|
|
88
|
+
typescript_1.default.SyntaxKind.AsteriskAsteriskEqualsToken,
|
|
89
|
+
typescript_1.default.SyntaxKind.SlashEqualsToken,
|
|
90
|
+
typescript_1.default.SyntaxKind.PercentEqualsToken,
|
|
91
|
+
typescript_1.default.SyntaxKind.LessThanLessThanEqualsToken,
|
|
92
|
+
typescript_1.default.SyntaxKind.GreaterThanGreaterThanEqualsToken,
|
|
93
|
+
typescript_1.default.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
|
|
94
|
+
typescript_1.default.SyntaxKind.AmpersandEqualsToken,
|
|
95
|
+
typescript_1.default.SyntaxKind.CaretEqualsToken,
|
|
96
|
+
typescript_1.default.SyntaxKind.BarEqualsToken,
|
|
97
|
+
typescript_1.default.SyntaxKind.AmpersandAmpersandEqualsToken,
|
|
98
|
+
typescript_1.default.SyntaxKind.BarBarEqualsToken,
|
|
99
|
+
typescript_1.default.SyntaxKind.QuestionQuestionEqualsToken,
|
|
100
|
+
]);
|
|
101
|
+
function getPrecedence(kind) {
|
|
102
|
+
return PRECEDENCE[kind] ?? 999; // Высокий приоритет для неизвестных операторов
|
|
103
|
+
}
|
|
104
|
+
function isRightAssociative(kind) {
|
|
105
|
+
return RIGHT_ASSOCIATIVE.has(kind);
|
|
106
|
+
}
|
|
107
|
+
function needsParentheses(parent, child, isLeft) {
|
|
108
|
+
const parentOp = parent.operatorToken.kind;
|
|
109
|
+
const childOp = child.operatorToken.kind;
|
|
110
|
+
const parentPrec = getPrecedence(parentOp);
|
|
111
|
+
const childPrec = getPrecedence(childOp);
|
|
112
|
+
// Если приоритет дочернего оператора ниже, нужны скобки
|
|
113
|
+
if (childPrec < parentPrec) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
// Если приоритет дочернего оператора выше, нужны скобки
|
|
117
|
+
if (childPrec > parentPrec) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
// Если приоритет одинаковый, зависит от ассоциативности
|
|
121
|
+
if (childPrec === parentPrec) {
|
|
122
|
+
// Для правоассоциативных операторов: левый операнд нужно оборачивать
|
|
123
|
+
if (isRightAssociative(parentOp)) {
|
|
124
|
+
return isLeft;
|
|
125
|
+
}
|
|
126
|
+
// Для левоассоциативных операторов: правый операнд нужно оборачивать
|
|
127
|
+
else {
|
|
128
|
+
return !isLeft;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
function precedenceTransformer() {
|
|
134
|
+
return (context) => (sourceFile) => {
|
|
135
|
+
function visit(node) {
|
|
136
|
+
// Сначала рекурсивно обрабатываем дочерние узлы
|
|
137
|
+
node = typescript_1.default.visitEachChild(node, visit, context);
|
|
138
|
+
// Обрабатываем бинарные выражения
|
|
139
|
+
if (typescript_1.default.isBinaryExpression(node)) {
|
|
140
|
+
let left = node.left;
|
|
141
|
+
let right = node.right;
|
|
142
|
+
// Проверяем левый операнд
|
|
143
|
+
if (typescript_1.default.isBinaryExpression(left)) {
|
|
144
|
+
if (needsParentheses(node, left, true)) {
|
|
145
|
+
left = typescript_1.default.factory.createParenthesizedExpression(left);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Проверяем правый операнд
|
|
149
|
+
if (typescript_1.default.isBinaryExpression(right)) {
|
|
150
|
+
if (needsParentheses(node, right, false)) {
|
|
151
|
+
right = typescript_1.default.factory.createParenthesizedExpression(right);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Если были изменения, создаём новое выражение
|
|
155
|
+
if (left !== node.left || right !== node.right) {
|
|
156
|
+
return typescript_1.default.factory.updateBinaryExpression(node, left, node.operatorToken, right);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Обрабатываем условные выражения (тернарный оператор)
|
|
160
|
+
if (typescript_1.default.isConditionalExpression(node)) {
|
|
161
|
+
let condition = node.condition;
|
|
162
|
+
let whenTrue = node.whenTrue;
|
|
163
|
+
let whenFalse = node.whenFalse;
|
|
164
|
+
// Условие: оборачиваем бинарные выражения с приоритетом <= 2
|
|
165
|
+
if (typescript_1.default.isBinaryExpression(condition)) {
|
|
166
|
+
const condPrec = getPrecedence(condition.operatorToken.kind);
|
|
167
|
+
if (condPrec <= 2) {
|
|
168
|
+
condition = typescript_1.default.factory.createParenthesizedExpression(condition);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// whenTrue и whenFalse: оборачиваем запятую и присваивания
|
|
172
|
+
if (typescript_1.default.isBinaryExpression(whenTrue)) {
|
|
173
|
+
const truePrec = getPrecedence(whenTrue.operatorToken.kind);
|
|
174
|
+
if (truePrec <= 2) {
|
|
175
|
+
whenTrue = typescript_1.default.factory.createParenthesizedExpression(whenTrue);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (typescript_1.default.isBinaryExpression(whenFalse)) {
|
|
179
|
+
const falsePrec = getPrecedence(whenFalse.operatorToken.kind);
|
|
180
|
+
if (falsePrec <= 2) {
|
|
181
|
+
whenFalse = typescript_1.default.factory.createParenthesizedExpression(whenFalse);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (condition !== node.condition || whenTrue !== node.whenTrue || whenFalse !== node.whenFalse) {
|
|
185
|
+
return typescript_1.default.factory.updateConditionalExpression(node, condition, node.questionToken, whenTrue, node.colonToken, whenFalse);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return node;
|
|
189
|
+
}
|
|
190
|
+
return typescript_1.default.visitNode(sourceFile, visit);
|
|
191
|
+
};
|
|
192
|
+
}
|