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.
Files changed (140) hide show
  1. package/README.md +35 -2
  2. package/lib/adapter/GitAdapter.d.ts +51 -2
  3. package/lib/adapter/GitAdapter.js +367 -41
  4. package/lib/adapter/GitAdapter.js.map +1 -1
  5. package/lib/adapter/gitBatchCatFile.d.ts +26 -4
  6. package/lib/adapter/gitBatchCatFile.js +128 -44
  7. package/lib/adapter/gitBatchCatFile.js.map +1 -1
  8. package/lib/adapter/gitBlobReader.d.ts +58 -0
  9. package/lib/adapter/gitBlobReader.js +27 -0
  10. package/lib/adapter/gitBlobReader.js.map +1 -0
  11. package/lib/adapter/ioExecutor.d.ts +18 -6
  12. package/lib/adapter/ioExecutor.js +97 -12
  13. package/lib/adapter/ioExecutor.js.map +1 -1
  14. package/lib/commands/sgd/source/delta.d.ts +2 -0
  15. package/lib/commands/sgd/source/delta.js +31 -1
  16. package/lib/commands/sgd/source/delta.js.map +1 -1
  17. package/lib/constant/cliConstants.d.ts +2 -0
  18. package/lib/constant/cliConstants.js +4 -0
  19. package/lib/constant/cliConstants.js.map +1 -1
  20. package/lib/constant/gitConstants.d.ts +1 -0
  21. package/lib/constant/gitConstants.js +4 -0
  22. package/lib/constant/gitConstants.js.map +1 -1
  23. package/lib/main.js +35 -7
  24. package/lib/main.js.map +1 -1
  25. package/lib/metadata/MetadataRepositoryImpl.d.ts +1 -0
  26. package/lib/metadata/MetadataRepositoryImpl.js +14 -2
  27. package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
  28. package/lib/post-processor/changesManifestProcessor.d.ts +15 -0
  29. package/lib/post-processor/changesManifestProcessor.js +50 -0
  30. package/lib/post-processor/changesManifestProcessor.js.map +1 -0
  31. package/lib/post-processor/flowTranslationProcessor.d.ts +31 -14
  32. package/lib/post-processor/flowTranslationProcessor.js +146 -51
  33. package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
  34. package/lib/post-processor/packageGenerator.d.ts +1 -2
  35. package/lib/post-processor/packageGenerator.js +23 -34
  36. package/lib/post-processor/packageGenerator.js.map +1 -1
  37. package/lib/post-processor/postProcessorManager.js +9 -6
  38. package/lib/post-processor/postProcessorManager.js.map +1 -1
  39. package/lib/service/botHandler.d.ts +2 -1
  40. package/lib/service/botHandler.js +4 -3
  41. package/lib/service/botHandler.js.map +1 -1
  42. package/lib/service/containedDecomposedHandler.d.ts +3 -2
  43. package/lib/service/containedDecomposedHandler.js +6 -6
  44. package/lib/service/containedDecomposedHandler.js.map +1 -1
  45. package/lib/service/customFieldHandler.d.ts +2 -1
  46. package/lib/service/customFieldHandler.js +2 -2
  47. package/lib/service/customFieldHandler.js.map +1 -1
  48. package/lib/service/customLabelHandler.d.ts +2 -1
  49. package/lib/service/customLabelHandler.js +3 -3
  50. package/lib/service/customLabelHandler.js.map +1 -1
  51. package/lib/service/customObjectHandler.d.ts +2 -1
  52. package/lib/service/customObjectHandler.js +2 -2
  53. package/lib/service/customObjectHandler.js.map +1 -1
  54. package/lib/service/decomposedHandler.d.ts +2 -1
  55. package/lib/service/decomposedHandler.js +2 -2
  56. package/lib/service/decomposedHandler.js.map +1 -1
  57. package/lib/service/diffLineInterpreter.d.ts +1 -1
  58. package/lib/service/diffLineInterpreter.js +16 -6
  59. package/lib/service/diffLineInterpreter.js.map +1 -1
  60. package/lib/service/flowHandler.d.ts +2 -1
  61. package/lib/service/flowHandler.js +2 -2
  62. package/lib/service/flowHandler.js.map +1 -1
  63. package/lib/service/inFileHandler.d.ts +8 -7
  64. package/lib/service/inFileHandler.js +37 -30
  65. package/lib/service/inFileHandler.js.map +1 -1
  66. package/lib/service/inFolderHandler.d.ts +2 -1
  67. package/lib/service/inFolderHandler.js +2 -2
  68. package/lib/service/inFolderHandler.js.map +1 -1
  69. package/lib/service/inResourceHandler.d.ts +3 -2
  70. package/lib/service/inResourceHandler.js +5 -5
  71. package/lib/service/inResourceHandler.js.map +1 -1
  72. package/lib/service/objectTranslationHandler.d.ts +3 -3
  73. package/lib/service/objectTranslationHandler.js +15 -8
  74. package/lib/service/objectTranslationHandler.js.map +1 -1
  75. package/lib/service/reportingFolderHandler.d.ts +8 -4
  76. package/lib/service/reportingFolderHandler.js +5 -6
  77. package/lib/service/reportingFolderHandler.js.map +1 -1
  78. package/lib/service/sharedFolderHandler.d.ts +8 -4
  79. package/lib/service/sharedFolderHandler.js +5 -6
  80. package/lib/service/sharedFolderHandler.js.map +1 -1
  81. package/lib/service/standardHandler.d.ts +14 -7
  82. package/lib/service/standardHandler.js +47 -27
  83. package/lib/service/standardHandler.js.map +1 -1
  84. package/lib/service/typeHandlerFactory.d.ts +2 -0
  85. package/lib/service/typeHandlerFactory.js +15 -0
  86. package/lib/service/typeHandlerFactory.js.map +1 -1
  87. package/lib/types/config.d.ts +1 -0
  88. package/lib/types/handlerResult.d.ts +17 -8
  89. package/lib/types/handlerResult.js +9 -11
  90. package/lib/types/handlerResult.js.map +1 -1
  91. package/lib/types/work.d.ts +2 -5
  92. package/lib/utils/LoggingDecorator.js +22 -11
  93. package/lib/utils/LoggingDecorator.js.map +1 -1
  94. package/lib/utils/changeSet.d.ts +53 -0
  95. package/lib/utils/changeSet.js +257 -0
  96. package/lib/utils/changeSet.js.map +1 -0
  97. package/lib/utils/configValidator.d.ts +1 -0
  98. package/lib/utils/configValidator.js +39 -1
  99. package/lib/utils/configValidator.js.map +1 -1
  100. package/lib/utils/gitLfsHelper.js +9 -1
  101. package/lib/utils/gitLfsHelper.js.map +1 -1
  102. package/lib/utils/metadataDiff/index.d.ts +28 -0
  103. package/lib/utils/metadataDiff/index.js +57 -0
  104. package/lib/utils/metadataDiff/index.js.map +1 -0
  105. package/lib/utils/metadataDiff/streamingDiff.d.ts +68 -0
  106. package/lib/utils/metadataDiff/streamingDiff.js +300 -0
  107. package/lib/utils/metadataDiff/streamingDiff.js.map +1 -0
  108. package/lib/utils/metadataDiff/xmlEventReader.d.ts +28 -0
  109. package/lib/utils/metadataDiff/xmlEventReader.js +221 -0
  110. package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -0
  111. package/lib/utils/metadataDiff/xmlWriter.d.ts +17 -0
  112. package/lib/utils/metadataDiff/xmlWriter.js +213 -0
  113. package/lib/utils/metadataDiff/xmlWriter.js.map +1 -0
  114. package/lib/utils/packageHelper.d.ts +8 -1
  115. package/lib/utils/packageHelper.js +25 -28
  116. package/lib/utils/packageHelper.js.map +1 -1
  117. package/lib/utils/renameResolver.d.ts +19 -0
  118. package/lib/utils/renameResolver.js +52 -0
  119. package/lib/utils/renameResolver.js.map +1 -0
  120. package/lib/utils/repoGitDiff.d.ts +18 -5
  121. package/lib/utils/repoGitDiff.js +66 -33
  122. package/lib/utils/repoGitDiff.js.map +1 -1
  123. package/lib/utils/treeIndexScope.d.ts +1 -1
  124. package/lib/utils/treeIndexScope.js.map +1 -1
  125. package/lib/utils/txmlAdapter.d.ts +30 -0
  126. package/lib/utils/txmlAdapter.js +121 -0
  127. package/lib/utils/txmlAdapter.js.map +1 -0
  128. package/lib/utils/xmlHelper.d.ts +0 -5
  129. package/lib/utils/xmlHelper.js +0 -57
  130. package/lib/utils/xmlHelper.js.map +1 -1
  131. package/messages/delta.md +12 -0
  132. package/npm-shrinkwrap.json +628 -486
  133. package/oclif.manifest.json +9 -1
  134. package/package.json +53 -21
  135. package/lib/utils/manifestAggregator.d.ts +0 -3
  136. package/lib/utils/manifestAggregator.js +0 -22
  137. package/lib/utils/manifestAggregator.js.map +0 -1
  138. package/lib/utils/metadataDiff.d.ts +0 -23
  139. package/lib/utils/metadataDiff.js +0 -242
  140. 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
