@pnp/cli-microsoft365 5.4.0-beta.fdd7cb1 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/m365/aad/commands/app/app-set.js +4 -1
  2. package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-remove.js +129 -0
  3. package/dist/m365/aad/commands.js +1 -0
  4. package/dist/m365/planner/commands/task/task-add.js +57 -8
  5. package/dist/m365/planner/commands/task/task-checklistitem-list.js +53 -0
  6. package/dist/m365/planner/commands/task/task-checklistitem-remove.js +85 -0
  7. package/dist/m365/planner/commands/task/task-reference-remove.js +125 -0
  8. package/dist/m365/planner/commands/task/task-set.js +17 -1
  9. package/dist/m365/planner/commands.js +3 -0
  10. package/dist/m365/planner/taskPriority.js +27 -0
  11. package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.15.0-rc.0.js → upgrade-1.15.0.js} +28 -28
  12. package/dist/m365/spfx/commands/project/project-upgrade.js +13 -15
  13. package/dist/m365/spo/commands/hubsite/hubsite-list.js +1 -1
  14. package/dist/m365/spo/commands/list/ListPrincipalType.js +13 -0
  15. package/dist/m365/spo/commands/list/list-get.js +6 -0
  16. package/dist/m365/spo/commands/list/list-list.js +10 -1
  17. package/docs/docs/cmd/aad/app/app-set.md +1 -1
  18. package/docs/docs/cmd/aad/o365group/o365group-recyclebinitem-remove.md +45 -0
  19. package/docs/docs/cmd/planner/task/task-add.md +40 -4
  20. package/docs/docs/cmd/planner/task/task-checklistitem-list.md +24 -0
  21. package/docs/docs/cmd/planner/task/task-checklistitem-remove.md +36 -0
  22. package/docs/docs/cmd/planner/task/task-reference-remove.md +39 -0
  23. package/docs/docs/cmd/planner/task/task-set.md +11 -1
  24. package/docs/docs/cmd/spfx/project/project-upgrade.md +1 -1
  25. package/docs/docs/cmd/spo/hubsite/hubsite-list.md +1 -4
  26. package/docs/docs/cmd/spo/list/list-list.md +3 -0
  27. package/package.json +3 -3
@@ -71,8 +71,11 @@ class AadAppSetCommand extends GraphCommand_1.default {
71
71
  if (this.verbose) {
72
72
  logger.logToStderr(`Configuring Azure AD application ID URI...`);
73
73
  }
74
+ const identifierUris = args.options.uri
75
+ .split(',')
76
+ .map(u => u.trim());
74
77
  const applicationInfo = {
75
- identifierUris: [args.options.uri]
78
+ identifierUris: identifierUris
76
79
  };
77
80
  const requestOptions = {
78
81
  url: `${this.resource}/v1.0/myorganization/applications/${objectId}`,
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const cli_1 = require("../../../../cli");
13
+ const request_1 = require("../../../../request");
14
+ const utils_1 = require("../../../../utils");
15
+ const GraphCommand_1 = require("../../../base/GraphCommand");
16
+ const commands_1 = require("../../commands");
17
+ class AadO365GroupRecycleBinItemRemoveCommand extends GraphCommand_1.default {
18
+ get name() {
19
+ return commands_1.default.O365GROUP_RECYCLEBINITEM_REMOVE;
20
+ }
21
+ get description() {
22
+ return 'Permanently deletes a Microsoft 365 Group from the recycle bin in the current tenant';
23
+ }
24
+ getTelemetryProperties(args) {
25
+ const telemetryProps = super.getTelemetryProperties(args);
26
+ telemetryProps.id = typeof args.options.id !== 'undefined';
27
+ telemetryProps.displayName = typeof args.options.displayName !== 'undefined';
28
+ telemetryProps.mailNickname = typeof args.options.mailNickname !== 'undefined';
29
+ telemetryProps.confirm = !!args.options.confirm;
30
+ return telemetryProps;
31
+ }
32
+ commandAction(logger, args, cb) {
33
+ const removeGroup = () => __awaiter(this, void 0, void 0, function* () {
34
+ try {
35
+ const groupId = yield this.getGroupId(args.options);
36
+ const requestOptions = {
37
+ url: `${this.resource}/v1.0/directory/deletedItems/${groupId}`,
38
+ headers: {
39
+ accept: 'application/json;odata.metadata=none'
40
+ },
41
+ responseType: 'json'
42
+ };
43
+ yield request_1.default.delete(requestOptions);
44
+ cb();
45
+ }
46
+ catch (err) {
47
+ this.handleRejectedODataJsonPromise(err, logger, cb);
48
+ }
49
+ });
50
+ if (args.options.confirm) {
51
+ removeGroup();
52
+ }
53
+ else {
54
+ cli_1.Cli.prompt({
55
+ type: 'confirm',
56
+ name: 'continue',
57
+ default: false,
58
+ message: `Are you sure you want to remove the group '${args.options.id || args.options.displayName || args.options.mailNickname}'?`
59
+ }, (result) => {
60
+ if (!result.continue) {
61
+ cb();
62
+ }
63
+ else {
64
+ removeGroup();
65
+ }
66
+ });
67
+ }
68
+ }
69
+ getGroupId(options) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const { id, displayName, mailNickname } = options;
72
+ if (id) {
73
+ return id;
74
+ }
75
+ let filterValue = '';
76
+ if (displayName) {
77
+ filterValue = `displayName eq '${utils_1.formatting.encodeQueryParameter(displayName)}'`;
78
+ }
79
+ if (mailNickname) {
80
+ filterValue = `mailNickname eq '${utils_1.formatting.encodeQueryParameter(mailNickname)}'`;
81
+ }
82
+ const requestOptions = {
83
+ url: `${this.resource}/v1.0/directory/deletedItems/Microsoft.Graph.Group?$filter=${filterValue}`,
84
+ headers: {
85
+ accept: 'application/json;odata.metadata=none'
86
+ },
87
+ responseType: 'json'
88
+ };
89
+ const response = yield request_1.default.get(requestOptions);
90
+ const groups = response.value;
91
+ if (groups.length === 0) {
92
+ throw Error(`The specified group '${displayName || mailNickname}' does not exist.`);
93
+ }
94
+ if (groups.length > 1) {
95
+ throw Error(`Multiple groups with name '${displayName || mailNickname}' found: ${groups.map(x => x.id).join(',')}.`);
96
+ }
97
+ return groups[0].id;
98
+ });
99
+ }
100
+ optionSets() {
101
+ return [['id', 'displayName', 'mailNickname']];
102
+ }
103
+ options() {
104
+ const options = [
105
+ {
106
+ option: '-i, --id [id]'
107
+ },
108
+ {
109
+ option: '-d, --displayName [displayName]'
110
+ },
111
+ {
112
+ option: '-m, --mailNickname [mailNickname]'
113
+ },
114
+ {
115
+ option: '--confirm'
116
+ }
117
+ ];
118
+ const parentOptions = super.options();
119
+ return options.concat(parentOptions);
120
+ }
121
+ validate(args) {
122
+ if (args.options.id && !utils_1.validation.isValidGuid(args.options.id)) {
123
+ return `${args.options.id} is not a valid GUID`;
124
+ }
125
+ return true;
126
+ }
127
+ }
128
+ module.exports = new AadO365GroupRecycleBinItemRemoveCommand();
129
+ //# sourceMappingURL=o365group-recyclebinitem-remove.js.map
@@ -29,6 +29,7 @@ exports.default = {
29
29
  O365GROUP_CONVERSATION_POST_LIST: `${prefix} o365group conversation post list`,
30
30
  O365GROUP_RECYCLEBINITEM_CLEAR: `${prefix} o365group recyclebinitem clear`,
31
31
  O365GROUP_RECYCLEBINITEM_LIST: `${prefix} o365group recyclebinitem list`,
32
+ O365GROUP_RECYCLEBINITEM_REMOVE: `${prefix} o365group recyclebinitem remove`,
32
33
  O365GROUP_RECYCLEBINITEM_RESTORE: `${prefix} o365group recyclebinitem restore`,
33
34
  O365GROUP_SET: `${prefix} o365group set`,
34
35
  O365GROUP_TEAMIFY: `${prefix} o365group teamify`,
@@ -2,12 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const Auth_1 = require("../../../../Auth");
4
4
  const request_1 = require("../../../../request");
5
- const planner_1 = require("../../../../utils/planner");
6
5
  const utils_1 = require("../../../../utils");
6
+ const aadGroup_1 = require("../../../../utils/aadGroup");
7
+ const planner_1 = require("../../../../utils/planner");
7
8
  const GraphCommand_1 = require("../../../base/GraphCommand");
8
9
  const commands_1 = require("../../commands");
9
- const aadGroup_1 = require("../../../../utils/aadGroup");
10
+ const taskPriority_1 = require("../../taskPriority");
10
11
  class PlannerTaskAddCommand extends GraphCommand_1.default {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.allowedAppliedCategories = ['category1', 'category2', 'category3', 'category4', 'category5', 'category6'];
15
+ this.allowedPreviewTypes = ['automatic', 'nopreview', 'checklist', 'description', 'reference'];
16
+ }
11
17
  get name() {
12
18
  return commands_1.default.TASK_ADD;
13
19
  }
@@ -27,8 +33,12 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
27
33
  telemetryProps.percentComplete = typeof args.options.percentComplete !== 'undefined';
28
34
  telemetryProps.assignedToUserIds = typeof args.options.assignedToUserIds !== 'undefined';
29
35
  telemetryProps.assignedToUserNames = typeof args.options.assignedToUserNames !== 'undefined';
36
+ telemetryProps.assigneePriority = typeof args.options.assigneePriority !== 'undefined';
30
37
  telemetryProps.description = typeof args.options.description !== 'undefined';
38
+ telemetryProps.appliedCategories = typeof args.options.appliedCategories !== 'undefined';
39
+ telemetryProps.previewType = typeof args.options.previewType !== 'undefined';
31
40
  telemetryProps.orderHint = typeof args.options.orderHint !== 'undefined';
41
+ telemetryProps.priority = typeof args.options.priority !== 'undefined';
32
42
  return telemetryProps;
33
43
  }
