@pnp/cli-microsoft365 5.5.0-beta.4e973d9 → 5.5.0-beta.9774606

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 (108) hide show
  1. package/dist/Auth.js +3 -3
  2. package/dist/Command.js +22 -0
  3. package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-restore.js +60 -9
  4. package/dist/m365/base/PowerAppsCommand.js +10 -0
  5. package/dist/m365/flow/commands/flow-export.js +3 -0
  6. package/dist/m365/pa/commands/app/app-get.js +3 -5
  7. package/dist/m365/pa/commands/app/app-list.js +10 -9
  8. package/dist/m365/pa/commands/app/app-remove.js +3 -3
  9. package/dist/m365/pa/commands/connector/connector-export.js +3 -3
  10. package/dist/m365/pa/commands/connector/connector-list.js +10 -9
  11. package/dist/m365/pa/commands/environment/environment-get.js +3 -3
  12. package/dist/m365/pa/commands/environment/environment-list.js +4 -4
  13. package/dist/m365/planner/commands/bucket/bucket-add.js +17 -9
  14. package/dist/m365/planner/commands/bucket/bucket-get.js +19 -11
  15. package/dist/m365/planner/commands/bucket/bucket-list.js +17 -9
  16. package/dist/m365/planner/commands/bucket/bucket-remove.js +19 -11
  17. package/dist/m365/planner/commands/bucket/bucket-set.js +19 -11
  18. package/dist/m365/planner/commands/plan/plan-add.js +98 -5
  19. package/dist/m365/planner/commands/plan/plan-get.js +58 -17
  20. package/dist/m365/planner/commands/plan/plan-remove.js +141 -0
  21. package/dist/m365/planner/commands/task/task-add.js +16 -16
  22. package/dist/m365/planner/commands/task/task-get.js +14 -9
  23. package/dist/m365/planner/commands/task/task-list.js +19 -11
  24. package/dist/m365/planner/commands/task/task-reference-add.js +1 -7
  25. package/dist/m365/planner/commands/task/task-reference-remove.js +11 -14
  26. package/dist/m365/planner/commands/task/task-remove.js +4 -19
  27. package/dist/m365/planner/commands/task/task-set.js +17 -23
  28. package/dist/m365/planner/commands/tenant/tenant-settings-set.js +95 -0
  29. package/dist/m365/planner/commands.js +3 -1
  30. package/dist/m365/search/commands/externalconnection/externalconnection-get.js +69 -0
  31. package/dist/m365/search/commands.js +1 -0
  32. package/dist/m365/spfx/commands/project/project-doctor/doctor-1.15.0.js +23 -0
  33. package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
  34. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN015008_FILE_eslintrc_js.js +7 -0
  35. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.15.0.js +6 -4
  36. package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
  37. package/dist/m365/spo/base-permissions.js +9 -0
  38. package/dist/m365/spo/commands/customaction/customaction-get.js +32 -4
  39. package/dist/m365/spo/commands/customaction/customaction-remove.js +43 -8
  40. package/dist/m365/spo/commands/field/field-set.js +16 -9
  41. package/dist/m365/spo/commands/group/group-add.js +96 -0
  42. package/dist/m365/spo/commands/group/group-set.js +167 -0
  43. package/dist/m365/spo/commands/hubsite/hubsite-get.js +99 -13
  44. package/dist/m365/spo/commands/listitem/listitem-get.js +9 -9
  45. package/dist/m365/spo/commands/listitem/listitem-list.js +5 -1
  46. package/dist/m365/spo/commands/listitem/listitem-set.js +2 -2
  47. package/dist/m365/spo/commands/roledefinition/RoleDefinition.js +3 -0
  48. package/dist/m365/spo/commands/roledefinition/RoleType.js +16 -0
  49. package/dist/m365/spo/commands/roledefinition/roledefinition-get.js +59 -0
  50. package/dist/m365/spo/commands/site/site-classic-list.js +1 -0
  51. package/dist/m365/spo/commands/site/site-classic-set.js +1 -0
  52. package/dist/m365/spo/commands/site/site-list.js +59 -17
  53. package/dist/m365/spo/commands/site/site-set.js +322 -162
  54. package/dist/m365/spo/commands/tenant/tenant-appcatalog-add.js +9 -6
  55. package/dist/m365/spo/commands.js +3 -0
  56. package/dist/m365/teams/commands/cache/cache-remove.js +155 -0
  57. package/dist/m365/teams/commands/team/team-archive.js +51 -15
  58. package/dist/m365/teams/commands/team/team-clone.js +33 -7
  59. package/dist/m365/teams/commands/team/team-remove.js +47 -11
  60. package/dist/m365/teams/commands/team/team-set.js +25 -5
  61. package/dist/m365/teams/commands/team/team-unarchive.js +48 -12
  62. package/dist/m365/teams/commands.js +1 -0
  63. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.js +1 -9
  64. package/dist/utils/accessToken.js +18 -0
  65. package/dist/utils/planner.js +9 -8
  66. package/dist/utils/validation.js +5 -1
  67. package/docs/docs/cmd/aad/o365group/o365group-recyclebinitem-restore.md +21 -3
  68. package/docs/docs/cmd/aad/user/user-get.md +12 -0
  69. package/docs/docs/cmd/planner/bucket/bucket-add.md +9 -6
  70. package/docs/docs/cmd/planner/bucket/bucket-get.md +10 -7
  71. package/docs/docs/cmd/planner/bucket/bucket-list.md +8 -5
  72. package/docs/docs/cmd/planner/bucket/bucket-remove.md +8 -5
  73. package/docs/docs/cmd/planner/bucket/bucket-set.md +9 -6
  74. package/docs/docs/cmd/planner/plan/plan-add.md +18 -2
  75. package/docs/docs/cmd/planner/plan/plan-get.md +14 -2
  76. package/docs/docs/cmd/planner/plan/plan-remove.md +48 -0
  77. package/docs/docs/cmd/planner/task/task-add.md +11 -8
  78. package/docs/docs/cmd/planner/task/task-get.md +17 -8
  79. package/docs/docs/cmd/planner/task/task-list.md +9 -6
  80. package/docs/docs/cmd/planner/task/task-set.md +9 -6
  81. package/docs/docs/cmd/planner/tenant/tenant-settings-set.md +56 -0
  82. package/docs/docs/cmd/search/externalconnection/externalconnection-get.md +33 -0
  83. package/docs/docs/cmd/spo/customaction/customaction-get.md +15 -2
  84. package/docs/docs/cmd/spo/customaction/customaction-remove.md +33 -2
  85. package/docs/docs/cmd/spo/field/field-set.md +7 -4
  86. package/docs/docs/cmd/spo/group/group-add.md +51 -0
  87. package/docs/docs/cmd/spo/group/group-set.md +69 -0
  88. package/docs/docs/cmd/spo/hubsite/hubsite-get.md +39 -7
  89. package/docs/docs/cmd/spo/listitem/listitem-get.md +11 -2
  90. package/docs/docs/cmd/spo/listitem/listitem-list.md +8 -0
  91. package/docs/docs/cmd/spo/roledefinition/roledefinition-get.md +27 -0
  92. package/docs/docs/cmd/spo/site/site-classic-list.md +3 -0
  93. package/docs/docs/cmd/spo/site/site-classic-set.md +3 -0
  94. package/docs/docs/cmd/spo/site/site-list.md +19 -7
  95. package/docs/docs/cmd/spo/site/site-set.md +50 -6
  96. package/docs/docs/cmd/teams/cache/cache-remove.md +46 -0
  97. package/docs/docs/cmd/teams/team/team-archive.md +20 -5
  98. package/docs/docs/cmd/teams/team/team-clone.md +11 -5
  99. package/docs/docs/cmd/teams/team/team-remove.md +19 -5
  100. package/docs/docs/cmd/teams/team/team-set.md +10 -4
  101. package/docs/docs/cmd/teams/team/team-unarchive.md +18 -4
  102. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-health-get.md +1 -1
  103. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-healthissue-list.md +1 -1
  104. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-message-list.md +1 -1
  105. package/npm-shrinkwrap.json +173 -158
  106. package/package.json +13 -13
  107. package/dist/m365/planner/commands/plan/plan-details-get.js +0 -116
  108. package/docs/docs/cmd/planner/plan/plan-details-get.md +0 -45
