@pnp/cli-microsoft365 12.1.0-beta.0c2915d → 12.1.0-beta.81e442d

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 (83) hide show
  1. package/allCommands.json +1 -1
  2. package/allCommandsFull.json +1 -1
  3. package/dist/cli/cli.js +12 -7
  4. package/dist/m365/entra/commands/app/app-add.js +106 -150
  5. package/dist/m365/entra/commands/app/app-get.js +22 -38
  6. package/dist/m365/entra/commands/app/app-list.js +10 -22
  7. package/dist/m365/entra/commands/app/app-permission-add.js +36 -50
  8. package/dist/m365/entra/commands/app/app-permission-list.js +29 -48
  9. package/dist/m365/entra/commands/app/app-permission-remove.js +44 -82
  10. package/dist/m365/entra/commands/app/app-remove.js +21 -38
  11. package/dist/m365/entra/commands/app/app-role-add.js +32 -46
  12. package/dist/m365/entra/commands/app/app-role-list.js +20 -25
  13. package/dist/m365/entra/commands/app/app-role-remove.js +33 -41
  14. package/dist/m365/entra/commands/app/app-set.js +46 -69
  15. package/dist/m365/spfx/commands/package/package-generate.js +30 -51
  16. package/dist/m365/spfx/commands/project/project-azuredevops-pipeline-add.js +27 -62
  17. package/dist/m365/spfx/commands/project/project-doctor.js +20 -51
  18. package/dist/m365/spfx/commands/project/project-externalize.js +16 -26
  19. package/dist/m365/spfx/commands/project/project-github-workflow-add.js +28 -65
  20. package/dist/m365/spfx/commands/project/project-permissions-grant.js +4 -2
  21. package/dist/m365/spfx/commands/project/project-rename.js +17 -29
  22. package/dist/m365/spfx/commands/project/project-upgrade.js +0 -3
  23. package/dist/m365/spfx/commands/spfx-doctor.js +23 -47
  24. package/dist/m365/spo/commands/page/page-add.js +31 -68
  25. package/dist/m365/spo/commands/page/page-clientsidewebpart-add.js +74 -101
  26. package/dist/m365/spo/commands/page/page-column-get.js +15 -32
  27. package/dist/m365/spo/commands/page/page-column-list.js +14 -27
  28. package/dist/m365/spo/commands/page/page-control-get.js +18 -27
  29. package/dist/m365/spo/commands/page/page-control-list.js +13 -20
  30. package/dist/m365/spo/commands/page/page-control-remove.js +1 -1
  31. package/dist/m365/spo/commands/page/page-control-set.js +51 -61
  32. package/dist/m365/spo/commands/page/page-copy.js +15 -31
  33. package/dist/m365/spo/commands/page/page-header-set.js +25 -89
  34. package/dist/m365/spo/commands/page/page-list.js +12 -18
  35. package/dist/m365/spo/commands/page/page-remove.js +16 -39
  36. package/dist/m365/spo/commands/page/page-section-add.js +108 -173
  37. package/dist/m365/spo/commands/page/page-section-get.js +17 -27
  38. package/dist/m365/spo/commands/page/page-section-list.js +13 -20
  39. package/dist/m365/spo/commands/page/page-section-remove.js +4 -1
  40. package/dist/m365/spo/commands/page/page-set.js +50 -100
  41. package/dist/m365/spo/commands/page/page-template-list.js +12 -18
  42. package/dist/m365/spo/commands/page/page-text-add.js +23 -45
  43. package/dist/m365/viva/commands/connections/connections-app-create.js +36 -42
  44. package/dist/m365/viva/commands/engage/engage-community-add.js +75 -71
  45. package/dist/m365/viva/commands/engage/engage-community-get.js +8 -16
  46. package/dist/m365/viva/commands/engage/engage-community-list.js +5 -0
  47. package/dist/m365/viva/commands/engage/engage-community-remove.js +28 -48
  48. package/dist/m365/viva/commands/engage/engage-community-set.js +43 -66
  49. package/dist/m365/viva/commands/engage/engage-community-user-add.js +7 -12
  50. package/dist/m365/viva/commands/engage/engage-community-user-list.js +1 -1
  51. package/dist/m365/viva/commands/engage/engage-community-user-remove.js +4 -2
  52. package/dist/m365/viva/commands/engage/engage-message-add.js +22 -52
  53. package/dist/m365/viva/commands/engage/engage-message-get.js +8 -23
  54. package/dist/m365/viva/commands/engage/engage-message-like-set.js +10 -39
  55. package/dist/m365/viva/commands/engage/engage-message-list.js +22 -66
  56. package/dist/m365/viva/commands/engage/engage-message-remove.js +9 -32
  57. package/dist/m365/viva/commands/engage/engage-network-list.js +8 -22
  58. package/dist/m365/viva/commands/engage/engage-report-activitycounts.js +2 -1
  59. package/dist/m365/viva/commands/engage/engage-report-activityusercounts.js +2 -1
  60. package/dist/m365/viva/commands/engage/engage-report-activityuserdetail.js +2 -1
  61. package/dist/m365/viva/commands/engage/engage-report-deviceusagedistributionusercounts.js +2 -1
  62. package/dist/m365/viva/commands/engage/engage-report-deviceusageusercounts.js +2 -1
  63. package/dist/m365/viva/commands/engage/engage-report-deviceusageuserdetail.js +2 -1
  64. package/dist/m365/viva/commands/engage/engage-report-groupsactivitycounts.js +2 -1
  65. package/dist/m365/viva/commands/engage/engage-report-groupsactivitydetail.js +2 -1
  66. package/dist/m365/viva/commands/engage/engage-report-groupsactivitygroupcounts.js +2 -1
  67. package/dist/m365/viva/commands/engage/engage-role-list.js +5 -0
  68. package/dist/m365/viva/commands/engage/engage-role-member-add.js +3 -5
  69. package/dist/m365/viva/commands/engage/engage-role-member-list.js +1 -1
  70. package/dist/m365/viva/commands/engage/engage-role-member-remove.js +4 -2
  71. package/dist/m365/viva/commands/engage/engage-search.js +16 -65
  72. package/dist/m365/viva/commands/engage/engage-user-get.js +15 -33
  73. package/dist/m365/viva/commands/engage/engage-user-list.js +22 -57
  74. package/docs/docs/cmd/spo/listitem/listitem-record-declare.mdx +19 -0
  75. package/docs/docs/cmd/spo/listitem/listitem-record-lock.mdx +21 -0
  76. package/docs/docs/cmd/spo/listitem/listitem-record-undeclare.mdx +21 -0
  77. package/docs/docs/cmd/spo/listitem/listitem-record-unlock.mdx +21 -0
  78. package/docs/docs/cmd/spo/page/page-text-add.mdx +1 -1
  79. package/docs/docs/cmd/viva/engage/engage-community-add.mdx +19 -0
  80. package/docs/docs/cmd/viva/engage/engage-community-get.mdx +19 -0
  81. package/docs/docs/cmd/viva/engage/engage-community-remove.mdx +21 -0
  82. package/docs/docs/cmd/viva/engage/engage-community-set.mdx +19 -0
  83. package/package.json +1 -1
