sfdx-git-delta 7.0.1 → 7.2.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 +12 -3
- package/lib/adapter/GitAdapter.d.ts +25 -64
- package/lib/adapter/GitAdapter.js +352 -483
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/gitBlobReader.d.ts +8 -10
- package/lib/adapter/gitBlobReader.js.map +1 -1
- package/lib/adapter/ioExecutor.d.ts +5 -4
- package/lib/adapter/ioExecutor.js +22 -14
- package/lib/adapter/ioExecutor.js.map +1 -1
- package/lib/adapter/pathMatching.d.ts +9 -0
- package/lib/adapter/pathMatching.js +83 -0
- package/lib/adapter/pathMatching.js.map +1 -0
- package/lib/adapter/tsgitErrorMap.d.ts +7 -0
- package/lib/adapter/tsgitErrorMap.js +32 -0
- package/lib/adapter/tsgitErrorMap.js.map +1 -0
- package/lib/commands/sgd/source/delta.js.map +1 -1
- package/lib/constant/gitConstants.d.ts +0 -2
- package/lib/constant/gitConstants.js +0 -8
- package/lib/constant/gitConstants.js.map +1 -1
- package/lib/constant/metadataConstants.d.ts +1 -0
- package/lib/constant/metadataConstants.js +1 -0
- package/lib/constant/metadataConstants.js.map +1 -1
- package/lib/main.d.ts +2 -2
- package/lib/main.js +64 -35
- package/lib/main.js.map +1 -1
- package/lib/post-processor/baseProcessor.d.ts +9 -6
- package/lib/post-processor/baseProcessor.js +5 -6
- package/lib/post-processor/baseProcessor.js.map +1 -1
- package/lib/post-processor/changesManifestProcessor.d.ts +3 -2
- package/lib/post-processor/changesManifestProcessor.js +5 -4
- package/lib/post-processor/changesManifestProcessor.js.map +1 -1
- package/lib/post-processor/flowTranslationProcessor.d.ts +8 -7
- package/lib/post-processor/flowTranslationProcessor.js +20 -19
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/includeProcessor.d.ts +6 -5
- package/lib/post-processor/includeProcessor.js +7 -6
- package/lib/post-processor/includeProcessor.js.map +1 -1
- package/lib/post-processor/packageGenerator.d.ts +3 -2
- package/lib/post-processor/packageGenerator.js +5 -4
- package/lib/post-processor/packageGenerator.js.map +1 -1
- package/lib/post-processor/postProcessorManager.d.ts +5 -7
- package/lib/post-processor/postProcessorManager.js +23 -31
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/botHandler.d.ts +1 -2
- package/lib/service/botHandler.js +17 -10
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/containedDecomposedHandler.d.ts +4 -5
- package/lib/service/containedDecomposedHandler.js +13 -12
- package/lib/service/containedDecomposedHandler.js.map +1 -1
- package/lib/service/customFieldHandler.d.ts +1 -2
- package/lib/service/customFieldHandler.js +7 -6
- package/lib/service/customFieldHandler.js.map +1 -1
- package/lib/service/customLabelHandler.d.ts +1 -2
- package/lib/service/customLabelHandler.js +3 -3
- package/lib/service/customLabelHandler.js.map +1 -1
- package/lib/service/customObjectHandler.d.ts +3 -4
- package/lib/service/customObjectHandler.js +10 -9
- package/lib/service/customObjectHandler.js.map +1 -1
- package/lib/service/decomposedHandler.d.ts +3 -4
- package/lib/service/decomposedHandler.js +5 -4
- package/lib/service/decomposedHandler.js.map +1 -1
- package/lib/service/diffLineInterpreter.d.ts +3 -3
- package/lib/service/diffLineInterpreter.js +18 -14
- package/lib/service/diffLineInterpreter.js.map +1 -1
- package/lib/service/flowHandler.d.ts +1 -2
- package/lib/service/flowHandler.js +9 -4
- package/lib/service/flowHandler.js.map +1 -1
- package/lib/service/inFileHandler.d.ts +8 -9
- package/lib/service/inFileHandler.js +28 -27
- package/lib/service/inFileHandler.js.map +1 -1
- package/lib/service/inFolderHandler.d.ts +4 -5
- package/lib/service/inFolderHandler.js +6 -5
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/inResourceHandler.d.ts +4 -5
- package/lib/service/inResourceHandler.js +8 -7
- package/lib/service/inResourceHandler.js.map +1 -1
- package/lib/service/objectTranslationHandler.d.ts +1 -2
- package/lib/service/objectTranslationHandler.js +6 -5
- package/lib/service/objectTranslationHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.d.ts +6 -7
- package/lib/service/reportingFolderHandler.js +6 -6
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.d.ts +4 -5
- package/lib/service/sharedFolderHandler.js +6 -6
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.d.ts +5 -9
- package/lib/service/standardHandler.js +28 -35
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/service/typeHandlerFactory.d.ts +3 -3
- package/lib/service/typeHandlerFactory.js +6 -6
- package/lib/service/typeHandlerFactory.js.map +1 -1
- package/lib/types/config.d.ts +5 -1
- package/lib/types/handlerResult.d.ts +7 -7
- package/lib/types/handlerResult.js +10 -1
- package/lib/types/handlerResult.js.map +1 -1
- package/lib/types/work.d.ts +1 -1
- package/lib/utils/arrayUtils.d.ts +1 -1
- package/lib/utils/arrayUtils.js.map +1 -1
- package/lib/utils/bundleRollup.d.ts +6 -0
- package/lib/utils/bundleRollup.js +62 -0
- package/lib/utils/bundleRollup.js.map +1 -0
- package/lib/utils/changeSet.d.ts +12 -15
- package/lib/utils/changeSet.js +23 -120
- package/lib/utils/changeSet.js.map +1 -1
- package/lib/utils/changesAssembly.d.ts +8 -0
- package/lib/utils/changesAssembly.js +21 -0
- package/lib/utils/changesAssembly.js.map +1 -0
- package/lib/utils/configValidator.d.ts +7 -6
- package/lib/utils/configValidator.js +32 -11
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/fsHelper.d.ts +2 -1
- package/lib/utils/fsHelper.js +7 -3
- package/lib/utils/fsHelper.js.map +1 -1
- package/lib/utils/messageSanitizer.d.ts +1 -0
- package/lib/utils/messageSanitizer.js +48 -0
- package/lib/utils/messageSanitizer.js.map +1 -0
- package/lib/utils/metadataDiff/index.d.ts +0 -2
- package/lib/utils/metadataDiff/index.js.map +1 -1
- package/lib/utils/metadataDiff/streamingDiff.d.ts +1 -3
- package/lib/utils/metadataDiff/streamingDiff.js +16 -54
- package/lib/utils/metadataDiff/streamingDiff.js.map +1 -1
- package/lib/utils/pathspec.d.ts +15 -0
- package/lib/utils/pathspec.js +71 -0
- package/lib/utils/pathspec.js.map +1 -0
- package/lib/utils/renameResolver.d.ts +6 -6
- package/lib/utils/renameResolver.js +10 -9
- package/lib/utils/renameResolver.js.map +1 -1
- package/lib/utils/repoGitDiff.d.ts +2 -0
- package/lib/utils/repoGitDiff.js +14 -1
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/messages/delta.md +26 -0
- package/oclif.manifest.json +2 -2
- package/package.json +28 -20
- package/lib/adapter/gitBatchCatFile.d.ts +0 -42
- package/lib/adapter/gitBatchCatFile.js +0 -203
- package/lib/adapter/gitBatchCatFile.js.map +0 -1
- package/lib/post-processor/bundleRollupProcessor.d.ts +0 -7
- package/lib/post-processor/bundleRollupProcessor.js +0 -81
- package/lib/post-processor/bundleRollupProcessor.js.map +0 -1
|
@@ -58,7 +58,7 @@ const adapterHandlerMap = {
|
|
|
58
58
|
mixedContent: InResource,
|
|
59
59
|
};
|
|
60
60
|
export default class TypeHandlerFactory {
|
|
61
|
-
|
|
61
|
+
config;
|
|
62
62
|
metadata;
|
|
63
63
|
resolver;
|
|
64
64
|
inFileParentXmlNames;
|
|
@@ -70,10 +70,10 @@ export default class TypeHandlerFactory {
|
|
|
70
70
|
// stays trivially small.
|
|
71
71
|
handlerCache = new Map();
|
|
72
72
|
// Stryker disable BlockStatement -- equivalent: constructor body wires the resolver and pre-builds the inFileParent index; tests instantiate via factory paths that exercise the indexed lookups indirectly, but the mutant `{}` constructor would fail at first getTypeHandler call (resolver undefined), and that failure surfaces only outside the unit test surface for the factory's pure-routing tests
|
|
73
|
-
constructor(
|
|
74
|
-
this.
|
|
73
|
+
constructor(config, metadata) {
|
|
74
|
+
this.config = config;
|
|
75
75
|
this.metadata = metadata;
|
|
76
|
-
const gitAdapter = GitAdapter.getInstance(
|
|
76
|
+
const gitAdapter = GitAdapter.getInstance(config);
|
|
77
77
|
this.resolver = new MetadataBoundaryResolver(metadata, gitAdapter);
|
|
78
78
|
this.inFileParentXmlNames = new Set();
|
|
79
79
|
this.buildInFileParentIndex();
|
|
@@ -92,11 +92,11 @@ export default class TypeHandlerFactory {
|
|
|
92
92
|
}
|
|
93
93
|
// Stryker restore ConditionalExpression,BlockStatement,StringLiteral
|
|
94
94
|
// Stryker disable ConditionalExpression,EqualityOperator -- equivalent: the conditional picks `from` for deletions and `to` for additions/modifications; the test surface uses identical from/to values via getWork() defaults so the swap is unobservable
|
|
95
|
-
const revision = changeType === DELETION ? this.
|
|
95
|
+
const revision = changeType === DELETION ? this.config.from : this.config.to;
|
|
96
96
|
// Stryker restore ConditionalExpression,EqualityOperator
|
|
97
97
|
const element = await this.resolver.createElement(path, type, revision);
|
|
98
98
|
const Handler = this.resolveHandler(type);
|
|
99
|
-
return new Handler(changeType, element, this.
|
|
99
|
+
return new Handler(changeType, element, this.config);
|
|
100
100
|
}
|
|
101
101
|
// Stryker disable next-line BlockStatement -- equivalent: emptying the body produces an empty inFileParent index; downstream resolveHandler falls back to Standard for inFile parents, which still routes correctly for the pure-routing test surface
|
|
102
102
|
buildInFileParentIndex() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeHandlerFactory.js","sourceRoot":"","sources":["../../src/service/typeHandlerFactory.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;AACZ,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAI3E,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAE/E,OAAO,GAAG,MAAM,iBAAiB,CAAA;AACjC,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,kBAAkB,MAAM,yBAAyB,CAAA;AACxD,OAAO,WAAW,MAAM,yBAAyB,CAAA;AACjD,OAAO,wBAAwB,MAAM,+BAA+B,CAAA;AACpE,OAAO,YAAY,MAAM,0BAA0B,CAAA;AACnD,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,QAAQ,MAAM,sBAAsB,CAAA;AAC3C,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,QAAQ,MAAM,sBAAsB,CAAA;AAC3C,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,GAAG,MAAM,iBAAiB,CAAA;AACjC,OAAO,iBAAiB,MAAM,+BAA+B,CAAA;AAC7D,OAAO,sBAAsB,MAAM,6BAA6B,CAAA;AAChE,OAAO,YAAY,MAAM,0BAA0B,CAAA;AACnD,OAAO,QAAQ,MAAM,sBAAsB,CAAA;AAE3C,MAAM,eAAe,GAAG,eAAe,CAAA;AAEvC,sEAAsE;AACtE,MAAM,UAAU,GAAoC;IAClD,oBAAoB,EAAE,GAAG;IACzB,WAAW,EAAE,kBAAkB;IAC/B,sBAAsB,EAAE,iBAAiB;IACzC,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;IAC1B,uBAAuB,EAAE,iBAAiB;IAC1C,SAAS,EAAE,sBAAsB;IACjC,IAAI,EAAE,WAAW;IACjB,aAAa,EAAE,GAAG;IAClB,yBAAyB,EAAE,MAAM;IACjC,wBAAwB,EAAE,GAAG;IAC7B,aAAa,EAAE,mBAAmB;IAClC,MAAM,EAAE,sBAAsB;IAC9B,2BAA2B,EAAE,MAAM;IACnC,UAAU,EAAE,UAAU;IACtB,eAAe,EAAE,YAAY;IAC7B,cAAc,EAAE,UAAU;IAC1B,UAAU,EAAE,GAAG;IACf,gBAAgB,EAAE,YAAY;IAC9B,iBAAiB,EAAE,YAAY;IAC/B,WAAW,EAAE,YAAY;CAC1B,CAAA;AAED,uDAAuD;AACvD,MAAM,iBAAiB,GAAoC;IACzD,MAAM,EAAE,UAAU;IAClB,iBAAiB,EAAE,QAAQ;IAC3B,YAAY,EAAE,UAAU;CACzB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAahB,
|
|
1
|
+
{"version":3,"file":"typeHandlerFactory.js","sourceRoot":"","sources":["../../src/service/typeHandlerFactory.ts"],"names":[],"mappings":"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"}
|
package/lib/types/config.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { Pathspec } from '../utils/pathspec.js';
|
|
1
2
|
export type Config = {
|
|
2
3
|
to: string;
|
|
3
4
|
from: string;
|
|
4
5
|
output: string;
|
|
5
|
-
source:
|
|
6
|
+
source: Pathspec[];
|
|
6
7
|
ignore?: string | undefined;
|
|
7
8
|
ignoreDestructive?: string | undefined;
|
|
8
9
|
apiVersion?: number | undefined;
|
|
@@ -14,3 +15,6 @@ export type Config = {
|
|
|
14
15
|
additionalMetadataRegistryPath?: string | undefined;
|
|
15
16
|
changesManifest?: string | undefined;
|
|
16
17
|
};
|
|
18
|
+
export type ConfigInput = Omit<Config, 'source'> & {
|
|
19
|
+
source: string[];
|
|
20
|
+
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Writable } from 'node:stream';
|
|
2
|
-
import type ChangeSet from '../utils/changeSet.js';
|
|
3
2
|
export declare enum ManifestTarget {
|
|
4
3
|
Package = "package",
|
|
5
4
|
DestructiveChanges = "destructiveChanges"
|
|
@@ -38,9 +37,10 @@ export type StreamedContentOperation = {
|
|
|
38
37
|
writer: (out: Writable) => Promise<void>;
|
|
39
38
|
};
|
|
40
39
|
export type CopyOperation = GitCopyOperation | GitDirCopyOperation | StreamedContentOperation;
|
|
41
|
-
export type HandlerResult = {
|
|
42
|
-
|
|
43
|
-
copies: CopyOperation[];
|
|
44
|
-
warnings: Error[];
|
|
45
|
-
}
|
|
46
|
-
export
|
|
40
|
+
export type HandlerResult = Readonly<{
|
|
41
|
+
elements: readonly ManifestElement[];
|
|
42
|
+
copies: readonly CopyOperation[];
|
|
43
|
+
warnings: readonly Error[];
|
|
44
|
+
}>;
|
|
45
|
+
export declare const emptyResult: () => HandlerResult;
|
|
46
|
+
export declare const mergeResults: (...results: readonly HandlerResult[]) => HandlerResult;
|
|
@@ -17,5 +17,14 @@ export var CopyOperationKind;
|
|
|
17
17
|
CopyOperationKind["GitDirCopy"] = "gitDirCopy";
|
|
18
18
|
CopyOperationKind["StreamedContent"] = "streamedContent";
|
|
19
19
|
})(CopyOperationKind || (CopyOperationKind = {}));
|
|
20
|
-
export
|
|
20
|
+
export const emptyResult = () => ({
|
|
21
|
+
elements: [],
|
|
22
|
+
copies: [],
|
|
23
|
+
warnings: [],
|
|
24
|
+
});
|
|
25
|
+
export const mergeResults = (...results) => ({
|
|
26
|
+
elements: results.flatMap(r => r.elements),
|
|
27
|
+
copies: results.flatMap(r => r.copies),
|
|
28
|
+
warnings: results.flatMap(r => r.warnings),
|
|
29
|
+
});
|
|
21
30
|
//# sourceMappingURL=handlerResult.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlerResult.js","sourceRoot":"","sources":["../../src/types/handlerResult.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"handlerResult.js","sourceRoot":"","sources":["../../src/types/handlerResult.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAGZ,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,2DAAyC,CAAA;AAC3C,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;AACnB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAOD,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;IACzB,wDAAmC,CAAA;AACrC,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AA4CD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAkB,EAAE,CAAC,CAAC;IAC/C,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,EAAE;CACb,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,GAAG,OAAiC,EACrB,EAAE,CAAC,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;CAC3C,CAAC,CAAA"}
|
package/lib/types/work.d.ts
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Appends all elements from source arrays to target array.
|
|
3
3
|
* Stack-safe alternative to target.push(...source) which can overflow on large arrays.
|
|
4
4
|
*/
|
|
5
|
-
export declare const pushAll: <T>(target: T[], ...sources: T[][]) => void;
|
|
5
|
+
export declare const pushAll: <T>(target: T[], ...sources: readonly (readonly T[])[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../src/utils/arrayUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../src/utils/arrayUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAW,EACX,GAAG,OAAkC,EAC/B,EAAE;IACR,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ManifestElement } from '../types/handlerResult.js';
|
|
2
|
+
export type BundleRollupOutcome = Readonly<{
|
|
3
|
+
keptElements: readonly ManifestElement[];
|
|
4
|
+
warnings: readonly Error[];
|
|
5
|
+
}>;
|
|
6
|
+
export declare const applyBundleRollup: (elements: readonly ManifestElement[]) => BundleRollupOutcome;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { DOT } from '../constant/fsConstants.js';
|
|
3
|
+
import { DIGITAL_EXPERIENCE_BUNDLE_TYPE, DIGITAL_EXPERIENCE_TYPE, } from '../constant/metadataConstants.js';
|
|
4
|
+
import { ManifestTarget } from '../types/handlerResult.js';
|
|
5
|
+
import { MessageService } from './MessageService.js';
|
|
6
|
+
// Generic shape (one concrete pair today): a parent metadata type whose
|
|
7
|
+
// member subsumes every child of the same site/bundle in the deploy contract.
|
|
8
|
+
// For DigitalExperienceBundle → DigitalExperience, a DEB member deploys (or
|
|
9
|
+
// deletes) every DE child, so DE entries covered by a same-manifest DEB are
|
|
10
|
+
// redundant. This filter collapses them per manifest and — because a
|
|
11
|
+
// whole-bundle deletion is org-gated — warns when a DEB lands in
|
|
12
|
+
// destructiveChanges. When a second parent/child pair appears, generalize to
|
|
13
|
+
// a config list of (parentType, childType, parentMemberOf) triples; until
|
|
14
|
+
// then the implementation stays focused on the only pair we have empirical
|
|
15
|
+
// deploy semantics for.
|
|
16
|
+
export const applyBundleRollup = (elements) => {
|
|
17
|
+
const bundleMembersByTarget = collectBundleMembers(elements);
|
|
18
|
+
const keptElements = elements.filter(element => !(element.type === DIGITAL_EXPERIENCE_TYPE &&
|
|
19
|
+
isCoveredByBundle(element, bundleMembersByTarget)));
|
|
20
|
+
const warnings = warnBundleDeletions(bundleMembersByTarget.get(ManifestTarget.DestructiveChanges));
|
|
21
|
+
return { keptElements, warnings };
|
|
22
|
+
};
|
|
23
|
+
const collectBundleMembers = (elements) => {
|
|
24
|
+
const bundleMembersByTarget = new Map();
|
|
25
|
+
for (const { target, type, member } of elements) {
|
|
26
|
+
if (type !== DIGITAL_EXPERIENCE_BUNDLE_TYPE)
|
|
27
|
+
continue;
|
|
28
|
+
let members = bundleMembersByTarget.get(target);
|
|
29
|
+
if (!members) {
|
|
30
|
+
members = new Set();
|
|
31
|
+
bundleMembersByTarget.set(target, members);
|
|
32
|
+
}
|
|
33
|
+
members.add(member);
|
|
34
|
+
}
|
|
35
|
+
return bundleMembersByTarget;
|
|
36
|
+
};
|
|
37
|
+
const isCoveredByBundle = (element, bundleMembersByTarget) => {
|
|
38
|
+
const bundleMembers = bundleMembersByTarget.get(element.target);
|
|
39
|
+
if (!bundleMembers)
|
|
40
|
+
return false;
|
|
41
|
+
// A canonical `DigitalExperience` member is `<base>/<space>.<ct>/<cn>` and
|
|
42
|
+
// `<space>` (a Salesforce API name) cannot contain `.`, so the first `.`
|
|
43
|
+
// delimits the parent bundle's member exactly. One Set lookup vs. an
|
|
44
|
+
// `O(B)` linear `startsWith` scan over `bundleMembers`.
|
|
45
|
+
const dotIdx = element.member.indexOf(DOT);
|
|
46
|
+
if (dotIdx < 0)
|
|
47
|
+
return false;
|
|
48
|
+
return bundleMembers.has(element.member.slice(0, dotIdx));
|
|
49
|
+
};
|
|
50
|
+
const warnBundleDeletions = (bundleMembers) => {
|
|
51
|
+
if (!bundleMembers)
|
|
52
|
+
return [];
|
|
53
|
+
const message = new MessageService();
|
|
54
|
+
const warnings = [];
|
|
55
|
+
for (const bundleMember of bundleMembers) {
|
|
56
|
+
warnings.push(new Error(message.getMessage('warning.DigitalExperienceBundleDeletion', [
|
|
57
|
+
bundleMember,
|
|
58
|
+
])));
|
|
59
|
+
}
|
|
60
|
+
return warnings;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=bundleRollup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundleRollup.js","sourceRoot":"","sources":["../../src/utils/bundleRollup.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/changeSet.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChangeKind, type ManifestElement } from '../types/handlerResult.js';
|
|
2
2
|
import type { Manifest } from '../types/work.js';
|
|
3
3
|
export type RenamePair = Readonly<{
|
|
4
4
|
from: string;
|
|
5
5
|
to: string;
|
|
6
6
|
}>;
|
|
7
|
+
export type RenameTriple = Readonly<{
|
|
8
|
+
type: string;
|
|
9
|
+
from: string;
|
|
10
|
+
to: string;
|
|
11
|
+
}>;
|
|
7
12
|
export type RenameBucket = Map<string, Map<string, RenamePair>>;
|
|
8
|
-
export declare const SHRINKABLE_TYPES: ReadonlySet<string>;
|
|
9
13
|
/**
|
|
10
14
|
* Domain object that collects every component change observed in a diff and
|
|
11
15
|
* derives the views consumed downstream:
|
|
@@ -20,23 +24,20 @@ export declare const SHRINKABLE_TYPES: ReadonlySet<string>;
|
|
|
20
24
|
* sub-elements. The xml manifests MUST route on `target` (the deployment
|
|
21
25
|
* contract); `changeKind` only drives the review-oriented JSON bucket.
|
|
22
26
|
*
|
|
23
|
-
* Insertion goes through `
|
|
24
|
-
*
|
|
27
|
+
* Insertion goes through `ChangeSet.from`, for both handler output and
|
|
28
|
+
* rename triples. Views are pure projections.
|
|
25
29
|
*/
|
|
26
30
|
export default class ChangeSet {
|
|
27
31
|
private readonly byTarget;
|
|
28
32
|
private readonly byKind;
|
|
29
|
-
private readonly byCoord;
|
|
30
33
|
private readonly renames;
|
|
31
|
-
static from(elements: readonly ManifestElement[]): ChangeSet;
|
|
32
|
-
|
|
33
|
-
removeMember(target: ManifestTarget, type: string, member: string): void;
|
|
34
|
+
static from(elements: readonly ManifestElement[], renames?: readonly RenameTriple[]): ChangeSet;
|
|
35
|
+
private _addElement;
|
|
34
36
|
toElements(): ManifestElement[];
|
|
35
|
-
|
|
36
|
-
recordRename(type: string, from: string, to: string): void;
|
|
37
|
-
merge(other: ChangeSet): void;
|
|
37
|
+
private _recordRename;
|
|
38
38
|
forPackageManifest(): Manifest;
|
|
39
39
|
forDestructiveManifest(): Manifest;
|
|
40
|
+
isEmpty(): boolean;
|
|
40
41
|
byChangeKind(): Readonly<{
|
|
41
42
|
[ChangeKind.Add]: Manifest;
|
|
42
43
|
[ChangeKind.Modify]: Manifest;
|
|
@@ -44,7 +45,6 @@ export default class ChangeSet {
|
|
|
44
45
|
[ChangeKind.Rename]: RenameBucket;
|
|
45
46
|
}>;
|
|
46
47
|
private _addToManifest;
|
|
47
|
-
private _removeFromManifest;
|
|
48
48
|
private _cloneManifest;
|
|
49
49
|
private _renameTargetsByType;
|
|
50
50
|
private _renameSourcesByType;
|
|
@@ -52,6 +52,3 @@ export default class ChangeSet {
|
|
|
52
52
|
private _unionByType;
|
|
53
53
|
private _subtractByType;
|
|
54
54
|
}
|
|
55
|
-
import type { HandlerResult } from '../types/handlerResult.js';
|
|
56
|
-
export declare const emptyResult: () => HandlerResult;
|
|
57
|
-
export declare const mergeResults: (...results: HandlerResult[]) => HandlerResult;
|
package/lib/utils/changeSet.js
CHANGED
|
@@ -1,19 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { DIGITAL_EXPERIENCE_TYPE } from '../constant/metadataConstants.js';
|
|
3
2
|
import { ChangeKind, ManifestTarget, } from '../types/handlerResult.js';
|
|
4
3
|
const KEY_SEPARATOR = '\0';
|
|
5
4
|
const renameKey = (from, to) => `${from}${KEY_SEPARATOR}${to}`;
|
|
6
|
-
const coordKey = (target, type, member) => `${target}${KEY_SEPARATOR}${type}${KEY_SEPARATOR}${member}`;
|
|
7
|
-
// Types eligible for O(1) coordinate-keyed removal via `removeMember`. Each
|
|
8
|
-
// shrinkable element costs one extra `byCoord` entry on `addElement`, so the
|
|
9
|
-
// list is intentionally narrow — limited to the types a post-processor
|
|
10
|
-
// actually reshapes after handler emission. Add a type here when introducing
|
|
11
|
-
// a post-processor that needs to mutate the manifest for that type;
|
|
12
|
-
// `removeMember` on a type outside this list is a no-op (uniform with the
|
|
13
|
-
// "entry not in manifest" no-op semantics).
|
|
14
|
-
export const SHRINKABLE_TYPES = new Set([
|
|
15
|
-
DIGITAL_EXPERIENCE_TYPE,
|
|
16
|
-
]);
|
|
17
5
|
/**
|
|
18
6
|
* Domain object that collects every component change observed in a diff and
|
|
19
7
|
* derives the views consumed downstream:
|
|
@@ -28,8 +16,8 @@ export const SHRINKABLE_TYPES = new Set([
|
|
|
28
16
|
* sub-elements. The xml manifests MUST route on `target` (the deployment
|
|
29
17
|
* contract); `changeKind` only drives the review-oriented JSON bucket.
|
|
30
18
|
*
|
|
31
|
-
* Insertion goes through `
|
|
32
|
-
*
|
|
19
|
+
* Insertion goes through `ChangeSet.from`, for both handler output and
|
|
20
|
+
* rename triples. Views are pure projections.
|
|
33
21
|
*/
|
|
34
22
|
export default class ChangeSet {
|
|
35
23
|
byTarget = {
|
|
@@ -41,55 +29,33 @@ export default class ChangeSet {
|
|
|
41
29
|
[ChangeKind.Modify]: new Map(),
|
|
42
30
|
[ChangeKind.Delete]: new Map(),
|
|
43
31
|
};
|
|
44
|
-
// Reverse index `(target, type, member) → changeKind` populated only for
|
|
45
|
-
// SHRINKABLE_TYPES. Lets `removeMember` look up the kind in O(1) without
|
|
46
|
-
// requiring the caller to carry it through — ChangeSet owns kind tracking
|
|
47
|
-
// via `addElement`, so re-declaring it on removal is redundant work.
|
|
48
|
-
byCoord = new Map();
|
|
49
32
|
renames = new Map();
|
|
50
|
-
static from(elements) {
|
|
33
|
+
static from(elements, renames = []) {
|
|
51
34
|
const set = new ChangeSet();
|
|
52
35
|
for (const element of elements) {
|
|
53
|
-
set.
|
|
36
|
+
set._addElement(element);
|
|
37
|
+
}
|
|
38
|
+
for (const { type, from, to } of renames) {
|
|
39
|
+
set._recordRename(type, from, to);
|
|
54
40
|
}
|
|
55
41
|
return set;
|
|
56
42
|
}
|
|
57
43
|
// Precise insertion — respects the full (target, changeKind) discriminator.
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
|
|
44
|
+
// Private: the handler pipeline feeds ManifestElements through `from()`,
|
|
45
|
+
// which is the only remaining caller.
|
|
46
|
+
_addElement(element) {
|
|
61
47
|
this._addToManifest(this.byTarget[element.target], element.type, element.member);
|
|
62
48
|
this._addToManifest(this.byKind[element.changeKind], element.type, element.member);
|
|
63
|
-
// Stryker disable next-line ConditionalExpression -- equivalent: flipping the guard to `true` populates `byCoord` for non-shrinkable types too, but `removeMember` throws on those before reading `byCoord`, so the wider index has no observable consequence beyond heap usage (which is precisely the cost this gate exists to avoid).
|
|
64
|
-
if (SHRINKABLE_TYPES.has(element.type)) {
|
|
65
|
-
this.byCoord.set(coordKey(element.target, element.type, element.member), element.changeKind);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Coordinate-keyed inverse of `addElement` — removes a component from the
|
|
69
|
-
// target and kind indices without the caller having to know `changeKind`,
|
|
70
|
-
// which ChangeSet already tracks. Post-processors use it to reshape the
|
|
71
|
-
// manifest (e.g. collapsing entries covered by a coarser member). No-op when
|
|
72
|
-
// the entry isn't tracked in `byCoord` — either it was never added, or its
|
|
73
|
-
// type isn't in `SHRINKABLE_TYPES`. Renames are untouched in either case.
|
|
74
|
-
removeMember(target, type, member) {
|
|
75
|
-
const key = coordKey(target, type, member);
|
|
76
|
-
const kind = this.byCoord.get(key);
|
|
77
|
-
if (kind === undefined)
|
|
78
|
-
return;
|
|
79
|
-
this._removeFromManifest(this.byTarget[target], type, member);
|
|
80
|
-
this._removeFromManifest(this.byKind[kind], type, member);
|
|
81
|
-
this.byCoord.delete(key);
|
|
82
49
|
}
|
|
83
50
|
// Reconstructs the (target, type, member, changeKind) tuples by joining
|
|
84
51
|
// byTarget × byKind on (type, member). Production diff lines never insert the
|
|
85
52
|
// same (type, member) under two different changeKind values, so the join is
|
|
86
53
|
// unambiguous in practice. Most callers use the indexed views
|
|
87
54
|
// (forPackageManifest / forDestructiveManifest / byChangeKind); this method
|
|
88
|
-
// serves the ones that need the full per-element tuples —
|
|
89
|
-
// listing inserted elements
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// per pass, not per element.
|
|
55
|
+
// serves the ones that need the full per-element tuples — currently tests
|
|
56
|
+
// listing inserted elements. It is reconstructed on demand rather than
|
|
57
|
+
// maintained as a hot-path structure, so call it once per pass, not per
|
|
58
|
+
// element.
|
|
93
59
|
toElements() {
|
|
94
60
|
const targets = [
|
|
95
61
|
ManifestTarget.Package,
|
|
@@ -121,17 +87,7 @@ export default class ChangeSet {
|
|
|
121
87
|
}
|
|
122
88
|
return out;
|
|
123
89
|
}
|
|
124
|
-
|
|
125
|
-
// convention: Add/Modify target Package, Delete targets DestructiveChanges.
|
|
126
|
-
// Production handlers that diverge from this convention (e.g. InFileHandler
|
|
127
|
-
// treating a deleted container as an addition) MUST use addElement instead.
|
|
128
|
-
add(kind, type, member) {
|
|
129
|
-
const target = kind === ChangeKind.Delete
|
|
130
|
-
? ManifestTarget.DestructiveChanges
|
|
131
|
-
: ManifestTarget.Package;
|
|
132
|
-
this.addElement({ target, type, member, changeKind: kind });
|
|
133
|
-
}
|
|
134
|
-
recordRename(type, from, to) {
|
|
90
|
+
_recordRename(type, from, to) {
|
|
135
91
|
if (from === to)
|
|
136
92
|
return;
|
|
137
93
|
if (!this.renames.has(type)) {
|
|
@@ -139,41 +95,6 @@ export default class ChangeSet {
|
|
|
139
95
|
}
|
|
140
96
|
this.renames.get(type).set(renameKey(from, to), { from, to });
|
|
141
97
|
}
|
|
142
|
-
// Folds another ChangeSet's entries into this one. Used to combine
|
|
143
|
-
// per-handler / per-collector outputs into a single project-wide view.
|
|
144
|
-
// Mutates `this`; `other` is left untouched so the source can stay
|
|
145
|
-
// referentially shared if a caller needs the snapshot it represents.
|
|
146
|
-
merge(other) {
|
|
147
|
-
for (const target of [
|
|
148
|
-
ManifestTarget.Package,
|
|
149
|
-
ManifestTarget.DestructiveChanges,
|
|
150
|
-
]) {
|
|
151
|
-
for (const [type, members] of other.byTarget[target]) {
|
|
152
|
-
for (const member of members) {
|
|
153
|
-
this._addToManifest(this.byTarget[target], type, member);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
for (const kind of [
|
|
158
|
-
ChangeKind.Add,
|
|
159
|
-
ChangeKind.Modify,
|
|
160
|
-
ChangeKind.Delete,
|
|
161
|
-
]) {
|
|
162
|
-
for (const [type, members] of other.byKind[kind]) {
|
|
163
|
-
for (const member of members) {
|
|
164
|
-
this._addToManifest(this.byKind[kind], type, member);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
for (const [key, kind] of other.byCoord) {
|
|
169
|
-
this.byCoord.set(key, kind);
|
|
170
|
-
}
|
|
171
|
-
for (const [type, pairs] of other.renames) {
|
|
172
|
-
for (const { from, to } of pairs.values()) {
|
|
173
|
-
this.recordRename(type, from, to);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
98
|
forPackageManifest() {
|
|
178
99
|
return this._unionByType([
|
|
179
100
|
this.byTarget[ManifestTarget.Package],
|
|
@@ -187,6 +108,13 @@ export default class ChangeSet {
|
|
|
187
108
|
]);
|
|
188
109
|
return this._subtractByType(baseDeletes, this.forPackageManifest());
|
|
189
110
|
}
|
|
111
|
+
// Whether either manifest view would carry at least one member — the
|
|
112
|
+
// "did this run actually produce anything" signal callers need without
|
|
113
|
+
// reaching into both views themselves.
|
|
114
|
+
isEmpty() {
|
|
115
|
+
return (this.forPackageManifest().size === 0 &&
|
|
116
|
+
this.forDestructiveManifest().size === 0);
|
|
117
|
+
}
|
|
190
118
|
byChangeKind() {
|
|
191
119
|
// Rename participants move to the Rename bucket so every entry lives in
|
|
192
120
|
// exactly one user-visible bucket.
|
|
@@ -213,16 +141,6 @@ export default class ChangeSet {
|
|
|
213
141
|
}
|
|
214
142
|
manifest.get(type).add(member);
|
|
215
143
|
}
|
|
216
|
-
_removeFromManifest(manifest, type, member) {
|
|
217
|
-
// `removeMember` checks `byCoord` first, and `addElement` keeps `byCoord`,
|
|
218
|
-
// `byTarget`, and `byKind` in lockstep — so when this runs the type Set is
|
|
219
|
-
// guaranteed present. No defensive `?.` needed.
|
|
220
|
-
const members = manifest.get(type);
|
|
221
|
-
members.delete(member);
|
|
222
|
-
if (members.size === 0) {
|
|
223
|
-
manifest.delete(type);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
144
|
_cloneManifest(manifest) {
|
|
227
145
|
const clone = new Map();
|
|
228
146
|
for (const [type, members] of manifest) {
|
|
@@ -230,7 +148,7 @@ export default class ChangeSet {
|
|
|
230
148
|
}
|
|
231
149
|
return clone;
|
|
232
150
|
}
|
|
233
|
-
// `
|
|
151
|
+
// `_recordRename` always inserts at least one pair per type key, so the
|
|
234
152
|
// inner Set is non-empty by construction. No size check needed.
|
|
235
153
|
_renameTargetsByType() {
|
|
236
154
|
const result = new Map();
|
|
@@ -292,19 +210,4 @@ export default class ChangeSet {
|
|
|
292
210
|
return result;
|
|
293
211
|
}
|
|
294
212
|
}
|
|
295
|
-
export const emptyResult = () => ({
|
|
296
|
-
changes: new ChangeSet(),
|
|
297
|
-
copies: [],
|
|
298
|
-
warnings: [],
|
|
299
|
-
});
|
|
300
|
-
export const mergeResults = (...results) => {
|
|
301
|
-
const merged = new ChangeSet();
|
|
302
|
-
for (const r of results)
|
|
303
|
-
merged.merge(r.changes);
|
|
304
|
-
return {
|
|
305
|
-
changes: merged,
|
|
306
|
-
copies: results.flatMap(r => r.copies),
|
|
307
|
-
warnings: results.flatMap(r => r.warnings),
|
|
308
|
-
};
|
|
309
|
-
};
|
|
310
213
|
//# sourceMappingURL=changeSet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeSet.js","sourceRoot":"","sources":["../../src/utils/changeSet.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,
|
|
1
|
+
{"version":3,"file":"changeSet.js","sourceRoot":"","sources":["../../src/utils/changeSet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type CopyOperation, type HandlerResult } from '../types/handlerResult.js';
|
|
2
|
+
import ChangeSet, { type RenameTriple } from './changeSet.js';
|
|
3
|
+
export type ChangesAssemblyResult = Readonly<{
|
|
4
|
+
changes: ChangeSet;
|
|
5
|
+
copies: readonly CopyOperation[];
|
|
6
|
+
warnings: readonly Error[];
|
|
7
|
+
}>;
|
|
8
|
+
export declare const assembleChanges: (handlerResult: HandlerResult, postResult: HandlerResult, renameTriples: readonly RenameTriple[]) => ChangesAssemblyResult;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { mergeResults, } from '../types/handlerResult.js';
|
|
3
|
+
import { applyBundleRollup } from './bundleRollup.js';
|
|
4
|
+
import ChangeSet from './changeSet.js';
|
|
5
|
+
// Folds the handler pass and collector output into the single indexed read
|
|
6
|
+
// model consumed downstream. Renames fold in here — on the combined set
|
|
7
|
+
// (handler pass ∪ collectors), not the handler pass alone — because rename
|
|
8
|
+
// targets participate in forPackageManifest() and rename sources in
|
|
9
|
+
// forDestructiveManifest(), so folding renames any earlier would change
|
|
10
|
+
// which deletions get cancelled.
|
|
11
|
+
export const assembleChanges = (handlerResult, postResult, renameTriples) => {
|
|
12
|
+
const combinedResult = mergeResults(handlerResult, postResult);
|
|
13
|
+
const { keptElements, warnings: rollupWarnings } = applyBundleRollup(combinedResult.elements);
|
|
14
|
+
const changes = ChangeSet.from(keptElements, renameTriples); // built exactly once
|
|
15
|
+
return {
|
|
16
|
+
changes,
|
|
17
|
+
copies: combinedResult.copies,
|
|
18
|
+
warnings: [...combinedResult.warnings, ...rollupWarnings],
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=changesAssembly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changesAssembly.js","sourceRoot":"","sources":["../../src/utils/changesAssembly.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAGL,YAAY,GACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,SAAgC,MAAM,gBAAgB,CAAA;AAQ7D,2EAA2E;AAC3E,wEAAwE;AACxE,2EAA2E;AAC3E,oEAAoE;AACpE,wEAAwE;AACxE,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,aAA4B,EAC5B,UAAyB,EACzB,aAAsC,EACf,EAAE;IACzB,MAAM,cAAc,GAAG,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IAC9D,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAClE,cAAc,CAAC,QAAQ,CACxB,CAAA;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA,CAAC,qBAAqB;IAEjF,OAAO;QACL,OAAO;QACP,MAAM,EAAE,cAAc,CAAC,MAAM;QAC7B,QAAQ,EAAE,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,cAAc,CAAC;KAC1D,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import GitAdapter from '../adapter/GitAdapter.js';
|
|
2
2
|
import type { Config } from '../types/config.js';
|
|
3
|
-
import type { Work } from '../types/work.js';
|
|
4
3
|
import { MessageService } from './MessageService.js';
|
|
4
|
+
import type { SourceDirRejection } from './pathspec.js';
|
|
5
5
|
export default class ConfigValidator {
|
|
6
|
-
protected readonly work: Work;
|
|
7
6
|
protected readonly config: Config;
|
|
7
|
+
private readonly sourceRejections;
|
|
8
8
|
protected readonly gitAdapter: GitAdapter;
|
|
9
9
|
protected readonly message: MessageService;
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(config: Config, sourceRejections?: readonly SourceDirRejection[]);
|
|
11
11
|
protected _validateGitSha(): Promise<string[]>;
|
|
12
|
-
|
|
12
|
+
protected _validateSource(): string[];
|
|
13
|
+
validateConfig(): Promise<readonly Error[]>;
|
|
13
14
|
protected _validateChangesManifest(): Promise<string[]>;
|
|
14
|
-
protected _handleDefault(): Promise<
|
|
15
|
+
protected _handleDefault(): Promise<readonly Error[]>;
|
|
15
16
|
protected _getApiVersion(): Promise<void>;
|
|
16
|
-
protected _apiVersionDefault(): Promise<
|
|
17
|
+
protected _apiVersionDefault(): Promise<readonly Error[]>;
|
|
17
18
|
protected _resolveLatestSupportedVersion(): Promise<number | undefined>;
|
|
18
19
|
protected _sanitizeConfig(): void;
|
|
19
20
|
}
|