@meadmin/cli 1.3.6 → 1.3.8
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/dist/commanders/index.js +4 -2
- package/dist/commanders/update.d.ts +3 -0
- package/dist/commanders/update.js +132 -0
- package/dist/update/backup.d.ts +21 -0
- package/dist/update/backup.js +120 -0
- package/dist/update/merge.d.ts +7 -0
- package/dist/update/merge.js +432 -0
- package/dist/update/planner.d.ts +17 -0
- package/dist/update/planner.js +116 -0
- package/dist/update/rules.d.ts +12 -0
- package/dist/update/rules.js +55 -0
- package/dist/update/source.d.ts +10 -0
- package/dist/update/source.js +750 -0
- package/dist/update/sql.d.ts +12 -0
- package/dist/update/sql.js +589 -0
- package/dist/update/template.d.ts +20 -0
- package/dist/update/template.js +147 -0
- package/package.json +4 -4
- package/template/update.defaults.json +29 -0
|
@@ -0,0 +1,750 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
function parse(text, name) {
|
|
3
|
+
const file = ts.createSourceFile(name, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
4
|
+
if (file.parseDiagnostics?.length)
|
|
5
|
+
return undefined;
|
|
6
|
+
const host = {
|
|
7
|
+
getSourceFile: (path) => (path === name ? file : undefined),
|
|
8
|
+
getDefaultLibFileName: () => '',
|
|
9
|
+
writeFile: () => undefined,
|
|
10
|
+
getCurrentDirectory: () => '',
|
|
11
|
+
getDirectories: () => [],
|
|
12
|
+
fileExists: (path) => path === name,
|
|
13
|
+
readFile: (path) => (path === name ? text : undefined),
|
|
14
|
+
getCanonicalFileName: (path) => path,
|
|
15
|
+
useCaseSensitiveFileNames: () => true,
|
|
16
|
+
getNewLine: () => '\n',
|
|
17
|
+
};
|
|
18
|
+
const program = ts.createProgram([name], { noLib: true, noResolve: true, target: ts.ScriptTarget.Latest, experimentalDecorators: true }, host);
|
|
19
|
+
return { file, checker: program.getTypeChecker(), program };
|
|
20
|
+
}
|
|
21
|
+
function apply(text, edits) {
|
|
22
|
+
return [...edits]
|
|
23
|
+
.reverse()
|
|
24
|
+
.sort((a, b) => b.start - a.start || b.end - a.end)
|
|
25
|
+
.reduce((result, edit) => result.slice(0, edit.start) + edit.text + result.slice(edit.end), text);
|
|
26
|
+
}
|
|
27
|
+
function unwrap(node) {
|
|
28
|
+
while (ts.isParenthesizedExpression(node) || ts.isAsExpression(node) || ts.isSatisfiesExpression(node) || ts.isTypeAssertionExpression(node))
|
|
29
|
+
node = node.expression;
|
|
30
|
+
return node;
|
|
31
|
+
}
|
|
32
|
+
function nameOf(node) {
|
|
33
|
+
return node.name && (ts.isIdentifier(node.name) || ts.isPrivateIdentifier(node.name) || ts.isStringLiteral(node.name) || ts.isNumericLiteral(node.name)) ? node.name.text : undefined;
|
|
34
|
+
}
|
|
35
|
+
function hasModifier(node, kind) {
|
|
36
|
+
return ts.canHaveModifiers(node) && !!ts.getModifiers(node)?.some((modifier) => modifier.kind === kind);
|
|
37
|
+
}
|
|
38
|
+
function imports(file) {
|
|
39
|
+
const result = new Map();
|
|
40
|
+
for (const declaration of file.statements) {
|
|
41
|
+
if (!ts.isImportDeclaration(declaration) || !ts.isStringLiteral(declaration.moduleSpecifier) || !declaration.importClause)
|
|
42
|
+
continue;
|
|
43
|
+
const clause = declaration.importClause;
|
|
44
|
+
const module = declaration.moduleSpecifier.text;
|
|
45
|
+
const add = (name, imported, typeOnly = clause.isTypeOnly) => result.set(name, { name, imported, module, typeOnly, declaration });
|
|
46
|
+
if (clause.name)
|
|
47
|
+
add(clause.name.text, 'default');
|
|
48
|
+
if (clause.namedBindings) {
|
|
49
|
+
if (ts.isNamespaceImport(clause.namedBindings))
|
|
50
|
+
add(clause.namedBindings.name.text, '*');
|
|
51
|
+
else
|
|
52
|
+
for (const item of clause.namedBindings.elements)
|
|
53
|
+
add(item.name.text, (item.propertyName ?? item.name).text, clause.isTypeOnly || item.isTypeOnly);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
function topBindings(parsed) {
|
|
59
|
+
return new Map(parsed.checker
|
|
60
|
+
.getSymbolsInScope(parsed.file, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace | ts.SymbolFlags.Alias)
|
|
61
|
+
.filter((symbol) => symbol.declarations?.some((node) => node.getSourceFile() === parsed.file))
|
|
62
|
+
.map((symbol) => [symbol.name, symbol]));
|
|
63
|
+
}
|
|
64
|
+
function variables(file) {
|
|
65
|
+
const result = new Map();
|
|
66
|
+
for (const statement of file.statements)
|
|
67
|
+
if (ts.isVariableStatement(statement)) {
|
|
68
|
+
for (const declaration of statement.declarationList.declarations)
|
|
69
|
+
if (ts.isIdentifier(declaration.name))
|
|
70
|
+
result.set(declaration.name.text, declaration);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
function staticValue(node) {
|
|
75
|
+
node = unwrap(node);
|
|
76
|
+
if (ts.isArrayLiteralExpression(node))
|
|
77
|
+
return node.elements.every((item) => !ts.isSpreadElement(item) && !ts.isOmittedExpression(item) && staticValue(item));
|
|
78
|
+
if (ts.isPropertyAccessExpression(node))
|
|
79
|
+
return staticValue(node.expression);
|
|
80
|
+
return ts.isIdentifier(node) || ts.isLiteralExpression(node) || [ts.SyntaxKind.TrueKeyword, ts.SyntaxKind.FalseKeyword, ts.SyntaxKind.NullKeyword].includes(node.kind);
|
|
81
|
+
}
|
|
82
|
+
function resolveArray(node, declarations, seen = new Set()) {
|
|
83
|
+
node = unwrap(node);
|
|
84
|
+
if (ts.isArrayLiteralExpression(node))
|
|
85
|
+
return node;
|
|
86
|
+
if (!ts.isIdentifier(node) || seen.has(node.text))
|
|
87
|
+
return undefined;
|
|
88
|
+
seen.add(node.text);
|
|
89
|
+
const declaration = declarations.get(node.text);
|
|
90
|
+
return declaration?.initializer && declaration.parent.flags & ts.NodeFlags.Const ? resolveArray(declaration.initializer, declarations, seen) : undefined;
|
|
91
|
+
}
|
|
92
|
+
/** 只识别静态集成入口;包含类、函数或执行语句的入口仍交由其他规则处理。 */
|
|
93
|
+
export function isIntegrationSource(text) {
|
|
94
|
+
const parsed = parse(text, 'integration.ts');
|
|
95
|
+
if (!parsed?.file.statements.length)
|
|
96
|
+
return false;
|
|
97
|
+
const declarations = variables(parsed.file);
|
|
98
|
+
const bindings = imports(parsed.file);
|
|
99
|
+
const used = new Set();
|
|
100
|
+
function staticReference(node, visiting = new Set()) {
|
|
101
|
+
node = unwrap(node);
|
|
102
|
+
if (ts.isIdentifier(node)) {
|
|
103
|
+
if (bindings.has(node.text))
|
|
104
|
+
return true;
|
|
105
|
+
const declaration = declarations.get(node.text);
|
|
106
|
+
if (!declaration?.initializer || visiting.has(node.text) || !(declaration.parent.flags & ts.NodeFlags.Const))
|
|
107
|
+
return false;
|
|
108
|
+
used.add(node.text);
|
|
109
|
+
return staticReference(declaration.initializer, new Set([...visiting, node.text]));
|
|
110
|
+
}
|
|
111
|
+
if (ts.isPropertyAccessExpression(node))
|
|
112
|
+
return staticReference(node.expression, visiting);
|
|
113
|
+
return ts.isArrayLiteralExpression(node) && node.elements.every((item) => staticReference(item, visiting));
|
|
114
|
+
}
|
|
115
|
+
let exported = false;
|
|
116
|
+
for (const statement of parsed.file.statements) {
|
|
117
|
+
if (ts.isImportDeclaration(statement))
|
|
118
|
+
continue;
|
|
119
|
+
if (ts.isExportDeclaration(statement)) {
|
|
120
|
+
exported = true;
|
|
121
|
+
if (!statement.moduleSpecifier && statement.exportClause && ts.isNamedExports(statement.exportClause)) {
|
|
122
|
+
for (const item of statement.exportClause.elements) {
|
|
123
|
+
const name = item.propertyName ?? item.name;
|
|
124
|
+
if (!ts.isIdentifier(name) || !staticReference(name))
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (ts.isExportAssignment(statement)) {
|
|
131
|
+
if (statement.isExportEquals || !staticReference(statement.expression))
|
|
132
|
+
return false;
|
|
133
|
+
exported = true;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (!ts.isVariableStatement(statement) || !(statement.declarationList.flags & ts.NodeFlags.Const))
|
|
137
|
+
return false;
|
|
138
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
139
|
+
if (!ts.isIdentifier(declaration.name) || !declaration.initializer || !staticReference(declaration.initializer))
|
|
140
|
+
return false;
|
|
141
|
+
if (hasModifier(statement, ts.SyntaxKind.ExportKeyword)) {
|
|
142
|
+
used.add(declaration.name.text);
|
|
143
|
+
exported = true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return exported && [...declarations.keys()].every((name) => used.has(name));
|
|
148
|
+
}
|
|
149
|
+
function functionLike(node) {
|
|
150
|
+
return ts.isArrowFunction(node) || ts.isFunctionExpression(node);
|
|
151
|
+
}
|
|
152
|
+
function functions(file) {
|
|
153
|
+
const result = new Map();
|
|
154
|
+
for (const statement of file.statements) {
|
|
155
|
+
if (ts.isFunctionDeclaration(statement) && statement.name) {
|
|
156
|
+
const name = statement.name.text;
|
|
157
|
+
const unit = result.get(name) ?? { name, nodes: [] };
|
|
158
|
+
unit.nodes.push(statement);
|
|
159
|
+
result.set(name, unit);
|
|
160
|
+
}
|
|
161
|
+
else if (ts.isVariableStatement(statement)) {
|
|
162
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
163
|
+
if (ts.isIdentifier(declaration.name) && declaration.initializer && functionLike(unwrap(declaration.initializer))) {
|
|
164
|
+
result.set(declaration.name.text, { name: declaration.name.text, nodes: [declaration], statement });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
function memberKey(member) {
|
|
172
|
+
if (ts.isConstructorDeclaration(member))
|
|
173
|
+
return 'instance:constructor';
|
|
174
|
+
const name = nameOf(member);
|
|
175
|
+
if (name === undefined)
|
|
176
|
+
return undefined;
|
|
177
|
+
const kind = ts.isMethodDeclaration(member) ? 'method' : ts.isGetAccessorDeclaration(member) ? 'get' : ts.isSetAccessorDeclaration(member) ? 'set' : ts.isPropertyDeclaration(member) && member.initializer && functionLike(unwrap(member.initializer)) ? 'arrow' : 'field';
|
|
178
|
+
return `${hasModifier(member, ts.SyntaxKind.StaticKeyword) ? 'static' : 'instance'}:${kind}:${name}`;
|
|
179
|
+
}
|
|
180
|
+
function members(owner) {
|
|
181
|
+
const result = new Map();
|
|
182
|
+
for (const member of owner.members) {
|
|
183
|
+
const key = memberKey(member);
|
|
184
|
+
if (!key)
|
|
185
|
+
continue;
|
|
186
|
+
const unit = result.get(key) ?? { name: key, nodes: [], owner };
|
|
187
|
+
unit.nodes.push(member);
|
|
188
|
+
result.set(key, unit);
|
|
189
|
+
}
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
function classes(file) {
|
|
193
|
+
return new Map(file.statements
|
|
194
|
+
.filter(ts.isClassDeclaration)
|
|
195
|
+
.filter((node) => !!node.name)
|
|
196
|
+
.map((node) => [node.name.text, node]));
|
|
197
|
+
}
|
|
198
|
+
function unitText(unit) {
|
|
199
|
+
return unit.nodes.map((node) => node.getText(node.getSourceFile())).join('\n');
|
|
200
|
+
}
|
|
201
|
+
function overloaded(unit) {
|
|
202
|
+
return unit.nodes.length > 1 || unit.nodes.some((node) => (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) && !node.body);
|
|
203
|
+
}
|
|
204
|
+
const globals = new Set('undefined NaN Infinity Object String Number Boolean BigInt Symbol Math JSON Date RegExp Array ReadonlyArray Promise Map Set WeakMap WeakSet Error TypeError RangeError Intl Reflect Proxy ArrayBuffer DataView Uint8Array Uint16Array Uint32Array Int8Array Int16Array Int32Array Float32Array Float64Array console globalThis parseInt parseFloat isNaN isFinite encodeURI encodeURIComponent decodeURI decodeURIComponent Record Partial Required Readonly Pick Omit Exclude Extract NonNullable ReturnType Parameters InstanceType ConstructorParameters Awaited PropertyKey'.split(' '));
|
|
205
|
+
function isReference(node) {
|
|
206
|
+
const parent = node.parent;
|
|
207
|
+
if ((ts.isPropertyAccessExpression(parent) && parent.name === node) || (ts.isQualifiedName(parent) && parent.right === node))
|
|
208
|
+
return false;
|
|
209
|
+
if (ts.isBindingElement(parent) && parent.propertyName === node)
|
|
210
|
+
return false;
|
|
211
|
+
if (ts.isLabeledStatement(parent) || ts.isBreakStatement(parent) || ts.isContinueStatement(parent))
|
|
212
|
+
return false;
|
|
213
|
+
return !('name' in parent && parent.name === node && !ts.isShorthandPropertyAssignment(parent));
|
|
214
|
+
}
|
|
215
|
+
function importIdentity(binding) {
|
|
216
|
+
return JSON.stringify([binding.module, binding.imported, binding.declaration.attributes?.getText() ?? '']);
|
|
217
|
+
}
|
|
218
|
+
function importLine(binding) {
|
|
219
|
+
const imported = /^[A-Za-z_$][\w$]*$/.test(binding.imported) ? binding.imported : JSON.stringify(binding.imported);
|
|
220
|
+
const clause = binding.imported === 'default' ? binding.name : binding.imported === '*' ? `* as ${binding.name}` : `{ ${binding.imported === binding.name ? imported : `${imported} as ${binding.name}`} }`;
|
|
221
|
+
return `import ${binding.typeOnly ? 'type ' : ''}${clause} from ${JSON.stringify(binding.module)};`;
|
|
222
|
+
}
|
|
223
|
+
/** 按函数和静态注册项增量合并,所有坐标和文本均属于节点自身的 SourceFile。 */
|
|
224
|
+
export function mergeSource(localText, targetText, baseText, mode, path = 'source.ts') {
|
|
225
|
+
const local = parse(localText, 'local.ts');
|
|
226
|
+
const target = parse(targetText, 'target.ts');
|
|
227
|
+
const base = baseText === undefined ? undefined : parse(baseText, 'base.ts');
|
|
228
|
+
if (!local || !target || (baseText !== undefined && !base))
|
|
229
|
+
return { content: localText, manual: [`${path}: TypeScript 语法无效,保留本地文件`], changed: false };
|
|
230
|
+
const edits = [];
|
|
231
|
+
const manual = [];
|
|
232
|
+
const report = (message) => manual.push(`${path}: ${message}`);
|
|
233
|
+
const newline = localText.includes('\r\n') ? '\r\n' : '\n';
|
|
234
|
+
const localImports = imports(local.file), targetImports = imports(target.file);
|
|
235
|
+
const localBindings = topBindings(local), targetBindings = topBindings(target);
|
|
236
|
+
const pendingImports = new Map();
|
|
237
|
+
const available = new Set(localBindings.keys());
|
|
238
|
+
const appended = [];
|
|
239
|
+
const append = (text) => appended.push(text);
|
|
240
|
+
const localVariables = variables(local.file), targetVariables = variables(target.file);
|
|
241
|
+
function importProblem(binding) {
|
|
242
|
+
const existing = localImports.get(binding.name) ?? pendingImports.get(binding.name);
|
|
243
|
+
if (existing && (importIdentity(existing) !== importIdentity(binding) || (existing.typeOnly && !binding.typeOnly)))
|
|
244
|
+
return `import ${binding.name} 命名或 type-only 冲突`;
|
|
245
|
+
if (!existing && available.has(binding.name))
|
|
246
|
+
return `import ${binding.name} 与本地声明冲突`;
|
|
247
|
+
if (!existing && binding.declaration.attributes)
|
|
248
|
+
return `import ${binding.name} 含导入属性,需人工确认`;
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
function references(nodes, label, owner, destination, candidates = new Set()) {
|
|
252
|
+
const needed = new Map();
|
|
253
|
+
const dependencies = new Set();
|
|
254
|
+
const problems = new Set();
|
|
255
|
+
const within = (declaration) => nodes.some((node) => declaration.getSourceFile() === node.getSourceFile() && declaration.pos >= node.pos && declaration.end <= node.end);
|
|
256
|
+
const hasMember = (name, isStatic) => !!destination &&
|
|
257
|
+
(destination.members.some((member) => nameOf(member) === name && hasModifier(member, ts.SyntaxKind.StaticKeyword) === isStatic) || (!isStatic && destination.members.some((member) => ts.isConstructorDeclaration(member) && member.parameters.some((parameter) => nameOf(parameter) === name && parameter.modifiers?.some((modifier) => [ts.SyntaxKind.PublicKeyword, ts.SyntaxKind.PrivateKeyword, ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.ReadonlyKeyword].includes(modifier.kind))))));
|
|
258
|
+
function visit(child) {
|
|
259
|
+
if (child.kind === ts.SyntaxKind.SuperKeyword)
|
|
260
|
+
problems.add('super 引用需人工确认');
|
|
261
|
+
if (child.kind === ts.SyntaxKind.ThisKeyword) {
|
|
262
|
+
const parent = child.parent;
|
|
263
|
+
const access = ts.isPropertyAccessExpression(parent) && parent.expression === child ? parent.name.text : ts.isElementAccessExpression(parent) && parent.expression === child && (ts.isStringLiteral(parent.argumentExpression) || ts.isNumericLiteral(parent.argumentExpression)) ? parent.argumentExpression.text : undefined;
|
|
264
|
+
const isStatic = hasModifier(nodes[0], ts.SyntaxKind.StaticKeyword);
|
|
265
|
+
let scope = child.parent;
|
|
266
|
+
while (scope && !nodes.includes(scope) && !(ts.isFunctionLike(scope) && !ts.isArrowFunction(scope)) && !ts.isClassExpression(scope) && !ts.isClassDeclaration(scope))
|
|
267
|
+
scope = scope.parent;
|
|
268
|
+
if (!owner || !scope || !nodes.includes(scope) || access === undefined || !hasMember(access, isStatic))
|
|
269
|
+
problems.add(`this.${access ?? '?'} 在本地缺失或作用域不明确`);
|
|
270
|
+
}
|
|
271
|
+
if (ts.isIdentifier(child) && isReference(child)) {
|
|
272
|
+
const symbol = ts.isShorthandPropertyAssignment(child.parent) ? target.checker.getShorthandAssignmentValueSymbol(child.parent) : target.checker.getSymbolAtLocation(child);
|
|
273
|
+
const declarations = symbol?.declarations ?? [];
|
|
274
|
+
if (declarations.length && declarations.every(within)) {
|
|
275
|
+
ts.forEachChild(child, visit);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const binding = targetImports.get(child.text);
|
|
279
|
+
if (binding && declarations.some((node) => ts.isImportClause(node) || ts.isImportSpecifier(node) || ts.isNamespaceImport(node))) {
|
|
280
|
+
let context = child;
|
|
281
|
+
while (context.parent && !ts.isTypeNode(context) && !ts.isExpression(context.parent) && !ts.isStatement(context.parent))
|
|
282
|
+
context = context.parent;
|
|
283
|
+
if (binding.typeOnly && (!ts.isTypeNode(context) || ts.isTypeQueryNode(context)))
|
|
284
|
+
problems.add(`import ${binding.name} 是 type-only,不能用于值引用`);
|
|
285
|
+
const problem = importProblem(binding);
|
|
286
|
+
const scope = destination && local.checker.getSymbolsInScope(destination.members[0] ?? destination, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace | ts.SymbolFlags.Alias).find((symbol) => symbol.name === binding.name);
|
|
287
|
+
if (scope && scope !== localBindings.get(binding.name))
|
|
288
|
+
problems.add(`import ${binding.name} 被本地类作用域遮蔽`);
|
|
289
|
+
if (problem)
|
|
290
|
+
problems.add(problem);
|
|
291
|
+
else if (!localImports.has(binding.name) && !pendingImports.has(binding.name))
|
|
292
|
+
needed.set(binding.name, binding);
|
|
293
|
+
}
|
|
294
|
+
else if (owner && declarations.some((node) => ts.isTypeParameterDeclaration(node) && node.parent === owner)) {
|
|
295
|
+
const parameter = owner.typeParameters?.find((node) => node.name.text === child.text);
|
|
296
|
+
if (!destination?.typeParameters?.some((node) => node.getText() === parameter?.getText()))
|
|
297
|
+
problems.add(`类类型参数 ${child.text} 不兼容`);
|
|
298
|
+
}
|
|
299
|
+
else if (symbol && (targetBindings.get(child.text) === symbol || declarations.some((declaration) => targetBindings.get(child.text)?.declarations?.includes(declaration)))) {
|
|
300
|
+
const existing = localBindings.get(child.text);
|
|
301
|
+
if (existing && !localImports.has(child.text) && existing.flags & symbol.flags & (ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace)) {
|
|
302
|
+
// 本地同名依赖保持原实现,不能借机覆盖字段、常量或类型。
|
|
303
|
+
}
|
|
304
|
+
else if (candidates.has(child.text) && !existing)
|
|
305
|
+
dependencies.add(child.text);
|
|
306
|
+
else if (!available.has(child.text) || localImports.has(child.text) || existing)
|
|
307
|
+
problems.add(`引用 ${child.text} 在本地缺失或绑定不兼容`);
|
|
308
|
+
}
|
|
309
|
+
else if (declarations.length || !globals.has(child.text) || available.has(child.text)) {
|
|
310
|
+
problems.add(`引用 ${child.text} 在本地缺失或无法解析`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
ts.forEachChild(child, visit);
|
|
314
|
+
}
|
|
315
|
+
nodes.forEach(visit);
|
|
316
|
+
if (problems.size) {
|
|
317
|
+
report(`${label}: ${[...problems].join(';')},保留本地并转人工`);
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
return { needed, dependencies };
|
|
321
|
+
}
|
|
322
|
+
const exportNames = new Map();
|
|
323
|
+
function bindingIdentity(name, bindings) {
|
|
324
|
+
const binding = bindings.get(name);
|
|
325
|
+
return binding ? `import:${importIdentity(binding)}` : `local:${name}`;
|
|
326
|
+
}
|
|
327
|
+
function exportIdentity(statement, imported, bindings) {
|
|
328
|
+
return statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier) ? JSON.stringify([statement.moduleSpecifier.text, imported, statement.attributes?.getText() ?? '']) : bindingIdentity(imported, bindings);
|
|
329
|
+
}
|
|
330
|
+
for (const statement of local.file.statements) {
|
|
331
|
+
if (ts.isExportDeclaration(statement) && statement.exportClause) {
|
|
332
|
+
if (ts.isNamedExports(statement.exportClause))
|
|
333
|
+
for (const item of statement.exportClause.elements)
|
|
334
|
+
exportNames.set(item.name.text, exportIdentity(statement, (item.propertyName ?? item.name).text, localImports));
|
|
335
|
+
else
|
|
336
|
+
exportNames.set(statement.exportClause.name.text, exportIdentity(statement, '*', localImports));
|
|
337
|
+
}
|
|
338
|
+
else if (ts.isExportAssignment(statement))
|
|
339
|
+
exportNames.set('default', bindingIdentity(statement.expression.getText(), localImports));
|
|
340
|
+
else if (hasModifier(statement, ts.SyntaxKind.ExportKeyword)) {
|
|
341
|
+
if (hasModifier(statement, ts.SyntaxKind.DefaultKeyword))
|
|
342
|
+
exportNames.set('default', `local:${nameOf(statement) ?? 'default'}`);
|
|
343
|
+
else if (ts.isVariableStatement(statement)) {
|
|
344
|
+
for (const declaration of statement.declarationList.declarations)
|
|
345
|
+
if (ts.isIdentifier(declaration.name))
|
|
346
|
+
exportNames.set(declaration.name.text, `local:${declaration.name.text}`);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
const name = nameOf(statement);
|
|
350
|
+
if (name)
|
|
351
|
+
exportNames.set(name, `local:${name}`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (mode === 'functions') {
|
|
356
|
+
const localFunctions = functions(local.file), targetFunctions = functions(target.file), baseFunctions = base ? functions(base.file) : new Map();
|
|
357
|
+
const localClasses = classes(local.file), targetClasses = classes(target.file), baseClasses = base ? classes(base.file) : new Map();
|
|
358
|
+
const changes = [];
|
|
359
|
+
const candidates = new Set(targetFunctions.keys());
|
|
360
|
+
const plan = (unit, previous, baseline, destination) => {
|
|
361
|
+
const label = unit.owner ? `${unit.owner.name.text}.${unit.name}` : `函数 ${unit.name}`;
|
|
362
|
+
if ((baseline && unitText(unit) === unitText(baseline)) || (previous && unitText(unit) === unitText(previous)))
|
|
363
|
+
return;
|
|
364
|
+
if (previous && !baseline) {
|
|
365
|
+
report(`${label}: 缺少该函数的基线,保留本地并转人工`);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (unit.name === 'instance:constructor') {
|
|
369
|
+
report(`${label}: 构造函数保留,需人工合并`);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (overloaded(unit) || (previous && overloaded(previous))) {
|
|
373
|
+
report(`${label}: 重载组需整体人工合并`);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
const node = unit.nodes[0];
|
|
377
|
+
if (!previous && !unit.owner && (available.has(unit.name) || targetImports.has(unit.name))) {
|
|
378
|
+
report(`${label}: 与本地或目标同名声明冲突`);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (previous && !!unit.statement !== !!previous.statement) {
|
|
382
|
+
report(`${label}: 函数声明形式变化,需人工合并`);
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
if (unit.owner && !previous && destination) {
|
|
386
|
+
const isStatic = hasModifier(node, ts.SyntaxKind.StaticKeyword);
|
|
387
|
+
const name = nameOf(node);
|
|
388
|
+
const conflict = destination.members.some((member) => nameOf(member) === name && hasModifier(member, ts.SyntaxKind.StaticKeyword) === isStatic && !((ts.isGetAccessorDeclaration(node) && ts.isSetAccessorDeclaration(member)) || (ts.isSetAccessorDeclaration(node) && ts.isGetAccessorDeclaration(member))));
|
|
389
|
+
const parameterProperty = !isStatic && destination.members.some((member) => ts.isConstructorDeclaration(member) && member.parameters.some((parameter) => nameOf(parameter) === name && parameter.modifiers?.length));
|
|
390
|
+
if (conflict || parameterProperty) {
|
|
391
|
+
report(`${label}: 与本地字段或成员种类冲突`);
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const statement = unit.statement ?? node;
|
|
396
|
+
const previousStatement = previous?.statement ?? previous?.nodes[0];
|
|
397
|
+
if (previousStatement && (hasModifier(statement, ts.SyntaxKind.ExportKeyword) !== hasModifier(previousStatement, ts.SyntaxKind.ExportKeyword) || hasModifier(statement, ts.SyntaxKind.DefaultKeyword) !== hasModifier(previousStatement, ts.SyntaxKind.DefaultKeyword))) {
|
|
398
|
+
report(`${label}: 导出形式变化,需人工合并`);
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
if (!previous && !unit.owner && hasModifier(statement, ts.SyntaxKind.ExportKeyword)) {
|
|
402
|
+
const exported = hasModifier(statement, ts.SyntaxKind.DefaultKeyword) ? 'default' : unit.name;
|
|
403
|
+
if (exportNames.has(exported)) {
|
|
404
|
+
report(`${label}: 导出名 ${exported} 冲突`);
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
const checked = references(unit.nodes, label, unit.owner, destination, candidates);
|
|
409
|
+
if (!checked)
|
|
410
|
+
return;
|
|
411
|
+
const unitEdits = [];
|
|
412
|
+
if (previous)
|
|
413
|
+
unitEdits.push({ start: previous.nodes[0].getStart(), end: previous.nodes[0].end, text: node.getText() });
|
|
414
|
+
else if (destination) {
|
|
415
|
+
const last = destination.members[destination.members.length - 1];
|
|
416
|
+
if (last && ts.isPropertyDeclaration(last) && !last.getText().trimEnd().endsWith(';'))
|
|
417
|
+
unitEdits.push({ start: last.end, end: last.end, text: ';' });
|
|
418
|
+
unitEdits.push({ start: destination.end - 1, end: destination.end - 1, text: `${newline} ${node.getText().replace(/;?\s*$/, ';')}${newline}` });
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
const text = unit.statement ? `${hasModifier(unit.statement, ts.SyntaxKind.ExportKeyword) ? 'export ' : ''}${unit.statement.declarationList.flags & ts.NodeFlags.Const ? 'const' : unit.statement.declarationList.flags & ts.NodeFlags.Let ? 'let' : 'var'} ${node.getText()};` : node.getText();
|
|
422
|
+
unitEdits.push({ start: localText.length, end: localText.length, text: `${newline}${text}${newline}` });
|
|
423
|
+
}
|
|
424
|
+
changes.push({ unit, previous, edits: unitEdits, imports: checked.needed, dependencies: checked.dependencies });
|
|
425
|
+
};
|
|
426
|
+
// 目录采用函数合并不代表常量、类型变化可以静默忽略。
|
|
427
|
+
const priorVariables = base ? variables(base.file) : new Map();
|
|
428
|
+
for (const [name, declaration] of targetVariables) {
|
|
429
|
+
if (targetFunctions.has(name))
|
|
430
|
+
continue;
|
|
431
|
+
const old = priorVariables.get(name), current = localVariables.get(name);
|
|
432
|
+
if (declaration.getText() !== old?.getText() && declaration.getText() !== current?.getText())
|
|
433
|
+
report(`声明 ${name}: 非函数变化保留本地,需人工合并`);
|
|
434
|
+
}
|
|
435
|
+
for (const statement of target.file.statements)
|
|
436
|
+
if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement) || ts.isEnumDeclaration(statement)) {
|
|
437
|
+
const equivalent = (file) => file?.statements.find((node) => node.kind === statement.kind && (ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node) || ts.isEnumDeclaration(node)) && node.name.text === statement.name.text)?.getText();
|
|
438
|
+
if (statement.getText() !== equivalent(base?.file) && statement.getText() !== equivalent(local.file))
|
|
439
|
+
report(`类型 ${statement.name.text}: 保留本地,需人工合并`);
|
|
440
|
+
}
|
|
441
|
+
for (const [name, unit] of targetFunctions)
|
|
442
|
+
plan(unit, localFunctions.get(name), baseFunctions.get(name));
|
|
443
|
+
for (const [name, owner] of targetClasses) {
|
|
444
|
+
const destination = localClasses.get(name);
|
|
445
|
+
if (!destination) {
|
|
446
|
+
report(`新增类 ${name} 未自动添加,类结构需人工确认`);
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
const oldMembers = members(destination), baseMembers = baseClasses.has(name) ? members(baseClasses.get(name)) : new Map();
|
|
450
|
+
for (const [key, unit] of members(owner)) {
|
|
451
|
+
if (!key.includes(':field:'))
|
|
452
|
+
plan(unit, oldMembers.get(key), baseMembers.get(key), destination);
|
|
453
|
+
else if (unitText(unit) !== (baseMembers.get(key) ? unitText(baseMembers.get(key)) : undefined) && unitText(unit) !== (oldMembers.get(key) ? unitText(oldMembers.get(key)) : undefined)) {
|
|
454
|
+
report(`${name}.${key}: 非函数字段发生变化,保留本地并转人工`);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
// 先检查整个依赖图,再提交编辑,避免被阻断的新增函数留下悬空调用。
|
|
459
|
+
let accepted = changes;
|
|
460
|
+
while (true) {
|
|
461
|
+
const names = new Set([...available, ...accepted.filter((change) => !change.unit.owner).map((change) => change.unit.name)]);
|
|
462
|
+
const next = accepted.filter((change) => {
|
|
463
|
+
const missing = [...change.dependencies].filter((name) => !names.has(name));
|
|
464
|
+
if (missing.length)
|
|
465
|
+
report(`${change.unit.name}: 依赖 ${missing.join(', ')} 未安全合并,转人工`);
|
|
466
|
+
return !missing.length;
|
|
467
|
+
});
|
|
468
|
+
if (next.length === accepted.length)
|
|
469
|
+
break;
|
|
470
|
+
accepted = next;
|
|
471
|
+
}
|
|
472
|
+
for (const change of accepted) {
|
|
473
|
+
for (const edit of change.edits)
|
|
474
|
+
if (!edits.some((existing) => existing.start === edit.start && existing.end === edit.end && existing.text === edit.text))
|
|
475
|
+
edits.push(edit);
|
|
476
|
+
for (const [name, binding] of change.imports)
|
|
477
|
+
pendingImports.set(name, binding);
|
|
478
|
+
if (!change.unit.owner) {
|
|
479
|
+
available.add(change.unit.name);
|
|
480
|
+
const statement = change.unit.statement ?? change.unit.nodes[0];
|
|
481
|
+
if (hasModifier(statement, ts.SyntaxKind.ExportKeyword))
|
|
482
|
+
exportNames.set(hasModifier(statement, ts.SyntaxKind.DefaultKeyword) ? 'default' : change.unit.name, `local:${change.unit.name}`);
|
|
483
|
+
}
|
|
484
|
+
if (!change.previous)
|
|
485
|
+
report(`新增${change.unit.owner ? '方法' : '函数'} ${change.unit.name}`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
for (const binding of targetImports.values()) {
|
|
490
|
+
const problem = importProblem(binding);
|
|
491
|
+
if (problem)
|
|
492
|
+
report(`${problem},保留本地并转人工`);
|
|
493
|
+
else if (!localImports.has(binding.name))
|
|
494
|
+
pendingImports.set(binding.name, binding);
|
|
495
|
+
}
|
|
496
|
+
const sideEffectKey = (node) => `${ts.isStringLiteral(node.moduleSpecifier) ? node.moduleSpecifier.text : node.moduleSpecifier.getText()}:${node.attributes?.getText() ?? ''}`;
|
|
497
|
+
const sideEffects = new Set(local.file.statements
|
|
498
|
+
.filter(ts.isImportDeclaration)
|
|
499
|
+
.filter((node) => !node.importClause)
|
|
500
|
+
.map(sideEffectKey));
|
|
501
|
+
for (const statement of target.file.statements)
|
|
502
|
+
if (ts.isImportDeclaration(statement) && !statement.importClause) {
|
|
503
|
+
const key = sideEffectKey(statement);
|
|
504
|
+
if (!sideEffects.has(key)) {
|
|
505
|
+
append(statement.getText());
|
|
506
|
+
sideEffects.add(key);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
function commitReferences(nodes, label) {
|
|
511
|
+
const checked = references(nodes, label);
|
|
512
|
+
if (!checked)
|
|
513
|
+
return false;
|
|
514
|
+
for (const [name, binding] of checked.needed)
|
|
515
|
+
pendingImports.set(name, binding);
|
|
516
|
+
return true;
|
|
517
|
+
}
|
|
518
|
+
function expressionKey(node, bindings) {
|
|
519
|
+
node = unwrap(node);
|
|
520
|
+
if (ts.isIdentifier(node))
|
|
521
|
+
return bindingIdentity(node.text, bindings);
|
|
522
|
+
if (ts.isPropertyAccessExpression(node))
|
|
523
|
+
return `${expressionKey(node.expression, bindings)}.${node.name.text}`;
|
|
524
|
+
if (ts.isArrayLiteralExpression(node))
|
|
525
|
+
return JSON.stringify(node.elements.map((item) => expressionKey(item, bindings)));
|
|
526
|
+
return ts.isStringLiteral(node) ? JSON.stringify(node.text) : node.getText();
|
|
527
|
+
}
|
|
528
|
+
const arrayAdditions = new Map();
|
|
529
|
+
const arrayKeys = new Map();
|
|
530
|
+
function mergeArray(left, right, label) {
|
|
531
|
+
if (!staticValue(left) || !staticValue(right)) {
|
|
532
|
+
report(`${label}: 动态数组注册需人工合并`);
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
const keys = arrayKeys.get(left) ?? new Set(left.elements.map((item) => expressionKey(item, localImports)));
|
|
536
|
+
const additions = arrayAdditions.get(left) ?? [];
|
|
537
|
+
for (const item of right.elements) {
|
|
538
|
+
const key = expressionKey(item, targetImports);
|
|
539
|
+
if (!keys.has(key) && commitReferences([item], label)) {
|
|
540
|
+
additions.push(item.getText());
|
|
541
|
+
keys.add(key);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
arrayKeys.set(left, keys);
|
|
545
|
+
arrayAdditions.set(left, additions);
|
|
546
|
+
}
|
|
547
|
+
function ensureVariable(name, visiting = new Set()) {
|
|
548
|
+
if (available.has(name))
|
|
549
|
+
return !localImports.has(name) && !targetImports.has(name);
|
|
550
|
+
const declaration = targetVariables.get(name);
|
|
551
|
+
if (!declaration?.initializer || !(declaration.parent.flags & ts.NodeFlags.Const) || visiting.has(name))
|
|
552
|
+
return false;
|
|
553
|
+
const value = unwrap(declaration.initializer);
|
|
554
|
+
if (!ts.isArrayLiteralExpression(value) && !ts.isIdentifier(value))
|
|
555
|
+
return false;
|
|
556
|
+
if (!staticValue(value))
|
|
557
|
+
return false;
|
|
558
|
+
if (ts.isIdentifier(value) && targetVariables.has(value.text) && !ensureVariable(value.text, new Set([...visiting, name])))
|
|
559
|
+
return false;
|
|
560
|
+
if (!commitReferences([declaration], `注册 ${name}`))
|
|
561
|
+
return false;
|
|
562
|
+
let declarationText = declaration.getText();
|
|
563
|
+
if (ts.isArrayLiteralExpression(value)) {
|
|
564
|
+
const keys = new Set();
|
|
565
|
+
const unique = value.elements.filter((item) => {
|
|
566
|
+
const key = expressionKey(item, targetImports);
|
|
567
|
+
if (keys.has(key))
|
|
568
|
+
return false;
|
|
569
|
+
keys.add(key);
|
|
570
|
+
return true;
|
|
571
|
+
});
|
|
572
|
+
if (unique.length !== value.elements.length)
|
|
573
|
+
declarationText = apply(declarationText, [{ start: value.getStart() - declaration.getStart(), end: value.end - declaration.getStart(), text: `[${unique.map((item) => item.getText()).join(', ')}]` }]);
|
|
574
|
+
}
|
|
575
|
+
append(`const ${declarationText};`);
|
|
576
|
+
available.add(name);
|
|
577
|
+
return true;
|
|
578
|
+
}
|
|
579
|
+
if (mode === 'exports') {
|
|
580
|
+
for (const statement of target.file.statements) {
|
|
581
|
+
if (!ts.isVariableStatement(statement))
|
|
582
|
+
continue;
|
|
583
|
+
if (!hasModifier(statement, ts.SyntaxKind.ExportKeyword))
|
|
584
|
+
continue;
|
|
585
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
586
|
+
const name = ts.isIdentifier(declaration.name) ? declaration.name.text : undefined;
|
|
587
|
+
if (!name || !declaration.initializer || !(statement.declarationList.flags & ts.NodeFlags.Const)) {
|
|
588
|
+
report('非静态注册声明需人工合并');
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
const right = resolveArray(declaration.initializer, targetVariables);
|
|
592
|
+
const existing = localVariables.get(name);
|
|
593
|
+
const left = existing?.initializer && resolveArray(existing.initializer, localVariables);
|
|
594
|
+
if (exportNames.has(name) && exportNames.get(name) !== `local:${name}`) {
|
|
595
|
+
report(`导出名 ${name} 冲突,保留本地`);
|
|
596
|
+
continue;
|
|
597
|
+
}
|
|
598
|
+
if (right && left)
|
|
599
|
+
mergeArray(left, right, name);
|
|
600
|
+
else if (existing || !right || !ensureVariable(name)) {
|
|
601
|
+
report(`注册 ${name} 结构或依赖不兼容,需人工合并`);
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
if (!exportNames.has(name)) {
|
|
605
|
+
append(`export { ${name} };`);
|
|
606
|
+
exportNames.set(name, `local:${name}`);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
const stars = new Set(local.file.statements
|
|
612
|
+
.filter(ts.isExportDeclaration)
|
|
613
|
+
.filter((node) => !node.exportClause)
|
|
614
|
+
.map((node) => `${node.isTypeOnly}:${node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier) ? node.moduleSpecifier.text : ''}:${node.attributes?.getText() ?? ''}`));
|
|
615
|
+
for (const statement of target.file.statements) {
|
|
616
|
+
if (!ts.isExportDeclaration(statement))
|
|
617
|
+
continue;
|
|
618
|
+
if (!statement.exportClause) {
|
|
619
|
+
const key = `${statement.isTypeOnly}:${statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier) ? statement.moduleSpecifier.text : ''}:${statement.attributes?.getText() ?? ''}`;
|
|
620
|
+
if (!stars.has(key)) {
|
|
621
|
+
append(statement.getText());
|
|
622
|
+
stars.add(key);
|
|
623
|
+
}
|
|
624
|
+
continue;
|
|
625
|
+
}
|
|
626
|
+
const items = ts.isNamedExports(statement.exportClause) ? statement.exportClause.elements : [statement.exportClause];
|
|
627
|
+
const additions = [];
|
|
628
|
+
for (const item of items) {
|
|
629
|
+
const name = item.name.text;
|
|
630
|
+
const imported = ts.isExportSpecifier(item) ? (item.propertyName ?? item.name).text : '*';
|
|
631
|
+
const identity = exportIdentity(statement, imported, targetImports);
|
|
632
|
+
if (exportNames.has(name)) {
|
|
633
|
+
if (exportNames.get(name) !== identity)
|
|
634
|
+
report(`导出名 ${name} 冲突,保留本地`);
|
|
635
|
+
else if (mode === 'exports' && !statement.moduleSpecifier) {
|
|
636
|
+
const existing = localVariables.get(imported), next = targetVariables.get(imported);
|
|
637
|
+
const left = existing?.initializer && resolveArray(existing.initializer, localVariables), right = next?.initializer && resolveArray(next.initializer, targetVariables);
|
|
638
|
+
if (left && right)
|
|
639
|
+
mergeArray(left, right, name);
|
|
640
|
+
}
|
|
641
|
+
continue;
|
|
642
|
+
}
|
|
643
|
+
if (!statement.moduleSpecifier) {
|
|
644
|
+
const binding = targetImports.get(imported);
|
|
645
|
+
if (binding) {
|
|
646
|
+
const problem = importProblem(binding);
|
|
647
|
+
if (problem) {
|
|
648
|
+
report(`导出 ${name}: ${problem}`);
|
|
649
|
+
continue;
|
|
650
|
+
}
|
|
651
|
+
if (!localImports.has(imported))
|
|
652
|
+
pendingImports.set(imported, binding);
|
|
653
|
+
}
|
|
654
|
+
else if (!available.has(imported) && !(mode === 'exports' && ensureVariable(imported))) {
|
|
655
|
+
report(`导出 ${name}: 引用 ${imported} 缺失,转人工`);
|
|
656
|
+
continue;
|
|
657
|
+
}
|
|
658
|
+
const existing = localVariables.get(imported), next = targetVariables.get(imported);
|
|
659
|
+
const left = existing?.initializer && resolveArray(existing.initializer, localVariables), right = next?.initializer && resolveArray(next.initializer, targetVariables);
|
|
660
|
+
if (mode === 'exports' && left && right)
|
|
661
|
+
mergeArray(left, right, name);
|
|
662
|
+
}
|
|
663
|
+
exportNames.set(name, identity);
|
|
664
|
+
additions.push(item.getText());
|
|
665
|
+
}
|
|
666
|
+
if (additions.length) {
|
|
667
|
+
const clause = ts.isNamedExports(statement.exportClause) ? `{ ${additions.join(', ')} }` : additions[0];
|
|
668
|
+
append(`export ${statement.isTypeOnly ? 'type ' : ''}${clause}${statement.moduleSpecifier ? ` from ${statement.moduleSpecifier.getText()}` : ''}${statement.attributes ? ` ${statement.attributes.getText()}` : ''};`);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
if (mode === 'exports') {
|
|
672
|
+
for (const statement of target.file.statements) {
|
|
673
|
+
if (ts.isImportDeclaration(statement) || ts.isExportDeclaration(statement) || ts.isVariableStatement(statement))
|
|
674
|
+
continue;
|
|
675
|
+
if (!ts.isExportAssignment(statement) || statement.isExportEquals || !staticValue(statement.expression)) {
|
|
676
|
+
report('非静态集成代码保留本地,需人工合并');
|
|
677
|
+
continue;
|
|
678
|
+
}
|
|
679
|
+
const existing = local.file.statements.find(ts.isExportAssignment);
|
|
680
|
+
const right = resolveArray(statement.expression, targetVariables), left = existing && resolveArray(existing.expression, localVariables);
|
|
681
|
+
if (exportNames.has('default')) {
|
|
682
|
+
if (left && right)
|
|
683
|
+
mergeArray(left, right, 'default');
|
|
684
|
+
else if (!existing || expressionKey(existing.expression, localImports) !== expressionKey(statement.expression, targetImports))
|
|
685
|
+
report('default 导出冲突,保留本地');
|
|
686
|
+
continue;
|
|
687
|
+
}
|
|
688
|
+
const value = unwrap(statement.expression);
|
|
689
|
+
if (ts.isIdentifier(value) && targetVariables.has(value.text) && !ensureVariable(value.text)) {
|
|
690
|
+
report('default 注册依赖缺失,需人工合并');
|
|
691
|
+
continue;
|
|
692
|
+
}
|
|
693
|
+
if (commitReferences([statement.expression], 'default')) {
|
|
694
|
+
let text = statement.getText();
|
|
695
|
+
if (ts.isArrayLiteralExpression(value)) {
|
|
696
|
+
const seen = new Set();
|
|
697
|
+
const unique = value.elements.filter((item) => {
|
|
698
|
+
const key = expressionKey(item, targetImports);
|
|
699
|
+
if (seen.has(key))
|
|
700
|
+
return false;
|
|
701
|
+
seen.add(key);
|
|
702
|
+
return true;
|
|
703
|
+
});
|
|
704
|
+
if (unique.length !== value.elements.length)
|
|
705
|
+
text = apply(text, [{ start: value.getStart() - statement.getStart(), end: value.end - statement.getStart(), text: `[${unique.map((item) => item.getText()).join(', ')}]` }]);
|
|
706
|
+
}
|
|
707
|
+
append(text);
|
|
708
|
+
exportNames.set('default', statement.expression.getText());
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
for (const [array, additions] of arrayAdditions)
|
|
713
|
+
if (additions.length) {
|
|
714
|
+
const last = array.elements[array.elements.length - 1];
|
|
715
|
+
if (last && !array.elements.hasTrailingComma)
|
|
716
|
+
edits.push({ start: last.end, end: last.end, text: ',' });
|
|
717
|
+
edits.push({ start: array.end - 1, end: array.end - 1, text: `${last ? ' ' : ''}${additions.join(', ')}` });
|
|
718
|
+
}
|
|
719
|
+
if (pendingImports.size) {
|
|
720
|
+
const last = [...local.file.statements].reverse().find(ts.isImportDeclaration);
|
|
721
|
+
const position = last ? last.end : localText.startsWith('#!') ? (localText.indexOf('\n') < 0 ? localText.length : localText.indexOf('\n') + 1) : 0;
|
|
722
|
+
edits.push({ start: position, end: position, text: `${position ? newline : ''}${[...pendingImports.values()].map(importLine).join(newline)}${newline}` });
|
|
723
|
+
}
|
|
724
|
+
if (appended.length)
|
|
725
|
+
edits.push({ start: localText.length, end: localText.length, text: `${newline}${appended.join(newline)}${newline}` });
|
|
726
|
+
const content = apply(localText, edits);
|
|
727
|
+
const output = parse(content, 'output.ts');
|
|
728
|
+
// 无项目上下文时只比较绑定、导出和未声明引用诊断,忽略外部模块解析错误。
|
|
729
|
+
const bindingDiagnostics = new Set([2300, 2304, 2323, 2391, 2393, 2395, 2440, 2451, 2484, 2528, 2552, 2614, 2683, 2693, 2724]);
|
|
730
|
+
const diagnostics = (parsed) => parsed.program
|
|
731
|
+
.getSemanticDiagnostics(parsed.file)
|
|
732
|
+
.filter((item) => bindingDiagnostics.has(item.code))
|
|
733
|
+
.map((item) => `${item.code}:${ts.flattenDiagnosticMessageText(item.messageText, '\n')}`);
|
|
734
|
+
const before = diagnostics(local);
|
|
735
|
+
const remaining = [...before];
|
|
736
|
+
const introduced = output &&
|
|
737
|
+
diagnostics(output).filter((message) => {
|
|
738
|
+
const index = remaining.indexOf(message);
|
|
739
|
+
if (index < 0)
|
|
740
|
+
return true;
|
|
741
|
+
remaining.splice(index, 1);
|
|
742
|
+
return false;
|
|
743
|
+
});
|
|
744
|
+
if (!output || introduced?.length) {
|
|
745
|
+
report(`合并结果${output ? `产生绑定或引用错误 (${introduced.join(';')})` : '语法无效'},保留本地并转人工`);
|
|
746
|
+
return { content: localText, manual: [...new Set(manual)], changed: false };
|
|
747
|
+
}
|
|
748
|
+
return { content, manual: [...new Set(manual)], changed: content !== localText };
|
|
749
|
+
}
|
|
750
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VwZGF0ZS9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBVTVCLFNBQVMsS0FBSyxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLElBQUssSUFBd0UsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekgsTUFBTSxJQUFJLEdBQW9CO1FBQzVCLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1FBQzFCLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDN0IsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDeEIsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSTtRQUNuQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdEQsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUk7UUFDcEMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtR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
|