sfdx-git-delta 7.4.0 → 7.4.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.
Files changed (71) hide show
  1. package/README.md +22 -3
  2. package/lib/adapter/GitAdapter.d.ts +5 -3
  3. package/lib/adapter/GitAdapter.js +71 -32
  4. package/lib/adapter/GitAdapter.js.map +1 -1
  5. package/lib/adapter/pathMatching.d.ts +2 -1
  6. package/lib/adapter/pathMatching.js +35 -3
  7. package/lib/adapter/pathMatching.js.map +1 -1
  8. package/lib/adapter/treeReader.d.ts +1 -0
  9. package/lib/adapter/treeReader.js +10 -0
  10. package/lib/adapter/treeReader.js.map +1 -1
  11. package/lib/adapter/tsgitErrorMap.d.ts +5 -4
  12. package/lib/adapter/tsgitErrorMap.js +12 -5
  13. package/lib/adapter/tsgitErrorMap.js.map +1 -1
  14. package/lib/constant/metadataConstants.d.ts +12 -1
  15. package/lib/constant/metadataConstants.js +28 -3
  16. package/lib/constant/metadataConstants.js.map +1 -1
  17. package/lib/main.js +66 -63
  18. package/lib/main.js.map +1 -1
  19. package/lib/metadata/MetadataRepositoryImpl.d.ts +14 -2
  20. package/lib/metadata/MetadataRepositoryImpl.js +192 -50
  21. package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
  22. package/lib/post-processor/changesManifestProcessor.js +14 -1
  23. package/lib/post-processor/changesManifestProcessor.js.map +1 -1
  24. package/lib/post-processor/includeProcessor.js +8 -9
  25. package/lib/post-processor/includeProcessor.js.map +1 -1
  26. package/lib/service/botHandler.js +1 -1
  27. package/lib/service/botHandler.js.map +1 -1
  28. package/lib/service/inBundleHandler.js +10 -23
  29. package/lib/service/inBundleHandler.js.map +1 -1
  30. package/lib/service/inFolderHandler.js +1 -2
  31. package/lib/service/inFolderHandler.js.map +1 -1
  32. package/lib/service/objectTranslationHandler.d.ts +0 -1
  33. package/lib/service/objectTranslationHandler.js +11 -4
  34. package/lib/service/objectTranslationHandler.js.map +1 -1
  35. package/lib/types/runContext.d.ts +16 -5
  36. package/lib/types/runContext.js +17 -5
  37. package/lib/types/runContext.js.map +1 -1
  38. package/lib/utils/__mocks__/LoggingService.d.ts +2 -7
  39. package/lib/utils/__mocks__/LoggingService.js.map +1 -1
  40. package/lib/utils/changeSet.d.ts +4 -0
  41. package/lib/utils/changeSet.js +87 -37
  42. package/lib/utils/changeSet.js.map +1 -1
  43. package/lib/utils/configValidator.d.ts +11 -1
  44. package/lib/utils/configValidator.js +133 -80
  45. package/lib/utils/configValidator.js.map +1 -1
  46. package/lib/utils/errorUtils.d.ts +5 -0
  47. package/lib/utils/errorUtils.js +8 -0
  48. package/lib/utils/errorUtils.js.map +1 -1
  49. package/lib/utils/messageSanitizer.d.ts +1 -0
  50. package/lib/utils/messageSanitizer.js +46 -0
  51. package/lib/utils/messageSanitizer.js.map +1 -1
  52. package/lib/utils/metadataBoundaryResolver.d.ts +4 -0
  53. package/lib/utils/metadataBoundaryResolver.js +40 -29
  54. package/lib/utils/metadataBoundaryResolver.js.map +1 -1
  55. package/lib/utils/metadataDiff/deepEqualJson.js +51 -44
  56. package/lib/utils/metadataDiff/deepEqualJson.js.map +1 -1
  57. package/lib/utils/metadataDiff/xmlEventReader.js +60 -50
  58. package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -1
  59. package/lib/utils/repoGitDiff.d.ts +20 -2
  60. package/lib/utils/repoGitDiff.js +129 -35
  61. package/lib/utils/repoGitDiff.js.map +1 -1
  62. package/lib/utils/treeIndexScope.js +25 -37
  63. package/lib/utils/treeIndexScope.js.map +1 -1
  64. package/lib/utils/treeReaderBuilder.d.ts +8 -0
  65. package/lib/utils/treeReaderBuilder.js +34 -0
  66. package/lib/utils/treeReaderBuilder.js.map +1 -0
  67. package/lib/utils/txmlAdapter.js +1 -1
  68. package/lib/utils/txmlAdapter.js.map +1 -1
  69. package/messages/delta.md +16 -5
  70. package/oclif.manifest.json +1 -1
  71. package/package.json +90 -49