@@ -1,10 +1,6 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _SpoPageSetCommand_instances, _SpoPageSetCommand_initTelemetry, _SpoPageSetCommand_initOptions, _SpoPageSetCommand_initTypes, _SpoPageSetCommand_initValidators;
1
+ import { z } from 'zod';
7
2
  import { Auth } from '../../../../Auth.js';
3
+ import { globalOptionsZod } from '../../../../Command.js';
8
4
  import request from '../../../../request.js';
9
5
  import { formatting } from '../../../../utils/formatting.js';
10
6
  import { spo } from '../../../../utils/spo.js';
@@ -13,6 +9,37 @@ import { validation } from '../../../../utils/validation.js';
13
9
  import SpoCommand from '../../../base/SpoCommand.js';
14
10
  import commands from '../../commands.js';
15
11
  import { Page, supportedPageLayouts, supportedPromoteAs } from './Page.js';
12
+ export const options = z.strictObject({
13
+ ...globalOptionsZod.shape,
14
+ webUrl: z.string()
15
+ .refine(url => validation.isValidSharePointUrl(url) === true, {
16
+ error: e => `'${e.input}' is not a valid SharePoint Online site URL.`
17
+ })
18
+ .alias('u'),
19
+ name: z.string().alias('n'),
20
+ layoutType: z.enum(supportedPageLayouts).optional().alias('l'),
21
+ promoteAs: z.enum(supportedPromoteAs).optional().alias('p'),
22
+ demoteFrom: z.enum(['NewsPage']).optional(),
23
+ commentsEnabled: z.boolean().optional().autocomplete(['true', 'false']),
24
+ publish: z.boolean().optional(),
25
+ publishMessage: z.string().optional(),
26
+ description: z.string().optional(),
27
+ title: z.string().optional(),
28
+ content: z.string()
29
+ .refine(content => {
30
+ try {
31
+ JSON.parse(content);
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }, {
38
+ error: 'Specified content is not a valid JSON string.'
39
+ })
40
+ .optional(),
41
+ isRetired: z.boolean().optional().autocomplete(['true', 'false'])
42
+ });
16
43
  class SpoPageSetCommand extends SpoCommand {
17
44
  get name() {
18
45
  return commands.PAGE_SET;
@@ -20,13 +47,23 @@ class SpoPageSetCommand extends SpoCommand {
20
47
  get description() {
21
48
  return 'Updates modern page properties';
22
49
  }
23
- constructor() {
24
- super();
25
- _SpoPageSetCommand_instances.add(this);
26
- __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initTelemetry).call(this);
27
- __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initOptions).call(this);
28
- __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initTypes).call(this);
29
- __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initValidators).call(this);
50
+ get schema() {
51
+ return options;
52
+ }
53
+ getRefinedSchema(schema) {
54
+ return schema
55
+ .refine(opts => !!(opts.layoutType || opts.promoteAs || opts.demoteFrom || opts.commentsEnabled !== undefined ||
56
+ opts.publish || opts.description || opts.title || opts.content || opts.isRetired !== undefined), {
57
+ error: 'Specify at least one option to update.'
58
+ })
59
+ .refine(opts => opts.promoteAs !== 'HomePage' || opts.layoutType === 'Home', {
60
+ error: 'You can only promote home pages as site home page',
61
+ path: ['promoteAs']
62
+ })
63
+ .refine(opts => opts.promoteAs !== 'NewsPage' || !opts.layoutType || opts.layoutType === 'Article', {
64
+ error: 'You can only promote article pages as news article',
65
+ path: ['promoteAs']
66
+ });
30
67
  }
31
68
  async commandAction(logger, args) {
32
69
  const resource = Auth.getResourceFromUrl(args.options.webUrl);
@@ -231,92 +268,5 @@ class SpoPageSetCommand extends SpoCommand {
231
268
  }
232
269
  }
233
270
  }
