@pnp/cli-microsoft365 9.1.0-beta.94ae9ed → 9.1.0-beta.a781c51

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 (84) hide show
  1. package/allCommands.json +1 -1
  2. package/allCommandsFull.json +1 -1
  3. package/dist/Auth.js +6 -4
  4. package/dist/AuthServer.js +7 -7
  5. package/dist/Command.js +4 -1
  6. package/dist/api.js +1 -1
  7. package/dist/config.js +1 -0
  8. package/dist/m365/commands/login.js +1 -1
  9. package/dist/m365/external/commands/item/item-add.js +2 -5
  10. package/dist/m365/file/commands/file-move.js +135 -0
  11. package/dist/m365/file/commands.js +2 -1
  12. package/dist/m365/spfx/commands/project/project-doctor/doctor-1.20.0.js +27 -0
  13. package/dist/m365/spfx/commands/project/project-doctor/rules/FN002021_DEVDEP_rushstack_eslint_config.js +10 -0
  14. package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
  15. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.20.0.js +59 -0
  16. package/dist/m365/spfx/commands/project/project-upgrade.js +2 -1
  17. package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
  18. package/dist/m365/spo/commands/page/page-remove.js +37 -16
  19. package/dist/m365/spo/commands/site/site-admin-list.js +8 -9
  20. package/dist/m365/spo/commands/site/site-admin-remove.js +194 -0
  21. package/dist/m365/spo/commands/site/site-sharingpermission-set.js +68 -0
  22. package/dist/m365/spo/commands.js +2 -0
  23. package/dist/m365/teams/MeetingTranscript.js +2 -0
  24. package/dist/m365/teams/commands/meeting/meeting-transcript-get.js +152 -0
  25. package/dist/m365/teams/commands.js +1 -0
  26. package/dist/m365/viva/commands/engage/Community.js +2 -0
  27. package/dist/m365/viva/commands/engage/engage-community-list.js +28 -0
  28. package/dist/m365/viva/commands.js +1 -0
  29. package/dist/request.js +46 -61
  30. package/dist/utils/driveUtil.js +51 -0
  31. package/dist/utils/spo.js +5 -7
  32. package/dist/utils/timersUtil.js +12 -0
  33. package/dist/utils/urlUtil.js +8 -0
  34. package/dist/utils/zod.js +1 -1
  35. package/docs/docs/cmd/entra/m365group/m365group-report-activitystorage.mdx +2 -2
  36. package/docs/docs/cmd/external/item/item-add.mdx +3 -3
  37. package/docs/docs/cmd/file/file-move.mdx +79 -0
  38. package/docs/docs/cmd/spfx/project/project-upgrade.mdx +1 -1
  39. package/docs/docs/cmd/spo/cdn/cdn-get.mdx +1 -1
  40. package/docs/docs/cmd/spo/cdn/cdn-origin-add.mdx +1 -1
  41. package/docs/docs/cmd/spo/cdn/cdn-origin-list.mdx +1 -1
  42. package/docs/docs/cmd/spo/cdn/cdn-origin-remove.mdx +1 -1
  43. package/docs/docs/cmd/spo/cdn/cdn-policy-list.mdx +1 -1
  44. package/docs/docs/cmd/spo/cdn/cdn-policy-set.mdx +1 -1
  45. package/docs/docs/cmd/spo/externaluser/externaluser-list.mdx +1 -1
  46. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-get.mdx +1 -1
  47. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-set.mdx +1 -1
  48. package/docs/docs/cmd/spo/homesite/homesite-remove.mdx +1 -1
  49. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-get.mdx +1 -1
  50. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-remove.mdx +1 -1
  51. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-set.mdx +1 -1
  52. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-add.mdx +1 -1
  53. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-list.mdx +1 -1
  54. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-remove.mdx +1 -1
  55. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-list.mdx +1 -1
  56. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-remove.mdx +1 -1
  57. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-set.mdx +1 -1
  58. package/docs/docs/cmd/spo/page/page-remove.mdx +30 -12
  59. package/docs/docs/cmd/spo/site/site-admin-add.mdx +2 -2
  60. package/docs/docs/cmd/spo/site/site-admin-list.mdx +64 -12
  61. package/docs/docs/cmd/spo/site/site-admin-remove.mdx +67 -0
  62. package/docs/docs/cmd/spo/site/site-appcatalog-add.mdx +1 -1
  63. package/docs/docs/cmd/spo/site/site-appcatalog-remove.mdx +1 -1
  64. package/docs/docs/cmd/spo/site/site-commsite-enable.mdx +1 -1
  65. package/docs/docs/cmd/spo/site/site-list.mdx +6 -4
  66. package/docs/docs/cmd/spo/site/site-set.mdx +1 -1
  67. package/docs/docs/cmd/spo/site/site-sharingpermission-set.mdx +58 -0
  68. package/docs/docs/cmd/spo/storageentity/storageentity-remove.mdx +1 -1
  69. package/docs/docs/cmd/spo/storageentity/storageentity-set.mdx +1 -1
  70. package/docs/docs/cmd/spo/tenant/tenant-appcatalog-add.mdx +1 -1
  71. package/docs/docs/cmd/spo/tenant/tenant-appcatalogurl-get.mdx +1 -1
  72. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-list.mdx +1 -1
  73. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.mdx +1 -1
  74. package/docs/docs/cmd/spo/tenant/tenant-settings-list.mdx +1 -1
  75. package/docs/docs/cmd/spo/theme/theme-apply.mdx +1 -1
  76. package/docs/docs/cmd/spo/theme/theme-get.mdx +1 -1
  77. package/docs/docs/cmd/spo/theme/theme-list.mdx +1 -1
  78. package/docs/docs/cmd/spo/theme/theme-remove.mdx +1 -1
  79. package/docs/docs/cmd/spo/theme/theme-set.mdx +1 -1
  80. package/docs/docs/cmd/spp/contentcenter/contentcenter-list.mdx +3 -5
  81. package/docs/docs/cmd/teams/meeting/meeting-transcript-get.mdx +132 -0
  82. package/docs/docs/cmd/viva/engage/engage-community-list.mdx +81 -0
  83. package/npm-shrinkwrap.json +203 -375
  84. package/package.json +16 -17
