sfdx-git-delta 7.3.0 → 7.4.1
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 +23 -4
- package/lib/adapter/GitAdapter.d.ts +9 -4
- package/lib/adapter/GitAdapter.js +147 -52
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/pathMatching.d.ts +2 -1
- package/lib/adapter/pathMatching.js +35 -3
- package/lib/adapter/pathMatching.js.map +1 -1
- package/lib/adapter/treeReader.d.ts +1 -0
- package/lib/adapter/treeReader.js +10 -0
- package/lib/adapter/treeReader.js.map +1 -1
- package/lib/adapter/tsgitErrorMap.d.ts +6 -3
- package/lib/adapter/tsgitErrorMap.js +55 -16
- package/lib/adapter/tsgitErrorMap.js.map +1 -1
- package/lib/constant/metadataConstants.d.ts +9 -1
- package/lib/constant/metadataConstants.js +17 -3
- package/lib/constant/metadataConstants.js.map +1 -1
- package/lib/main.js +66 -63
- package/lib/main.js.map +1 -1
- package/lib/metadata/MetadataRepositoryImpl.d.ts +14 -2
- package/lib/metadata/MetadataRepositoryImpl.js +192 -50
- package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
- package/lib/post-processor/includeProcessor.js +8 -9
- package/lib/post-processor/includeProcessor.js.map +1 -1
- package/lib/service/botHandler.js +1 -1
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/inBundleHandler.js +10 -23
- package/lib/service/inBundleHandler.js.map +1 -1
- package/lib/service/inFolderHandler.js +1 -2
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/objectTranslationHandler.d.ts +0 -1
- package/lib/service/objectTranslationHandler.js +11 -4
- package/lib/service/objectTranslationHandler.js.map +1 -1
- package/lib/types/runContext.d.ts +16 -5
- package/lib/types/runContext.js +17 -5
- package/lib/types/runContext.js.map +1 -1
- package/lib/utils/__mocks__/LoggingService.d.ts +2 -7
- package/lib/utils/__mocks__/LoggingService.js.map +1 -1
- package/lib/utils/changeSet.d.ts +1 -0
- package/lib/utils/changeSet.js +26 -1
- package/lib/utils/changeSet.js.map +1 -1
- package/lib/utils/configValidator.d.ts +14 -1
- package/lib/utils/configValidator.js +144 -72
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/errorUtils.d.ts +8 -0
- package/lib/utils/errorUtils.js +14 -0
- package/lib/utils/errorUtils.js.map +1 -1
- package/lib/utils/messageSanitizer.d.ts +1 -0
- package/lib/utils/messageSanitizer.js +46 -0
- package/lib/utils/messageSanitizer.js.map +1 -1
- package/lib/utils/metadataDiff/xmlEventReader.js +1 -1
- package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -1
- package/lib/utils/repoGitDiff.d.ts +17 -2
- package/lib/utils/repoGitDiff.js +93 -12
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/lib/utils/treeIndexScope.js +5 -14
- package/lib/utils/treeIndexScope.js.map +1 -1
- package/lib/utils/treeReaderBuilder.d.ts +8 -0
- package/lib/utils/treeReaderBuilder.js +34 -0
- package/lib/utils/treeReaderBuilder.js.map +1 -0
- package/lib/utils/txmlAdapter.js +1 -1
- package/lib/utils/txmlAdapter.js.map +1 -1
- package/messages/delta.md +16 -5
- package/oclif.manifest.json +1 -1
- package/package.json +105 -49
|
@@ -6,23 +6,41 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
8
|
import { parse } from 'node:path/posix';
|
|
9
|
-
import { DOT, PATH_SEP } from '../constant/fsConstants.js';
|
|
10
|
-
import {
|
|
9
|
+
import { DOT, EXTENSION_SUFFIX_REGEX, PATH_SEP, } from '../constant/fsConstants.js';
|
|
10
|
+
import { GIT_DIFF_TYPE_REGEX } from '../constant/gitConstants.js';
|
|
11
|
+
import { CONTENT_CONTAINER_ADAPTERS, CUSTOM_APPLICATION_SUFFIX, CUSTOM_METADATA_SUFFIX, DEFAULT_CONTAINER_DEPTH, DIGITAL_EXPERIENCE_ADAPTER, DIGITAL_EXPERIENCE_BUNDLE_DEPTH, DIGITAL_EXPERIENCE_CONTENT_DEPTH, EMAIL_SERVICES_FUNCTION_SUFFIX, INFOLDER_SUFFIX_REGEX, META_REGEX, METAFILE_SUFFIX, OBJECT_TRANSLATION_TYPE, OBJECT_TYPE, PERMISSIONSET_TYPE, SHARING_RULE_TYPE, SUB_OBJECT_TYPES, VIRTUAL_BOT_TYPE, WORKFLOW_TYPE, } from '../constant/metadataConstants.js';
|
|
11
12
|
import { log } from '../utils/LoggingDecorator.js';
|
|
12
|
-
|
|
13
|
+
// Callers hand over a git diff line as readily as a bare path, and the
|
|
14
|
+
// status prefix rides on the first segment — which is exactly where a
|
|
15
|
+
// repository laid out at its own root keeps the type directory — so nothing
|
|
16
|
+
// may compare segments before this has run.
|
|
17
|
+
const asFilePath = (path) => path.replace(GIT_DIFF_TYPE_REGEX, '');
|
|
18
|
+
// Shared by every scoped-name arm that owns a metaFile companion, so the
|
|
19
|
+
// `-meta.xml` strip is a single call site both `containerName` and
|
|
20
|
+
// `folderScopedName` route through.
|
|
21
|
+
const withoutMetaSuffix = (name) => name.replace(META_REGEX, '');
|
|
13
22
|
export class MetadataRepositoryImpl {
|
|
14
23
|
metadatas;
|
|
15
24
|
metadataPerExt;
|
|
16
25
|
metadataPerDir;
|
|
17
26
|
metadataPerXmlName;
|
|
18
27
|
// Memoizes get(path) results across the registry's lifetime. The lookup
|
|
19
|
-
// chain (split + extension + directory walk
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
28
|
+
// chain (split + extension + directory walk) is deterministic in `path`
|
|
29
|
+
// and the registry is read-only after construction, so a single cache
|
|
30
|
+
// here is safe and frees every consumer (has, getFullyQualifiedName,
|
|
31
|
+
// TypeHandlerFactory, computeTreeIndexScope, the RepoGitDiff filter
|
|
32
|
+
// chain) from repeating the work. Stores `undefined` negatives too —
|
|
33
|
+
// distinguished from "uncached" via .has().
|
|
25
34
|
pathCache = new Map();
|
|
35
|
+
// A suffix declared by more than one type is ambiguous for this registry
|
|
36
|
+
// only. Kept per instance rather than shared across the process, so a
|
|
37
|
+
// registry built from an additional user-supplied file cannot make an
|
|
38
|
+
// extension unsafe for every registry built after it.
|
|
39
|
+
unsafeExtensions = new Set([
|
|
40
|
+
CUSTOM_APPLICATION_SUFFIX,
|
|
41
|
+
EMAIL_SERVICES_FUNCTION_SUFFIX,
|
|
42
|
+
CUSTOM_METADATA_SUFFIX,
|
|
43
|
+
]);
|
|
26
44
|
constructor(metadatas) {
|
|
27
45
|
this.metadatas = metadatas;
|
|
28
46
|
this.metadataPerExt = new Map();
|
|
@@ -35,24 +53,36 @@ export class MetadataRepositoryImpl {
|
|
|
35
53
|
});
|
|
36
54
|
}
|
|
37
55
|
addSuffix(metadata) {
|
|
38
|
-
|
|
39
|
-
if (metadata.suffix) {
|
|
40
|
-
if (this.metadataPerExt.has(metadata.suffix)) {
|
|
41
|
-
MetadataRepositoryImpl.UNSAFE_EXTENSION.add(metadata.suffix);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this.metadataPerExt.set(metadata.suffix, metadata);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
56
|
+
this.registerSuffix(metadata);
|
|
47
57
|
this.addSharedFolderSuffix(metadata);
|
|
48
58
|
}
|
|
59
|
+
// Content clones must register through here, not through addSuffix: a clone
|
|
60
|
+
// keeps the same content[] as its source (see addSharedFolderSuffix below),
|
|
61
|
+
// so routing it back through addSuffix would re-enter addSharedFolderSuffix
|
|
62
|
+
// on that same content[] and recurse forever.
|
|
63
|
+
registerSuffix(metadata) {
|
|
64
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: suffix presence guard; flipping to false lets a suffix-less entry reach the Map.has lookup on undefined, which returns false and falls into metadataPerExt.set under an undefined key — a stray entry no test path queries by undefined suffix (the true flip registers nothing and is killed by the suite)
|
|
65
|
+
if (!metadata.suffix)
|
|
66
|
+
return;
|
|
67
|
+
if (this.metadataPerExt.has(metadata.suffix)) {
|
|
68
|
+
this.unsafeExtensions.add(metadata.suffix);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.metadataPerExt.set(metadata.suffix, metadata);
|
|
72
|
+
}
|
|
73
|
+
// content is kept on the clone (not stripped) because it is what tells the
|
|
74
|
+
// rest of the registry — ownsNestedPaths, via declaresNestedContent — that
|
|
75
|
+
// this suffix's type owns every path nested below the shared directory,
|
|
76
|
+
// not just the file itself. Dropping it here would make a component
|
|
77
|
+
// resolved through its content suffix indistinguishable from a type with no
|
|
78
|
+
// nested content, losing the folder segment that tells same-named
|
|
79
|
+
// components under different folders apart.
|
|
49
80
|
addSharedFolderSuffix(metadata) {
|
|
50
81
|
if (!metadata.content)
|
|
51
82
|
return;
|
|
52
|
-
const { content: _content, ...metadataWithoutContent } = metadata;
|
|
53
83
|
for (const sharedFolderMetadataDef of metadata.content) {
|
|
54
|
-
this.
|
|
55
|
-
...
|
|
84
|
+
this.registerSuffix({
|
|
85
|
+
...metadata,
|
|
56
86
|
suffix: sharedFolderMetadataDef.suffix,
|
|
57
87
|
});
|
|
58
88
|
}
|
|
@@ -73,19 +103,23 @@ export class MetadataRepositoryImpl {
|
|
|
73
103
|
return !!this.get(path);
|
|
74
104
|
}
|
|
75
105
|
get(path) {
|
|
106
|
+
return this.resolve(asFilePath(path));
|
|
107
|
+
}
|
|
108
|
+
// Split out of get() so the key rule, which already holds the stripped
|
|
109
|
+
// path, resolves it without stripping twice; every other caller goes
|
|
110
|
+
// through get() and its single strip.
|
|
111
|
+
resolve(filePath) {
|
|
76
112
|
// Stryker disable next-line ConditionalExpression -- equivalent: cache short-circuit; flipping to false re-runs the search chain which is deterministic in path, so the result is identical
|
|
77
|
-
if (this.pathCache.has(
|
|
78
|
-
return this.pathCache.get(
|
|
79
|
-
const parts =
|
|
80
|
-
const result = this.searchByExtension(parts) ??
|
|
81
|
-
|
|
82
|
-
this.searchByXmlName(path);
|
|
83
|
-
this.pathCache.set(path, result);
|
|
113
|
+
if (this.pathCache.has(filePath))
|
|
114
|
+
return this.pathCache.get(filePath);
|
|
115
|
+
const parts = filePath.split(PATH_SEP);
|
|
116
|
+
const result = this.searchByExtension(parts) ?? this.searchByDirectory(parts);
|
|
117
|
+
this.pathCache.set(filePath, result);
|
|
84
118
|
return result;
|
|
85
119
|
}
|
|
86
120
|
searchByExtension(parts) {
|
|
87
121
|
const extension = parse(parts[parts.length - 1].replace(METAFILE_SUFFIX, '')).ext.replace(DOT, '');
|
|
88
|
-
if (
|
|
122
|
+
if (this.unsafeExtensions.has(extension)) {
|
|
89
123
|
return;
|
|
90
124
|
}
|
|
91
125
|
return this.metadataPerExt.get(extension);
|
|
@@ -113,11 +147,16 @@ export class MetadataRepositoryImpl {
|
|
|
113
147
|
// directories.
|
|
114
148
|
ownsNestedPaths(metadata) {
|
|
115
149
|
return (metadata.inFolder ||
|
|
116
|
-
|
|
117
|
-
(metadata.adapter !== undefined &&
|
|
118
|
-
CONTENT_CONTAINER_ADAPTERS.has(metadata.adapter)) ||
|
|
150
|
+
this.isContentContainer(metadata) ||
|
|
119
151
|
this.declaresNestedContent(metadata));
|
|
120
152
|
}
|
|
153
|
+
// Extracted so componentScopedName can pick a container's nesting depth
|
|
154
|
+
// from its adapter without re-deriving what counts as a container.
|
|
155
|
+
isContentContainer(metadata) {
|
|
156
|
+
const adapter = metadata.adapter;
|
|
157
|
+
// Stryker disable next-line ConditionalExpression -- equivalent: Set.has(undefined) is already false, so the `!== undefined` operand changes no runtime outcome; it exists only to narrow string|undefined → string for the Set<string>.has call under strict mode
|
|
158
|
+
return adapter !== undefined && CONTENT_CONTAINER_ADAPTERS.has(adapter);
|
|
159
|
+
}
|
|
121
160
|
// A type declares nested content when its `content[]` lists suffix-keyed
|
|
122
161
|
// sub-types sharing one directory (Wave/Bot/Discovery/Moderation): the
|
|
123
162
|
// segments below that directory are then user-named content, not metadata
|
|
@@ -134,33 +173,122 @@ export class MetadataRepositoryImpl {
|
|
|
134
173
|
declaresNestedContent(metadata) {
|
|
135
174
|
return (metadata.content?.length ?? 0) > 0;
|
|
136
175
|
}
|
|
137
|
-
searchByXmlName(xmlName) {
|
|
138
|
-
return this.metadataPerXmlName.get(xmlName);
|
|
139
|
-
}
|
|
140
176
|
getByXmlName(xmlName) {
|
|
141
177
|
return this.metadataPerXmlName.get(xmlName);
|
|
142
178
|
}
|
|
143
179
|
getFullyQualifiedName(path) {
|
|
144
|
-
|
|
145
|
-
const type = this.
|
|
146
|
-
if (type
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
180
|
+
const filePath = asFilePath(path);
|
|
181
|
+
const type = this.resolve(filePath);
|
|
182
|
+
if (!type)
|
|
183
|
+
return parse(filePath).base;
|
|
184
|
+
if (MetadataRepositoryImpl.HOLDER_SCOPED_COMPOSED_TYPES.has(type.xmlName))
|
|
185
|
+
return this.holderScopedName(filePath, type);
|
|
186
|
+
if (MetadataRepositoryImpl.COMPOSED_TYPES.has(type.xmlName))
|
|
187
|
+
return this.composedTypeName(filePath);
|
|
188
|
+
if (!this.ownsNestedPaths(type))
|
|
189
|
+
return this.plainTypeName(filePath, type);
|
|
190
|
+
return this.componentScopedName(filePath, type);
|
|
191
|
+
}
|
|
192
|
+
// The type directory leads a plain key because a suffix belongs to no
|
|
193
|
+
// single type (`policy`, `settings`, `site`, `rule` are each declared by
|
|
194
|
+
// several) — it is the registry's directory, not the file's own, which is
|
|
195
|
+
// what lets a component moved between package directories key the same.
|
|
196
|
+
// Four live registry entries (AssignmentRule, AutoResponseRule,
|
|
197
|
+
// EscalationRule, ManagedTopic) carry a suffix and no directory: the key
|
|
198
|
+
// must never read `undefined/…`.
|
|
199
|
+
plainTypeName(path, type) {
|
|
200
|
+
const fileName = parse(path).base.replace(META_REGEX, '');
|
|
201
|
+
return type.directoryName ? `${type.directoryName}/${fileName}` : fileName;
|
|
202
|
+
}
|
|
203
|
+
// Anchored segment-wise on the first registry directory in the path: a
|
|
204
|
+
// substring search would also hit an unrelated directory that merely
|
|
205
|
+
// contains that name (`objects_backup/objects/…`) and drag it into the key.
|
|
206
|
+
// With no such segment findIndex answers -1 and slice(-1) keeps only the
|
|
207
|
+
// file name, so the fallback every other arm spells out needs no branch.
|
|
208
|
+
composedTypeName(path) {
|
|
209
|
+
const parts = path.split(PATH_SEP);
|
|
210
|
+
const typeIndex = parts.findIndex(part => this.metadataPerDir.has(part));
|
|
211
|
+
return parts.slice(typeIndex).join('');
|
|
212
|
+
}
|
|
213
|
+
// Depth 1 handles every decomposed spelling a holder can appear under: a
|
|
214
|
+
// single file directly beneath its type directory, or a child file nested
|
|
215
|
+
// several segments down — both collapse to the same one-segment container
|
|
216
|
+
// name, because the holder is one component regardless of how SFDX
|
|
217
|
+
// decomposed it into files.
|
|
218
|
+
holderScopedName(path, type) {
|
|
219
|
+
const parts = path.split(PATH_SEP);
|
|
220
|
+
const typeIndex = parts.lastIndexOf(type.directoryName);
|
|
221
|
+
if (typeIndex === -1)
|
|
222
|
+
return parse(path).base;
|
|
223
|
+
return this.containerName(parts, typeIndex, DEFAULT_CONTAINER_DEPTH);
|
|
224
|
+
}
|
|
225
|
+
// inFolder is checked before the container check because a type can be
|
|
226
|
+
// both inFolder and a content container (Document): adapter-first would
|
|
227
|
+
// truncate every Document to its folder, discarding the varying-extension
|
|
228
|
+
// files that folder owns.
|
|
229
|
+
componentScopedName(path, type) {
|
|
230
|
+
const parts = path.split(PATH_SEP);
|
|
231
|
+
const typeIndex = parts.lastIndexOf(type.directoryName);
|
|
232
|
+
if (typeIndex === -1)
|
|
233
|
+
return parse(path).base;
|
|
234
|
+
if (type.inFolder)
|
|
235
|
+
return this.folderScopedName(parts, typeIndex);
|
|
236
|
+
if (this.isContentContainer(type)) {
|
|
237
|
+
const nestedCount = parts.length - typeIndex - 1;
|
|
238
|
+
const depth = this.containerDepth(type.adapter, nestedCount);
|
|
239
|
+
return this.containerName(parts, typeIndex, depth);
|
|
153
240
|
}
|
|
154
|
-
return
|
|
241
|
+
return this.nestedContentName(parts, typeIndex, type);
|
|
242
|
+
}
|
|
243
|
+
// The `-meta.xml` companion sits outside the extension
|
|
244
|
+
// (`logo.png-meta.xml`), so it must fall away before the extension strip
|
|
245
|
+
// runs — the reverse order would leave it attached and never removed.
|
|
246
|
+
// The trailing `Folder` strip mirrors the folder handler's own name
|
|
247
|
+
// derivation, so the key cannot disagree with the descriptor for a name
|
|
248
|
+
// that happens to end in Folder.
|
|
249
|
+
folderScopedName(parts, typeIndex) {
|
|
250
|
+
return withoutMetaSuffix(parts.slice(typeIndex).join(PATH_SEP))
|
|
251
|
+
.replace(INFOLDER_SUFFIX_REGEX, '')
|
|
252
|
+
.replace(EXTENSION_SUFFIX_REGEX, '');
|
|
253
|
+
}
|
|
254
|
+
// A flat nested-content directory tells its families apart by extension
|
|
255
|
+
// (`wave/A.wdash` vs `wave/A.wapp`), so the extension is kept and any
|
|
256
|
+
// sub-directory is discarded, matching the descriptor. A
|
|
257
|
+
// FOLDER_SCOPED_TYPES member (VirtualBot) is instead named
|
|
258
|
+
// `<bot>.<version>` and needs every segment from the type directory down.
|
|
259
|
+
nestedContentName(parts, typeIndex, type) {
|
|
260
|
+
const tail = MetadataRepositoryImpl.FOLDER_SCOPED_TYPES.has(type.xmlName)
|
|
261
|
+
? parts.slice(typeIndex)
|
|
262
|
+
: [parts[typeIndex], parts.at(-1)];
|
|
263
|
+
return tail.join(PATH_SEP).replace(META_REGEX, '');
|
|
264
|
+
}
|
|
265
|
+
// A deeper remainder means the container is named by a directory, and a
|
|
266
|
+
// directory name is the component's whole name — stripping it would
|
|
267
|
+
// corrupt one that merely contains a dot (`lwc/foo.bar/…`). Only when the
|
|
268
|
+
// taken segments consume the whole remainder is the name actually a file,
|
|
269
|
+
// and only then are `-meta.xml` and the extension noise to strip away.
|
|
270
|
+
containerName(parts, typeIndex, depth) {
|
|
271
|
+
const nested = parts.slice(typeIndex + 1);
|
|
272
|
+
const name = [parts[typeIndex], ...nested.slice(0, depth)].join(PATH_SEP);
|
|
273
|
+
return depth >= nested.length
|
|
274
|
+
? withoutMetaSuffix(name).replace(EXTENSION_SUFFIX_REGEX, '')
|
|
275
|
+
: name;
|
|
276
|
+
}
|
|
277
|
+
// Only digitalExperience varies by depth: a page content file lives
|
|
278
|
+
// DIGITAL_EXPERIENCE_CONTENT_DEPTH segments below the bundle directory,
|
|
279
|
+
// while the bundle itself and any shallower/non-canonical layout share the
|
|
280
|
+
// coarser DIGITAL_EXPERIENCE_BUNDLE_DEPTH. Every other content-container
|
|
281
|
+
// adapter names its component by the single segment below its directory.
|
|
282
|
+
containerDepth(adapter, nestedCount) {
|
|
283
|
+
if (adapter !== DIGITAL_EXPERIENCE_ADAPTER)
|
|
284
|
+
return DEFAULT_CONTAINER_DEPTH;
|
|
285
|
+
return nestedCount > DIGITAL_EXPERIENCE_CONTENT_DEPTH
|
|
286
|
+
? DIGITAL_EXPERIENCE_CONTENT_DEPTH
|
|
287
|
+
: DIGITAL_EXPERIENCE_BUNDLE_DEPTH;
|
|
155
288
|
}
|
|
156
289
|
values() {
|
|
157
290
|
return this.metadatas;
|
|
158
291
|
}
|
|
159
|
-
static UNSAFE_EXTENSION = new Set([
|
|
160
|
-
CUSTOM_APPLICATION_SUFFIX,
|
|
161
|
-
EMAIL_SERVICES_FUNCTION_SUFFIX,
|
|
162
|
-
CUSTOM_METADATA_SUFFIX,
|
|
163
|
-
]);
|
|
164
292
|
static COMPOSED_TYPES = new Set([
|
|
165
293
|
OBJECT_TYPE,
|
|
166
294
|
OBJECT_TRANSLATION_TYPE,
|
|
@@ -169,6 +297,20 @@ export class MetadataRepositoryImpl {
|
|
|
169
297
|
SHARING_RULE_TYPE,
|
|
170
298
|
...SUB_OBJECT_TYPES,
|
|
171
299
|
]);
|
|
300
|
+
// A subset of COMPOSED_TYPES: PermissionSet and CustomObjectTranslation
|
|
301
|
+
// decompose into per-file children like every other composed type, but
|
|
302
|
+
// (unlike CustomObject/Workflow/SharingRules) their children are not
|
|
303
|
+
// distinct components — every file under one holder is the same
|
|
304
|
+
// PermissionSet or CustomObjectTranslation, so they key on the holder
|
|
305
|
+
// instead of the decomposed path.
|
|
306
|
+
static HOLDER_SCOPED_COMPOSED_TYPES = new Set([
|
|
307
|
+
PERMISSIONSET_TYPE,
|
|
308
|
+
OBJECT_TRANSLATION_TYPE,
|
|
309
|
+
]);
|
|
310
|
+
// Nested-content families sharing one flat directory are told apart by
|
|
311
|
+
// extension, except VirtualBot: a BotVersion member is `<bot>.<version>`,
|
|
312
|
+
// so its key must keep the bot folder that the extension alone would lose.
|
|
313
|
+
static FOLDER_SCOPED_TYPES = new Set([VIRTUAL_BOT_TYPE]);
|
|
172
314
|
}
|
|
173
315
|
__decorate([
|
|
174
316
|
log
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataRepositoryImpl.js","sourceRoot":"","sources":["../../src/metadata/MetadataRepositoryImpl.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;AAEZ,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,
|
|
1
|
+
{"version":3,"file":"MetadataRepositoryImpl.js","sourceRoot":"","sources":["../../src/metadata/MetadataRepositoryImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import { TAB } from '../constant/cliConstants.js';
|
|
|
10
10
|
import { ADDITION, DELETION } from '../constant/gitConstants.js';
|
|
11
11
|
import DiffLineInterpreter from '../service/diffLineInterpreter.js';
|
|
12
12
|
import { emptyResult, mergeResults } from '../types/handlerResult.js';
|
|
13
|
+
import { withMaskedTreeRevision } from '../types/runContext.js';
|
|
13
14
|
import { buildIncludeHelper } from '../utils/ignoreHelper.js';
|
|
14
15
|
import { log } from '../utils/LoggingDecorator.js';
|
|
15
16
|
import BaseProcessor, { emptyOutcome, } from './baseProcessor.js';
|
|
@@ -61,20 +62,18 @@ export default class IncludeProcessor extends BaseProcessor {
|
|
|
61
62
|
return emptyResult();
|
|
62
63
|
}
|
|
63
64
|
const firstSHA = await this.gitAdapter.getFirstCommitRef();
|
|
64
|
-
const lineProcessor = new DiffLineInterpreter(this.ctx);
|
|
65
65
|
const results = [];
|
|
66
66
|
if (includeLines.has(ADDITION)) {
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
to: this.config.to,
|
|
70
|
-
});
|
|
67
|
+
const additionProcessor = new DiffLineInterpreter(this.ctx);
|
|
68
|
+
const result = await additionProcessor.process(includeLines.get(ADDITION), { from: firstSHA, to: this.config.to });
|
|
71
69
|
results.push(result);
|
|
72
70
|
}
|
|
73
71
|
if (includeLines.has(DELETION)) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
// The pass's effective `to` becomes firstSHA: mask it so a container's
|
|
73
|
+
// liveness answers false by construction, not by firstSHA happening to
|
|
74
|
+
// be unindexed (see withMaskedTreeRevision).
|
|
75
|
+
const deletionProcessor = new DiffLineInterpreter(withMaskedTreeRevision(this.ctx, firstSHA));
|
|
76
|
+
const result = await deletionProcessor.process(includeLines.get(DELETION), { from: this.config.to, to: firstSHA });
|
|
78
77
|
results.push(result);
|
|
79
78
|
}
|
|
80
79
|
return mergeResults(...results);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"includeProcessor.js","sourceRoot":"","sources":["../../src/post-processor/includeProcessor.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;AACZ,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,mBAAmB,MAAM,mCAAmC,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"includeProcessor.js","sourceRoot":"","sources":["../../src/post-processor/includeProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import { parse } from 'node:path/posix';
|
|
3
3
|
import { DOT, PATH_SEP } from '../constant/fsConstants.js';
|
|
4
|
+
import { BOT_TYPE } from '../constant/metadataConstants.js';
|
|
4
5
|
import { ManifestTarget } from '../types/handlerResult.js';
|
|
5
6
|
import ShareFolderHandler from './sharedFolderHandler.js';
|
|
6
|
-
const BOT_TYPE = 'Bot';
|
|
7
7
|
const BOT_EXTENSION = 'bot';
|
|
8
8
|
export default class BotHandler extends ShareFolderHandler {
|
|
9
9
|
_getElementName() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"botHandler.js","sourceRoot":"","sources":["../../src/service/botHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"botHandler.js","sourceRoot":"","sources":["../../src/service/botHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,kBAAkB,MAAM,0BAA0B,CAAA;AAEzD,MAAM,aAAa,GAAG,KAAK,CAAA;AAE3B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,kBAAkB;IACrC,eAAe;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAA;QAClD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;QAClE,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAEe,KAAK,CAAC,eAAe;QACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAY,CAAA;QACzE,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,GACd,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAC/B,GAAG,QAAQ,GAAG,OAAO,IAAI,aAAa,EAAE,CAAA;QACxC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9C,OAAO;YACL,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,QAAQ;gBAClB;oBACE,MAAM,EAAE,cAAc,CAAC,OAAO;oBAC9B,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO;oBACf,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE;iBAClC;aACF;YACD,MAAM;SACP,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,31 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import { join } from 'node:path/posix';
|
|
3
3
|
import { DOT, PATH_SEP } from '../constant/fsConstants.js';
|
|
4
|
-
import { DIGITAL_EXPERIENCE_TYPE, META_REGEX, } from '../constant/metadataConstants.js';
|
|
4
|
+
import { DIGITAL_EXPERIENCE_BUNDLE_DEPTH, DIGITAL_EXPERIENCE_CONTENT_DEPTH, DIGITAL_EXPERIENCE_TYPE, META_REGEX, } from '../constant/metadataConstants.js';
|
|
5
5
|
import InResourceHandler from './inResourceHandler.js';
|
|
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
6
|
export default class BundleHandler extends InResourceHandler {
|
|
16
7
|
_getElementName() {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
// 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
|
|
20
|
-
if (!suffixRegex) {
|
|
21
|
-
suffixRegex = new RegExp(`\\.${suffix}$`);
|
|
22
|
-
suffixRegexCache.set(suffix, suffixRegex);
|
|
23
|
-
}
|
|
24
|
-
return this.element.pathAfterType
|
|
25
|
-
.slice(0, 2)
|
|
8
|
+
const name = this.element.pathAfterType
|
|
9
|
+
.slice(0, DIGITAL_EXPERIENCE_BUNDLE_DEPTH)
|
|
26
10
|
.join(PATH_SEP)
|
|
27
|
-
.replace(META_REGEX, '')
|
|
28
|
-
|
|
11
|
+
.replace(META_REGEX, '');
|
|
12
|
+
const suffixExtension = `${DOT}${this.element.type.suffix}`;
|
|
13
|
+
return name.endsWith(suffixExtension)
|
|
14
|
+
? name.slice(0, -suffixExtension.length)
|
|
15
|
+
: name;
|
|
29
16
|
}
|
|
30
17
|
// A page content change deploys as the fine-grained `DigitalExperience` child
|
|
31
18
|
// type (`<baseType>/<spaceApiName>.<contentType>/<contentApiName>`); a change
|
|
@@ -67,8 +54,8 @@ export default class BundleHandler extends InResourceHandler {
|
|
|
67
54
|
// page content file, or `null` when it targets the bundle itself.
|
|
68
55
|
_pageContentSegments() {
|
|
69
56
|
const segments = this.element.pathAfterType;
|
|
70
|
-
return segments.length >
|
|
71
|
-
? segments.slice(0,
|
|
57
|
+
return segments.length > DIGITAL_EXPERIENCE_CONTENT_DEPTH
|
|
58
|
+
? segments.slice(0, DIGITAL_EXPERIENCE_CONTENT_DEPTH)
|
|
72
59
|
: null;
|
|
73
60
|
}
|
|
74
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inBundleHandler.js","sourceRoot":"","sources":["../../src/service/inBundleHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EACL,uBAAuB,EACvB,UAAU,GACX,MAAM,kCAAkC,CAAA;AACzC,OAAO,iBAAiB,MAAM,wBAAwB,CAAA;AAEtD,MAAM,
|
|
1
|
+
{"version":3,"file":"inBundleHandler.js","sourceRoot":"","sources":["../../src/service/inBundleHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EACL,+BAA+B,EAC/B,gCAAgC,EAChC,uBAAuB,EACvB,UAAU,GACX,MAAM,kCAAkC,CAAA;AACzC,OAAO,iBAAiB,MAAM,wBAAwB,CAAA;AAEtD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,iBAAiB;IACvC,eAAe;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;aACpC,KAAK,CAAC,CAAC,EAAE,+BAA+B,CAAC;aACzC,IAAI,CAAC,QAAQ,CAAC;aACd,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QAC1B,MAAM,eAAe,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAO,EAAE,CAAA;QAC5D,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;YACxC,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAED,8EAA8E;IAC9E,8EAA8E;IAC9E,6EAA6E;IAC7E,6EAA6E;IAC7D,oBAAoB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,oBAAoB,EAAE,CAAA;QACrC,CAAC;QACD,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAA;QACtE,OAAO;YACL,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,GAAG,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,EAAE;SAChG,CAAA;IACH,CAAC;IAED,8EAA8E;IAC9E,2EAA2E;IAC3E,yEAAyE;IACzE,6BAA6B;IACV,gBAAgB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,QAAQ,CAAC,CAAA;IAC1D,CAAC;IAED,2EAA2E;IAC3E,8EAA8E;IAC9E,kCAAkC;IACf,mBAAmB;QACpC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAChC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,KAAK,CAAC,mBAAmB,EAAE,CAAA;IACpC,CAAC;IAED,6CAA6C;IAC7C,+EAA+E;IAC/E,kEAAkE;IAC1D,oBAAoB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAA;QAC3C,OAAO,QAAQ,CAAC,MAAM,GAAG,gCAAgC;YACvD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gCAAgC,CAAC;YACrD,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;CACF"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import { join, parse } from 'node:path/posix';
|
|
3
3
|
import { EXTENSION_SUFFIX_REGEX, PATH_SEP } from '../constant/fsConstants.js';
|
|
4
|
-
import { INFOLDER_SUFFIX, META_REGEX, METAFILE_SUFFIX, } from '../constant/metadataConstants.js';
|
|
4
|
+
import { INFOLDER_SUFFIX, INFOLDER_SUFFIX_REGEX, META_REGEX, METAFILE_SUFFIX, } from '../constant/metadataConstants.js';
|
|
5
5
|
import { readDirs } from '../utils/fsHelper.js';
|
|
6
6
|
import StandardHandler from './standardHandler.js';
|
|
7
|
-
const INFOLDER_SUFFIX_REGEX = new RegExp(`${INFOLDER_SUFFIX}$`);
|
|
8
7
|
export default class InFolderHandler extends StandardHandler {
|
|
9
8
|
async collectAddition() {
|
|
10
9
|
const result = await super.collectAddition();
|
|
@@ -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;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,
|
|
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,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe;IAC1C,KAAK,CAAC,eAAe;QACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAA;QACjD,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAA;IAC9B,CAAC;IAES,wBAAwB,CAAC,MAAuB;QACxD,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,MAAuB;QAEvB,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,GAAG,CAAC,CAAA;QAE3D,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"}
|
|
@@ -35,8 +35,18 @@ export default class ObjectTranslationHandler extends ResourceHandler {
|
|
|
35
35
|
const outcome = await metadataDiff.run(path);
|
|
36
36
|
return outcome.writer;
|
|
37
37
|
}
|
|
38
|
+
// The parent objectTranslation file always sits in the changed file's own
|
|
39
|
+
// directory, named after the component. Deriving it from the component name
|
|
40
|
+
// rather than from a fixed path position covers both layouts SDR resolves to
|
|
41
|
+
// the same component: the sub-folder form
|
|
42
|
+
// (objectTranslations/Account-es/Account-es.objectTranslation-meta.xml, which
|
|
43
|
+
// also hosts the sibling fieldTranslation files) and the flat form
|
|
44
|
+
// (objectTranslations/Account-es.objectTranslation-meta.xml). A positional
|
|
45
|
+
// `parts.at(-2)` reads the type directory itself in the flat form, yielding
|
|
46
|
+
// objectTranslations/objectTranslations.objectTranslation-meta.xml — a path
|
|
47
|
+
// that matches nothing, so the file silently never reaches the package.
|
|
38
48
|
_getObjectTranslationPath() {
|
|
39
|
-
return `${parse(this.element.basePath).dir}${PATH_SEP}${this.
|
|
49
|
+
return `${parse(this.element.basePath).dir}${PATH_SEP}${this._getElementName()}.${OBJECT_TRANSLATION_META_XML_SUFFIX}`;
|
|
40
50
|
}
|
|
41
51
|
_delegateFileCopy() {
|
|
42
52
|
return !this.element.fullPath.endsWith(OBJECT_TRANSLATION_META_XML_SUFFIX);
|
|
@@ -48,8 +58,5 @@ export default class ObjectTranslationHandler extends ResourceHandler {
|
|
|
48
58
|
_shouldCopyMetaFile() {
|
|
49
59
|
return false;
|
|
50
60
|
}
|
|
51
|
-
_getElementName() {
|
|
52
|
-
return this.element.pathAfterType[0];
|
|
53
|
-
}
|
|
54
61
|
}
|
|
55
62
|
//# sourceMappingURL=objectTranslationHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectTranslationHandler.js","sourceRoot":"","sources":["../../src/service/objectTranslationHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAA;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,YAAY,MAAM,gCAAgC,CAAA;AACzD,OAAO,eAAe,MAAM,wBAAwB,CAAA;AACpD,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,eAAe;IACnD,KAAK,CAAC,eAAe;QACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAO,MAAM,CAAA;QAE/C,mFAAmF;QACnF,uFAAuF;QACvF,mGAAmG;QACnG,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,qBAAqB,CAAC,CAAA;QAC5E,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB,CAAC,eAAe;gBACvC,IAAI,EAAE,qBAAqB;gBAC3B,MAAM;aACP,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAA;IAC9B,CAAC;IAES,KAAK,CAAC,2BAA2B,CAAC,IAAY;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAA;QACzD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAA;IACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"objectTranslationHandler.js","sourceRoot":"","sources":["../../src/service/objectTranslationHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAA;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,YAAY,MAAM,gCAAgC,CAAA;AACzD,OAAO,eAAe,MAAM,wBAAwB,CAAA;AACpD,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,eAAe;IACnD,KAAK,CAAC,eAAe;QACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAO,MAAM,CAAA;QAE/C,mFAAmF;QACnF,uFAAuF;QACvF,mGAAmG;QACnG,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,qBAAqB,CAAC,CAAA;QAC5E,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB,CAAC,eAAe;gBACvC,IAAI,EAAE,qBAAqB;gBAC3B,MAAM;aACP,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAA;IAC9B,CAAC;IAES,KAAK,CAAC,2BAA2B,CAAC,IAAY;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAA;QACzD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAA;IACvB,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0CAA0C;IAC1C,8EAA8E;IAC9E,mEAAmE;IACnE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IAC9D,yBAAyB;QACjC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,kCAAkC,EAAE,CAAA;IACxH,CAAC;IAEkB,iBAAiB;QAClC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAA;IAC5E,CAAC;IAED,wEAAwE;IACxE,+EAA+E;IAC/E,6EAA6E;IAC7E,6DAA6D;IAC1C,mBAAmB;QACpC,OAAO,KAAK,CAAA;IACd,CAAC;CAOF"}
|
|
@@ -9,13 +9,24 @@ export type RunContext = Readonly<{
|
|
|
9
9
|
/**
|
|
10
10
|
* The single derive point for a pass that runs under overridden revisions
|
|
11
11
|
* (IncludeProcessor's ADDITION / DELETION re-entry). `trees` is deliberately
|
|
12
|
-
* carried through UNCHANGED:
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
12
|
+
* carried through UNCHANGED: this function only ever rebinds `config.from`/
|
|
13
|
+
* `config.to`, so a reader that already holds an index for the overridden
|
|
14
|
+
* revision keeps answering from it. The include DELETION pass needs the
|
|
15
|
+
* opposite of that — its liveness check must answer `false` regardless of
|
|
16
|
+
* what the reader holds for the pass's effective `config.to` — and gets that
|
|
17
|
+
* explicitly via `withMaskedTreeRevision` below, rather than by relying on
|
|
18
|
+
* this function to leave the revision unindexed.
|
|
17
19
|
*/
|
|
18
20
|
export declare const withRevisions: (ctx: RunContext, revisions?: {
|
|
19
21
|
from: string;
|
|
20
22
|
to: string;
|
|
21
23
|
}) => RunContext;
|
|
24
|
+
/**
|
|
25
|
+
* Sibling to `withRevisions`: masks one named revision out of `trees` so
|
|
26
|
+
* every tree-index-backed read at that revision answers as an unbuilt index
|
|
27
|
+
* would (`false`/`[]`), no matter what the underlying reader actually holds
|
|
28
|
+
* for it. Used to make the include DELETION pass's container-liveness check
|
|
29
|
+
* degrade unconditionally, instead of depending on the first commit
|
|
30
|
+
* happening to be unindexed.
|
|
31
|
+
*/
|
|
32
|
+
export declare const withMaskedTreeRevision: (ctx: RunContext, revision: string) => RunContext;
|