@@ -13,12 +13,22 @@ export default class ConfigValidator {
13
13
  protected _shaFailureMessage(error: unknown, shaParameter: ShaKey, shaValue: string): string;
14
14
  protected _validateSource(): string[];
15
15
  validateConfig(): Promise<readonly Error[]>;
16
+ private _assertSourceDirs;
17
+ private _validateInputsAndApiVersion;
18
+ private _collectInputErrors;
19
+ private _settleApiVersion;
20
+ private _configError;
16
21
  protected _resolveMergeBase(requestedFrom: string, requestedTo: string): Promise<void>;
22
+ protected _validateRepository(): Promise<string[]>;
17
23
  protected _validateChangesManifest(): Promise<string[]>;
18
24
  protected _handleDefault(): Promise<readonly Error[]>;
19
25
  protected _getApiVersion(): Promise<void>;
20
26
  protected _apiVersionDefault(): Promise<readonly Error[]>;
21
- protected _resolveLatestSupportedVersion(): Promise<number | undefined>;
27
+ protected _resolveLatestSupportedVersion(): Promise<number>;
28
+ private _lookUpLatestVersion;
29
+ private _refusal;
30
+ private _isPinned;
31
+ private _describeLookupFailure;
22
32
  protected _sanitizeConfig(): void;
23
33
  }
24
34
  export {};
@@ -11,13 +11,12 @@ import { SfProject } from '@salesforce/core';
11
11
  import GitAdapter from '../adapter/GitAdapter.js';
12
12
  import { GIT_FOLDER } from '../constant/gitConstants.js';
13
13
  import { getLatestSupportedVersion } from '../metadata/metadataManager.js';
14
- import { pushAll } from './arrayUtils.js';
15
- import { ConfigError, getErrorMessage, RepositoryRefusalError, } from './errorUtils.js';
14
+ import { ConfigError, getErrorMessage, NotACommitError, RepositoryRefusalError, } from './errorUtils.js';
16
15
  import { pathExists, sanitizePath } from './fsUtils.js';
17
16
  import { log } from './LoggingDecorator.js';
18
17
  import { Logger, lazy } from './LoggingService.js';
19
18
  import { MessageService } from './MessageService.js';
20
- import { sanitizeForMessage } from './messageSanitizer.js';
19
+ import { redactProxyCredentials, sanitizeForMessage, } from './messageSanitizer.js';
21
20
  const SHA_KEYS = ['from', 'to'];
