@pnp/cli-microsoft365 4.0.0-beta.f87506e → 4.1.0-beta.6c0929c

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 (74) hide show
  1. package/.devcontainer/Dockerfile +3 -3
  2. package/dist/Auth.js +25 -9
  3. package/dist/Utils.js +6 -0
  4. package/dist/cli/Cli.js +4 -4
  5. package/dist/m365/aad/commands/app/app-add.js +1 -1
  6. package/dist/m365/aad/commands/app/app-role-add.js +1 -1
  7. package/dist/m365/aad/commands/o365group/o365group-get.js +0 -4
  8. package/dist/m365/aad/commands/o365group/o365group-teamify.js +14 -4
  9. package/dist/m365/aad/commands/o365group/o365group-user-list.js +5 -24
  10. package/dist/m365/aad/commands/siteclassification/siteclassification-disable.js +2 -2
  11. package/dist/m365/aad/commands/user/user-set.js +90 -0
  12. package/dist/m365/aad/commands.js +2 -1
  13. package/dist/m365/base/SpoCommand.js +13 -0
  14. package/dist/m365/commands/login.js +12 -0
  15. package/dist/m365/file/commands/convert/convert-pdf.js +2 -2
  16. package/dist/m365/onedrive/commands/onedrive-list.js +41 -24
  17. package/dist/m365/pa/commands/pcf/pcf-init.js +1 -1
  18. package/dist/m365/pa/commands/solution/solution-init.js +1 -1
  19. package/dist/m365/planner/commands/plan/plan-get.js +116 -0
  20. package/dist/m365/planner/commands/task/task-list.js +157 -7
  21. package/dist/m365/planner/commands.js +1 -0
  22. package/dist/m365/spfx/commands/package/package-generate.js +1 -1
  23. package/dist/m365/spfx/commands/project/project-rename.js +1 -1
  24. package/dist/m365/spfx/commands/project/project-upgrade/rules/DependencyRule.js +3 -3
  25. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN006004_CFG_PS_developer.js +7 -6
  26. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN023001_GITIGNORE_release.js +3 -9
  27. package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.13.0-beta.15.js → upgrade-1.13.0-beta.20.js} +26 -28
  28. package/dist/m365/spfx/commands/project/project-upgrade.js +3 -3
  29. package/dist/m365/spfx/commands/spfx-doctor.js +1 -1
  30. package/dist/m365/spo/commands/app/app-instance-list.js +59 -0
  31. package/dist/m365/spo/commands/file/file-add.js +1 -1
  32. package/dist/m365/spo/commands/file/file-list.js +2 -1
  33. package/dist/m365/spo/commands/group/group-user-list.js +66 -0
  34. package/dist/m365/spo/commands/listitem/listitem-get.js +5 -5
  35. package/dist/m365/spo/commands/page/Page.js +1 -1
  36. package/dist/m365/spo/commands/page/page-clientsidewebpart-add.js +3 -3
  37. package/dist/m365/spo/commands/page/page-control-get.js +9 -1
  38. package/dist/m365/spo/commands/page/page-control-list.js +10 -13
  39. package/dist/m365/spo/commands/page/page-section-add.js +1 -1
  40. package/dist/m365/spo/commands/page/page-text-add.js +2 -2
  41. package/dist/m365/spo/commands/site/site-apppermission-remove.js +162 -0
  42. package/dist/m365/spo/commands/site/site-classic-list.js +41 -24
  43. package/dist/m365/spo/commands/site/site-list.js +44 -28
  44. package/dist/m365/spo/commands/sitedesign/sitedesign-set.js +7 -0
  45. package/dist/m365/spo/commands/spo-search.js +3 -3
  46. package/dist/m365/spo/commands/term/term-add.js +1 -1
  47. package/dist/m365/spo/commands/term/term-group-add.js +1 -1
  48. package/dist/m365/spo/commands/term/term-set-add.js +1 -1
  49. package/dist/m365/spo/commands/theme/theme-list.js +1 -1
  50. package/dist/m365/spo/commands.js +3 -0
  51. package/dist/m365/teams/commands/channel/channel-list.js +5 -4
  52. package/dist/m365/teams/commands/conversationmember/conversationmember-add.js +9 -8
  53. package/dist/m365/teams/commands/conversationmember/conversationmember-list.js +20 -22
  54. package/dist/m365/teams/commands/team/team-get.js +91 -0
  55. package/dist/m365/teams/commands/team/team-list.js +6 -4
  56. package/dist/m365/teams/commands/user/user-list.js +5 -24
  57. package/dist/m365/viva/commands/connections/connections-app-create.js +1 -1
  58. package/docs/docs/cmd/aad/o365group/o365group-teamify.md +0 -5
  59. package/docs/docs/cmd/aad/o365group/o365group-user-list.md +2 -17
  60. package/docs/docs/cmd/aad/siteclassification/siteclassification-disable.md +0 -5
  61. package/docs/docs/cmd/aad/user/user-set.md +60 -0
  62. package/docs/docs/cmd/login.md +11 -2
  63. package/docs/docs/cmd/planner/plan/plan-get.md +45 -0
  64. package/docs/docs/cmd/planner/task/task-list.md +49 -1
  65. package/docs/docs/cmd/spfx/project/project-upgrade.md +1 -1
  66. package/docs/docs/cmd/spo/app/app-instance-list.md +24 -0
  67. package/docs/docs/cmd/spo/group/group-user-list.md +36 -0
  68. package/docs/docs/cmd/spo/listitem/listitem-get.md +3 -3
  69. package/docs/docs/cmd/spo/site/site-apppermission-remove.md +48 -0
  70. package/docs/docs/cmd/spo/sitedesign/sitedesign-set.md +3 -0
  71. package/docs/docs/cmd/teams/team/team-get.md +33 -0
  72. package/docs/docs/cmd/teams/user/user-list.md +2 -23
  73. package/npm-shrinkwrap.json +432 -333
  74. package/package.json +22 -20
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const request_1 = require("../../../../request");
4
+ const SpoCommand_1 = require("../../../base/SpoCommand");
5
+ const commands_1 = require("../../commands");
6
+ class SpoGroupUserListCommand extends SpoCommand_1.default {
7
+ get name() {
8
+ return commands_1.default.GROUP_USER_LIST;
9
+ }
10
+ get description() {
11
+ return `List members of a SharePoint Group`;
12
+ }
13
+ defaultProperties() {
14
+ return ['Title', 'UserPrincipalName', 'Id', 'Email'];
15
+ }
16
+ commandAction(logger, args, cb) {
17
+ if (this.verbose) {
18
+ logger.logToStderr(`Retrieving the list of members from the SharePoint group : ${args.options.groupId ? args.options.groupId : args.options.groupName}`);
19
+ }
20
+ const requestUrl = `${args.options.webUrl}/_api/web/sitegroups/${args.options.groupId
21
+ ? `GetById('${encodeURIComponent(args.options.groupId)}')`
22
+ : `GetByName('${encodeURIComponent(args.options.groupName)}')`}/users`;
23
+ const requestOptions = {
24
+ url: requestUrl,
25
+ headers: {
26
+ 'accept': 'application/json;odata=nometadata'
27
+ },
28
+ responseType: 'json'
29
+ };
30
+ request_1.default
31
+ .get(requestOptions)
32
+ .then((response) => {
33
+ logger.log(response);
34
+ cb();
35
+ }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
36
+ }
37
+ options() {
38
+ const options = [
39
+ {
40
+ option: '-u, --webUrl <webUrl>'
41
+ },
42
+ {
43
+ option: '--groupId [groupId]'
44
+ },
45
+ {
46
+ option: '--groupName [groupName]'
47
+ }
48
+ ];
49
+ const parentOptions = super.options();
50
+ return options.concat(parentOptions);
51
+ }
52
+ validate(args) {
53
+ if (args.options.groupId && args.options.groupName) {
54
+ return 'Use either "groupName" or "groupId", but not both';
55
+ }
56
+ if (!args.options.groupId && !args.options.groupName) {
57
+ return 'Either "groupName" or "groupId" is required';
58
+ }
59
+ if (args.options.groupId && isNaN(args.options.groupId)) {
60
+ return `Specified "groupId" ${args.options.groupId} is not valid`;
61
+ }
62
+ return SpoCommand_1.default.isValidSharePointUrl(args.options.webUrl);
63
+ }
64
+ }
65
+ module.exports = new SpoGroupUserListCommand();
66
+ //# sourceMappingURL=group-user-list.js.map
@@ -26,13 +26,13 @@ class SpoListItemGetCommand extends SpoCommand_1.default {
26
26
  const listRestUrl = (args.options.listId ?
27
27
  `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
28
28
  : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
29
- const fieldSelect = args.options.fields ?
30
- `?$select=${encodeURIComponent(args.options.fields)}` :
29
+ const propertiesSelect = args.options.properties ?
30
+ `?$select=${encodeURIComponent(args.options.properties)}` :
31
31
  ((!args.options.output || args.options.output === 'text') ?
32
32
  `?$select=Id,Title` :
33
33
  ``);
34
34
  const requestOptions = {
35
- url: `${listRestUrl}/items(${args.options.id})${fieldSelect}`,
35
+ url: `${listRestUrl}/items(${args.options.id})${propertiesSelect}`,
36
36
  headers: {
37
37
  'accept': 'application/json;odata=nometadata'
38
38
  },
@@ -61,7 +61,7 @@ class SpoListItemGetCommand extends SpoCommand_1.default {
61
61
  option: '-t, --listTitle [listTitle]'
62
62
  },
63
63
  {
64
- option: '-f, --fields [fields]'
64
+ option: '-p, --properties [properties]'
65
65
  }
66
66
  ];
67
67
  const parentOptions = super.options();
@@ -74,7 +74,7 @@ class SpoListItemGetCommand extends SpoCommand_1.default {
74
74
  'listId',
75
75
  'listTitle',
76
76
  'id',
77
- 'fields'
77
+ 'properties'
78
78
  ]
79
79
  };
80
80
  }
@@ -71,7 +71,7 @@ class Page {
71
71
  // remove the column property to be able to serialize the object to JSON
72
72
  delete control.column;
73
73
  if (!isJSONOutput) {
74
- control.controlType = pageMethods_1.getControlTypeDisplayName(control.controlType);
74
+ control.controlType = (0, pageMethods_1.getControlTypeDisplayName)(control.controlType);
75
75
  }
76
76
  if (!control.dynamicDataPaths) {
77
77
  delete control.dynamicDataPaths;
@@ -258,7 +258,7 @@ class SpoPageClientSideWebPartAddCommand extends SpoCommand_1.default {
258
258
  logger.logToStderr(`Creating instance from definition of WebPart ${webPartId}...`);
259
259
  }
260
260
  const component = webPartDefinition[0];
261
- const id = uuid_1.v4();
261
+ const id = (0, uuid_1.v4)();
262
262
  const componentId = component.Id.replace(/^\{|\}$/g, "").toLowerCase();
263
263
  const manifest = JSON.parse(component.Manifest);
264
264
  const preconfiguredEntries = manifest.preconfiguredEntries[0];
@@ -386,10 +386,10 @@ class SpoPageClientSideWebPartAddCommand extends SpoCommand_1.default {
386
386
  .webPartData}. Error: ${e}`;
387
387
  }
388
388
  }
389
- if (args.options.section && (!util_1.isNumber(args.options.section) || args.options.section < 1)) {
389
+ if (args.options.section && (!(0, util_1.isNumber)(args.options.section) || args.options.section < 1)) {
390
390
  return 'The value of parameter section must be 1 or higher';
391
391
  }
392
- if (args.options.column && (!util_1.isNumber(args.options.column) || args.options.column < 1)) {
392
+ if (args.options.column && (!(0, util_1.isNumber)(args.options.column) || args.options.column < 1)) {
393
393
  return 'The value of parameter column must be 1 or higher';
394
394
  }
395
395
  return SpoCommand_1.default.isValidSharePointUrl(args.options.webUrl);
@@ -27,10 +27,18 @@ class SpoPageControlGetCommand extends SpoCommand_1.default {
27
27
  request_1.default
28
28
  .get(requestOptions)
29
29
  .then((clientSidePage) => {
30
+ var _a;
30
31
  const canvasData = clientSidePage.CanvasContent1 ? JSON.parse(clientSidePage.CanvasContent1) : [];
31
32
  const control = canvasData.find(c => { var _a; return ((_a = c.id) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === args.options.id.toLowerCase(); });
32
33
  if (control) {
33
- const controlData = Object.assign({ controlType: control.controlType, order: control.position.sectionIndex, id: control.id, controlData: Object.assign({}, control), type: pageMethods_1.getControlTypeDisplayName(control.controlType || 0) }, control.webPartData || {});
34
+ const controlData = {
35
+ id: control.id,
36
+ type: (0, pageMethods_1.getControlTypeDisplayName)(control.controlType || 0),
37
+ title: (_a = control.webPartData) === null || _a === void 0 ? void 0 : _a.title,
38
+ controlType: control.controlType,
39
+ order: control.position.sectionIndex,
40
+ controlData: Object.assign({}, control)
41
+ };
34
42
  logger.log(controlData);
35
43
  }
36
44
  else {
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const request_1 = require("../../../../request");
4
4
  const SpoCommand_1 = require("../../../base/SpoCommand");
5
5
  const commands_1 = require("../../commands");
6
+ const pageMethods_1 = require("./pageMethods");
6
7
  class SpoPageControlListCommand extends SpoCommand_1.default {
7
8
  get name() {
8
9
  return commands_1.default.PAGE_CONTROL_LIST;
@@ -30,24 +31,20 @@ class SpoPageControlListCommand extends SpoCommand_1.default {
30
31
  .then((clientSidePage) => {
31
32
  const canvasData = clientSidePage.CanvasContent1 ? JSON.parse(clientSidePage.CanvasContent1) : [];
32
33
  const controls = canvasData.filter(c => c.position).map(c => {
33
- return Object.assign(Object.assign({ controlType: c.controlType, order: c.position.sectionIndex, id: c.id, controlData: Object.assign({}, c) }, c.webPartData || {}), { type: SpoPageControlListCommand.getControlTypeDisplayName(c.controlType || 0) });
34
+ var _a;
35
+ return {
36
+ id: c.id,
37
+ type: (0, pageMethods_1.getControlTypeDisplayName)(c.controlType || 0),
38
+ title: (_a = c.webPartData) === null || _a === void 0 ? void 0 : _a.title,
39
+ controlType: c.controlType,
40
+ order: c.position.sectionIndex,
41
+ controlData: Object.assign({}, c)
42
+ };
34
43
  });
35
44
  logger.log(JSON.parse(JSON.stringify(controls)));
36
45
  cb();
37
46
  }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
38
47
  }
39
- static getControlTypeDisplayName(controlType) {
40
- switch (controlType) {
41
- case 0:
42
- return 'Empty column';
43
- case 3:
44
- return 'Client-side web part';
45
- case 4:
46
- return 'Client-side text';
47
- default:
48
- return '' + controlType;
49
- }
50
- }
51
48
  options() {
52
49
  const options = [
53
50
  {
@@ -165,7 +165,7 @@ class SpoPageSectionAddCommand extends SpoCommand_1.default {
165
165
  return `${args.options.sectionTemplate} is not a valid section template. Allowed values are OneColumn|OneColumnFullWidth|TwoColumn|ThreeColumn|TwoColumnLeft|TwoColumnRight`;
166
166
  }
167
167
  if (typeof args.options.order !== 'undefined') {
168
- if (!util_1.isNumber(args.options.order) || args.options.order < 1) {
168
+ if (!(0, util_1.isNumber)(args.options.order) || args.options.order < 1) {
169
169
  return 'The value of parameter order must be 1 or higher';
170
170
  }
171
171
  }
@@ -115,10 +115,10 @@ class SpoPageTextAddCommand extends SpoCommand_1.default {
115
115
  return options.concat(parentOptions);
116
116
  }
117
117
  validate(args) {
118
- if (args.options.section && (!util_1.isNumber(args.options.section) || args.options.section < 1)) {
118
+ if (args.options.section && (!(0, util_1.isNumber)(args.options.section) || args.options.section < 1)) {
119
119
  return 'The value of parameter section must be 1 or higher';
120
120
  }
121
- if (args.options.column && (!util_1.isNumber(args.options.column) || args.options.column < 1)) {
121
+ if (args.options.column && (!(0, util_1.isNumber)(args.options.column) || args.options.column < 1)) {
122
122
  return 'The value of parameter column must be 1 or higher';
123
123
  }
124
124
  return SpoCommand_1.default.isValidSharePointUrl(args.options.webUrl);
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cli_1 = require("../../../../cli");
4
+ const request_1 = require("../../../../request");
5
+ const Utils_1 = require("../../../../Utils");
6
+ const GraphCommand_1 = require("../../../base/GraphCommand");
7
+ const SpoCommand_1 = require("../../../base/SpoCommand");
8
+ const commands_1 = require("../../commands");
9
+ class SpoSiteAppPermissionRemoveCommand extends GraphCommand_1.default {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.siteId = '';
13
+ }
14
+ get name() {
15
+ return commands_1.default.SITE_APPPERMISSION_REMOVE;
16
+ }
17
+ get description() {
18
+ return 'Removes an application permission from the site';
19
+ }
20
+ getTelemetryProperties(args) {
21
+ const telemetryProps = super.getTelemetryProperties(args);
22
+ telemetryProps.appId = typeof args.options.appId !== 'undefined';
23
+ telemetryProps.appDisplayName = typeof args.options.appDisplayName !== 'undefined';
24
+ telemetryProps.permissionId = typeof args.options.permissionId !== 'undefined';
25
+ telemetryProps.confirm = (!!args.options.confirm).toString();
26
+ return telemetryProps;
27
+ }
28
+ getSpoSiteId(args) {
29
+ const url = new URL(args.options.siteUrl);
30
+ const requestOptions = {
31
+ url: `${this.resource}/v1.0/sites/${url.hostname}:${url.pathname}`,
32
+ headers: {
33
+ accept: 'application/json;odata.metadata=none'
34
+ },
35
+ responseType: 'json'
36
+ };
37
+ return request_1.default
38
+ .get(requestOptions)
39
+ .then((site) => site.id);
40
+ }
41
+ getPermissions() {
42
+ const requestOptions = {
43
+ url: `${this.resource}/v1.0/sites/${this.siteId}/permissions`,
44
+ headers: {
45
+ accept: 'application/json;odata.metadata=none'
46
+ },
47
+ responseType: 'json'
48
+ };
49
+ return request_1.default.get(requestOptions);
50
+ }
51
+ getFilteredPermissions(args, permissions) {
52
+ let filterProperty = 'displayName';
53
+ let filterValue = args.options.appDisplayName;
54
+ if (args.options.appId) {
55
+ filterProperty = 'id';
56
+ filterValue = args.options.appId;
57
+ }
58
+ return permissions.filter((p) => {
59
+ return p.grantedToIdentities.some(({ application }) => application[filterProperty] === filterValue);
60
+ });
61
+ }
62
+ getPermissionIds(args) {
63
+ if (args.options.permissionId) {
64
+ return Promise.resolve([args.options.permissionId]);
65
+ }
66
+ return this
67
+ .getPermissions()
68
+ .then((res) => {
69
+ let permissions = res.value;
70
+ if (args.options.appId || args.options.appDisplayName) {
71
+ permissions = this.getFilteredPermissions(args, res.value);
72
+ }
73
+ return Promise.resolve(permissions.map(x => x.id));
74
+ });
75
+ }
76
+ removePermissions(permissionId) {
77
+ const spRequestOptions = {
78
+ url: `${this.resource}/v1.0/sites/${this.siteId}/permissions/${permissionId}`,
79
+ headers: {
80
+ 'accept': 'application/json;odata.metadata=none'
81
+ },
82
+ responseType: 'json'
83
+ };
84
+ return request_1.default.delete(spRequestOptions);
85
+ }
86
+ commandAction(logger, args, cb) {
87
+ const removeSiteAppPermission = () => {
88
+ this
89
+ .getSpoSiteId(args)
90
+ .then((siteId) => {
91
+ this.siteId = siteId;
92
+ return this.getPermissionIds(args);
93
+ })
94
+ .then((permissionIdsToRemove) => {
95
+ const tasks = [];
96
+ for (const permissionId of permissionIdsToRemove) {
97
+ tasks.push(this.removePermissions(permissionId));
98
+ }
99
+ return Promise.all(tasks);
100
+ })
101
+ .then((res) => {
102
+ logger.log(res);
103
+ cb();
104
+ }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
105
+ };
106
+ if (args.options.confirm) {
107
+ removeSiteAppPermission();
108
+ }
109
+ else {
110
+ cli_1.Cli.prompt({
111
+ type: 'confirm',
112
+ name: 'continue',
113
+ default: false,
114
+ message: `Are you sure you want to remove the specified application permission from site ${args.options.siteUrl}?`
115
+ }, (result) => {
116
+ if (!result.continue) {
117
+ cb();
118
+ }
119
+ else {
120
+ removeSiteAppPermission();
121
+ }
122
+ });
123
+ }
124
+ }
125
+ options() {
126
+ const options = [
127
+ {
128
+ option: '-u, --siteUrl <siteUrl>'
129
+ },
130
+ {
131
+ option: '-i, --permissionId [permissionId]'
132
+ },
133
+ {
134
+ option: '--appId [appId]'
135
+ },
136
+ {
137
+ option: '-n, --appDisplayName [appDisplayName]'
138
+ },
139
+ {
140
+ option: '--confirm'
141
+ }
142
+ ];
143
+ const parentOptions = super.options();
144
+ return options.concat(parentOptions);
145
+ }
146
+ validate(args) {
147
+ if (!args.options.appId && !args.options.appDisplayName && !args.options.permissionId) {
148
+ return `Specify appId, appDisplayName, or permissionId. One is required`;
149
+ }
150
+ if ((args.options.appId && args.options.appDisplayName) ||
151
+ (args.options.appId && args.options.permissionId) ||
152
+ (args.options.permissionId && args.options.appDisplayName)) {
153
+ return 'Use either appId, appDisplayName, or permissionId, but not multiple';
154
+ }
155
+ if (args.options.appId && !Utils_1.default.isValidGuid(args.options.appId)) {
156
+ return `${args.options.appId} is not a valid GUID`;
157
+ }
158
+ return SpoCommand_1.default.isValidSharePointUrl(args.options.siteUrl);
159
+ }
160
+ }
161
+ module.exports = new SpoSiteAppPermissionRemoveCommand();
162
+ //# sourceMappingURL=site-apppermission-remove.js.map
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const Command_1 = require("../../../../Command");
4
3
  const config_1 = require("../../../../config");
5
4
  const request_1 = require("../../../../request");
6
5
  const Utils_1 = require("../../../../Utils");
@@ -26,41 +25,59 @@ class SpoSiteClassicListCommand extends SpoCommand_1.default {
26
25
  commandAction(logger, args, cb) {
27
26
  const webTemplate = args.options.webTemplate || '';
28
27
  const includeOneDriveSites = args.options.includeOneDriveSites || false;
28
+ const personalSite = includeOneDriveSites === false ? '0' : '1';
29
29
  let spoAdminUrl = '';
30
30
  this
31
31
  .getSpoAdminUrl(logger, this.debug)
32
32
  .then((_spoAdminUrl) => {
33
33
  spoAdminUrl = _spoAdminUrl;
34
- return this.getRequestDigest(spoAdminUrl);
35
- })
36
- .then((res) => {
37
34
  if (this.verbose) {
38
35
  logger.logToStderr(`Retrieving list of site collections...`);
39
36
  }
40
- const personalSite = includeOneDriveSites === false ? '0' : '1';
41
- const requestOptions = {
42
- url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
43
- headers: {
44
- 'X-RequestDigest': res.FormDigestValue
45
- },
46
- 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><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">${Utils_1.default.escapeXml(args.options.filter || '')}</Property><Property Name="IncludeDetail" Type="Boolean">false</Property><Property Name="IncludePersonalSite" Type="Enum">${personalSite}</Property><Property Name="StartIndex" Type="String">0</Property><Property Name="Template" Type="String">${webTemplate}</Property></Parameter></Parameters></Method></ObjectPaths></Request>`
47
- };
48
- return request_1.default.post(requestOptions);
37
+ this.allSites = [];
38
+ return this.getAllSites(spoAdminUrl, Utils_1.default.escapeXml(args.options.filter || ''), '0', personalSite, webTemplate, undefined, logger);
49
39
  })
50
- .then((res) => {
51
- const json = JSON.parse(res);
52
- const response = json[0];
53
- if (response.ErrorInfo) {
54
- cb(new Command_1.CommandError(response.ErrorInfo.ErrorMessage));
55
- return;
56
- }
57
- else {
58
- const sites = json[json.length - 1];
59
- logger.log(sites._Child_Items_);
60
- }
40
+ .then(_ => {
41
+ logger.log(this.allSites);
61
42
  cb();
62
43
  }, (err) => this.handleRejectedPromise(err, logger, cb));
63
44
  }
45
+ getAllSites(spoAdminUrl, filter, startIndex, personalSite, webTemplate, formDigest, logger) {
46
+ return new Promise((resolve, reject) => {
47
+ this
48
+ .ensureFormDigest(spoAdminUrl, logger, formDigest, this.debug)
49
+ .then((res) => {
50
+ const requestOptions = {
51
+ url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
52
+ headers: {
53
+ 'X-RequestDigest': res.FormDigestValue
54
+ },
55
+ 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><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>`
56
+ };
57
+ return request_1.default.post(requestOptions);
58
+ })
59
+ .then((res) => {
60
+ const json = JSON.parse(res);
61
+ const response = json[0];
62
+ if (response.ErrorInfo) {
63
+ reject(response.ErrorInfo.ErrorMessage);
64
+ return;
65
+ }
66
+ else {
67
+ const sites = json[json.length - 1];
68
+ this.allSites.push(...sites._Child_Items_);
69
+ if (sites.NextStartIndexFromSharePoint) {
70
+ this
71
+ .getAllSites(spoAdminUrl, filter, sites.NextStartIndexFromSharePoint, personalSite, webTemplate, formDigest, logger)
72
+ .then(_ => resolve(), err => reject(err));
73
+ }
74
+ else {
75
+ resolve();
76
+ }
77
+ }
78
+ }, err => reject(err));
79
+ });
80
+ }
64
81
  options() {
65
82
  const options = [
66
83
  {
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const Command_1 = require("../../../../Command");
4
3
  const config_1 = require("../../../../config");
5
4
  const request_1 = require("../../../../request");
6
5
  const Utils_1 = require("../../../../Utils");
@@ -26,45 +25,62 @@ class SpoSiteListCommand extends SpoCommand_1.default {
26
25
  commandAction(logger, args, cb) {
27
26
  const siteType = args.options.type || 'TeamSite';
28
27
  const webTemplate = siteType === 'TeamSite' ? 'GROUP#0' : 'SITEPAGEPUBLISHING#0';
29
- const startIndex = '0';
30
28
  let spoAdminUrl;
31
29
  this
32
30
  .getSpoAdminUrl(logger, this.debug)
33
31
  .then((_spoAdminUrl) => {
34
32
  spoAdminUrl = _spoAdminUrl;
35
- return this.getRequestDigest(spoAdminUrl);
36
- })
37
- .then((res) => {
38
33
  if (this.verbose) {
39
34
  logger.logToStderr(`Retrieving list of site collections...`);
40
35
  }
41
- 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">${Utils_1.default.escapeXml(args.options.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>`;
42
- if (args.options.deleted) {
43
- 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="Null" /></Parameters></Method></ObjectPaths></Request>`;
44
- }
45
- const requestOptions = {
46
- url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
47
- headers: {
48
- 'X-RequestDigest': res.FormDigestValue
49
- },
50
- data: requestBody
51
- };
52
- return request_1.default.post(requestOptions);
36
+ this.allSites = [];
37
+ return this.getAllSites(spoAdminUrl, Utils_1.default.escapeXml(args.options.filter || ''), '0', webTemplate, undefined, args.options.deleted, logger);
53
38
  })
54
- .then((res) => {
55
- const json = JSON.parse(res);
56
- const response = json[0];
57
- if (response.ErrorInfo) {
58
- cb(new Command_1.CommandError(response.ErrorInfo.ErrorMessage));
59
- return;
60
- }
61
- else {
62
- const sites = json[json.length - 1];
63
- logger.log(sites._Child_Items_);
64
- }
39
+ .then(_ => {
40
+ logger.log(this.allSites);
65
41
  cb();
66
42
  }, (err) => this.handleRejectedPromise(err, logger, cb));
67
43
  }
44
+ getAllSites(spoAdminUrl, filter, startIndex, webTemplate, formDigest, deleted, logger) {
45
+ return new Promise((resolve, reject) => {
46
+ this
47
+ .ensureFormDigest(spoAdminUrl, logger, formDigest, this.debug)
48
+ .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>`;
50
+ if (deleted) {
51
+ 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
+ }
53
+ const requestOptions = {
54
+ url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
55
+ headers: {
56
+ 'X-RequestDigest': res.FormDigestValue
57
+ },
58
+ data: requestBody
59
+ };
60
+ return request_1.default.post(requestOptions);
61
+ })
62
+ .then((res) => {
63
+ const json = JSON.parse(res);
64
+ const response = json[0];
65
+ if (response.ErrorInfo) {
66
+ reject(response.ErrorInfo.ErrorMessage);
67
+ return;
68
+ }
69
+ else {
70
+ const sites = json[json.length - 1];
71
+ this.allSites.push(...sites._Child_Items_);
72
+ if (sites.NextStartIndexFromSharePoint) {
73
+ this
74
+ .getAllSites(spoAdminUrl, filter, sites.NextStartIndexFromSharePoint, webTemplate, formDigest, deleted, logger)
75
+ .then(_ => resolve(), err => reject(err));
76
+ }
77
+ else {
78
+ resolve();
79
+ }
80
+ }
81
+ }, err => reject(err));
82
+ });
83
+ }
68
84
  options() {
69
85
  const options = [
70
86
  {
@@ -19,6 +19,7 @@ class SpoSiteDesignSetCommand extends SpoCommand_1.default {
19
19
  telemetryProps.description = typeof args.options.description !== 'undefined';
20
20
  telemetryProps.previewImageUrl = typeof args.options.previewImageUrl !== 'undefined';
21
21
  telemetryProps.previewImageAltText = typeof args.options.previewImageAltText !== 'undefined';
22
+ telemetryProps.thumbnailUrl = typeof args.options.thumbnailUrl !== 'undefined';
22
23
  telemetryProps.version = typeof args.options.version !== 'undefined';
23
24
  telemetryProps.isDefault = typeof args.options.isDefault !== 'undefined';
24
25
  return telemetryProps;
@@ -45,6 +46,9 @@ class SpoSiteDesignSetCommand extends SpoCommand_1.default {
45
46
  if (args.options.previewImageAltText) {
46
47
  updateInfo.PreviewImageAltText = args.options.previewImageAltText;
47
48
  }
49
+ if (args.options.thumbnailUrl) {
50
+ updateInfo.ThumbnailUrl = args.options.thumbnailUrl;
51
+ }
48
52
  if (args.options.webTemplate) {
49
53
  updateInfo.WebTemplate = args.options.webTemplate === 'TeamSite' ? '64' : '68';
50
54
  }
@@ -95,6 +99,9 @@ class SpoSiteDesignSetCommand extends SpoCommand_1.default {
95
99
  {
96
100
  option: '-a, --previewImageAltText [previewImageAltText]'
97
101
  },
102
+ {
103
+ option: '--thumbnailUrl [thumbnailUrl]'
104
+ },
98
105
  {
99
106
  option: '-v, --version [version]'
100
107
  },
@@ -222,13 +222,13 @@ class SpoSearchCommand extends SpoCommand_1.default {
222
222
  if (args.options.sortList && !/^([a-z0-9_]+:(ascending|descending))(,([a-z0-9_]+:(ascending|descending)))*$/gi.test(args.options.sortList)) {
223
223
  return `sortlist parameter value '${args.options.sortList}' does not match the required pattern (=comma-separated list of '<property>:(ascending|descending)'-pattern)`;
224
224
  }
225
- if (args.options.rowLimit && !util_1.isNumber(args.options.rowLimit)) {
225
+ if (args.options.rowLimit && !(0, util_1.isNumber)(args.options.rowLimit)) {
226
226
  return `${args.options.rowLimit} is not a valid number`;
227
227
  }
228
- if (args.options.startRow && !util_1.isNumber(args.options.startRow)) {
228
+ if (args.options.startRow && !(0, util_1.isNumber)(args.options.startRow)) {
229
229
  return `${args.options.startRow} is not a valid number`;
230
230
  }
231
- if (args.options.culture && !util_1.isNumber(args.options.culture)) {
231
+ if (args.options.culture && !(0, util_1.isNumber)(args.options.culture)) {
232
232
  return `${args.options.culture} is not a valid number`;
233
233
  }
234
234
  return true;
@@ -48,7 +48,7 @@ class SpoTermAddCommand extends SpoCommand_1.default {
48
48
  `<Method Id="16" ParentId="6" Name="GetTerm"><Parameters><Parameter Type="Guid">{${args.options.parentTermId}}</Parameter></Parameters></Method>` :
49
49
  // no parent term specified, add to term set
50
50
  args.options.termSetId ? `<Method Id="16" ParentId="14" Name="GetById"><Parameters><Parameter Type="Guid">{${args.options.termSetId}}</Parameter></Parameters></Method>` : `<Method Id="16" ParentId="14" Name="GetByName"><Parameters><Parameter Type="String">${Utils_1.default.escapeXml(args.options.termSetName)}</Parameter></Parameters></Method>`;
51
- const termId = args.options.id || uuid_1.v4();
51
+ const termId = args.options.id || (0, uuid_1.v4)();
52
52
  const 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><ObjectPath Id="4" ObjectPathId="3" /><ObjectIdentityQuery Id="5" ObjectPathId="3" /><ObjectPath Id="7" ObjectPathId="6" /><ObjectIdentityQuery Id="8" ObjectPathId="6" /><ObjectPath Id="10" ObjectPathId="9" /><ObjectPath Id="12" ObjectPathId="11" /><ObjectIdentityQuery Id="13" ObjectPathId="11" /><ObjectPath Id="15" ObjectPathId="14" /><ObjectPath Id="17" ObjectPathId="16" /><ObjectIdentityQuery Id="18" ObjectPathId="16" /><ObjectPath Id="20" ObjectPathId="19" /><ObjectIdentityQuery Id="21" ObjectPathId="19" /><Query Id="22" ObjectPathId="19"><Query SelectAllProperties="true"><Properties /></Query></Query></Actions><ObjectPaths><StaticMethod Id="3" Name="GetTaxonomySession" TypeId="{981cbc68-9edc-4f8d-872f-71146fcbb84f}" /><Method Id="6" ParentId="3" Name="GetDefaultSiteCollectionTermStore" /><Property Id="9" ParentId="6" Name="Groups" />${termGroupQuery}<Property Id="14" ParentId="11" Name="TermSets" />${termParentQuery}<Method Id="19" ParentId="16" Name="CreateTerm"><Parameters><Parameter Type="String">${Utils_1.default.escapeXml(args.options.name)}</Parameter><Parameter Type="Int32">1033</Parameter><Parameter Type="Guid">{${termId}}</Parameter></Parameters></Method></ObjectPaths></Request>`;
53
53
  const requestOptions = {
54
54
  url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,