sfdx-git-delta 7.1.0 → 7.3.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 (134) hide show
  1. package/README.md +27 -5
  2. package/lib/adapter/GitAdapter.d.ts +26 -12
  3. package/lib/adapter/GitAdapter.js +162 -175
  4. package/lib/adapter/GitAdapter.js.map +1 -1
  5. package/lib/adapter/ioExecutor.d.ts +6 -7
  6. package/lib/adapter/ioExecutor.js +22 -22
  7. package/lib/adapter/ioExecutor.js.map +1 -1
  8. package/lib/adapter/pathMatching.d.ts +9 -0
  9. package/lib/adapter/pathMatching.js +83 -0
  10. package/lib/adapter/pathMatching.js.map +1 -0
  11. package/lib/adapter/treeIndex.d.ts +7 -4
  12. package/lib/adapter/treeIndex.js +34 -0
  13. package/lib/adapter/treeIndex.js.map +1 -1
  14. package/lib/adapter/treeReader.d.ts +8 -0
  15. package/lib/adapter/treeReader.js +22 -0
  16. package/lib/adapter/treeReader.js.map +1 -0
  17. package/lib/commands/sgd/source/delta.d.ts +1 -0
  18. package/lib/commands/sgd/source/delta.js +5 -0
  19. package/lib/commands/sgd/source/delta.js.map +1 -1
  20. package/lib/main.d.ts +2 -2
  21. package/lib/main.js +84 -37
  22. package/lib/main.js.map +1 -1
  23. package/lib/post-processor/baseProcessor.d.ts +11 -8
  24. package/lib/post-processor/baseProcessor.js +8 -8
  25. package/lib/post-processor/baseProcessor.js.map +1 -1
  26. package/lib/post-processor/changesManifestProcessor.d.ts +3 -2
  27. package/lib/post-processor/changesManifestProcessor.js +5 -4
  28. package/lib/post-processor/changesManifestProcessor.js.map +1 -1
  29. package/lib/post-processor/flowTranslationProcessor.d.ts +6 -8
  30. package/lib/post-processor/flowTranslationProcessor.js +18 -20
  31. package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
  32. package/lib/post-processor/includeProcessor.d.ts +6 -6
  33. package/lib/post-processor/includeProcessor.js +8 -7
  34. package/lib/post-processor/includeProcessor.js.map +1 -1
  35. package/lib/post-processor/packageGenerator.d.ts +3 -2
  36. package/lib/post-processor/packageGenerator.js +5 -4
  37. package/lib/post-processor/packageGenerator.js.map +1 -1
  38. package/lib/post-processor/postProcessorManager.d.ts +5 -8
  39. package/lib/post-processor/postProcessorManager.js +24 -32
  40. package/lib/post-processor/postProcessorManager.js.map +1 -1
  41. package/lib/service/botHandler.d.ts +1 -2
  42. package/lib/service/botHandler.js +17 -10
  43. package/lib/service/botHandler.js.map +1 -1
  44. package/lib/service/containedDecomposedHandler.d.ts +4 -5
  45. package/lib/service/containedDecomposedHandler.js +14 -13
  46. package/lib/service/containedDecomposedHandler.js.map +1 -1
  47. package/lib/service/customFieldHandler.d.ts +1 -2
  48. package/lib/service/customFieldHandler.js +7 -6
  49. package/lib/service/customFieldHandler.js.map +1 -1
  50. package/lib/service/customLabelHandler.d.ts +1 -2
  51. package/lib/service/customLabelHandler.js +3 -3
  52. package/lib/service/customLabelHandler.js.map +1 -1
  53. package/lib/service/customObjectHandler.d.ts +3 -4
  54. package/lib/service/customObjectHandler.js +11 -10
  55. package/lib/service/customObjectHandler.js.map +1 -1
  56. package/lib/service/decomposedHandler.d.ts +3 -4
  57. package/lib/service/decomposedHandler.js +5 -4
  58. package/lib/service/decomposedHandler.js.map +1 -1
  59. package/lib/service/diffLineInterpreter.d.ts +3 -5
  60. package/lib/service/diffLineInterpreter.js +17 -16
  61. package/lib/service/diffLineInterpreter.js.map +1 -1
  62. package/lib/service/flowHandler.d.ts +1 -2
  63. package/lib/service/flowHandler.js +9 -4
  64. package/lib/service/flowHandler.js.map +1 -1
  65. package/lib/service/inFileHandler.d.ts +8 -9
  66. package/lib/service/inFileHandler.js +25 -25
  67. package/lib/service/inFileHandler.js.map +1 -1
  68. package/lib/service/inFolderHandler.d.ts +4 -5
  69. package/lib/service/inFolderHandler.js +7 -6
  70. package/lib/service/inFolderHandler.js.map +1 -1
  71. package/lib/service/inResourceHandler.d.ts +4 -5
  72. package/lib/service/inResourceHandler.js +11 -9
  73. package/lib/service/inResourceHandler.js.map +1 -1
  74. package/lib/service/objectTranslationHandler.d.ts +1 -2
  75. package/lib/service/objectTranslationHandler.js +6 -5
  76. package/lib/service/objectTranslationHandler.js.map +1 -1
  77. package/lib/service/reportingFolderHandler.d.ts +6 -7
  78. package/lib/service/reportingFolderHandler.js +6 -6
  79. package/lib/service/reportingFolderHandler.js.map +1 -1
  80. package/lib/service/sharedFolderHandler.d.ts +4 -5
  81. package/lib/service/sharedFolderHandler.js +6 -6
  82. package/lib/service/sharedFolderHandler.js.map +1 -1
  83. package/lib/service/standardHandler.d.ts +8 -10
  84. package/lib/service/standardHandler.js +34 -36
  85. package/lib/service/standardHandler.js.map +1 -1
  86. package/lib/service/typeHandlerFactory.d.ts +7 -5
  87. package/lib/service/typeHandlerFactory.js +13 -12
  88. package/lib/service/typeHandlerFactory.js.map +1 -1
  89. package/lib/types/config.d.ts +6 -1
  90. package/lib/types/handlerResult.d.ts +7 -7
  91. package/lib/types/handlerResult.js +10 -1
  92. package/lib/types/handlerResult.js.map +1 -1
  93. package/lib/types/runContext.d.ts +21 -0
  94. package/lib/types/runContext.js +12 -0
  95. package/lib/types/runContext.js.map +1 -0
  96. package/lib/types/work.d.ts +1 -1
  97. package/lib/utils/arrayUtils.d.ts +1 -1
  98. package/lib/utils/arrayUtils.js.map +1 -1
  99. package/lib/utils/bundleRollup.d.ts +6 -0
  100. package/lib/utils/bundleRollup.js +62 -0
  101. package/lib/utils/bundleRollup.js.map +1 -0
  102. package/lib/utils/changeSet.d.ts +12 -15
  103. package/lib/utils/changeSet.js +23 -120
  104. package/lib/utils/changeSet.js.map +1 -1
  105. package/lib/utils/changesAssembly.d.ts +8 -0
  106. package/lib/utils/changesAssembly.js +21 -0
  107. package/lib/utils/changesAssembly.js.map +1 -0
  108. package/lib/utils/configValidator.d.ts +8 -6
  109. package/lib/utils/configValidator.js +56 -13
  110. package/lib/utils/configValidator.js.map +1 -1
  111. package/lib/utils/fsHelper.d.ts +5 -3
  112. package/lib/utils/fsHelper.js +12 -9
  113. package/lib/utils/fsHelper.js.map +1 -1
  114. package/lib/utils/messageSanitizer.d.ts +1 -0
  115. package/lib/utils/messageSanitizer.js +48 -0
  116. package/lib/utils/messageSanitizer.js.map +1 -0
  117. package/lib/utils/metadataBoundaryResolver.d.ts +7 -5
  118. package/lib/utils/metadataBoundaryResolver.js +18 -21
  119. package/lib/utils/metadataBoundaryResolver.js.map +1 -1
  120. package/lib/utils/pathspec.d.ts +15 -0
  121. package/lib/utils/pathspec.js +71 -0
  122. package/lib/utils/pathspec.js.map +1 -0
  123. package/lib/utils/renameResolver.d.ts +6 -7
  124. package/lib/utils/renameResolver.js +10 -9
  125. package/lib/utils/renameResolver.js.map +1 -1
  126. package/lib/utils/repoGitDiff.d.ts +3 -0
  127. package/lib/utils/repoGitDiff.js +30 -1
  128. package/lib/utils/repoGitDiff.js.map +1 -1
  129. package/messages/delta.md +38 -0
  130. package/oclif.manifest.json +10 -3
  131. package/package.json +23 -22
  132. package/lib/post-processor/bundleRollupProcessor.d.ts +0 -7
  133. package/lib/post-processor/bundleRollupProcessor.js +0 -81
  134. package/lib/post-processor/bundleRollupProcessor.js.map +0 -1
