@pnp/cli-microsoft365 6.9.0-beta.91abae4 → 6.9.0-beta.eff4ea7

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 (70) hide show
  1. package/dist/cli/Cli.js +16 -0
  2. package/dist/m365/cli/commands/config/config-set.js +1 -0
  3. package/dist/m365/planner/commands/bucket/bucket-add.js +15 -13
  4. package/dist/m365/planner/commands/bucket/bucket-get.js +27 -28
  5. package/dist/m365/planner/commands/bucket/bucket-list.js +15 -13
  6. package/dist/m365/planner/commands/bucket/bucket-remove.js +33 -34
  7. package/dist/m365/planner/commands/bucket/bucket-set.js +33 -34
  8. package/dist/m365/planner/commands/plan/plan-add.js +49 -52
  9. package/dist/m365/planner/commands/plan/plan-set.js +19 -20
  10. package/dist/m365/planner/commands/task/task-add.js +75 -78
  11. package/dist/m365/planner/commands/task/task-checklistitem-add.js +11 -10
  12. package/dist/m365/planner/commands/task/task-checklistitem-remove.js +10 -8
  13. package/dist/m365/planner/commands/task/task-get.js +53 -56
  14. package/dist/m365/planner/commands/task/task-list.js +23 -24
  15. package/dist/m365/planner/commands/task/task-reference-add.js +11 -10
  16. package/dist/m365/planner/commands/task/task-reference-remove.js +13 -14
  17. package/dist/m365/planner/commands/task/task-remove.js +44 -48
  18. package/dist/m365/planner/commands/task/task-set.js +83 -87
  19. package/dist/m365/pp/commands/card/card-get.js +6 -1
  20. package/dist/m365/purview/commands/retentionevent/retentionevent-add.js +0 -5
  21. package/dist/m365/purview/commands/retentionevent/retentionevent-get.js +0 -5
  22. package/dist/m365/purview/commands/retentionevent/retentionevent-list.js +0 -5
  23. package/dist/m365/purview/commands/retentionevent/retentionevent-remove.js +0 -5
  24. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-add.js +0 -5
  25. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-get.js +0 -5
  26. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-list.js +0 -5
  27. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-remove.js +0 -5
  28. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-set.js +0 -5
  29. package/dist/m365/purview/commands/retentionlabel/retentionlabel-add.js +0 -5
  30. package/dist/m365/purview/commands/retentionlabel/retentionlabel-get.js +0 -5
  31. package/dist/m365/purview/commands/retentionlabel/retentionlabel-list.js +0 -5
  32. package/dist/m365/purview/commands/retentionlabel/retentionlabel-remove.js +19 -22
  33. package/dist/m365/purview/commands/retentionlabel/retentionlabel-set.js +0 -5
  34. package/dist/m365/spo/commands/applicationcustomizer/applicationcustomizer-set.js +154 -0
  35. package/dist/m365/spo/commands/commandset/commandset-set.js +11 -2
  36. package/dist/m365/spo/commands/list/list-sensitivitylabel-ensure.js +127 -0
  37. package/dist/m365/spo/commands/navigation/navigation-node-add.js +31 -1
  38. package/dist/m365/spo/commands/navigation/navigation-node-set.js +31 -2
  39. package/dist/m365/spo/commands/tenant/Solution.js +3 -0
  40. package/dist/m365/spo/commands/tenant/tenant-commandset-add.js +215 -0
  41. package/dist/m365/spo/commands/tenant/tenant-commandset-get.js +114 -0
  42. package/dist/m365/spo/commands/tenant/tenant-commandset-list.js +50 -0
  43. package/dist/m365/spo/commands/tenant/tenant-commandset-set.js +1 -1
  44. package/dist/m365/spo/commands.js +5 -0
  45. package/dist/settingsNames.js +1 -0
  46. package/dist/utils/spo.js +60 -0
  47. package/docs/docs/cmd/purview/retentionevent/retentionevent-add.mdx +0 -6
  48. package/docs/docs/cmd/purview/retentionevent/retentionevent-get.mdx +0 -6
  49. package/docs/docs/cmd/purview/retentionevent/retentionevent-list.mdx +0 -7
  50. package/docs/docs/cmd/purview/retentionevent/retentionevent-remove.mdx +0 -6
  51. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-add.mdx +0 -6
  52. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-get.mdx +0 -6
  53. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-list.mdx +0 -6
  54. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-remove.mdx +0 -6
  55. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-set.mdx +0 -6
  56. package/docs/docs/cmd/purview/retentionlabel/retentionlabel-add.mdx +0 -6
  57. package/docs/docs/cmd/purview/retentionlabel/retentionlabel-get.mdx +0 -6
  58. package/docs/docs/cmd/purview/retentionlabel/retentionlabel-list.mdx +0 -6
  59. package/docs/docs/cmd/purview/retentionlabel/retentionlabel-remove.mdx +0 -6
  60. package/docs/docs/cmd/purview/retentionlabel/retentionlabel-set.mdx +0 -6
  61. package/docs/docs/cmd/spo/applicationcustomizer/applicationcustomizer-set.mdx +72 -0
  62. package/docs/docs/cmd/spo/commandset/commandset-set.mdx +12 -3
  63. package/docs/docs/cmd/spo/list/list-sensitivitylabel-ensure.mdx +64 -0
  64. package/docs/docs/cmd/spo/navigation/navigation-node-add.mdx +7 -4
  65. package/docs/docs/cmd/spo/navigation/navigation-node-set.mdx +9 -0
  66. package/docs/docs/cmd/spo/tenant/tenant-commandset-add.mdx +183 -0
  67. package/docs/docs/cmd/spo/tenant/tenant-commandset-get.mdx +155 -0
  68. package/docs/docs/cmd/spo/tenant/tenant-commandset-list.mdx +114 -0
  69. package/docs/docs/cmd/spo/tenant/tenant-commandset-set.mdx +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,215 @@
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
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _SpoTenantCommandSetAddCommand_instances, _SpoTenantCommandSetAddCommand_initTelemetry, _SpoTenantCommandSetAddCommand_initOptions, _SpoTenantCommandSetAddCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const validation_1 = require("../../../../utils/validation");
19
+ const SpoCommand_1 = require("../../../base/SpoCommand");
20
+ const commands_1 = require("../../commands");
21
+ const Cli_1 = require("../../../../cli/Cli");
22
+ const spoTenantAppCatalogUrlGetCommand = require("./tenant-appcatalogurl-get");
23
+ const spoListItemAddCommand = require("../listitem/listitem-add");
24
+ const spoListItemListCommand = require("../listitem/listitem-list");
25
+ const urlUtil_1 = require("../../../../utils/urlUtil");
26
+ class SpoTenantCommandSetAddCommand extends SpoCommand_1.default {
27
+ get name() {
28
+ return commands_1.default.TENANT_COMMANDSET_ADD;
29
+ }
30
+ get description() {
31
+ return 'Add a ListView Command Set as a tenant-wide extension.';
32
+ }
33
+ constructor() {
34
+ super();
35
+ _SpoTenantCommandSetAddCommand_instances.add(this);
36
+ __classPrivateFieldGet(this, _SpoTenantCommandSetAddCommand_instances, "m", _SpoTenantCommandSetAddCommand_initTelemetry).call(this);
37
+ __classPrivateFieldGet(this, _SpoTenantCommandSetAddCommand_instances, "m", _SpoTenantCommandSetAddCommand_initOptions).call(this);
38
+ __classPrivateFieldGet(this, _SpoTenantCommandSetAddCommand_instances, "m", _SpoTenantCommandSetAddCommand_initValidators).call(this);
39
+ }
40
+ commandAction(logger, args) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ try {
43
+ const appCatalogUrl = yield this.getAppCatalogUrl(logger);
44
+ const componentManifest = yield this.getComponentManifest(appCatalogUrl, args.options.clientSideComponentId, logger);
45
+ const clientComponentManifest = JSON.parse(componentManifest.ClientComponentManifest);
46
+ if (clientComponentManifest.extensionType !== "ListViewCommandSet") {
47
+ throw `The extension type of this component is not of type 'ListViewCommandSet' but of type '${clientComponentManifest.extensionType}'`;
48
+ }
49
+ const solution = yield this.getSolutionFromAppCatalog(appCatalogUrl, componentManifest.SolutionId, logger);
50
+ if (!solution.ContainsTenantWideExtension) {
51
+ throw `The solution does not contain an extension that can be deployed to all sites. Make sure that you've entered the correct component Id.`;
52
+ }
53
+ else if (!solution.SkipFeatureDeployment) {
54
+ throw 'The solution has not been deployed to all sites. Make sure to deploy this solution to all sites.';
55
+ }
56
+ yield this.addTenantWideExtension(appCatalogUrl, args.options, logger);
57
+ }
58
+ catch (err) {
59
+ this.handleRejectedODataJsonPromise(err);
60
+ }
61
+ });
62
+ }
63
+ getAppCatalogUrl(logger) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const spoTenantAppCatalogUrlGetCommandOutput = yield Cli_1.Cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand, { options: { output: 'text', _: [] } });
66
+ if (this.verbose) {
67
+ logger.logToStderr(spoTenantAppCatalogUrlGetCommandOutput.stderr);
68
+ }
69
+ const appCatalogUrl = spoTenantAppCatalogUrlGetCommandOutput.stdout;
70
+ if (!appCatalogUrl) {
71
+ throw 'Cannot add tenant-wide ListView Command Set as app catalog cannot be found';
72
+ }
73
+ if (this.verbose) {
74
+ logger.logToStderr(`Got tenant app catalog url: ${appCatalogUrl}`);
75
+ }
76
+ return appCatalogUrl;
77
+ });
78
+ }
79
+ getComponentManifest(appCatalogUrl, clientSideComponentId, logger) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ if (this.verbose) {
82
+ logger.logToStderr('Retrieving component manifest item from the ComponentManifests list on the app catalog site so that we get the solution id');
83
+ }
84
+ const camlQuery = `<View><ViewFields><FieldRef Name='ClientComponentId'></FieldRef><FieldRef Name='SolutionId'></FieldRef><FieldRef Name='ClientComponentManifest'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='ClientComponentId' /><Value Type='Guid'>${clientSideComponentId}</Value></Eq></Where></Query></View>`;
85
+ const commandOptions = {
86
+ webUrl: appCatalogUrl,
87
+ listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`,
88
+ camlQuery: camlQuery,
89
+ verbose: this.verbose,
90
+ debug: this.debug,
91
+ output: 'json'
92
+ };
93
+ const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
94
+ if (this.verbose) {
95
+ logger.logToStderr(output.stderr);
96
+ }
97
+ const outputParsed = JSON.parse(output.stdout);
98
+ if (outputParsed.length === 0) {
99
+ throw 'No component found with the specified clientSideComponentId found in the component manifest list. Make sure that the application is added to the application catalog';
100
+ }
101
+ return outputParsed[0];
102
+ });
103
+ }
104
+ getSolutionFromAppCatalog(appCatalogUrl, solutionId, logger) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ if (this.verbose) {
107
+ logger.logToStderr(`Retrieving solution with id ${solutionId} from the application catalog`);
108
+ }
109
+ const camlQuery = `<View><ViewFields><FieldRef Name='SkipFeatureDeployment'></FieldRef><FieldRef Name='ContainsTenantWideExtension'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='AppProductID' /><Value Type='Guid'>${solutionId}</Value></Eq></Where></Query></View>`;
110
+ const commandOptions = {
111
+ webUrl: appCatalogUrl,
112
+ listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/AppCatalog`,
113
+ camlQuery: camlQuery,
114
+ verbose: this.verbose,
115
+ debug: this.debug,
116
+ output: 'json'
117
+ };
118
+ const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
119
+ if (this.verbose) {
120
+ logger.logToStderr(output.stderr);
121
+ }
122
+ const outputParsed = JSON.parse(output.stdout);
123
+ if (outputParsed.length === 0) {
124
+ throw `No component found with the solution id ${solutionId}. Make sure that the solution is available in the app catalog`;
125
+ }
126
+ return outputParsed[0];
127
+ });
128
+ }
129
+ addTenantWideExtension(appCatalogUrl, options, logger) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ if (this.verbose) {
132
+ logger.logToStderr('Pre-checks finished. Adding tenant wide extension to the TenantWideExtensions list');
133
+ }
134
+ const commandOptions = {
135
+ webUrl: appCatalogUrl,
136
+ listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/TenantWideExtensions`,
137
+ Title: options.title,
138
+ TenantWideExtensionComponentId: options.clientSideComponentId,
139
+ TenantWideExtensionLocation: this.getLocation(options.location),
140
+ TenantWideExtensionSequence: 0,
141
+ TenantWideExtensionListTemplate: this.getListTemplate(options.listType),
142
+ TenantWideExtensionComponentProperties: options.clientSideComponentProperties || '',
143
+ TenantWideExtensionWebTemplate: options.webTemplate || '',
144
+ TenantWideExtensionDisabled: false,
145
+ verbose: this.verbose,
146
+ debug: this.debug,
147
+ output: options.output
148
+ };
149
+ yield Cli_1.Cli.executeCommand(spoListItemAddCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
150
+ });
151
+ }
152
+ getLocation(location) {
153
+ switch (location) {
154
+ case 'Both':
155
+ return 'ClientSideExtension.ListViewCommandSet';
156
+ case 'ContextMenu':
157
+ return 'ClientSideExtension.ListViewCommandSet.ContextMenu';
158
+ default:
159
+ return 'ClientSideExtension.ListViewCommandSet.CommandBar';
160
+ }
161
+ }
162
+ getListTemplate(listTemplate) {
163
+ switch (listTemplate) {
164
+ case 'SitePages':
165
+ return '119';
166
+ case 'Library':
167
+ return '101';
168
+ default:
169
+ return '100';
170
+ }
171
+ }
172
+ }
173
+ _SpoTenantCommandSetAddCommand_instances = new WeakSet(), _SpoTenantCommandSetAddCommand_initTelemetry = function _SpoTenantCommandSetAddCommand_initTelemetry() {
174
+ this.telemetry.push((args) => {
175
+ Object.assign(this.telemetryProperties, {
176
+ listType: args.options.listType,
177
+ clientSideComponentProperties: typeof args.options.clientSideComponentProperties !== 'undefined',
178
+ webTemplate: typeof args.options.webTemplate !== 'undefined',
179
+ location: args.options.location
180
+ });
181
+ });
182
+ }, _SpoTenantCommandSetAddCommand_initOptions = function _SpoTenantCommandSetAddCommand_initOptions() {
183
+ this.options.unshift({
184
+ option: '-t, --title <title>'
185
+ }, {
186
+ option: '-l, --listType <listType>',
187
+ autocomplete: SpoTenantCommandSetAddCommand.listTypes
188
+ }, {
189
+ option: '-i, --clientSideComponentId <clientSideComponentId>'
190
+ }, {
191
+ option: '-p, --clientSideComponentProperties [clientSideComponentProperties]'
192
+ }, {
193
+ option: '-w, --webTemplate [webTemplate]'
194
+ }, {
195
+ option: '--location [location]',
196
+ autocomplete: SpoTenantCommandSetAddCommand.locations
197
+ });
198
+ }, _SpoTenantCommandSetAddCommand_initValidators = function _SpoTenantCommandSetAddCommand_initValidators() {
199
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
200
+ if (!validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
201
+ return `${args.options.clientSideComponentId} is not a valid GUID`;
202
+ }
203
+ if (SpoTenantCommandSetAddCommand.listTypes.indexOf(args.options.listType) < 0) {
204
+ return `${args.options.listType} is not a valid list type. Allowed values are ${SpoTenantCommandSetAddCommand.listTypes.join(', ')}`;
205
+ }
206
+ if (args.options.location && SpoTenantCommandSetAddCommand.locations.indexOf(args.options.location) < 0) {
207
+ return `${args.options.location} is not a valid location. Allowed values are ${SpoTenantCommandSetAddCommand.locations.join(', ')}`;
208
+ }
209
+ return true;
210
+ }));
211
+ };
212
+ SpoTenantCommandSetAddCommand.listTypes = ['List', 'Library', 'SitePages'];
213
+ SpoTenantCommandSetAddCommand.locations = ['ContextMenu', 'CommandBar', 'Both'];
214
+ module.exports = new SpoTenantCommandSetAddCommand();
215
+ //# sourceMappingURL=tenant-commandset-add.js.map
@@ -0,0 +1,114 @@
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
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _SpoTenantCommandSetGetCommand_instances, _SpoTenantCommandSetGetCommand_initTelemetry, _SpoTenantCommandSetGetCommand_initOptions, _SpoTenantCommandSetGetCommand_initValidators, _SpoTenantCommandSetGetCommand_initOptionSets;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const Command_1 = require("../../../../Command");
19
+ const request_1 = require("../../../../request");
20
+ const formatting_1 = require("../../../../utils/formatting");
21
+ const spo_1 = require("../../../../utils/spo");
22
+ const urlUtil_1 = require("../../../../utils/urlUtil");
23
+ const validation_1 = require("../../../../utils/validation");
24
+ const SpoCommand_1 = require("../../../base/SpoCommand");
25
+ const commands_1 = require("../../commands");
26
+ class SpoTenantCommandSetGetCommand extends SpoCommand_1.default {
27
+ get name() {
28
+ return commands_1.default.TENANT_COMMANDSET_GET;
29
+ }
30
+ get description() {
31
+ return 'Get a ListView Command Set that is installed tenant wide';
32
+ }
33
+ constructor() {
34
+ super();
35
+ _SpoTenantCommandSetGetCommand_instances.add(this);
36
+ __classPrivateFieldGet(this, _SpoTenantCommandSetGetCommand_instances, "m", _SpoTenantCommandSetGetCommand_initTelemetry).call(this);
37
+ __classPrivateFieldGet(this, _SpoTenantCommandSetGetCommand_instances, "m", _SpoTenantCommandSetGetCommand_initOptions).call(this);
38
+ __classPrivateFieldGet(this, _SpoTenantCommandSetGetCommand_instances, "m", _SpoTenantCommandSetGetCommand_initValidators).call(this);
39
+ __classPrivateFieldGet(this, _SpoTenantCommandSetGetCommand_instances, "m", _SpoTenantCommandSetGetCommand_initOptionSets).call(this);
40
+ }
41
+ commandAction(logger, args) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const appCatalogUrl = yield spo_1.spo.getTenantAppCatalogUrl(logger, this.debug);
44
+ if (!appCatalogUrl) {
45
+ throw new Command_1.CommandError('No app catalog URL found');
46
+ }
47
+ let filter = `startswith(TenantWideExtensionLocation,'ClientSideExtension.ListViewCommandSet')`;
48
+ if (args.options.title) {
49
+ filter += ` and Title eq '${args.options.title}'`;
50
+ }
51
+ else if (args.options.id) {
52
+ filter += ` and Id eq ${args.options.id}`;
53
+ }
54
+ else if (args.options.clientSideComponentId) {
55
+ filter += ` and TenantWideExtensionComponentId eq '${args.options.clientSideComponentId}'`;
56
+ }
57
+ const listServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(appCatalogUrl, '/lists/TenantWideExtensions');
58
+ const reqOptions = {
59
+ url: `${appCatalogUrl}/_api/web/GetList('${formatting_1.formatting.encodeQueryParameter(listServerRelativeUrl)}')/items?$filter=${filter}`,
60
+ headers: {
61
+ 'accept': 'application/json;odata=nometadata'
62
+ },
63
+ responseType: 'json'
64
+ };
65
+ try {
66
+ const listItemInstances = yield request_1.default.get(reqOptions);
67
+ if ((listItemInstances === null || listItemInstances === void 0 ? void 0 : listItemInstances.value.length) > 0) {
68
+ if (listItemInstances.value.length > 1) {
69
+ throw `Multiple ListView Command Sets with ${args.options.title || args.options.clientSideComponentId} were found. Please disambiguate (IDs): ${listItemInstances.value.map(item => item.Id).join(', ')}`;
70
+ }
71
+ listItemInstances.value.forEach(v => delete v['ID']);
72
+ logger.log(listItemInstances.value[0]);
73
+ }
74
+ else {
75
+ throw 'The specified ListView Command Set was not found';
76
+ }
77
+ }
78
+ catch (err) {
79
+ return this.handleRejectedODataJsonPromise(err);
80
+ }
81
+ });
82
+ }
83
+ }
84
+ _SpoTenantCommandSetGetCommand_instances = new WeakSet(), _SpoTenantCommandSetGetCommand_initTelemetry = function _SpoTenantCommandSetGetCommand_initTelemetry() {
85
+ this.telemetry.push((args) => {
86
+ Object.assign(this.telemetryProperties, {
87
+ title: typeof args.options.title !== 'undefined',
88
+ id: typeof args.options.id !== 'undefined',
89
+ clientSideComponentId: typeof args.options.clientSideComponentId !== 'undefined'
90
+ });
91
+ });
92
+ }, _SpoTenantCommandSetGetCommand_initOptions = function _SpoTenantCommandSetGetCommand_initOptions() {
93
+ this.options.unshift({
94
+ option: '-t, --title [title]'
95
+ }, {
96
+ option: '-i, --id [id]'
97
+ }, {
98
+ option: '-c, --clientSideComponentId [clientSideComponentId]'
99
+ });
100
+ }, _SpoTenantCommandSetGetCommand_initValidators = function _SpoTenantCommandSetGetCommand_initValidators() {
101
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
102
+ if (args.options.id && isNaN(parseInt(args.options.id))) {
103
+ return `${args.options.id} is not a number`;
104
+ }
105
+ if (args.options.clientSideComponentId && !validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
106
+ return `${args.options.clientSideComponentId} is not a valid GUID`;
107
+ }
108
+ return true;
109
+ }));
110
+ }, _SpoTenantCommandSetGetCommand_initOptionSets = function _SpoTenantCommandSetGetCommand_initOptionSets() {
111
+ this.optionSets.push({ options: ['title', 'id', 'clientSideComponentId'] });
112
+ };
113
+ module.exports = new SpoTenantCommandSetGetCommand();
114
+ //# sourceMappingURL=tenant-commandset-get.js.map
@@ -0,0 +1,50 @@
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 Command_1 = require("../../../../Command");
13
+ const formatting_1 = require("../../../../utils/formatting");
14
+ const odata_1 = require("../../../../utils/odata");
15
+ const spo_1 = require("../../../../utils/spo");
16
+ const urlUtil_1 = require("../../../../utils/urlUtil");
17
+ const SpoCommand_1 = require("../../../base/SpoCommand");
18
+ const commands_1 = require("../../commands");
19
+ class SpoTenantCommandSetListCommand extends SpoCommand_1.default {
20
+ get name() {
21
+ return commands_1.default.TENANT_COMMANDSET_LIST;
22
+ }
23
+ get description() {
24
+ return 'Retrieves a list of ListView Command Sets that are installed tenant-wide';
25
+ }
26
+ defaultProperties() {
27
+ return ['Title', 'TenantWideExtensionComponentId', 'TenantWideExtensionListTemplate'];
28
+ }
29
+ commandAction(logger) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const appCatalogUrl = yield spo_1.spo.getTenantAppCatalogUrl(logger, this.debug);
32
+ if (!appCatalogUrl) {
33
+ throw new Command_1.CommandError('No app catalog URL found');
34
+ }
35
+ if (this.verbose) {
36
+ logger.logToStderr('Retrieving a list of ListView Command Sets that are installed tenant-wide');
37
+ }
38
+ const listServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(appCatalogUrl, '/lists/TenantWideExtensions');
39
+ try {
40
+ const response = yield odata_1.odata.getAllItems(`${appCatalogUrl}/_api/web/GetList('${formatting_1.formatting.encodeQueryParameter(listServerRelativeUrl)}')/items?$filter=startswith(TenantWideExtensionLocation, 'ClientSideExtension.ListViewCommandSet')`);
41
+ logger.log(response);
42
+ }
43
+ catch (err) {
44
+ this.handleRejectedODataJsonPromise(err);
45
+ }
46
+ });
47
+ }
48
+ }
49
+ module.exports = new SpoTenantCommandSetListCommand();
50
+ //# sourceMappingURL=tenant-commandset-list.js.map
@@ -166,7 +166,7 @@ _SpoTenantCommandSetSetCommand_instances = new WeakSet(), _SpoTenantCommandSetSe
166
166
  option: '-l, --listType [listType]',
167
167
  autocomplete: SpoTenantCommandSetSetCommand.listTypes
168
168
  }, {
169
- option: '-i, --clientSideComponentId [clientSideComponentId]'
169
+ option: '-c, --clientSideComponentId [clientSideComponentId]'
170
170
  }, {
171
171
  option: '-p, --clientSideComponentProperties [clientSideComponentProperties]'
172
172
  }, {
@@ -17,6 +17,7 @@ exports.default = {
17
17
  APPLICATIONCUSTOMIZER_GET: `${prefix} applicationcustomizer get`,
18
18
  APPLICATIONCUSTOMIZER_LIST: `${prefix} applicationcustomizer list`,
19
19
  APPLICATIONCUSTOMIZER_REMOVE: `${prefix} applicationcustomizer remove`,
20
+ APPLICATIONCUSTOMIZER_SET: `${prefix} applicationcustomizer set`,
20
21
  APPPAGE_ADD: `${prefix} apppage add`,
21
22
  APPPAGE_SET: `${prefix} apppage set`,
22
23
  CDN_GET: `${prefix} cdn get`,
@@ -141,6 +142,7 @@ exports.default = {
141
142
  LIST_ROLEASSIGNMENT_ADD: `${prefix} list roleassignment add`,
142
143
  LIST_ROLEINHERITANCE_BREAK: `${prefix} list roleinheritance break`,
143
144
  LIST_ROLEINHERITANCE_RESET: `${prefix} list roleinheritance reset`,
145
+ LIST_SENSITIVITYLABEL_ENSURE: `${prefix} list sensitivitylabel ensure`,
144
146
  LIST_SET: `${prefix} list set`,
145
147
  LIST_SITESCRIPT_GET: `${prefix} list sitescript get`,
146
148
  LIST_VIEW_ADD: `${prefix} list view add`,
@@ -295,6 +297,9 @@ exports.default = {
295
297
  TENANT_APPLICATIONCUSTOMIZER_GET: `${prefix} tenant applicationcustomizer get`,
296
298
  TENANT_APPLICATIONCUSTOMIZER_LIST: `${prefix} tenant applicationcustomizer list`,
297
299
  TENANT_APPLICATIONCUSTOMIZER_REMOVE: `${prefix} tenant applicationcustomizer remove`,
300
+ TENANT_COMMANDSET_ADD: `${prefix} tenant commandset add`,
301
+ TENANT_COMMANDSET_GET: `${prefix} tenant commandset get`,
302
+ TENANT_COMMANDSET_LIST: `${prefix} tenant commandset list`,
298
303
  TENANT_COMMANDSET_REMOVE: `${prefix} tenant commandset remove`,
299
304
  TENANT_COMMANDSET_SET: `${prefix} tenant commandset set`,
300
305
  TENANT_RECYCLEBINITEM_LIST: `${prefix} tenant recyclebinitem list`,
@@ -12,6 +12,7 @@ const settingsNames = {
12
12
  disableTelemetry: 'disableTelemetry',
13
13
  errorOutput: 'errorOutput',
14
14
  helpMode: 'helpMode',
15
+ interactive: 'interactive',
15
16
  output: 'output',
16
17
  printErrorsAsPlainText: 'printErrorsAsPlainText',
17
18
  prompt: 'prompt',
package/dist/utils/spo.js CHANGED
@@ -568,6 +568,66 @@ exports.spo = {
568
568
  const res = yield request_1.default.get(requestOptions);
569
569
  return res.AadObjectId.NameId;
570
570
  });
571
+ },
572
+ /**
573
+ * Retrieves the menu state for the quick launch.
574
+ * @param webUrl Web url
575
+ */
576
+ getQuickLaunchMenuState(webUrl) {
577
+ return __awaiter(this, void 0, void 0, function* () {
578
+ return this.getMenuState(webUrl);
579
+ });
580
+ },
581
+ /**
582
+ * Retrieves the menu state for the top navigation.
583
+ * @param webUrl Web url
584
+ */
585
+ getTopNavigationMenuState(webUrl) {
586
+ return __awaiter(this, void 0, void 0, function* () {
587
+ return this.getMenuState(webUrl, '1002');
588
+ });
589
+ },
590
+ /**
591
+ * Retrieves the menu state.
592
+ * @param webUrl Web url
593
+ * @param menuNodeKey Menu node key
594
+ */
595
+ getMenuState(webUrl, menuNodeKey) {
596
+ return __awaiter(this, void 0, void 0, function* () {
597
+ const requestBody = {
598
+ customProperties: null,
599
+ depth: 10,
600
+ mapProviderName: null,
601
+ menuNodeKey: menuNodeKey || null
602
+ };
603
+ const requestOptions = {
604
+ url: `${webUrl}/_api/navigation/MenuState`,
605
+ headers: {
606
+ accept: 'application/json;odata=nometadata'
607
+ },
608
+ data: requestBody,
609
+ responseType: 'json'
610
+ };
611
+ return request_1.default.post(requestOptions);
612
+ });
613
+ },
614
+ /**
615
+ * Saves the menu state.
616
+ * @param webUrl Web url
617
+ * @param menuState Updated menu state
618
+ */
619
+ saveMenuState(webUrl, menuState) {
620
+ return __awaiter(this, void 0, void 0, function* () {
621
+ const requestOptions = {
622
+ url: `${webUrl}/_api/navigation/SaveMenuState`,
623
+ headers: {
624
+ accept: 'application/json;odata=nometadata'
625
+ },
626
+ data: { menuState: menuState },
627
+ responseType: 'json'
628
+ };
629
+ return request_1.default.post(requestOptions);
630
+ });
571
631
  }
572
632
  };
573
633
  //# sourceMappingURL=spo.js.map
@@ -47,12 +47,6 @@ This command is based on an API that is currently in preview and is subject to c
47
47
 
48
48
  :::
49
49
 
50
- :::caution
51
-
52
- This command currently only supports delegated permissions.
53
-
54
- :::
55
-
56
50
  ## Examples
57
51
 
58
52
  Create a retention event to start retention at the end of 2022 for all employee documents that have been labeled and have the Asset ID _EmployeeNr1234_
@@ -37,12 +37,6 @@ This command is based on an API that is currently in preview and is subject to c
37
37
 
38
38
  :::
39
39
 
40
- :::caution
41
-
42
- This command currently only supports delegated permissions.
43
-
44
- :::
45
-
46
40
  ## Response
47
41
 
48
42
  <Tabs>
@@ -32,15 +32,8 @@ This command is based on a Microsoft Graph API that is currently in preview and
32
32
 
33
33
  :::
34
34
 
35
- :::caution
36
-
37
- This command currently only supports delegated permissions.
38
-
39
- :::
40
-
41
35
  ## Response
42
36
 
43
-
44
37
  <Tabs>
45
38
  <TabItem value="JSON">
46
39
 
@@ -38,12 +38,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
38
38
 
39
39
  :::
40
40
 
41
- :::caution
42
-
43
- This command currently only supports delegated permissions.
44
-
45
- :::
46
-
47
41
  ## Response
48
42
 
49
43
  The command won't return a response on success.
@@ -32,12 +32,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
32
32
 
33
33
  :::
34
34
 
35
- :::caution
36
-
37
- This command currently only supports delegated permissions.
38
-
39
- :::
40
-
41
35
  ## Examples
42
36
 
43
37
  Create a retention event type *Contract Expiry*.
@@ -29,12 +29,6 @@ This command is based on an API that is currently in preview and is subject to c
29
29
 
30
30
  :::
31
31
 
32
- :::caution
33
-
34
- This command currently only supports delegated permissions.
35
-
36
- :::
37
-
38
32
  ## Examples
39
33
 
40
34
  Get a retention event type by id
@@ -24,12 +24,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
24
24
 
25
25
  :::
26
26
 
27
- :::caution
28
-
29
- This command currently only supports delegated permissions.
30
-
31
- :::
32
-
33
27
  ## Examples
34
28
 
35
29
  Get a list of retention event types
@@ -30,12 +30,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
30
30
 
31
31
  :::
32
32
 
33
- :::caution
34
-
35
- This command currently only supports delegated permissions.
36
-
37
- :::
38
-
39
33
  ## Examples
40
34
 
41
35
  Delete a retention event type by id
@@ -30,12 +30,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
30
30
 
31
31
  :::
32
32
 
33
- :::caution
34
-
35
- This command currently only supports delegated permissions.
36
-
37
- :::
38
-
39
33
  ## Examples
40
34
 
41
35
  Update the description of a retention event type
@@ -59,12 +59,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
59
59
 
60
60
  :::
61
61
 
62
- :::caution
63
-
64
- This command currently only supports delegated permissions.
65
-
66
- :::
67
-
68
62
  ## Examples
69
63
 
70
64
  Create a retention label that retains documents and deletes them after one year.
@@ -29,12 +29,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
29
29
 
30
30
  :::
31
31
 
32
- :::caution
33
-
34
- This command currently only supports delegated permissions.
35
-
36
- :::
37
-
38
32
  ## Examples
39
33
 
40
34
  Get a retention label
@@ -24,12 +24,6 @@ This command is based on a Microsoft Graph API that is currently in preview and
24
24
 
25
25
  :::
26
26
 
27
- :::caution
28
-
29
- This command currently only supports delegated permissions.
30
-
31
- :::
32
-
33
27
  ## Examples
34
28
 
35
29
  Get a list of retention labels