234
- _SpoPageSetCommand_instances = new WeakSet(), _SpoPageSetCommand_initTelemetry = function _SpoPageSetCommand_initTelemetry() {
235
- this.telemetry.push((args) => {
236
- Object.assign(this.telemetryProperties, {
237
- layoutType: args.options.layoutType || false,
238
- promoteAs: args.options.promoteAs || false,
239
- demotefrom: args.options.demoteFrom || false,
240
- commentsEnabled: args.options.commentsEnabled || false,
241
- publish: args.options.publish || false,
242
- publishMessage: typeof args.options.publishMessage !== 'undefined',
243
- description: typeof args.options.description !== 'undefined',
244
- title: typeof args.options.title !== 'undefined',
245
- content: typeof args.options.content !== 'undefined',
246
- isRetired: typeof args.options.isRetired !== 'undefined'
247
- });
248
- });
249
- }, _SpoPageSetCommand_initOptions = function _SpoPageSetCommand_initOptions() {
250
- this.options.unshift({
251
- option: '-n, --name <name>'
252
- }, {
253
- option: '-u, --webUrl <webUrl>'
254
- }, {
255
- option: '-l, --layoutType [layoutType]',
256
- autocomplete: supportedPageLayouts
257
- }, {
258
- option: '-p, --promoteAs [promoteAs]',
259
- autocomplete: supportedPromoteAs
260
- }, {
261
- option: '--demoteFrom [demoteFrom]',
262
- autocomplete: ['NewsPage']
263
- }, {
264
- option: '--commentsEnabled [commentsEnabled]',
265
- autocomplete: ['true', 'false']
266
- }, {
267
- option: '--publish'
268
- }, {
269
- option: '--publishMessage [publishMessage]'
270
- }, {
271
- option: '--description [description]'
272
- }, {
273
- option: '--title [title]'
274
- }, {
275
- option: '--content [content]'
276
- }, {
277
- option: '--isRetired [isRetired]',
278
- autocomplete: ['true', 'false']
279
- });
280
- }, _SpoPageSetCommand_initTypes = function _SpoPageSetCommand_initTypes() {
281
- this.types.boolean.push('commentsEnabled', 'isRetired');
282
- }, _SpoPageSetCommand_initValidators = function _SpoPageSetCommand_initValidators() {
283
- this.validators.push(async (args) => {
284
- const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
285
- if (isValidSharePointUrl !== true) {
286
- return isValidSharePointUrl;
287
- }
288
- if (!args.options.layoutType && !args.options.promoteAs && !args.options.demoteFrom && args.options.commentsEnabled === undefined &&
289
- !args.options.publish && !args.options.description && !args.options.title && !args.options.content && args.options.isRetired === undefined) {
290
- return 'Specify at least one option to update.';
291
- }
292
- if (args.options.layoutType &&
293
- supportedPageLayouts.indexOf(args.options.layoutType) < 0) {
294
- return `${args.options.layoutType} is not a valid option for layoutType. Allowed values ${supportedPageLayouts.join(', ')}`;
295
- }
296
- if (args.options.promoteAs &&
297
- supportedPromoteAs.indexOf(args.options.promoteAs) < 0) {
298
- return `${args.options.promoteAs} is not a valid option for promoteAs. Allowed values ${supportedPromoteAs.join(', ')}`;
299
- }
300
- if (args.options.demoteFrom &&
301
- args.options.demoteFrom !== 'NewsPage') {
302
- return `${args.options.demoteFrom} is not a valid option for demoteFrom. The only allowed value is 'NewsPage'`;
303
- }
304
- if (args.options.promoteAs === 'HomePage' && args.options.layoutType !== 'Home') {
305
- return 'You can only promote home pages as site home page';
306
- }
307
- if (args.options.promoteAs === 'NewsPage' && args.options.layoutType && args.options.layoutType !== 'Article') {
308
- return 'You can only promote article pages as news article';
309
- }
310
- if (args.options.content) {
311
- try {
312
- JSON.parse(args.options.content);
313
- }
314
- catch (e) {
315
- return `Specified content is not a valid JSON string. Input: ${args.options.content}. Error: ${e}`;
316
- }
317
- }
318
- return true;
319
- });
320
- };
321
271
  export default new SpoPageSetCommand();
322
272
  //# sourceMappingURL=page-set.js.map
