sf-plugin-permission-sets 0.2.0 → 0.3.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 +47 -30
- package/lib/adapters/connection-org-client.d.ts +1 -0
- package/lib/adapters/connection-org-client.d.ts.map +1 -0
- package/lib/commands/ps/apply.d.ts +2 -1
- package/lib/commands/ps/apply.d.ts.map +1 -0
- package/lib/commands/ps/apply.js +10 -6
- package/lib/commands/ps/apply.js.map +1 -1
- package/lib/commands/ps/check.d.ts +1 -0
- package/lib/commands/ps/check.d.ts.map +1 -0
- package/lib/commands/ps/export.d.ts +1 -1
- package/lib/commands/ps/export.d.ts.map +1 -0
- package/lib/commands/ps/export.js +1 -2
- package/lib/commands/ps/export.js.map +1 -1
- package/lib/commands/ps/plan.d.ts +34 -7
- package/lib/commands/ps/plan.d.ts.map +1 -0
- package/lib/commands/ps/plan.js +106 -29
- package/lib/commands/ps/plan.js.map +1 -1
- package/lib/commands/ps/validate.d.ts +1 -1
- package/lib/commands/ps/validate.d.ts.map +1 -0
- package/lib/commands/ps/validate.js +1 -2
- package/lib/commands/ps/validate.js.map +1 -1
- package/lib/core/diff.d.ts +1 -0
- package/lib/core/diff.d.ts.map +1 -0
- package/lib/core/diff.js +1 -0
- package/lib/core/diff.js.map +1 -1
- package/lib/core/finding.d.ts +1 -0
- package/lib/core/finding.d.ts.map +1 -0
- package/lib/core/load.d.ts +1 -0
- package/lib/core/load.d.ts.map +1 -0
- package/lib/core/model.d.ts +5 -0
- package/lib/core/model.d.ts.map +1 -0
- package/lib/core/normalize.d.ts +1 -0
- package/lib/core/normalize.d.ts.map +1 -0
- package/lib/core/normalize.js +43 -25
- package/lib/core/normalize.js.map +1 -1
- package/lib/core/parse.d.ts +1 -0
- package/lib/core/parse.d.ts.map +1 -0
- package/lib/core/report.d.ts +12 -5
- package/lib/core/report.d.ts.map +1 -0
- package/lib/core/report.js +64 -23
- package/lib/core/report.js.map +1 -1
- package/lib/core/resolve.d.ts +1 -0
- package/lib/core/resolve.d.ts.map +1 -0
- package/lib/core/schema.d.ts +1 -0
- package/lib/core/schema.d.ts.map +1 -0
- package/lib/core/schema.js +15 -10
- package/lib/core/schema.js.map +1 -1
- package/lib/core/serialize.d.ts +1 -0
- package/lib/core/serialize.d.ts.map +1 -0
- package/lib/core/serialize.js +3 -3
- package/lib/core/serialize.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/services/adapters/org-client.d.ts +1 -0
- package/lib/services/adapters/org-client.d.ts.map +1 -0
- package/lib/services/apply.d.ts +1 -2
- package/lib/services/apply.d.ts.map +1 -0
- package/lib/services/apply.js +3 -27
- package/lib/services/apply.js.map +1 -1
- package/lib/services/check.d.ts +1 -0
- package/lib/services/check.d.ts.map +1 -0
- package/lib/services/export.d.ts +1 -0
- package/lib/services/export.d.ts.map +1 -0
- package/lib/services/plan.d.ts +1 -2
- package/lib/services/plan.d.ts.map +1 -0
- package/lib/services/plan.js +3 -27
- package/lib/services/plan.js.map +1 -1
- package/lib/services/resolution.d.ts +17 -0
- package/lib/services/resolution.d.ts.map +1 -0
- package/lib/services/resolution.js +36 -0
- package/lib/services/resolution.js.map +1 -0
- package/lib/services/validate.d.ts +1 -0
- package/lib/services/validate.d.ts.map +1 -0
- package/messages/ps.apply.md +4 -0
- package/messages/ps.plan.md +47 -7
- package/package.json +17 -35
- package/oclif.lock +0 -7888
- package/oclif.manifest.json +0 -406
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/services/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/services/apply.ts"],"names":[],"mappings":"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"}
|
package/lib/services/check.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/services/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAiB,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,gFAAgF;AAChF,qBAAa,YAAY;IACF,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAY,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAxC,KAAK,EAAE,MAAM,EAAE,EAAmB,MAAM,EAAE,OAAO;IAExE,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;CAc3C"}
|
package/lib/services/export.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/services/export.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,uFAAuF;AACvF,qBAAa,aAAa;IACH,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAa,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAA3C,GAAG,EAAE,SAAS,EAAmB,UAAU,EAAE,MAAM;IAE1E,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;CAe5C"}
|
package/lib/services/plan.d.ts
CHANGED
|
@@ -31,6 +31,5 @@ export declare class PlanService {
|
|
|
31
31
|
private readonly input;
|
|
32
32
|
constructor(org: OrgClient, files: string[], input: PlanInput);
|
|
33
33
|
run(): Promise<PlanResult>;
|
|
34
|
-
/** Look every declared reference up in the org, returning findings and the target id maps. */
|
|
35
|
-
private resolve;
|
|
36
34
|
}
|
|
35
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAiB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,iEAAiE;IACjE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,MAAM,EAAE,UAAU,CAAC;CACtB,CAAC;AASF;;;;;GAKG;AACH,qBAAa,WAAW;IAEhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAFL,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,SAAS;IAGxB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;CAwB1C"}
|
package/lib/services/plan.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadFiles } from '../core/load.js';
|
|
2
2
|
import { diffAssignments } from '../core/diff.js';
|
|
3
|
-
import { kinds, distinctAssignees, distinctTargets, evaluateUsers, evaluateTargets, indexTargetsById, } from '../core/resolve.js';
|
|
4
3
|
import { countFindings } from '../core/finding.js';
|
|
4
|
+
import { ResolutionService, managedTargets } from './resolution.js';
|
|
5
5
|
const emptyDiff = { toAdd: [], toUpdate: [], toRemove: [], unchanged: [] };
|
|
6
6
|
/** An aborted-before-the-diff result, carrying the findings that explain why. */
|
|
7
7
|
function invalidResult(files, findings) {
|
|
@@ -27,7 +27,8 @@ export class PlanService {
|
|
|
27
27
|
if (countFindings(loaded.findings).errors > 0) {
|
|
28
28
|
return invalidResult(loaded.files, loaded.findings);
|
|
29
29
|
}
|
|
30
|
-
const
|
|
30
|
+
const resolutionService = new ResolutionService(this.org, loaded.assignments);
|
|
31
|
+
const resolution = await resolutionService.run();
|
|
31
32
|
const findings = [...loaded.findings, ...resolution.findings];
|
|
32
33
|
if (countFindings(findings).errors > 0) {
|
|
33
34
|
return invalidResult(loaded.files, findings);
|
|
@@ -42,30 +43,5 @@ export class PlanService {
|
|
|
42
43
|
};
|
|
43
44
|
return { files: loaded.files, findings, diff, drift, status: 'planned' };
|
|
44
45
|
}
|
|
45
|
-
/** Look every declared reference up in the org, returning findings and the target id maps. */
|
|
46
|
-
async resolve(assignments) {
|
|
47
|
-
const usernames = distinctAssignees(assignments);
|
|
48
|
-
const targetsByKind = kinds.map((kind) => ({ kind, targets: distinctTargets(assignments, kind) }));
|
|
49
|
-
const usersTask = usernames.length > 0 ? this.org.findUsers(usernames) : Promise.resolve([]);
|
|
50
|
-
const targetsTask = Promise.all(targetsByKind.map(({ kind, targets }) => (targets.length > 0 ? this.org.findTargets(kind, targets) : Promise.resolve([])).then((found) => ({ kind, targets, found }))));
|
|
51
|
-
const [foundUsers, perKind] = await Promise.all([usersTask, targetsTask]);
|
|
52
|
-
const findings = [...evaluateUsers(usernames, foundUsers)];
|
|
53
|
-
const targetIds = {};
|
|
54
|
-
for (const { kind, targets, found } of perKind) {
|
|
55
|
-
findings.push(...evaluateTargets(kind, targets, found.map((target) => target.name)));
|
|
56
|
-
targetIds[kind] = indexTargetsById(found);
|
|
57
|
-
}
|
|
58
|
-
return { findings, targetIds };
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/** The resolved ids of every declared target, to fetch their current memberships. */
|
|
62
|
-
function managedTargets(resolution) {
|
|
63
|
-
const refs = [];
|
|
64
|
-
for (const kind of kinds) {
|
|
65
|
-
for (const id of resolution.targetIds[kind].values()) {
|
|
66
|
-
refs.push({ kind, id });
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return refs;
|
|
70
46
|
}
|
|
71
47
|
//# sourceMappingURL=plan.js.map
|
package/lib/services/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAW,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAoBpE,MAAM,SAAS,GAAS,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAEjF,iFAAiF;AACjF,SAAS,aAAa,CAAC,KAAe,EAAE,QAAmB;IACvD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/G,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IAEC;IACA;IACA;IAHrB,YACqB,GAAc,EACd,KAAe,EACf,KAAgB;QAFhB,QAAG,GAAH,GAAG,CAAW;QACd,UAAK,GAAL,KAAK,CAAU;QACf,UAAK,GAAL,KAAK,CAAW;IAClC,CAAC;IAEG,KAAK,CAAC,GAAG;QACZ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG;YACV,IAAI,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7E,CAAC;CACJ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DesiredAssignment, Kind, TargetRef } from '../core/model.js';
|
|
2
|
+
import { Finding } from '../core/finding.js';
|
|
3
|
+
import { OrgClient } from './adapters/org-client.js';
|
|
4
|
+
export type Resolution = {
|
|
5
|
+
findings: Finding[];
|
|
6
|
+
userIds: Map<string, string>;
|
|
7
|
+
targetIds: Record<Kind, Map<string, string>>;
|
|
8
|
+
};
|
|
9
|
+
export declare function managedTargets(resolution: Resolution): TargetRef[];
|
|
10
|
+
/** Look every declared reference up in the org, returning findings and the resolved id maps. */
|
|
11
|
+
export declare class ResolutionService {
|
|
12
|
+
private readonly org;
|
|
13
|
+
private readonly assignments;
|
|
14
|
+
constructor(org: OrgClient, assignments: DesiredAssignment[]);
|
|
15
|
+
run(): Promise<Resolution>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.d.ts","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAsB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAU7C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,CAQlE;AAED,gGAAgG;AAChG,qBAAa,iBAAiB;IACP,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAa,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAA5C,GAAG,EAAE,SAAS,EAAmB,WAAW,EAAE,iBAAiB,EAAE;IAExF,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;CAkC1C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { kinds, distinctAssignees, distinctTargets, evaluateUsers, evaluateTargets, indexUsersById, indexTargetsById, } from '../core/resolve.js';
|
|
2
|
+
export function managedTargets(resolution) {
|
|
3
|
+
const refs = [];
|
|
4
|
+
for (const kind of kinds) {
|
|
5
|
+
for (const id of resolution.targetIds[kind].values()) {
|
|
6
|
+
refs.push({ kind, id });
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return refs;
|
|
10
|
+
}
|
|
11
|
+
/** Look every declared reference up in the org, returning findings and the resolved id maps. */
|
|
12
|
+
export class ResolutionService {
|
|
13
|
+
org;
|
|
14
|
+
assignments;
|
|
15
|
+
constructor(org, assignments) {
|
|
16
|
+
this.org = org;
|
|
17
|
+
this.assignments = assignments;
|
|
18
|
+
}
|
|
19
|
+
async run() {
|
|
20
|
+
const usernames = distinctAssignees(this.assignments);
|
|
21
|
+
const targetsByKind = kinds.map((kind) => ({ kind, targets: distinctTargets(this.assignments, kind) }));
|
|
22
|
+
const usersTask = usernames.length > 0 ? this.org.findUsers(usernames) : Promise.resolve([]);
|
|
23
|
+
const targetsTask = Promise.all(targetsByKind.map(({ kind, targets }) => (targets.length > 0 ? this.org.findTargets(kind, targets) : Promise.resolve([])).then((found) => ({ kind, targets, found }))));
|
|
24
|
+
const [foundUsers, perKind] = await Promise.all([usersTask, targetsTask]);
|
|
25
|
+
const findings = [...evaluateUsers(usernames, foundUsers)];
|
|
26
|
+
for (const { kind, targets, found } of perKind) {
|
|
27
|
+
findings.push(...evaluateTargets(kind, targets, found.map((target) => target.name)));
|
|
28
|
+
}
|
|
29
|
+
const targetIds = {};
|
|
30
|
+
for (const { kind, found } of perKind) {
|
|
31
|
+
targetIds[kind] = indexTargetsById(found);
|
|
32
|
+
}
|
|
33
|
+
return { findings, userIds: indexUsersById(foundUsers), targetIds };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,GACnB,MAAM,oBAAoB,CAAC;AAS5B,MAAM,UAAU,cAAc,CAAC,UAAsB;IACjD,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,gGAAgG;AAChG,MAAM,OAAO,iBAAiB;IACU;IAAiC;IAArE,YAAoC,GAAc,EAAmB,WAAgC;QAAjE,QAAG,GAAH,GAAG,CAAW;QAAmB,gBAAW,GAAX,WAAW,CAAqB;IAAG,CAAC;IAElG,KAAK,CAAC,GAAG;QACZ,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAExG,MAAM,SAAS,GACX,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAC3B,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CACpC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAC9F,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CACxC,CACJ,CACJ,CAAC;QAEF,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAc,CAAC,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;YAC7C,QAAQ,CAAC,IAAI,CACT,GAAG,eAAe,CACd,IAAI,EACJ,OAAO,EACP,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACrC,CACJ,CAAC;QACN,CAAC;QAED,MAAM,SAAS,GAAG,EAAuC,CAAC;QAC1D,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACxE,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/services/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAiB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,2FAA2F;AAC3F,qBAAa,eAAe;IACL,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAa,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAtC,GAAG,EAAE,SAAS,EAAmB,KAAK,EAAE,MAAM,EAAE;IAEvE,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;IAiB3C,iFAAiF;YACnE,OAAO;CA0BxB"}
|
package/messages/ps.apply.md
CHANGED
|
@@ -22,6 +22,10 @@ Abort before any change if the run would remove more than this many assignments.
|
|
|
22
22
|
|
|
23
23
|
Resolve and diff, print the plan, and change nothing.
|
|
24
24
|
|
|
25
|
+
# flags.show-unchanged.summary
|
|
26
|
+
|
|
27
|
+
List assignments that already match, instead of only counting them.
|
|
28
|
+
|
|
25
29
|
# flags.no-prompt.summary
|
|
26
30
|
|
|
27
31
|
Skip the deletion confirmation prompt. Required to delete in JSON or other non-interactive runs.
|
package/messages/ps.plan.md
CHANGED
|
@@ -4,7 +4,7 @@ Preview the changes that would reconcile a target org to the assignment files.
|
|
|
4
4
|
|
|
5
5
|
# description
|
|
6
6
|
|
|
7
|
-
Load the files, resolve every user and target against the org, fetch the org's current assignments, and diff the desired state against them. Read-only: it queries the org but never changes it, so it is the apply pipeline stopping before any DML. The
|
|
7
|
+
Load the files, resolve every user and target against the org, fetch the org's current assignments, and diff the desired state against them. Read-only: it queries the org but never changes it, so it is the apply pipeline stopping before any DML. The body shows only what the chosen mode would do, so what plan shows is what apply does. Anything the mode would not touch is reported beneath the plan as drift. Run it before apply to preview what would change.
|
|
8
8
|
|
|
9
9
|
# flags.file.summary
|
|
10
10
|
|
|
@@ -12,19 +12,59 @@ YAML file or glob to plan. Repeatable.
|
|
|
12
12
|
|
|
13
13
|
# flags.mode.summary
|
|
14
14
|
|
|
15
|
-
Which half of the reconcile to preview: additive adds and updates expirations, destructive removes only, sync does both.
|
|
15
|
+
Which half of the reconcile to preview: additive adds and updates expirations, destructive removes only, sync does both. The plan shows only what the chosen mode would do; anything it skips is reported as drift.
|
|
16
16
|
|
|
17
|
-
# summary
|
|
17
|
+
# flags.show-unchanged.summary
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
List assignments that already match, instead of only counting them.
|
|
20
|
+
|
|
21
|
+
# header.title
|
|
22
|
+
|
|
23
|
+
Permission Set Assignments Plan
|
|
24
|
+
|
|
25
|
+
# header.org
|
|
26
|
+
|
|
27
|
+
Org: %s (%s) Mode: %s
|
|
28
|
+
|
|
29
|
+
# summary.counts.additive
|
|
30
|
+
|
|
31
|
+
Plan: %s to add, %s to update. %s users affected.
|
|
32
|
+
|
|
33
|
+
# summary.counts.destructive
|
|
34
|
+
|
|
35
|
+
Plan: %s to remove. %s users affected.
|
|
36
|
+
|
|
37
|
+
# summary.counts.sync
|
|
38
|
+
|
|
39
|
+
Plan: %s to add, %s to update, %s to remove. %s users affected.
|
|
40
|
+
|
|
41
|
+
# summary.unchanged
|
|
42
|
+
|
|
43
|
+
Unchanged: %s assignments (--show-unchanged to list).
|
|
44
|
+
|
|
45
|
+
# summary.unchangedListed
|
|
46
|
+
|
|
47
|
+
Unchanged: %s assignments.
|
|
20
48
|
|
|
21
49
|
# summary.next
|
|
22
50
|
|
|
23
|
-
|
|
51
|
+
Next: %s
|
|
52
|
+
|
|
53
|
+
# drift.additive
|
|
54
|
+
|
|
55
|
+
Drift: %s undeclared assignment(s) not removed in additive mode. Run --mode sync to remove them.
|
|
56
|
+
|
|
57
|
+
# drift.destructive
|
|
58
|
+
|
|
59
|
+
Drift: %s declared assignment(s) not applied in destructive mode. Run --mode additive or sync to apply them.
|
|
60
|
+
|
|
61
|
+
# empty.noChanges
|
|
62
|
+
|
|
63
|
+
No changes. %s already matches your files.
|
|
24
64
|
|
|
25
|
-
#
|
|
65
|
+
# empty.nothingToApply
|
|
26
66
|
|
|
27
|
-
|
|
67
|
+
Nothing to apply in %s mode.
|
|
28
68
|
|
|
29
69
|
# error.invalid
|
|
30
70
|
|
package/package.json
CHANGED
|
@@ -14,22 +14,22 @@
|
|
|
14
14
|
"zod": "^4.4.3"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@
|
|
18
|
-
"eslint
|
|
19
|
-
"
|
|
20
|
-
"
|
|
17
|
+
"@eslint/js": "^10.0.1",
|
|
18
|
+
"eslint": "^10.6.0",
|
|
19
|
+
"execa": "^9.6.1",
|
|
20
|
+
"globals": "^17.7.0",
|
|
21
21
|
"ts-node": "^10.9.2",
|
|
22
|
-
"typescript": "^
|
|
23
|
-
"
|
|
22
|
+
"typescript": "^6.0.3",
|
|
23
|
+
"typescript-eslint": "^8.62.1",
|
|
24
|
+
"vitest": "^4.1.9",
|
|
25
|
+
"wireit": "^0.14.0"
|
|
24
26
|
},
|
|
25
27
|
"engines": {
|
|
26
28
|
"node": ">=18.0.0"
|
|
27
29
|
},
|
|
28
30
|
"files": [
|
|
29
31
|
"/lib",
|
|
30
|
-
"/messages"
|
|
31
|
-
"/oclif.manifest.json",
|
|
32
|
-
"/oclif.lock"
|
|
32
|
+
"/messages"
|
|
33
33
|
],
|
|
34
34
|
"keywords": [
|
|
35
35
|
"salesforce",
|
|
@@ -60,17 +60,11 @@
|
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "wireit",
|
|
63
|
-
"clean": "
|
|
64
|
-
"clean-all": "sf-clean all",
|
|
63
|
+
"clean": "rm -rf lib tmp *.tsbuildinfo .eslintcache .wireit",
|
|
65
64
|
"compile": "wireit",
|
|
66
|
-
"docs": "sf-docs",
|
|
67
|
-
"format": "wireit",
|
|
68
65
|
"lint": "wireit",
|
|
69
|
-
"
|
|
70
|
-
"postpack": "sf-clean --ignore-signing-artifacts",
|
|
71
|
-
"prepack": "sf-prepack",
|
|
66
|
+
"prepack": "npm run compile",
|
|
72
67
|
"test": "wireit",
|
|
73
|
-
"test:only": "wireit",
|
|
74
68
|
"version": "oclif readme"
|
|
75
69
|
},
|
|
76
70
|
"publishConfig": {
|
|
@@ -96,14 +90,6 @@
|
|
|
96
90
|
],
|
|
97
91
|
"clean": "if-file-deleted"
|
|
98
92
|
},
|
|
99
|
-
"format": {
|
|
100
|
-
"command": "prettier --write \"src/**/*.+(ts|js|json)\"",
|
|
101
|
-
"files": [
|
|
102
|
-
"src/**/*.ts",
|
|
103
|
-
".prettier*"
|
|
104
|
-
],
|
|
105
|
-
"output": []
|
|
106
|
-
},
|
|
107
93
|
"lint": {
|
|
108
94
|
"command": "eslint src --color --cache --cache-location .eslintcache",
|
|
109
95
|
"files": [
|
|
@@ -115,20 +101,16 @@
|
|
|
115
101
|
"output": []
|
|
116
102
|
},
|
|
117
103
|
"test": {
|
|
118
|
-
"dependencies": [
|
|
119
|
-
"test:only",
|
|
120
|
-
"lint"
|
|
121
|
-
]
|
|
122
|
-
},
|
|
123
|
-
"test:only": {
|
|
124
104
|
"command": "vitest run",
|
|
105
|
+
"dependencies": [
|
|
106
|
+
"compile"
|
|
107
|
+
],
|
|
125
108
|
"env": {
|
|
126
109
|
"FORCE_COLOR": "2"
|
|
127
110
|
},
|
|
128
111
|
"files": [
|
|
129
|
-
"
|
|
130
|
-
"vitest.config.
|
|
131
|
-
"**/tsconfig.json"
|
|
112
|
+
"test/**",
|
|
113
|
+
"vitest.config.js"
|
|
132
114
|
],
|
|
133
115
|
"output": []
|
|
134
116
|
}
|
|
@@ -136,5 +118,5 @@
|
|
|
136
118
|
"exports": "./lib/index.js",
|
|
137
119
|
"type": "module",
|
|
138
120
|
"author": "Isaac Ferreira",
|
|
139
|
-
"version": "0.
|
|
121
|
+
"version": "0.3.1"
|
|
140
122
|
}
|