- buildPackage(strucDiffPerType: Manifest): string;
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 { ATTRIBUTE_PREFIX, XML_HEADER_ATTRIBUTE_KEY } from './xmlHelper.js';
5
+ import { writeXmlDocument } from './metadataDiff/xmlWriter.js';
7
6
  const frLocale = 'fr';
8
7
  const collator = new Intl.Collator(frLocale);
9
- // processEntities is false to mirror xmlHelper: values flowing through this
10
- // builder are metadata type/member strings that never contain XML entities,
11
- // so re-encoding is a no-op at best and a double-encode risk at worst.
12
- const xmlBuilder = new XMLBuilder({
13
- ignoreAttributes: false,
14
- format: true,
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
- buildPackage(strucDiffPerType) {
26
- const types = Array.from(strucDiffPerType.keys())
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, "buildPackage", null);
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;;AACZ,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAG9D,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAE3E,MAAM,QAAQ,GAAG,IAAI,CAAA;AACrB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5C,4EAA4E;AAC5E,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;IAChC,gBAAgB,EAAE,KAAK;IACvB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,MAAM;IAChB,iBAAiB,EAAE,KAAK;IACxB,yBAAyB,EAAE,KAAK;IAChC,eAAe,EAAE,KAAK;CACvB,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,OAAO,cAAc;IACF;IAA/B,YAA+B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAG1C,YAAY,CAAC,gBAA0B;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;aAC9C,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;QAEL,MAAM,OAAO,GAAG;YACd,CAAC,wBAAwB,CAAC,EAAE;gBAC1B,CAAC,GAAG,gBAAgB,SAAS,CAAC,EAAE,KAAK;gBACrC,CAAC,GAAG,gBAAgB,UAAU,CAAC,EAAE,OAAO;aACzC;YACD,OAAO,EAAE;gBACP,CAAC,GAAG,gBAAgB,OAAO,CAAC,EAAE,yCAAyC;gBACvE,KAAK;gBACL,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI;aACvC;SACF,CAAA;QAED,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IAC5C,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;AAhCQ;IADN,GAAG;kDAwBH"}
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
- getLines(): Promise<string[]>;
10
- protected _treatResult(lines: string[]): Promise<string[]>;
11
- protected _getRenamedElements(lines: string[]): Set<string>;
12
- protected _spreadLinePerDiffType(lines: string[]): Map<any, any>;
13
- protected _filterInternal(line: string, deletedRenamed: Set<string>): boolean;
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
  }
@@ -1,51 +1,84 @@
1
1
  'use strict';
2
2
  import GitAdapter from '../adapter/GitAdapter.js';
3
- import { ADDITION, DELETION } from '../constant/gitConstants.js';
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
- async getLines() {
15
- const lines = await this.gitAdapter.getDiffLines();
16
- const treatedLines = await this._treatResult(lines);
17
- return treatedLines;
18
- }
19
- async _treatResult(lines) {
20
- const renamedElements = this._getRenamedElements(lines);
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
- return lines.filter((line) => Boolean(line) &&
23
- this._filterInternal(line, renamedElements) &&
24
- ignoreHelper.keep(line));
25
- }
26
- _getRenamedElements(lines) {
27
- const linesPerDiffType = this._spreadLinePerDiffType(lines);
28
- const AfileNames = new Set(linesPerDiffType
29
- .get(ADDITION)
30
- ?.map(line => this._extractComparisonName(line)) ?? []);
31
- const deletedRenamed = (linesPerDiffType.get(DELETION) ?? []).filter((line) => {
32
- const dEl = this._extractComparisonName(line);
33
- return AfileNames.has(dEl);
34
- });
35
- return new Set(deletedRenamed);
36
- }
37
- _spreadLinePerDiffType(lines) {
38
- return lines.reduce((acc, line) => {
39
- const idx = line.charAt(0);
40
- if (!acc.has(idx)) {
41
- acc.set(idx, []);
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
- acc.get(idx).push(line);
44
- return acc;
45
- }, new Map());
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
- _filterInternal(line, deletedRenamed) {
48
- return !deletedRenamed.has(line) && this.metadata.has(line);
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":"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"}
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[], metadata: MetadataRepository) => Set<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":"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"}
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;