@@ -1,13 +1,17 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _SpoPageTemplateListCommand_instances, _SpoPageTemplateListCommand_initOptions, _SpoPageTemplateListCommand_initValidators;
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
7
3
  import { odata } from '../../../../utils/odata.js';
8
4
  import { validation } from '../../../../utils/validation.js';
9
5
  import SpoCommand from '../../../base/SpoCommand.js';
10
6
  import commands from '../../commands.js';
7
+ export const options = z.strictObject({
8
+ ...globalOptionsZod.shape,
9
+ webUrl: z.string()
10
+ .refine(url => validation.isValidSharePointUrl(url) === true, {
11
+ error: e => `'${e.input}' is not a valid SharePoint Online site URL.`
12
+ })
13
+ .alias('u')
14
+ });
11
15
  class SpoPageTemplateListCommand extends SpoCommand {
12
16
  get name() {
13
17
  return commands.PAGE_TEMPLATE_LIST;
@@ -18,11 +22,8 @@ class SpoPageTemplateListCommand extends SpoCommand {
18
22
  defaultProperties() {
19
23
  return ['Title', 'FileName', 'Id', 'PageLayoutType', 'Url'];
20
24
  }
21
- constructor() {
22
- super();
23
- _SpoPageTemplateListCommand_instances.add(this);
24
- __classPrivateFieldGet(this, _SpoPageTemplateListCommand_instances, "m", _SpoPageTemplateListCommand_initOptions).call(this);
25
- __classPrivateFieldGet(this, _SpoPageTemplateListCommand_instances, "m", _SpoPageTemplateListCommand_initValidators).call(this);
25
+ get schema() {
26
+ return options;
26
27
  }
27
28
  async commandAction(logger, args) {
28
29
  if (this.verbose) {
@@ -42,12 +43,5 @@ class SpoPageTemplateListCommand extends SpoCommand {
42
43
  }
43
44
  }
44
45
  }
45
- _SpoPageTemplateListCommand_instances = new WeakSet(), _SpoPageTemplateListCommand_initOptions = function _SpoPageTemplateListCommand_initOptions() {
46
- this.options.unshift({
47
- option: '-u, --webUrl <webUrl>'
48
- });
49
- }, _SpoPageTemplateListCommand_initValidators = function _SpoPageTemplateListCommand_initValidators() {
50
- this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.webUrl));
51
- };
52
46
  export default new SpoPageTemplateListCommand();
53
47
  //# sourceMappingURL=page-template-list.js.map
@@ -1,9 +1,5 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _SpoPageTextAddCommand_instances, _SpoPageTextAddCommand_initTelemetry, _SpoPageTextAddCommand_initOptions, _SpoPageTextAddCommand_initValidators;
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
7
3
  import request from '../../../../request.js';
8
4
  import { spo } from '../../../../utils/spo.js';
9
5
  import { urlUtil } from '../../../../utils/urlUtil.js';
@@ -12,6 +8,25 @@ import SpoCommand from '../../../base/SpoCommand.js';
12
8
  import commands from '../../commands.js';
13
9
  import { CanvasSection, ClientSideText } from './clientsidepages.js';
14
10
  import { Page } from './Page.js';
11
+ export const options = z.strictObject({
12
+ ...globalOptionsZod.shape,
13
+ webUrl: z.string()
14
+ .refine(url => validation.isValidSharePointUrl(url) === true, {
15
+ error: e => `'${e.input}' is not a valid SharePoint Online site URL.`
16
+ })
17
+ .alias('u'),
18
+ pageName: z.string().alias('n'),
19
+ text: z.string().alias('t'),
20
+ section: z.number()
21
+ .int()
22
+ .min(1, { error: 'The value of parameter section must be 1 or higher' })
23
+ .optional(),
24
+ column: z.number()
25
+ .int()
26
+ .min(1, { error: 'The value of parameter column must be 1 or higher' })
27
+ .optional(),
28
+ order: z.number().int().min(1, { error: 'The value of parameter order must be 1 or higher' }).optional()
29
+ });
15
30
  class SpoPageTextAddCommand extends SpoCommand {
16
31
  get name() {
17
32
  return commands.PAGE_TEXT_ADD;
@@ -19,12 +34,8 @@ class SpoPageTextAddCommand extends SpoCommand {
19
34
  get description() {
20
35
  return 'Adds text to a modern page';
21
36
  }
22
- constructor() {
23
- super();
24
- _SpoPageTextAddCommand_instances.add(this);
25
- __classPrivateFieldGet(this, _SpoPageTextAddCommand_instances, "m", _SpoPageTextAddCommand_initTelemetry).call(this);
26
- __classPrivateFieldGet(this, _SpoPageTextAddCommand_instances, "m", _SpoPageTextAddCommand_initOptions).call(this);
27
- __classPrivateFieldGet(this, _SpoPageTextAddCommand_instances, "m", _SpoPageTextAddCommand_initValidators).call(this);
37
+ get schema() {
38
+ return options;
28
39
  }
29
40
  async commandAction(logger, args) {
30
41
  let pageName = args.options.pageName;
@@ -100,38 +111,5 @@ class SpoPageTextAddCommand extends SpoCommand {
100
111
  return request.post(requestOptions);
101
112
  }
102
113
  }
103
- _SpoPageTextAddCommand_instances = new WeakSet(), _SpoPageTextAddCommand_initTelemetry = function _SpoPageTextAddCommand_initTelemetry() {
104
- this.telemetry.push((args) => {
105
- Object.assign(this.telemetryProperties, {
106
- section: typeof args.options.section !== 'undefined',
107
- column: typeof args.options.column !== 'undefined',
108
- order: typeof args.options.order !== 'undefined'
109
- });
110
- });
111
- }, _SpoPageTextAddCommand_initOptions = function _SpoPageTextAddCommand_initOptions() {
112
- this.options.unshift({
113
- option: '-u, --webUrl <webUrl>'
114
- }, {
115
- option: '-n, --pageName <pageName>'
116
- }, {
117
- option: '-t, --text <text>'
118
- }, {
119
- option: '--section [section]'
120
- }, {
121
- option: '--column [column]'
122
- }, {
123
- option: '--order [order]'
124
- });
125
- }, _SpoPageTextAddCommand_initValidators = function _SpoPageTextAddCommand_initValidators() {
126
- this.validators.push(async (args) => {
127
- if (args.options.section && (!Number.isInteger(args.options.section) || args.options.section < 1)) {
128
- return 'The value of parameter section must be 1 or higher';
129
- }
130
- if (args.options.column && (!Number.isInteger(args.options.column) || args.options.column < 1)) {
131
- return 'The value of parameter column must be 1 or higher';
132
- }
133
- return validation.isValidSharePointUrl(args.options.webUrl);
134
- });
135
- };
136
114
  export default new SpoPageTextAddCommand();
137
115
  //# sourceMappingURL=page-text-add.js.map
@@ -1,16 +1,31 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _VivaConnectionsAppCreateCommand_instances, _VivaConnectionsAppCreateCommand_initOptions, _VivaConnectionsAppCreateCommand_initValidators;
7
1
  import AdmZip from 'adm-zip';
8
2
  import fs from 'fs';
9
3
  import path from 'path';
10
4
  import { v4 } from 'uuid';
5
+ import { z } from 'zod';
6
+ import { globalOptionsZod } from '../../../../Command.js';
11
7
  import AnonymousCommand from '../../../base/AnonymousCommand.js';
12
8
  import commands from '../../commands.js';
13
9
  import { spo } from '../../../../utils/spo.js';
10
+ export const options = z.strictObject({
11
+ ...globalOptionsZod.shape,
12
+ portalUrl: z.string(),
13
+ name: z.string().max(30, { message: 'App name must not exceed 30 characters' }),
14
+ description: z.string().max(80, { message: 'Description must not exceed 80 characters' }),
15
+ longDescription: z.string().max(4000, { message: 'Long description must not exceed 4000 characters' }),
16
+ privacyPolicyUrl: z.string().optional(),
17
+ termsOfUseUrl: z.string().optional(),
18
+ companyName: z.string(),
19
+ companyWebsiteUrl: z.string(),
20
+ coloredIconPath: z.string().refine(val => fs.existsSync(path.resolve(val)), {
21
+ error: e => `File ${path.resolve(e.input)} doesn't exist`
22
+ }),
23
+ outlineIconPath: z.string().refine(val => fs.existsSync(path.resolve(val)), {
24
+ error: e => `File ${path.resolve(e.input)} doesn't exist`
25
+ }),
26
+ accentColor: z.string().optional(),
27
+ force: z.boolean().optional()
28
+ });
14
29
  class VivaConnectionsAppCreateCommand extends AnonymousCommand {
15
30
  get name() {
16
31
  return commands.CONNECTIONS_APP_CREATE;
@@ -18,11 +33,20 @@ class VivaConnectionsAppCreateCommand extends AnonymousCommand {
18
33
  get description() {
19
34
  return 'Creates Viva Connections app';
20
35
  }
21
- constructor() {
22
- super();
23
- _VivaConnectionsAppCreateCommand_instances.add(this);
24
- __classPrivateFieldGet(this, _VivaConnectionsAppCreateCommand_instances, "m", _VivaConnectionsAppCreateCommand_initOptions).call(this);
25
- __classPrivateFieldGet(this, _VivaConnectionsAppCreateCommand_instances, "m", _VivaConnectionsAppCreateCommand_initValidators).call(this);
36
+ get schema() {
37
+ return options;
38
+ }
39
+ getRefinedSchema(schema) {
40
+ return schema
41
+ .superRefine((opts, ctx) => {
42
+ const appFilePath = path.resolve(`${opts.name}.zip`);
43
+ if (fs.existsSync(appFilePath) && !opts.force) {
44
+ ctx.addIssue({
45
+ message: `File ${path.resolve(`${opts.name}.zip`)} already exists. Delete the file or use the --force option to overwrite the existing file`,
46
+ code: z.ZodIssueCode.custom
47
+ });
48
+ }
49
+ });
26
50
  }
27
51
  async commandAction(logger, args) {
28
52
  try {
@@ -133,40 +157,10 @@ class VivaConnectionsAppCreateCommand extends AnonymousCommand {
133
157
  }
134
158
  async getWeb(args, logger) {
135
159
  if (this.verbose) {
136
- await logger.logToStderr(`Checking if site ${args.options.url} exists...`);
160
+ await logger.logToStderr(`Checking if site ${args.options.portalUrl} exists...`);
137
161
  }
138
162
  return await spo.getWeb(args.options.portalUrl, logger, this.verbose);
139
163
  }
140
164
  }
141
- _VivaConnectionsAppCreateCommand_instances = new WeakSet(), _VivaConnectionsAppCreateCommand_initOptions = function _VivaConnectionsAppCreateCommand_initOptions() {
142
- this.options.unshift({ option: '--portalUrl <portalUrl>' }, { option: '--name <name>' }, { option: '--description <description>' }, { option: '--longDescription <longDescription>' }, { option: '--privacyPolicyUrl [privacyPolicyUrl]' }, { option: '--termsOfUseUrl [termsOfUseUrl]' }, { option: '--companyName <companyName>' }, { option: '--companyWebsiteUrl <companyWebsiteUrl>' }, { option: '--coloredIconPath <coloredIconPath>' }, { option: '--outlineIconPath <outlineIconPath>' }, { option: '--accentColor [accentColor]' }, { option: '--force' });
143
- }, _VivaConnectionsAppCreateCommand_initValidators = function _VivaConnectionsAppCreateCommand_initValidators() {
144
- this.validators.push(async (args) => {
145
- if (args.options.name.length > 30) {
146
- return `App name must not exceed 30 characters`;
147
- }
148
- if (args.options.description &&
149
- args.options.description.length > 80) {
150
- return 'Description must not exceed 80 characters';
151
- }
152
- if (args.options.longDescription &&
153
- args.options.longDescription.length > 4000) {
154
- return 'Long description must not exceed 4000 characters';
155
- }
156
- const appFilePath = path.resolve(`${args.options.name}.zip`);
157
- if (fs.existsSync(appFilePath) && !args.options.force) {
158
- return `File ${appFilePath} already exists. Delete the file or use the --force option to overwrite the existing file`;
159
- }
160
- const coloredIconPath = path.resolve(args.options.coloredIconPath);
161
- if (!fs.existsSync(coloredIconPath)) {
162
- return `File ${coloredIconPath} doesn't exist`;
163
- }
164
- const outlineIconPath = path.resolve(args.options.outlineIconPath);
165
- if (!fs.existsSync(outlineIconPath)) {
166
- return `File ${outlineIconPath} doesn't exist`;
167
- }
168
- return true;
169
- });
170
- };
171
165
  export default new VivaConnectionsAppCreateCommand();
172
166
  //# sourceMappingURL=connections-app-create.js.map
@@ -1,11 +1,5 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _VivaEngageCommunityAddCommand_instances, _VivaEngageCommunityAddCommand_initTelemetry, _VivaEngageCommunityAddCommand_initOptions, _VivaEngageCommunityAddCommand_initValidators, _VivaEngageCommunityAddCommand_initTypes, _VivaEngageCommunityAddCommand_initOptionSets;
7
- import GraphCommand from '../../../base/GraphCommand.js';
8
- import commands from '../../commands.js';
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
9
3
  import request from '../../../../request.js';
10
4
  import { validation } from '../../../../utils/validation.js';
11
5
  import { accessToken } from '../../../../utils/accessToken.js';
@@ -13,23 +7,86 @@ import auth from '../../../../Auth.js';
13
7
  import { formatting } from '../../../../utils/formatting.js';
14
8
  import { entraUser } from '../../../../utils/entraUser.js';
15
9
  import { setTimeout } from 'timers/promises';
10
+ import GraphCommand from '../../../base/GraphCommand.js';
11
+ import commands from '../../commands.js';
12
+ export const options = z.strictObject({
13
+ ...globalOptionsZod.shape,
14
+ displayName: z.string(),
15
+ description: z.string(),
16
+ privacy: z.enum(['public', 'private']),
17
+ adminEntraIds: z.string().optional(),
18
+ adminEntraUserNames: z.string().optional(),
19
+ wait: z.boolean().optional()
20
+ });
16
21
  class VivaEngageCommunityAddCommand extends GraphCommand {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.pollingInterval = 5000;
25
+ }
17
26
  get name() {
18
27
  return commands.ENGAGE_COMMUNITY_ADD;
19
28
  }
20
29
  get description() {
21
30
  return 'Creates a new community in Viva Engage';
22
31
  }
23
- constructor() {
24
- super();
25
- _VivaEngageCommunityAddCommand_instances.add(this);
26
- this.pollingInterval = 5000;
27
- this.privacyOptions = ['public', 'private'];
28
- __classPrivateFieldGet(this, _VivaEngageCommunityAddCommand_instances, "m", _VivaEngageCommunityAddCommand_initTelemetry).call(this);
29
- __classPrivateFieldGet(this, _VivaEngageCommunityAddCommand_instances, "m", _VivaEngageCommunityAddCommand_initOptions).call(this);
30
- __classPrivateFieldGet(this, _VivaEngageCommunityAddCommand_instances, "m", _VivaEngageCommunityAddCommand_initValidators).call(this);
31
- __classPrivateFieldGet(this, _VivaEngageCommunityAddCommand_instances, "m", _VivaEngageCommunityAddCommand_initTypes).call(this);
32
- __classPrivateFieldGet(this, _VivaEngageCommunityAddCommand_instances, "m", _VivaEngageCommunityAddCommand_initOptionSets).call(this);
32
+ get schema() {
33
+ return options;
34
+ }
35
+ getRefinedSchema(schema) {
36
+ return schema
37
+ .refine(opts => opts.displayName.length <= 255, {
38
+ message: `The maximum amount of characters for 'displayName' is 255.`
39
+ })
40
+ .refine(opts => opts.description.length <= 1024, {
41
+ message: `The maximum amount of characters for 'description' is 1024.`
42
+ })
43
+ .superRefine((opts, ctx) => {
44
+ if (opts.adminEntraIds) {
45
+ const items = opts.adminEntraIds.split(',').map(s => s.trim());
46
+ const invalid = items.filter(item => !validation.isValidGuid(item));
47
+ if (invalid.length > 0) {
48
+ ctx.addIssue({
49
+ code: z.ZodIssueCode.custom,
50
+ message: `The following GUIDs are invalid for the option 'adminEntraIds': ${invalid.join(', ')}`
51
+ });
52
+ }
53
+ }
54
+ })
55
+ .refine(opts => {
56
+ if (!opts.adminEntraIds) {
57
+ return true;
58
+ }
59
+ return formatting.splitAndTrim(opts.adminEntraIds).length <= 20;
60
+ }, {
61
+ message: 'Maximum of 20 admins allowed. Please reduce the number of users and try again.'
62
+ })
63
+ .superRefine((opts, ctx) => {
64
+ if (opts.adminEntraUserNames) {
65
+ const items = opts.adminEntraUserNames.split(',').map(s => s.trim());
66
+ const invalid = items.filter(item => !validation.isValidUserPrincipalName(item));
67
+ if (invalid.length > 0) {
68
+ ctx.addIssue({
69
+ code: z.ZodIssueCode.custom,
70
+ message: `The following user principal names are invalid for the option 'adminEntraUserNames': ${invalid.join(', ')}`
71
+ });
72
+ }
73
+ }
74
+ })
75
+ .refine(opts => {
76
+ if (!opts.adminEntraUserNames) {
77
+ return true;
78
+ }
79
+ return formatting.splitAndTrim(opts.adminEntraUserNames).length <= 20;
80
+ }, {
81
+ message: 'Maximum of 20 admins allowed. Please reduce the number of users and try again.'
82
+ })
83
+ .refine(opts => !opts.adminEntraIds || !opts.adminEntraUserNames, {
84
+ message: 'Specify either adminEntraIds or adminEntraUserNames, but not both.',
85
+ params: {
86
+ customCode: 'optionSet',
87
+ options: ['adminEntraIds', 'adminEntraUserNames']
88
+ }
89
+ });
33
90
  }
34
91
  async commandAction(logger, args) {
35
92
  const { displayName, description, privacy, adminEntraIds, adminEntraUserNames, wait } = args.options;
@@ -109,58 +166,5 @@ class VivaEngageCommunityAddCommand extends GraphCommand {
109
166
  return graphUserUrls;
110
167
  }
111
168
  }
112
- _VivaEngageCommunityAddCommand_instances = new WeakSet(), _VivaEngageCommunityAddCommand_initTelemetry = function _VivaEngageCommunityAddCommand_initTelemetry() {
113
- this.telemetry.push((args) => {
114
- Object.assign(this.telemetryProperties, {
115
- adminEntraIds: typeof args.options.adminEntraIds !== 'undefined',
116
- adminEntraUserNames: typeof args.options.adminEntraUserNames !== 'undefined',
117
- wait: !!args.options.wait
118
- });
119
- });
120
- }, _VivaEngageCommunityAddCommand_initOptions = function _VivaEngageCommunityAddCommand_initOptions() {
121
- this.options.unshift({ option: '--displayName <displayName>' }, { option: '--description <description>' }, {
122
- option: '--privacy <privacy>',
123
- autocomplete: this.privacyOptions
124
- }, { option: '--adminEntraIds [adminEntraIds]' }, { option: '--adminEntraUserNames [adminEntraUserNames]' }, { option: '--wait' });
125
- }, _VivaEngageCommunityAddCommand_initValidators = function _VivaEngageCommunityAddCommand_initValidators() {
126
- this.validators.push(async (args) => {
127
- if (args.options.displayName.length > 255) {
128
- return `The maximum amount of characters for 'displayName' is 255.`;
129
- }
130
- if (args.options.description.length > 1024) {
131
- return `The maximum amount of characters for 'description' is 1024.`;
132
- }
133
- if (this.privacyOptions.indexOf(args.options.privacy) === -1) {
134
- return `'${args.options.privacy}' is not a valid value for privacy. Allowed values are: ${this.privacyOptions.join(', ')}.`;
135
- }
136
- if (args.options.adminEntraIds) {
137
- const isValidGUIDArrayResult = validation.isValidGuidArray(args.options.adminEntraIds);
138
- if (isValidGUIDArrayResult !== true) {
139
- return `The following GUIDs are invalid for the option 'adminEntraIds': ${isValidGUIDArrayResult}.`;
140
- }
141
- if (formatting.splitAndTrim(args.options.adminEntraIds).length > 20) {
142
- return `Maximum of 20 admins allowed. Please reduce the number of users and try again.`;
143
- }
144
- }
145
- if (args.options.adminEntraUserNames) {
146
- const isValidUPNArrayResult = validation.isValidUserPrincipalNameArray(args.options.adminEntraUserNames);
147
- if (isValidUPNArrayResult !== true) {
148
- return `The following user principal names are invalid for the option 'adminEntraUserNames': ${isValidUPNArrayResult}.`;
149
- }
150
- if (formatting.splitAndTrim(args.options.adminEntraUserNames).length > 20) {
151
- return `Maximum of 20 admins allowed. Please reduce the number of users and try again.`;
152
- }
153
- }
154
- return true;
155
- });
156
- }, _VivaEngageCommunityAddCommand_initTypes = function _VivaEngageCommunityAddCommand_initTypes() {
157
- this.types.string.push('displayName', 'description', 'privacy', 'adminEntraIds', 'adminEntraUserNames');
158
- this.types.boolean.push('wait');
159
- }, _VivaEngageCommunityAddCommand_initOptionSets = function _VivaEngageCommunityAddCommand_initOptionSets() {
160
- this.optionSets.push({
161
- options: ['adminEntraIds', 'adminEntraUserNames'],
162
- runsWhen: (args) => args.options.adminEntraIds || args.options.adminEntraUserNames
163
- });
164
- };
165
169
  export default new VivaEngageCommunityAddCommand();
166
170
  //# sourceMappingURL=engage-community-add.js.map
@@ -1,12 +1,12 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _VivaEngageCommunityGetCommand_instances, _VivaEngageCommunityGetCommand_initOptions, _VivaEngageCommunityGetCommand_initTypes;
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
7
3
  import GraphCommand from '../../../base/GraphCommand.js';
8
4
  import commands from '../../commands.js';
9
5
  import request from '../../../../request.js';
6
+ export const options = z.strictObject({
7
+ ...globalOptionsZod.shape,
8
+ id: z.string().alias('i')
9
+ });
10
10
  class VivaEngageCommunityGetCommand extends GraphCommand {
11
11
  get name() {
12
12
  return commands.ENGAGE_COMMUNITY_GET;
@@ -14,11 +14,8 @@ class VivaEngageCommunityGetCommand extends GraphCommand {
14
14
  get description() {
15
15
  return 'Gets information of a Viva Engage community';
16
16
  }
17
- constructor() {
18
- super();
19
- _VivaEngageCommunityGetCommand_instances.add(this);
20
- __classPrivateFieldGet(this, _VivaEngageCommunityGetCommand_instances, "m", _VivaEngageCommunityGetCommand_initOptions).call(this);
21
- __classPrivateFieldGet(this, _VivaEngageCommunityGetCommand_instances, "m", _VivaEngageCommunityGetCommand_initTypes).call(this);
17
+ get schema() {
18
+ return options;
22
19
  }
23
20
  async commandAction(logger, args) {
24
21
  if (this.verbose) {
@@ -40,10 +37,5 @@ class VivaEngageCommunityGetCommand extends GraphCommand {
40
37
  }
41
38
  }
42
39
  }
43
- _VivaEngageCommunityGetCommand_instances = new WeakSet(), _VivaEngageCommunityGetCommand_initOptions = function _VivaEngageCommunityGetCommand_initOptions() {
44
- this.options.unshift({ option: '-i, --id <id>' });
45
- }, _VivaEngageCommunityGetCommand_initTypes = function _VivaEngageCommunityGetCommand_initTypes() {
46
- this.types.string.push('id');
47
- };
48
40
  export default new VivaEngageCommunityGetCommand();
49
41
  //# sourceMappingURL=engage-community-get.js.map
@@ -1,6 +1,8 @@
1
+ import { globalOptionsZod } from '../../../../Command.js';
1
2
  import { odata } from '../../../../utils/odata.js';
2
3
  import GraphCommand from '../../../base/GraphCommand.js';
3
4
  import commands from '../../commands.js';
5
+ export const options = globalOptionsZod.strict();
4
6
  class VivaEngageCommunityListCommand extends GraphCommand {
5
7
  get name() {
6
8
  return commands.ENGAGE_COMMUNITY_LIST;
@@ -11,6 +13,9 @@ class VivaEngageCommunityListCommand extends GraphCommand {
11
13
  defaultProperties() {
12
14
  return ['id', 'displayName', 'privacy'];
13
15
  }
16
+ get schema() {
17
+ return options;
18
+ }
14
19
  async commandAction(logger) {
15
20
  if (this.verbose) {
16
21
  await logger.logToStderr('Getting all Viva Engage communities...');