sfdx-git-delta 6.41.2 → 6.43.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/README.md +35 -2
- package/lib/adapter/GitAdapter.d.ts +51 -2
- package/lib/adapter/GitAdapter.js +367 -41
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/gitBatchCatFile.d.ts +26 -4
- package/lib/adapter/gitBatchCatFile.js +128 -44
- package/lib/adapter/gitBatchCatFile.js.map +1 -1
- package/lib/adapter/gitBlobReader.d.ts +58 -0
- package/lib/adapter/gitBlobReader.js +27 -0
- package/lib/adapter/gitBlobReader.js.map +1 -0
- package/lib/adapter/ioExecutor.d.ts +18 -6
- package/lib/adapter/ioExecutor.js +97 -12
- package/lib/adapter/ioExecutor.js.map +1 -1
- package/lib/commands/sgd/source/delta.d.ts +2 -0
- package/lib/commands/sgd/source/delta.js +31 -1
- package/lib/commands/sgd/source/delta.js.map +1 -1
- package/lib/constant/cliConstants.d.ts +2 -0
- package/lib/constant/cliConstants.js +4 -0
- package/lib/constant/cliConstants.js.map +1 -1
- package/lib/constant/gitConstants.d.ts +1 -0
- package/lib/constant/gitConstants.js +4 -0
- package/lib/constant/gitConstants.js.map +1 -1
- package/lib/main.js +35 -7
- package/lib/main.js.map +1 -1
- package/lib/metadata/MetadataRepositoryImpl.d.ts +1 -0
- package/lib/metadata/MetadataRepositoryImpl.js +14 -2
- package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
- package/lib/post-processor/changesManifestProcessor.d.ts +15 -0
- package/lib/post-processor/changesManifestProcessor.js +50 -0
- package/lib/post-processor/changesManifestProcessor.js.map +1 -0
- package/lib/post-processor/flowTranslationProcessor.d.ts +31 -14
- package/lib/post-processor/flowTranslationProcessor.js +146 -51
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/packageGenerator.d.ts +1 -2
- package/lib/post-processor/packageGenerator.js +23 -34
- package/lib/post-processor/packageGenerator.js.map +1 -1
- package/lib/post-processor/postProcessorManager.js +9 -6
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/botHandler.d.ts +2 -1
- package/lib/service/botHandler.js +4 -3
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/containedDecomposedHandler.d.ts +3 -2
- package/lib/service/containedDecomposedHandler.js +6 -6
- package/lib/service/containedDecomposedHandler.js.map +1 -1
- package/lib/service/customFieldHandler.d.ts +2 -1
- package/lib/service/customFieldHandler.js +2 -2
- package/lib/service/customFieldHandler.js.map +1 -1
- package/lib/service/customLabelHandler.d.ts +2 -1
- package/lib/service/customLabelHandler.js +3 -3
- package/lib/service/customLabelHandler.js.map +1 -1
- package/lib/service/customObjectHandler.d.ts +2 -1
- package/lib/service/customObjectHandler.js +2 -2
- package/lib/service/customObjectHandler.js.map +1 -1
- package/lib/service/decomposedHandler.d.ts +2 -1
- package/lib/service/decomposedHandler.js +2 -2
- package/lib/service/decomposedHandler.js.map +1 -1
- package/lib/service/diffLineInterpreter.d.ts +1 -1
- package/lib/service/diffLineInterpreter.js +16 -6
- package/lib/service/diffLineInterpreter.js.map +1 -1
- package/lib/service/flowHandler.d.ts +2 -1
- package/lib/service/flowHandler.js +2 -2
- package/lib/service/flowHandler.js.map +1 -1
- package/lib/service/inFileHandler.d.ts +8 -7
- package/lib/service/inFileHandler.js +37 -30
- package/lib/service/inFileHandler.js.map +1 -1
- package/lib/service/inFolderHandler.d.ts +2 -1
- package/lib/service/inFolderHandler.js +2 -2
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/inResourceHandler.d.ts +3 -2
- package/lib/service/inResourceHandler.js +5 -5
- package/lib/service/inResourceHandler.js.map +1 -1
- package/lib/service/objectTranslationHandler.d.ts +3 -3
- package/lib/service/objectTranslationHandler.js +15 -8
- package/lib/service/objectTranslationHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.d.ts +8 -4
- package/lib/service/reportingFolderHandler.js +5 -6
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.d.ts +8 -4
- package/lib/service/sharedFolderHandler.js +5 -6
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.d.ts +14 -7
- package/lib/service/standardHandler.js +47 -27
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/service/typeHandlerFactory.d.ts +2 -0
- package/lib/service/typeHandlerFactory.js +15 -0
- package/lib/service/typeHandlerFactory.js.map +1 -1
- package/lib/types/config.d.ts +1 -0
- package/lib/types/handlerResult.d.ts +17 -8
- package/lib/types/handlerResult.js +9 -11
- package/lib/types/handlerResult.js.map +1 -1
- package/lib/types/work.d.ts +2 -5
- package/lib/utils/LoggingDecorator.js +22 -11
- package/lib/utils/LoggingDecorator.js.map +1 -1
- package/lib/utils/changeSet.d.ts +53 -0
- package/lib/utils/changeSet.js +257 -0
- package/lib/utils/changeSet.js.map +1 -0
- package/lib/utils/configValidator.d.ts +1 -0
- package/lib/utils/configValidator.js +39 -1
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/gitLfsHelper.js +9 -1
- package/lib/utils/gitLfsHelper.js.map +1 -1
- package/lib/utils/metadataDiff/index.d.ts +28 -0
- package/lib/utils/metadataDiff/index.js +57 -0
- package/lib/utils/metadataDiff/index.js.map +1 -0
- package/lib/utils/metadataDiff/streamingDiff.d.ts +68 -0
- package/lib/utils/metadataDiff/streamingDiff.js +300 -0
- package/lib/utils/metadataDiff/streamingDiff.js.map +1 -0
- package/lib/utils/metadataDiff/xmlEventReader.d.ts +28 -0
- package/lib/utils/metadataDiff/xmlEventReader.js +221 -0
- package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -0
- package/lib/utils/metadataDiff/xmlWriter.d.ts +17 -0
- package/lib/utils/metadataDiff/xmlWriter.js +213 -0
- package/lib/utils/metadataDiff/xmlWriter.js.map +1 -0
- package/lib/utils/packageHelper.d.ts +8 -1
- package/lib/utils/packageHelper.js +25 -28
- package/lib/utils/packageHelper.js.map +1 -1
- package/lib/utils/renameResolver.d.ts +19 -0
- package/lib/utils/renameResolver.js +52 -0
- package/lib/utils/renameResolver.js.map +1 -0
- package/lib/utils/repoGitDiff.d.ts +18 -5
- package/lib/utils/repoGitDiff.js +66 -33
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/lib/utils/treeIndexScope.d.ts +1 -1
- package/lib/utils/treeIndexScope.js.map +1 -1
- package/lib/utils/txmlAdapter.d.ts +30 -0
- package/lib/utils/txmlAdapter.js +121 -0
- package/lib/utils/txmlAdapter.js.map +1 -0
- package/lib/utils/xmlHelper.d.ts +0 -5
- package/lib/utils/xmlHelper.js +0 -57
- package/lib/utils/xmlHelper.js.map +1 -1
- package/messages/delta.md +12 -0
- package/npm-shrinkwrap.json +628 -486
- package/oclif.manifest.json +9 -1
- package/package.json +53 -21
- package/lib/utils/manifestAggregator.d.ts +0 -3
- package/lib/utils/manifestAggregator.js +0 -22
- package/lib/utils/manifestAggregator.js.map +0 -1
- package/lib/utils/metadataDiff.d.ts +0 -23
- package/lib/utils/metadataDiff.js +0 -242
- package/lib/utils/metadataDiff.js.map +0 -1
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { once } from 'node:events';
|
|
3
|
+
import { ATTRIBUTE_PREFIX } from '../xmlHelper.js';
|
|
4
|
+
const INDENT = ' ';
|
|
5
|
+
const NEWLINE = '\n';
|
|
6
|
+
const COMMENT_KEY = '#comment';
|
|
7
|
+
// Buffer threshold for batching frame chunks before flushing to the
|
|
8
|
+
// underlying stream. ~8 KB matches a typical socket / pipe payload
|
|
9
|
+
// without forcing the writer to round-trip the event loop on every
|
|
10
|
+
// element. Picked to amortize the per-write overhead (Writable._write,
|
|
11
|
+
// drain bookkeeping) across ~50-100 frames for medium Profiles.
|
|
12
|
+
const FLUSH_THRESHOLD = 8 * 1024;
|
|
13
|
+
// Pre-computed indent strings keyed by depth. XML is rarely deeper than
|
|
14
|
+
// 4-6 levels in Salesforce metadata, so this stays tiny. Lazily extended
|
|
15
|
+
// on first miss so deeper inputs still work without an upfront bound.
|
|
16
|
+
const indentCache = [''];
|
|
17
|
+
const indent = (depth) => {
|
|
18
|
+
let cached = indentCache[depth];
|
|
19
|
+
if (cached === undefined) {
|
|
20
|
+
for (let d = indentCache.length; d <= depth; d++) {
|
|
21
|
+
indentCache[d] = indentCache[d - 1] + INDENT;
|
|
22
|
+
}
|
|
23
|
+
cached = indentCache[depth];
|
|
24
|
+
}
|
|
25
|
+
return cached;
|
|
26
|
+
};
|
|
27
|
+
const renderAttrs = (attrs) => {
|
|
28
|
+
let out = '';
|
|
29
|
+
for (const key of Object.keys(attrs)) {
|
|
30
|
+
const bareName = key.slice(ATTRIBUTE_PREFIX.length);
|
|
31
|
+
out += ` ${bareName}="${attrs[key]}"`;
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
};
|
|
35
|
+
const splitAttributesAndChildren = (content) => {
|
|
36
|
+
const attributes = {};
|
|
37
|
+
const children = [];
|
|
38
|
+
for (const key of Object.keys(content)) {
|
|
39
|
+
const value = content[key];
|
|
40
|
+
if (key.startsWith(ATTRIBUTE_PREFIX)) {
|
|
41
|
+
attributes[key] = String(value);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
children.push([key, value]);
|
|
45
|
+
}
|
|
46
|
+
return { attributes, children };
|
|
47
|
+
};
|
|
48
|
+
const isPrimitive = (value) => value === null || value === undefined || typeof value !== 'object';
|
|
49
|
+
const toFrameForObjectChild = (key, value, depth) => {
|
|
50
|
+
const { attributes, children } = splitAttributesAndChildren(value);
|
|
51
|
+
if (children.length === 0) {
|
|
52
|
+
return {
|
|
53
|
+
kind: 'empty',
|
|
54
|
+
name: key,
|
|
55
|
+
attributes,
|
|
56
|
+
depth,
|
|
57
|
+
trailingNewline: true,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
kind: 'open',
|
|
62
|
+
name: key,
|
|
63
|
+
attributes,
|
|
64
|
+
children,
|
|
65
|
+
depth,
|
|
66
|
+
closeTrailingNewline: true,
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
const toFrameForPrimitiveChild = (key, value, depth) => ({
|
|
70
|
+
kind: 'leaf',
|
|
71
|
+
name: key,
|
|
72
|
+
attributes: {},
|
|
73
|
+
value: value === undefined || value === null ? '' : String(value),
|
|
74
|
+
depth,
|
|
75
|
+
});
|
|
76
|
+
const pushChildren = (stack, children, depth) => {
|
|
77
|
+
for (let i = children.length - 1; i >= 0; i--) {
|
|
78
|
+
const [key, value] = children[i];
|
|
79
|
+
if (key === COMMENT_KEY) {
|
|
80
|
+
if (Array.isArray(value)) {
|
|
81
|
+
for (let j = value.length - 1; j >= 0; j--) {
|
|
82
|
+
stack.push({
|
|
83
|
+
kind: 'comment',
|
|
84
|
+
value: String(value[j]),
|
|
85
|
+
depth,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
stack.push({ kind: 'comment', value: String(value), depth });
|
|
91
|
+
}
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (Array.isArray(value)) {
|
|
95
|
+
for (let j = value.length - 1; j >= 0; j--) {
|
|
96
|
+
stack.push(frameForChild(key, value[j], depth));
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
stack.push(frameForChild(key, value, depth));
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const frameForChild = (key, value, depth) => {
|
|
104
|
+
if (isPrimitive(value))
|
|
105
|
+
return toFrameForPrimitiveChild(key, value, depth);
|
|
106
|
+
return toFrameForObjectChild(key, value, depth);
|
|
107
|
+
};
|
|
108
|
+
// Buffered emitter: pushes frame fragments into a string until the
|
|
109
|
+
// FLUSH_THRESHOLD is crossed, then writes a single chunk to the
|
|
110
|
+
// underlying stream. Replaces the prior per-frame `out.write` which
|
|
111
|
+
// fired ~3 stream writes per element on large outputs (~thousands of
|
|
112
|
+
// writes per Profile prune). Backpressure is honoured at flush time:
|
|
113
|
+
// if `out.write` returns false we await the next `drain` before
|
|
114
|
+
// continuing — same semantics as before, just at coarser granularity.
|
|
115
|
+
class ChunkBuffer {
|
|
116
|
+
out;
|
|
117
|
+
buffer = '';
|
|
118
|
+
constructor(out) {
|
|
119
|
+
this.out = out;
|
|
120
|
+
}
|
|
121
|
+
push(chunk) {
|
|
122
|
+
this.buffer += chunk;
|
|
123
|
+
if (this.buffer.length >= FLUSH_THRESHOLD) {
|
|
124
|
+
return this.flush();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
flush() {
|
|
128
|
+
if (this.buffer.length === 0)
|
|
129
|
+
return;
|
|
130
|
+
const payload = this.buffer;
|
|
131
|
+
this.buffer = '';
|
|
132
|
+
if (this.out.write(payload))
|
|
133
|
+
return;
|
|
134
|
+
return once(this.out, 'drain').then(() => undefined);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const writeXmlDeclaration = async (buf, xmlHeader) => {
|
|
138
|
+
if (!xmlHeader)
|
|
139
|
+
return;
|
|
140
|
+
const decl = xmlHeader['?xml'];
|
|
141
|
+
if (!decl)
|
|
142
|
+
return;
|
|
143
|
+
const { attributes } = splitAttributesAndChildren(decl);
|
|
144
|
+
await buf.push(`<?xml${renderAttrs(attributes)}?>${NEWLINE}`);
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Streams a generic XML document to `out`. Iterative depth-first traversal
|
|
148
|
+
* with an explicit LIFO frame stack — safe under unexpectedly-deep input,
|
|
149
|
+
* cancellation-friendly, back-pressure aware via drain-await per chunk.
|
|
150
|
+
*
|
|
151
|
+
* Output is byte-identical to `fast-xml-builder` when given the same
|
|
152
|
+
* attribute prefix, comment key, and entity-passthrough (processEntities:
|
|
153
|
+
* false) conventions as the rest of the project. See DESIGN.md \xc2\xa75.5.1.
|
|
154
|
+
*/
|
|
155
|
+
export const writeXmlDocument = async (out, rootCapture, rootChildren, options = {}) => {
|
|
156
|
+
const buf = new ChunkBuffer(out);
|
|
157
|
+
await writeXmlDeclaration(buf, rootCapture.xmlHeader);
|
|
158
|
+
const trailingNewline = options.trailingNewline !== false;
|
|
159
|
+
const rootFrame = rootChildren.length === 0
|
|
160
|
+
? {
|
|
161
|
+
kind: 'empty',
|
|
162
|
+
name: rootCapture.rootKey,
|
|
163
|
+
attributes: rootCapture.rootAttributes,
|
|
164
|
+
depth: 0,
|
|
165
|
+
trailingNewline,
|
|
166
|
+
}
|
|
167
|
+
: {
|
|
168
|
+
kind: 'open',
|
|
169
|
+
name: rootCapture.rootKey,
|
|
170
|
+
attributes: rootCapture.rootAttributes,
|
|
171
|
+
children: rootChildren,
|
|
172
|
+
depth: 0,
|
|
173
|
+
closeTrailingNewline: trailingNewline,
|
|
174
|
+
};
|
|
175
|
+
const stack = [rootFrame];
|
|
176
|
+
while (stack.length > 0) {
|
|
177
|
+
const frame = stack.pop();
|
|
178
|
+
await emitFrame(buf, frame, stack);
|
|
179
|
+
}
|
|
180
|
+
// Final flush — anything still buffered at end-of-document goes out
|
|
181
|
+
// before the caller resolves.
|
|
182
|
+
await buf.flush();
|
|
183
|
+
};
|
|
184
|
+
const emitFrame = async (buf, frame, stack) => {
|
|
185
|
+
switch (frame.kind) {
|
|
186
|
+
case 'open':
|
|
187
|
+
await emitOpenFrame(buf, frame, stack);
|
|
188
|
+
break;
|
|
189
|
+
case 'close':
|
|
190
|
+
await buf.push(`${indent(frame.depth)}</${frame.name}>${frame.trailingNewline ? NEWLINE : ''}`);
|
|
191
|
+
break;
|
|
192
|
+
case 'comment':
|
|
193
|
+
await buf.push(`${indent(frame.depth)}<!--${frame.value}-->${NEWLINE}`);
|
|
194
|
+
break;
|
|
195
|
+
case 'leaf':
|
|
196
|
+
await buf.push(`${indent(frame.depth)}<${frame.name}${renderAttrs(frame.attributes)}>${frame.value}</${frame.name}>${NEWLINE}`);
|
|
197
|
+
break;
|
|
198
|
+
case 'empty':
|
|
199
|
+
await buf.push(`${indent(frame.depth)}<${frame.name}${renderAttrs(frame.attributes)}></${frame.name}>${frame.trailingNewline ? NEWLINE : ''}`);
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
const emitOpenFrame = async (buf, frame, stack) => {
|
|
204
|
+
await buf.push(`${indent(frame.depth)}<${frame.name}${renderAttrs(frame.attributes)}>${NEWLINE}`);
|
|
205
|
+
stack.push({
|
|
206
|
+
kind: 'close',
|
|
207
|
+
name: frame.name,
|
|
208
|
+
depth: frame.depth,
|
|
209
|
+
trailingNewline: frame.closeTrailingNewline,
|
|
210
|
+
});
|
|
211
|
+
pushChildren(stack, frame.children, frame.depth + 1);
|
|
212
|
+
};
|
|
213
|
+
//# sourceMappingURL=xmlWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlWriter.js","sourceRoot":"","sources":["../../../src/utils/metadataDiff/xmlWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import type { Writable } from 'node:stream';
|
|
1
2
|
import type { Config } from '../types/config.js';
|
|
2
3
|
import type { Manifest } from '../types/work.js';
|
|
4
|
+
type TypeBlock = {
|
|
5
|
+
members: string[];
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
3
8
|
export default class PackageBuilder {
|
|
4
9
|
protected readonly config: Config;
|
|
5
10
|
constructor(config: Config);
|
|
6
|
-
|
|
11
|
+
buildPackageStream(strucDiffPerType: Manifest, out: Writable): Promise<void>;
|
|
12
|
+
protected _buildTypesBlocks(strucDiffPerType: Manifest): TypeBlock[];
|
|
7
13
|
_sortTypesWithMetadata: (x: string, y: string) => number;
|
|
8
14
|
}
|
|
15
|
+
export {};
|
|
@@ -1,46 +1,43 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import { __decorate } from "tslib";
|
|
3
|
-
import XMLBuilder from 'fast-xml-builder';
|
|
4
3
|
import { OBJECT_TYPE } from '../constant/metadataConstants.js';
|
|
5
4
|
import { log } from './LoggingDecorator.js';
|
|
6
|
-
import {
|
|
5
|
+
import { writeXmlDocument } from './metadataDiff/xmlWriter.js';
|
|
7
6
|
const frLocale = 'fr';
|
|
8
7
|
const collator = new Intl.Collator(frLocale);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
indentBy: ' ',
|
|
16
|
-
suppressEmptyNode: false,
|
|
17
|
-
suppressBooleanAttributes: false,
|
|
18
|
-
processEntities: false,
|
|
19
|
-
});
|
|
8
|
+
const ROOT_ATTRIBUTES = {
|
|
9
|
+
'@_xmlns': 'http://soap.sforce.com/2006/04/metadata',
|
|
10
|
+
};
|
|
11
|
+
const XML_HEADER = {
|
|
12
|
+
'?xml': { '@_version': '1.0', '@_encoding': 'UTF-8' },
|
|
13
|
+
};
|
|
20
14
|
export default class PackageBuilder {
|
|
21
15
|
config;
|
|
22
16
|
constructor(config) {
|
|
23
17
|
this.config = config;
|
|
24
18
|
}
|
|
25
|
-
|
|
26
|
-
const
|
|
19
|
+
async buildPackageStream(strucDiffPerType, out) {
|
|
20
|
+
const typesBlocks = this._buildTypesBlocks(strucDiffPerType);
|
|
21
|
+
const rootChildren = [
|
|
22
|
+
...typesBlocks.map(block => ['types', block]),
|
|
23
|
+
['version', `${this.config.apiVersion}.0`],
|
|
24
|
+
];
|
|
25
|
+
const capture = {
|
|
26
|
+
xmlHeader: XML_HEADER,
|
|
27
|
+
rootKey: 'Package',
|
|
28
|
+
rootAttributes: ROOT_ATTRIBUTES,
|
|
29
|
+
};
|
|
30
|
+
await writeXmlDocument(out, capture, rootChildren, {
|
|
31
|
+
trailingNewline: false,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
_buildTypesBlocks(strucDiffPerType) {
|
|
35
|
+
return Array.from(strucDiffPerType.keys())
|
|
27
36
|
.sort(this._sortTypesWithMetadata)
|
|
28
37
|
.map(metadataType => ({
|
|
29
38
|
members: [...strucDiffPerType.get(metadataType)].sort(collator.compare),
|
|
30
39
|
name: metadataType,
|
|
31
40
|
}));
|
|
32
|
-
const jsonObj = {
|
|
33
|
-
[XML_HEADER_ATTRIBUTE_KEY]: {
|
|
34
|
-
[`${ATTRIBUTE_PREFIX}version`]: '1.0',
|
|
35
|
-
[`${ATTRIBUTE_PREFIX}encoding`]: 'UTF-8',
|
|
36
|
-
},
|
|
37
|
-
Package: {
|
|
38
|
-
[`${ATTRIBUTE_PREFIX}xmlns`]: 'http://soap.sforce.com/2006/04/metadata',
|
|
39
|
-
types,
|
|
40
|
-
version: `${this.config.apiVersion}.0`,
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
return xmlBuilder.build(jsonObj).trimEnd();
|
|
44
41
|
}
|
|
45
42
|
_sortTypesWithMetadata = (x, y) => {
|
|
46
43
|
// RATIONALE: Why must CustomObject be ordered first in package.xml?
|
|
@@ -53,5 +50,5 @@ export default class PackageBuilder {
|
|
|
53
50
|
}
|
|
54
51
|
__decorate([
|
|
55
52
|
log
|
|
56
|
-
], PackageBuilder.prototype, "
|
|
53
|
+
], PackageBuilder.prototype, "buildPackageStream", null);
|
|
57
54
|
//# sourceMappingURL=packageHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageHelper.js","sourceRoot":"","sources":["../../src/utils/packageHelper.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;
|
|
1
|
+
{"version":3,"file":"packageHelper.js","sourceRoot":"","sources":["../../src/utils/packageHelper.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAG9D,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,MAAM,QAAQ,GAAG,IAAI,CAAA;AACrB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5C,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE,yCAAyC;CACrD,CAAA;AACD,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE;CACtD,CAAA;AAID,MAAM,CAAC,OAAO,OAAO,cAAc;IACF;IAA/B,YAA+B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAGpC,AAAN,KAAK,CAAC,kBAAkB,CAC7B,gBAA0B,EAC1B,GAAa;QAEb,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;QAC5D,MAAM,YAAY,GAAwB;YACxC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,CAAsB,CAAC;YAClE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAsB;SAChE,CAAA;QACD,MAAM,OAAO,GAAgB;YAC3B,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,SAAS;YAClB,cAAc,EAAE,eAAe;SAChC,CAAA;QACD,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE;YACjD,eAAe,EAAE,KAAK;SACvB,CAAC,CAAA;IACJ,CAAC;IAES,iBAAiB,CAAC,gBAA0B;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;aACvC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;aACjC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,CAAC,IAAI,CACpD,QAAQ,CAAC,OAAO,CACjB;YACD,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC,CAAA;IACP,CAAC;IAED,sBAAsB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QAChD,oEAAoE;QACpE,+EAA+E;QAC/E,qGAAqG;QACrG,IAAI,CAAC,KAAK,WAAW;YAAE,OAAO,CAAC,CAAC,CAAA,CAAC,oFAAoF;QACrH,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC,CAAA;CACF;AArCc;IADZ,GAAG;wDAkBH"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MetadataRepository } from '../metadata/MetadataRepository.js';
|
|
2
|
+
import type { Work } from '../types/work.js';
|
|
3
|
+
import type ChangeSet from './changeSet.js';
|
|
4
|
+
import type { RenamePathPair } from './repoGitDiff.js';
|
|
5
|
+
/**
|
|
6
|
+
* Turns the `{ fromPath, toPath }` pairs git emitted for `-M` renames into
|
|
7
|
+
* `ChangeSet.recordRename(type, from, to)` calls by re-using the handler
|
|
8
|
+
* machinery to resolve each side to its Salesforce (type, member).
|
|
9
|
+
*
|
|
10
|
+
* Pairs where metadata resolution fails (ignored path, unknown type) or where
|
|
11
|
+
* the from/to side land on the same component are skipped — those reduce to
|
|
12
|
+
* normal add/delete or no-ops already covered by the handler pipeline.
|
|
13
|
+
*/
|
|
14
|
+
export default class RenameResolver {
|
|
15
|
+
private readonly factory;
|
|
16
|
+
constructor(work: Work, metadata: MetadataRepository);
|
|
17
|
+
apply(changes: ChangeSet, pairs: readonly RenamePathPair[]): Promise<void>;
|
|
18
|
+
private _resolve;
|
|
19
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { TAB } from '../constant/cliConstants.js';
|
|
4
|
+
import { ADDITION, DELETION } from '../constant/gitConstants.js';
|
|
5
|
+
import TypeHandlerFactory from '../service/typeHandlerFactory.js';
|
|
6
|
+
import { getErrorMessage } from './errorUtils.js';
|
|
7
|
+
import { log } from './LoggingDecorator.js';
|
|
8
|
+
import { Logger, lazy } from './LoggingService.js';
|
|
9
|
+
/**
|
|
10
|
+
* Turns the `{ fromPath, toPath }` pairs git emitted for `-M` renames into
|
|
11
|
+
* `ChangeSet.recordRename(type, from, to)` calls by re-using the handler
|
|
12
|
+
* machinery to resolve each side to its Salesforce (type, member).
|
|
13
|
+
*
|
|
14
|
+
* Pairs where metadata resolution fails (ignored path, unknown type) or where
|
|
15
|
+
* the from/to side land on the same component are skipped — those reduce to
|
|
16
|
+
* normal add/delete or no-ops already covered by the handler pipeline.
|
|
17
|
+
*/
|
|
18
|
+
export default class RenameResolver {
|
|
19
|
+
factory;
|
|
20
|
+
constructor(work, metadata) {
|
|
21
|
+
this.factory = new TypeHandlerFactory(work, metadata);
|
|
22
|
+
}
|
|
23
|
+
async apply(changes, pairs) {
|
|
24
|
+
for (const pair of pairs) {
|
|
25
|
+
const resolved = await this._resolve(pair);
|
|
26
|
+
if (resolved) {
|
|
27
|
+
changes.recordRename(resolved.type, resolved.from, resolved.to);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async _resolve(pair) {
|
|
32
|
+
try {
|
|
33
|
+
const fromHandler = await this.factory.getTypeHandler(`${DELETION}${TAB}${pair.fromPath}`);
|
|
34
|
+
const toHandler = await this.factory.getTypeHandler(`${ADDITION}${TAB}${pair.toPath}`);
|
|
35
|
+
const from = fromHandler.getElementDescriptor();
|
|
36
|
+
const to = toHandler.getElementDescriptor();
|
|
37
|
+
if (from.type !== to.type)
|
|
38
|
+
return null;
|
|
39
|
+
if (from.member === to.member)
|
|
40
|
+
return null;
|
|
41
|
+
return { type: from.type, from: from.member, to: to.member };
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
Logger.warn(lazy `RenameResolver._resolve: skipping ${pair.fromPath} -> ${pair.toPath}: ${() => getErrorMessage(error)}`);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
__decorate([
|
|
50
|
+
log
|
|
51
|
+
], RenameResolver.prototype, "apply", null);
|
|
52
|
+
//# sourceMappingURL=renameResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renameResolver.js","sourceRoot":"","sources":["../../src/utils/renameResolver.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,kBAAkB,MAAM,kCAAkC,CAAA;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAGlD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IAChB,OAAO,CAAoB;IAE5C,YAAY,IAAU,EAAE,QAA4B;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACvD,CAAC;IAGY,AAAN,KAAK,CAAC,KAAK,CAChB,OAAkB,EAClB,KAAgC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,IAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CACnD,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CACpC,CAAA;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CACjD,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAClC,CAAA;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAA;YAC/C,MAAM,EAAE,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAA;YAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YACtC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAA;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CACT,IAAI,CAAA,qCAAqC,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAC5G,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF;AAlCc;IADZ,GAAG;2CAWH"}
|
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import GitAdapter from '../adapter/GitAdapter.js';
|
|
2
2
|
import { MetadataRepository } from '../metadata/MetadataRepository.js';
|
|
3
3
|
import type { Config } from '../types/config.js';
|
|
4
|
+
export type RenamePathPair = Readonly<{
|
|
5
|
+
fromPath: string;
|
|
6
|
+
toPath: string;
|
|
7
|
+
}>;
|
|
4
8
|
export default class RepoGitDiff {
|
|
5
9
|
protected readonly config: Config;
|
|
6
10
|
protected readonly metadata: MetadataRepository;
|
|
7
11
|
protected readonly gitAdapter: GitAdapter;
|
|
12
|
+
private renamePairs;
|
|
8
13
|
constructor(config: Config, metadata: MetadataRepository);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Streams the filtered, rename-expanded diff lines. Yields A/M lines as
|
|
16
|
+
* they arrive from git so handlers can start working immediately; D
|
|
17
|
+
* lines are buffered until upstream EOF because the deleted-renamed
|
|
18
|
+
* cancellation rule needs the full A-name set before any D line can
|
|
19
|
+
* be classified.
|
|
20
|
+
*
|
|
21
|
+
* Rename pairs are captured along the way and exposed via
|
|
22
|
+
* getRenamePairs() once iteration completes.
|
|
23
|
+
*/
|
|
24
|
+
getLines(): AsyncGenerator<string>;
|
|
25
|
+
getRenamePairs(): readonly RenamePathPair[];
|
|
26
|
+
protected _expandRename(line: string): Iterable<string>;
|
|
14
27
|
protected _extractComparisonName(line: string): string;
|
|
15
28
|
}
|
package/lib/utils/repoGitDiff.js
CHANGED
|
@@ -1,51 +1,84 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import GitAdapter from '../adapter/GitAdapter.js';
|
|
3
|
-
import {
|
|
3
|
+
import { TAB } from '../constant/cliConstants.js';
|
|
4
|
+
import { ADDITION, DELETION, RENAMED } from '../constant/gitConstants.js';
|
|
4
5
|
import { buildIgnoreHelper } from './ignoreHelper.js';
|
|
5
6
|
export default class RepoGitDiff {
|
|
6
7
|
config;
|
|
7
8
|
metadata;
|
|
8
9
|
gitAdapter;
|
|
10
|
+
renamePairs = [];
|
|
9
11
|
constructor(config, metadata) {
|
|
10
12
|
this.config = config;
|
|
11
13
|
this.metadata = metadata;
|
|
12
14
|
this.gitAdapter = GitAdapter.getInstance(this.config);
|
|
13
15
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Streams the filtered, rename-expanded diff lines. Yields A/M lines as
|
|
18
|
+
* they arrive from git so handlers can start working immediately; D
|
|
19
|
+
* lines are buffered until upstream EOF because the deleted-renamed
|
|
20
|
+
* cancellation rule needs the full A-name set before any D line can
|
|
21
|
+
* be classified.
|
|
22
|
+
*
|
|
23
|
+
* Rename pairs are captured along the way and exposed via
|
|
24
|
+
* getRenamePairs() once iteration completes.
|
|
25
|
+
*/
|
|
26
|
+
async *getLines() {
|
|
27
|
+
this.renamePairs = [];
|
|
21
28
|
const ignoreHelper = await buildIgnoreHelper(this.config);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
const additionNames = new Set();
|
|
30
|
+
const deferredDeletions = [];
|
|
31
|
+
for await (const rawLine of this.gitAdapter.streamDiffLines()) {
|
|
32
|
+
for (const expanded of this._expandRename(rawLine)) {
|
|
33
|
+
if (!expanded)
|
|
34
|
+
continue;
|
|
35
|
+
/* v8 ignore next -- defensive: upstream RepoGitDiff already filters non-metadata paths via _expandRename, but kept as safety net */
|
|
36
|
+
if (!this.metadata.has(expanded))
|
|
37
|
+
continue;
|
|
38
|
+
if (!ignoreHelper.keep(expanded))
|
|
39
|
+
continue;
|
|
40
|
+
if (expanded.startsWith(ADDITION)) {
|
|
41
|
+
additionNames.add(this._extractComparisonName(expanded));
|
|
42
|
+
yield expanded;
|
|
43
|
+
}
|
|
44
|
+
else if (expanded.startsWith(DELETION)) {
|
|
45
|
+
// Defer: the D line might cancel against an A line we haven't
|
|
46
|
+
// seen yet (rename-collapse case).
|
|
47
|
+
deferredDeletions.push(expanded);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
yield expanded;
|
|
51
|
+
}
|
|
42
52
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
}
|
|
54
|
+
for (const dLine of deferredDeletions) {
|
|
55
|
+
if (!additionNames.has(this._extractComparisonName(dLine))) {
|
|
56
|
+
yield dLine;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
getRenamePairs() {
|
|
61
|
+
return this.renamePairs;
|
|
46
62
|
}
|
|
47
|
-
|
|
48
|
-
|
|
63
|
+
// git emits `R<score>\tfrom\tto` when -M detects a rename. Each rename is
|
|
64
|
+
// expanded into the equivalent D/A pair so every downstream handler keeps
|
|
65
|
+
// operating on a (status, path) tuple; the rename pair is captured for
|
|
66
|
+
// ChangeSet to re-group into its Rename bucket.
|
|
67
|
+
*_expandRename(line) {
|
|
68
|
+
if (!line.startsWith(RENAMED)) {
|
|
69
|
+
yield line;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const parts = line.split(TAB);
|
|
73
|
+
if (parts.length < 3) {
|
|
74
|
+
yield line;
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const fromPath = parts[1];
|
|
78
|
+
const toPath = parts[2];
|
|
79
|
+
this.renamePairs.push({ fromPath, toPath });
|
|
80
|
+
yield `${DELETION}${TAB}${fromPath}`;
|
|
81
|
+
yield `${ADDITION}${TAB}${toPath}`;
|
|
49
82
|
}
|
|
50
83
|
_extractComparisonName(line) {
|
|
51
84
|
return this.metadata.getFullyQualifiedName(line).toLocaleLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repoGitDiff.js","sourceRoot":"","sources":["../../src/utils/repoGitDiff.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"repoGitDiff.js","sourceRoot":"","sources":["../../src/utils/repoGitDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { MetadataRepository } from '../metadata/MetadataRepository.js';
|
|
2
|
-
export declare const computeTreeIndexScope: (lines: string
|
|
2
|
+
export declare const computeTreeIndexScope: (lines: Iterable<string>, metadata: MetadataRepository) => Set<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeIndexScope.js","sourceRoot":"","sources":["../../src/utils/treeIndexScope.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAIjE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAA;AAEhE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,cAAc;IACd,WAAW;IACX,QAAQ;IACR,sBAAsB;IACtB,0BAA0B;IAC1B,eAAe;IACf,eAAe;IACf,iBAAiB;CAClB,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,IAAc,EAAW,EAAE;IACjD,IAAI,IAAI,CAAC,OAAO,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IACvE,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC9B,IACE,IAAI,CAAC,OAAO;QACZ,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC;QAEtE,OAAO,IAAI,CAAA;IACb,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CACvB,QAA4B,EACL,EAAE;IACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAe,EAAE,IAAc,EAAiB,EAAE;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClD,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAE7B,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpD,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,
|
|
1
|
+
{"version":3,"file":"treeIndexScope.js","sourceRoot":"","sources":["../../src/utils/treeIndexScope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type XmlContent } from './xmlHelper.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter from txml's flat AST (`(tNode | string)[]`) to our compact
|
|
4
|
+
* `XmlContent` shape:
|
|
5
|
+
* { '@_attr': value, child: <content>, '#comment': string|string[] }
|
|
6
|
+
*
|
|
7
|
+
* Conventions matched against the previous FlexXMLParser configuration
|
|
8
|
+
* so existing handlers and `xmlWriter.ts` keep round-tripping unchanged:
|
|
9
|
+
* - attributes are prefixed `@_` (ATTRIBUTE_PREFIX)
|
|
10
|
+
* - boolean attributes (no value) are emitted as `true`
|
|
11
|
+
* - element text is trimmed; whitespace-only text between elements is
|
|
12
|
+
* dropped (txml default)
|
|
13
|
+
* - comments are collapsed under the `#comment` key (string or string[]
|
|
14
|
+
* when more than one comment lives at the same depth)
|
|
15
|
+
* - the XML declaration `<?xml ...?>` is collapsed to a `?xml` key
|
|
16
|
+
* - elements with the same tagName at the same depth collapse to an array
|
|
17
|
+
*/
|
|
18
|
+
export type TxmlNode = {
|
|
19
|
+
tagName: string;
|
|
20
|
+
attributes: Record<string, string | null>;
|
|
21
|
+
children: TxmlChild[];
|
|
22
|
+
};
|
|
23
|
+
export type TxmlChild = TxmlNode | string;
|
|
24
|
+
export declare const tNodeToXmlContent: (node: TxmlNode) => unknown;
|
|
25
|
+
/**
|
|
26
|
+
* Parses XML text into our compact JSON shape. Empty input short-circuits
|
|
27
|
+
* to `{}`; malformed input (parse throws) is swallowed and also yields
|
|
28
|
+
* `{}` — preserving the existing `xml2Json` contract.
|
|
29
|
+
*/
|
|
30
|
+
export declare const parseXml: (xmlContent: string) => XmlContent;
|