package/dist/Auth.js CHANGED
@@ -117,7 +117,7 @@ export class Auth {
117
117
  async restoreAuth() {
118
118
  // check if auth has been restored previously
119
119
  if (this._connection.active) {
120
- return Promise.resolve();
120
+ return;
121
121
  }
122
122
  try {
123
123
  const connection = await this.getConnectionInfoFromStorage();
@@ -353,7 +353,9 @@ export class Auth {
353
353
  await logger.logToStderr(response);
354
354
  await logger.logToStderr('');
355
355
  }
356
- await logger.logToStderr(`🌶️ ${response.message}`);
356
+ if (response.message) {
357
+ await logger.logToStderr(`🌶️ ${response.message}`);
358
+ }
357
359
  if (cli.getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false)) {
358
360
  await browserUtil.open(response.verificationUri);
359
361
  }
@@ -471,7 +473,7 @@ export class Auth {
471
473
  }
472
474
  if (userName && process.env.ACC_CLOUD) {
473
475
  // reject for now since the Azure Cloud Shell does not support user-managed identity
474
- return Promise.reject('Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity');
476
+ throw 'Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity';
475
477
  }
476
478
  requestOptions.url = `${process.env.IDENTITY_ENDPOINT}?resource=${encodeURIComponent(resource)}`;
477
479
  }
@@ -481,7 +483,7 @@ export class Auth {
481
483
  }
482
484
  if (userName && process.env.ACC_CLOUD) {
483
485
  // reject for now since the Azure Cloud Shell does not support user-managed identity
484
- return Promise.reject('Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity');
486
+ throw 'Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity';
485
487
  }
486
488
  requestOptions.url = `${process.env.MSI_ENDPOINT}?resource=${encodeURIComponent(resource)}`;
487
489
  }
@@ -26,7 +26,7 @@ export class AuthServer {
26
26
  await this.logger.logToStderr(url);
27
27
  await this.logger.logToStderr('');
28
28
  }
29
- this.openUrl(url);
29
+ await this.openUrl(url);
30
30
  };