@@ -13,17 +13,16 @@ import GitAdapter from './GitAdapter.js';
13
13
  import { EscalateToStreamingSignal, GIT_ARCHIVE_DIR_THRESHOLD, } from './gitBlobReader.js';
14
14
  const TMP_SUFFIX = '.tmp';
15
15
  export default class IOExecutor {
16
- config;
17
- blobReaderForRevision;
16
+ ctx;
17
+ blobReader;
18
18
  processedPaths = new Set();
19
19
  ignoreHelper;
20
- constructor(config, blobReaderForRevision = revision => IOExecutor._defaultBlobReaderForRevision(config, revision)) {
21
- this.config = config;
22
- this.blobReaderForRevision = blobReaderForRevision;
20
+ constructor(ctx, blobReader = GitAdapter.getInstance(ctx.config)) {
21
+ this.ctx = ctx;
22
+ this.blobReader = blobReader;
23
23
  }
24
- static _defaultBlobReaderForRevision(config, revision) {
25
- const adapterConfig = revision !== config.to ? { ...config, to: revision } : config;
26
- return GitAdapter.getInstance(adapterConfig);
24
+ get config() {
25
+ return this.ctx.config;
27
26
  }
28
27
  async execute(copies) {
29
28
  this.ignoreHelper = await buildIgnoreHelper(this.config);
@@ -51,12 +50,6 @@ export default class IOExecutor {
51
50
  break;
52
51
  }
53
52
  }
54
- _getGitAdapter(revision) {
55
- const config = revision !== this.config.to
56
- ? { ...this.config, to: revision }
57
- : this.config;
58
- return GitAdapter.getInstance(config);
59
- }
60
53
  // Defense-in-depth shared by every copy path: reject any destination that
61
54
  // resolves outside `config.output` (zip-slip). Tree paths from the object
62
55
  // store should never contain '..', but a crafted store must not be able to
@@ -69,19 +62,20 @@ export default class IOExecutor {
69
62
  const ref = { path: op.path, oid: op.revision };
70
63
  const dst = join(this.config.output, op.path);
71
64
  if (!this._isWithinOutput(dst)) {
65
+ // Stryker disable next-line StringLiteral,CallExpression -- equivalent: the log content and the call itself are observability only; the guard's real effect (no getBufferContentOrEscalate, no outputFile) is asserted by the escape-path tests
72
66
  Logger.debug(lazy `IOExecutor gitFileCopy out-of-output dst ${dst}`);
73
67
  return;
74
68
  }
75
- const reader = this.blobReaderForRevision(op.revision);
76
69
  try {
77
- const content = await reader.getBufferContentOrEscalate(ref);
70
+ const content = await this.blobReader.getBufferContentOrEscalate(ref);
78
71
  await outputFile(dst, content);
79
72
  }
80
73
  catch (error) {
81
74
  if (error instanceof EscalateToStreamingSignal) {
82
- await this._streamCopyWithAtomicRename(reader, ref, dst);
75
+ await this._streamCopyWithAtomicRename(this.blobReader, ref, dst);
83
76
  return;
84
77
  }
78
+ // Stryker disable next-line CallExpression -- equivalent: removing the call entirely is observability only; the swallowed error's real effect (no outputFile) is already asserted
85
79
  Logger.debug(
86
80
  // Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: lazy log content is observability only; tests assert on the swallowed error producing no output side-effect
87
81
  lazy `IOExecutor gitFileCopy failed for ${op.path}: ${() => getErrorMessage(error)}`);
@@ -94,10 +88,9 @@ export default class IOExecutor {
94
88
  }
95
89
  async _executeGitDirCopy(op) {
96
90
  try {
97
- const gitAdapter = this._getGitAdapter(op.revision);
98
- const filePaths = await gitAdapter.getFilesPath(op.path);
91
+ const filePaths = this.ctx.trees.filesUnder(op.revision, op.path);
99
92
  if (filePaths.length > GIT_ARCHIVE_DIR_THRESHOLD) {
100
- await this._executeGitDirCopyViaArchive(gitAdapter, op, filePaths);
93
+ await this._executeGitDirCopyViaArchive(this.blobReader, op, filePaths);
101
94
  return;
102
95
  }
103
96
  for (const filePath of filePaths) {
@@ -106,10 +99,11 @@ export default class IOExecutor {
106
99
  }
107
100
  const dst = join(this.config.output, filePath);
108
101
  if (!this._isWithinOutput(dst)) {
102
+ // Stryker disable next-line StringLiteral,CallExpression -- equivalent: the log content and the call itself are observability only; the skip's real effect (no getBufferContent, no outputFile for that child) is asserted by the escaping-child test
109
103
  Logger.debug(lazy `IOExecutor gitDirCopy out-of-output dst ${dst}`);
110
104
  continue;
111
105
  }
112
- const content = await gitAdapter.getBufferContent({
106
+ const content = await this.blobReader.getBufferContent({
113
107
  path: filePath,
114
108
  oid: op.revision,
115
109
  });
@@ -118,7 +112,7 @@ export default class IOExecutor {
118
112
  }
119
113
  }
120
114
  catch (error) {
121
- // Stryker disable next-line BlockStatement -- equivalent: catch body is observability-only; emptying it skips the lazy log call but tests assert on the swallowed error not producing copies
115
+ // Stryker disable next-line BlockStatement,CallExpression -- equivalent: catch body is observability-only; emptying it, or dropping the call, skips only the lazy log tests assert on the swallowed error not producing copies
122
116
  Logger.debug(
123
117
  // Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: lazy log content is observability only
124
118
  lazy `IOExecutor gitDirCopy failed for ${op.path}: ${() => getErrorMessage(error)}`);
@@ -160,6 +154,11 @@ export default class IOExecutor {
160
154
  }
161
155
  async _executeStreamedContent(op) {
162
156
  const dst = join(this.config.output, op.path);
157
+ if (!this._isWithinOutput(dst)) {
158
+ // Stryker disable next-line StringLiteral,CallExpression -- equivalent: the log content and the call itself are observability only; the guard's real effect (writer never invoked) is asserted by the escape-path StreamedContent test
159
+ Logger.debug(lazy `IOExecutor streamedContent out-of-output dst ${dst}`);
160
+ return;
161
+ }
163
162
  await this._writeAtomicallyViaTmp(dst, op.writer);
164
163
  }
165
164
  // Writes `producer` output to a sibling `.tmp` file, then atomically renames
@@ -182,6 +181,7 @@ export default class IOExecutor {
182
181
  ws.destroy();
183
182
  /* v8 ignore next -- defensive cleanup: best-effort tmp removal swallows ENOENT and permission errors */
184
183
  await fsPromises.unlink(tmp).catch(() => undefined);
184
+ // Stryker disable next-line CallExpression -- equivalent: removing the call entirely is observability only; the failed write's real effects (unlink called, rename not called, stream destroyed) are already asserted
185
185
  Logger.debug(
186
186
  // Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: lazy log content is observability only; tests assert on the failed-write side-effect (no output file)
187
187
  lazy `IOExecutor atomicWrite failed for ${dst}: ${() => getErrorMessage(error)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"ioExecutor.js","sourceRoot":"","sources":["../../src/adapter/ioExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ioExecutor.js","sourceRoot":"","sources":["../../src/adapter/ioExecutor.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,iBAAiB,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAQ/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAqB,MAAM,0BAA0B,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,oBAAoB,CAAA;AAE3B,MAAM,UAAU,GAAG,MAAM,CAAA;AAEzB,MAAM,CAAC,OAAO,OAAO,UAAU;IAKR,GAAG;IACH,UAAU;IALZ,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAA;IAChD,YAAY,CAAe;IAErC,YACqB,GAAe,EACf,UAAU,GAAkB,UAAU,CAAC,WAAW,CACnE,GAAG,CAAC,MAAM,CACX;mBAHkB,GAAG;0BACH,UAAU;IAG5B,CAAC;IAEJ,IAAc,MAAM;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAAgC;QACnD,IAAI,CAAC,YAAY,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxD,MAAM,SAAS,CACb,MAAM,EACN,uBAAuB,EAAE,EACzB,KAAK,EAAE,EAAiB,EAAE,EAAE;YAC1B,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAClC,CAAC,CACF,CAAA;IACH,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,EAAiB;QACjD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,OAAM;QACR,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,OAAM;QACR,CAAC;QAED,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,iBAAiB,CAAC,OAAO;gBAC5B,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;gBAClC,MAAK;YACP,KAAK,iBAAiB,CAAC,UAAU;gBAC/B,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,iBAAiB,CAAC,eAAe;gBACpC,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAA;gBACtC,MAAK;QACT,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,2DAA2D;IACnD,eAAe,CAAC,GAAW;QACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1C,CAAC;IAES,KAAK,CAAC,mBAAmB,CAAC,EAGnC;QACC,MAAM,GAAG,GAAe,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAA;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,gPAAgP;YAChP,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,4CAA4C,GAAG,EAAE,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAA;YACrE,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,yBAAyB,EAAE,CAAC;gBAC/C,MAAM,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;gBACjE,OAAM;YACR,CAAC;YACD,kLAAkL;YAClL,MAAM,CAAC,KAAK;YACV,mLAAmL;YACnL,IAAI,CAAA,qCAAqC,EAAE,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CACpF,CAAA;QACH,CAAC;IACH,CAAC;IAES,KAAK,CAAC,2BAA2B,CACzC,MAAqB,EACrB,GAAe,EACf,GAAW;QAEX,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;YAChD,MAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;IACJ,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,EAGlC;QACC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;YACjE,IAAI,SAAS,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;gBACjD,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;gBACvE,OAAM;YACR,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrD,SAAQ;gBACV,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;gBAC9C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,sPAAsP;oBACtP,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,2CAA2C,GAAG,EAAE,CAAC,CAAA;oBAClE,SAAQ;gBACV,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;oBACrD,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,EAAE,CAAC,QAAQ;iBACjB,CAAC,CAAA;gBACF,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iOAAiO;YACjO,MAAM,CAAC,KAAK;YACV,8GAA8G;YAC9G,IAAI,CAAA,oCAAoC,EAAE,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CACnF,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,4BAA4B,CACxC,UAAyB,EACzB,EAAsC,EACtC,SAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrB,SAAQ;YACV,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrB,SAAQ;YACV,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrB,SAAQ;YACV,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAChD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrB,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACnC,4SAA4S;YAC5S,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;gBAChD,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAES,KAAK,CAAC,uBAAuB,CACrC,EAA4B;QAE5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,uOAAuO;YACvO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,gDAAgD,GAAG,EAAE,CAAC,CAAA;YACvE,OAAM;QACR,CAAC;QACD,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED,6EAA6E;IAC7E,wEAAwE;IACxE,6EAA6E;IAC7E,6EAA6E;IACnE,KAAK,CAAC,sBAAsB,CACpC,GAAW,EACX,QAAyC;QAEzC,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,EAAE,CAAA;QACjC,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAA;YAClB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,uHAAuH;gBACvH,EAAE,CAAC,GAAG,CAAC,CAAC,GAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YACjE,CAAC,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,EAAE,CAAC,OAAO,EAAE,CAAA;YACZ,wGAAwG;YACxG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACnD,sNAAsN;YACtN,MAAM,CAAC,KAAK;YACV,6KAA6K;YAC7K,IAAI,CAAA,qCAAqC,GAAG,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAChF,CAAA;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { type DiffChange } from '@scolladon/tsgit';
2
+ import type { Pathspec } from '../utils/pathspec.js';
3
+ export declare const ROOT_PATHS: Set<string>;
4
+ export declare const inScope: (path: string, scopes: readonly string[]) => boolean;
5
+ export declare const hasRootScope: (scopes: readonly Pathspec[]) => boolean;
6
+ export declare const nonRootScopes: (scopes: readonly Pathspec[]) => Pathspec[];
7
+ export declare function toDiffLines(change: DiffChange, scopes: readonly string[]): Generator<string>;
8
+ export declare const buildLiteralMatcher: (specs: string[]) => (path: string) => boolean;
9
+ export declare const buildPathspecMatcher: (specs: string[]) => ((path: string) => boolean);
@@ -0,0 +1,83 @@
1
+ import { toSimilarityPercent } from '@scolladon/tsgit';
2
+ import { TAB } from '../constant/cliConstants.js';
3
+ import { ADDITION, DELETION, MODIFICATION, RENAMED, } from '../constant/gitConstants.js';
4
+ import { treatPathSep } from '../utils/fsUtils.js';
5
+ export const ROOT_PATHS = new Set(['', '.', './']);
6
+ const GITLINK_MODE = '160000';
7
+ export const inScope = (path, scopes) => scopes.some(scope => ROOT_PATHS.has(scope) || path === scope || path.startsWith(`${scope}/`));
8
+ const keepSide = (mode, path, scopes) => mode !== GITLINK_MODE && (scopes.length === 0 || inScope(path, scopes));
9
+ export const hasRootScope = (scopes) => scopes.some(scope => ROOT_PATHS.has(scope));
10
+ export const nonRootScopes = (scopes) => scopes.filter(scope => !ROOT_PATHS.has(scope));
11
+ // git prints rename similarity as a zero-padded three-digit percent (R087).
12
+ const similarityPercent = (similarity) => String(toSimilarityPercent(similarity.score)).padStart(3, '0');
13
+ // The facade diff takes no pathspec, so `-- <source>` scoping is replicated
14
+ // per side. Gitlink changes are skipped (submodule pointer moves are not
15
+ // deployable metadata) and `type-change`/`copy` entries are dropped for
16
+ // parity with the subprocess `--diff-filter=AMD(R)`. A rename with only one
17
+ // side in scope degrades to that side's A/D line, matching what the
18
+ // subprocess pathspec does to a broken rename pair.
19
+ export function* toDiffLines(change, scopes) {
20
+ switch (change.type) {
21
+ case 'add':
22
+ if (keepSide(change.newMode, change.newPath, scopes)) {
23
+ yield `${ADDITION}${TAB}${treatPathSep(change.newPath)}`;
24
+ }
25
+ break;
26
+ case 'delete':
27
+ if (keepSide(change.oldMode, change.oldPath, scopes)) {
28
+ yield `${DELETION}${TAB}${treatPathSep(change.oldPath)}`;
29
+ }
30
+ break;
31
+ case 'modify':
32
+ if (change.oldMode !== GITLINK_MODE &&
33
+ keepSide(change.newMode, change.path, scopes)) {
34
+ yield `${MODIFICATION}${TAB}${treatPathSep(change.path)}`;
35
+ }
36
+ break;
37
+ case 'rename': {
38
+ const oldKept = keepSide(change.oldMode, change.oldPath, scopes);
39
+ const newKept = keepSide(change.newMode, change.newPath, scopes);
40
+ if (oldKept && newKept) {
41
+ yield `${RENAMED}${similarityPercent(change.similarity)}${TAB}${treatPathSep(change.oldPath)}${TAB}${treatPathSep(change.newPath)}`;
42
+ }
43
+ else if (newKept) {
44
+ yield `${ADDITION}${TAB}${treatPathSep(change.newPath)}`;
45
+ }
46
+ else if (oldKept) {
47
+ yield `${DELETION}${TAB}${treatPathSep(change.oldPath)}`;
48
+ }
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ const GLOB_CHARS = /[*?[]/;
54
+ const REGEXP_SPECIALS = /[.+^${}()|\\\]]/g;
55
+ // Concrete repository paths are matched by directory prefix only — no
56
+ // wildmatch, no leading-prefix normalisation. A path off the repository can
57
+ // never carry a leading './' or '/' (treatPathSep and basePath already rule
58
+ // those out), and treating `[` as a glob-class opener would misread real
59
+ // path segments like an object folder named `Custom[1]__c`.
60
+ export const buildLiteralMatcher = (specs) => (path) => inScope(path, specs);
61
+ // Git pathspec semantics: a literal pathspec matches by directory prefix; a
62
+ // pathspec containing wildcards uses wildmatch where `*` also crosses `/`
63
+ // (no `:(glob)` magic). Callers mix both shapes (e.g. flow translations use
64
+ // `<source>/*.translation-meta.xml`).
65
+ export const buildPathspecMatcher = (specs) => {
66
+ // Git normalizes leading `./` (and the `.//*` shape produced by the
67
+ // default `./` source dir) away before matching; repo paths never carry
68
+ // either prefix.
69
+ const normalized = specs.map(spec => spec.replace(/^(\.\/)+/, '').replace(/^\/+/, ''));
70
+ const literals = normalized.filter(spec => !GLOB_CHARS.test(spec));
71
+ const globs = normalized
72
+ .filter(spec => GLOB_CHARS.test(spec))
73
+ .map(spec => {
74
+ const escaped = spec
75
+ .replace(REGEXP_SPECIALS, '\\$&')
76
+ .replace(/\*/g, '.*')
77
+ .replace(/\?/g, '.');
78
+ return new RegExp(`^${escaped}$`);
79
+ });
80
+ return (path) => (literals.length > 0 && inScope(path, literals)) ||
81
+ globs.some(glob => glob.test(path));
82
+ };
83
+ //# sourceMappingURL=pathMatching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathMatching.js","sourceRoot":"","sources":["../../src/adapter/pathMatching.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,15 @@ export declare class TreeIndex {
6
6
  protected readonly root: TrieNode;
7
7
  protected fileCount: number;
8
8
  add(path: string): void;
9
- has(path: string): boolean;
10
- hasPath(path: string): boolean;
9
+ protected has(path: string): boolean;
10
+ protected hasPath(path: string): boolean;
11
11
  listChildren(dir: string): string[];
12
- getFilesUnder(dir: string): string[];
13
- allPaths(): string[];
12
+ protected getFilesUnder(dir: string): string[];
13
+ protected allPaths(): string[];
14
14
  get size(): number;
15
+ pathExists(path: string): boolean;
16
+ getFilesPath(paths: string | string[]): string[];
17
+ private getFilesPathFor;
15
18
  protected navigate(path: string): TrieNode | undefined;
16
19
  protected collectFiles(node: TrieNode, prefix: string, out: string[]): void;
17
20
  }
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
  import { PATH_SEP } from '../constant/fsConstants.js';
3
+ import { pushAll } from '../utils/arrayUtils.js';
4
+ import { ROOT_PATHS } from './pathMatching.js';
3
5
  const createNode = () => ({
4
6
  children: new Map(),
5
7
  isFile: false,
@@ -23,6 +25,10 @@ export class TreeIndex {
23
25
  this.fileCount++;
24
26
  }
25
27
  }
28
+ // Not part of the public surface: the ROOT_PATHS-aware pathExists/
29
+ // getFilesPath wrappers below are every caller's actual entry point.
30
+ // Keeping these raw lookups protected stops a future caller from
31
+ // bypassing the ROOT_PATHS branch those wrappers exist for.
26
32
  has(path) {
27
33
  return this.navigate(path)?.isFile === true;
28
34
  }
@@ -46,9 +52,37 @@ export class TreeIndex {
46
52
  this.collectFiles(this.root, '', result);
47
53
  return result;
48
54
  }
55
+ // Stays public (unlike has/hasPath/getFilesUnder/allPaths above): no
56
+ // ROOT_PATHS-aware wrapper exposes the exact indexed-file count —
57
+ // pathExists/getFilesPath only answer boolean/list questions — so this
58
+ // is the sole way to pin the add() idempotency guarantee (the same path
59
+ // added twice must not double-count).
49
60
  get size() {
50
61
  return this.fileCount;
51
62
  }
63
+ // The two ROOT_PATHS-aware lookups every caller used to ask GitAdapter
64
+ // for (pathExistsImpl, getFilesPathCached) — now answered by the index
65
+ // itself instead of a scope-keyed cache lookup.
66
+ pathExists(path) {
67
+ if (ROOT_PATHS.has(path))
68
+ return this.size > 0;
69
+ return this.hasPath(path);
70
+ }
71
+ getFilesPath(paths) {
72
+ const list = Array.isArray(paths) ? paths : [paths];
73
+ const result = [];
74
+ for (const path of list) {
75
+ pushAll(result, this.getFilesPathFor(path));
76
+ }
77
+ return result;
78
+ }
79
+ getFilesPathFor(path) {
80
+ if (ROOT_PATHS.has(path))
81
+ return this.allPaths();
82
+ if (this.has(path))
83
+ return [path];
84
+ return this.getFilesUnder(path);
85
+ }
52
86
  navigate(path) {
53
87
  if (!path)
54
88
  return this.root;
@@ -1 +1 @@
1
- {"version":3,"file":"treeIndex.js","sourceRoot":"","sources":["../../src/adapter/treeIndex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"treeIndex.js","sourceRoot":"","sources":["../../src/adapter/treeIndex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { TreeIndex } from './treeIndex.js';
2
+ export type TreeReader = Readonly<{
3
+ pathExists(revision: string, path: string): boolean;
4
+ filesUnder(revision: string, paths: string | string[]): string[];
5
+ children(revision: string, dir: string): string[];
6
+ }>;
7
+ export declare const createTreeReader: (entries: ReadonlyMap<string, TreeIndex>) => TreeReader;
8
+ export declare const EMPTY_TREE_READER: TreeReader;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+ import { TreeIndex } from './treeIndex.js';
3
+ // Null Object. An index with no entries answers every question with exactly
4
+ // the empty/false result each reader used to spell out for itself as
5
+ // `at(rev)?.x() ?? default` — including for ROOT_PATHS, where pathExists
6
+ // short-circuits to `size > 0` instead of walking to the (always present)
7
+ // root node.
8
+ const NO_INDEX = new TreeIndex();
9
+ export const createTreeReader = (entries) => {
10
+ const indexAt = (revision) => entries.get(revision) ?? NO_INDEX;
11
+ return {
12
+ pathExists: (revision, path) => indexAt(revision).pathExists(path),
13
+ filesUnder: (revision, paths) => indexAt(revision).getFilesPath(paths),
14
+ children: (revision, dir) => indexAt(revision).listChildren(dir),
15
+ };
16
+ };
17
+ // Safe default for callers/tests that never touch tree-index-backed
18
+ // lookups: every read resolves to the same empty degradation a revision
19
+ // that was never built would produce. Expressed via the real factory over
20
+ // an empty map so it cannot drift from what createTreeReader actually does.
21
+ export const EMPTY_TREE_READER = createTreeReader(new Map());
22
+ //# sourceMappingURL=treeReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeReader.js","sourceRoot":"","sources":["../../src/adapter/treeReader.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAwB1C,4EAA4E;AAC5E,qEAAqE;AACrE,yEAAyE;AACzE,0EAA0E;AAC1E,aAAa;AACb,MAAM,QAAQ,GAAkB,IAAI,SAAS,EAAE,CAAA;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAuC,EAC3B,EAAE;IACd,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAiB,EAAE,CAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;IACnC,OAAO;QACL,UAAU,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAClE,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;QACtE,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;KACjE,CAAA;AACH,CAAC,CAAA;AAED,oEAAoE;AACpE,wEAAwE;AACxE,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAe,gBAAgB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA"}
@@ -7,6 +7,7 @@ export default class SourceDeltaGenerate extends SfCommand<SgdResult> {
7
7
  static readonly flags: {
8
8
  from: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
9
  to: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'merge-base': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
11
  'generate-delta': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
12
  'output-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
13
  'repo-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
@@ -27,6 +27,10 @@ export default class SourceDeltaGenerate extends SfCommand {
27
27
  summary: messages.getMessage('flags.to.summary'),
28
28
  default: TO_DEFAULT_VALUE,
29
29
  }),
30
+ 'merge-base': Flags.boolean({
31
+ char: 'b',
32
+ summary: messages.getMessage('flags.merge-base.summary'),
33
+ }),
30
34
  'generate-delta': Flags.boolean({
31
35
  char: 'd',
32
36
  summary: messages.getMessage('flags.generate-delta.summary'),
@@ -139,6 +143,7 @@ export default class SourceDeltaGenerate extends SfCommand {
139
143
  ignoreWhitespace: flags['ignore-whitespace'],
140
144
  include: flags['include-file'],
141
145
  includeDestructive: flags['include-destructive-file'],
146
+ mergeBase: flags['merge-base'],
142
147
  output: flags['output-dir'],
143
148
  repo: flags['repo-dir'],
144
149
  source: flags['source-dir'],
@@ -1 +1 @@
1
- {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../../src/commands/sgd/source/delta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../../src/commands/sgd/source/delta.ts"],"names":[],"mappings":"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"}
package/lib/main.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Config } from './types/config.js';
1
+ import type { ConfigInput } from './types/config.js';
2
2
  import type { Work } from './types/work.js';
3
3
  export default _default;
4
- declare function _default(config: Config): Promise<Work>;
4
+ declare function _default(configInput: ConfigInput): Promise<Work>;
package/lib/main.js CHANGED
@@ -1,30 +1,33 @@
1
1
  'use strict';
2
2
  import GitAdapter from './adapter/GitAdapter.js';
3
3
  import IOExecutor from './adapter/ioExecutor.js';
4
+ import { createTreeReader, EMPTY_TREE_READER } from './adapter/treeReader.js';
4
5
  import { getDefinition } from './metadata/metadataManager.js';
5
6
  import { getPostProcessors } from './post-processor/postProcessorManager.js';
6
7
  import DiffLineInterpreter from './service/diffLineInterpreter.js';
7
- import { mergeResults } from './types/handlerResult.js';
8
- import { pushAll } from './utils/arrayUtils.js';
9
8
  import ChangeSet from './utils/changeSet.js';
9
+ import { assembleChanges } from './utils/changesAssembly.js';
10
10
  import ConfigValidator from './utils/configValidator.js';
11
11
  import { Logger, lazy } from './utils/LoggingService.js';
12
+ import { MessageService } from './utils/MessageService.js';
13
+ import { sanitizeForMessage } from './utils/messageSanitizer.js';
14
+ import { parseSourceDirs } from './utils/pathspec.js';
12
15
  import RenameResolver from './utils/renameResolver.js';
13
16
  import RepoGitDiff from './utils/repoGitDiff.js';
14
17
  import { computeTreeIndexScope } from './utils/treeIndexScope.js';
15
- export default async (config) => {
18
+ export default async (configInput) => {
16
19
  // Stryker disable next-line StringLiteral -- equivalent: log content is observability only; tests assert on the returned Work, not lazy log lines
17
20
  Logger.trace('main: entry');
18
21
  // Stryker disable next-line StringLiteral -- equivalent: log content is observability only
19
- Logger.debug(lazy `main: arguments ${config}`);
20
- const work = {
21
- config,
22
- changes: new ChangeSet(),
23
- warnings: [],
24
- };
22
+ Logger.debug(lazy `main: arguments ${configInput}`);
23
+ const { pathspecs, rejections } = parseSourceDirs(configInput.source ?? []);
24
+ const config = { ...configInput, source: pathspecs };
25
+ // Captured before validateConfig() resolves them to full SHAs below, so
26
+ // the unmatched-scope warning can report what the user typed.
27
+ const requestedFrom = config.from;
28
+ const requestedTo = config.to;
25
29
  try {
26
- const configValidator = new ConfigValidator(work);
27
- await configValidator.validateConfig();
30
+ const configWarnings = await new ConfigValidator(config, rejections).validateConfig();
28
31
  const metadata = await getDefinition(config);
29
32
  const repoGitDiffHelper = new RepoGitDiff(config, metadata);
30
33
  // The treeIndex scope read needs the full path set up front, so when
@@ -45,6 +48,14 @@ export default async (config) => {
45
48
  else {
46
49
  lines = repoGitDiffHelper.getLines();
47
50
  }
51
+ // Built here and threaded to every reader (DiffLineInterpreter,
52
+ // RenameResolver, IOExecutor, the post-processors) rather than cached
53
+ // on GitAdapter: one TreeIndex per revision, for this run only, so a
54
+ // reader can never see a different scope than the one this block just
55
+ // built under — the lesson from the shared, scope-keyed cache this
56
+ // replaces (see design history) is that a cache keyed by a value each
57
+ // reader recomputes is an implicit contract that will drift.
58
+ let trees = EMPTY_TREE_READER;
48
59
  if (config.generateDelta) {
49
60
  const gitAdapter = GitAdapter.getInstance(config);
50
61
  let scopePaths = config.source;
@@ -54,39 +65,75 @@ export default async (config) => {
54
65
  ];
55
66
  }
56
67
  if (scopePaths.length > 0) {
57
- await Promise.all([
58
- gitAdapter.preBuildTreeIndex(config.to, scopePaths),
59
- gitAdapter.preBuildTreeIndex(config.from, scopePaths),
68
+ const [toIndex, fromIndex] = await Promise.all([
69
+ gitAdapter.buildTreeIndex(config.to, scopePaths),
70
+ gitAdapter.buildTreeIndex(config.from, scopePaths),
60
71
  ]);
72
+ const entries = new Map();
73
+ // Stryker disable ConditionalExpression -- equivalent: forcing either guard to always run stores `undefined` at that revision key instead of skipping it, but the only reader is createTreeReader's `entries.get(revision) ?? NO_INDEX`, and Map.get answers `undefined` for an absent key and an explicitly-undefined value alike. `entries` is local to this block and exposes no has/size/enumeration, so no observer can tell the two apart
74
+ if (toIndex)
75
+ entries.set(config.to, toIndex);
76
+ if (fromIndex)
77
+ entries.set(config.from, fromIndex);
78
+ // Stryker restore ConditionalExpression
79
+ trees = createTreeReader(entries);
61
80
  }
62
81
  }
63
- const lineProcessor = new DiffLineInterpreter(work, metadata);
64
- const postProcessors = getPostProcessors(work, metadata);
65
- // First pass: build the ChangeSet from handler output so collectors
66
- // (e.g. FlowTranslationProcessor) can introspect the package view via
67
- // work.changes.forPackageManifest() before emitting their own changes.
82
+ const ctx = { config, metadata, trees };
83
+ const lineProcessor = new DiffLineInterpreter(ctx);
84
+ const postProcessors = getPostProcessors(ctx);
85
+ // First pass: build the read model from handler output alone so collectors
86
+ // (FlowTranslationProcessor) introspect the handler-pass package view before
87
+ // include lines exist.
68
88
  const handlerResult = await lineProcessor.process(lines);
69
- work.changes = handlerResult.changes;
70
- // Second pass: fold collector output into the same ChangeSet.
71
- const postResult = await postProcessors.collectAll();
72
- const combinedResult = mergeResults(handlerResult, postResult);
73
- work.changes = combinedResult.changes;
74
- // Apply git-detected renames: resolve the `{fromPath, toPath}` pairs that
75
- // RepoGitDiff captured from `-M` output into (type, from, to) triples and
76
- // re-group them into the ChangeSet's rename bucket. Pairs for ignored
77
- // paths or bundle helper files (same member on both sides) are no-ops.
78
- await new RenameResolver(work, metadata).apply(work.changes, repoGitDiffHelper.getRenamePairs());
79
- pushAll(work.warnings, combinedResult.warnings);
80
- await new IOExecutor(config).execute(combinedResult.copies);
81
- await postProcessors.executeRemaining();
89
+ const handlerView = ChangeSet.from(handlerResult.elements); // handler pass ONLY
90
+ const postResult = await postProcessors.collectAll(handlerView);
91
+ // Resolve git-detected renames — the `{fromPath, toPath}` pairs
92
+ // RepoGitDiff captured from `-M` output — into (type, from, to) triples.
93
+ // Pairs for ignored paths or bundle helper files (same member on both
94
+ // sides) resolve to no triple.
95
+ const renameTriples = await new RenameResolver(ctx).resolve(repoGitDiffHelper.getRenamePairs());
96
+ const { changes, copies, warnings: assemblyWarnings, } = assembleChanges(handlerResult, postResult, renameTriples);
97
+ await new IOExecutor(ctx).execute(copies);
98
+ const processorWarnings = await postProcessors.executeRemaining(changes);
99
+ // The diff is fully drained by this point (the same assumption
100
+ // getRenamePairs() above already relies on), so the per-scope
101
+ // counters are final. Only warn when the run produced no visible
102
+ // changes at all — a non-empty manifest (e.g. members sourced by
103
+ // --include-file independent of the diff) means the scope did its
104
+ // job, so naming it as unmatched would be misleading.
105
+ const unmatchedScopes = repoGitDiffHelper.getUnmatchedSourceScopes();
106
+ const sourceScopeWarnings = unmatchedScopes.length > 0 && changes.isEmpty()
107
+ ? [
108
+ new Error(new MessageService().getMessage('warning.SourceDirMatchedNothing', [
109
+ // Sanitize each scope before joining: the length cap in
110
+ // sanitizeForMessage must apply per scope, not to the
111
+ // joined aggregate, or one long scope name silently
112
+ // elides every scope listed after it.
113
+ unmatchedScopes.map(sanitizeForMessage).join(', '),
114
+ sanitizeForMessage(requestedFrom),
115
+ sanitizeForMessage(requestedTo),
116
+ ])),
117
+ ]
118
+ : [];
119
+ const work = {
120
+ config,
121
+ changes,
122
+ warnings: [
123
+ ...configWarnings,
124
+ ...assemblyWarnings,
125
+ ...processorWarnings,
126
+ ...sourceScopeWarnings,
127
+ ],
128
+ };
129
+ // Stryker disable next-line StringLiteral -- equivalent: log content is observability only
130
+ Logger.debug(lazy `main: return ${work}`);
131
+ // Stryker disable next-line StringLiteral -- equivalent: log content is observability only
132
+ Logger.trace('main: exit');
133
+ return work;
82
134
  }
83
135
  finally {
84
136
  await GitAdapter.closeAll();
85
137
  }
86
- // Stryker disable next-line StringLiteral -- equivalent: log content is observability only
87
- Logger.debug(lazy `main: return ${work}`);
88
- // Stryker disable next-line StringLiteral -- equivalent: log content is observability only
89
- Logger.trace('main: exit');
90
- return work;
91
138
  };
92
139
  //# sourceMappingURL=main.js.map