@pnp/cli-microsoft365 6.11.0-beta.69fd6f4 → 6.11.0-beta.6b1d864

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 (118) hide show
  1. package/dist/Auth.js +2 -1
  2. package/dist/Command.js +1 -1
  3. package/dist/m365/cli/commands/config/config-list.js +29 -0
  4. package/dist/m365/cli/commands.js +1 -0
  5. package/dist/m365/pa/commands/app/app-permission-ensure.js +177 -0
  6. package/dist/m365/pa/commands/app/app-permission-remove.js +170 -0
  7. package/dist/m365/pa/commands.js +2 -0
  8. package/dist/m365/planner/commands/bucket/bucket-add.js +2 -2
  9. package/dist/m365/planner/commands/bucket/bucket-get.js +2 -2
  10. package/dist/m365/planner/commands/bucket/bucket-list.js +2 -2
  11. package/dist/m365/planner/commands/bucket/bucket-remove.js +2 -2
  12. package/dist/m365/planner/commands/bucket/bucket-set.js +2 -2
  13. package/dist/m365/planner/commands/plan/plan-get.js +1 -2
  14. package/dist/m365/planner/commands/plan/plan-list.js +4 -5
  15. package/dist/m365/planner/commands/plan/plan-set.js +2 -2
  16. package/dist/m365/spfx/commands/project/project-externalize/rules/PnPJsRule.js +34 -23
  17. package/dist/m365/spfx/commands/spfx-doctor.js +32 -48
  18. package/dist/m365/spo/commands/file/file-add.js +13 -13
  19. package/dist/m365/spo/commands/file/file-checkin.js +1 -1
  20. package/dist/m365/spo/commands/file/file-checkout.js +1 -1
  21. package/dist/m365/spo/commands/file/file-copy.js +38 -4
  22. package/dist/m365/spo/commands/file/file-list.js +4 -4
  23. package/dist/m365/spo/commands/file/file-move.js +2 -2
  24. package/dist/m365/spo/commands/file/file-remove.js +6 -6
  25. package/dist/m365/spo/commands/file/file-rename.js +2 -2
  26. package/dist/m365/spo/commands/file/file-retentionlabel-ensure.js +1 -1
  27. package/dist/m365/spo/commands/file/file-retentionlabel-remove.js +1 -1
  28. package/dist/m365/spo/commands/file/file-roleassignment-add.js +1 -1
  29. package/dist/m365/spo/commands/file/file-roleassignment-remove.js +1 -1
  30. package/dist/m365/spo/commands/file/file-roleinheritance-break.js +1 -1
  31. package/dist/m365/spo/commands/file/file-roleinheritance-reset.js +1 -1
  32. package/dist/m365/spo/commands/file/file-version-clear.js +1 -1
  33. package/dist/m365/spo/commands/file/file-version-get.js +1 -1
  34. package/dist/m365/spo/commands/file/file-version-list.js +1 -1
  35. package/dist/m365/spo/commands/file/file-version-remove.js +1 -1
  36. package/dist/m365/spo/commands/file/file-version-restore.js +1 -1
  37. package/dist/m365/spo/commands/folder/folder-add.js +2 -4
  38. package/dist/m365/spo/commands/folder/folder-get.js +1 -1
  39. package/dist/m365/spo/commands/folder/folder-list.js +2 -2
  40. package/dist/m365/spo/commands/folder/folder-remove.js +7 -4
  41. package/dist/m365/spo/commands/folder/folder-rename.js +13 -17
  42. package/dist/m365/spo/commands/folder/folder-retentionlabel-ensure.js +1 -1
  43. package/dist/m365/spo/commands/folder/folder-retentionlabel-remove.js +1 -1
  44. package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +1 -1
  45. package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +1 -1
  46. package/dist/m365/spo/commands/folder/folder-roleinheritance-break.js +1 -1
  47. package/dist/m365/spo/commands/folder/folder-roleinheritance-reset.js +1 -1
  48. package/dist/m365/spo/commands/group/group-list.js +0 -1
  49. package/dist/m365/spo/commands/navigation/navigation-node-set.js +2 -2
  50. package/dist/m365/spo/commands/page/Page.js +24 -32
  51. package/dist/m365/spo/commands/propertybag/propertybag-base.js +75 -54
  52. package/dist/m365/spo/commands/propertybag/propertybag-remove.js +41 -40
  53. package/dist/m365/spo/commands/site/FlowsPolicy.js +10 -0
  54. package/dist/m365/spo/commands/site/site-ensure.js +3 -3
  55. package/dist/m365/spo/commands/site/site-hubsite-disconnect.js +24 -22
  56. package/dist/m365/spo/commands/site/site-list.js +28 -36
  57. package/dist/m365/spo/commands/site/site-set.js +52 -39
  58. package/dist/m365/spo/commands/theme/theme-remove.js +26 -24
  59. package/dist/m365/spo/commands/theme/theme-set.js +0 -1
  60. package/dist/m365/spo/commands/user/user-remove.js +29 -27
  61. package/dist/m365/spo/commands/web/web-reindex.js +17 -20
  62. package/dist/m365/spo/commands/web/web-remove.js +23 -21
  63. package/dist/m365/spo/commands/web/web-roleassignment-add.js +45 -52
  64. package/dist/m365/spo/commands/web/web-roleassignment-remove.js +58 -61
  65. package/dist/m365/spo/commands/web/web-roleinheritance-break.js +20 -18
  66. package/dist/m365/spo/commands/web/web-roleinheritance-reset.js +21 -19
  67. package/dist/m365/yammer/commands/message/message-like-set.js +29 -28
  68. package/dist/m365/yammer/commands/message/message-list.js +9 -26
  69. package/dist/m365/yammer/commands/message/message-remove.js +20 -18
  70. package/dist/m365/yammer/commands/yammer-search.js +42 -56
  71. package/dist/utils/planner.js +6 -3
  72. package/dist/utils/spo.js +1 -1
  73. package/docs/docs/cmd/cli/config/config-list.mdx +78 -0
  74. package/docs/docs/cmd/login.mdx +6 -0
  75. package/docs/docs/cmd/pa/app/app-permission-ensure.mdx +85 -0
  76. package/docs/docs/cmd/pa/app/app-permission-remove.mdx +74 -0
  77. package/docs/docs/cmd/spo/file/file-add.mdx +1 -1
  78. package/docs/docs/cmd/spo/file/file-checkin.mdx +1 -1
  79. package/docs/docs/cmd/spo/file/file-checkout-undo.mdx +1 -9
  80. package/docs/docs/cmd/spo/file/file-checkout.mdx +1 -1
  81. package/docs/docs/cmd/spo/file/file-copy.mdx +20 -16
  82. package/docs/docs/cmd/spo/file/file-get.mdx +1 -1
  83. package/docs/docs/cmd/spo/file/file-list.mdx +2 -2
  84. package/docs/docs/cmd/spo/file/file-move.mdx +2 -2
  85. package/docs/docs/cmd/spo/file/file-remove.mdx +8 -8
  86. package/docs/docs/cmd/spo/file/file-rename.mdx +3 -3
  87. package/docs/docs/cmd/spo/file/file-retentionlabel-ensure.mdx +2 -2
  88. package/docs/docs/cmd/spo/file/file-retentionlabel-remove.mdx +3 -3
  89. package/docs/docs/cmd/spo/file/file-roleassignment-add.mdx +1 -1
  90. package/docs/docs/cmd/spo/file/file-roleassignment-remove.mdx +1 -1
  91. package/docs/docs/cmd/spo/file/file-roleinheritance-break.mdx +1 -1
  92. package/docs/docs/cmd/spo/file/file-roleinheritance-reset.mdx +1 -1
  93. package/docs/docs/cmd/spo/file/file-sharinginfo-get.mdx +1 -1
  94. package/docs/docs/cmd/spo/file/file-sharinglink-add.mdx +1 -1
  95. package/docs/docs/cmd/spo/file/file-sharinglink-clear.mdx +1 -1
  96. package/docs/docs/cmd/spo/file/file-sharinglink-get.mdx +1 -1
  97. package/docs/docs/cmd/spo/file/file-sharinglink-list.mdx +1 -1
  98. package/docs/docs/cmd/spo/file/file-sharinglink-remove.mdx +1 -1
  99. package/docs/docs/cmd/spo/file/file-sharinglink-set.mdx +1 -1
  100. package/docs/docs/cmd/spo/file/file-version-clear.mdx +1 -1
  101. package/docs/docs/cmd/spo/file/file-version-get.mdx +1 -1
  102. package/docs/docs/cmd/spo/file/file-version-list.mdx +1 -1
  103. package/docs/docs/cmd/spo/file/file-version-remove.mdx +1 -1
  104. package/docs/docs/cmd/spo/file/file-version-restore.mdx +1 -1
  105. package/docs/docs/cmd/spo/folder/folder-add.mdx +76 -1
  106. package/docs/docs/cmd/spo/folder/folder-get.mdx +1 -1
  107. package/docs/docs/cmd/spo/folder/folder-list.mdx +1 -1
  108. package/docs/docs/cmd/spo/folder/folder-remove.mdx +1 -1
  109. package/docs/docs/cmd/spo/folder/folder-rename.mdx +5 -1
  110. package/docs/docs/cmd/spo/folder/folder-retentionlabel-ensure.mdx +1 -1
  111. package/docs/docs/cmd/spo/folder/folder-retentionlabel-remove.mdx +1 -1
  112. package/docs/docs/cmd/spo/folder/folder-roleassignment-add.mdx +2 -2
  113. package/docs/docs/cmd/spo/folder/folder-roleassignment-remove.mdx +1 -1
  114. package/docs/docs/cmd/spo/folder/folder-roleinheritance-break.mdx +1 -1
  115. package/docs/docs/cmd/spo/folder/folder-roleinheritance-reset.mdx +1 -1
  116. package/docs/docs/cmd/spo/site/site-ensure.mdx +1 -1
  117. package/npm-shrinkwrap.json +683 -344
  118. package/package.json +13 -13