@@ -36,6 +36,9 @@ class SpoListItemListCommand extends SpoCommand_1.default {
36
36
  let formDigestValue = '';
37
37
  const fieldsArray = args.options.fields ? args.options.fields.split(",")
38
38
  : (!args.options.output || args.options.output === "text") ? ["Title", "Id"] : [];
39
+ const fieldsWithSlash = fieldsArray.filter(item => item.includes('/'));
40
+ const fieldsToExpand = fieldsWithSlash.map(e => e.split('/')[0]);
41
+ const expandFieldsArray = fieldsToExpand.filter((item, pos) => fieldsToExpand.indexOf(item) === pos);
39
42
  const listRestUrl = listIdArgument ?
40
43
  `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
41
44
  : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`;
@@ -75,8 +78,9 @@ class SpoListItemListCommand extends SpoCommand_1.default {
75
78
  const skipToken = (args.options.pageNumber && Number(args.options.pageNumber) > 0 && skipTokenId > 0) ? `$skiptoken=Paged=TRUE%26p_ID=${res.value[res.value.length - 1].Id}` : ``;
76
79
  const rowLimit = args.options.pageSize ? `$top=${args.options.pageSize}` : ``;
77
80
  const filter = args.options.filter ? `$filter=${encodeURIComponent(args.options.filter)}` : ``;
81
+ const fieldExpand = expandFieldsArray.length > 0 ? `&$expand=${expandFieldsArray.join(",")}` : ``;
78
82
  const fieldSelect = fieldsArray.length > 0 ?
79
- `?$select=${encodeURIComponent(fieldsArray.join(","))}&${rowLimit}&${skipToken}&${filter}` :
83
+ `?$select=${encodeURIComponent(fieldsArray.join(","))}${fieldExpand}&${rowLimit}&${skipToken}&${filter}` :
80
84
  `?${rowLimit}&${skipToken}&${filter}`;
81
85
  const requestBody = args.options.camlQuery ?
82
86
  {
@@ -281,11 +281,11 @@ class SpoListItemSetCommand extends SpoCommand_1.default {
281
281
  requestBody.push(`
282
282
  <Parameters>
283
283
  <Parameter Type="String">${key}</Parameter>
284
- <Parameter Type="String">${options[key]}</Parameter>
284
+ <Parameter Type="String">${options[key].toString()}</Parameter>
285
285
  </Parameters>`);
286
286
  }
287
287
  else {
288
- requestBody.push({ FieldName: key, FieldValue: options[key] });
288
+ requestBody.push({ FieldName: key, FieldValue: options[key].toString() });
289
289
  }
290
290
  }
291
291
  });
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=RoleDefinition.js.map
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleType = void 0;
4
+ var RoleType;
5
+ (function (RoleType) {
6
+ RoleType[RoleType["None"] = 0] = "None";
7
+ RoleType[RoleType["Guest"] = 1] = "Guest";
8
+ RoleType[RoleType["Reader"] = 2] = "Reader";
9
+ RoleType[RoleType["Contributor"] = 3] = "Contributor";
10
+ RoleType[RoleType["WebDesigner"] = 4] = "WebDesigner";
11
+ RoleType[RoleType["Administrator"] = 5] = "Administrator";
12
+ RoleType[RoleType["Editor"] = 6] = "Editor";
13
+ RoleType[RoleType["Reviewer"] = 7] = "Reviewer";
14
+ RoleType[RoleType["System"] = 8] = "System";
15
+ })(RoleType = exports.RoleType || (exports.RoleType = {}));
16
+ //# sourceMappingURL=RoleType.js.map
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const request_1 = require("../../../../request");
4
+ const utils_1 = require("../../../../utils");
5
+ const SpoCommand_1 = require("../../../base/SpoCommand");
6
+ const base_permissions_1 = require("../../base-permissions");
7
+ const commands_1 = require("../../commands");
8
+ const RoleType_1 = require("./RoleType");
9
+ class SpoRoleDefinitionGetCommand extends SpoCommand_1.default {
10
+ get name() {
11
+ return commands_1.default.ROLEDEFINITION_GET;
12
+ }
13
+ get description() {
14
+ return 'Gets specified role definition from web by id';
15
+ }
16
+ commandAction(logger, args, cb) {
17
+ if (this.verbose) {
18
+ logger.logToStderr(`Getting role definition from ${args.options.webUrl}...`);
19
+ }
20
+ const requestOptions = {
21
+ url: `${args.options.webUrl}/_api/web/roledefinitions(${args.options.id})`,
22
+ headers: {
23
+ 'accept': 'application/json;odata=nometadata'
24
+ },
25
+ responseType: 'json'
26
+ };
27
+ request_1.default
28
+ .get(requestOptions)
29
+ .then((response) => {
30
+ const permissions = new base_permissions_1.BasePermissions();
31
+ permissions.high = response.BasePermissions.High;
32
+ permissions.low = response.BasePermissions.Low;
33
+ response.BasePermissionsValue = permissions.parse();
34
+ response.RoleTypeKindValue = RoleType_1.RoleType[response.RoleTypeKind];
35
+ logger.log(response);
36
+ cb();
37
+ }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
38
+ }
39
+ options() {
40
+ const options = [
41
+ {
42
+ option: '-u, --webUrl <webUrl>'
43
+ },
44
+ {
45
+ option: '-i, --id <id>'
46
+ }
47
+ ];
48
+ const parentOptions = super.options();
49
+ return options.concat(parentOptions);
50
+ }
51
+ validate(args) {
52
+ if (isNaN(args.options.id)) {
53
+ return `${args.options.id} is not a number`;
54
+ }
55
+ return utils_1.validation.isValidSharePointUrl(args.options.webUrl);
56
+ }
57
+ }
58
+ module.exports = new SpoRoleDefinitionGetCommand();
59
+ //# sourceMappingURL=roledefinition-get.js.map
@@ -23,6 +23,7 @@ class SpoSiteClassicListCommand extends SpoCommand_1.default {
23
23
  return ['Title', 'Url'];
24
24
  }
25
25
  commandAction(logger, args, cb) {
26
+ this.showDeprecationWarning(logger, commands_1.default.SITE_CLASSIC_LIST, commands_1.default.SITE_LIST);
26
27
  const webTemplate = args.options.webTemplate || '';
27
28
  const includeOneDriveSites = args.options.includeOneDriveSites || false;
28
29
  const personalSite = includeOneDriveSites === false ? '0' : '1';
@@ -29,6 +29,7 @@ class SpoSiteClassicSetCommand extends SpoCommand_1.default {
29
29
  return telemetryProps;
30
30
  }
31
31
  commandAction(logger, args, cb) {
32
+ this.showDeprecationWarning(logger, commands_1.default.SITE_CLASSIC_SET, commands_1.default.SITE_SET);
32
33
  this.dots = '';
33
34
  utils_1.spo
34
35
  .getTenantId(logger, this.debug)
@@ -10,22 +10,25 @@ class SpoSiteListCommand extends SpoCommand_1.default {
10
10
  return commands_1.default.SITE_LIST;
11
11
  }
12
12
  get description() {
13
- return 'Lists modern sites of the given type';
13
+ return 'Lists sites of the given type';
14
14
  }
15
15
  getTelemetryProperties(args) {
16
16
  const telemetryProps = super.getTelemetryProperties(args);
17
- telemetryProps.siteType = args.options.type || 'TeamSite';
17
+ telemetryProps.webTemplate = args.options.webTemplate;
18
18
  telemetryProps.filter = (!(!args.options.filter)).toString();
19
- telemetryProps.deleted = args.options.deleted;
19
+ telemetryProps.includeOneDriveSites = typeof args.options.includeOneDriveSites !== 'undefined';
20
+ telemetryProps.deleted = typeof args.options.deleted !== 'undefined';
21
+ telemetryProps.siteType = args.options.type || 'TeamSite';
20
22
  return telemetryProps;
21
23
  }
22
24
  defaultProperties() {
23
25
  return ['Title', 'Url'];
24
26
  }
25
27
  commandAction(logger, args, cb) {
26
- const siteType = args.options.type || 'TeamSite';
27
- const webTemplate = siteType === 'TeamSite' ? 'GROUP#0' : 'SITEPAGEPUBLISHING#0';
28
- let spoAdminUrl;
28
+ const webTemplate = this.getWebTemplateId(args.options);
29
+ const includeOneDriveSites = args.options.includeOneDriveSites || false;
30
+ const personalSite = includeOneDriveSites === false ? '0' : '1';
31
+ let spoAdminUrl = '';
29
32
  utils_1.spo
30
33
  .getSpoAdminUrl(logger, this.debug)
31
34
  .then((_spoAdminUrl) => {
@@ -34,19 +37,19 @@ class SpoSiteListCommand extends SpoCommand_1.default {
34
37
  logger.logToStderr(`Retrieving list of site collections...`);
35
38
  }
36
39
  this.allSites = [];
37
- return this.getAllSites(spoAdminUrl, utils_1.formatting.escapeXml(args.options.filter || ''), '0', webTemplate, undefined, args.options.deleted, logger);
40
+ return this.getAllSites(spoAdminUrl, utils_1.formatting.escapeXml(args.options.filter || ''), '0', personalSite, webTemplate, undefined, args.options.deleted, logger);
38
41
  })
39
42
  .then(_ => {
40
43
  logger.log(this.allSites);
41
44
  cb();
42
45
  }, (err) => this.handleRejectedPromise(err, logger, cb));
43
46
  }
44
- getAllSites(spoAdminUrl, filter, startIndex, webTemplate, formDigest, deleted, logger) {
47
+ getAllSites(spoAdminUrl, filter, startIndex, personalSite, webTemplate, formDigest, deleted, logger) {
45
48
  return new Promise((resolve, reject) => {
46
49
  utils_1.spo
47
50
  .ensureFormDigest(spoAdminUrl, logger, formDigest, this.debug)
48
51
  .then((res) => {
49
- let requestBody = `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="2" ObjectPathId="1" /><ObjectPath Id="4" ObjectPathId="3" /><Query Id="5" ObjectPathId="3"><Query SelectAllProperties="true"><Properties /></Query><ChildItemQuery SelectAllProperties="true"><Properties /></ChildItemQuery></Query></Actions><ObjectPaths><Constructor Id="1" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /><Method Id="3" ParentId="1" Name="GetSitePropertiesFromSharePointByFilters"><Parameters><Parameter TypeId="{b92aeee2-c92c-4b67-abcc-024e471bc140}"><Property Name="Filter" Type="String">${filter}</Property><Property Name="IncludeDetail" Type="Boolean">false</Property><Property Name="IncludePersonalSite" Type="Enum">0</Property><Property Name="StartIndex" Type="String">${startIndex}</Property><Property Name="Template" Type="String">${webTemplate}</Property></Parameter></Parameters></Method></ObjectPaths></Request>`;
52
+ let requestBody = `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="2" ObjectPathId="1" /><ObjectPath Id="4" ObjectPathId="3" /><Query Id="5" ObjectPathId="3"><Query SelectAllProperties="true"><Properties /></Query><ChildItemQuery SelectAllProperties="true"><Properties /></ChildItemQuery></Query></Actions><ObjectPaths><Constructor Id="1" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /><Method Id="3" ParentId="1" Name="GetSitePropertiesFromSharePointByFilters"><Parameters><Parameter TypeId="{b92aeee2-c92c-4b67-abcc-024e471bc140}"><Property Name="Filter" Type="String">${filter}</Property><Property Name="IncludeDetail" Type="Boolean">false</Property><Property Name="IncludePersonalSite" Type="Enum">${personalSite}</Property><Property Name="StartIndex" Type="String">${startIndex}</Property><Property Name="Template" Type="String">${webTemplate}</Property></Parameter></Parameters></Method></ObjectPaths></Request>`;
50
53
  if (deleted) {
51
54
  requestBody = `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="4" ObjectPathId="3" /><ObjectPath Id="6" ObjectPathId="5" /><Query Id="7" ObjectPathId="5"><Query SelectAllProperties="true"><Properties><Property Name="NextStartIndexFromSharePoint" ScalarProperty="true" /></Properties></Query><ChildItemQuery SelectAllProperties="true"><Properties /></ChildItemQuery></Query></Actions><ObjectPaths><Constructor Id="3" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /><Method Id="5" ParentId="3" Name="GetDeletedSitePropertiesFromSharePoint"><Parameters><Parameter Type="String">${startIndex}</Parameter></Parameters></Method></ObjectPaths></Request>`;
52
55
  }
@@ -71,7 +74,7 @@ class SpoSiteListCommand extends SpoCommand_1.default {
71
74
  this.allSites.push(...sites._Child_Items_);
72
75
  if (sites.NextStartIndexFromSharePoint) {
73
76
  this
74
- .getAllSites(spoAdminUrl, filter, sites.NextStartIndexFromSharePoint, webTemplate, formDigest, deleted, logger)
77
+ .getAllSites(spoAdminUrl, filter, sites.NextStartIndexFromSharePoint, personalSite, webTemplate, formDigest, deleted, logger)
75
78
  .then(_ => resolve(), err => reject(err));
76
79
  }
77
80
  else {
@@ -81,15 +84,48 @@ class SpoSiteListCommand extends SpoCommand_1.default {
81
84
  }, err => reject(err));
82
85
  });
83
86
  }
87
+ /*
88
+ The type property currently defaults to Teamsite.
89
+ It makes more sense to default to All. Certainly after adding the 'includeOneDriveSites' option.
90
+ Changing this will be a breaking change. We'll remove the default the next major version.
91
+ */
92
+ getWebTemplateId(options) {
93
+ if (options.webTemplate) {
94
+ return options.webTemplate;
95
+ }
96
+ if (options.includeOneDriveSites) {
97
+ return '';
98
+ }
99
+ let siteType = options.type;
100
+ if (!siteType) {
101
+ siteType = 'TeamSite';
102
+ }
103
+ switch (siteType) {
104
+ case "TeamSite":
105
+ return 'GROUP#0';
106
+ case "CommunicationSite":
107
+ return 'SITEPAGEPUBLISHING#0';
108
+ default:
109
+ return '';
110
+ }
111
+ }
84
112
  options() {
85
113
  const options = [
86
114
  {
87
- option: '--type [type]',
88
- autocomplete: ['TeamSite', 'CommunicationSite']
115
+ option: '-t, --type [type]',
116
+ // To not introduce a breaking change, 'All' has been added.
117
+ // You should use all when using '--includeOneDriveSites'
118
+ autocomplete: ['TeamSite', 'CommunicationSite', 'All']
119
+ },
120
+ {
121
+ option: '--webTemplate [webTemplate]'
89
122
  },
90
123
  {
91
124
  option: '-f, --filter [filter]'
92
125
  },
126
+ {
127
+ option: '--includeOneDriveSites'
128
+ },
93
129
  {
94
130
  option: '--deleted'
95
131
  }
@@ -98,11 +134,17 @@ class SpoSiteListCommand extends SpoCommand_1.default {
98
134
  return options.concat(parentOptions);
99
135
  }
100
136
  validate(args) {
101
- if (args.options.type) {
102
- if (args.options.type !== 'TeamSite' &&
103
- args.options.type !== 'CommunicationSite') {
104
- return `${args.options.type} is not a valid modern site type. Allowed types are TeamSite and CommunicationSite`;
105
- }
137
+ if (args.options.type && args.options.webTemplate) {
138
+ return 'Specify either type or webTemplate, but not both';
139
+ }
140
+ const typeValues = ['TeamSite', 'CommunicationSite', 'All'];
141
+ if (args.options.type &&
142
+ typeValues.indexOf(args.options.type) < 0) {
143
+ return `${args.options.type} is not a valid value for the type option. Allowed values are ${typeValues.join('|')}`;
144
+ }
145
+ if (args.options.includeOneDriveSites
146
+ && (!args.options.type || args.options.type !== 'All')) {
147
+ return 'When using includeOneDriveSites, specify All as value for type';
106
148
  }
107
149
  return true;
108
150
  }