34
44
  commandAction(logger, args, cb) {
@@ -47,10 +57,11 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
47
57
  return this.generateUserAssignments(args);
48
58
  })
49
59
  .then(assignments => {
60
+ const appliedCategories = this.generateAppliedCategories(args.options);
50
61
  const requestOptions = {
51
62
  url: `${this.resource}/v1.0/planner/tasks`,
52
63
  headers: {
53
- 'accept': 'application/json;odata.metadata=none'
64
+ accept: 'application/json;odata.metadata=none'
54
65
  },
55
66
  responseType: 'json',
56
67
  data: {
@@ -61,7 +72,10 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
61
72
  dueDateTime: args.options.dueDateTime,
62
73
  percentComplete: args.options.percentComplete,
63
74
  assignments: assignments,
64
- orderHint: args.options.orderHint
75
+ orderHint: args.options.orderHint,
76
+ assigneePriority: args.options.assigneePriority,
77
+ appliedCategories: appliedCategories,
78
+ priority: taskPriority_1.taskPriority.getPriorityValue(args.options.priority)
65
79
  }
66
80
  };
67
81
  return request_1.default.post(requestOptions);
@@ -90,9 +104,17 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
90
104
  return Promise.resolve(etag);
91
105
  });
92
106
  }
107
+ generateAppliedCategories(options) {
108
+ if (!options.appliedCategories) {
109
+ return {};
110
+ }
111
+ const categories = {};
112
+ options.appliedCategories.toLocaleLowerCase().split(',').forEach(x => categories[x] = true);
113
+ return categories;
114
+ }
93
115
  updateTaskDetails(options, newTask) {
94
116
  const taskId = newTask.id;
95
- if (!options.description) {
117
+ if (!options.description && !options.previewType) {
96
118
  return Promise.resolve(newTask);
97
119
  }
98
120
  return this
@@ -107,7 +129,8 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
107
129
  },
108
130
  responseType: 'json',
109
131
  data: {
110
- description: options.description
132
+ description: options.description,
133
+ previewType: options.previewType
111
134
  }
112
135
  };
113
136
  return request_1.default.patch(requestOptionsTaskDetails);
@@ -215,8 +238,18 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
215
238
  { option: '--percentComplete [percentComplete]' },
216
239
  { option: '--assignedToUserIds [assignedToUserIds]' },
217
240
  { option: '--assignedToUserNames [assignedToUserNames]' },
241
+ { option: '--assigneePriority [assigneePriority]' },
218
242
  { option: '--description [description]' },
219
- { option: '--orderHint [orderHint]' }
243
+ {
244
+ option: '--appliedCategories [appliedCategories]',
245
+ autocomplete: this.allowedAppliedCategories
246
+ },
247
+ {
248
+ option: '--previewType [previewType]',
249
+ autocomplete: this.allowedPreviewTypes
250
+ },
251
+ { option: '--orderHint [orderHint]' },
252
+ { option: '--priority [priority]', autocomplete: taskPriority_1.taskPriority.priorityValues }
220
253
  ];
221
254
  const parentOptions = super.options();
222
255
  return options.concat(parentOptions);
@@ -253,7 +286,7 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
253
286
  return `percentComplete is not a number`;
254
287
  }
255
288
  if (args.options.percentComplete && (args.options.percentComplete < 0 || args.options.percentComplete > 100)) {
256
- return `percentComplete should be between 0 and 100 `;
289
+ return `percentComplete should be between 0 and 100`;
257
290
  }
258
291
  if (args.options.assignedToUserIds && !utils_1.validation.isValidGuidArray(args.options.assignedToUserIds.split(','))) {
259
292
  return 'assignedToUserIds contains invalid GUID';
@@ -261,6 +294,22 @@ class PlannerTaskAddCommand extends GraphCommand_1.default {
261
294
  if (args.options.assignedToUserIds && args.options.assignedToUserNames) {
262
295
  return 'Specify either assignedToUserIds or assignedToUserNames but not both';
263
296
  }
297
+ if (args.options.appliedCategories && args.options.appliedCategories.split(',').filter(category => this.allowedAppliedCategories.indexOf(category.toLocaleLowerCase()) < 0).length !== 0) {
298
+ return `The appliedCategories contains invalid value. Specify either ${this.allowedAppliedCategories.join(', ')} as properties`;
299
+ }
300
+ if (args.options.previewType && this.allowedPreviewTypes.indexOf(args.options.previewType.toLocaleLowerCase()) === -1) {
301
+ return `${args.options.previewType} is not a valid preview type value. Allowed values are ${this.allowedPreviewTypes.join(', ')}`;
302
+ }
303
+ if (args.options.priority !== undefined) {
304
+ if (typeof args.options.priority === "number") {
305
+ if (isNaN(args.options.priority) || args.options.priority < 0 || args.options.priority > 10 || !Number.isInteger(args.options.priority)) {
306
+ return 'priority should be an integer between 0 and 10.';
307
+ }
308
+ }
309
+ else if (taskPriority_1.taskPriority.priorityValues.map(l => l.toLowerCase()).indexOf(args.options.priority.toString().toLowerCase()) === -1) {
310
+ return `${args.options.priority} is not a valid priority value. Allowed values are ${taskPriority_1.taskPriority.priorityValues.join('|')}.`;
311
+ }
312
+ }
264
313
  return true;
265
314
  }
266
315
  }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../../../../utils");