@@ -93,7 +93,7 @@ class SpoSiteEnsureCommand extends SpoCommand_1.default {
93
93
  expectedWebTemplate = 'SITEPAGEPUBLISHING#0';
94
94
  break;
95
95
  case 'ClassicSite':
96
- expectedWebTemplate = args.options.webTemplate;
96
+ expectedWebTemplate = args.options.webTemplate || 'STS#0';
97
97
  break;
98
98
  default:
99
99
  throw `${args.options.type} is not a valid site type. Allowed types are TeamSite,CommunicationSite,ClassicSite`;
@@ -154,7 +154,7 @@ class SpoSiteEnsureCommand extends SpoCommand_1.default {
154
154
  };
155
155
  const validationResult = yield spoSiteAddCommand.validate({ options: options }, Cli_1.Cli.getCommandInfo(spoSiteAddCommand));
156
156
  if (validationResult !== true) {
157
- return Promise.reject(validationResult);
157
+ throw validationResult;
158
158
  }
159
159
  return Cli_1.Cli.executeCommandWithOutput(spoSiteAddCommand, { options: Object.assign(Object.assign({}, options), { _: [] }) });
160
160
  });
@@ -179,7 +179,7 @@ class SpoSiteEnsureCommand extends SpoCommand_1.default {
179
179
  };