31
31
  this.httpRequest = async (request, response) => {
32
32
  if (this.debug) {
@@ -80,19 +80,19 @@ export class AuthServer {
80
80
  get server() {
81
81
  return this.httpServer;
82
82
  }
83
- openUrl(url) {
84
- browserUtil.open(url)
85
- .then(async (_) => {
83
+ async openUrl(url) {
84
+ try {
85
+ await browserUtil.open(url);
86
86
  await this.logger.logToStderr("To sign in, use the web browser that just has been opened. Please sign-in there.");
87
- })
88
- .catch(_ => {
87
+ }
88
+ catch {
89
89
  const errorResponse = {
90
90
  error: "Can't open the default browser",
91
91
  errorDescription: "Was not able to open a browser instance. Try again later or use a different authentication method."
92
92
  };
93
93
  this.reject(errorResponse);
94
94
  this.httpServer.close();
95
- });
95
+ }
96
96
  }
97
97
  }
98
98
  export default new AuthServer();
package/dist/Command.js CHANGED
@@ -522,7 +522,10 @@ class Command {
522
522
  quote: cli.getConfig().get(settingsNames.csvQuote),
523
523
  quoted: cli.getSettingWithDefaultValue(settingsNames.csvQuoted, false),
524
524
  // eslint-disable-next-line camelcase
525
- quoted_empty: cli.getSettingWithDefaultValue(settingsNames.csvQuotedEmpty, false)
525
+ quoted_empty: cli.getSettingWithDefaultValue(settingsNames.csvQuotedEmpty, false),
526
+ cast: {
527
+ boolean: (value) => value ? '1' : '0'
528
+ }
526
529
  });
527
530
  }
528
531
  getMdOutput(logStatement, command, options) {
package/dist/api.js CHANGED
@@ -3,7 +3,7 @@ export async function executeCommand(commandName, options, listener) {
3
3
  cli.loadAllCommandsInfo();
4
4
  await cli.loadCommandFromArgs(commandName.split(' '));
5
5
  if (!cli.commandToExecute) {
6
- return Promise.reject(`Command not found: ${commandName}`);
6
+ throw `Command not found: ${commandName}`;
7
7
  }
8
8
  return cli.executeCommandWithOutput(cli.commandToExecute.command, { options: options ?? {} }, listener);
9
9
  }
package/dist/config.js CHANGED
@@ -14,6 +14,7 @@ export default {
14
14
  'https://graph.microsoft.com/ChannelMessage.Send',
15
15
  'https://graph.microsoft.com/ChannelSettings.ReadWrite.All',
16
16
  'https://graph.microsoft.com/Chat.ReadWrite',
17
+ 'https://graph.microsoft.com/Community.ReadWrite.All',
17
18
  'https://graph.microsoft.com/Directory.AccessAsUser.All',
18
19
  'https://graph.microsoft.com/Directory.ReadWrite.All',
19
20
  'https://graph.microsoft.com/ExternalConnection.ReadWrite.All',
@@ -101,7 +101,7 @@ class LoginCommand extends Command {
101
101
  auth.connection.authType = AuthType.Certificate;
102
102
  auth.connection.certificate = getCertificate(args.options);
103
103
  auth.connection.thumbprint = args.options.thumbprint;
104
- auth.connection.password = args.options.password || cli.getConfig().get(settingsNames.clientCertificatePassword);
104
+ auth.connection.password = args.options.password ?? cli.getConfig().get(settingsNames.clientCertificatePassword);
105
105
  break;
106
106
  case 'identity':
107
107
  auth.connection.authType = AuthType.Identity;
@@ -45,8 +45,7 @@ class ExternalItemAddCommand extends GraphCommand {
45
45
  properties: {}
46
46
  };
47
47
  // we need to rewrite the @odata properties to the correct format
48
- // because . in @odata.type is interpreted by minimist as a child property
49
- // we also need to extract multiple values for collections into arrays
48
+ // to extract multiple values for collections into arrays
50
49
  this.rewriteCollectionProperties(args.options);
51
50
  this.addUnknownOptionsToPayload(requestBody.properties, args.options);
52
51
  const requestOptions = {
@@ -81,11 +80,9 @@ class ExternalItemAddCommand extends GraphCommand {
81
80
  }
82
81
  rewriteCollectionProperties(options) {
83
82
  Object.getOwnPropertyNames(options).forEach(name => {
84
- if (!name.endsWith('@odata')) {
83
+ if (!name.includes('@odata')) {
85
84
  return;
86
85
  }
87
- options[`${name}.type`] = options[name].type;
88
- delete options[name];
89
86
  // convert the value of a collection to an array
90
87
  const nameWithoutOData = name.substring(0, name.indexOf('@odata'));
91
88
  if (options[nameWithoutOData]) {
@@ -0,0 +1,135 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ 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");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _FileMoveCommand_instances, _FileMoveCommand_initTelemetry, _FileMoveCommand_initOptions, _FileMoveCommand_initValidators;
7
+ import GraphCommand from '../../base/GraphCommand.js';
8
+ import { setTimeout } from 'timers/promises';
9
+ import commands from '../commands.js';
10
+ import request from '../../../request.js';
11
+ import { spo } from '../../../utils/spo.js';
12
+ import { urlUtil } from '../../../utils/urlUtil.js';
13
+ import { driveUtil } from '../../../utils/driveUtil.js';
14
+ import { validation } from '../../../utils/validation.js';
15
+ class FileMoveCommand extends GraphCommand {
16
+ get name() {
17
+ return commands.MOVE;
18
+ }
19
+ get description() {
20
+ return 'Moves a file to another location using the Microsoft Graph';
21
+ }
22
+ constructor() {
23
+ super();
24
+ _FileMoveCommand_instances.add(this);
25
+ this.pollingInterval = 10000;
26
+ this.nameConflictBehaviorOptions = ['fail', 'replace', 'rename'];
27
+ __classPrivateFieldGet(this, _FileMoveCommand_instances, "m", _FileMoveCommand_initTelemetry).call(this);
28
+ __classPrivateFieldGet(this, _FileMoveCommand_instances, "m", _FileMoveCommand_initOptions).call(this);
29
+ __classPrivateFieldGet(this, _FileMoveCommand_instances, "m", _FileMoveCommand_initValidators).call(this);
30
+ }
31
+ async commandAction(logger, args) {
32
+ try {
33
+ const { webUrl, sourceUrl, targetUrl, nameConflictBehavior, newName, verbose } = args.options;
34
+ const sourcePath = this.getAbsoluteUrl(webUrl, sourceUrl);
35
+ const destinationPath = this.getAbsoluteUrl(webUrl, targetUrl);
36
+ const { driveId, itemId } = await this.getDriveIdAndItemId(webUrl, sourcePath, sourceUrl, logger, verbose);
37
+ const targetSiteUrl = urlUtil.getTargetSiteAbsoluteUrl(webUrl, targetUrl);
38
+ const targetFolderUrl = this.getAbsoluteUrl(targetSiteUrl, targetUrl);
39
+ const { driveId: targetDriveId, itemId: targetItemId } = await this.getDriveIdAndItemId(targetSiteUrl, targetFolderUrl, targetUrl, logger, verbose);
40
+ const requestOptions = this.getRequestOptions(driveId, itemId, targetDriveId, targetItemId, newName, sourcePath, nameConflictBehavior);
41
+ if (verbose) {
42
+ await logger.logToStderr(`Moving file '${sourcePath}' to '${destinationPath}'...`);
43
+ }
44
+ if (driveId === targetDriveId) {
45
+ await request.patch(requestOptions);
46
+ }
47
+ else {
48
+ const response = await request.post(requestOptions);
49
+ await this.waitUntilCopyOperationCompleted(response.headers.location, logger);
50
+ const itemUrl = `${this.resource}/v1.0/drives/${driveId}/items/${itemId}`;
51
+ await request.delete({ url: itemUrl, headers: requestOptions.headers });
52
+ }
53
+ }
54
+ catch (err) {
55
+ this.handleRejectedODataJsonPromise(err);
56
+ }
57
+ }
58
+ getAbsoluteUrl(webUrl, url) {
59
+ return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
60
+ }
61
+ async getDriveIdAndItemId(webUrl, folderUrl, sourceUrl, logger, verbose) {
62
+ const siteId = await spo.getSiteId(webUrl, logger, verbose);
63
+ const drive = await driveUtil.getDriveByUrl(siteId, new URL(folderUrl));
64
+ const itemId = await driveUtil.getDriveItemId(drive, new URL(folderUrl));
65
+ return { driveId: drive.id, itemId };
66
+ }
67
+ getRequestOptions(sourceDriveId, sourceItemId, targetDriveId, targetItemId, newName, sourcePath, nameConflictBehavior) {
68
+ const apiUrl = sourceDriveId === targetDriveId
69
+ ? `${this.resource}/v1.0/drives/${sourceDriveId}/items/${sourceItemId}`
70
+ : `${this.resource}/v1.0/drives/${sourceDriveId}/items/${sourceItemId}/copy`;
71
+ const queryParameters = nameConflictBehavior && nameConflictBehavior !== 'fail'
72
+ ? `@microsoft.graph.conflictBehavior=${nameConflictBehavior}`
73
+ : '';
74
+ const urlWithQuery = `${apiUrl}${queryParameters ? `?${queryParameters}` : ''}`;
75
+ const requestOptions = {
76
+ url: urlWithQuery,
77
+ headers: { accept: 'application/json;odata.metadata=none' },
78
+ responseType: 'json',
79
+ fullResponse: true,
80
+ data: { parentReference: { driveId: targetDriveId, id: targetItemId } }
81
+ };
82
+ if (newName) {
83
+ const sourceFileName = sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
84
+ const sourceFileExtension = sourceFileName.includes('.') ? sourceFileName.substring(sourceFileName.lastIndexOf('.')) : '';
85
+ const newNameExtension = newName.includes('.') ? newName.substring(newName.lastIndexOf('.')) : '';
86
+ requestOptions.data.name = newNameExtension ? `${newName.replace(newNameExtension, "")}${sourceFileExtension}` : `${newName}${sourceFileExtension}`;
87
+ }
88
+ return requestOptions;
89
+ }
90
+ async waitUntilCopyOperationCompleted(monitorUrl, logger) {
91
+ const requestOptions = {
92
+ url: monitorUrl,
93
+ responseType: 'json'
94
+ };
95
+ const response = await request.get(requestOptions);
96
+ if (response.status === 'completed') {
97
+ if (this.verbose) {
98
+ await logger.logToStderr('Copy operation completed succesfully. Returning...');
99
+ }
100
+ return;
101
+ }
102
+ else if (response.status === 'failed') {
103
+ throw response.error.message;
104
+ }
105
+ else {
106
+ if (this.verbose) {
107
+ await logger.logToStderr(`Still copying. Retrying in ${this.pollingInterval / 1000} seconds...`);
108
+ }
109
+ await setTimeout(this.pollingInterval);
110
+ await this.waitUntilCopyOperationCompleted(monitorUrl, logger);
111
+ }
112
+ }
113
+ }
114
+ _FileMoveCommand_instances = new WeakSet(), _FileMoveCommand_initTelemetry = function _FileMoveCommand_initTelemetry() {
115
+ this.telemetry.push((args) => {
116
+ Object.assign(this.telemetryProperties, {
117
+ webUrl: typeof args.options.webUrl !== 'undefined',
118
+ sourceUrl: typeof args.options.sourceUrl !== 'undefined',
119
+ targetUrl: typeof args.options.targetUrl !== 'undefined',
120
+ newName: typeof args.options.newName !== 'undefined',
121
+ nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined'
122
+ });
123
+ });
124
+ }, _FileMoveCommand_initOptions = function _FileMoveCommand_initOptions() {
125
+ this.options.unshift({ option: '-u, --webUrl <webUrl>' }, { option: '-s, --sourceUrl <sourceUrl>' }, { option: '-t, --targetUrl <targetUrl>' }, { option: '--newName [newName]' }, { option: '--nameConflictBehavior [nameConflictBehavior]', autocomplete: this.nameConflictBehaviorOptions });
126
+ }, _FileMoveCommand_initValidators = function _FileMoveCommand_initValidators() {
127
+ this.validators.push(async (args) => {
128
+ if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
129
+ return `${args.options.nameConflictBehavior} is not a valid nameConflictBehavior value. Allowed values: ${this.nameConflictBehaviorOptions.join(', ')}.`;
130
+ }
131
+ return validation.isValidSharePointUrl(args.options.webUrl);
132
+ });
133
+ };
134
+ export default new FileMoveCommand();
135
+ //# sourceMappingURL=file-move.js.map
@@ -3,6 +3,7 @@ export default {
3
3
  ADD: `${prefix} add`,
4
4
  CONVERT_PDF: `${prefix} convert pdf`,
5
5
  COPY: `${prefix} copy`,
6
- LIST: `${prefix} list`
6
+ LIST: `${prefix} list`,
7
+ MOVE: `${prefix} move`
7
8
  };
8
9
  //# sourceMappingURL=commands.js.map
@@ -0,0 +1,27 @@
1
+ import { FN002021_DEVDEP_rushstack_eslint_config } from '../project-upgrade/rules/FN002021_DEVDEP_rushstack_eslint_config.js';
2
+ import { FN001008_DEP_react } from './rules/FN001008_DEP_react.js';
3
+ import { FN001009_DEP_react_dom } from './rules/FN001009_DEP_react_dom.js';
4
+ import { FN001035_DEP_fluentui_react } from './rules/FN001035_DEP_fluentui_react.js';
5
+ import { FN002004_DEVDEP_gulp } from './rules/FN002004_DEVDEP_gulp.js';
6
+ import { FN002007_DEVDEP_ajv } from './rules/FN002007_DEVDEP_ajv.js';
7
+ import { FN002013_DEVDEP_types_webpack_env } from './rules/FN002013_DEVDEP_types_webpack_env.js';
8
+ import { FN002015_DEVDEP_types_react } from './rules/FN002015_DEVDEP_types_react.js';
9
+ import { FN002016_DEVDEP_types_react_dom } from './rules/FN002016_DEVDEP_types_react_dom.js';
10
+ import { FN002019_DEVDEP_microsoft_rush_stack_compiler } from './rules/FN002019_DEVDEP_microsoft_rush_stack_compiler.js';
11
+ import { FN021001_PKG_spfx_deps_versions_match_project_version } from './rules/FN021001_PKG_spfx_deps_versions_match_project_version.js';
12
+ import { FN021013_PKG_spfx_devdeps_match_version } from './rules/FN021013_PKG_spfx_devdeps_match_version.js';
13
+ export default [
14
+ new FN001008_DEP_react('17'),
15
+ new FN001009_DEP_react_dom('17'),
16
+ new FN001035_DEP_fluentui_react('^8.106.4'),
17
+ new FN002004_DEVDEP_gulp('4.0.2'),
18
+ new FN002007_DEVDEP_ajv('^6.12.5'),
19
+ new FN002013_DEVDEP_types_webpack_env('~1.15.2'),
20
+ new FN002015_DEVDEP_types_react('17'),
21
+ new FN002016_DEVDEP_types_react_dom('17'),
22
+ new FN002019_DEVDEP_microsoft_rush_stack_compiler(['4.7']),
23
+ new FN002021_DEVDEP_rushstack_eslint_config('4.0.1'),
24
+ new FN021001_PKG_spfx_deps_versions_match_project_version(false),
25
+ new FN021013_PKG_spfx_devdeps_match_version('1.20.2')
26
+ ];
27
+ //# sourceMappingURL=doctor-1.20.0.js.map
@@ -0,0 +1,10 @@
1
+ import { DependencyRule } from './DependencyRule.js';
2
+ export class FN002021_DEVDEP_rushstack_eslint_config extends DependencyRule {
3
+ constructor(supportedRange) {
4
+ super('@rushstack/eslint-config', supportedRange, true);
5
+ }
6
+ get id() {
7
+ return 'FN002021';
8
+ }
9
+ }
10
+ //# sourceMappingURL=FN002021_DEVDEP_rushstack_eslint_config.js.map
@@ -70,7 +70,8 @@ class SpfxProjectDoctorCommand extends BaseProjectCommand {
70
70
  '1.18.0',
71
71
  '1.18.1',
72
72
  '1.18.2',
73
- '1.19.0'
73
+ '1.19.0',
74
+ '1.20.0'
74
75
  ];
75
76
  __classPrivateFieldGet(this, _SpfxProjectDoctorCommand_instances, "m", _SpfxProjectDoctorCommand_initTelemetry).call(this);
76
77
  __classPrivateFieldGet(this, _SpfxProjectDoctorCommand_instances, "m", _SpfxProjectDoctorCommand_initOptions).call(this);
@@ -0,0 +1,59 @@
1
+ import { FN001001_DEP_microsoft_sp_core_library } from './rules/FN001001_DEP_microsoft_sp_core_library.js';
2
+ import { FN001002_DEP_microsoft_sp_lodash_subset } from './rules/FN001002_DEP_microsoft_sp_lodash_subset.js';
3
+ import { FN001003_DEP_microsoft_sp_office_ui_fabric_core } from './rules/FN001003_DEP_microsoft_sp_office_ui_fabric_core.js';
4
+ import { FN001004_DEP_microsoft_sp_webpart_base } from './rules/FN001004_DEP_microsoft_sp_webpart_base.js';
5
+ import { FN001011_DEP_microsoft_sp_dialog } from './rules/FN001011_DEP_microsoft_sp_dialog.js';
6
+ import { FN001012_DEP_microsoft_sp_application_base } from './rules/FN001012_DEP_microsoft_sp_application_base.js';
7
+ import { FN001013_DEP_microsoft_decorators } from './rules/FN001013_DEP_microsoft_decorators.js';
8
+ import { FN001014_DEP_microsoft_sp_listview_extensibility } from './rules/FN001014_DEP_microsoft_sp_listview_extensibility.js';
9
+ import { FN001021_DEP_microsoft_sp_property_pane } from './rules/FN001021_DEP_microsoft_sp_property_pane.js';
10
+ import { FN001023_DEP_microsoft_sp_component_base } from './rules/FN001023_DEP_microsoft_sp_component_base.js';
11
+ import { FN001024_DEP_microsoft_sp_diagnostics } from './rules/FN001024_DEP_microsoft_sp_diagnostics.js';
12
+ import { FN001025_DEP_microsoft_sp_dynamic_data } from './rules/FN001025_DEP_microsoft_sp_dynamic_data.js';
13
+ import { FN001026_DEP_microsoft_sp_extension_base } from './rules/FN001026_DEP_microsoft_sp_extension_base.js';
14
+ import { FN001027_DEP_microsoft_sp_http } from './rules/FN001027_DEP_microsoft_sp_http.js';
15
+ import { FN001028_DEP_microsoft_sp_list_subscription } from './rules/FN001028_DEP_microsoft_sp_list_subscription.js';
16
+ import { FN001029_DEP_microsoft_sp_loader } from './rules/FN001029_DEP_microsoft_sp_loader.js';
17
+ import { FN001030_DEP_microsoft_sp_module_interfaces } from './rules/FN001030_DEP_microsoft_sp_module_interfaces.js';
18
+ import { FN001031_DEP_microsoft_sp_odata_types } from './rules/FN001031_DEP_microsoft_sp_odata_types.js';
19
+ import { FN001032_DEP_microsoft_sp_page_context } from './rules/FN001032_DEP_microsoft_sp_page_context.js';
20
+ import { FN001034_DEP_microsoft_sp_adaptive_card_extension_base } from './rules/FN001034_DEP_microsoft_sp_adaptive_card_extension_base.js';
21
+ import { FN002001_DEVDEP_microsoft_sp_build_web } from './rules/FN002001_DEVDEP_microsoft_sp_build_web.js';
22
+ import { FN002002_DEVDEP_microsoft_sp_module_interfaces } from './rules/FN002002_DEVDEP_microsoft_sp_module_interfaces.js';
23
+ import { FN002021_DEVDEP_rushstack_eslint_config } from './rules/FN002021_DEVDEP_rushstack_eslint_config.js';
24
+ import { FN002022_DEVDEP_microsoft_eslint_plugin_spfx } from './rules/FN002022_DEVDEP_microsoft_eslint_plugin_spfx.js';
25
+ import { FN002023_DEVDEP_microsoft_eslint_config_spfx } from './rules/FN002023_DEVDEP_microsoft_eslint_config_spfx.js';
26
+ import { FN002024_DEVDEP_eslint } from './rules/FN002024_DEVDEP_eslint.js';
27
+ import { FN010001_YORC_version } from './rules/FN010001_YORC_version.js';
28
+ import { FN010010_YORC_sdkVersions_teams_js } from './rules/FN010010_YORC_sdkVersions_teams_js.js';
29
+ export default [
30
+ new FN001001_DEP_microsoft_sp_core_library('1.20.0'),
31
+ new FN001002_DEP_microsoft_sp_lodash_subset('1.20.0'),
32
+ new FN001003_DEP_microsoft_sp_office_ui_fabric_core('1.20.0'),
33
+ new FN001004_DEP_microsoft_sp_webpart_base('1.20.0'),
34
+ new FN001011_DEP_microsoft_sp_dialog('1.20.0'),
35
+ new FN001012_DEP_microsoft_sp_application_base('1.20.0'),
36
+ new FN001014_DEP_microsoft_sp_listview_extensibility('1.20.0'),
37
+ new FN001021_DEP_microsoft_sp_property_pane('1.20.0'),
38
+ new FN001023_DEP_microsoft_sp_component_base('1.20.0'),
39
+ new FN001024_DEP_microsoft_sp_diagnostics('1.20.0'),
40
+ new FN001025_DEP_microsoft_sp_dynamic_data('1.20.0'),
41
+ new FN001026_DEP_microsoft_sp_extension_base('1.20.0'),
42
+ new FN001027_DEP_microsoft_sp_http('1.20.0'),
43
+ new FN001028_DEP_microsoft_sp_list_subscription('1.20.0'),
44
+ new FN001029_DEP_microsoft_sp_loader('1.20.0'),
45
+ new FN001030_DEP_microsoft_sp_module_interfaces('1.20.0'),
46
+ new FN001031_DEP_microsoft_sp_odata_types('1.20.0'),
47
+ new FN001032_DEP_microsoft_sp_page_context('1.20.0'),
48
+ new FN001013_DEP_microsoft_decorators('1.20.0'),
49
+ new FN001034_DEP_microsoft_sp_adaptive_card_extension_base('1.20.0'),
50
+ new FN002001_DEVDEP_microsoft_sp_build_web('1.20.2'),
51
+ new FN002002_DEVDEP_microsoft_sp_module_interfaces('1.20.2'),
52
+ new FN002021_DEVDEP_rushstack_eslint_config('4.0.1'),
53
+ new FN002024_DEVDEP_eslint('8.57.0'),
54
+ new FN002022_DEVDEP_microsoft_eslint_plugin_spfx('1.20.2'),
55
+ new FN002023_DEVDEP_microsoft_eslint_config_spfx('1.20.2'),
56
+ new FN010001_YORC_version('1.20.0'),
57
+ new FN010010_YORC_sdkVersions_teams_js('2.24.0')
58
+ ];
59
+ //# sourceMappingURL=upgrade-1.20.0.js.map
@@ -72,7 +72,8 @@ class SpfxProjectUpgradeCommand extends BaseProjectCommand {
72
72
  '1.18.0',
73
73
  '1.18.1',
74
74
  '1.18.2',
75
- '1.19.0'
75
+ '1.19.0',
76
+ '1.20.0'
76
77
  ];
77
78
  __classPrivateFieldGet(this, _SpfxProjectUpgradeCommand_instances, "m", _SpfxProjectUpgradeCommand_initTelemetry).call(this);
78
79
  __classPrivateFieldGet(this, _SpfxProjectUpgradeCommand_instances, "m", _SpfxProjectUpgradeCommand_initOptions).call(this);
@@ -575,6 +575,21 @@ class SpfxDoctorCommand extends BaseProjectCommand {
575
575
  range: '^4 || ^5',
576
576
  fix: 'npm i -g yo@5'
577
577
  }
578
+ },
579
+ '1.20.0': {
580
+ gulpCli: {
581
+ range: '^1 || ^2 || ^3',
582
+ fix: 'npm i -g gulp-cli@3'
583
+ },
584
+ node: {
585
+ range: '>=18.17.1 <19.0.0',
586
+ fix: 'Install Node.js >=18.17.1 <19.0.0'
587
+ },
588
+ sp: SharePointVersion.SPO,
589
+ yo: {
590
+ range: '^4 || ^5',
591
+ fix: 'npm i -g yo@5'
592
+ }
578
593
  }
579
594
  };
580
595
  this.output = '';
@@ -3,10 +3,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  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");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _SpoPageRemoveCommand_instances, _SpoPageRemoveCommand_initOptions, _SpoPageRemoveCommand_initValidators;
6
+ var _SpoPageRemoveCommand_instances, _SpoPageRemoveCommand_initTelemetry, _SpoPageRemoveCommand_initOptions, _SpoPageRemoveCommand_initValidators, _SpoPageRemoveCommand_initTypes;
7
7
  import { cli } from '../../../../cli/cli.js';
8
8
  import request from '../../../../request.js';
9
- import { spo } from '../../../../utils/spo.js';
9
+ import { formatting } from '../../../../utils/formatting.js';
10
10
  import { urlUtil } from '../../../../utils/urlUtil.js';
11
11
  import { validation } from '../../../../utils/validation.js';
12
12
  import SpoCommand from '../../../base/SpoCommand.js';
@@ -21,15 +21,17 @@ class SpoPageRemoveCommand extends SpoCommand {
21
21
  constructor() {
22
22
  super();
23
23
  _SpoPageRemoveCommand_instances.add(this);
24
+ __classPrivateFieldGet(this, _SpoPageRemoveCommand_instances, "m", _SpoPageRemoveCommand_initTelemetry).call(this);
24
25
  __classPrivateFieldGet(this, _SpoPageRemoveCommand_instances, "m", _SpoPageRemoveCommand_initOptions).call(this);
25
26
  __classPrivateFieldGet(this, _SpoPageRemoveCommand_instances, "m", _SpoPageRemoveCommand_initValidators).call(this);
27
+ __classPrivateFieldGet(this, _SpoPageRemoveCommand_instances, "m", _SpoPageRemoveCommand_initTypes).call(this);
26
28
  }
27
29
  async commandAction(logger, args) {
28
30
  if (args.options.force) {
29
31
  await this.removePage(logger, args);
30
32
  }
31
33
  else {
32
- const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove the page '${args.options.name}'?` });
34
+ const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove page '${args.options.name}'?` });
33
35
  if (result) {
34
36
  await this.removePage(logger, args);
35
37
  }
@@ -37,44 +39,63 @@ class SpoPageRemoveCommand extends SpoCommand {
37
39
  }
38
40
  async removePage(logger, args) {
39
41
  try {
40
- let requestDigest = '';
41
- let pageName = args.options.name;
42
- const reqDigest = await spo.getRequestDigest(args.options.webUrl);
43
- requestDigest = reqDigest.FormDigestValue;
44
- if (!pageName.endsWith('.aspx')) {
42
+ // Remove leading slashes from the page name (page can be nested in folders)
43
+ let pageName = urlUtil.removeLeadingSlashes(args.options.name);
44
+ if (!pageName.toLowerCase().endsWith('.aspx')) {
45
45
  pageName += '.aspx';
46
46
  }
47
47
  if (this.verbose) {
48
48
  await logger.logToStderr(`Removing page ${pageName}...`);
49
49
  }
50
+ const filePath = `${urlUtil.getServerRelativeSiteUrl(args.options.webUrl)}/SitePages/${pageName}`;
50
51
  const requestOptions = {
51
- url: `${args.options
52
- .webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${urlUtil.getServerRelativeSiteUrl(args.options.webUrl)}/sitepages/${pageName}')`,
52
+ url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(filePath)}')`,
53
53
  headers: {
54
- 'X-RequestDigest': requestDigest,
55
- 'X-HTTP-Method': 'DELETE',
56
- 'content-type': 'application/json;odata=nometadata',
57
54
  accept: 'application/json;odata=nometadata'
58
55
  },
59
56
  responseType: 'json'
60
57
  };
61
- await request.post(requestOptions);
58
+ if (args.options.bypassSharedLock) {
59
+ requestOptions.headers.Prefer = 'bypass-shared-lock';
60
+ }
61
+ if (args.options.recycle) {
62
+ requestOptions.url += '/Recycle';
63
+ await request.post(requestOptions);
64
+ }
65
+ else {
66
+ await request.delete(requestOptions);
67
+ }
62
68
  }
63
69
  catch (err) {
64
70
  this.handleRejectedODataJsonPromise(err);
65
71
  }
66
72
  }
67
73
  }
68
- _SpoPageRemoveCommand_instances = new WeakSet(), _SpoPageRemoveCommand_initOptions = function _SpoPageRemoveCommand_initOptions() {
74
+ _SpoPageRemoveCommand_instances = new WeakSet(), _SpoPageRemoveCommand_initTelemetry = function _SpoPageRemoveCommand_initTelemetry() {
75
+ this.telemetry.push((args) => {
76
+ Object.assign(this.telemetryProperties, {
77
+ force: !!args.options.force,
78
+ recycle: !!args.options.recycle,
79
+ bypassSharedLock: !!args.options.bypassSharedLock
80
+ });
81
+ });
82
+ }, _SpoPageRemoveCommand_initOptions = function _SpoPageRemoveCommand_initOptions() {
69
83
  this.options.unshift({
84
+ option: '-u, --webUrl <webUrl>'
85
+ }, {
70
86
  option: '-n, --name <name>'
71
87
  }, {
72
- option: '-u, --webUrl <webUrl>'
88
+ option: '--recycle'
89
+ }, {
90
+ option: '--bypassSharedLock'
73
91
  }, {
74
92
  option: '-f, --force'
75
93
  });
76
94
  }, _SpoPageRemoveCommand_initValidators = function _SpoPageRemoveCommand_initValidators() {
77
95
  this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.webUrl));
96
+ }, _SpoPageRemoveCommand_initTypes = function _SpoPageRemoveCommand_initTypes() {
97
+ this.types.string.push('name', 'webUrl');
98
+ this.types.boolean.push('force', 'bypassSharedLock', 'recycle');
78
99
  };
79
100
  export default new SpoPageRemoveCommand();
80
101
  //# sourceMappingURL=page-remove.js.map
@@ -17,6 +17,9 @@ class SpoSiteAdminListCommand extends SpoCommand {
17
17
  get description() {
18
18
  return 'Lists all administrators of a specific SharePoint site';
19
19
  }
20
+ defaultProperties() {
21
+ return ['Id', 'LoginName', 'Title', 'PrincipalTypeString'];
22
+ }
20
23
  constructor() {
21
24
  super();
22
25
  _SpoSiteAdminListCommand_instances.add(this);
@@ -46,20 +49,16 @@ class SpoSiteAdminListCommand extends SpoCommand {
46
49
  const requestOptions = {
47
50
  url: `${adminUrl}/_api/SPO.Tenant/GetSiteAdministrators?siteId='${siteId}'`,
48
51
  headers: {
49
- accept: 'application/json;odata=nometadata',
50
- 'content-type': 'application/json;charset=utf-8'
51
- }
52
+ accept: 'application/json;odata=nometadata'
53
+ },
54
+ responseType: 'json'
52
55
  };
53
56
  const response = await request.post(requestOptions);
54
- const responseContent = JSON.parse(response);
55
57
  const primaryAdminLoginName = await spo.getPrimaryAdminLoginNameAsAdmin(adminUrl, siteId, logger, this.verbose);
56
- const mappedResult = responseContent.value.map((u) => ({
57
- Id: null,
58
+ const mappedResult = response.value.map((u) => ({
58
59
  Email: u.email,
59
60
  LoginName: u.loginName,
60
61
  Title: u.name,
61
- PrincipalType: null,
62
- PrincipalTypeString: null,
63
62
  IsPrimaryAdmin: u.loginName === primaryAdminLoginName
64
63
  }));
65
64
  await logger.log(mappedResult);
@@ -78,7 +77,6 @@ class SpoSiteAdminListCommand extends SpoCommand {
78
77
  }
79
78
  const requestOptions = {
80
79
  url: `${args.options.siteUrl}/_api/web/siteusers?$filter=IsSiteAdmin eq true`,
81
- method: 'GET',
82
80
  headers: {
83
81
  'accept': 'application/json;odata=nometadata'
84
82
  },
@@ -114,6 +112,7 @@ _SpoSiteAdminListCommand_instances = new WeakSet(), _SpoSiteAdminListCommand_ini
114
112
  this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.siteUrl));
115
113
  }, _SpoSiteAdminListCommand_initTypes = function _SpoSiteAdminListCommand_initTypes() {
116
114
  this.types.string.push('siteUrl');
115
+ this.types.boolean.push('asAdmin');
117
116
  };
118
117
  export default new SpoSiteAdminListCommand();
119
118
  //# sourceMappingURL=site-admin-list.js.map