22
21
  const SOURCE_DIR_REJECTION_MESSAGE_KEYS = {
23
22
  empty: 'error.SourceDirIsEmpty',
@@ -26,6 +25,16 @@ const SOURCE_DIR_REJECTION_MESSAGE_KEYS = {
26
25
  absolute: 'error.SourceDirIsAbsolute',
27
26
  escapes: 'error.SourceDirEscapesRepository',
28
27
  };
28
+ const isPositiveVersion = (version) => version > 0;
29
+ // Two values arrive unparsed: a JavaScript library caller's apiVersion, which
30
+ // the number type does not bind (e.g. '' or '67.0'), and sfdx-project.json's
31
+ // sourceApiVersion string. Parse the way the --api-version flag path does, so
32
+ // a value that does not parse to a positive version means "not provided"
33
+ // rather than rendering <version>.0</version>.
34
+ const toApiVersion = (value) => {
35
+ const parsed = parseInt(String(value), 10);
36
+ return isPositiveVersion(parsed) ? parsed : undefined;
37
+ };
29
38
  export default class ConfigValidator {
30
39
  config;
31
40
  sourceRejections;
@@ -42,12 +51,13 @@ export default class ConfigValidator {
42
51
  await Promise.all(SHA_KEYS.map(async (shaParameter) => {
43
52
  const shaValue = this.config[shaParameter];
44
53
  try {
45
- this.config[shaParameter] = await this.gitAdapter.parseRev(shaValue);
54
+ this.config[shaParameter] =
55
+ await this.gitAdapter.resolveCommit(shaValue);
46
56
  }
47
57
  catch (error) {
48
58
  Logger.debug(
49
59
  // Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: catch log content is observability only
50
- lazy `_validateGitSha: '${shaParameter}' = '${shaValue}' is not a valid git SHA: ${() => getErrorMessage(error)}`);
60
+ lazy `_validateGitSha: '${shaParameter}' = '${shaValue}' does not resolve to a commit: ${() => getErrorMessage(error)}`);
51
61
  errors.push(this._shaFailureMessage(error, shaParameter, shaValue));
52
62
  }
53
63
  }));
@@ -55,10 +65,20 @@ export default class ConfigValidator {
55
65
  }
56
66
  // A refusal is about the repository, not about either ref: reporting it
57
67
  // verbatim replaces two bogus "check the fetch depth" lines with the one
58
- // thing the user can act on.
68
+ // thing the user can act on. A non-commit is about the ref's KIND, not
69
+ // its existence: the fetch-depth hint would send the user to deepen a
70
+ // clone that is already complete, so it gets its own sentence. Both name
71
+ // shaValue — what the user typed — never the oid resolveCommit produced.
59
72
  _shaFailureMessage(error, shaParameter, shaValue) {
60
73
  if (error instanceof RepositoryRefusalError)
61
74
  return error.message;
75
+ if (error instanceof NotACommitError) {
76
+ return this.message.getMessage('error.ParameterIsNotCommit', [
77
+ shaParameter,
78
+ sanitizeForMessage(shaValue),
79
+ error.objectType,
80
+ ]);
81
+ }
62
82
  return this.message.getMessage('error.ParameterIsNotGitSHA', [
63
83
  shaParameter,
64
84
  sanitizeForMessage(shaValue),
@@ -71,45 +91,64 @@ export default class ConfigValidator {
71
91
  const requestedFrom = this.config.from;
72
92
  const requestedTo = this.config.to;
73
93
  this._sanitizeConfig();
74
- // Short-circuits before any git object is read: _validateGitSha below
75
- // calls parseRev, which opens the repository. A bad --source-dir is
76
- // the actionable error and the one that today produces a silent empty
77
- // manifest, so it is reported alone even if the SHAs are also invalid.
94
+ this._assertSourceDirs();
95
+ const warnings = await this._validateInputsAndApiVersion();
96
+ // Runs after the SHA validation above so a typo in either ref surfaces
97
+ // as the precise ParameterIsNotGitSHA message instead of the vaguer
98
+ // MergeBaseNotFound.
99
+ await this._resolveMergeBase(requestedFrom, requestedTo);
100
+ return warnings;
101
+ }
102
+ // Short-circuits before any git object is read: _validateGitSha below
103
+ // calls resolveCommit, which opens the repository. A bad --source-dir is
104
+ // the actionable error and the one that today produces a silent empty
105
+ // manifest, so it is reported alone even if the SHAs are also invalid.
106
+ _assertSourceDirs() {
78
107
  const sourceErrors = this._validateSource();
79
108
  if (sourceErrors.length > 0) {
80
109
  throw new ConfigError(sourceErrors.join(', '));
81
110
  }
82
- const [defaultWarnings, repoExists, gitErrors, changesManifestErrors] = await Promise.all([
83
- this._handleDefault(),
84
- pathExists(join(this.config.repo, GIT_FOLDER)),
111
+ }
112
+ async _validateInputsAndApiVersion() {
113
+ const [apiVersionOutcome, inputErrors] = await Promise.all([
114
+ this._settleApiVersion(),
115
+ this._collectInputErrors(),
116
+ ]);
117
+ // The refusal is about the environment, the input errors about what the
118
+ // user typed: report both in one run, the typing first.
119
+ if ('refusal' in apiVersionOutcome) {
120
+ throw this._configError([...inputErrors, apiVersionOutcome.refusal]);
121
+ }
122
+ if (inputErrors.length > 0) {
123
+ throw this._configError(inputErrors);
124
+ }
125
+ return apiVersionOutcome.warnings;
126
+ }
127
+ async _collectInputErrors() {
128
+ const errorGroups = await Promise.all([
129
+ this._validateRepository(),
85
130
  this._validateGitSha(),
86
131
  this._validateChangesManifest(),
87
132
  ]);
88
- const errors = [];
89
- if (!repoExists) {
90
- // Rendered from the adapter's own absolute repository key not
91
- // this.config.repo, which is only sanitizePath-normalized, never
92
- // resolved to absolute — so this collapses with the identical
93
- // RepositoryRefusalError message a same-repository parseRev failure
94
- // produces below, instead of reporting the missing repository twice
95
- // in two different forms.
96
- errors.push(this.message.getMessage('error.PathIsNotGit', [
97
- sanitizeForMessage(this.gitAdapter.repositoryKey),
98
- ]));
133
+ return errorGroups.flat();
134
+ }
135
+ // Only a ConfigError is a refusal to report alongside the input errors; any
136
+ // other rejection is a defect and propagates untouched.
137
+ async _settleApiVersion() {
138
+ try {
139
+ return { warnings: await this._handleDefault() };
99
140
  }
100
- pushAll(errors, gitErrors);
101
- pushAll(errors, changesManifestErrors);
102
- if (errors.length > 0) {
103
- // Two SHA keys against one repository produce the same refusal twice,
104
- // and a missing .git makes the config check and the engine say the
105
- // same sentence. Identical strings carry no extra information.
106
- throw new ConfigError([...new Set(errors)].join(', '));
141
+ catch (error) {
142
+ if (!(error instanceof ConfigError))
143
+ throw error;
144
+ return { refusal: error.message };
107
145
  }
108
- // Runs after the SHA validation above so a typo in either ref surfaces
109
- // as the precise ParameterIsNotGitSHA message instead of the vaguer
110
- // MergeBaseNotFound.
111
- await this._resolveMergeBase(requestedFrom, requestedTo);
112
- return defaultWarnings;
146
+ }
147
+ // Two SHA keys against one repository produce the same refusal twice, and a
148
+ // missing .git makes the config check and the engine say the same sentence.
149
+ // Identical strings carry no extra information.
150
+ _configError(errors) {
151
+ return new ConfigError([...new Set(errors)].join(', '));
113
152
  }
114
153
  // --merge-base resolves --from to the merge base of --from and --to (git
115
154
  // three-dot semantics) in place. requestedFrom/requestedTo are the
@@ -128,6 +167,20 @@ export default class ConfigValidator {
128
167
  }
129
168
  this.config.from = base;
130
169
  }
170
+ // Rendered from the adapter's own absolute repository key — not
171
+ // this.config.repo, which is only sanitizePath-normalized, never resolved to
172
+ // absolute — so this collapses with the identical RepositoryRefusalError
173
+ // message a same-repository resolveCommit failure produces, instead of
174
+ // reporting the missing repository twice in two different forms.
175
+ async _validateRepository() {
176
+ if (await pathExists(join(this.config.repo, GIT_FOLDER)))
177
+ return [];
178
+ return [
179
+ this.message.getMessage('error.PathIsNotGit', [
180
+ sanitizeForMessage(this.gitAdapter.repositoryKey),
181
+ ]),
182
+ ];
183
+ }
131
184
  // oclif cannot natively validate --changes-manifest (it uses a string flag
132
185
  // to allow the bare form). Replicate meaningful checks: if the path already
133
186
  // exists it must be a regular file; otherwise ENOENT is fine because
@@ -164,19 +217,19 @@ export default class ConfigValidator {
164
217
  }
165
218
  async _handleDefault() {
166
219
  await this._getApiVersion();
220
+ // A version the user pinned is emitted as pinned: capping it would need the
221
+ // network, and a manifest that changes with network reachability is one the
222
+ // user cannot reproduce.
223
+ if (this._isPinned())
224
+ return [];
167
225
  return await this._apiVersionDefault();
168
226
  }
169
227
  async _getApiVersion() {
170
- if (this.config.apiVersion !== undefined)
228
+ if (this._isPinned())
171
229
  return;
172
230
  try {
173
231
  const sfProject = await SfProject.resolve(this.config.repo);
174
- const projectApiVersion = sfProject
175
- .getSfProjectJson()
176
- .getContents().sourceApiVersion;
177
- if (projectApiVersion) {
178
- this.config.apiVersion = parseInt(projectApiVersion, 10);
179
- }
232
+ this.config.apiVersion = toApiVersion(sfProject.getSfProjectJson().getContents().sourceApiVersion);
180
233
  }
181
234
  catch (ex) {
182
235
  Logger.debug(
@@ -186,53 +239,53 @@ export default class ConfigValidator {
186
239
  }
187
240
  async _apiVersionDefault() {
188
241
  const latestVersion = await this._resolveLatestSupportedVersion();
189
- // Stryker disable next-line ConditionalExpression -- equivalent: undefined signals the lookup failed while a usable apiVersion is already set; flipping the guard would fall through to clamp against an undefined ceiling, which the offline test surface forbids
190
- if (latestVersion === undefined)
191
- return [];
192
- const warnings = [];
193
- // Stryker disable ConditionalExpression,LogicalOperator -- equivalent: this triple-AND gate ensures we only override a numeric, defined, above-latest apiVersion; flipping individual conditions to true falls into the override branch when apiVersion is undefined or NaN, but the second `if (apiVersion === undefined || isNaN())` block immediately resets to latestVersion, producing the same observable apiVersion in both arms (only the warning content differs, which the test surface doesn't disambiguate)
194
- if (this.config.apiVersion !== undefined &&
195
- !isNaN(this.config.apiVersion) &&
196
- this.config.apiVersion > latestVersion) {
197
- // Stryker restore ConditionalExpression,LogicalOperator
198
- warnings.push(new Error(this.message.getMessage('warning.ApiVersionOverridden', [
199
- String(this.config.apiVersion),
200
- String(latestVersion),
201
- ])));
202
- this.config.apiVersion = latestVersion;
203
- }
204
- // Stryker disable next-line ConditionalExpression -- equivalent: defaulting fallback when apiVersion is unset/NaN; flipping to false skips the default and the apiVersion stays as-is, but the only test fixtures with apiVersion already set hit the early-return at _getApiVersion start, so the default branch is unreachable for those test cases
205
- if (this.config.apiVersion === undefined || isNaN(this.config.apiVersion)) {
206
- this.config.apiVersion = latestVersion;
207
- warnings.push(new Error(this.message.getMessage('warning.ApiVersionDefaulted', [
242
+ this.config.apiVersion = latestVersion;
243
+ return [
244
+ new Error(this.message.getMessage('warning.ApiVersionDefaulted', [
208
245
  String(latestVersion),
209
- ])));
210
- }
211
- return warnings;
246
+ ])),
247
+ ];
212
248
  }
213
- // Resolves the latest supported API version, falling back gracefully when the
214
- // appexchange lookup is unreachable (offline/firewalled environments).
249
+ // Only an unpinned run looks the version up, so there is nothing to fall back
250
+ // to: a lookup that fails, or that answers with something that is not a
251
+ // positive version, refuses the run. This tool cannot vouch for a <version> it
252
+ // did not resolve, and a wrong one is authoritative at deploy time.
215
253
  async _resolveLatestSupportedVersion() {
254
+ const latestVersion = await this._lookUpLatestVersion();
255
+ if (isPositiveVersion(latestVersion))
256
+ return latestVersion;
257
+ throw this._refusal(this.message.getMessage('error.ApiVersionLookupUnusable', [
258
+ String(latestVersion),
259
+ ]));
260
+ }
261
+ async _lookUpLatestVersion() {
216
262
  try {
217
263
  return await getLatestSupportedVersion();
218
264
  }
219
265
  catch (ex) {
220
- // A usable apiVersion is already set: keep it, we just can't cap it.
221
- // Stryker disable ConditionalExpression -- equivalent: the '!== undefined' clause exists only for TS narrowing (isNaN requires a number); !isNaN already returns false for both undefined and NaN, so replacing the left operand with true preserves behavior for every reachable apiVersion
222
- if (this.config.apiVersion !== undefined &&
223
- !isNaN(this.config.apiVersion)) {
224
- // Stryker restore ConditionalExpression
225
- Logger.debug(
226
- // Stryker disable next-line StringLiteral -- equivalent: lazy log content is observability only
227
- lazy `_resolveLatestSupportedVersion: keeping provided apiVersion, latest version lookup failed: ${ex}`);
228
- return undefined;
229
- }
230
- throw new ConfigError(this.message.getMessage('error.ApiVersionRetrievalFailed', [
231
- getErrorMessage(ex),
232
- ]));
266
+ throw this._refusal(this._describeLookupFailure(ex));
233
267
  }
234
268
  }
269
+ _refusal(detail) {
270
+ return new ConfigError(this.message.getMessage('error.ApiVersionRetrievalFailed', [detail]));
271
+ }
272
+ _isPinned() {
273
+ return this.config.apiVersion !== undefined;
274
+ }
275
+ // SDR wraps got's RequestError as `cause`; its message carries the code
276
+ // (connect ECONNREFUSED …, connect ETIMEDOUT, getaddrinfo ENOTFOUND …), which is
277
+ // the only thing that tells a proxy misconfiguration from a firewall drop from DNS.
278
+ _describeLookupFailure(ex) {
279
+ const message = getErrorMessage(ex);
280
+ const cause = ex instanceof Error ? ex.cause : undefined;
281
+ if (!(cause instanceof Error))
282
+ return message;
283
+ // Redact before sanitising: the length cap could otherwise cut between the
284
+ // credentials and their '@', leaving a fragment the redaction cannot match.
285
+ return `${message} (${sanitizeForMessage(redactProxyCredentials(cause.message))})`;
286
+ }
235
287
  _sanitizeConfig() {
288
+ this.config.apiVersion = toApiVersion(this.config.apiVersion);
236
289
  this.config.repo = sanitizePath(this.config.repo);
237
290
  this.config.output = sanitizePath(this.config.output);
238
291
  this.config.ignore = sanitizePath(this.config.ignore);
@@ -1 +1 @@
1
- {"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../../src/utils/configValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../../src/utils/configValidator.ts"],"names":[],"mappings":"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"}
@@ -10,5 +10,10 @@ export declare class MetadataRegistryError extends SgdError {
10
10
  export declare class RepositoryRefusalError extends SgdError {
11
11
  constructor(message: string);
12
12
  }
13
+ export type NonCommitObjectType = 'tree' | 'blob';
14
+ export declare class NotACommitError extends SgdError {
15
+ readonly objectType: NonCommitObjectType;
16
+ constructor(label: string, objectType: NonCommitObjectType);
17
+ }
13
18
  export declare const getErrorMessage: (error: unknown) => string;
14
19
  export declare const wrapError: (message: string, cause: unknown) => SgdError;
@@ -23,6 +23,14 @@ export class RepositoryRefusalError extends SgdError {
23
23
  this.name = 'RepositoryRefusalError';
24
24
  }
25
25
  }
26
+ export class NotACommitError extends SgdError {
27
+ objectType;
28
+ constructor(label, objectType) {
29
+ super(`'${label}' does not resolve to a commit (it is a ${objectType})`);
30
+ this.objectType = objectType;
31
+ this.name = 'NotACommitError';
32
+ }
33
+ }
26
34
  export const getErrorMessage = (error) => {
27
35
  if (error instanceof Error) {
28
36
  return error.message;
@@ -1 +1 @@
1
- {"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAU,EAAE;IACxD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,KAAc,EAAY,EAAE;IACrE,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA"}
1
+ {"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF;AAOD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAGhC,UAAU;IAFrB,YACE,KAAa,EACJ,UAA+B;QAExC,KAAK,CAAC,IAAI,KAAK,2CAA2C,UAAU,GAAG,CAAC,CAAA;0BAF/D,UAAU;QAGnB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAU,EAAE;IACxD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,KAAc,EAAY,EAAE;IACrE,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA"}
@@ -1 +1,2 @@
1
+ export declare const redactProxyCredentials: (value: string) => string;
1
2
  export declare const sanitizeForMessage: (value: string) => string;
@@ -26,6 +26,52 @@ const escapeControlChar = (char) => {
26
26
  const codePoint = char.codePointAt(0);
27
27
  return `\\u{${codePoint.toString(16)}}`;
28
28
  };
29
+ // Some network errors echo the offending proxy verbatim, credentials included:
30
+ // proxy-agent's "Unsupported protocol for proxy URL: <url>" carries a URL's
31
+ // user:password userinfo, and pac-proxy-agent's "Failed to establish a socket
32
+ // connection to proxies: [...]" lists a PAC resolver's entries as written.
33
+ // Redact both before the value reaches a message; both patterns stay linear
34
+ // because they run on network-supplied text before any length cap.
35
+ //
36
+ // The URL userinfo match runs up to the last '@' before an authority terminator
37
+ // ('/', '?', '#') and deliberately crosses whitespace, because a URL parser
38
+ // accepts a password with a space in it; over-redacting a later '@' fails safe.
39
+ // The scheme is capped at 32 characters: an uncapped scheme backtracks
40
+ // quadratically on a long letter run.
41
+ const URL_USERINFO_REGEX = /([a-z][a-z\d+.-]{0,31}:\/{2,})[^/?#]*@/gi;
42
+ // A PAC entry has no scheme to anchor on, so its keyword anchors instead,
43
+ // matched case-insensitively because a mis-cased or unsupported entry (such as
44
+ // SOCKS5H) is rejected yet still echoed. pac-proxy-agent splits an entry on any
45
+ // whitespace but echoes the list through JSON.stringify, so the separator
46
+ // arrives either as whitespace or as a JSON escape (\t, \n, \r, \f, \u000b).
47
+ // The separator is consumed atomically (lookahead then backreference) so the
48
+ // engine can never hand it back to the userinfo run. That run stops at
49
+ // whitespace, at a closing quote and at an escaped separator, and reads any
50
+ // other backslash pair (such as an escaped quote in a password) as one
51
+ // character: a match stays inside its own entry, which keeps every other
52
+ // entry's host visible and the scan linear over a long echoed list. Ordinary
53
+ // text shaped like a keyword followed by "<word>@" is over-redacted, which
54
+ // fails safe.
55
+ const PAC_ENTRY_USERINFO_REGEX = /\b((?:PROXY|HTTPS?|SOCKS(?:4A?|5H?)?)(?=((?:\s|\\[tnrf]|\\u000b)+))\2)(?:[^\s"\\]|\\(?![tnrf]|u000b)\S)*@/gi;
56
+ // Still not covered, and why each stays open. A raw '/', '?' or '#' inside a
57
+ // password is echoed only under a scheme proxy-agent rejects, with nothing but
58
+ // digits before the delimiter; closing it would redact URL paths. A special
59
+ // scheme written with fewer than two slashes ("ftp:user:pass@host") reaches a
60
+ // message only when the value also carries a later "://", because
61
+ // proxy-from-env prefixes a scheme to any value without one; closing it would
62
+ // mean matching any "word:" followed by an '@' in ordinary message text.
63
+ // Entries that never parse as a working proxy are echoed yet may stay
64
+ // unredacted: a literal backslash escape used as the separator
65
+ // ("PROXY\\tuser:pass@host"), a password containing whitespace (the target
66
+ // then has no '@'), or a non-whitespace character before the keyword or as the
67
+ // separator. Letting the userinfo run cross escaped separators would cover a
68
+ // tab, newline, carriage return, form feed or vertical tab inside a password
69
+ // (a space arrives raw and stays uncovered either way), but it backtracks
70
+ // quadratically.
71
+ const REDACTED_USERINFO = '<redacted>';
72
+ export const redactProxyCredentials = (value) => value
73
+ .replace(URL_USERINFO_REGEX, `$1${REDACTED_USERINFO}@`)
74
+ .replace(PAC_ENTRY_USERINFO_REGEX, `$1${REDACTED_USERINFO}@`);
29
75
  export const sanitizeForMessage = (value) => {
30
76
  // Truncate on code points (not UTF-16 code units) before escaping: a
31
77
  // surrogate pair must never be split, and escaping only the already-
@@ -1 +1 @@
1
- {"version":3,"file":"messageSanitizer.js","sourceRoot":"","sources":["../../src/utils/messageSanitizer.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,yEAAyE;AACzE,qEAAqE;AACrE,2EAA2E;AAC3E,WAAW;AACX,MAAM,mBAAmB,GAAG,8BAA8B,CAAA;AAC1D,MAAM,eAAe,GAAG,KAAK,CAAA;AAC7B,MAAM,wBAAwB,GAAG,GAAG,CAAA;AACpC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,oEAAoE;AACpE,wEAAwE;AACxE,wEAAwE;AACxE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IACjD,mEAAmE;IACnE,2CAA2C;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAA;IACtC,OAAO,OAAO,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1D,qEAAqE;IACrE,qEAAqE;IACrE,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,wBAAwB,CAAA;IAChE,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC,KAAK,CAAA;IACT,wEAAwE;IACxE,oEAAoE;IACpE,kEAAkE;IAClE,6CAA6C;IAC7C,MAAM,OAAO,GAAG,MAAM;SACnB,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;SAChC,OAAO,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAA;IAClD,OAAO,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;AACjE,CAAC,CAAA"}
1
+ {"version":3,"file":"messageSanitizer.js","sourceRoot":"","sources":["../../src/utils/messageSanitizer.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,yEAAyE;AACzE,qEAAqE;AACrE,2EAA2E;AAC3E,WAAW;AACX,MAAM,mBAAmB,GAAG,8BAA8B,CAAA;AAC1D,MAAM,eAAe,GAAG,KAAK,CAAA;AAC7B,MAAM,wBAAwB,GAAG,GAAG,CAAA;AACpC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,oEAAoE;AACpE,wEAAwE;AACxE,wEAAwE;AACxE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IACjD,mEAAmE;IACnE,2CAA2C;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAA;IACtC,OAAO,OAAO,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAA;AACzC,CAAC,CAAA;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,mEAAmE;AACnE,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAChF,uEAAuE;AACvE,sCAAsC;AACtC,MAAM,kBAAkB,GAAG,0CAA0C,CAAA;AACrE,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,6EAA6E;AAC7E,6EAA6E;AAC7E,uEAAuE;AACvE,4EAA4E;AAC5E,uEAAuE;AACvE,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,cAAc;AACd,MAAM,wBAAwB,GAC5B,6GAA6G,CAAA;AAC/G,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,+DAA+D;AAC/D,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAC1E,iBAAiB;AACjB,MAAM,iBAAiB,GAAG,YAAY,CAAA;AAEtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAU,EAAE,CAC9D,KAAK;KACF,OAAO,CAAC,kBAAkB,EAAE,KAAK,iBAAiB,GAAG,CAAC;KACtD,OAAO,CAAC,wBAAwB,EAAE,KAAK,iBAAiB,GAAG,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1D,qEAAqE;IACrE,qEAAqE;IACrE,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,wBAAwB,CAAA;IAChE,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC,KAAK,CAAA;IACT,wEAAwE;IACxE,oEAAoE;IACpE,kEAAkE;IAClE,6CAA6C;IAC7C,MAAM,OAAO,GAAG,MAAM;SACnB,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;SAChC,OAAO,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAA;IAClD,OAAO,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;AACjE,CAAC,CAAA"}
@@ -11,6 +11,10 @@ export declare class MetadataBoundaryResolver {
11
11
  protected get trees(): TreeReader;
12
12
  createElement(path: string, metadataDef: Metadata, revision: string): Promise<MetadataElement>;
13
13
  protected scanAndCreateElement(path: string, metadataDef: Metadata, revision: string): Promise<MetadataElement>;
14
+ protected findNameUnderTypeDirectory(parts: string[], dirIndex: number, suffix: string, revision: string): string | null;
15
+ protected componentNamesUnder(typeDir: string, suffix: string, revision: string): Set<string>;
16
+ protected findNameInAncestors(path: string, parts: string[], revision: string): string | null;
17
+ protected siblingsOf(dir: string, revision: string): string[];
14
18
  protected isNameInPath(parts: string[], componentName: string): boolean;
15
19
  protected findComponentName(siblings: string[], parts: string[]): string | null;
16
20
  protected extractName(fileName: string, suffix: string): string;
@@ -45,42 +45,53 @@ export class MetadataBoundaryResolver {
45
45
  async scanAndCreateElement(path, metadataDef, revision) {
46
46
  const parts = path.split(PATH_SEP);
47
47
  const dirIndex = parts.lastIndexOf(metadataDef.directoryName);
48
- if (dirIndex >= 0 && metadataDef.suffix) {
49
- const typeDir = parts.slice(0, dirIndex + 1).join(PATH_SEP);
50
- const allFiles = this.trees.filesUnder(revision, typeDir);
51
- const metaSuffix = `.${metadataDef.suffix}${METAFILE_SUFFIX}`;
52
- const componentNames = new Set();
53
- for (const file of allFiles) {
54
- if (file.endsWith(metaSuffix)) {
55
- const fileName = file.split(PATH_SEP).pop();
56
- componentNames.add(this.extractName(fileName, metadataDef.suffix));
57
- }
58
- }
59
- const pathAfterType = parts.slice(dirIndex + 1);
60
- // Stryker disable next-line UpdateOperator -- equivalent: reverse-iterate from the second-to-last segment back to root; flipping i++ to i++ means the loop never enters (i starts at length-2, which is < length but i++ goes up while guard is i >= 0 which is always true) — but in practice the test paths have length 1-2 so the loop body executes 0-1 times, observably the same in either direction
61
- for (let i = pathAfterType.length - 2; i >= 0; i--) {
62
- if (componentNames.has(pathAfterType[i])) {
63
- return MetadataElement.fromScan(path, metadataDef, this.metadata, pathAfterType[i]);
64
- }
48
+ const componentName = dirIndex >= 0 && metadataDef.suffix
49
+ ? this.findNameUnderTypeDirectory(parts, dirIndex, metadataDef.suffix, revision)
50
+ : this.findNameInAncestors(path, parts, revision);
51
+ return MetadataElement.fromScan(path, metadataDef, this.metadata, componentName ?? parse(path).name);
52
+ }
53
+ findNameUnderTypeDirectory(parts, dirIndex, suffix, revision) {
54
+ const typeDir = parts.slice(0, dirIndex + 1).join(PATH_SEP);
55
+ const componentNames = this.componentNamesUnder(typeDir, suffix, revision);
56
+ const pathAfterType = parts.slice(dirIndex + 1);
57
+ // Stryker disable next-line UpdateOperator -- unaffordable rather than equivalent: with two or more segments after the type directory, i++ keeps `i >= 0` true forever and the mutant hangs until Stryker's timeout; with fewer, the loop never runs in either direction
58
+ for (let i = pathAfterType.length - 2; i >= 0; i--) {
59
+ if (componentNames.has(pathAfterType[i]))
60
+ return pathAfterType[i];
61
+ }
62
+ return null;
63
+ }
64
+ componentNamesUnder(typeDir, suffix, revision) {
65
+ const metaSuffix = `.${suffix}${METAFILE_SUFFIX}`;
66
+ const componentNames = new Set();
67
+ for (const file of this.trees.filesUnder(revision, typeDir)) {
68
+ if (file.endsWith(metaSuffix)) {
69
+ const fileName = file.split(PATH_SEP).pop();
70
+ componentNames.add(this.extractName(fileName, suffix));
65
71
  }
66
- return MetadataElement.fromScan(path, metadataDef, this.metadata, parse(path).name);
67
72
  }
73
+ return componentNames;
74
+ }
75
+ findNameInAncestors(path, parts, revision) {
68
76
  let currentDir = dirname(path);
69
- // Stryker disable next-line ConditionalExpression,LogicalOperator,BlockStatement,StringLiteral -- equivalent: directory walk termination; this loop walks up from the file's dirname to the repo root, emptying the body skips the walk and falls through to the post-loop fallback (which produces a generic MetadataElement); the test surface only exercises the walk path for nested directory metadata, and the fallback path is also tested
77
+ // Stryker disable next-line ConditionalExpression,LogicalOperator,BlockStatement,StringLiteral -- unaffordable rather than equivalent: an emptied body, the `''` literal, the `||` swap and the operand true-flip never let `currentDir` reach '.', so those mutants hang until Stryker's timeout (dirname('.') is '.'). The whole-condition false-flip is suppressed as a side effect; it skips the walk, and the tests asserting pathAfterType[0] from a walk would kill it
70
78
  while (currentDir && currentDir !== '.') {
71
- const cacheKey = `${revision}:${currentDir}`;
72
- let siblings = this.dirCache.get(cacheKey);
73
- if (siblings === undefined) {
74
- siblings = this.trees.children(revision, currentDir);
75
- this.dirCache.set(cacheKey, siblings);
76
- }
79
+ const siblings = this.siblingsOf(currentDir, revision);
77
80
  const componentName = this.findComponentName(siblings, parts);
78
- if (componentName) {
79
- return MetadataElement.fromScan(path, metadataDef, this.metadata, componentName);
80
- }
81
+ if (componentName)
82
+ return componentName;
81
83
  currentDir = dirname(currentDir);
82
84
  }
83
- return MetadataElement.fromScan(path, metadataDef, this.metadata, parse(path).name);
85
+ return null;
86
+ }
87
+ siblingsOf(dir, revision) {
88
+ const cacheKey = `${revision}:${dir}`;
89
+ let siblings = this.dirCache.get(cacheKey);
90
+ if (siblings === undefined) {
91
+ siblings = this.trees.children(revision, dir);
92
+ this.dirCache.set(cacheKey, siblings);
93
+ }
94
+ return siblings;
84
95
  }
85
96
  isNameInPath(parts, componentName) {
86
97
  return parts.some(part => part === componentName || part.startsWith(`${componentName}.`));
@@ -1 +1 @@
1
- {"version":3,"file":"metadataBoundaryResolver.js","sourceRoot":"","sources":["../../src/utils/metadataBoundaryResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadataBoundaryResolver.js","sourceRoot":"","sources":["../../src/utils/metadataBoundaryResolver.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;AACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAIlE,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,OAAO,wBAAwB;IAGJ,GAAG;IAFf,QAAQ,CAAuB;IAElD,YAA+B,GAAe;mBAAf,GAAG;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;IAC1B,CAAC;IAED,IAAc,KAAK;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;IACvB,CAAC;IAGY,AAAN,KAAK,CAAC,aAAa,CACxB,IAAY,EACZ,WAAqB,EACrB,QAAgB;QAEhB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1E,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,OAAO,CAAA;QAChE,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,OAAO,CAAA;QAElD,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBAChD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAO,CAAC,CAAA;gBACrE,IAAI,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,OAAO,OAAO,CAAA;gBAChB,CAAC;gBACD,OAAO,eAAe,CAAC,QAAQ,CAC7B,IAAI,EACJ,WAAW,EACX,IAAI,CAAC,QAAQ,EACb,aAAa,CACd,CAAA;YACH,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC/D,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,IAAY,EACZ,WAAqB,EACrB,QAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;QAC7D,MAAM,aAAa,GACjB,QAAQ,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM;YACjC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAC7B,KAAK,EACL,QAAQ,EACR,WAAW,CAAC,MAAM,EAClB,QAAQ,CACT;YACH,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAErD,OAAO,eAAe,CAAC,QAAQ,CAC7B,IAAI,EACJ,WAAW,EACX,IAAI,CAAC,QAAQ,EACb,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAClC,CAAA;IACH,CAAC;IAES,0BAA0B,CAClC,KAAe,EACf,QAAgB,EAChB,MAAc,EACd,QAAgB;QAEhB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC1E,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;QAC/C,yQAAyQ;QACzQ,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAES,mBAAmB,CAC3B,OAAe,EACf,MAAc,EACd,QAAgB;QAEhB,MAAM,UAAU,GAAG,IAAI,MAAM,GAAG,eAAe,EAAE,CAAA;QACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAG,CAAA;gBAC5C,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAA;IACvB,CAAC;IAES,mBAAmB,CAC3B,IAAY,EACZ,KAAe,EACf,QAAgB;QAEhB,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9B,8cAA8c;QAC9c,OAAO,UAAU,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC7D,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAA;YACvC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAES,UAAU,CAAC,GAAW,EAAE,QAAgB;QAChD,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAA;QACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAES,YAAY,CAAC,KAAe,EAAE,aAAqB;QAC3D,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,aAAa,GAAG,CAAC,CACvE,CAAA;IACH,CAAC;IAES,iBAAiB,CACzB,QAAkB,EAClB,KAAe;QAEf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAClD,IACE,eAAe,EAAE,MAAM;gBACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC,EAC9C,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;gBAC9D,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAES,WAAW,CAAC,QAAgB,EAAE,MAAc;QACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;IACxE,CAAC;CACF;AA5Ic;IADZ,GAAG;6DA4BH"}