180
180
  const validationResult = yield spoSiteSetCommand.validate({ options: options }, Cli_1.Cli.getCommandInfo(spoSiteSetCommand));
181
181
  if (validationResult !== true) {
182
- return Promise.reject(validationResult);
182
+ throw validationResult;
183
183
  }
184
184
  return Cli_1.Cli.executeCommandWithOutput(spoSiteSetCommand, { options: Object.assign(Object.assign({}, options), { _: [] }) });
185
185
  });
@@ -37,28 +37,8 @@ class SpoSiteHubSiteDisconnectCommand extends SpoCommand_1.default {
37
37
  }
38
38
  commandAction(logger, args) {
39
39
  return __awaiter(this, void 0, void 0, function* () {
40
- const disconnectHubSite = () => __awaiter(this, void 0, void 0, function* () {
41
- try {
42
- const res = yield spo_1.spo.getRequestDigest(args.options.siteUrl);
43
- if (this.verbose) {
44
- logger.logToStderr(`Disconnecting site collection ${args.options.siteUrl} from its hubsite...`);
45
- }
46
- const requestOptions = {
47
- url: `${args.options.siteUrl}/_api/site/JoinHubSite('00000000-0000-0000-0000-000000000000')`,
48
- headers: {
49
- 'X-RequestDigest': res.FormDigestValue,
50
- accept: 'application/json;odata=nometadata'
51
- },
52
- responseType: 'json'
53
- };
54
- yield request_1.default.post(requestOptions);
55
- }
56
- catch (err) {
57
- this.handleRejectedODataJsonPromise(err);
58
- }
59
- });
60
40
  if (args.options.confirm) {
61
- yield disconnectHubSite();
41
+ yield this.disconnectHubSite(logger, args);
62
42
  }
63
43
  else {
64
44
  const result = yield Cli_1.Cli.prompt({
@@ -68,8 +48,30 @@ class SpoSiteHubSiteDisconnectCommand extends SpoCommand_1.default {
68
48
  message: `Are you sure you want to disconnect the site collection ${args.options.siteUrl} from its hub site?`
69
49
  });
70
50
  if (result.continue) {
71
- yield disconnectHubSite();
51
+ yield this.disconnectHubSite(logger, args);
52
+ }
53
+ }
54
+ });
55
+ }
56
+ disconnectHubSite(logger, args) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ try {
59
+ const res = yield spo_1.spo.getRequestDigest(args.options.siteUrl);
60
+ if (this.verbose) {
61
+ logger.logToStderr(`Disconnecting site collection ${args.options.siteUrl} from its hubsite...`);
72
62
  }
63
+ const requestOptions = {
64
+ url: `${args.options.siteUrl}/_api/site/JoinHubSite('00000000-0000-0000-0000-000000000000')`,
65
+ headers: {
66
+ 'X-RequestDigest': res.FormDigestValue,
67
+ accept: 'application/json;odata=nometadata'
68
+ },
69
+ responseType: 'json'
70
+ };
71
+ yield request_1.default.post(requestOptions);
72
+ }
73
+ catch (err) {
74
+ this.handleRejectedODataJsonPromise(err);
73
75
  }
74
76
  });
