@simplysf/simply-package 3.0.2 → 3.0.3

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 (31) hide show
  1. package/lib/commands/simply/package/dependencies/install.d.ts +1 -1
  2. package/lib/commands/simply/package/dependencies/install.js +1 -1
  3. package/lib/commands/simply/package/dependencies/install.js.map +1 -1
  4. package/lib/commands/simply/package/dependencies/manage.d.ts +1 -2
  5. package/lib/commands/simply/package/dependencies/manage.js +1 -3
  6. package/lib/commands/simply/package/dependencies/manage.js.map +1 -1
  7. package/lib/commands/simply/package/version/get.d.ts +1 -1
  8. package/lib/commands/simply/package/version/get.js +1 -1
  9. package/lib/commands/simply/package/version/get.js.map +1 -1
  10. package/package.json +4 -4
  11. package/lib/common/packageUtils.d.ts +0 -19
  12. package/lib/common/packageUtils.js +0 -43
  13. package/lib/common/packageUtils.js.map +0 -1
  14. package/lib/common/packageVersionLookup.d.ts +0 -56
  15. package/lib/common/packageVersionLookup.js +0 -141
  16. package/lib/common/packageVersionLookup.js.map +0 -1
  17. package/lib/common/packageVersionService.d.ts +0 -65
  18. package/lib/common/packageVersionService.js +0 -347
  19. package/lib/common/packageVersionService.js.map +0 -1
  20. package/lib/common/sfdxProjectService.d.ts +0 -19
  21. package/lib/common/sfdxProjectService.js +0 -160
  22. package/lib/common/sfdxProjectService.js.map +0 -1
  23. package/lib/schemas/manage/dependencyChange.d.ts +0 -20
  24. package/lib/schemas/manage/dependencyChange.js +0 -17
  25. package/lib/schemas/manage/dependencyChange.js.map +0 -1
  26. package/lib/schemas/manage/parsedDependency.d.ts +0 -26
  27. package/lib/schemas/manage/parsedDependency.js +0 -49
  28. package/lib/schemas/manage/parsedDependency.js.map +0 -1
  29. package/lib/schemas/sfdx-project/packageDirs.d.ts +0 -22
  30. package/lib/schemas/sfdx-project/packageDirs.js +0 -44
  31. package/lib/schemas/sfdx-project/packageDirs.js.map +0 -1