4
+ const Auth_1 = require("../../../../Auth");
5
+ const request_1 = require("../../../../request");
6
+ const GraphCommand_1 = require("../../../base/GraphCommand");
7
+ const commands_1 = require("../../commands");
8
+ class PlannerTaskChecklistItemListCommand extends GraphCommand_1.default {
9
+ get name() {
10
+ return commands_1.default.TASK_CHECKLISTITEM_LIST;
11
+ }
12
+ get description() {
13
+ return "Lists the checklist items of a Planner task.";
14
+ }
15
+ defaultProperties() {
16
+ return ['id', 'title', 'isChecked'];
17
+ }
18
+ commandAction(logger, args, cb) {
19
+ if (utils_1.accessToken.isAppOnlyAccessToken(Auth_1.default.service.accessTokens[this.resource].accessToken)) {
20
+ this.handleError('This command does not support application permissions.', logger, cb);
21
+ return;
22
+ }
23
+ const requestOptions = {
24
+ url: `${this.resource}/v1.0/planner/tasks/${encodeURIComponent(args.options.taskId)}/details?$select=checklist`,
25
+ headers: {
26
+ accept: "application/json;odata.metadata=none"
27
+ },
28
+ responseType: "json"
29
+ };
30
+ request_1.default.get(requestOptions).then((res) => {
31
+ if (!args.options.output || args.options.output === 'json') {
32
+ logger.log(res.checklist);
33
+ }
34
+ else {
35
+ //converted to text friendly output
36
+ const output = Object.getOwnPropertyNames(res.checklist).map(prop => (Object.assign({ id: prop }, res.checklist[prop])));
37
+ logger.log(output);
38
+ }
39
+ cb();
40
+ }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
41
+ }
42
+ options() {
43
+ const options = [
44
+ {
45
+ option: "-i, --taskId <taskId>"
46
+ }
47
+ ];
48
+ const parentOptions = super.options();
49
+ return options.concat(parentOptions);
50
+ }
51
+ }
52
+ module.exports = new PlannerTaskChecklistItemListCommand();
53
+ //# sourceMappingURL=task-checklistitem-list.js.map
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cli_1 = require("../../../../cli");
4
+ const request_1 = require("../../../../request");
5
+ const GraphCommand_1 = require("../../../base/GraphCommand");
6
+ const commands_1 = require("../../commands");
7
+ class PlannerTaskChecklistItemRemoveCommand extends GraphCommand_1.default {
8
+ get name() {
9
+ return commands_1.default.TASK_CHECKLISTITEM_REMOVE;
10
+ }
11
+ get description() {
12
+ return 'Removes the checklist item from the planner task';
13
+ }
14
+ getTelemetryProperties(args) {
15
+ const telemetryProps = super.getTelemetryProperties(args);
16
+ telemetryProps.confirm = (!(!args.options.confirm)).toString();
17
+ return telemetryProps;
18
+ }
19
+ commandAction(logger, args, cb) {
20
+ if (args.options.confirm) {
21
+ this.removeChecklistitem(logger, args, cb);
22
+ }
23
+ else {
24
+ cli_1.Cli.prompt({
25
+ type: 'confirm',
26
+ name: 'continue',
27
+ default: false,
28
+ message: `Are you sure you want to remove the checklist item with id ${args.options.id} from the planner task?`
29
+ }, (result) => {
30
+ if (!result.continue) {
31
+ cb();
32
+ }
33
+ else {
34
+ this.removeChecklistitem(logger, args, cb);
35
+ }
36
+ });
37
+ }
38
+ }
39
+ removeChecklistitem(logger, args, cb) {
40
+ this
41
+ .getTaskDetails(args.options.taskId)
42
+ .then(task => {
43
+ if (!task.checklist || !task.checklist[args.options.id]) {
44
+ return Promise.reject(`The specified checklist item with id ${args.options.id} does not exist`);
45
+ }
46
+ const requestOptionsTaskDetails = {
47
+ url: `${this.resource}/v1.0/planner/tasks/${args.options.taskId}/details`,
48
+ headers: {
49
+ 'accept': 'application/json;odata.metadata=none',
50
+ 'If-Match': task['@odata.etag'],
51
+ 'Prefer': 'return=representation'
52
+ },
53
+ responseType: 'json',
54
+ data: {
55
+ checklist: {
56
+ [args.options.id]: null
57
+ }
58
+ }
59
+ };
60
+ return request_1.default.patch(requestOptionsTaskDetails);
61
+ })
62
+ .then(_ => cb(), (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
63
+ }
64
+ getTaskDetails(taskId) {
65
+ const requestOptions = {
66
+ url: `${this.resource}/v1.0/planner/tasks/${encodeURIComponent(taskId)}/details?$select=checklist`,
67
+ headers: {
68
+ accept: 'application/json;odata.metadata=minimal'
69
+ },
70
+ responseType: 'json'
71
+ };
72
+ return request_1.default.get(requestOptions);
73
+ }
74
+ options() {
75
+ const options = [
76
+ { option: '-i, --id <id>' },
77
+ { option: '--taskId <taskId>' },
78
+ { option: '--confirm' }
79
+ ];
80
+ const parentOptions = super.options();
81
+ return options.concat(parentOptions);
82
+ }
83
+ }
84
+ module.exports = new PlannerTaskChecklistItemRemoveCommand();
85
+ //# sourceMappingURL=task-checklistitem-remove.js.map
@@ -0,0 +1,125 @@
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 commands_1 = require("../../commands");
8
+ class PlannerTaskReferenceRemoveCommand extends GraphCommand_1.default {
9
+ get name() {
10
+ return commands_1.default.TASK_REFERENCE_REMOVE;
11
+ }
12
+ get description() {
13
+ return 'Removes the reference from the Planner task';
14
+ }
15
+ getTelemetryProperties(args) {
16
+ const telemetryProps = super.getTelemetryProperties(args);
17
+ telemetryProps.url = typeof args.options.url !== 'undefined';
18
+ telemetryProps.alias = typeof args.options.alias !== 'undefined';
19
+ telemetryProps.confirm = (!(!args.options.confirm)).toString();
20
+ return telemetryProps;
21
+ }
22
+ commandAction(logger, args, cb) {
23
+ if (args.options.confirm) {
24
+ this.removeReference(logger, args, cb);
25
+ }
26
+ else {
27
+ cli_1.Cli.prompt({
28
+ type: 'confirm',
29
+ name: 'continue',
30
+ default: false,
31
+ message: `Are you sure you want to remove the reference from the Planner task?`
32
+ }, (result) => {
33
+ if (!result.continue) {
34
+ cb();
35
+ }
36
+ else {
37
+ this.removeReference(logger, args, cb);
38
+ }
39
+ });
40
+ }
41
+ }
42
+ removeReference(logger, args, cb) {
43
+ this
44
+ .getTaskDetailsEtagAndUrl(args.options)
45
+ .then(({ etag, url }) => {
46
+ const requestOptionsTaskDetails = {
47
+ url: `${this.resource}/v1.0/planner/tasks/${args.options.taskId}/details`,
48
+ headers: {
49
+ 'accept': 'application/json;odata.metadata=none',
50
+ 'If-Match': etag,
51
+ 'Prefer': 'return=representation'
52
+ },
53
+ responseType: 'json',
54
+ data: {
55
+ references: {
56
+ [utils_1.formatting.openTypesEncoder(url)]: null
57
+ }
58
+ }
59
+ };
60
+ return request_1.default.patch(requestOptionsTaskDetails);
61
+ })
62
+ .then(() => {
63
+ cb();
64
+ }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
65
+ }
66
+ getTaskDetailsEtagAndUrl(options) {
67
+ const requestOptions = {
68
+ url: `${this.resource}/v1.0/planner/tasks/${encodeURIComponent(options.taskId)}/details`,
69
+ headers: {
70
+ accept: 'application/json'
71
+ },
72
+ responseType: 'json'
73
+ };
74
+ let url = options.url;
75
+ return request_1.default
76
+ .get(requestOptions)
77
+ .then((response) => {
78
+ const etag = response ? response['@odata.etag'] : undefined;
79
+ if (!etag) {
80
+ return Promise.reject(`Error fetching task details`);
81
+ }
82
+ if (options.alias) {
83
+ const alias = options.alias;
84
+ const urls = [];
85
+ Object.entries(response.references).forEach((ref) => {
86
+ var _a;
87
+ if (((_a = ref[1].alias) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === alias.toLocaleLowerCase()) {
88
+ urls.push(decodeURIComponent(ref[0]));
89
+ }
90
+ });
91
+ if (!urls.length) {
92
+ return Promise.reject(`The specified reference with alias ${options.alias} does not exist`);
93
+ }
94
+ if (urls.length > 1) {
95
+ return Promise.reject(`Multiple references with alias ${options.alias} found. Pass one of the following urls within the "--url" option : ${urls}`);
96
+ }
97
+ url = urls[0];
98
+ }
99
+ return Promise.resolve({ etag, url });
100
+ });
101
+ }
102
+ options() {
103
+ const options = [
104
+ { option: '-u, --url [url]' },
105
+ { option: '--alias [alias]' },
106
+ { option: '-i, --taskId <taskId>' },
107
+ { option: '--confirm' }
108
+ ];
109
+ const parentOptions = super.options();
110
+ return options.concat(parentOptions);
111
+ }
112
+ optionSets() {
113
+ return [
114
+ ['url', 'alias']
115
+ ];
116
+ }
117
+ validate(args) {
118
+ if (args.options.url && args.options.url.indexOf('https://') !== 0 && args.options.url.indexOf('http://') !== 0) {
119
+ return 'The url option should contain a valid URL. A valid URL starts with http(s)://';
120
+ }
121
+ return true;
122
+ }
123
+ }
124
+ module.exports = new PlannerTaskReferenceRemoveCommand();
125
+ //# sourceMappingURL=task-reference-remove.js.map
@@ -7,6 +7,7 @@ const planner_1 = require("../../../../utils/planner");
7
7
  const GraphCommand_1 = require("../../../base/GraphCommand");
8
8
  const commands_1 = require("../../commands");
9
9
  const aadGroup_1 = require("../../../../utils/aadGroup");
10
+ const taskPriority_1 = require("../../taskPriority");
10
11
  class PlannerTaskSetCommand extends GraphCommand_1.default {
11
12
  constructor() {
12
13
  super(...arguments);
@@ -36,6 +37,7 @@ class PlannerTaskSetCommand extends GraphCommand_1.default {
36
37
  telemetryProps.description = typeof args.options.description !== 'undefined';
37
38
  telemetryProps.appliedCategories = typeof args.options.appliedCategories !== 'undefined';
38
39
  telemetryProps.orderHint = typeof args.options.orderHint !== 'undefined';
40
+ telemetryProps.priority = typeof args.options.priority !== 'undefined';
39
41
  return telemetryProps;
40
42
  }
41
43
  commandAction(logger, args, cb) {
@@ -264,6 +266,9 @@ class PlannerTaskSetCommand extends GraphCommand_1.default {
264
266
  if (options.orderHint) {
265
267
  requestBody.orderHint = options.orderHint;
266
268
  }
269
+ if (options.priority !== undefined) {
270
+ requestBody.priority = taskPriority_1.taskPriority.getPriorityValue(options.priority);
271
+ }
267
272
  return requestBody;
268
273
  }
269
274
  options() {
@@ -284,7 +289,8 @@ class PlannerTaskSetCommand extends GraphCommand_1.default {
284
289
  { option: '--assigneePriority [assigneePriority]' },
285
290
  { option: '--description [description]' },
286
291
  { option: '--appliedCategories [appliedCategories]' },
287
- { option: '--orderHint [orderHint]' }
292
+ { option: '--orderHint [orderHint]' },
293
+ { option: '--priority [priority]', autocomplete: taskPriority_1.taskPriority.priorityValues }
288
294
  ];
289
295
  const parentOptions = super.options();
290
296
  return options.concat(parentOptions);
@@ -329,6 +335,16 @@ class PlannerTaskSetCommand extends GraphCommand_1.default {
329
335
  if (args.options.appliedCategories && args.options.appliedCategories.split(',').filter(category => this.allowedAppliedCategories.indexOf(category.toLocaleLowerCase()) < 0).length !== 0) {
330
336
  return 'The appliedCategories contains invalid value. Specify either category1, category2, category3, category4, category5 and/or category6 as properties';
331
337
  }
338
+ if (args.options.priority !== undefined) {
339
+ if (typeof args.options.priority === "number") {
340
+ if (isNaN(args.options.priority) || args.options.priority < 0 || args.options.priority > 10 || !Number.isInteger(args.options.priority)) {
341
+ return 'priority should be an integer between 0 and 10.';
342
+ }
343
+ }
344
+ else if (taskPriority_1.taskPriority.priorityValues.map(l => l.toLowerCase()).indexOf(args.options.priority.toString().toLowerCase()) === -1) {
345
+ return `${args.options.priority} is not a valid priority value. Allowed values are ${taskPriority_1.taskPriority.priorityValues.join('|')}.`;
346
+ }
347
+ }
332
348
  return true;
333
349
  }
334
350
  }
@@ -13,11 +13,14 @@ exports.default = {
13
13
  PLAN_LIST: `${prefix} plan list`,
14
14
  TASK_ADD: `${prefix} task add`,
15
15
  TASK_CHECKLISTITEM_ADD: `${prefix} task checklistitem add`,
16
+ TASK_CHECKLISTITEM_LIST: `${prefix} task checklistitem list`,
17
+ TASK_CHECKLISTITEM_REMOVE: `${prefix} task checklistitem remove`,
16
18
  TASK_DETAILS_GET: `${prefix} task details get`,
17
19
  TASK_GET: `${prefix} task get`,
18
20
  TASK_LIST: `${prefix} task list`,
19
21
  TASK_REFERENCE_ADD: `${prefix} task reference add`,
20
22
  TASK_REFERENCE_LIST: `${prefix} task reference list`,
23
+ TASK_REFERENCE_REMOVE: `${prefix} task reference remove`,
21
24
  TASK_REMOVE: `${prefix} task remove`,
22
25
  TASK_SET: `${prefix} task set`,
23
26
  TENANT_SETTINGS_LIST: `${prefix} tenant settings list`
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.taskPriority = void 0;
4
+ exports.taskPriority = {
5
+ /** Priority labels used in Planner. */
6
+ priorityValues: ["Urgent", "Important", "Medium", "Low"],
7
+ /**
8
+ * Transform priority label to the corresponding number value.
9
+ * @param priority Priority label or number.
10
+ */
11
+ getPriorityValue(priority) {
12
+ if (typeof priority === "string") {
13
+ switch (priority.toLowerCase()) {
14
+ case "urgent":
15
+ return 1;
16
+ case "important":
17
+ return 3;
18
+ case "medium":
19
+ return 5;
20
+ case "low":
21
+ return 9;
22
+ }
23
+ }
24
+ return priority;
25
+ }
26
+ };
27
+ //# sourceMappingURL=taskPriority.js.map
@@ -40,41 +40,41 @@ const FN015003_FILE_tslint_json_1 = require("./rules/FN015003_FILE_tslint_json")
40
40
  const FN015008_FILE_eslintrc_js_1 = require("./rules/FN015008_FILE_eslintrc_js");
41
41
  const FN023002_GITIGNORE_heft_1 = require("./rules/FN023002_GITIGNORE_heft");
42
42
  module.exports = [
43
- new FN001001_DEP_microsoft_sp_core_library_1.FN001001_DEP_microsoft_sp_core_library('1.15.0-rc.0'),
44
- new FN001002_DEP_microsoft_sp_lodash_subset_1.FN001002_DEP_microsoft_sp_lodash_subset('1.15.0-rc.0'),
45
- new FN001003_DEP_microsoft_sp_office_ui_fabric_core_1.FN001003_DEP_microsoft_sp_office_ui_fabric_core('1.15.0-rc.0'),
46
- new FN001004_DEP_microsoft_sp_webpart_base_1.FN001004_DEP_microsoft_sp_webpart_base('1.15.0-rc.0'),
47
- new FN001011_DEP_microsoft_sp_dialog_1.FN001011_DEP_microsoft_sp_dialog('1.15.0-rc.0'),
48
- new FN001012_DEP_microsoft_sp_application_base_1.FN001012_DEP_microsoft_sp_application_base('1.15.0-rc.0'),
49
- new FN001013_DEP_microsoft_decorators_1.FN001013_DEP_microsoft_decorators('1.15.0-rc.0'),
50
- new FN001014_DEP_microsoft_sp_listview_extensibility_1.FN001014_DEP_microsoft_sp_listview_extensibility('1.15.0-rc.0'),
51
- new FN001021_DEP_microsoft_sp_property_pane_1.FN001021_DEP_microsoft_sp_property_pane('1.15.0-rc.0'),
52
- new FN001022_DEP_office_ui_fabric_react_1.FN001022_DEP_office_ui_fabric_react('7.183.1'),
53
- new FN001023_DEP_microsoft_sp_component_base_1.FN001023_DEP_microsoft_sp_component_base('1.15.0-rc.0'),
54
- new FN001024_DEP_microsoft_sp_diagnostics_1.FN001024_DEP_microsoft_sp_diagnostics('1.15.0-rc.0'),
55
- new FN001025_DEP_microsoft_sp_dynamic_data_1.FN001025_DEP_microsoft_sp_dynamic_data('1.15.0-rc.0'),
56
- new FN001026_DEP_microsoft_sp_extension_base_1.FN001026_DEP_microsoft_sp_extension_base('1.15.0-rc.0'),
57
- new FN001027_DEP_microsoft_sp_http_1.FN001027_DEP_microsoft_sp_http('1.15.0-rc.0'),
58
- new FN001028_DEP_microsoft_sp_list_subscription_1.FN001028_DEP_microsoft_sp_list_subscription('1.15.0-rc.0'),
59
- new FN001029_DEP_microsoft_sp_loader_1.FN001029_DEP_microsoft_sp_loader('1.15.0-rc.0'),
60
- new FN001030_DEP_microsoft_sp_module_interfaces_1.FN001030_DEP_microsoft_sp_module_interfaces('1.15.0-rc.0'),
61
- new FN001031_DEP_microsoft_sp_odata_types_1.FN001031_DEP_microsoft_sp_odata_types('1.15.0-rc.0'),
62
- new FN001032_DEP_microsoft_sp_page_context_1.FN001032_DEP_microsoft_sp_page_context('1.15.0-rc.0'),
43
+ new FN001001_DEP_microsoft_sp_core_library_1.FN001001_DEP_microsoft_sp_core_library('1.15.0'),
44
+ new FN001002_DEP_microsoft_sp_lodash_subset_1.FN001002_DEP_microsoft_sp_lodash_subset('1.15.0'),
45
+ new FN001003_DEP_microsoft_sp_office_ui_fabric_core_1.FN001003_DEP_microsoft_sp_office_ui_fabric_core('1.15.0'),
46
+ new FN001004_DEP_microsoft_sp_webpart_base_1.FN001004_DEP_microsoft_sp_webpart_base('1.15.0'),
47
+ new FN001011_DEP_microsoft_sp_dialog_1.FN001011_DEP_microsoft_sp_dialog('1.15.0'),
48
+ new FN001012_DEP_microsoft_sp_application_base_1.FN001012_DEP_microsoft_sp_application_base('1.15.0'),
49
+ new FN001013_DEP_microsoft_decorators_1.FN001013_DEP_microsoft_decorators('1.15.0'),
50
+ new FN001014_DEP_microsoft_sp_listview_extensibility_1.FN001014_DEP_microsoft_sp_listview_extensibility('1.15.0'),
51
+ new FN001021_DEP_microsoft_sp_property_pane_1.FN001021_DEP_microsoft_sp_property_pane('1.15.0'),
52
+ new FN001022_DEP_office_ui_fabric_react_1.FN001022_DEP_office_ui_fabric_react('7.185.7'),
53
+ new FN001023_DEP_microsoft_sp_component_base_1.FN001023_DEP_microsoft_sp_component_base('1.15.0'),
54
+ new FN001024_DEP_microsoft_sp_diagnostics_1.FN001024_DEP_microsoft_sp_diagnostics('1.15.0'),
55
+ new FN001025_DEP_microsoft_sp_dynamic_data_1.FN001025_DEP_microsoft_sp_dynamic_data('1.15.0'),
56
+ new FN001026_DEP_microsoft_sp_extension_base_1.FN001026_DEP_microsoft_sp_extension_base('1.15.0'),
57
+ new FN001027_DEP_microsoft_sp_http_1.FN001027_DEP_microsoft_sp_http('1.15.0'),
58
+ new FN001028_DEP_microsoft_sp_list_subscription_1.FN001028_DEP_microsoft_sp_list_subscription('1.15.0'),
59
+ new FN001029_DEP_microsoft_sp_loader_1.FN001029_DEP_microsoft_sp_loader('1.15.0'),
60
+ new FN001030_DEP_microsoft_sp_module_interfaces_1.FN001030_DEP_microsoft_sp_module_interfaces('1.15.0'),
61
+ new FN001031_DEP_microsoft_sp_odata_types_1.FN001031_DEP_microsoft_sp_odata_types('1.15.0'),
62
+ new FN001032_DEP_microsoft_sp_page_context_1.FN001032_DEP_microsoft_sp_page_context('1.15.0'),
63
63
  new FN001033_DEP_tslib_1.FN001033_DEP_tslib('2.3.1'),
64
- new FN002001_DEVDEP_microsoft_sp_build_web_1.FN002001_DEVDEP_microsoft_sp_build_web('1.15.0-rc.0'),
65
- new FN002002_DEVDEP_microsoft_sp_module_interfaces_1.FN002002_DEVDEP_microsoft_sp_module_interfaces('1.15.0-rc.0'),
64
+ new FN002001_DEVDEP_microsoft_sp_build_web_1.FN002001_DEVDEP_microsoft_sp_build_web('1.15.0'),
65
+ new FN002002_DEVDEP_microsoft_sp_module_interfaces_1.FN002002_DEVDEP_microsoft_sp_module_interfaces('1.15.0'),
66
66
  new FN002007_DEVDEP_ajv_1.FN002007_DEVDEP_ajv('6.12.5'),
67
67
  new FN002009_DEVDEP_microsoft_sp_tslint_rules_1.FN002009_DEVDEP_microsoft_sp_tslint_rules('', false),
68
68
  new FN002013_DEVDEP_types_webpack_env_1.FN002013_DEVDEP_types_webpack_env('1.15.2'),
69
69
  new FN002018_DEVDEP_microsoft_rush_stack_compiler_3_9_1.FN002018_DEVDEP_microsoft_rush_stack_compiler_3_9('', false),
70
- new FN002020_DEVDEP_microsoft_rush_stack_compiler_4_5_1.FN002020_DEVDEP_microsoft_rush_stack_compiler_4_5('0.2.0'),
70
+ new FN002020_DEVDEP_microsoft_rush_stack_compiler_4_5_1.FN002020_DEVDEP_microsoft_rush_stack_compiler_4_5('0.2.2'),
71
71
  new FN002021_DEVDEP_rushstack_eslint_config_1.FN002021_DEVDEP_rushstack_eslint_config('2.5.1'),
72
- new FN002022_DEVDEP_microsoft_eslint_plugin_spfx_1.FN002022_DEVDEP_microsoft_eslint_plugin_spfx('1.15.0-rc.0'),
73
- new FN002023_DEVDEP_microsoft_eslint_config_spfx_1.FN002023_DEVDEP_microsoft_eslint_config_spfx('1.15.0-rc.0'),
72
+ new FN002022_DEVDEP_microsoft_eslint_plugin_spfx_1.FN002022_DEVDEP_microsoft_eslint_plugin_spfx('1.15.0'),
73
+ new FN002023_DEVDEP_microsoft_eslint_config_spfx_1.FN002023_DEVDEP_microsoft_eslint_config_spfx('1.15.0'),
74
74
  new FN002024_DEVDEP_eslint_1.FN002024_DEVDEP_eslint('8.7.0'),
75
75
  new FN002025_DEVDEP_eslint_plugin_react_hooks_1.FN002025_DEVDEP_eslint_plugin_react_hooks('4.3.0'),
76
- new FN006004_CFG_PS_developer_1.FN006004_CFG_PS_developer('1.15.0-rc.0'),
77
- new FN010001_YORC_version_1.FN010001_YORC_version('1.15.0-rc.0'),
76
+ new FN006004_CFG_PS_developer_1.FN006004_CFG_PS_developer('1.15.0'),
77
+ new FN010001_YORC_version_1.FN010001_YORC_version('1.15.0'),
78
78
  new FN012017_TSC_extends_1.FN012017_TSC_extends('./node_modules/@microsoft/rush-stack-compiler-4.5/includes/tsconfig-web.json'),
79
79
  new FN015003_FILE_tslint_json_1.FN015003_FILE_tslint_json(false, ''),
80
80
  new FN015008_FILE_eslintrc_js_1.FN015008_FILE_eslintrc_js(true, `require('@rushstack/eslint-config/patch/modern-module-resolution');
@@ -84,4 +84,4 @@ module.exports = [
84
84
  };`),
85
85
  new FN023002_GITIGNORE_heft_1.FN023002_GITIGNORE_heft()
86
86
  ];
87
- //# sourceMappingURL=upgrade-1.15.0-rc.0.js.map
87
+ //# sourceMappingURL=upgrade-1.15.0.js.map
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const fs = require("fs");
4
4
  const os = require("os");
5
5
  const path = require("path");
6
- // uncomment to support upgrading to preview releases
7
- const semver_1 = require("semver");
8
6
  const Command_1 = require("../../../../Command");
9
7
  const utils_1 = require("../../../../utils");
10
8
  const commands_1 = require("../../commands");
@@ -47,7 +45,7 @@ class SpfxProjectUpgradeCommand extends base_project_command_1.BaseProjectComman
47
45
  '1.13.0',
48
46
  '1.13.1',
49
47
  '1.14.0',
50
- '1.15.0-rc.0'
48
+ '1.15.0'
51
49
  ];
52
50
  }
53
51
  get name() {
@@ -60,9 +58,9 @@ class SpfxProjectUpgradeCommand extends base_project_command_1.BaseProjectComman
60
58
  const telemetryProps = super.getTelemetryProperties(args);
61
59
  telemetryProps.toVersion = args.options.toVersion || this.supportedVersions[this.supportedVersions.length - 1];
62
60
  // uncomment to support upgrading to preview releases
63
- if ((0, semver_1.prerelease)(telemetryProps.toVersion) && !args.options.preview) {
64
- telemetryProps.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
65
- }
61
+ // if (prerelease(telemetryProps.toVersion) && !args.options.preview) {
62
+ // telemetryProps.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
63
+ // }
66
64
  telemetryProps.packageManager = args.options.packageManager || 'npm';
67
65
  telemetryProps.shell = args.options.shell || 'bash';
68
66
  telemetryProps.preview = args.options.preview;
@@ -76,15 +74,15 @@ class SpfxProjectUpgradeCommand extends base_project_command_1.BaseProjectComman
76
74
  }
77
75
  this.toVersion = args.options.toVersion ? args.options.toVersion : this.supportedVersions[this.supportedVersions.length - 1];
78
76
  // uncomment to support upgrading to preview releases
79
- if (!args.options.toVersion &&
80
- !args.options.preview &&
81
- (0, semver_1.prerelease)(this.toVersion)) {
82
- // no version and no preview specified while the current version to
83
- // upgrade to is a prerelease so let's grab the first non-preview version
84
- // since we're supporting only one preview version, it's sufficient for
85
- // us to take second to last version
86
- this.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
87
- }
77
+ // if (!args.options.toVersion &&
78
+ // !args.options.preview &&
79
+ // prerelease(this.toVersion)) {
80
+ // // no version and no preview specified while the current version to
81
+ // // upgrade to is a prerelease so let's grab the first non-preview version
82
+ // // since we're supporting only one preview version, it's sufficient for
83
+ // // us to take second to last version
84
+ // this.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
85
+ // }
88
86
  this.packageManager = args.options.packageManager || 'npm';
89
87
  this.shell = args.options.shell || 'bash';
90
88
  if (this.supportedVersions.indexOf(this.toVersion) < 0) {
@@ -42,7 +42,7 @@ class SpoHubSiteListCommand extends SpoCommand_1.default {
42
42
  })
43
43
  .then((res) => {
44
44
  hubSites = res.value;
45
- if (args.options.includeAssociatedSites !== true || args.options.output !== 'json') {
45
+ if (args.options.includeAssociatedSites !== true || args.options.output && args.options.output !== 'json') {
46
46
  return Promise.resolve();
47
47
  }
48
48
  else {
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ListPrincipalType = void 0;
4
+ var ListPrincipalType;
5
+ (function (ListPrincipalType) {
6
+ ListPrincipalType[ListPrincipalType["None"] = 0] = "None";
7
+ ListPrincipalType[ListPrincipalType["User"] = 1] = "User";
8
+ ListPrincipalType[ListPrincipalType["DistributionList"] = 2] = "DistributionList";
9
+ ListPrincipalType[ListPrincipalType["SecurityGroup"] = 4] = "SecurityGroup";
10
+ ListPrincipalType[ListPrincipalType["SharePointGroup"] = 8] = "SharePointGroup";
11
+ ListPrincipalType[ListPrincipalType["All"] = 15] = "All";
12
+ })(ListPrincipalType = exports.ListPrincipalType || (exports.ListPrincipalType = {}));
13
+ //# sourceMappingURL=ListPrincipalType.js.map
@@ -4,6 +4,7 @@ const request_1 = require("../../../../request");
4
4
  const utils_1 = require("../../../../utils");
5
5
  const SpoCommand_1 = require("../../../base/SpoCommand");
6
6
  const commands_1 = require("../../commands");
7
+ const ListPrincipalType_1 = require("./ListPrincipalType");
7
8
  class SpoListGetCommand extends SpoCommand_1.default {
8
9
  get name() {
9
10
  return commands_1.default.LIST_GET;
@@ -42,6 +43,11 @@ class SpoListGetCommand extends SpoCommand_1.default {
42
43
  request_1.default
43
44
  .get(requestOptions)
44
45
  .then((listInstance) => {
46
+ if (args.options.withPermissions) {
47
+ listInstance.RoleAssignments.forEach(r => {
48
+ r.Member.PrincipalTypeString = ListPrincipalType_1.ListPrincipalType[r.Member.PrincipalType];
49
+ });
50
+ }
45
51
  logger.log(listInstance);
46
52
  cb();
47
53
  }, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
@@ -14,12 +14,18 @@ class SpoListListCommand extends SpoCommand_1.default {
14
14
  defaultProperties() {
15
15
  return ['Title', 'Url', 'Id'];
16
16
  }
17
+ getTelemetryProperties(args) {
18
+ const telemetryProps = super.getTelemetryProperties(args);
19
+ telemetryProps.executeWithLimitedPermissions = !!args.options.executeWithLimitedPermissions;
20
+ return telemetryProps;
21
+ }
17
22
  commandAction(logger, args, cb) {
18
23
  if (this.verbose) {
19
24
  logger.logToStderr(`Retrieving all lists in site at ${args.options.webUrl}...`);
20
25
  }
26
+ const suffix = args.options.executeWithLimitedPermissions ? '&$select=RootFolder/ServerRelativeUrl,*' : '';
21
27
  const requestOptions = {
22
- url: `${args.options.webUrl}/_api/web/lists?$expand=RootFolder`,
28
+ url: `${args.options.webUrl}/_api/web/lists?$expand=RootFolder${suffix}`,
23
29
  method: 'GET',
24
30
  headers: {
25
31
  'accept': 'application/json;odata=nometadata'
@@ -40,6 +46,9 @@ class SpoListListCommand extends SpoCommand_1.default {
40
46
  const options = [
41
47
  {
42
48
  option: '-u, --webUrl <webUrl>'
49
+ },
50
+ {
51
+ option: '--executeWithLimitedPermissions'
43
52
  }
44
53
  ];
45
54
  const parentOptions = super.options();
@@ -20,7 +20,7 @@ m365 aad app set [options]
20
20
  : Name of the Azure AD application registration to update. Specify either `appId`, `objectId` or `name`
21
21
 
22
22
  `-u, --uri [uri]`
23
- : Application ID URI to update
23
+ : Comma-separated list of Application ID URIs to update
24
24
 
25
25
  `-r, --redirectUris [redirectUris]`
26
26
  : Comma-separated list of redirect URIs to add to the app registration. Requires `platform` to be specified
@@ -0,0 +1,45 @@
1
+ # aad o365group recyclebinitem remove
2
+
3
+ Permanently deletes a Microsoft 365 Group from the recycle bin in the current tenant
4
+
5
+ ## Usage
6
+
7
+ ```sh
8
+ m365 aad o365group recyclebinitem remove [options]
9
+ ```
10
+
11
+ ## Options
12
+
13
+ `-i, --id [id]`
14
+ : The ID of the Microsoft 365 Group to remove. Specify either `id`, `displayName` or `mailNickname` but not multiple.
15
+
16
+ `-d, --displayName [displayName]`
17
+ : Display name for the Microsoft 365 Group to remove. Specify either `id`, `displayName` or `mailNickname` but not multiple.
18
+
19
+ `-m, --mailNickname [mailNickname]`
20
+ : Name of the group e-mail (part before the @). Specify either `id`, `displayName` or `mailNickname` but not multiple.
21
+
22
+ `--confirm`
23
+ : Don't prompt for confirmation.
24
+
25
+ --8<-- "docs/cmd/_global.md"
26
+
27
+ ## Examples
28
+
29
+ Removes the Microsoft 365 Group with specific ID
30
+
31
+ ```sh
32
+ m365 aad o365group recyclebinitem remove --id "00000000-0000-0000-0000-000000000000"
33
+ ```
34
+
35
+ Removes the Microsoft 365 Group with specific name
36
+
37
+ ```sh
38
+ m365 aad o365group recyclebinitem remove --displayName "My Group"
39
+ ```
40
+
41
+ Remove the Microsoft 365 Group with specific mail nickname without confirmation
42
+
43
+ ```sh
44
+ m365 aad o365group recyclebinitem remove --mailNickname "Mygroup" --confirm
45
+ ```
@@ -39,9 +39,6 @@ m365 planner task add [options]
39
39
 
40
40
  `--percentComplete [percentComplete]`
41
41
  : Percentage of task completion. Number between 0 and 100.
42
- - When set to 0, the task is considered _Not started_.
43
- - When set between 1 and 99, the task is considered _In progress_.
44
- - When set to 100, the task is considered _Completed_.
45
42
 
46
43
  `--assignedToUserIds [assignedToUserIds]`
47
44
  : The comma-separated IDs of the assignees the task is assigned to. Specify either `assignedToUserIds` or `assignedToUserNames` but not both.
@@ -49,14 +46,41 @@ m365 planner task add [options]
49
46
  `--assignedToUserNames [assignedToUserNames]`
50
47
  : The comma-separated UPNs of the assignees the task is assigned to. Specify either `assignedToUserIds` or `assignedToUserNames` but not both.
51
48
 
49
+ `--assigneePriority [assigneePriority]`
50
+ : Hint used to order items of this type in a list view. The format is defined as outlined [here](https://docs.microsoft.com/graph/api/resources/planner-order-hint-format?view=graph-rest-1.0).
51
+
52
52
  `--description [description]`
53
53
  : Description of the task
54
54
 
55
+ `--appliedCategories [appliedCategories]`
56
+ : Comma-separated categories that should be added to the task. The possible options are: `category1`, `category2`, `category3`, `category4`, `category5` and/or `category6`. Additional info defined [here](https://docs.microsoft.com/graph/api/resources/plannerappliedcategories?view=graph-rest-1.0).
57
+
58
+ `--previewType [previewType]`
59
+ : This sets the type of preview that shows up on the task. The possible values are: `automatic`, `noPreview`, `checklist`, `description`, `reference`. When set to automatic the displayed preview is chosen by the app viewing the task. Default `automatic`.
60
+
55
61
  `--orderHint [orderHint]`
56
- : Hint used to order items of this type in a list view. The format is defined as outlined [here](https://docs.microsoft.com/en-us/graph/api/resources/planner-order-hint-format?view=graph-rest-1.0).
62
+ : Hint used to order items of this type in a list view. The format is defined as outlined [here](https://docs.microsoft.com/graph/api/resources/planner-order-hint-format?view=graph-rest-1.0).
63
+
64
+ `--priority [priority]`
65
+ : Priority of the task: Urgent, Important, Medium, Low. Or an integer between 0 and 10 (check remarks section for more info). Default value is Medium.
57
66
 
58
67
  --8<-- "docs/cmd/_global.md"
59
68
 
69
+ ## Remarks
70
+
71
+ When you specify the value for `percentComplete`, consider the following:
72
+
73
+ - when set to 0, the task is considered _Not started_
74
+ - when set between 1 and 99, the task is considered _In progress_
75
+ - when set to 100, the task is considered _Completed_
76
+
77
+ When you specify an integer value for `priority`, consider the following:
78
+
79
+ - values 0 and 1 are interpreted as _Urgent_
80
+ - values 2, 3 and 4 are interpreted as _Important_
81
+ - values 5, 6 and 7 are interpreted as _Medium_
82
+ - values 8, 9 and 10 are interpreted as _Low_
83
+
60
84
  ## Examples
61
85
 
62
86
  Adds a Microsoft Planner task with the name _My Planner Task_ for plan with the ID _8QZEH7b3wkSbGQobscsM5gADCBa_ and for the bucket with the ID _IK8tuFTwQEa5vTonM7ZMRZgAKdna_
@@ -76,3 +100,15 @@ Adds a Microsoft Planner task with the name _My Planner Task_ for plan with the
76
100
  ```sh
77
101
  m365 planner task add --title "My Planner Task" --planId "8QZEH7b3wkSbGQobscsM5gADCBa" --bucketId "IK8tuFTwQEa5vTonM7ZMRZgAKdna" --assignedToUserNames "Allan.Carroll@contoso.com,Ida.Stevens@contoso.com" --dueDateTime "2021-12-16"
78
102
  ```
103
+
104
+ Adds a Microsoft Planner task with the name _My Planner Task_ for plan with the ID _8QZEH7b3wkbGQobscsM5gADCBa_ and for the bucket with the ID _IK8tuFTwQEa5vTonM7ZMRZgAKdna_. The new task will be assigned to the users _Allan.Carroll@contoso.com_ and _Ida.Stevens@contoso.com_ who will appear first with the asssignee priority _' !'_
105
+
106
+ ```sh
107
+ m365 planner task add --title "My Planner Task" --planId "8QZEH7b3wkSbGQobscsM5gADCBa" --bucketId "IK8tuFTwQEa5vTonM7ZMRZgAKdna" --assignedToUserNames "Allan.Carroll@contoso.com,Ida.Stevens@contoso.com" --asssigneePriority ' !'
108
+ ```
109
+
110
+ Adds a Microsoft Planner task with the name _My Planner Task_ for plan with the ID _8QZEH7b3wkbGQobscsM5gADCBa_ and for the bucket with the ID _IK8tuFTwQEa5vTonM7ZMRZgAKdna_. The new task will receive the categories _category1,category3_ and get a preview with the type _noPreview_
111
+
112
+ ```sh
113
+ m365 planner task add --title "My Planner Task" --planId "8QZEH7b3wkSbGQobscsM5gADCBa" --bucketId "IK8tuFTwQEa5vTonM7ZMRZgAKdna" --appliedCategories "category1,category3" --previewType "noPreview"
114
+ ```
@@ -0,0 +1,24 @@
1
+ # planner task checklistitem list
2
+
3
+ Lists the checklist items of a Planner task.
4
+
5
+ ## Usage
6
+
7
+ ```sh
8
+ m365 planner task checklistitem list [options]
9
+ ```
10
+
11
+ ## Options
12
+
13
+ `-i, --taskId <taskId>`
14
+ : ID of the task
15
+
16
+ --8<-- "docs/cmd/_global.md"
17
+
18
+ ## Examples
19
+
20
+ Lists the checklist items of a Planner task.
21
+
22
+ ```sh
23
+ m365 planner task checklistitem list --taskId 'vzCcZoOv-U27PwydxHB8opcADJo-'
24
+ ```
@@ -0,0 +1,36 @@
1
+ # planner task checklistitem remove
2
+
3
+ Removes the checklist item from the Planner task.
4
+
5
+ ## Usage
6
+
7
+ ```sh
8
+ m365 planner task checklistitem remove [options]
9
+ ```
10
+
11
+ ## Options
12
+
13
+ `-i, --id <id>`
14
+ : ID of the checklist item.
15
+
16
+ `--taskId <taskId>`
17
+ : ID of the task.
18
+
19
+ `--confirm`
20
+ : Don't prompt for confirmation
21
+
22
+ --8<-- "docs/cmd/_global.md"
23
+
24
+ ## Examples
25
+
26
+ Removes a checklist item with the id _40012_ from the Planner task with the id _2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2_
27
+
28
+ ```sh
29
+ m365 planner task checklistitem remove --id "40012" --taskId "2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2"
30
+ ```
31
+
32
+ Removes a checklist item with the id _40012_ from the Planner task with the id _2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2_ without prompt
33
+
34
+ ```sh
35
+ m365 planner task checklistitem remove --id "40012" --taskId "2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2" --confirm
36
+ ```
@@ -0,0 +1,39 @@
1
+ # planner task reference remove
2
+
3
+ Removes the reference from the Planner task.
4
+
5
+ ## Usage
6
+
7
+ ```sh
8
+ m365 planner task reference remove [options]
9
+ ```
10
+
11
+ ## Options
12
+
13
+ `-u, --url [url]`
14
+ : URL location of the reference. Specify either `alias` or `url` but not both.
15
+
16
+ `--alias [alias]`
17
+ : The alias of the reference. Specify either `alias` or `url` but not both.
18
+
19
+ `-i, --taskId <taskId>`
20
+ : ID of the task.
21
+
22
+ `--confirm`
23
+ : Don't prompt for confirmation
24
+
25
+ --8<-- "docs/cmd/_global.md"
26
+
27
+ ## Examples
28
+
29
+ Removes a reference with the url _https://www.microsoft.com_ from the Planner task with the id _2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2_
30
+
31
+ ```sh
32
+ m365 planner task reference remove --url "https://www.microsoft.com" --taskId "2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2"
33
+ ```
34
+
35
+ Removes a reference with the alias _Parker_ from the Planner task with the id _2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2_
36
+
37
+ ```sh
38
+ m365 planner task reference remove --alias "Parker" --taskId "2Vf8JHgsBUiIf-nuvBtv-ZgAAYw2"
39
+ ```
@@ -61,16 +61,26 @@ m365 planner task set [options]
61
61
  `--appliedCategories [appliedCategories]`
62
62
  : Comma-separated categories that should be added to the task
63
63
 
64
+ `--priority [priority]`
65
+ : Priority of the task: Urgent, Important, Medium, Low. Or an integer between 0 and 10 (check remarks section for more info).
66
+
64
67
  --8<-- "docs/cmd/_global.md"
65
68
 
66
69
  ## Remarks
67
70
 
68
- When you specify the value for `percentageComplete`, consider the following:
71
+ When you specify the value for `percentComplete`, consider the following:
69
72
 
70
73
  - when set to 0, the task is considered _Not started_
71
74
  - when set between 1 and 99, the task is considered _In progress_
72
75
  - when set to 100, the task is considered _Completed_
73
76
 
77
+ When you specify an integer value for `priority`, consider the following:
78
+
79
+ - values 0 and 1 are interpreted as _Urgent_
80
+ - values 2, 3 and 4 are interpreted as _Important_
81
+ - values 5, 6 and 7 are interpreted as _Medium_
82
+ - values 8, 9 and 10 are interpreted as _Low_
83
+
74
84
  You can add up to 6 categories to the task. An example to add _category1_ and _category3_ would be `category1,category3`.
75
85
 
76
86
  ## Examples
@@ -32,7 +32,7 @@ m365 spfx project upgrade [options]
32
32
 
33
33
  ## Remarks
34
34
 
35
- The `spfx project upgrade` command helps you upgrade your SharePoint Framework project to the specified version. If no version is specified, the command will upgrade to the latest version of the SharePoint Framework it supports (v1.14.0). If you specify the `preview` option without a specific version, the command will upgrade your project to the latest preview version v1.15.0-rc.0.
35
+ The `spfx project upgrade` command helps you upgrade your SharePoint Framework project to the specified version. If no version is specified, the command will upgrade to the latest version of the SharePoint Framework it supports (v1.15.0).
36
36
 
37
37
  This command doesn't change your project files. Instead, it gives you a report with all steps necessary to upgrade your project to the specified version of the SharePoint Framework. Changing project files is error-prone, especially when it comes to updating your solution's code. This is why at this moment, this command produces a report that you can use yourself to perform the necessary updates and verify that everything is working as expected.
38
38
 
@@ -17,10 +17,7 @@ m365 spo hubsite list [options]
17
17
 
18
18
  ## Remarks
19
19
 
20
- !!! attention
21
- This command is based on a SharePoint API that is currently in preview and is subject to change once the API reached general availability.
22
-
23
- When using the text output type (default), the command lists only the values of the `ID`, `SiteUrl` and `Title` properties of the hub site. When setting the output type to JSON, all available properties are included in the command output.
20
+ When using the text or csv output type, the command lists only the values of the `ID`, `SiteUrl` and `Title` properties of the hub site. With the output type as JSON, all available properties are included in the command output.
24
21
 
25
22
  ## Examples
26
23
 
@@ -13,6 +13,9 @@ m365 spo list list [options]
13
13
  `-u, --webUrl <webUrl>`
14
14
  : URL of the site where the lists to retrieve are located
15
15
 
16
+ `--executeWithLimitedPermissions`
17
+ : Use this option to execute this command with site member or visitor permissions. Not specifying this option will require site owner (or admin) permissions.
18
+
16
19
  --8<-- "docs/cmd/_global.md"
17
20
 
18
21
  ## Examples
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnp/cli-microsoft365",
3
- "version": "5.4.0-beta.fdd7cb1",
3
+ "version": "5.4.0",
4
4
  "description": "Manage Microsoft 365 and SharePoint Framework projects on any platform",
5
5
  "license": "MIT",
6
6
  "main": "./dist/api.js",
@@ -51,7 +51,7 @@
51
51
  "name": "Waldek Mastykarz",
52
52
  "email": "waldek@mastykarz.nl",
53
53
  "web": "https://blog.mastykarz.nl"
54
- },
54
+ },
55
55
  {
56
56
  "name": "Garry Trinder",
57
57
  "email": "garry.trinder@live.com",
@@ -239,4 +239,4 @@
239
239
  "sinon": "^14.0.0",
240
240
  "source-map-support": "^0.5.21"
241
241
  }
242
- }
242
+ }