sf-plugin-permission-sets 0.3.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 +37 -15
- package/lib/commands/ps/apply.d.ts +1 -0
- package/lib/commands/ps/apply.d.ts.map +1 -1
- package/lib/commands/ps/apply.js +9 -4
- package/lib/commands/ps/apply.js.map +1 -1
- package/lib/commands/ps/plan.d.ts +33 -6
- package/lib/commands/ps/plan.d.ts.map +1 -1
- package/lib/commands/ps/plan.js +106 -28
- package/lib/commands/ps/plan.js.map +1 -1
- package/lib/core/diff.d.ts.map +1 -1
- package/lib/core/diff.js +1 -0
- package/lib/core/diff.js.map +1 -1
- package/lib/core/model.d.ts +4 -0
- package/lib/core/model.d.ts.map +1 -1
- package/lib/core/report.d.ts +11 -5
- package/lib/core/report.d.ts.map +1 -1
- package/lib/core/report.js +64 -23
- package/lib/core/report.js.map +1 -1
- package/messages/ps.apply.md +4 -0
- package/messages/ps.plan.md +47 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -130,7 +130,7 @@ users:
|
|
|
130
130
|
expiration: 2026-09-30T00:00:00Z
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
-
Expiration is a property of the grant, so `plan` and `apply` treat a changed `expiration` on an already-assigned target as an **update** (the `~` line), not an add or a remove. Updates ride with the additive half: they run in `additive` and `sync` modes and never count against `--max-deletes`. Permission set **licenses** cannot expire (Salesforce has no expiration on `PermissionSetLicenseAssign`), so the object form is rejected there. `export` writes the object form for any assignment that currently has an expiration in the org.
|
|
133
|
+
Expiration is a property of the grant, so `plan` and `apply` treat a changed `expiration` on an already-assigned target as an **update** (the `~` line, which shows the `old → new` transition), not an add or a remove. Updates ride with the additive half: they run in `additive` and `sync` modes and never count against `--max-deletes`. Permission set **licenses** cannot expire (Salesforce has no expiration on `PermissionSetLicenseAssign`), so the object form is rejected there. `export` writes the object form for any assignment that currently has an expiration in the org.
|
|
134
134
|
|
|
135
135
|
The `--file` flag is repeatable and the plugin expands globs itself, so all of these work:
|
|
136
136
|
|
|
@@ -187,7 +187,7 @@ A run performs three operations: **add** missing assignments, **update** changed
|
|
|
187
187
|
| `additive` | ✅ | ✅ | ❌ | **Default.** Grant access, never revoke. Safe rollout. |
|
|
188
188
|
| `destructive` | ❌ | ❌ | ✅ | Prune/revoke access that isn't declared, without granting anything new. |
|
|
189
189
|
|
|
190
|
-
`plan`
|
|
190
|
+
`plan` and `apply` preview and act on exactly what the selected mode covers, so the body shows only those operations and what `plan` shows is what `apply` does. Anything the mode won't touch (an undeclared assignment under `additive`, a missing grant under `destructive`) is reported beneath the plan as **drift**, naming the mode that would include it. `sync` covers everything, so it never reports drift.
|
|
191
191
|
|
|
192
192
|
## Validations
|
|
193
193
|
|
|
@@ -249,36 +249,57 @@ group, and license referenced actually exists and resolves uniquely.
|
|
|
249
249
|
|
|
250
250
|
```
|
|
251
251
|
USAGE
|
|
252
|
-
$ sf ps plan -o <org> -f <glob>... [--mode <value>] [--json]
|
|
252
|
+
$ sf ps plan -o <org> -f <glob>... [--mode <value>] [--show-unchanged] [--json]
|
|
253
253
|
|
|
254
254
|
FLAGS
|
|
255
255
|
-o, --target-org=<org> (required)
|
|
256
256
|
-f, --file=<glob>... (required) YAML file(s) to read. Repeatable, globs expanded by the plugin.
|
|
257
257
|
--mode=<value> additive | destructive | sync [default: additive]
|
|
258
|
+
--show-unchanged List assignments that already match, instead of only counting them.
|
|
258
259
|
```
|
|
259
260
|
|
|
260
|
-
|
|
261
|
+
The body shows only what the mode will do, and unchanged assignments are summarized as a count (pass `--show-unchanged` to list them). The default `additive` run previews only what it grants, and reports the undeclared assignment it won't remove as drift:
|
|
261
262
|
|
|
262
263
|
```text
|
|
263
|
-
$ sf ps plan -o prod
|
|
264
|
+
$ sf ps plan -o prod -f "permissions/*.yml"
|
|
264
265
|
|
|
265
266
|
Permission Set Assignments Plan
|
|
266
|
-
Org: prod (00D5g0000000abcEAA) Mode:
|
|
267
|
+
Org: prod (00D5g0000000abcEAA) Mode: additive
|
|
267
268
|
|
|
268
|
-
|
|
269
|
+
Permission Sets
|
|
270
|
+
Report_Builder
|
|
271
|
+
+ jdoe@acme.com
|
|
269
272
|
Sales_Manager
|
|
270
273
|
+ asmith@acme.com
|
|
271
|
-
~ csmith@acme.com
|
|
272
|
-
|
|
273
|
-
|
|
274
|
+
~ csmith@acme.com expires 2026-12-31T23:59:59Z → 2027-06-30T23:59:59Z
|
|
275
|
+
|
|
276
|
+
Plan: 2 to add, 1 to update. 3 users affected.
|
|
277
|
+
Drift: 1 undeclared assignment not removed in additive mode. Run --mode sync to remove it.
|
|
278
|
+
Unchanged: 4 assignments (--show-unchanged to list).
|
|
279
|
+
|
|
280
|
+
Next: sf ps apply -o prod -f "permissions/*.yml"
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
The same files under `--mode sync` act on that drift too, so the removal now appears in the body and the drift line is gone:
|
|
284
|
+
|
|
285
|
+
```text
|
|
286
|
+
$ sf ps plan -o prod -f "permissions/*.yml" --mode sync
|
|
287
|
+
|
|
288
|
+
Permission Set Assignments Plan
|
|
289
|
+
Org: prod (00D5g0000000abcEAA) Mode: sync
|
|
290
|
+
|
|
291
|
+
Permission Sets
|
|
274
292
|
Report_Builder
|
|
275
293
|
+ jdoe@acme.com
|
|
294
|
+
Sales_Manager
|
|
295
|
+
+ asmith@acme.com
|
|
296
|
+
~ csmith@acme.com expires 2026-12-31T23:59:59Z → 2027-06-30T23:59:59Z
|
|
297
|
+
- bwayne@acme.com
|
|
276
298
|
|
|
277
|
-
|
|
278
|
-
|
|
299
|
+
Plan: 2 to add, 1 to update, 1 to remove. 4 users affected.
|
|
300
|
+
Unchanged: 4 assignments (--show-unchanged to list).
|
|
279
301
|
|
|
280
|
-
|
|
281
|
-
► Review, then run: sf ps apply -o prod --mode sync
|
|
302
|
+
Next: sf ps apply -o prod -f "permissions/*.yml" --mode sync
|
|
282
303
|
```
|
|
283
304
|
|
|
284
305
|
### `sf ps apply`
|
|
@@ -286,7 +307,7 @@ Plan: 2 to add, 1 to update, 1 to remove, 1 unchanged.
|
|
|
286
307
|
```
|
|
287
308
|
USAGE
|
|
288
309
|
$ sf ps apply -o <org> -f <glob>... [--mode <value>] [--max-deletes <n>]
|
|
289
|
-
[--dry-run] [--no-prompt] [--json]
|
|
310
|
+
[--dry-run] [--show-unchanged] [--no-prompt] [--json]
|
|
290
311
|
|
|
291
312
|
FLAGS
|
|
292
313
|
-o, --target-org=<org> (required)
|
|
@@ -294,6 +315,7 @@ FLAGS
|
|
|
294
315
|
--mode=<value> additive | destructive | sync [default: additive]
|
|
295
316
|
--max-deletes=<n> Abort if a run would remove more than n assignments. [default: 50]
|
|
296
317
|
--dry-run Resolve and diff, print what would happen, change nothing.
|
|
318
|
+
--show-unchanged List assignments that already match, instead of only counting them.
|
|
297
319
|
--no-prompt Skip the deletion confirmation prompt (for CI).
|
|
298
320
|
```
|
|
299
321
|
|
|
@@ -19,6 +19,7 @@ export default class Apply extends SfCommand<PsApplyResult> {
|
|
|
19
19
|
mode: import("@oclif/core/interfaces").OptionFlag<"additive" | "destructive" | "sync", import("@oclif/core/interfaces").CustomOptions>;
|
|
20
20
|
'max-deletes': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
21
|
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
'show-unchanged': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
23
|
'no-prompt': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
24
|
};
|
|
24
25
|
run(): Promise<PsApplyResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/ps/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAS,MAAM,6BAA6B,CAAC;AAU/D,MAAM,MAAM,aAAa,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS,CAAC,aAAa,CAAC;IACvD,gBAAuB,OAAO,SAAkC;IAChE,gBAAuB,WAAW,SAAsC;IACxE,gBAAuB,QAAQ,WAAoC;IAEnE,gBAAuB,KAAK
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/ps/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAS,MAAM,6BAA6B,CAAC;AAU/D,MAAM,MAAM,aAAa,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS,CAAC,aAAa,CAAC;IACvD,gBAAuB,OAAO,SAAkC;IAChE,gBAAuB,WAAW,SAAsC;IACxE,gBAAuB,QAAQ,WAAoC;IAEnE,gBAAuB,KAAK;;;;;;;;MA2B1B;IAEW,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;IAmG1C,OAAO,CAAC,WAAW;CAKtB"}
|
package/lib/commands/ps/apply.js
CHANGED
|
@@ -31,6 +31,9 @@ export default class Apply extends SfCommand {
|
|
|
31
31
|
'dry-run': Flags.boolean({
|
|
32
32
|
summary: messages.getMessage('flags.dry-run.summary'),
|
|
33
33
|
}),
|
|
34
|
+
'show-unchanged': Flags.boolean({
|
|
35
|
+
summary: messages.getMessage('flags.show-unchanged.summary'),
|
|
36
|
+
}),
|
|
34
37
|
'no-prompt': Flags.boolean({
|
|
35
38
|
summary: messages.getMessage('flags.no-prompt.summary'),
|
|
36
39
|
}),
|
|
@@ -72,7 +75,7 @@ export default class Apply extends SfCommand {
|
|
|
72
75
|
return summary;
|
|
73
76
|
}
|
|
74
77
|
this.log('');
|
|
75
|
-
for (const line of formatDiff(result.diff)) {
|
|
78
|
+
for (const line of formatDiff(result.diff, { mode: flags.mode, showUnchanged: flags['show-unchanged'] })) {
|
|
76
79
|
this.log(line);
|
|
77
80
|
}
|
|
78
81
|
this.log('');
|
|
@@ -85,10 +88,12 @@ export default class Apply extends SfCommand {
|
|
|
85
88
|
}
|
|
86
89
|
this.reportDrift(result.drift, flags.mode);
|
|
87
90
|
if (result.status === 'dry-run') {
|
|
91
|
+
// Report what this mode would actually do, matching the mode-scoped body: the full
|
|
92
|
+
// diff minus whatever the mode leaves as drift. Otherwise the counts contradict it.
|
|
88
93
|
this.log(messages.getMessage('summary.dryRun', [
|
|
89
|
-
String(summary.toAdd),
|
|
90
|
-
String(summary.toUpdate),
|
|
91
|
-
String(summary.toRemove),
|
|
94
|
+
String(summary.toAdd - result.drift.adds),
|
|
95
|
+
String(summary.toUpdate - result.drift.updates),
|
|
96
|
+
String(summary.toRemove - result.drift.removes),
|
|
92
97
|
]));
|
|
93
98
|
return summary;
|
|
94
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/ps/apply.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/ps/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
import { ActualAssignment, AssignmentUpdate, DesiredAssignment } from '../../core/model.js';
|
|
2
3
|
export type PsPlanResult = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
org: {
|
|
5
|
+
username: string;
|
|
6
|
+
id: string;
|
|
7
|
+
};
|
|
8
|
+
mode: string;
|
|
9
|
+
counts: {
|
|
10
|
+
toAdd: number;
|
|
11
|
+
toUpdate: number;
|
|
12
|
+
toRemove: number;
|
|
13
|
+
unchanged: number;
|
|
14
|
+
usersAffected: number;
|
|
15
|
+
};
|
|
16
|
+
/** What the chosen mode would not act on (surfaced as drift). */
|
|
17
|
+
drift: {
|
|
18
|
+
adds: number;
|
|
19
|
+
updates: number;
|
|
20
|
+
removes: number;
|
|
21
|
+
};
|
|
22
|
+
/** The full diff, regardless of mode, so machine consumers see everything the text scopes away. */
|
|
23
|
+
changes: {
|
|
24
|
+
toAdd: DesiredAssignment[];
|
|
25
|
+
toUpdate: AssignmentUpdate[];
|
|
26
|
+
toRemove: ActualAssignment[];
|
|
27
|
+
unchanged: ActualAssignment[];
|
|
28
|
+
};
|
|
9
29
|
};
|
|
10
30
|
export default class Plan extends SfCommand<PsPlanResult> {
|
|
11
31
|
static readonly summary: string;
|
|
@@ -15,8 +35,15 @@ export default class Plan extends SfCommand<PsPlanResult> {
|
|
|
15
35
|
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
36
|
file: import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
|
|
17
37
|
mode: import("@oclif/core/interfaces").OptionFlag<"additive" | "destructive" | "sync", import("@oclif/core/interfaces").CustomOptions>;
|
|
38
|
+
'show-unchanged': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
39
|
};
|
|
19
40
|
run(): Promise<PsPlanResult>;
|
|
41
|
+
/** The assignments the chosen mode would actually act on. */
|
|
42
|
+
private actionable;
|
|
43
|
+
private logBody;
|
|
44
|
+
private countsLine;
|
|
20
45
|
private reportDrift;
|
|
46
|
+
private reportUnchanged;
|
|
47
|
+
private applyCommand;
|
|
21
48
|
}
|
|
22
49
|
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/ps/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAS,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/ps/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAS,MAAM,6BAA6B,CAAC;AAM/D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAKjH,MAAM,MAAM,YAAY,GAAG;IACvB,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACxG,iEAAiE;IACjE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,mGAAmG;IACnG,OAAO,EAAE;QACL,KAAK,EAAE,iBAAiB,EAAE,CAAC;QAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,SAAS,EAAE,gBAAgB,EAAE,CAAC;KACjC,CAAC;CACL,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,SAAS,CAAC,YAAY,CAAC;IACrD,gBAAuB,OAAO,SAAkC;IAChE,gBAAuB,WAAW,SAAsC;IACxE,gBAAuB,QAAQ,WAAoC;IAEnE,gBAAuB,KAAK;;;;;MAgB1B;IAEW,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;IAiFzC,6DAA6D;IAC7D,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,YAAY;CAKvB"}
|
package/lib/commands/ps/plan.js
CHANGED
|
@@ -23,23 +23,44 @@ export default class Plan extends SfCommand {
|
|
|
23
23
|
options: ['additive', 'destructive', 'sync'],
|
|
24
24
|
default: 'additive',
|
|
25
25
|
})(),
|
|
26
|
+
'show-unchanged': Flags.boolean({
|
|
27
|
+
summary: messages.getMessage('flags.show-unchanged.summary'),
|
|
28
|
+
}),
|
|
26
29
|
};
|
|
27
30
|
async run() {
|
|
28
31
|
const { flags } = await this.parse(Plan);
|
|
29
|
-
const
|
|
32
|
+
const mode = flags.mode;
|
|
33
|
+
const targetOrg = flags['target-org'];
|
|
34
|
+
const connection = targetOrg.getConnection();
|
|
30
35
|
const orgClient = new ConnectionOrgClient(connection);
|
|
31
|
-
const service = new PlanService(orgClient, flags.file, { mode
|
|
36
|
+
const service = new PlanService(orgClient, flags.file, { mode });
|
|
32
37
|
const result = await service.run();
|
|
33
38
|
for (const line of formatFindings(result.findings)) {
|
|
34
39
|
this.log(line);
|
|
35
40
|
}
|
|
41
|
+
const diff = result.diff;
|
|
42
|
+
const orgId = targetOrg.getOrgId();
|
|
43
|
+
const username = targetOrg.getUsername() ?? '';
|
|
44
|
+
const orgName = username || orgId;
|
|
45
|
+
const actionable = this.actionable(diff, mode);
|
|
46
|
+
const usersAffected = new Set(actionable.map((assignment) => assignment.assignee.toLowerCase())).size;
|
|
36
47
|
const summary = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
org: { username, id: orgId },
|
|
49
|
+
mode,
|
|
50
|
+
counts: {
|
|
51
|
+
toAdd: diff.toAdd.length,
|
|
52
|
+
toUpdate: diff.toUpdate.length,
|
|
53
|
+
toRemove: diff.toRemove.length,
|
|
54
|
+
unchanged: diff.unchanged.length,
|
|
55
|
+
usersAffected,
|
|
56
|
+
},
|
|
57
|
+
drift: result.drift,
|
|
58
|
+
changes: {
|
|
59
|
+
toAdd: diff.toAdd,
|
|
60
|
+
toUpdate: diff.toUpdate,
|
|
61
|
+
toRemove: diff.toRemove,
|
|
62
|
+
unchanged: diff.unchanged,
|
|
63
|
+
},
|
|
43
64
|
};
|
|
44
65
|
if (result.status === 'invalid') {
|
|
45
66
|
process.exitCode = 1;
|
|
@@ -47,31 +68,88 @@ export default class Plan extends SfCommand {
|
|
|
47
68
|
this.error(messages.getMessage('error.invalid'), { exit: 1 });
|
|
48
69
|
return summary;
|
|
49
70
|
}
|
|
71
|
+
this.log(messages.getMessage('header.title'));
|
|
72
|
+
this.log(messages.getMessage('header.org', [orgName, orgId, mode]));
|
|
73
|
+
const totalChanges = diff.toAdd.length + diff.toUpdate.length + diff.toRemove.length;
|
|
74
|
+
const showUnchanged = flags['show-unchanged'];
|
|
75
|
+
if (totalChanges === 0) {
|
|
76
|
+
if (showUnchanged && diff.unchanged.length > 0) {
|
|
77
|
+
this.logBody(formatDiff(diff, { mode, showUnchanged: true }));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.log('');
|
|
81
|
+
}
|
|
82
|
+
this.log(messages.getMessage('empty.noChanges', [orgName]));
|
|
83
|
+
return summary;
|
|
84
|
+
}
|
|
85
|
+
this.logBody(formatDiff(diff, { mode, showUnchanged }));
|
|
86
|
+
if (actionable.length === 0) {
|
|
87
|
+
this.log(messages.getMessage('empty.nothingToApply', [mode]));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.log(this.countsLine(diff, mode, usersAffected));
|
|
91
|
+
}
|
|
92
|
+
this.reportDrift(diff, mode);
|
|
93
|
+
this.reportUnchanged(diff.unchanged.length, showUnchanged);
|
|
94
|
+
if (actionable.length > 0) {
|
|
95
|
+
this.log(messages.getMessage('summary.next', [this.applyCommand(orgName, flags.file, mode)]));
|
|
96
|
+
}
|
|
97
|
+
return summary;
|
|
98
|
+
}
|
|
99
|
+
/** The assignments the chosen mode would actually act on. */
|
|
100
|
+
actionable(diff, mode) {
|
|
101
|
+
if (mode === 'destructive')
|
|
102
|
+
return diff.toRemove;
|
|
103
|
+
if (mode === 'additive')
|
|
104
|
+
return [...diff.toAdd, ...diff.toUpdate];
|
|
105
|
+
return [...diff.toAdd, ...diff.toUpdate, ...diff.toRemove];
|
|
106
|
+
}
|
|
107
|
+
logBody(body) {
|
|
50
108
|
this.log('');
|
|
51
|
-
for (const line of
|
|
109
|
+
for (const line of body)
|
|
52
110
|
this.log(line);
|
|
111
|
+
if (body.length > 0)
|
|
112
|
+
this.log('');
|
|
113
|
+
}
|
|
114
|
+
countsLine(diff, mode, usersAffected) {
|
|
115
|
+
const affected = String(usersAffected);
|
|
116
|
+
if (mode === 'destructive') {
|
|
117
|
+
return messages.getMessage('summary.counts.destructive', [String(diff.toRemove.length), affected]);
|
|
53
118
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
String(summary.unchanged),
|
|
61
|
-
]));
|
|
62
|
-
const pending = summary.toAdd + summary.toUpdate + summary.toRemove;
|
|
63
|
-
if (pending > 0) {
|
|
64
|
-
this.log(messages.getMessage('summary.next', [flags.mode]));
|
|
119
|
+
if (mode === 'additive') {
|
|
120
|
+
return messages.getMessage('summary.counts.additive', [
|
|
121
|
+
String(diff.toAdd.length),
|
|
122
|
+
String(diff.toUpdate.length),
|
|
123
|
+
affected,
|
|
124
|
+
]);
|
|
65
125
|
}
|
|
66
|
-
return summary
|
|
126
|
+
return messages.getMessage('summary.counts.sync', [
|
|
127
|
+
String(diff.toAdd.length),
|
|
128
|
+
String(diff.toUpdate.length),
|
|
129
|
+
String(diff.toRemove.length),
|
|
130
|
+
affected,
|
|
131
|
+
]);
|
|
132
|
+
}
|
|
133
|
+
reportDrift(diff, mode) {
|
|
134
|
+
if (mode === 'additive' && diff.toRemove.length > 0) {
|
|
135
|
+
this.log(messages.getMessage('drift.additive', [String(diff.toRemove.length)]));
|
|
136
|
+
}
|
|
137
|
+
if (mode === 'destructive') {
|
|
138
|
+
const skipped = diff.toAdd.length + diff.toUpdate.length;
|
|
139
|
+
if (skipped > 0)
|
|
140
|
+
this.log(messages.getMessage('drift.destructive', [String(skipped)]));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
reportUnchanged(count, showUnchanged) {
|
|
144
|
+
if (count === 0)
|
|
145
|
+
return;
|
|
146
|
+
const key = showUnchanged ? 'summary.unchangedListed' : 'summary.unchanged';
|
|
147
|
+
this.log(messages.getMessage(key, [String(count)]));
|
|
67
148
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
this.log(messages.getMessage('drift.note', [String(drift.updates), mode]));
|
|
73
|
-
if (drift.removes > 0)
|
|
74
|
-
this.log(messages.getMessage('drift.note', [String(drift.removes), mode]));
|
|
149
|
+
applyCommand(orgName, files, mode) {
|
|
150
|
+
const fileArgs = files.map((file) => `-f "${file}"`).join(' ');
|
|
151
|
+
const modeArg = mode === 'additive' ? '' : ` --mode ${mode}`;
|
|
152
|
+
return `${this.config.bin} ps apply -o ${orgName} ${fileArgs}${modeArg}`;
|
|
75
153
|
}
|
|
76
154
|
}
|
|
77
155
|
//# sourceMappingURL=plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/ps/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/ps/plan.ts"],"names":[],"mappings":"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"}
|
package/lib/core/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,iBAAiB,EAAE,IAAI,EAAQ,MAAM,YAAY,CAAC;AAe/F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,iBAAiB,EAAE,IAAI,EAAQ,MAAM,YAAY,CAAC;AAe/F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAsC9F"}
|
package/lib/core/diff.js
CHANGED
package/lib/core/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,SAAS,aAAa,CAAC,QAAgB,EAAE,IAAU,EAAE,MAAc;IAC/D,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACvE,CAAC;AAED,kFAAkF;AAClF,SAAS,cAAc,CAAC,IAAwB,EAAE,KAAyB;IACvE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,IAAI,KAAK,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B,EAAE,MAA0B;IACpF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IACxD,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAuB,EAAE,CAAC;IAEzC,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,UAAU,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,SAAS,aAAa,CAAC,QAAgB,EAAE,IAAU,EAAE,MAAc;IAC/D,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACvE,CAAC;AAED,kFAAkF;AAClF,SAAS,cAAc,CAAC,IAAwB,EAAE,KAAyB;IACvE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,IAAI,KAAK,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B,EAAE,MAA0B;IACpF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IACxD,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAuB,EAAE,CAAC;IAEzC,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,kBAAkB,EAAE,QAAQ,CAAC,UAAU;aAC1C,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC1B,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAC3G,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC"}
|
package/lib/core/model.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Finding } from './finding.js';
|
|
2
2
|
export type Kind = 'permissionSet' | 'permissionSetGroup' | 'permissionSetLicense';
|
|
3
|
+
/** Which half of the reconcile a run acts on. Shared by plan, apply, and the report. */
|
|
4
|
+
export type ReconcileMode = 'additive' | 'destructive' | 'sync';
|
|
3
5
|
export type DesiredAssignment = {
|
|
4
6
|
assignee: string;
|
|
5
7
|
kind: Kind;
|
|
@@ -34,6 +36,8 @@ export type AssignmentUpdate = {
|
|
|
34
36
|
kind: Kind;
|
|
35
37
|
target: string;
|
|
36
38
|
expiration?: string;
|
|
39
|
+
/** The expiration the org has now, before the update. Undefined means it had none. */
|
|
40
|
+
previousExpiration?: string;
|
|
37
41
|
};
|
|
38
42
|
/** A resolved managed target: its kind and the org id it resolved to. */
|
|
39
43
|
export type TargetRef = {
|
package/lib/core/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,IAAI,GAAG,eAAe,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAEnF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,OAAO,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,+FAA+F;AAC/F,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,IAAI,GAAG,eAAe,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAEnF,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,OAAO,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,+FAA+F;AAC/F,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,IAAI,GAAG;IACf,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACvB,CAAC"}
|
package/lib/core/report.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { Diff } from './model.js';
|
|
1
|
+
import { Diff, ReconcileMode } from './model.js';
|
|
2
|
+
/** What the report shows: the mode selects which operations, plus whether to list unchanged. */
|
|
3
|
+
export type ReportOptions = {
|
|
4
|
+
mode: ReconcileMode;
|
|
5
|
+
showUnchanged: boolean;
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
|
-
* Render a diff as a plan, grouped by kind then target, with `+` adds, `~` expiration
|
|
4
|
-
* updates, `-` removes, and `=` unchanged.
|
|
5
|
-
*
|
|
8
|
+
* Render a diff as a plan body, grouped by kind then target, with `+` adds, `~` expiration
|
|
9
|
+
* updates, `-` removes, and `=` unchanged. The mode scopes which operations appear (additive
|
|
10
|
+
* hides removes, destructive hides adds and updates), unchanged lines appear only when asked,
|
|
11
|
+
* and targets with nothing to show are omitted. Shared by plan and apply.
|
|
6
12
|
*/
|
|
7
|
-
export declare function formatDiff(diff: Diff): string[];
|
|
13
|
+
export declare function formatDiff(diff: Diff, options: ReportOptions): string[];
|
|
8
14
|
//# sourceMappingURL=report.d.ts.map
|
package/lib/core/report.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAiBvD,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CAC1B,CAAC;AAyCF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CA0DvE"}
|
package/lib/core/report.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { kindKeys } from './normalize.js';
|
|
2
|
+
/** Human labels for the section headers, so the plan reads as prose, not YAML keys. */
|
|
3
|
+
const kindLabels = {
|
|
4
|
+
permissionSet: 'Permission Sets',
|
|
5
|
+
permissionSetGroup: 'Permission Set Groups',
|
|
6
|
+
permissionSetLicense: 'Permission Set Licenses',
|
|
7
|
+
};
|
|
2
8
|
function bucketFor(byKind, kind, target) {
|
|
3
9
|
let byTarget = byKind.get(kind);
|
|
4
10
|
if (!byTarget) {
|
|
@@ -12,50 +18,85 @@ function bucketFor(byKind, kind, target) {
|
|
|
12
18
|
}
|
|
13
19
|
return bucket;
|
|
14
20
|
}
|
|
15
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* A canonical, readable form of an expiration instant, so values from the org and from the
|
|
23
|
+
* files display identically side by side. Falls back to the raw value if it cannot be parsed.
|
|
24
|
+
*/
|
|
25
|
+
function canonicalExpiration(value) {
|
|
26
|
+
const parsed = Date.parse(value);
|
|
27
|
+
if (Number.isNaN(parsed))
|
|
28
|
+
return value;
|
|
29
|
+
const instant = new Date(parsed);
|
|
30
|
+
return instant.toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
31
|
+
}
|
|
32
|
+
/** An assignee line suffixed with its expiration when there is one. */
|
|
16
33
|
function withExpiry(assignee, expiration) {
|
|
17
|
-
return expiration ? `${assignee}
|
|
34
|
+
return expiration ? `${assignee} expires ${canonicalExpiration(expiration)}` : assignee;
|
|
35
|
+
}
|
|
36
|
+
/** An update line showing the expiration transition, with `never` standing in for no expiration. */
|
|
37
|
+
function withTransition(assignee, previous, next) {
|
|
38
|
+
const from = previous ? canonicalExpiration(previous) : 'never';
|
|
39
|
+
const to = next ? canonicalExpiration(next) : 'never';
|
|
40
|
+
return `${assignee} expires ${from} → ${to}`;
|
|
18
41
|
}
|
|
19
42
|
/**
|
|
20
|
-
* Render a diff as a plan, grouped by kind then target, with `+` adds, `~` expiration
|
|
21
|
-
* updates, `-` removes, and `=` unchanged.
|
|
22
|
-
*
|
|
43
|
+
* Render a diff as a plan body, grouped by kind then target, with `+` adds, `~` expiration
|
|
44
|
+
* updates, `-` removes, and `=` unchanged. The mode scopes which operations appear (additive
|
|
45
|
+
* hides removes, destructive hides adds and updates), unchanged lines appear only when asked,
|
|
46
|
+
* and targets with nothing to show are omitted. Shared by plan and apply.
|
|
23
47
|
*/
|
|
24
|
-
export function formatDiff(diff) {
|
|
48
|
+
export function formatDiff(diff, options) {
|
|
49
|
+
const showAdditive = options.mode !== 'destructive';
|
|
50
|
+
const showDestructive = options.mode !== 'additive';
|
|
25
51
|
const byKind = new Map();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
52
|
+
if (showAdditive) {
|
|
53
|
+
for (const assignment of diff.toAdd) {
|
|
54
|
+
bucketFor(byKind, assignment.kind, assignment.target).adds.set(assignment.assignee, assignment.expiration);
|
|
55
|
+
}
|
|
56
|
+
for (const update of diff.toUpdate) {
|
|
57
|
+
bucketFor(byKind, update.kind, update.target).updates.set(update.assignee, {
|
|
58
|
+
previous: update.previousExpiration,
|
|
59
|
+
next: update.expiration,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
31
62
|
}
|
|
32
|
-
|
|
33
|
-
|
|
63
|
+
if (showDestructive) {
|
|
64
|
+
for (const assignment of diff.toRemove) {
|
|
65
|
+
bucketFor(byKind, assignment.kind, assignment.target).removes.add(assignment.assignee);
|
|
66
|
+
}
|
|
34
67
|
}
|
|
35
|
-
|
|
36
|
-
|
|
68
|
+
if (options.showUnchanged) {
|
|
69
|
+
for (const assignment of diff.unchanged) {
|
|
70
|
+
bucketFor(byKind, assignment.kind, assignment.target).unchanged.set(assignment.assignee, assignment.expiration);
|
|
71
|
+
}
|
|
37
72
|
}
|
|
38
73
|
const lines = [];
|
|
39
|
-
for (const [kind
|
|
74
|
+
for (const [kind] of kindKeys) {
|
|
40
75
|
const byTarget = byKind.get(kind);
|
|
41
76
|
if (!byTarget)
|
|
42
77
|
continue;
|
|
43
|
-
|
|
78
|
+
const targetLines = [];
|
|
44
79
|
for (const [target, bucket] of [...byTarget].sort((left, right) => left[0].localeCompare(right[0]))) {
|
|
45
|
-
|
|
80
|
+
const entries = [];
|
|
46
81
|
for (const assignee of [...bucket.adds.keys()].sort()) {
|
|
47
|
-
|
|
82
|
+
entries.push(` + ${withExpiry(assignee, bucket.adds.get(assignee))}`);
|
|
48
83
|
}
|
|
49
84
|
for (const assignee of [...bucket.updates.keys()].sort()) {
|
|
50
|
-
const
|
|
51
|
-
|
|
85
|
+
const change = bucket.updates.get(assignee);
|
|
86
|
+
entries.push(` ~ ${withTransition(assignee, change.previous, change.next)}`);
|
|
52
87
|
}
|
|
53
88
|
for (const assignee of [...bucket.removes].sort())
|
|
54
|
-
|
|
89
|
+
entries.push(` - ${assignee}`);
|
|
55
90
|
for (const assignee of [...bucket.unchanged.keys()].sort()) {
|
|
56
|
-
|
|
91
|
+
entries.push(` = ${withExpiry(assignee, bucket.unchanged.get(assignee))}`);
|
|
57
92
|
}
|
|
93
|
+
if (entries.length === 0)
|
|
94
|
+
continue;
|
|
95
|
+
targetLines.push(` ${target}`, ...entries);
|
|
58
96
|
}
|
|
97
|
+
if (targetLines.length === 0)
|
|
98
|
+
continue;
|
|
99
|
+
lines.push(kindLabels[kind], ...targetLines);
|
|
59
100
|
}
|
|
60
101
|
return lines;
|
|
61
102
|
}
|
package/lib/core/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,SAAS,SAAS,CAAC,MAA0C,EAAE,IAAU,EAAE,MAAc;IACrF,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAC3F,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/core/report.ts"],"names":[],"mappings":"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"}
|
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