sf-plugin-permission-sets 0.4.0 → 0.6.0
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 +135 -79
- package/lib/adapters/connection-org-client.d.ts +8 -6
- package/lib/adapters/connection-org-client.d.ts.map +1 -1
- package/lib/adapters/connection-org-client.js +187 -96
- package/lib/adapters/connection-org-client.js.map +1 -1
- package/lib/commands/ps/apply.d.ts +1 -15
- package/lib/commands/ps/apply.d.ts.map +1 -1
- package/lib/commands/ps/apply.js +11 -81
- package/lib/commands/ps/apply.js.map +1 -1
- package/lib/commands/ps/check.d.ts.map +1 -1
- package/lib/commands/ps/check.js +3 -3
- package/lib/commands/ps/check.js.map +1 -1
- package/lib/commands/ps/export.js +2 -2
- package/lib/commands/ps/export.js.map +1 -1
- package/lib/commands/ps/plan.d.ts +2 -8
- package/lib/commands/ps/plan.d.ts.map +1 -1
- package/lib/commands/ps/plan.js +31 -84
- package/lib/commands/ps/plan.js.map +1 -1
- package/lib/commands/ps/validate.d.ts.map +1 -1
- package/lib/commands/ps/validate.js +3 -3
- package/lib/commands/ps/validate.js.map +1 -1
- package/lib/core/diff.d.ts +37 -1
- package/lib/core/diff.d.ts.map +1 -1
- package/lib/core/diff.js +68 -4
- package/lib/core/diff.js.map +1 -1
- package/lib/core/finding.d.ts +9 -7
- package/lib/core/finding.d.ts.map +1 -1
- package/lib/core/finding.js +16 -8
- package/lib/core/finding.js.map +1 -1
- package/lib/core/index.d.ts +4 -4
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +3 -3
- package/lib/core/index.js.map +1 -1
- package/lib/core/load.js +1 -1
- package/lib/core/load.js.map +1 -1
- package/lib/core/model.d.ts +24 -25
- package/lib/core/model.d.ts.map +1 -1
- package/lib/core/normalize.d.ts.map +1 -1
- package/lib/core/normalize.js +13 -8
- package/lib/core/normalize.js.map +1 -1
- package/lib/core/report.d.ts +2 -1
- package/lib/core/report.d.ts.map +1 -1
- package/lib/core/report.js +30 -17
- package/lib/core/report.js.map +1 -1
- package/lib/core/resolve.d.ts +8 -6
- package/lib/core/resolve.d.ts.map +1 -1
- package/lib/core/resolve.js +18 -14
- package/lib/core/resolve.js.map +1 -1
- package/lib/core/serialize.d.ts.map +1 -1
- package/lib/core/serialize.js +29 -13
- package/lib/core/serialize.js.map +1 -1
- package/lib/core/target-name.d.ts +20 -0
- package/lib/core/target-name.d.ts.map +1 -0
- package/lib/core/target-name.js +32 -0
- package/lib/core/target-name.js.map +1 -0
- package/lib/core/username.d.ts +23 -0
- package/lib/core/username.d.ts.map +1 -0
- package/lib/core/username.js +35 -0
- package/lib/core/username.js.map +1 -0
- package/lib/services/adapters/org-client.d.ts +9 -5
- package/lib/services/adapters/org-client.d.ts.map +1 -1
- package/lib/services/apply.d.ts +1 -18
- package/lib/services/apply.d.ts.map +1 -1
- package/lib/services/apply.js +9 -38
- package/lib/services/apply.js.map +1 -1
- package/lib/services/export.d.ts.map +1 -1
- package/lib/services/export.js +3 -2
- package/lib/services/export.js.map +1 -1
- package/lib/services/index.d.ts +0 -1
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +0 -1
- package/lib/services/index.js.map +1 -1
- package/lib/services/plan.d.ts +4 -14
- package/lib/services/plan.d.ts.map +1 -1
- package/lib/services/plan.js +9 -22
- package/lib/services/plan.js.map +1 -1
- package/lib/services/resolution.d.ts +17 -9
- package/lib/services/resolution.d.ts.map +1 -1
- package/lib/services/resolution.js +43 -16
- package/lib/services/resolution.js.map +1 -1
- package/lib/services/validate.d.ts +2 -1
- package/lib/services/validate.d.ts.map +1 -1
- package/lib/services/validate.js +10 -1
- package/lib/services/validate.js.map +1 -1
- package/messages/ps.apply.md +2 -34
- package/messages/ps.plan.md +0 -8
- package/messages/ps.validate.md +1 -1
- package/package.json +10 -6
- package/lib/core/mode.d.ts +0 -18
- package/lib/core/mode.d.ts.map +0 -1
- package/lib/core/mode.js +0 -16
- package/lib/core/mode.js.map +0 -1
- package/lib/core/plan-file.d.ts +0 -61
- package/lib/core/plan-file.d.ts.map +0 -1
- package/lib/core/plan-file.js +0 -74
- package/lib/core/plan-file.js.map +0 -1
package/lib/core/mode.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/core/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExG,8FAA8F;AAC9F,MAAM,MAAM,YAAY,GAAG;IACvB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,YAAY,CAWzE"}
|
package/lib/core/mode.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Split a diff into what the chosen mode acts on versus the drift it leaves alone.
|
|
3
|
-
* additive skips removals, destructive skips adds and updates, sync acts on all.
|
|
4
|
-
*/
|
|
5
|
-
export function scopeToMode(diff, mode) {
|
|
6
|
-
const additions = mode === 'destructive' ? [] : diff.toAdd;
|
|
7
|
-
const updates = mode === 'destructive' ? [] : diff.toUpdate;
|
|
8
|
-
const removals = mode === 'additive' ? [] : diff.toRemove;
|
|
9
|
-
const drift = {
|
|
10
|
-
adds: mode === 'destructive' ? diff.toAdd.length : 0,
|
|
11
|
-
updates: mode === 'destructive' ? diff.toUpdate.length : 0,
|
|
12
|
-
removes: mode === 'additive' ? diff.toRemove.length : 0,
|
|
13
|
-
};
|
|
14
|
-
return { additions, updates, removals, drift };
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=mode.js.map
|
package/lib/core/mode.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/core/mode.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,IAAmB;IACvD,MAAM,SAAS,GAAG,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1D,MAAM,KAAK,GAAG;QACV,IAAI,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC1D,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC"}
|
package/lib/core/plan-file.d.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
/**
|
|
3
|
-
* The saved-plan format version. Bump when the shape changes incompatibly, so an
|
|
4
|
-
* `apply --plan` on an old file fails loudly instead of misreading it.
|
|
5
|
-
*/
|
|
6
|
-
export declare const savedPlanVersion = 1;
|
|
7
|
-
declare const savedPlanSchema: z.ZodObject<{
|
|
8
|
-
version: z.ZodLiteral<1>;
|
|
9
|
-
org: z.ZodString;
|
|
10
|
-
mode: z.ZodEnum<{
|
|
11
|
-
additive: "additive";
|
|
12
|
-
destructive: "destructive";
|
|
13
|
-
sync: "sync";
|
|
14
|
-
}>;
|
|
15
|
-
add: z.ZodArray<z.ZodObject<{
|
|
16
|
-
assignee: z.ZodString;
|
|
17
|
-
kind: z.ZodEnum<{
|
|
18
|
-
permissionSet: "permissionSet";
|
|
19
|
-
permissionSetGroup: "permissionSetGroup";
|
|
20
|
-
permissionSetLicense: "permissionSetLicense";
|
|
21
|
-
}>;
|
|
22
|
-
target: z.ZodString;
|
|
23
|
-
expiration: z.ZodOptional<z.ZodString>;
|
|
24
|
-
assigneeId: z.ZodString;
|
|
25
|
-
targetId: z.ZodString;
|
|
26
|
-
}, z.core.$strict>>;
|
|
27
|
-
update: z.ZodArray<z.ZodObject<{
|
|
28
|
-
recordId: z.ZodString;
|
|
29
|
-
assignee: z.ZodString;
|
|
30
|
-
kind: z.ZodEnum<{
|
|
31
|
-
permissionSet: "permissionSet";
|
|
32
|
-
permissionSetGroup: "permissionSetGroup";
|
|
33
|
-
permissionSetLicense: "permissionSetLicense";
|
|
34
|
-
}>;
|
|
35
|
-
target: z.ZodString;
|
|
36
|
-
expiration: z.ZodOptional<z.ZodString>;
|
|
37
|
-
previousExpiration: z.ZodOptional<z.ZodString>;
|
|
38
|
-
}, z.core.$strict>>;
|
|
39
|
-
remove: z.ZodArray<z.ZodObject<{
|
|
40
|
-
recordId: z.ZodString;
|
|
41
|
-
assignee: z.ZodString;
|
|
42
|
-
kind: z.ZodEnum<{
|
|
43
|
-
permissionSet: "permissionSet";
|
|
44
|
-
permissionSetGroup: "permissionSetGroup";
|
|
45
|
-
permissionSetLicense: "permissionSetLicense";
|
|
46
|
-
}>;
|
|
47
|
-
target: z.ZodString;
|
|
48
|
-
expiration: z.ZodOptional<z.ZodString>;
|
|
49
|
-
}, z.core.$strict>>;
|
|
50
|
-
}, z.core.$strict>;
|
|
51
|
-
/** A reviewed, resolved change set frozen to a file, ready for `apply` to run verbatim. */
|
|
52
|
-
export type SavedPlan = z.infer<typeof savedPlanSchema>;
|
|
53
|
-
/** Serialize a plan to its on-disk YAML form. */
|
|
54
|
-
export declare function serializePlan(plan: SavedPlan): string;
|
|
55
|
-
/** Parse and validate a plan file's text. Returns the plan, or a single error message describing why it is invalid. */
|
|
56
|
-
export declare function parsePlan(content: string): {
|
|
57
|
-
plan?: SavedPlan;
|
|
58
|
-
error?: string;
|
|
59
|
-
};
|
|
60
|
-
export {};
|
|
61
|
-
//# sourceMappingURL=plan-file.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-file.d.ts","sourceRoot":"","sources":["../../src/core/plan-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AA2ClC,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOnB,CAAC;AAEH,2FAA2F;AAC3F,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAErD;AAED,uHAAuH;AACvH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAkB/E"}
|
package/lib/core/plan-file.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { parse, stringify } from 'yaml';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
/**
|
|
4
|
-
* The saved-plan format version. Bump when the shape changes incompatibly, so an
|
|
5
|
-
* `apply --plan` on an old file fails loudly instead of misreading it.
|
|
6
|
-
*/
|
|
7
|
-
export const savedPlanVersion = 1;
|
|
8
|
-
const kind = z.enum([
|
|
9
|
-
'permissionSet',
|
|
10
|
-
'permissionSetGroup',
|
|
11
|
-
'permissionSetLicense',
|
|
12
|
-
]);
|
|
13
|
-
const mode = z.enum([
|
|
14
|
-
'additive',
|
|
15
|
-
'destructive',
|
|
16
|
-
'sync',
|
|
17
|
-
]);
|
|
18
|
-
/** A resolved addition: the assignment plus the org ids needed to insert it. */
|
|
19
|
-
const resolvedAddition = z.strictObject({
|
|
20
|
-
assignee: z.string().min(1),
|
|
21
|
-
kind,
|
|
22
|
-
target: z.string().min(1),
|
|
23
|
-
expiration: z.string().min(1).optional(),
|
|
24
|
-
assigneeId: z.string().min(1),
|
|
25
|
-
targetId: z.string().min(1),
|
|
26
|
-
});
|
|
27
|
-
/** An expiration change on an existing record. */
|
|
28
|
-
const assignmentUpdate = z.strictObject({
|
|
29
|
-
recordId: z.string().min(1),
|
|
30
|
-
assignee: z.string().min(1),
|
|
31
|
-
kind,
|
|
32
|
-
target: z.string().min(1),
|
|
33
|
-
expiration: z.string().min(1).optional(),
|
|
34
|
-
previousExpiration: z.string().min(1).optional(),
|
|
35
|
-
});
|
|
36
|
-
/** An existing record to remove, carrying its id. */
|
|
37
|
-
const actualAssignment = z.strictObject({
|
|
38
|
-
recordId: z.string().min(1),
|
|
39
|
-
assignee: z.string().min(1),
|
|
40
|
-
kind,
|
|
41
|
-
target: z.string().min(1),
|
|
42
|
-
expiration: z.string().min(1).optional(),
|
|
43
|
-
});
|
|
44
|
-
const savedPlanSchema = z.strictObject({
|
|
45
|
-
version: z.literal(savedPlanVersion),
|
|
46
|
-
org: z.string().min(1),
|
|
47
|
-
mode,
|
|
48
|
-
add: z.array(resolvedAddition),
|
|
49
|
-
update: z.array(assignmentUpdate),
|
|
50
|
-
remove: z.array(actualAssignment),
|
|
51
|
-
});
|
|
52
|
-
/** Serialize a plan to its on-disk YAML form. */
|
|
53
|
-
export function serializePlan(plan) {
|
|
54
|
-
return stringify(plan);
|
|
55
|
-
}
|
|
56
|
-
/** Parse and validate a plan file's text. Returns the plan, or a single error message describing why it is invalid. */
|
|
57
|
-
export function parsePlan(content) {
|
|
58
|
-
let data;
|
|
59
|
-
try {
|
|
60
|
-
data = parse(content);
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
return { error: `invalid YAML: ${err.message}` };
|
|
64
|
-
}
|
|
65
|
-
const result = savedPlanSchema.safeParse(data);
|
|
66
|
-
if (!result.success) {
|
|
67
|
-
const detail = result.error.issues
|
|
68
|
-
.map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.message}`)
|
|
69
|
-
.join('; ');
|
|
70
|
-
return { error: detail };
|
|
71
|
-
}
|
|
72
|
-
return { plan: result.data };
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=plan-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-file.js","sourceRoot":"","sources":["../../src/core/plan-file.ts"],"names":[],"mappings":"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"}
|