@@ -1,347 +0,0 @@
1
- /*
2
- * Copyright (c) 2026, Clay Chipps.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Package, Package2Fields } from '@salesforce/packaging';
17
- /**
18
- * Load packages and package versions from the Dev Hub and build a {@link PackageVersionService}
19
- * over them.
20
- *
21
- * @param connection - The Dev Hub connection to query.
22
- * @param project - The SFDX project, used by `Package.listVersions` for alias resolution.
23
- * @param filterIds - When provided, only loads packages/versions relevant to these IDs (plus the
24
- * packages owning any given `subscriberVersionIds`) instead of every package in the Dev Hub.
25
- * @returns A version service backed by the loaded packages/versions.
26
- */
27
- export async function buildVersionService(connection, project, filterIds) {
28
- let packages;
29
- let versions;
30
- if (filterIds) {
31
- const package2IdSet = new Set(filterIds.package2Ids);
32
- if (filterIds.subscriberVersionIds.length > 0) {
33
- const inClause = filterIds.subscriberVersionIds.map((id) => `'${id}'`).join(', ');
34
- const result = await connection.autoFetchQuery(`SELECT Package2Id FROM Package2Version WHERE SubscriberPackageVersionId IN (${inClause})`, { tooling: true });
35
- for (const rec of result.records) {
36
- package2IdSet.add(rec.Package2Id);
37
- }
38
- }
39
- const targetPackage2Ids = [...package2IdSet];
40
- if (targetPackage2Ids.length === 0) {
41
- packages = [];
42
- versions = [];
43
- }
44
- else {
45
- const apiVersion = connection.getApiVersion();
46
- const fields = Package2Fields.filter((f) => apiVersion >= '59.0' || f !== 'AppAnalyticsEnabled').filter((f) => apiVersion >= '66.0' || f !== 'RecommendedVersionId');
47
- const inClause = targetPackage2Ids.map((id) => `'${id}'`).join(', ');
48
- const pkg2Result = await connection.autoFetchQuery(`SELECT ${fields.join(', ')} FROM Package2 WHERE Id IN (${inClause}) ORDER BY NamespacePrefix, Name`, { tooling: true });
49
- packages = (pkg2Result?.records ?? []);
50
- versions = await Package.listVersions(connection, project, {
51
- concise: false,
52
- createdLastDays: undefined,
53
- modifiedLastDays: undefined,
54
- orderBy: 'Package2Id, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber',
55
- isReleased: undefined,
56
- verbose: true,
57
- packages: targetPackage2Ids,
58
- });
59
- }
60
- }
61
- else {
62
- packages = await Package.list(connection);
63
- versions = await Package.listVersions(connection, project, {
64
- concise: false,
65
- createdLastDays: undefined,
66
- modifiedLastDays: undefined,
67
- orderBy: 'Package2Id, Branch, MajorVersion, MinorVersion, PatchVersion, BuildNumber',
68
- isReleased: undefined,
69
- verbose: true,
70
- });
71
- }
72
- const versionsBySubscriberId = new Map();
73
- const packageAliasById = new Map();
74
- const versionsByPackageAndBranch = new Map();
75
- const releasedVersionsByPackageAndBranch = new Map();
76
- for (const pkg of packages) {
77
- packageAliasById.set(pkg.Id, computePackageAlias(pkg));
78
- }
79
- for (const version of versions) {
80
- versionsBySubscriberId.set(version.SubscriberPackageVersionId, version);
81
- sortVersionIntoMap(versionsByPackageAndBranch, version);
82
- if (version.IsReleased) {
83
- sortVersionIntoMap(releasedVersionsByPackageAndBranch, version);
84
- }
85
- }
86
- /** @returns The `namespace.Name` (or bare `Name`) alias for a `Package2` record. */
87
- function computePackageAlias(pkg) {
88
- return (pkg.NamespacePrefix ? pkg.NamespacePrefix + '.' : '') + pkg.Name;
89
- }
90
- /** @returns The `package@major.minor.patch-build[-branch]` alias for a package version. */
91
- function computeVersionAlias(v, branch) {
92
- const seg = `${v.MajorVersion}.${v.MinorVersion}.${v.PatchVersion}-${v.BuildNumber}` + (branch ? '-' + branch : '');
93
- const pkgAlias = packageAliasById.get(v.Package2Id) ?? v.Package2Id;
94
- return pkgAlias + '@' + seg;
95
- }
96
- /** Index a package version into `map`, nested by package, branch, and major/minor/patch/build. */
97
- function sortVersionIntoMap(map, v) {
98
- const branch = v.Branch ?? '';
99
- const major = parseInt(v.MajorVersion, 10);
100
- const minor = parseInt(v.MinorVersion, 10);
101
- const patch = parseInt(v.PatchVersion, 10);
102
- const build = parseInt(v.BuildNumber, 10);
103
- if (!map.has(v.Package2Id))
104
- map.set(v.Package2Id, new Map());
105
- const byBranch = map.get(v.Package2Id);
106
- if (!byBranch.has(branch))
107
- byBranch.set(branch, new Map());
108
- const byMajor = byBranch.get(branch);
109
- if (!byMajor.has(major))
110
- byMajor.set(major, new Map());
111
- const byMinor = byMajor.get(major);
112
- if (!byMinor.has(minor))
113
- byMinor.set(minor, new Map());
114
- const byPatch = byMinor.get(minor);
115
- if (!byPatch.has(patch))
116
- byPatch.set(patch, new Map());
117
- const byBuild = byPatch.get(patch);
118
- if (!byBuild.has(build))
119
- byBuild.set(build, v);
120
- }
121
- /**
122
- * Walk a version map block to the latest (highest-key) entry at any depth.
123
- *
124
- * @param block - A `VersionMap` node at any nesting depth (major/minor/patch/build).
125
- * @returns The version record at the highest key, recursing into nested maps as needed.
126
- */
127
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
- function findLatestFromBlock(block) {
129
- const keys = [...block.keys()];
130
- const maxKey = keys.reduce((max, k) => (k > max ? k : max), keys[0]);
131
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
132
- const entry = block.get(maxKey);
133
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
134
- return entry instanceof Map ? findLatestFromBlock(entry) : entry;
135
- }
136
- /** How far down a `VersionMap` to descend before returning a block to search for "latest" in. */
137
- let ChunkLevel;
138
- (function (ChunkLevel) {
139
- ChunkLevel[ChunkLevel["Major"] = 1] = "Major";
140
- ChunkLevel[ChunkLevel["Minor"] = 2] = "Minor";
141
- ChunkLevel[ChunkLevel["Patch"] = 3] = "Patch";
142
- })(ChunkLevel || (ChunkLevel = {}));
143
- /**
144
- * Descend into `map` for the given package/branch, stopping at `level` (or as far as the
145
- * dependency's known major/minor version components allow).
146
- *
147
- * @returns The block at the requested depth, or `undefined` if nothing is indexed there.
148
- */
149
- function findBlock(map, package2Id, branch, dependency, level) {
150
- const resolvedBranch = branch ?? '';
151
- const byBranch = map.get(package2Id);
152
- if (!byBranch?.has(resolvedBranch))
153
- return undefined;
154
- const byMajor = byBranch.get(resolvedBranch);
155
- if (level === ChunkLevel.Major)
156
- return byMajor;
157
- const byMinor = byMajor?.get(dependency.majorVersion);
158
- if (level === ChunkLevel.Minor || byMinor === undefined)
159
- return byMinor;
160
- return byMinor.get(dependency.minorVersion);
161
- }
162
- /** @returns A {@link VersionChoice} pointing directly at a specific package version. */
163
- function makeVersionChoice(v, label, branch) {
164
- const seg = `${v.MajorVersion}.${v.MinorVersion}.${v.PatchVersion}-${v.BuildNumber}` + (branch ? '-' + branch : '');
165
- return {
166
- name: `${label}: ${seg}`,
167
- value: v.SubscriberPackageVersionId,
168
- short: seg,
169
- };
170
- }
171
- /** @returns A {@link VersionChoice} whose value is a non-pinned `package2Id|major.minor.patch.LATEST` build spec. */
172
- function makeLatestChoice(v, label) {
173
- const seg = `${v.MajorVersion}.${v.MinorVersion}.${v.PatchVersion}.LATEST`;
174
- return {
175
- name: label,
176
- value: `${v.Package2Id}|${seg}`,
177
- short: seg,
178
- };
179
- }
180
- /**
181
- * @returns The latest released version choice for a package on the given branch (empty string
182
- * for the main branch), or `undefined` if there isn't one or it's already in `seen`.
183
- */
184
- function findLatestReleasedForBranch(package2Id, branch, dependency, seen) {
185
- const block = findBlock(releasedVersionsByPackageAndBranch, package2Id, branch, dependency, ChunkLevel.Major);
186
- if (!block)
187
- return undefined;
188
- const v = findLatestFromBlock(block);
189
- if (seen.has(v.SubscriberPackageVersionId))
190
- return undefined;
191
- seen.add(v.SubscriberPackageVersionId);
192
- const label = branch
193
- ? `Latest released version on build branch - ${branch}`
194
- : 'Latest released version on main build branch';
195
- return makeVersionChoice(v, label, branch || undefined);
196
- }
197
- /**
198
- * @returns The latest version choice for a package on the given branch (empty string for the
199
- * main branch) at the given precision level, or `undefined` if there isn't one or it's already
200
- * in `seen`.
201
- */
202
- function findLatestForBranch(package2Id, branch, dependency, level, label, seen) {
203
- const block = findBlock(versionsByPackageAndBranch, package2Id, branch, dependency, level);
204
- if (!block)
205
- return undefined;
206
- const v = findLatestFromBlock(block);
207
- if (seen.has(v.SubscriberPackageVersionId))
208
- return undefined;
209
- seen.add(v.SubscriberPackageVersionId);
210
- return makeVersionChoice(v, label, branch || undefined);
211
- }
212
- return {
213
- knowsAboutVersion(id) {
214
- return versionsBySubscriberId.has(id);
215
- },
216
- knowsAboutPackage(package2Id) {
217
- return packageAliasById.has(package2Id);
218
- },
219
- getPackage2IdForVersion(subscriberPackageVersionId) {
220
- return versionsBySubscriberId.get(subscriberPackageVersionId)?.Package2Id;
221
- },
222
- getVersionAlias(subscriberPackageVersionId) {
223
- const v = versionsBySubscriberId.get(subscriberPackageVersionId);
224
- if (!v)
225
- return undefined;
226
- return computeVersionAlias(v, v.Branch || undefined);
227
- },
228
- getPackageAlias(package2Id) {
229
- return packageAliasById.get(package2Id);
230
- },
231
- findVersionById(subscriberPackageVersionId) {
232
- return versionsBySubscriberId.get(subscriberPackageVersionId);
233
- },
234
- enrichDependency(dependency) {
235
- if (dependency.package2Id || !dependency.subscriberPackageVersionId)
236
- return dependency;
237
- const v = versionsBySubscriberId.get(dependency.subscriberPackageVersionId);
238
- if (!v)
239
- return dependency;
240
- const parts = `${v.MajorVersion}.${v.MinorVersion}.${v.PatchVersion}.${v.BuildNumber}`.split('.');
241
- return {
242
- ...dependency,
243
- package2Id: v.Package2Id,
244
- versionNumber: `${v.MajorVersion}.${v.MinorVersion}.${v.PatchVersion}.${v.BuildNumber}`,
245
- majorVersion: parseInt(parts[0], 10),
246
- minorVersion: parseInt(parts[1], 10),
247
- patchVersion: parseInt(parts[2], 10),
248
- buildVersion: parseInt(parts[3], 10),
249
- };
250
- },
251
- // eslint-disable-next-line complexity
252
- buildInteractiveChoices(dependency, branch, branchesWithReleased) {
253
- const package2Id = dependency.package2Id;
254
- const maj = dependency.majorVersion ?? '';
255
- const min = dependency.minorVersion ?? '';
256
- const pat = dependency.patchVersion ?? '';
257
- const choices = [];
258
- const releasedChoices = [];
259
- const seen = new Set();
260
- // Latest released on null/main branch and named release branches
261
- const releasedMain = findLatestReleasedForBranch(package2Id, '', dependency, seen);
262
- if (releasedMain)
263
- releasedChoices.push(releasedMain);
264
- for (const b of branchesWithReleased ?? []) {
265
- const rc = findLatestReleasedForBranch(package2Id, b, dependency, seen);
266
- if (rc)
267
- releasedChoices.push(rc);
268
- }
269
- // Latest version on the specified feature branch
270
- if (branch) {
271
- const c = findLatestForBranch(package2Id, branch, dependency, ChunkLevel.Patch, `Latest version on '${branch}' branch`, seen);
272
- if (c)
273
- choices.push(c);
274
- }
275
- // Latest build with same Major.Minor.Patch on main branch and release branches
276
- const patchMain = findLatestForBranch(package2Id, '', dependency, ChunkLevel.Patch, `Latest ${maj}.${min}.${pat} version on main build branch`, seen);
277
- if (patchMain)
278
- choices.push(patchMain);
279
- for (const b of branchesWithReleased ?? []) {
280
- const c = findLatestForBranch(package2Id, b, dependency, ChunkLevel.Patch, `Latest ${maj}.${min}.${pat} version on build branch - ${b}`, seen);
281
- if (c)
282
- choices.push(c);
283
- }
284
- // Latest build with same Major.Minor on main branch and release branches
285
- const minorMain = findLatestForBranch(package2Id, '', dependency, ChunkLevel.Minor, `Latest ${maj}.${min} version on main build branch`, seen);
286
- if (minorMain)
287
- choices.push(minorMain);
288
- for (const b of branchesWithReleased ?? []) {
289
- const c = findLatestForBranch(package2Id, b, dependency, ChunkLevel.Minor, `Latest ${maj}.${min} version on build branch - ${b}`, seen);
290
- if (c)
291
- choices.push(c);
292
- }
293
- // Latest build overall on main branch and release branches
294
- const majorMain = findLatestForBranch(package2Id, '', dependency, ChunkLevel.Major, 'Latest version on main build branch', seen);
295
- if (majorMain)
296
- choices.push(majorMain);
297
- for (const b of branchesWithReleased ?? []) {
298
- const c = findLatestForBranch(package2Id, b, dependency, ChunkLevel.Major, `Latest version on build branch - ${b}`, seen);
299
- if (c)
300
- choices.push(c);
301
- }
302
- // Released choices go after so they appear clearly
303
- choices.push(...releasedChoices);
304
- // Non-pinned latest for current Major.Minor.Patch
305
- const block = findBlock(versionsByPackageAndBranch, package2Id, branch, dependency, ChunkLevel.Patch) ??
306
- findBlock(versionsByPackageAndBranch, package2Id, '', dependency, ChunkLevel.Patch) ??
307
- findBlock(versionsByPackageAndBranch, package2Id, '', dependency, ChunkLevel.Minor);
308
- if (block) {
309
- const v = findLatestFromBlock(block);
310
- choices.push(makeLatestChoice(v, `Non-pinned latest ${maj}.${min}.${pat} build`));
311
- }
312
- // Keep the current version as last option
313
- if (dependency.subscriberPackageVersionId && versionsBySubscriberId.has(dependency.subscriberPackageVersionId)) {
314
- const v = versionsBySubscriberId.get(dependency.subscriberPackageVersionId);
315
- choices.push(makeVersionChoice(v, 'Current version specified', v.Branch || undefined));
316
- }
317
- return choices;
318
- },
319
- buildReleasedChoices(dependency, branchesWithReleased) {
320
- const package2Id = dependency.package2Id;
321
- const choices = [];
322
- const seen = new Set();
323
- const main = findLatestReleasedForBranch(package2Id, '', dependency, seen);
324
- if (main)
325
- choices.push(main);
326
- for (const b of branchesWithReleased ?? []) {
327
- const c = findLatestReleasedForBranch(package2Id, b, dependency, seen);
328
- if (c)
329
- choices.push(c);
330
- }
331
- return choices;
332
- },
333
- buildLatestChoices(dependency) {
334
- const package2Id = dependency.package2Id;
335
- const block = findBlock(versionsByPackageAndBranch, package2Id, '', dependency, ChunkLevel.Patch) ??
336
- findBlock(versionsByPackageAndBranch, package2Id, '', dependency, ChunkLevel.Minor);
337
- if (!block)
338
- return [];
339
- const v = findLatestFromBlock(block);
340
- const maj = dependency.majorVersion ?? '';
341
- const min = dependency.minorVersion ?? '';
342
- const pat = dependency.patchVersion ?? '';
343
- return [makeLatestChoice(v, `Non-pinned latest ${maj}.${min}.${pat} build`)];
344
- },
345
- };
346
- }
347
- //# sourceMappingURL=packageVersionService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageVersionService.js","sourceRoot":"","sources":["../../src/common/packageVersionService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,OAAO,EAAE,cAAc,EAA+C,MAAM,uBAAuB,CAAC;AAkE7G;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAsB,EACtB,OAAkB,EAClB,SAAmC;IAEnC,IAAI,QAAsC,CAAC;IAC3C,IAAI,QAAoC,CAAC;IAEzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,SAAS,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,SAAS,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,cAAc,CAC5C,+EAA+E,QAAQ,GAAG,EAC1F,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAmD,EAAE,CAAC;gBAC7E,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QAE7C,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,QAAQ,GAAG,EAAE,CAAC;YACd,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,MAAM,IAAI,CAAC,KAAK,qBAAqB,CAAC,CAAC,MAAM,CACrG,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,MAAM,IAAI,CAAC,KAAK,sBAAsB,CAC5D,CAAC;YACF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,cAAc,CAChD,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,QAAQ,kCAAkC,EACpG,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACF,QAAQ,GAAG,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAA4C,CAAC;YAClF,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE;gBACzD,OAAO,EAAE,KAAK;gBACd,eAAe,EAAE,SAA8B;gBAC/C,gBAAgB,EAAE,SAA8B;gBAChD,OAAO,EAAE,2EAA2E;gBACpF,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,iBAAiB;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE;YACzD,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,SAA8B;YAC/C,gBAAgB,EAAE,SAA8B;YAChD,OAAO,EAAE,2EAA2E;YACpF,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,MAAM,0BAA0B,GAAe,IAAI,GAAG,EAAE,CAAC;IACzD,MAAM,kCAAkC,GAAe,IAAI,GAAG,EAAE,CAAC;IAEjE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QACxE,kBAAkB,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,kBAAkB,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,SAAS,mBAAmB,CAAC,GAA+B;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IAC3E,CAAC;IAED,2FAA2F;IAC3F,SAAS,mBAAmB,CAAC,CAA2B,EAAE,MAAe;QACvE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QACpE,OAAO,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9B,CAAC;IAED,kGAAkG;IAClG,SAAS,kBAAkB,CAAC,GAAe,EAAE,CAA2B;QACtE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAE,CAAC;QAExC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAEpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAEpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAEpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACH,8DAA8D;IAC9D,SAAS,mBAAmB,CAAC,KAAuB;QAClD,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,mEAAmE;QACnE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,iEAAiE;QACjE,OAAO,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAkC,CAAC;IACjG,CAAC;IAED,iGAAiG;IACjG,IAAK,UAIJ;IAJD,WAAK,UAAU;QACb,6CAAS,CAAA;QACT,6CAAK,CAAA;QACL,6CAAK,CAAA;IACP,CAAC,EAJI,UAAU,KAAV,UAAU,QAId;IAED;;;;;OAKG;IACH,SAAS,SAAS,CAChB,GAAe,EACf,UAAkB,EAClB,MAAc,EACd,UAA4B,EAC5B,KAAiB;QAGjB,MAAM,cAAc,GAAG,MAAM,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC;YAAE,OAAO,SAAS,CAAC;QAErD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,UAAU,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC;QAE/C,MAAM,OAAO,GAAG,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,YAAa,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,UAAU,CAAC,KAAK,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QAExE,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,YAAa,CAAC,CAAC;IAC/C,CAAC;IAED,wFAAwF;IACxF,SAAS,iBAAiB,CAAC,CAA2B,EAAE,KAAa,EAAE,MAAe;QACpF,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpH,OAAO;YACL,IAAI,EAAE,GAAG,KAAK,KAAK,GAAG,EAAE;YACxB,KAAK,EAAE,CAAC,CAAC,0BAA0B;YACnC,KAAK,EAAE,GAAG;SACX,CAAC;IACJ,CAAC;IAED,qHAAqH;IACrH,SAAS,gBAAgB,CAAC,CAA2B,EAAE,KAAa;QAClE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,SAAS,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,IAAI,GAAG,EAAE;YAC/B,KAAK,EAAE,GAAG;SACX,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS,2BAA2B,CAClC,UAAkB,EAClB,MAAc,EACd,UAA4B,EAC5B,IAAiB;QAEjB,MAAM,KAAK,GAAG,SAAS,CAAC,kCAAkC,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9G,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM;YAClB,CAAC,CAAC,6CAA6C,MAAM,EAAE;YACvD,CAAC,CAAC,8CAA8C,CAAC;QACnD,OAAO,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,SAAS,mBAAmB,CAC1B,UAAkB,EAClB,MAAc,EACd,UAA4B,EAC5B,KAAiB,EACjB,KAAa,EACb,IAAiB;QAEjB,MAAM,KAAK,GAAG,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACvC,OAAO,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,iBAAiB,CAAC,EAAU;YAC1B,OAAO,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,iBAAiB,CAAC,UAAkB;YAClC,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,uBAAuB,CAAC,0BAAkC;YACxD,OAAO,sBAAsB,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,UAAU,CAAC;QAC5E,CAAC;QAED,eAAe,CAAC,0BAAkC;YAChD,MAAM,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACjE,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzB,OAAO,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QACvD,CAAC;QAED,eAAe,CAAC,UAAkB;YAChC,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,eAAe,CAAC,0BAAkC;YAChD,OAAO,sBAAsB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAChE,CAAC;QAED,gBAAgB,CAAC,UAA4B;YAC3C,IAAI,UAAU,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,0BAA0B;gBAAE,OAAO,UAAU,CAAC;YACvF,MAAM,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;YAC5E,IAAI,CAAC,CAAC;gBAAE,OAAO,UAAU,CAAC;YAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClG,OAAO;gBACL,GAAG,UAAU;gBACb,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,aAAa,EAAE,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE;gBACvF,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aACrC,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,uBAAuB,CACrB,UAA4B,EAC5B,MAAc,EACd,oBAA8B;YAE9B,MAAM,UAAU,GAAG,UAAU,CAAC,UAAW,CAAC;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,MAAM,eAAe,GAAoB,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAE/B,iEAAiE;YACjE,MAAM,YAAY,GAAG,2BAA2B,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACnF,IAAI,YAAY;gBAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,2BAA2B,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBACxE,IAAI,EAAE;oBAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;YAED,iDAAiD;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,GAAG,mBAAmB,CAC3B,UAAU,EACV,MAAM,EACN,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,sBAAsB,MAAM,UAAU,EACtC,IAAI,CACL,CAAC;gBACF,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,+EAA+E;YAC/E,MAAM,SAAS,GAAG,mBAAmB,CACnC,UAAU,EACV,EAAE,EACF,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,+BAA+B,EAC1D,IAAI,CACL,CAAC;YACF,IAAI,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,mBAAmB,CAC3B,UAAU,EACV,CAAC,EACD,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,8BAA8B,CAAC,EAAE,EAC5D,IAAI,CACL,CAAC;gBACF,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,yEAAyE;YACzE,MAAM,SAAS,GAAG,mBAAmB,CACnC,UAAU,EACV,EAAE,EACF,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,UAAU,GAAG,IAAI,GAAG,+BAA+B,EACnD,IAAI,CACL,CAAC;YACF,IAAI,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,mBAAmB,CAC3B,UAAU,EACV,CAAC,EACD,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,UAAU,GAAG,IAAI,GAAG,8BAA8B,CAAC,EAAE,EACrD,IAAI,CACL,CAAC;gBACF,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,2DAA2D;YAC3D,MAAM,SAAS,GAAG,mBAAmB,CACnC,UAAU,EACV,EAAE,EACF,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,qCAAqC,EACrC,IAAI,CACL,CAAC;YACF,IAAI,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,mBAAmB,CAC3B,UAAU,EACV,CAAC,EACD,UAAU,EACV,UAAU,CAAC,KAAK,EAChB,oCAAoC,CAAC,EAAE,EACvC,IAAI,CACL,CAAC;gBACF,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,mDAAmD;YACnD,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;YAEjC,kDAAkD;YAClD,MAAM,KAAK,GACT,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;gBACvF,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;gBACnF,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACtF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;YACpF,CAAC;YAED,0CAA0C;YAC1C,IAAI,UAAU,CAAC,0BAA0B,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;gBAC/G,MAAM,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAE,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,2BAA2B,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;YACzF,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,oBAAoB,CAAC,UAA4B,EAAE,oBAA8B;YAC/E,MAAM,UAAU,GAAG,UAAU,CAAC,UAAW,CAAC;YAC1C,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAE/B,MAAM,IAAI,GAAG,2BAA2B,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAC3E,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,oBAAoB,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,2BAA2B,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBACvE,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,kBAAkB,CAAC,UAA4B;YAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,UAAW,CAAC;YAC1C,MAAM,KAAK,GACT,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;gBACnF,SAAS,CAAC,0BAA0B,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACtF,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,19 +0,0 @@
1
- import { SfProject } from '@salesforce/core';
2
- import { DependencyChange } from '../schemas/manage/dependencyChange.js';
3
- import { ParsedDependency } from '../schemas/manage/parsedDependency.js';
4
- /** Read/write access to an SFDX project's package dependencies and related plugin config. */
5
- export type SfdxProjectService = {
6
- getDependenciesByDirectory(): Map<string, ParsedDependency[]>;
7
- getDependenciesToIgnore(): string[];
8
- getBranchesWithReleasedVersions(): string[];
9
- findAlias(id: string): string | undefined;
10
- resolveAlias(alias: string): string;
11
- applyChanges(changesByDirectory: Map<string, DependencyChange[]>): Promise<void>;
12
- };
13
- /**
14
- * Load an SFDX project's `sfdx-project.json` and build an {@link SfdxProjectService} over it.
15
- *
16
- * @param project - The SFDX project to load.
17
- * @returns A service for reading/writing the project's package dependencies.
18
- */
19
- export declare function buildProjectService(project: SfProject): Promise<SfdxProjectService>;
@@ -1,160 +0,0 @@
1
- /*
2
- * Copyright (c) 2026, Clay Chipps.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { isNamedPackagingDirectory } from '@salesforce/core';
17
- import { parseDependency } from '../schemas/manage/parsedDependency.js';
18
- import { PACKAGE_PREFIX_SUBSCRIBER_PACKAGE_VERSION } from './packageUtils.js';
19
- /**
20
- * Load an SFDX project's `sfdx-project.json` and build an {@link SfdxProjectService} over it.
21
- *
22
- * @param project - The SFDX project to load.
23
- * @returns A service for reading/writing the project's package dependencies.
24
- */
25
- export async function buildProjectService(project) {
26
- const projectJson = await project.retrieveSfProjectJson();
27
- const contents = projectJson.getContents();
28
- /** @returns The project's `packageAliases` map, or an empty object if there isn't one. */
29
- function getAliases() {
30
- return contents.packageAliases ?? {};
31
- }
32
- /** @returns The ID `alias` resolves to, or `alias` itself if it isn't a known alias. */
33
- function resolveAlias(alias) {
34
- return project.getPackageIdFromAlias(alias) ?? alias;
35
- }
36
- /** @returns The first alias in `packageAliases` that resolves to `id`, if any. */
37
- function findAlias(id) {
38
- const aliases = getAliases();
39
- for (const [k, v] of Object.entries(aliases)) {
40
- if (v === id)
41
- return k;
42
- }
43
- return undefined;
44
- }
45
- /** @returns Every package directory's parsed dependencies, keyed by directory path. */
46
- function getDependenciesByDirectory() {
47
- const result = new Map();
48
- for (const dir of project.getPackageDirectories()) {
49
- const deps = isNamedPackagingDirectory(dir) ? (dir.dependencies ?? []) : [];
50
- const parsed = [];
51
- for (const dep of deps) {
52
- const resolvedPackage = project.getPackageIdFromAlias(dep.package) ?? dep.package;
53
- parsed.push(parseDependency(resolvedPackage, dep.versionNumber));
54
- }
55
- result.set(dir.path, parsed);
56
- }
57
- return result;
58
- }
59
- /**
60
- * @param keyPath - A dot-delimited path into `sfdx-project.json`'s contents, e.g.
61
- * `plugins.simply.dependencies.ignore`.
62
- * @returns The value at `keyPath`, or `undefined` if any segment along the path is missing.
63
- */
64
- function getPluginConfig(keyPath) {
65
- const parts = keyPath.split('.');
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- let current = contents;
68
- for (const part of parts) {
69
- if (current == null || typeof current !== 'object')
70
- return undefined;
71
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
72
- current = current[part];
73
- }
74
- return current;
75
- }
76
- /** @returns Package2Ids/aliases configured under `plugins.simply.dependencies.ignore`. */
77
- function getDependenciesToIgnore() {
78
- return getPluginConfig('plugins.simply.dependencies.ignore') ?? [];
79
- }
80
- /** @returns Branch names configured under `plugins.simply.package.brancheswithreleasedversions`. */
81
- function getBranchesWithReleasedVersions() {
82
- return getPluginConfig('plugins.simply.package.brancheswithreleasedversions') ?? [];
83
- }
84
- /**
85
- * Apply a set of dependency version changes to the in-memory project JSON and write it back to
86
- * disk, updating each affected directory's dependency entries and `packageAliases` as needed.
87
- *
88
- * @param changesByDirectory - The changes to apply, keyed by package directory path.
89
- */
90
- async function applyChanges(changesByDirectory) {
91
- // Deep-clone both structures so we can mutate them freely before calling set()
92
- const updatedDirs = JSON.parse(JSON.stringify(contents.packageDirectories ?? []));
93
- const updatedAliases = { ...getAliases() };
94
- for (const [dirPath, changes] of changesByDirectory) {
95
- // `dirPath` comes from `SfProject.getPackageDirectories()`, which normalizes the path to the
96
- // OS separator. The raw JSON on disk always uses forward slashes, so compare both
97
- // slash-normalized to avoid a false mismatch (and a silent no-op write) on Windows.
98
- const dir = updatedDirs.find((d) => normalizePathSep(d['path']) === normalizePathSep(dirPath));
99
- if (!dir)
100
- continue;
101
- const deps = (dir['dependencies'] ?? []);
102
- for (const change of changes) {
103
- const dep = deps.find((d) => resolveAlias(d['package']) === change.oldDependency.package2Id ||
104
- resolveAlias(d['package']) === change.oldDependency.subscriberPackageVersionId);
105
- if (!dep)
106
- continue;
107
- if (change.newSubscriberPackageVersionId) {
108
- // Pinned version: set alias, clear versionNumber
109
- dep['package'] = change.newAlias;
110
- delete dep['versionNumber'];
111
- updatedAliases[change.newAlias] = change.newSubscriberPackageVersionId;
112
- // Add package-level alias if provided
113
- if (change.newPackage2Id) {
114
- const pkgAlias = change.newAlias.split('@')[0];
115
- if (pkgAlias && !updatedAliases[pkgAlias]) {
116
- updatedAliases[pkgAlias] = change.newPackage2Id;
117
- }
118
- }
119
- // Remove old version alias if it changed and pointed to a subscriber package version
120
- if (change.oldAlias !== change.newAlias) {
121
- const oldTarget = updatedAliases[change.oldAlias];
122
- if (oldTarget?.startsWith(PACKAGE_PREFIX_SUBSCRIBER_PACKAGE_VERSION)) {
123
- delete updatedAliases[change.oldAlias];
124
- }
125
- }
126
- }
127
- else if (change.newPackage2Id && change.newVersionNumber) {
128
- // Non-pinned version: set package 0Ho alias and versionNumber
129
- dep['package'] = change.newAlias;
130
- dep['versionNumber'] = change.newVersionNumber;
131
- updatedAliases[change.newAlias] = change.newPackage2Id;
132
- if (change.oldAlias !== change.newAlias) {
133
- const oldTarget = updatedAliases[change.oldAlias];
134
- if (oldTarget?.startsWith(PACKAGE_PREFIX_SUBSCRIBER_PACKAGE_VERSION)) {
135
- delete updatedAliases[change.oldAlias];
136
- }
137
- }
138
- }
139
- }
140
- }
141
- const sortedAliases = Object.fromEntries(Object.entries(updatedAliases).sort(([a], [b]) => a.localeCompare(b)));
142
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
143
- projectJson.set('packageDirectories', updatedDirs);
144
- projectJson.set('packageAliases', sortedAliases);
145
- await projectJson.write();
146
- }
147
- return {
148
- getDependenciesByDirectory,
149
- getDependenciesToIgnore,
150
- getBranchesWithReleasedVersions,
151
- findAlias,
152
- resolveAlias,
153
- applyChanges,
154
- };
155
- }
156
- /** @returns `path` with backslashes converted to forward slashes, for OS-agnostic path comparison. */
157
- function normalizePathSep(path) {
158
- return path.replace(/\\/g, '/');
159
- }
160
- //# sourceMappingURL=sfdxProjectService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sfdxProjectService.js","sourceRoot":"","sources":["../../src/common/sfdxProjectService.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { ParsedDependency } from './parsedDependency.js';
2
- /** A proposed (or applied) change to a single dependency's pinned/tracked version. */
3
- export type DependencyChange = {
4
- oldAlias: string;
5
- oldDependency: ParsedDependency;
6
- newAlias: string;
7
- newSubscriberPackageVersionId?: string;
8
- newPackage2Id?: string;
9
- newVersionNumber?: string;
10
- isSameAsOld: boolean;
11
- };
12
- /** Per-package-directory summary returned by `simply package dependencies manage`. */
13
- export type PackageDependenciesManageResult = {
14
- packageDirectory: string;
15
- changes: Array<{
16
- oldAlias: string;
17
- newAlias: string;
18
- changed: boolean;
19
- }>;
20
- };
@@ -1,17 +0,0 @@
1
- /*
2
- * Copyright (c) 2026, Clay Chipps.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- export {};
17
- //# sourceMappingURL=dependencyChange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependencyChange.js","sourceRoot":"","sources":["../../../src/schemas/manage/dependencyChange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -1,26 +0,0 @@
1
- /**
2
- * A `sfdx-project.json` package dependency entry, resolved and broken down into its component
3
- * parts (pinned `SubscriberPackageVersionId`, or `Package2Id` + version components).
4
- */
5
- export type ParsedDependency = {
6
- subscriberPackageVersionId?: string;
7
- package2Id?: string;
8
- versionNumber?: string;
9
- majorVersion?: number;
10
- minorVersion?: number;
11
- patchVersion?: number;
12
- buildVersion?: number;
13
- isLatest: boolean;
14
- isPinned: boolean;
15
- };
16
- /**
17
- * Parse a resolved dependency (alias already resolved to an ID) into a {@link ParsedDependency}.
18
- *
19
- * @param resolvedPackage - The dependency's `package` field, already resolved from an alias to
20
- * either a `SubscriberPackageVersionId` (04t) or `Package2Id` (0Ho).
21
- * @param versionNumber - The dependency's `versionNumber` field, if `resolvedPackage` is a
22
- * `Package2Id`. Ignored for pinned `SubscriberPackageVersionId` dependencies.
23
- * @returns The parsed dependency. Neither `subscriberPackageVersionId` nor `package2Id` is set
24
- * if `resolvedPackage` doesn't match either prefix.
25
- */
26
- export declare function parseDependency(resolvedPackage: string, versionNumber?: string): ParsedDependency;