75
77
  }
@@ -58,43 +58,35 @@ class SpoSiteListCommand extends SpoCommand_1.default {
58
58
  });
59
59
  }
60
60
  getAllSites(spoAdminUrl, filter, startIndex, personalSite, webTemplate, formDigest, deleted, logger) {
61
- return new Promise((resolve, reject) => {
62
- spo_1.spo
63
- .ensureFormDigest(spoAdminUrl, logger, formDigest, this.debug)
64
- .then((res) => {
65
- 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>`;
66
- if (deleted) {
67
- 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>`;
68
- }
69
- const requestOptions = {
70
- url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
71
- headers: {
72
- 'X-RequestDigest': res.FormDigestValue
73
- },
74
- data: requestBody
75
- };
76
- return request_1.default.post(requestOptions);
77
- })
78
- .then((res) => {
79
- const json = JSON.parse(res);
80
- const response = json[0];
81
- if (response.ErrorInfo) {
82
- reject(response.ErrorInfo.ErrorMessage);
83
- return;
84
- }
85
- else {
86
- const sites = json[json.length - 1];
87
- this.allSites.push(...sites._Child_Items_);
88
- if (sites.NextStartIndexFromSharePoint) {
89
- this
90
- .getAllSites(spoAdminUrl, filter, sites.NextStartIndexFromSharePoint, personalSite, webTemplate, formDigest, deleted, logger)
91
- .then(_ => resolve(), err => reject(err));
92
- }
93
- else {
94
- resolve();
95
- }
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ const res = yield spo_1.spo.ensureFormDigest(spoAdminUrl, logger, formDigest, this.debug);
63
+ 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>`;
64
+ if (deleted) {
65
+ 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>`;
66
+ }
67
+ const requestOptions = {
68
+ url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
69
+ headers: {
70
+ 'X-RequestDigest': res.FormDigestValue
71
+ },
72
+ data: requestBody
73
+ };
74
+ const res1 = yield request_1.default.post(requestOptions);
75
+ const json = JSON.parse(res1);
76
+ const response = json[0];
77
+ logger.log(response);
78
+ if (response.ErrorInfo) {
79
+ throw response.ErrorInfo.ErrorMessage;
80
+ }
81
+ else {
82
+ const sites = json[json.length - 1];
83
+ logger.log(sites);
84
+ this.allSites.push(...sites._Child_Items_);
85
+ if (sites.NextStartIndexFromSharePoint) {
86
+ yield this.getAllSites(spoAdminUrl, filter, sites.NextStartIndexFromSharePoint, personalSite, webTemplate, formDigest, deleted, logger);
96
87
  }
97
- }, err => reject(err));
88
+ return;
89
+ }
98
90
  });
99
91
  }
