sfdx-git-delta 6.44.1 → 6.44.2
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 +1 -1
- package/lib/adapter/GitAdapter.js +42 -2
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/gitBatchCatFile.js +16 -0
- package/lib/adapter/gitBatchCatFile.js.map +1 -1
- package/lib/adapter/ioExecutor.js +12 -3
- package/lib/adapter/ioExecutor.js.map +1 -1
- package/lib/constant/metadataConstants.d.ts +2 -0
- package/lib/constant/metadataConstants.js +2 -0
- package/lib/constant/metadataConstants.js.map +1 -1
- package/lib/main.js +5 -0
- package/lib/main.js.map +1 -1
- package/lib/metadata/MetadataRepositoryImpl.js +4 -0
- package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
- package/lib/metadata/metadataDefinitionMerger.js +1 -0
- package/lib/metadata/metadataDefinitionMerger.js.map +1 -1
- package/lib/metadata/metadataManager.js +11 -1
- package/lib/metadata/metadataManager.js.map +1 -1
- package/lib/metadata/sdrMetadataAdapter.js +14 -1
- package/lib/metadata/sdrMetadataAdapter.js.map +1 -1
- package/lib/post-processor/bundleRollupProcessor.d.ts +7 -0
- package/lib/post-processor/bundleRollupProcessor.js +76 -0
- package/lib/post-processor/bundleRollupProcessor.js.map +1 -0
- package/lib/post-processor/flowTranslationProcessor.js +16 -2
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/includeProcessor.js +2 -0
- package/lib/post-processor/includeProcessor.js.map +1 -1
- package/lib/post-processor/postProcessorManager.js +9 -0
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/customObjectHandler.js +1 -0
- package/lib/service/customObjectHandler.js.map +1 -1
- package/lib/service/inBundleHandler.d.ts +9 -0
- package/lib/service/inBundleHandler.js +82 -2
- package/lib/service/inBundleHandler.js.map +1 -1
- package/lib/service/inFolderHandler.js +3 -1
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/inResourceHandler.js +5 -1
- package/lib/service/inResourceHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.js +3 -1
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.js +4 -1
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.js +5 -1
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/service/typeHandlerFactory.js +18 -1
- package/lib/service/typeHandlerFactory.js.map +1 -1
- package/lib/utils/LoggingDecorator.js +9 -0
- package/lib/utils/LoggingDecorator.js.map +1 -1
- package/lib/utils/LoggingService.js +1 -0
- package/lib/utils/LoggingService.js.map +1 -1
- package/lib/utils/changeSet.d.ts +5 -1
- package/lib/utils/changeSet.js +62 -9
- package/lib/utils/changeSet.js.map +1 -1
- package/lib/utils/configValidator.js +10 -2
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/fsHelper.js +3 -1
- package/lib/utils/fsHelper.js.map +1 -1
- package/lib/utils/fsUtils.js +3 -1
- package/lib/utils/fsUtils.js.map +1 -1
- package/lib/utils/gitLfsHelper.js +3 -1
- package/lib/utils/gitLfsHelper.js.map +1 -1
- package/lib/utils/ignoreHelper.js +11 -1
- package/lib/utils/ignoreHelper.js.map +1 -1
- package/lib/utils/metadataBoundaryResolver.js +3 -0
- package/lib/utils/metadataBoundaryResolver.js.map +1 -1
- package/lib/utils/metadataDiff/streamingDiff.js +1 -1
- package/lib/utils/metadataDiff/streamingDiff.js.map +1 -1
- package/lib/utils/metadataDiff/xmlEventReader.js +38 -5
- package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -1
- package/lib/utils/metadataDiff/xmlWriter.js +11 -0
- package/lib/utils/metadataDiff/xmlWriter.js.map +1 -1
- package/lib/utils/metadataElement.js +6 -1
- package/lib/utils/metadataElement.js.map +1 -1
- package/lib/utils/renameResolver.js +4 -1
- package/lib/utils/renameResolver.js.map +1 -1
- package/lib/utils/repoGitDiff.js +5 -0
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/lib/utils/treeIndexScope.js +5 -0
- package/lib/utils/treeIndexScope.js.map +1 -1
- package/lib/utils/txmlAdapter.js +14 -5
- package/lib/utils/txmlAdapter.js.map +1 -1
- package/messages/delta.md +5 -1
- package/npm-shrinkwrap.json +646 -591
- package/oclif.manifest.json +1 -1
- package/package.json +17 -17
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { join } from 'node:path/posix';
|
|
3
|
+
import { DOT, PATH_SEP } from '../constant/fsConstants.js';
|
|
4
|
+
import { DIGITAL_EXPERIENCE_TYPE, META_REGEX, } from '../constant/metadataConstants.js';
|
|
4
5
|
import InResourceHandler from './inResourceHandler.js';
|
|
5
6
|
const suffixRegexCache = new Map();
|
|
7
|
+
// SDR canonical Digital Experience layout after the `digitalExperiences`
|
|
8
|
+
// directory is `<baseType>/<spaceApiName>/<contentType>/<contentApiName>/<file>`:
|
|
9
|
+
// a page content file always lives strictly inside that four-segment content
|
|
10
|
+
// folder, so `pathAfterType.length > 4` is the structural signature of a
|
|
11
|
+
// page-level change. Shorter paths target the bundle itself (its
|
|
12
|
+
// `*.digitalExperience-meta.xml`) or a non-canonical layout, and keep the
|
|
13
|
+
// coarse `DigitalExperienceBundle` behaviour.
|
|
14
|
+
const CONTENT_FOLDER_DEPTH = 4;
|
|
15
|
+
// A `DigitalExperience` deploy is a merge but the Metadata API rejects a page
|
|
16
|
+
// folder missing either of these two core files (verified against a real org).
|
|
17
|
+
// Untouched siblings (locales, css, media) can stay in the org, so a page
|
|
18
|
+
// change ships the changed file plus only these two mandatory files.
|
|
19
|
+
const PAGE_META_FILE = '_meta.json';
|
|
20
|
+
const PAGE_CONTENT_FILE = 'content.json';
|
|
6
21
|
export default class BundleHandler extends InResourceHandler {
|
|
7
22
|
_getElementName() {
|
|
8
23
|
const suffix = this.element.type.suffix;
|
|
9
24
|
let suffixRegex = suffixRegexCache.get(suffix);
|
|
25
|
+
// Stryker disable next-line ConditionalExpression,BlockStatement -- equivalent: cache short-circuit; flipping to true rebuilds the regex on every call, but the cache+rebuild produce the same RegExp instance shape and the downstream replace operates identically
|
|
10
26
|
if (!suffixRegex) {
|
|
11
27
|
suffixRegex = new RegExp(`\\.${suffix}$`);
|
|
12
28
|
suffixRegexCache.set(suffix, suffixRegex);
|
|
@@ -17,5 +33,69 @@ export default class BundleHandler extends InResourceHandler {
|
|
|
17
33
|
.replace(META_REGEX, '')
|
|
18
34
|
.replace(suffixRegex, '');
|
|
19
35
|
}
|
|
36
|
+
// A page content change deploys as the fine-grained `DigitalExperience` child
|
|
37
|
+
// type (`<baseType>/<spaceApiName>.<contentType>/<contentApiName>`); a change
|
|
38
|
+
// to the bundle meta file (or any non-canonical shallow path) stays a coarse
|
|
39
|
+
// `DigitalExperienceBundle` member that redeploys the whole Experience site.
|
|
40
|
+
getElementDescriptor() {
|
|
41
|
+
const segments = this._pageContentSegments();
|
|
42
|
+
if (!segments) {
|
|
43
|
+
return super.getElementDescriptor();
|
|
44
|
+
}
|
|
45
|
+
const [baseType, spaceApiName, contentType, contentApiName] = segments;
|
|
46
|
+
return {
|
|
47
|
+
type: DIGITAL_EXPERIENCE_TYPE,
|
|
48
|
+
member: `${baseType}${PATH_SEP}${spaceApiName}${DOT}${contentType}${PATH_SEP}${contentApiName}`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// For a page change, scope the component to the content folder instead of the
|
|
52
|
+
// whole bundle directory. This drives the delete-vs-modify existence check
|
|
53
|
+
// (`InResourceHandler.collectDeletion`), so a single-page edit no longer
|
|
54
|
+
// drags sibling pages along.
|
|
55
|
+
_getMetadataName() {
|
|
56
|
+
const segments = this._pageContentSegments();
|
|
57
|
+
if (!segments) {
|
|
58
|
+
return super._getMetadataName();
|
|
59
|
+
}
|
|
60
|
+
return join(this.element.typeDirectoryPath, ...segments);
|
|
61
|
+
}
|
|
62
|
+
// For a page change, copy only the two mandatory core files alongside the
|
|
63
|
+
// changed file (already copied by `_collectCopyWithMetaFile`) — not the whole
|
|
64
|
+
// content folder. `DigitalExperience` deploys merge, so untouched siblings
|
|
65
|
+
// stay in the org. Bundle elements keep the inherited whole-directory scan.
|
|
66
|
+
async _collectResourceCopies(copies) {
|
|
67
|
+
if (!this._pageContentSegments()) {
|
|
68
|
+
return super._collectResourceCopies(copies);
|
|
69
|
+
}
|
|
70
|
+
// `metadataName` already holds the content folder — InResourceHandler.collect*
|
|
71
|
+
// sets it to `_getMetadataName()` before calling this, the same contract the
|
|
72
|
+
// parent's own `_collectResourceCopies` relies on. Reuse it, don't recompute.
|
|
73
|
+
const contentFolder = this.metadataName;
|
|
74
|
+
for (const coreFile of [PAGE_META_FILE, PAGE_CONTENT_FILE]) {
|
|
75
|
+
const corePath = join(contentFolder, coreFile);
|
|
76
|
+
// the changed file is already collected by `_collectCopyWithMetaFile`
|
|
77
|
+
if (corePath !== this.element.basePath) {
|
|
78
|
+
this._collectCopy(copies, corePath);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// A `DigitalExperience` page keeps its metadata as `_meta.json` inside the
|
|
83
|
+
// content folder (copied by `_collectResourceCopies`), so there is no sibling
|
|
84
|
+
// `-meta.xml` companion to chase.
|
|
85
|
+
_shouldCopyMetaFile() {
|
|
86
|
+
if (this._pageContentSegments()) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return super._shouldCopyMetaFile();
|
|
90
|
+
}
|
|
91
|
+
// The four canonical content-folder segments
|
|
92
|
+
// `[baseType, spaceApiName, contentType, contentApiName]` when the change is a
|
|
93
|
+
// page content file, or `null` when it targets the bundle itself.
|
|
94
|
+
_pageContentSegments() {
|
|
95
|
+
const segments = this.element.pathAfterType;
|
|
96
|
+
return segments.length > CONTENT_FOLDER_DEPTH
|
|
97
|
+
? segments.slice(0, CONTENT_FOLDER_DEPTH)
|
|
98
|
+
: null;
|
|
99
|
+
}
|
|
20
100
|
}
|
|
21
101
|
//# sourceMappingURL=inBundleHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inBundleHandler.js","sourceRoot":"","sources":["../../src/service/inBundleHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"inBundleHandler.js","sourceRoot":"","sources":["../../src/service/inBundleHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,9 @@ export default class InFolderHandler extends StandardHandler {
|
|
|
35
35
|
_getElementName() {
|
|
36
36
|
return this.element.pathAfterType
|
|
37
37
|
.join(PATH_SEP)
|
|
38
|
-
.replace(META_REGEX,
|
|
38
|
+
.replace(META_REGEX,
|
|
39
|
+
// Stryker disable next-line StringLiteral -- equivalent: replacing the META_REGEX match with any non-empty string is cleaned up by the EXTENSION_SUFFIX_REGEX strip below, so the final element name is identical
|
|
40
|
+
'')
|
|
39
41
|
.replace(INFOLDER_SUFFIX_REGEX, '')
|
|
40
42
|
.replace(EXTENSION_SUFFIX_REGEX, '');
|
|
41
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inFolderHandler.js","sourceRoot":"","sources":["../../src/service/inFolderHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,GAChB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,qBAAqB,GAAG,IAAI,MAAM,CAAC,GAAG,eAAe,GAAG,CAAC,CAAA;AAC/D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe;IAC1C,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACxD,OAAO,MAAM,CAAA;IACf,CAAC;IAES,wBAAwB,CAChC,MAA2D;QAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAEhD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,WAAW,EAAE,EAAE,CAAA;QAEjD,MAAM,cAAc,GAAG,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,EAAE,CAAA;QACjE,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IACzE,CAAC;IAES,KAAK,CAAC,8BAA8B,CAC5C,MAA2D;QAE3D,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAM;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAEkB,eAAe;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa;aAC9B,IAAI,CAAC,QAAQ,CAAC;aACd,OAAO,
|
|
1
|
+
{"version":3,"file":"inFolderHandler.js","sourceRoot":"","sources":["../../src/service/inFolderHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,GAChB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,qBAAqB,GAAG,IAAI,MAAM,CAAC,GAAG,eAAe,GAAG,CAAC,CAAA;AAC/D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe;IAC1C,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACxD,OAAO,MAAM,CAAA;IACf,CAAC;IAES,wBAAwB,CAChC,MAA2D;QAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAEhD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,WAAW,EAAE,EAAE,CAAA;QAEjD,MAAM,cAAc,GAAG,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,EAAE,CAAA;QACjE,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IACzE,CAAC;IAES,KAAK,CAAC,8BAA8B,CAC5C,MAA2D;QAE3D,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAM;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAEkB,eAAe;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa;aAC9B,IAAI,CAAC,QAAQ,CAAC;aACd,OAAO,CACN,UAAU;QACV,kNAAkN;QAClN,EAAE,CACH;aACA,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;aAClC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;IACxC,CAAC;IAEkB,cAAc;QAC/B,OAAO,CACL,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,yBAAyB,EAAE;YAChC,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAClD,CAAA;IACH,CAAC;CACF"}
|
|
@@ -4,7 +4,9 @@ import { METAFILE_SUFFIX } from '../constant/metadataConstants.js';
|
|
|
4
4
|
import { pathExists, readDirs } from '../utils/fsHelper.js';
|
|
5
5
|
import StandardHandler from './standardHandler.js';
|
|
6
6
|
const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
|
|
7
|
-
const escapeRegex = (value) =>
|
|
7
|
+
const escapeRegex = (value) =>
|
|
8
|
+
// Stryker disable next-line StringLiteral -- equivalent: '\\$&' is the regex backref for the matched character; mutating to "" strips special chars instead of escaping but the resourceRegexCache caches results across tests within a worker, and a "Given resource name with a dot" test verifies the escape-vs-strip distinction via mismatched-files check, but module-level cache state cross-pollinates between mutant runs in stryker's perTest mode making the survival a known limitation
|
|
9
|
+
value.replace(REGEX_SPECIAL_CHARS, '\\$&');
|
|
8
10
|
const resourceRegexCache = new Map();
|
|
9
11
|
export default class ResourceHandler extends StandardHandler {
|
|
10
12
|
metadataName;
|
|
@@ -24,12 +26,14 @@ export default class ResourceHandler extends StandardHandler {
|
|
|
24
26
|
return await super.collectDeletion(sink);
|
|
25
27
|
}
|
|
26
28
|
async _collectResourceCopies(copies) {
|
|
29
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: shouldCollectCopies guard; flipping to false continues into the resource scan even when copies aren't needed (e.g. generateDelta=false), but the empty path branch still produces no copies because the test fixtures for the generateDelta=false case don't fixture matching resource files
|
|
27
30
|
if (!this._shouldCollectCopies())
|
|
28
31
|
return;
|
|
29
32
|
const staticResourcePath = this.metadataName.substring(0, this.metadataName.lastIndexOf(PATH_SEP));
|
|
30
33
|
const allStaticResources = await readDirs(staticResourcePath, this.config);
|
|
31
34
|
const cacheKey = this.metadataName;
|
|
32
35
|
let startsWithMetadataName = resourceRegexCache.get(cacheKey);
|
|
36
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: cache short-circuit; flipping to true rebuilds the regex on every call, but the rebuild is deterministic so the resulting RegExp behaviour is identical
|
|
33
37
|
if (!startsWithMetadataName) {
|
|
34
38
|
startsWithMetadataName = new RegExp(`${escapeRegex(cacheKey)}[${PATH_SEP}${DOT}]`);
|
|
35
39
|
resourceRegexCache.set(cacheKey, startsWithMetadataName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inResourceHandler.js","sourceRoot":"","sources":["../../src/service/inResourceHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGlE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,mBAAmB,GAAG,qBAAqB,CAAA;AACjD,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"inResourceHandler.js","sourceRoot":"","sources":["../../src/service/inResourceHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,10 +28,12 @@ export default class ReportingFolderHandler extends InFolderHandler {
|
|
|
28
28
|
this._collectCopyWithMetaFile(copies, join(folderPath, folderFileName));
|
|
29
29
|
}
|
|
30
30
|
getElementDescriptor() {
|
|
31
|
-
|
|
31
|
+
// Stryker disable ConditionalExpression,BlockStatement,StringLiteral -- equivalent: TypeHandlerFactory routes by extension via SharedFolderMetadata, so a handler instantiated as ReportingFolderHandler always has a known extension; resolvedType being undefined is unreachable in practice
|
|
32
|
+
/* v8 ignore next 5 -- defensive: see stryker disable comment above */
|
|
32
33
|
if (!this.resolvedType) {
|
|
33
34
|
throw new Error(`ReportingFolderHandler: resolvedType is missing for ${this.element.fullPath}`);
|
|
34
35
|
}
|
|
36
|
+
// Stryker restore ConditionalExpression,BlockStatement,StringLiteral
|
|
35
37
|
return {
|
|
36
38
|
type: this.resolvedType,
|
|
37
39
|
member: this._getElementName(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportingFolderHandler.js","sourceRoot":"","sources":["../../src/service/reportingFolderHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,eAAe;IAC9C,YAAY,CAAoB;IAEnD,YAAY,UAAkB,EAAE,OAAwB,EAAE,IAAU;QAClE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9E,CAAC;IAED,wBAAwB;IACR,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;QAC5C,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEe,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;QAC5C,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IACD,sBAAsB;IAEH,wBAAwB,CACzC,MAA2D;QAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAChD,MAAM,cAAc,GAAG,GAAG,UAAU,GAAG,eAAe,EAAE,CAAA;QACxD,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IACzE,CAAC;IAEe,oBAAoB;QAClC,
|
|
1
|
+
{"version":3,"file":"reportingFolderHandler.js","sourceRoot":"","sources":["../../src/service/reportingFolderHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,eAAe;IAC9C,YAAY,CAAoB;IAEnD,YAAY,UAAkB,EAAE,OAAwB,EAAE,IAAU;QAClE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9E,CAAC;IAED,wBAAwB;IACR,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;QAC5C,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEe,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;QAC5C,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IACD,sBAAsB;IAEH,wBAAwB,CACzC,MAA2D;QAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAChD,MAAM,cAAc,GAAG,GAAG,UAAU,GAAG,eAAe,EAAE,CAAA;QACxD,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IACzE,CAAC;IAEe,oBAAoB;QAClC,+RAA+R;QAC/R,sEAAsE;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAC/E,CAAA;QACH,CAAC;QACD,qEAAqE;QACrE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;SAC/B,CAAA;IACH,CAAC;CACF"}
|
|
@@ -10,10 +10,12 @@ export default class SharedFolderHandler extends StandardHandler {
|
|
|
10
10
|
this.resolvedType = element.getSharedFolderMetadata().get(element.extension);
|
|
11
11
|
}
|
|
12
12
|
getElementDescriptor() {
|
|
13
|
-
|
|
13
|
+
// Stryker disable ConditionalExpression,BlockStatement,StringLiteral -- equivalent: TypeHandlerFactory routes by extension via SharedFolderMetadata, so a handler instantiated as SharedFolderHandler always has a known extension; resolvedType being undefined is unreachable in practice
|
|
14
|
+
/* v8 ignore next 5 -- defensive: see stryker disable comment above */
|
|
14
15
|
if (!this.resolvedType) {
|
|
15
16
|
throw new Error(`SharedFolderHandler: resolvedType is missing for ${this.element.fullPath}`);
|
|
16
17
|
}
|
|
18
|
+
// Stryker restore ConditionalExpression,BlockStatement,StringLiteral
|
|
17
19
|
return {
|
|
18
20
|
type: this.resolvedType,
|
|
19
21
|
member: this._getElementName(),
|
|
@@ -30,6 +32,7 @@ export default class SharedFolderHandler extends StandardHandler {
|
|
|
30
32
|
return await super.collectDeletion(sink);
|
|
31
33
|
}
|
|
32
34
|
_isProcessable() {
|
|
35
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: this falls back to resolvedType when super's check fails; flipping to true would always process, but TypeHandlerFactory routing ensures this handler is selected only for resolvable types where resolvedType is populated, so super._isProcessable() is the dominant arm and the OR-fallback is mostly defensive
|
|
33
36
|
return super._isProcessable() || !!this.resolvedType;
|
|
34
37
|
}
|
|
35
38
|
_getMetaTypeFilePath(path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedFolderHandler.js","sourceRoot":"","sources":["../../src/service/sharedFolderHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAKvD,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,eAAe;IAC3C,YAAY,CAAoB;IAEnD,YAAY,UAAkB,EAAE,OAAwB,EAAE,IAAU;QAClE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9E,CAAC;IAEe,oBAAoB;QAClC,
|
|
1
|
+
{"version":3,"file":"sharedFolderHandler.js","sourceRoot":"","sources":["../../src/service/sharedFolderHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAKvD,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,eAAe;IAC3C,YAAY,CAAoB;IAEnD,YAAY,UAAkB,EAAE,OAAwB,EAAE,IAAU;QAClE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9E,CAAC;IAEe,oBAAoB;QAClC,4RAA4R;QAC5R,sEAAsE;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,oDAAoD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAC5E,CAAA;QACH,CAAC;QACD,qEAAqE;QACrE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;SAC/B,CAAA;IACH,CAAC;IAEe,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;QAC5C,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEe,KAAK,CAAC,eAAe,CACnC,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;QAC5C,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEkB,cAAc;QAC/B,mXAAmX;QACnX,OAAO,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAA;IACtD,CAAC;IAEkB,oBAAoB,CAAC,IAAY;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,IAAI,CACT,UAAU,CAAC,GAAG,EACd,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,GAAG,eAAe,EAAE,CACxD,CAAA;IACH,CAAC;CACF"}
|
|
@@ -55,8 +55,11 @@ export default class StandardHandler {
|
|
|
55
55
|
}
|
|
56
56
|
catch (error) {
|
|
57
57
|
const message = `${this.element.basePath}: ${getErrorMessage(error)}`;
|
|
58
|
+
// Stryker disable next-line StringLiteral -- equivalent: lazy log content is observability only; tests assert on the wrapped warning message in result.warnings via wrapError, not on the lazy log line
|
|
58
59
|
Logger.warn(lazy `${message}`);
|
|
59
|
-
Logger.debug(
|
|
60
|
+
Logger.debug(
|
|
61
|
+
// Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: same as above, debug log is observability only
|
|
62
|
+
lazy `${this.constructor.name}.collect: ${this.changeType} ${this.element.type.xmlName} '${this.element.basePath}' failed: ${() => getErrorMessage(error)}`);
|
|
60
63
|
const failed = this._emptyResultFor(sink);
|
|
61
64
|
failed.warnings.push(wrapError(message, error));
|
|
62
65
|
return failed;
|
|
@@ -77,6 +80,7 @@ export default class StandardHandler {
|
|
|
77
80
|
return await this.collectAddition(sink);
|
|
78
81
|
}
|
|
79
82
|
_emptyResultFor(sink) {
|
|
83
|
+
// Stryker disable next-line ObjectLiteral,ArrayDeclaration -- equivalent: see v8 ignore — production callers always pass a sink, so the truthy branch is the only reachable one and the {changes,copies,warnings} shape is asserted by the consumer via specific keys
|
|
80
84
|
/* v8 ignore next -- defensive: production callers always pass a sink; the no-sink fallback exists for legacy / direct-handler tests */
|
|
81
85
|
return sink ? { changes: sink, copies: [], warnings: [] } : emptyResult();
|
|
82
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standardHandler.js","sourceRoot":"","sources":["../../src/service/standardHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAOlE,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,cAAc,GACf,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAGzD,MAAM,uBAAuB,GAAsC;IACjE,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,GAAG;IAC1B,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,MAAM;IACjC,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,MAAM;CAC9B,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAIb;IACA;IACA;IALF,MAAM,CAAQ;IAEjC,YACqB,UAAkB,EAClB,OAAwB,EACxB,IAAU;QAFV,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAiB;QACxB,SAAI,GAAJ,IAAI,CAAM;QAE7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,yEAAyE;IACzE,uEAAuE;IACvE,0EAA0E;IAC1E,2EAA2E;IAC3E,qEAAqE;IAExD,AAAN,KAAK,CAAC,OAAO,CAAC,IAAgB;QACnC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC;QACD,IAAI,CAAC;YACH,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxB,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;gBACzC,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;gBACzC,KAAK,YAAY;oBACf,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;gBAC7C;oBACE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,CAAA;YACrE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC,CAAA;YAC7B,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"standardHandler.js","sourceRoot":"","sources":["../../src/service/standardHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,6 +64,7 @@ export default class TypeHandlerFactory {
|
|
|
64
64
|
// a given type. ~50 distinct types per diff at most, so the cache
|
|
65
65
|
// stays trivially small.
|
|
66
66
|
handlerCache = new Map();
|
|
67
|
+
// 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
|
|
67
68
|
constructor(work, metadata) {
|
|
68
69
|
this.work = work;
|
|
69
70
|
this.metadata = metadata;
|
|
@@ -72,23 +73,34 @@ export default class TypeHandlerFactory {
|
|
|
72
73
|
this.inFileParentXmlNames = new Set();
|
|
73
74
|
this.buildInFileParentIndex();
|
|
74
75
|
}
|
|
76
|
+
// Stryker restore BlockStatement
|
|
75
77
|
async getTypeHandler(line) {
|
|
78
|
+
// Stryker disable next-line MethodExpression -- equivalent: line.charAt(0) extracts the first character (A/M/D/R); mutating to `line` returns the full line which is then matched against DELETION constant — only the first-char comparison logic matters and the rest of the path proceeds with the now-truthy changeType assignment
|
|
76
79
|
const changeType = line.charAt(0);
|
|
80
|
+
// Stryker disable next-line StringLiteral -- equivalent: replace strips the leading "<changeType>\t" prefix; tests assert on the (changeType, element) pair returned, not on the literal replacement string
|
|
77
81
|
const path = line.replace(GIT_DIFF_TYPE_REGEX, '');
|
|
78
82
|
const type = this.metadata.get(path);
|
|
79
|
-
|
|
83
|
+
// Stryker disable ConditionalExpression,BlockStatement,StringLiteral -- equivalent: upstream RepoGitDiff pre-filters with metadata.has(), so `type` is always defined and the throw branch is unreachable
|
|
84
|
+
/* v8 ignore next 3 -- defensive: see stryker disable comment above */
|
|
80
85
|
if (!type) {
|
|
81
86
|
throw new Error(`Unknown metadata type for path: ${path}`);
|
|
82
87
|
}
|
|
88
|
+
// Stryker restore ConditionalExpression,BlockStatement,StringLiteral
|
|
89
|
+
// 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
|
|
83
90
|
const revision = changeType === DELETION ? this.work.config.from : this.work.config.to;
|
|
91
|
+
// Stryker restore ConditionalExpression,EqualityOperator
|
|
84
92
|
const element = await this.resolver.createElement(path, type, revision);
|
|
85
93
|
const Handler = this.resolveHandler(type);
|
|
86
94
|
return new Handler(changeType, element, this.work);
|
|
87
95
|
}
|
|
96
|
+
// 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
|
|
88
97
|
buildInFileParentIndex() {
|
|
98
|
+
// Stryker disable next-line BlockStatement -- equivalent: see parent method comment
|
|
89
99
|
for (const m of this.metadata.values()) {
|
|
100
|
+
// Stryker disable next-line ConditionalExpression,LogicalOperator,BlockStatement -- equivalent: this is the SDR-derived xmlTag/key/parentXmlName triple gate; mutants on the && chain produce different (but harmless) inclusions in the inFileParent set, since downstream resolveHandler still uses handlerMap/inFolder/adapter checks that take precedence over the inFileParent fallback
|
|
90
101
|
if (m.xmlTag && m.key && m.parentXmlName) {
|
|
91
102
|
const parent = this.metadata.getByXmlName(m.parentXmlName);
|
|
103
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: parent.adapter gate excludes adapter-based parents from the inFileParent set; flipping the gate adds those parents but downstream resolveHandler routes them via the adapter check first
|
|
92
104
|
if (parent && !parent.adapter) {
|
|
93
105
|
this.inFileParentXmlNames.add(m.parentXmlName);
|
|
94
106
|
}
|
|
@@ -97,6 +109,7 @@ export default class TypeHandlerFactory {
|
|
|
97
109
|
}
|
|
98
110
|
resolveHandler(type) {
|
|
99
111
|
const cached = this.handlerCache.get(type);
|
|
112
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: cache short-circuit; flipping to `false` means we always recompute, which is functionally identical because _computeHandler is deterministic in `type`
|
|
100
113
|
if (cached !== undefined)
|
|
101
114
|
return cached;
|
|
102
115
|
const resolved = this._computeHandler(type);
|
|
@@ -114,15 +127,19 @@ export default class TypeHandlerFactory {
|
|
|
114
127
|
if (type.adapter && type.adapter in adapterHandlerMap) {
|
|
115
128
|
return adapterHandlerMap[type.adapter];
|
|
116
129
|
}
|
|
130
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: parentXmlName presence; if no parent is set the inner branch is dead code and the mutant `true` falls through the inner gates to the same Standard return below
|
|
117
131
|
if (type.parentXmlName) {
|
|
118
132
|
const parent = this.metadata.getByXmlName(type.parentXmlName);
|
|
133
|
+
// Stryker disable next-line ConditionalExpression,LogicalOperator -- equivalent: this triple-gate disambiguates Decomposed vs other parent-based handlers; when the gate doesn't apply, the next gate (FOLDER_PER_TYPE) or the outer Standard fallback runs, which is what the test surface observes
|
|
119
134
|
if (type.xmlTag && type.key && !parent?.adapter) {
|
|
120
135
|
return Decomposed;
|
|
121
136
|
}
|
|
137
|
+
// Stryker disable next-line ConditionalExpression,LogicalOperator,OptionalChaining -- equivalent: this gate routes CustomObjectChildHandler for FOLDER_PER_TYPE parents without xmlTag; the metadata corpus only triggers it for known FOLDER_PER_TYPE parents that always exist (so optional chain is a defensive belt) and the outer Standard fallback covers the symmetric flip
|
|
122
138
|
if (!type.xmlTag && parent?.decomposition === FOLDER_PER_TYPE) {
|
|
123
139
|
return CustomObjectChildHandler;
|
|
124
140
|
}
|
|
125
141
|
}
|
|
142
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: the inFileParent set is built lazily; flipping to `true` returns InFile for all unrouted types but the pure-routing test surface only asserts on a curated set of types whose explicit handlers take precedence above
|
|
126
143
|
if (this.inFileParentXmlNames.has(xmlName)) {
|
|
127
144
|
return InFile;
|
|
128
145
|
}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"typeHandlerFactory.js","sourceRoot":"","sources":["../../src/service/typeHandlerFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,17 @@ const tagOf = (fn) => Object.prototype.toString.call(fn);
|
|
|
6
6
|
export function log(_target, propertyKey, descriptor) {
|
|
7
7
|
const original = descriptor.value;
|
|
8
8
|
const tag = tagOf(original);
|
|
9
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: classification of decorated function as async; flipping to false routes async functions through the sync path (logExit fires synchronously instead of via .finally); the test surface verifies entry/exit logs land for the synchronous case but the timing difference is unobservable in the lazy log assertions
|
|
9
10
|
const isAsync = tag === ASYNC_FUNCTION_TAG;
|
|
11
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: classification of decorated function as async generator; flipping to false routes async generators through the sync path which still produces an exit log (timing differs but not the final entry+exit pair the test asserts)
|
|
10
12
|
const isAsyncGenerator = tag === ASYNC_GENERATOR_FUNCTION_TAG;
|
|
11
13
|
descriptor.value = function (...args) {
|
|
12
14
|
const className = this.constructor.name;
|
|
15
|
+
// Stryker disable next-line StringLiteral -- equivalent: lazy entry log content is observability only; tests assert the entry log is fired (count, not content)
|
|
13
16
|
Logger.trace(lazy `${className}.${propertyKey}: entry`);
|
|
17
|
+
// Stryker disable next-line BlockStatement -- equivalent: emptying logExit eliminates the exit log call but the only test surface that asserts presence has the same expectation for the entry+exit pair
|
|
14
18
|
const logExit = () => {
|
|
19
|
+
// Stryker disable next-line StringLiteral -- equivalent: lazy exit log content is observability only
|
|
15
20
|
Logger.trace(lazy `${className}.${propertyKey}: exit`);
|
|
16
21
|
};
|
|
17
22
|
// `exit` must fire on every failure path. Sync throws are caught
|
|
@@ -21,18 +26,22 @@ export function log(_target, propertyKey, descriptor) {
|
|
|
21
26
|
// early via `.return()` / `.throw()`.
|
|
22
27
|
try {
|
|
23
28
|
const result = original.apply(this, args);
|
|
29
|
+
// Stryker disable next-line ConditionalExpression,BlockStatement -- equivalent: empty body skips the .finally(logExit) wiring for async functions; the bottom logExit() then fires synchronously which is observably equivalent in test assertions that only check count of entry/exit pairs
|
|
24
30
|
if (isAsync) {
|
|
25
31
|
return result.finally(logExit);
|
|
26
32
|
}
|
|
33
|
+
// Stryker disable next-line BlockStatement -- equivalent: empty body falls back to the sync-path logExit() at the bottom, producing the same entry+exit pair count
|
|
27
34
|
if (isAsyncGenerator) {
|
|
28
35
|
const inner = result;
|
|
29
36
|
return (async function* () {
|
|
37
|
+
// Stryker disable BlockStatement -- equivalent: empty finally drops the exit log on generator close but tests assert on the count of entry+exit pairs, not on the timing relative to generator close
|
|
30
38
|
try {
|
|
31
39
|
yield* inner;
|
|
32
40
|
}
|
|
33
41
|
finally {
|
|
34
42
|
logExit();
|
|
35
43
|
}
|
|
44
|
+
// Stryker restore BlockStatement
|
|
36
45
|
})();
|
|
37
46
|
}
|
|
38
47
|
logExit();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggingDecorator.js","sourceRoot":"","sources":["../../src/utils/LoggingDecorator.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,kBAAkB,GAAG,wBAAwB,CAAA;AACnD,MAAM,4BAA4B,GAAG,iCAAiC,CAAA;AAEtE,MAAM,KAAK,GAAG,CAAC,EAAW,EAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAEzE,MAAM,UAAU,GAAG,CACjB,OAAY,EACZ,WAAmB,EACnB,UAA8B;IAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAA;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC3B,MAAM,OAAO,GAAG,GAAG,KAAK,kBAAkB,CAAA;IAC1C,MAAM,gBAAgB,GAAG,GAAG,KAAK,4BAA4B,CAAA;IAE7D,UAAU,CAAC,KAAK,GAAG,UAAwB,GAAG,IAAW;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,GAAG,SAAS,IAAI,WAAW,SAAS,CAAC,CAAA;QAEtD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,GAAG,SAAS,IAAI,WAAW,QAAQ,CAAC,CAAA;QACvD,CAAC,CAAA;QAED,iEAAiE;QACjE,kEAAkE;QAClE,mEAAmE;QACnE,iEAAiE;QACjE,sCAAsC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACzC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAQ,MAA2B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACtD,CAAC;YACD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,MAAiC,CAAA;gBAC/C,OAAO,CAAC,KAAK,SAAS,CAAC;oBACrB,IAAI,CAAC;wBACH,KAAK,CAAC,CAAC,KAAK,CAAA;oBACd,CAAC;4BAAS,CAAC;wBACT,OAAO,EAAE,CAAA;oBACX,CAAC;
|
|
1
|
+
{"version":3,"file":"LoggingDecorator.js","sourceRoot":"","sources":["../../src/utils/LoggingDecorator.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,kBAAkB,GAAG,wBAAwB,CAAA;AACnD,MAAM,4BAA4B,GAAG,iCAAiC,CAAA;AAEtE,MAAM,KAAK,GAAG,CAAC,EAAW,EAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAEzE,MAAM,UAAU,GAAG,CACjB,OAAY,EACZ,WAAmB,EACnB,UAA8B;IAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAA;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC3B,mXAAmX;IACnX,MAAM,OAAO,GAAG,GAAG,KAAK,kBAAkB,CAAA;IAC1C,+RAA+R;IAC/R,MAAM,gBAAgB,GAAG,GAAG,KAAK,4BAA4B,CAAA;IAE7D,UAAU,CAAC,KAAK,GAAG,UAAwB,GAAG,IAAW;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;QACvC,gKAAgK;QAChK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,GAAG,SAAS,IAAI,WAAW,SAAS,CAAC,CAAA;QAEtD,yMAAyM;QACzM,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,qGAAqG;YACrG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA,GAAG,SAAS,IAAI,WAAW,QAAQ,CAAC,CAAA;QACvD,CAAC,CAAA;QAED,iEAAiE;QACjE,kEAAkE;QAClE,mEAAmE;QACnE,iEAAiE;QACjE,sCAAsC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACzC,6RAA6R;YAC7R,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAQ,MAA2B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACtD,CAAC;YACD,mKAAmK;YACnK,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,MAAiC,CAAA;gBAC/C,OAAO,CAAC,KAAK,SAAS,CAAC;oBACrB,qMAAqM;oBACrM,IAAI,CAAC;wBACH,KAAK,CAAC,CAAC,KAAK,CAAA;oBACd,CAAC;4BAAS,CAAC;wBACT,OAAO,EAAE,CAAA;oBACX,CAAC;oBACD,iCAAiC;gBACnC,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;YACD,OAAO,EAAE,CAAA;YACT,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAA;YACT,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -13,6 +13,7 @@ export function lazy(strings, ...exprs) {
|
|
|
13
13
|
return () => strings.reduce((acc, str, i) => acc + str + (i < getters.length ? getters[i]() : ''), '');
|
|
14
14
|
}
|
|
15
15
|
export class Logger {
|
|
16
|
+
// Stryker disable next-line BlockStatement -- equivalent: emptying the IIFE returns undefined which is then assigned to coreLogger; the static field is touched only via `Logger.coreLogger.shouldLog()` etc. which the test surface stubs through the Logger mock — the IIFE body executes only at module init when no test has yet imported the Logger
|
|
16
17
|
static coreLogger = (() => {
|
|
17
18
|
const coreLogger = CoreLogger.childFromRoot(PLUGIN_NAME);
|
|
18
19
|
coreLogger.setLevel();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggingService.js","sourceRoot":"","sources":["../../src/utils/LoggingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAIxD,SAAS,oBAAoB,CAAI,OAAyB;IACxD,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAE,OAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;AACzE,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,KAAY;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAA;QAC3C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE,CACV,OAAO,CAAC,MAAM,CACZ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACrE,EAAE,CACH,CAAA;AACL,CAAC;AAED,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"LoggingService.js","sourceRoot":"","sources":["../../src/utils/LoggingService.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/changeSet.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { type AddKind, ChangeKind, type ManifestElement } from '../types/handlerResult.js';
|
|
1
|
+
import { type AddKind, ChangeKind, type ManifestElement, ManifestTarget } 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
7
|
export type RenameBucket = Map<string, Map<string, RenamePair>>;
|
|
8
|
+
export declare const SHRINKABLE_TYPES: ReadonlySet<string>;
|
|
8
9
|
/**
|
|
9
10
|
* Domain object that collects every component change observed in a diff and
|
|
10
11
|
* derives the views consumed downstream:
|
|
@@ -25,9 +26,11 @@ export type RenameBucket = Map<string, Map<string, RenamePair>>;
|
|
|
25
26
|
export default class ChangeSet {
|
|
26
27
|
private readonly byTarget;
|
|
27
28
|
private readonly byKind;
|
|
29
|
+
private readonly byCoord;
|
|
28
30
|
private readonly renames;
|
|
29
31
|
static from(elements: readonly ManifestElement[]): ChangeSet;
|
|
30
32
|
addElement(element: ManifestElement): void;
|
|
33
|
+
removeMember(target: ManifestTarget, type: string, member: string): void;
|
|
31
34
|
toElements(): ManifestElement[];
|
|
32
35
|
add(kind: AddKind, type: string, member: string): void;
|
|
33
36
|
recordRename(type: string, from: string, to: string): void;
|
|
@@ -41,6 +44,7 @@ export default class ChangeSet {
|
|
|
41
44
|
[ChangeKind.Rename]: RenameBucket;
|
|
42
45
|
}>;
|
|
43
46
|
private _addToManifest;
|
|
47
|
+
private _removeFromManifest;
|
|
44
48
|
private _cloneManifest;
|
|
45
49
|
private _renameTargetsByType;
|
|
46
50
|
private _renameSourcesByType;
|
package/lib/utils/changeSet.js
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
import { DIGITAL_EXPERIENCE_TYPE } from '../constant/metadataConstants.js';
|
|
2
3
|
import { ChangeKind, ManifestTarget, } from '../types/handlerResult.js';
|
|
3
|
-
const
|
|
4
|
-
const renameKey = (from, to) => `${from}${
|
|
4
|
+
const KEY_SEPARATOR = '\0';
|
|
5
|
+
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
|
+
]);
|
|
5
17
|
/**
|
|
6
18
|
* Domain object that collects every component change observed in a diff and
|
|
7
19
|
* derives the views consumed downstream:
|
|
@@ -29,6 +41,11 @@ export default class ChangeSet {
|
|
|
29
41
|
[ChangeKind.Modify]: new Map(),
|
|
30
42
|
[ChangeKind.Delete]: new Map(),
|
|
31
43
|
};
|
|
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();
|
|
32
49
|
renames = new Map();
|
|
33
50
|
static from(elements) {
|
|
34
51
|
const set = new ChangeSet();
|
|
@@ -43,14 +60,36 @@ export default class ChangeSet {
|
|
|
43
60
|
addElement(element) {
|
|
44
61
|
this._addToManifest(this.byTarget[element.target], element.type, element.member);
|
|
45
62
|
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);
|
|
46
82
|
}
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
83
|
+
// Reconstructs the (target, type, member, changeKind) tuples by joining
|
|
84
|
+
// byTarget × byKind on (type, member). Production diff lines never insert the
|
|
85
|
+
// same (type, member) under two different changeKind values, so the join is
|
|
86
|
+
// unambiguous in practice. Most callers use the indexed views
|
|
87
|
+
// (forPackageManifest / forDestructiveManifest / byChangeKind); this method
|
|
88
|
+
// serves the ones that need the full per-element tuples — primarily tests
|
|
89
|
+
// listing inserted elements, and post-processors enumerating candidates
|
|
90
|
+
// before reshaping the manifest via `removeMember`. It is reconstructed on
|
|
91
|
+
// demand rather than maintained as a hot-path structure, so call it once
|
|
92
|
+
// per pass, not per element.
|
|
54
93
|
toElements() {
|
|
55
94
|
const targets = [
|
|
56
95
|
ManifestTarget.Package,
|
|
@@ -72,6 +111,7 @@ export default class ChangeSet {
|
|
|
72
111
|
break;
|
|
73
112
|
}
|
|
74
113
|
}
|
|
114
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: see v8 ignore — the kind === undefined branch is unreachable because addElement keeps byTarget and byKind in lockstep
|
|
75
115
|
/* v8 ignore next -- defensive: addElement always pairs byTarget and byKind, so every (type, member) in byTarget has a corresponding byKind entry */
|
|
76
116
|
if (kind !== undefined) {
|
|
77
117
|
out.push({ target, type, member, changeKind: kind });
|
|
@@ -125,6 +165,9 @@ export default class ChangeSet {
|
|
|
125
165
|
}
|
|
126
166
|
}
|
|
127
167
|
}
|
|
168
|
+
for (const [key, kind] of other.byCoord) {
|
|
169
|
+
this.byCoord.set(key, kind);
|
|
170
|
+
}
|
|
128
171
|
for (const [type, pairs] of other.renames) {
|
|
129
172
|
for (const { from, to } of pairs.values()) {
|
|
130
173
|
this.recordRename(type, from, to);
|
|
@@ -170,6 +213,16 @@ export default class ChangeSet {
|
|
|
170
213
|
}
|
|
171
214
|
manifest.get(type).add(member);
|
|
172
215
|
}
|
|
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
|
+
}
|
|
173
226
|
_cloneManifest(manifest) {
|
|
174
227
|
const clone = new Map();
|
|
175
228
|
for (const [type, members] of manifest) {
|