100
92
  getWebTemplateId(options) {
@@ -28,6 +28,7 @@ const SpoCommand_1 = require("../../../base/SpoCommand");
28
28
  const commands_1 = require("../../commands");
29
29
  const SharingCapabilities_1 = require("../site/SharingCapabilities");
30
30
  const spoSiteDesignApplyCommand = require("../sitedesign/sitedesign-apply");
31
+ const FlowsPolicy_1 = require("./FlowsPolicy");
31
32
  class SpoSiteSetCommand extends SpoCommand_1.default {
32
33
  get name() {
33
34
  return commands_1.default.SITE_SET;
@@ -310,33 +311,32 @@ class SpoSiteSetCommand extends SpoCommand_1.default {
310
311
  });
311
312
  }
312
313
  updateSiteProperties(logger, args) {
313
- const isGroupConnectedSite = this.isGroupConnectedSite();
314
- const sharedProperties = ['classification', 'disableFlows', 'socialBarOnSitePagesDisabled', 'shareByEmailEnabled', 'sharingCapability', 'noScriptSite'];
315
- const siteProperties = ['title', 'resourceQuota', 'resourceQuotaWarningLevel', 'storageQuota', 'storageQuotaWarningLevel', 'allowSelfServiceUpgrade'];
316
- let properties = sharedProperties;
317
- properties = properties;
318
- if (!isGroupConnectedSite) {
319
- properties = properties.concat(siteProperties);
320
- }
321
- let updatedProperties = false;
322
- for (let i = 0; i < properties.length; i++) {
323
- if (typeof args.options[properties[i]] !== 'undefined') {
324
- updatedProperties = true;
325
- break;
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ const isGroupConnectedSite = this.isGroupConnectedSite();
316
+ const sharedProperties = ['classification', 'disableFlows', 'socialBarOnSitePagesDisabled', 'shareByEmailEnabled', 'sharingCapability', 'noScriptSite'];
317
+ const siteProperties = ['title', 'resourceQuota', 'resourceQuotaWarningLevel', 'storageQuota', 'storageQuotaWarningLevel', 'allowSelfServiceUpgrade'];
318
+ let properties = sharedProperties;
319
+ if (!isGroupConnectedSite) {
320
+ properties = properties.concat(siteProperties);
326
321
  }
327
- }
328
- if (!updatedProperties) {
329
- return Promise.resolve(undefined);
330
- }
331
- return spo_1.spo
332
- .ensureFormDigest(this.spoAdminUrl, logger, this.context, this.debug)
333
- .then(res => {
322
+ let updatedProperties = false;
323
+ for (let i = 0; i < properties.length; i++) {
324
+ if (typeof args.options[properties[i]] !== 'undefined') {
325
+ updatedProperties = true;
326
+ break;
327
+ }
328
+ }
329
+ if (!updatedProperties) {
330
+ return Promise.resolve(undefined);
331
+ }
332
+ const res = yield spo_1.spo.ensureFormDigest(this.spoAdminUrl, logger, this.context, this.debug);
334
333
  this.context = res;
335
334
  if (this.verbose) {
336
335
  logger.logToStderr(`Updating site ${args.options.url} properties...`);
337
336
  }
338
337
  let propertyId = 27;
339
338
  const payload = [];
339
+ const sitePropertiesPayload = [];
340
340
  if (!isGroupConnectedSite) {
341
341
  if (args.options.title) {
342
342
  payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="Title"><Parameter Type="String">${formatting_1.formatting.escapeXml(args.options.title)}</Parameter></SetProperty>`);
@@ -353,39 +353,52 @@ class SpoSiteSetCommand extends SpoCommand_1.default {
353
353
  if (args.options.storageQuotaWarningLevel) {
354
354
  payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="StorageWarningLevel"><Parameter Type="Int64">${args.options.storageQuotaWarningLevel}</Parameter></SetProperty>`);
355
355
  }
356
- if (typeof args.options.allowSelfServiceUpgrade !== 'undefined') {
356
+ if (args.options.allowSelfServiceUpgrade !== undefined) {
357
357
  payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="AllowSelfServiceUpgrade"><Parameter Type="Boolean">${args.options.allowSelfServiceUpgrade}</Parameter></SetProperty>`);
358
358
  }
359
359
  }
360
360
  if (typeof args.options.classification === 'string') {
361
- payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="Classification"><Parameter Type="String">${formatting_1.formatting.escapeXml(args.options.classification)}</Parameter></SetProperty>`);
362
- }
363
- if (typeof args.options.disableFlows !== 'undefined') {
364
- payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="DisableFlows"><Parameter Type="Boolean">${args.options.disableFlows}</Parameter></SetProperty>`);
361
+ sitePropertiesPayload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="Classification"><Parameter Type="String">${formatting_1.formatting.escapeXml(args.options.classification)}</Parameter></SetProperty>`);
365
362
  }
366
- if (typeof args.options.socialBarOnSitePagesDisabled !== 'undefined') {
367
- payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="SocialBarOnSitePagesDisabled"><Parameter Type="Boolean">${args.options.socialBarOnSitePagesDisabled}</Parameter></SetProperty>`);
363
+ if (args.options.disableFlows !== undefined) {
364
+ const flowsPolicy = args.options.disableFlows ? FlowsPolicy_1.FlowsPolicy.Disabled : FlowsPolicy_1.FlowsPolicy.Enabled;
365
+ payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="DisableFlows"><Parameter Type="Enum">${flowsPolicy}</Parameter></SetProperty>`);
368
366
  }
369
- if (typeof args.options.shareByEmailEnabled !== 'undefined') {
370
- payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="ShareByEmailEnabled"><Parameter Type="Boolean">${args.options.shareByEmailEnabled}</Parameter></SetProperty>`);
367
+ if (args.options.shareByEmailEnabled !== undefined) {
368
+ sitePropertiesPayload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="ShareByEmailEnabled"><Parameter Type="Boolean">${args.options.shareByEmailEnabled}</Parameter></SetProperty>`);
371
369
  }
372
370
  if (args.options.sharingCapability) {
373
371
  const sharingCapability = SharingCapabilities_1.SharingCapabilities[args.options.sharingCapability];
374
372
  payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="SharingCapability"><Parameter Type="Enum">${sharingCapability}</Parameter></SetProperty>`);
375
373
  }
376
- if (typeof args.options.noScriptSite !== 'undefined') {
374
+ if (args.options.noScriptSite !== undefined) {
377
375
  const noScriptSite = args.options.noScriptSite ? 2 : 1;
378
376
  payload.push(`<SetProperty Id="${propertyId++}" ObjectPathId="5" Name="DenyAddAndCustomizePages"><Parameter Type="Enum">${noScriptSite}</Parameter></SetProperty>`);
379
377
  }
380
- const pos = this.tenantId.indexOf('|') + 1;
381
- const requestOptions = {
382
- url: `${this.spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
383
- headers: {
384
- 'X-RequestDigest': res.FormDigestValue
385
- },
386
- data: `<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>${payload.join('')}<ObjectPath Id="14" ObjectPathId="13" /><ObjectIdentityQuery Id="15" ObjectPathId="5" /><Query Id="16" ObjectPathId="13"><Query SelectAllProperties="false"><Properties><Property Name="IsComplete" ScalarProperty="true" /><Property Name="PollingInterval" ScalarProperty="true" /></Properties></Query></Query></Actions><ObjectPaths><Identity Id="5" Name="53d8499e-d0d2-5000-cb83-9ade5be42ca4|${this.tenantId.substr(pos, this.tenantId.indexOf('&') - pos)}&#xA;SiteProperties&#xA;${formatting_1.formatting.encodeQueryParameter(args.options.url)}" /><Method Id="13" ParentId="5" Name="Update" /></ObjectPaths></Request>`
387
- };
388
- return request_1.default.post(requestOptions);
378
+ let response;
379
+ let sitePropertiesResponse;
380
+ if (sitePropertiesPayload.length > 0) {
381
+ const requestOptions = {
382
+ url: `${args.options.url}/_vti_bin/client.svc/ProcessQuery`,
383
+ headers: {
384
+ 'X-RequestDigest': res.FormDigestValue
385
+ },
386
+ data: `<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>${sitePropertiesPayload.join('')}</Actions><ObjectPaths><StaticProperty Id="1" TypeId="{3747adcd-a3c3-41b9-bfab-4a64dd2f1e0a}" Name="Current" /><Property Id="5" ParentId="1" Name="Site" /></ObjectPaths></Request>`
387
+ };
388
+ sitePropertiesResponse = yield request_1.default.post(requestOptions);
389
+ }
390
+ if (payload.length > 0) {
391
+ const pos = this.tenantId.indexOf('|') + 1;
392
+ const requestOptions = {
393
+ url: `${this.spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
394
+ headers: {
395
+ 'X-RequestDigest': res.FormDigestValue
396
+ },
397
+ data: `<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>${payload.join('')}<ObjectPath Id="14" ObjectPathId="13" /><ObjectIdentityQuery Id="15" ObjectPathId="5" /><Query Id="16" ObjectPathId="13"><Query SelectAllProperties="false"><Properties><Property Name="IsComplete" ScalarProperty="true" /><Property Name="PollingInterval" ScalarProperty="true" /></Properties></Query></Query></Actions><ObjectPaths><Identity Id="5" Name="53d8499e-d0d2-5000-cb83-9ade5be42ca4|${this.tenantId.substr(pos, this.tenantId.indexOf('&') - pos)}&#xA;SiteProperties&#xA;${formatting_1.formatting.encodeQueryParameter(args.options.url)}" /><Method Id="13" ParentId="5" Name="Update" /></ObjectPaths></Request>`
398
+ };
399
+ response = yield request_1.default.post(requestOptions);
400
+ }
401
+ return response || sitePropertiesResponse;
389
402
  });
390
403
  }
391
404
  applySiteDesign(logger, args) {
@@ -35,30 +35,8 @@ class SpoThemeRemoveCommand extends SpoCommand_1.default {
35
35
  }
36
36
  commandAction(logger, args) {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
- const removeTheme = () => __awaiter(this, void 0, void 0, function* () {
39
- try {
40
- const spoAdminUrl = yield spo_1.spo.getSpoAdminUrl(logger, this.debug);
41
- if (this.verbose) {
42
- logger.logToStderr(`Removing theme from tenant...`);
43
- }
44
- const requestOptions = {
45
- url: `${spoAdminUrl}/_api/thememanager/DeleteTenantTheme`,
46
- headers: {
47
- 'accept': 'application/json;odata=nometadata'
48
- },
49
- data: {
50
- name: args.options.name
51
- },
52
- responseType: 'json'
53
- };
54
- yield request_1.default.post(requestOptions);
55
- }
56
- catch (err) {
57
- this.handleRejectedODataJsonPromise(err);
58
- }
59
- });
60
38
  if (args.options.confirm) {
61
- yield removeTheme();
39
+ yield this.removeTheme(logger, args.options);
62
40
  }
63
41
  else {
64
42
  const result = yield Cli_1.Cli.prompt({
@@ -68,8 +46,32 @@ class SpoThemeRemoveCommand extends SpoCommand_1.default {
68
46
  message: `Are you sure you want to remove the theme`
69
47
  });
70
48
  if (result.continue) {
71
- yield removeTheme();
49
+ yield this.removeTheme(logger, args.options);
50
+ }
51
+ }
52
+ });
53
+ }
54
+ removeTheme(logger, options) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ try {
57
+ const spoAdminUrl = yield spo_1.spo.getSpoAdminUrl(logger, this.debug);
58
+ if (this.verbose) {
59
+ logger.logToStderr(`Removing theme from tenant...`);
72
60
  }
61
+ const requestOptions = {
62
+ url: `${spoAdminUrl}/_api/thememanager/DeleteTenantTheme`,
63
+ headers: {
64
+ 'accept': 'application/json;odata=nometadata'
65
+ },
66
+ data: {
67
+ name: options.name
68
+ },
69
+ responseType: 'json'
70
+ };
71
+ yield request_1.default.post(requestOptions);
72
+ }
73
+ catch (err) {
74
+ this.handleRejectedODataJsonPromise(err);
73
75
  }
74
76
  });
75
77
  }
@@ -61,7 +61,6 @@ class SpoThemeSetCommand extends SpoCommand_1.default {
61
61
  if (contents && contents.ErrorInfo) {
62
62
  throw contents.ErrorInfo.ErrorMessage || 'ClientSvc unknown error';
63
63
  }
64
- return Promise.resolve();
65
64
  }
66
65
  catch (err) {
67
66
  this.handleRejectedPromise(err);
@@ -38,33 +38,8 @@ class SpoUserRemoveCommand extends SpoCommand_1.default {
38
38
  }
39
39
  commandAction(logger, args) {
40
40
  return __awaiter(this, void 0, void 0, function* () {
41
- const removeUser = () => __awaiter(this, void 0, void 0, function* () {
42
- if (this.verbose) {
43
- logger.logToStderr(`Removing user from subsite ${args.options.webUrl} ...`);
44
- }
45
- let requestUrl = '';
46
- if (args.options.id) {
47
- requestUrl = `${encodeURI(args.options.webUrl)}/_api/web/siteusers/removebyid(${args.options.id})`;
48
- }
49
- if (args.options.loginName) {
50
- requestUrl = `${encodeURI(args.options.webUrl)}/_api/web/siteusers/removeByLoginName('${formatting_1.formatting.encodeQueryParameter(args.options.loginName)}')`;
51
- }
52
- const requestOptions = {
53
- url: requestUrl,
54
- headers: {
55
- accept: 'application/json;odata=nometadata'
56
- },
57
- responseType: 'json'
58
- };
59
- try {
60
- yield request_1.default.post(requestOptions);
61
- }
62
- catch (err) {
63
- this.handleRejectedODataJsonPromise(err);
64
- }
65
- });
66
41
  if (args.options.confirm) {
67
- yield removeUser();
42
+ yield this.removeUser(logger, args.options);
68
43
  }
69
44
  else {
70
45
  const result = yield Cli_1.Cli.prompt({
@@ -74,11 +49,38 @@ class SpoUserRemoveCommand extends SpoCommand_1.default {
74
49
  message: `Are you sure you want to remove specified user from the site ${args.options.webUrl}`
75
50
  });
76
51
  if (result.continue) {
77
- yield removeUser();
52
+ yield this.removeUser(logger, args.options);
78
53
  }
79
54
  }
80
55
  });
81
56
  }
57
+ removeUser(logger, options) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ if (this.verbose) {
60
+ logger.logToStderr(`Removing user from subsite ${options.webUrl} ...`);
61
+ }
62
+ let requestUrl = `${encodeURI(options.webUrl)}/_api/web/siteusers/`;
63
+ if (options.id) {
64
+ requestUrl += `removebyid(${options.id})`;
65
+ }
66
+ else if (options.loginName) {
67
+ requestUrl += `removeByLoginName('${formatting_1.formatting.encodeQueryParameter(options.loginName)}')`;
68
+ }
69
+ const requestOptions = {
70
+ url: requestUrl,
71
+ headers: {
72
+ accept: 'application/json;odata=nometadata'
73
+ },
74
+ responseType: 'json'
75
+ };
76
+ try {
77
+ yield request_1.default.post(requestOptions);
78
+ }
79
+ catch (err) {
80
+ this.handleRejectedODataJsonPromise(err);
81
+ }
82
+ });
83
+ }
82
84
  }
83
85
  _SpoUserRemoveCommand_instances = new WeakSet(), _SpoUserRemoveCommand_initTelemetry = function _SpoUserRemoveCommand_initTelemetry() {
84
86
  this.telemetry.push((args) => {
@@ -80,8 +80,8 @@ class SpoWebReindexCommand extends SpoCommand_1.default {
80
80
  });
81
81
  }
82
82
  reindexLists(webUrl, requestDigest, logger, webIdentityResp) {
83
- return new Promise((resolve, reject) => {
84
- (() => {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ try {
85
85
  if (this.debug) {
86
86
  logger.logToStderr(`Retrieving information about lists...`);
87
87
  }
@@ -92,36 +92,33 @@ class SpoWebReindexCommand extends SpoCommand_1.default {
92
92
  },
93
93
  responseType: 'json'
94
94
  };
95
- return request_1.default.get(requestOptions);
96
- })()
97
- .then((lists) => {
95
+ const lists = yield request_1.default.get(requestOptions);
98
96
  const promises = lists.value.map(l => this.reindexList(l, webUrl, requestDigest, webIdentityResp, logger));
99
- return Promise.all(promises);
100
- })
101
- .then(() => {
102
- resolve();
103
- }, (err) => reject(err));
97
+ yield Promise.all(promises);
98
+ }
99
+ catch (err) {
100
+ throw err;
101
+ }
104
102
  });
105
103
  }
106
104
  reindexList(list, webUrl, requestDigest, webIdentityResp, logger) {
107
- return new Promise((resolve, reject) => {
105
+ return __awaiter(this, void 0, void 0, function* () {
108
106
  if (list.NoCrawl) {
109
107
  if (this.debug) {
110
108
  logger.logToStderr(`List ${list.Title} is excluded from crawling`);
111
109
  }
112
- resolve();
113
110
  return;
114
111
  }
115
- spo_1.spo
116
- .getFolderIdentity(webIdentityResp.objectIdentity, webUrl, list.RootFolder.ServerRelativeUrl, requestDigest)
117
- .then((folderIdentityResp) => {
112
+ try {
113
+ const folderIdentityResp = yield spo_1.spo.getFolderIdentity(webIdentityResp.objectIdentity, webUrl, list.RootFolder.ServerRelativeUrl, requestDigest);
118
114
  let searchversion = list.RootFolder.Properties.vti_x005f_searchversion || 0;
119
115
  searchversion++;
120
- return propertybag_base_1.SpoPropertyBagBaseCommand.setProperty('vti_searchversion', searchversion.toString(), webUrl, requestDigest, folderIdentityResp, logger, this.debug, list.RootFolder.ServerRelativeUrl);
121
- })
122
- .then(() => {
123
- resolve();
124
- }, (err) => reject(err));
116
+ yield propertybag_base_1.SpoPropertyBagBaseCommand.setProperty('vti_searchversion', searchversion.toString(), webUrl, requestDigest, folderIdentityResp, logger, this.debug, list.RootFolder.ServerRelativeUrl);
117
+ return;
118
+ }
119
+ catch (err) {
120
+ throw (err);
121
+ }
125
122
  });
126
123
  }
127
124
  }
@@ -36,27 +36,8 @@ class SpoWebRemoveCommand extends SpoCommand_1.default {
36
36
  }
37
37
  commandAction(logger, args) {
38
38
  return __awaiter(this, void 0, void 0, function* () {
39
- const removeWeb = () => __awaiter(this, void 0, void 0, function* () {
40
- const requestOptions = {
41
- url: `${encodeURI(args.options.url)}/_api/web`,
42
- headers: {
43
- accept: 'application/json;odata=nometadata',
44
- 'X-HTTP-Method': 'DELETE'
45
- },
46
- responseType: 'json'
47
- };
48
- if (this.verbose) {
49
- logger.logToStderr(`Deleting subsite ${args.options.url} ...`);
50
- }
51
- try {
52
- yield request_1.default.post(requestOptions);
53
- }
54
- catch (err) {
55
- this.handleRejectedODataJsonPromise(err);
56
- }
57
- });
58
39
  if (args.options.confirm) {
59
- yield removeWeb();
40
+ yield this.removeWeb(logger, args.options.url);
60
41
  }
61
42
  else {
62
43
  const result = yield Cli_1.Cli.prompt({
@@ -66,11 +47,32 @@ class SpoWebRemoveCommand extends SpoCommand_1.default {
66
47
  message: `Are you sure you want to remove the subsite ${args.options.url}`
67
48
  });
68
49
  if (result.continue) {
69
- yield removeWeb();
50
+ yield this.removeWeb(logger, args.options.url);
70
51
  }
71
52
  }
72
53
  });
73
54
  }
55
+ removeWeb(logger, url) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const requestOptions = {
58
+ url: `${encodeURI(url)}/_api/web`,
59
+ headers: {
60
+ accept: 'application/json;odata=nometadata',
61
+ 'X-HTTP-Method': 'DELETE'
62
+ },
63
+ responseType: 'json'
64
+ };
65
+ if (this.verbose) {
66
+ logger.logToStderr(`Deleting subsite ${url} ...`);
67
+ }
68
+ try {
69
+ yield request_1.default.post(requestOptions);
70
+ }
71
+ catch (err) {
72
+ this.handleRejectedODataJsonPromise(err);
73
+ }
74
+ });
75
+ }
74
76
  }
75
77
  _SpoWebRemoveCommand_instances = new WeakSet(), _SpoWebRemoveCommand_initTelemetry = function _SpoWebRemoveCommand_initTelemetry() {
76
78
  this.telemetry.push((args) => {