@pnp/cli-microsoft365 9.1.0-beta.9a7d76f → 9.1.0-beta.acd25f7
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.
- package/allCommands.json +1 -1
- package/allCommandsFull.json +1 -1
- package/dist/Auth.js +3 -1
- package/dist/m365/file/commands/file-move.js +135 -0
- package/dist/m365/file/commands.js +2 -1
- package/dist/m365/spfx/commands/project/project-doctor/doctor-1.20.0-rc.1.js +25 -0
- package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
- package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.20.0-rc.1.js +57 -0
- package/dist/m365/spfx/commands/project/project-upgrade.js +16 -13
- package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
- package/dist/m365/spo/commands/site/site-admin-remove.js +193 -0
- package/dist/m365/spo/commands.js +1 -0
- package/dist/m365/teams/MeetingTranscript.js +2 -0
- package/dist/m365/teams/commands/meeting/meeting-transcript-get.js +152 -0
- package/dist/m365/teams/commands.js +1 -0
- package/dist/utils/driveUtil.js +51 -0
- package/docs/docs/cmd/entra/m365group/m365group-report-activitystorage.mdx +2 -2
- package/docs/docs/cmd/file/file-move.mdx +79 -0
- package/docs/docs/cmd/spo/cdn/cdn-get.mdx +1 -1
- package/docs/docs/cmd/spo/cdn/cdn-origin-add.mdx +1 -1
- package/docs/docs/cmd/spo/cdn/cdn-origin-list.mdx +1 -1
- package/docs/docs/cmd/spo/cdn/cdn-origin-remove.mdx +1 -1
- package/docs/docs/cmd/spo/cdn/cdn-policy-list.mdx +1 -1
- package/docs/docs/cmd/spo/cdn/cdn-policy-set.mdx +1 -1
- package/docs/docs/cmd/spo/externaluser/externaluser-list.mdx +1 -1
- package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-get.mdx +1 -1
- package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-set.mdx +1 -1
- package/docs/docs/cmd/spo/homesite/homesite-remove.mdx +1 -1
- package/docs/docs/cmd/spo/knowledgehub/knowledgehub-get.mdx +1 -1
- package/docs/docs/cmd/spo/knowledgehub/knowledgehub-remove.mdx +1 -1
- package/docs/docs/cmd/spo/knowledgehub/knowledgehub-set.mdx +1 -1
- package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-add.mdx +1 -1
- package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-list.mdx +1 -1
- package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-remove.mdx +1 -1
- package/docs/docs/cmd/spo/orgnewssite/orgnewssite-list.mdx +1 -1
- package/docs/docs/cmd/spo/orgnewssite/orgnewssite-remove.mdx +1 -1
- package/docs/docs/cmd/spo/orgnewssite/orgnewssite-set.mdx +1 -1
- package/docs/docs/cmd/spo/site/site-admin-add.mdx +2 -2
- package/docs/docs/cmd/spo/site/site-admin-remove.mdx +67 -0
- package/docs/docs/cmd/spo/site/site-appcatalog-add.mdx +1 -1
- package/docs/docs/cmd/spo/site/site-appcatalog-remove.mdx +1 -1
- package/docs/docs/cmd/spo/site/site-commsite-enable.mdx +1 -1
- package/docs/docs/cmd/spo/site/site-list.mdx +6 -4
- package/docs/docs/cmd/spo/site/site-set.mdx +1 -1
- package/docs/docs/cmd/spo/storageentity/storageentity-remove.mdx +1 -1
- package/docs/docs/cmd/spo/storageentity/storageentity-set.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-appcatalog-add.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-appcatalogurl-get.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-list.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-settings-list.mdx +1 -1
- package/docs/docs/cmd/spo/theme/theme-apply.mdx +1 -1
- package/docs/docs/cmd/spo/theme/theme-get.mdx +1 -1
- package/docs/docs/cmd/spo/theme/theme-list.mdx +1 -1
- package/docs/docs/cmd/spo/theme/theme-remove.mdx +1 -1
- package/docs/docs/cmd/spo/theme/theme-set.mdx +1 -1
- package/docs/docs/cmd/spp/contentcenter/contentcenter-list.mdx +3 -5
- package/docs/docs/cmd/teams/meeting/meeting-transcript-get.mdx +132 -0
- package/package.json +1 -1
package/dist/Auth.js
CHANGED
|
@@ -353,7 +353,9 @@ export class Auth {
|
|
|
353
353
|
await logger.logToStderr(response);
|
|
354
354
|
await logger.logToStderr('');
|
|
355
355
|
}
|
|
356
|
-
|
|
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
|
}
|
|
@@ -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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FN001008_DEP_react } from './rules/FN001008_DEP_react.js';
|
|
2
|
+
import { FN001009_DEP_react_dom } from './rules/FN001009_DEP_react_dom.js';
|
|
3
|
+
import { FN001035_DEP_fluentui_react } from './rules/FN001035_DEP_fluentui_react.js';
|
|
4
|
+
import { FN002004_DEVDEP_gulp } from './rules/FN002004_DEVDEP_gulp.js';
|
|
5
|
+
import { FN002007_DEVDEP_ajv } from './rules/FN002007_DEVDEP_ajv.js';
|
|
6
|
+
import { FN002013_DEVDEP_types_webpack_env } from './rules/FN002013_DEVDEP_types_webpack_env.js';
|
|
7
|
+
import { FN002015_DEVDEP_types_react } from './rules/FN002015_DEVDEP_types_react.js';
|
|
8
|
+
import { FN002016_DEVDEP_types_react_dom } from './rules/FN002016_DEVDEP_types_react_dom.js';
|
|
9
|
+
import { FN002019_DEVDEP_microsoft_rush_stack_compiler } from './rules/FN002019_DEVDEP_microsoft_rush_stack_compiler.js';
|
|
10
|
+
import { FN021001_PKG_spfx_deps_versions_match_project_version } from './rules/FN021001_PKG_spfx_deps_versions_match_project_version.js';
|
|
11
|
+
import { FN021013_PKG_spfx_devdeps_match_version } from './rules/FN021013_PKG_spfx_devdeps_match_version.js';
|
|
12
|
+
export default [
|
|
13
|
+
new FN001008_DEP_react('17'),
|
|
14
|
+
new FN001009_DEP_react_dom('17'),
|
|
15
|
+
new FN001035_DEP_fluentui_react('^8.106.4'),
|
|
16
|
+
new FN002004_DEVDEP_gulp('4.0.2'),
|
|
17
|
+
new FN002007_DEVDEP_ajv('^6.12.5'),
|
|
18
|
+
new FN002013_DEVDEP_types_webpack_env('~1.15.2'),
|
|
19
|
+
new FN002015_DEVDEP_types_react('17'),
|
|
20
|
+
new FN002016_DEVDEP_types_react_dom('17'),
|
|
21
|
+
new FN002019_DEVDEP_microsoft_rush_stack_compiler(['4.7']),
|
|
22
|
+
new FN021001_PKG_spfx_deps_versions_match_project_version(false),
|
|
23
|
+
new FN021013_PKG_spfx_devdeps_match_version('1.20.1')
|
|
24
|
+
];
|
|
25
|
+
//# sourceMappingURL=doctor-1.20.0-rc.1.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-rc.1'
|
|
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,57 @@
|
|
|
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 { FN002022_DEVDEP_microsoft_eslint_plugin_spfx } from './rules/FN002022_DEVDEP_microsoft_eslint_plugin_spfx.js';
|
|
24
|
+
import { FN002023_DEVDEP_microsoft_eslint_config_spfx } from './rules/FN002023_DEVDEP_microsoft_eslint_config_spfx.js';
|
|
25
|
+
import { FN002024_DEVDEP_eslint } from './rules/FN002024_DEVDEP_eslint.js';
|
|
26
|
+
import { FN010001_YORC_version } from './rules/FN010001_YORC_version.js';
|
|
27
|
+
import { FN010010_YORC_sdkVersions_teams_js } from './rules/FN010010_YORC_sdkVersions_teams_js.js';
|
|
28
|
+
export default [
|
|
29
|
+
new FN001001_DEP_microsoft_sp_core_library('1.20.0-rc.1'),
|
|
30
|
+
new FN001002_DEP_microsoft_sp_lodash_subset('1.20.0-rc.1'),
|
|
31
|
+
new FN001003_DEP_microsoft_sp_office_ui_fabric_core('1.20.0-rc.1'),
|
|
32
|
+
new FN001004_DEP_microsoft_sp_webpart_base('1.20.0-rc.1'),
|
|
33
|
+
new FN001011_DEP_microsoft_sp_dialog('1.20.0-rc.1'),
|
|
34
|
+
new FN001012_DEP_microsoft_sp_application_base('1.20.0-rc.1'),
|
|
35
|
+
new FN001014_DEP_microsoft_sp_listview_extensibility('1.20.0-rc.1'),
|
|
36
|
+
new FN001021_DEP_microsoft_sp_property_pane('1.20.0-rc.1'),
|
|
37
|
+
new FN001023_DEP_microsoft_sp_component_base('1.20.0-rc.1'),
|
|
38
|
+
new FN001024_DEP_microsoft_sp_diagnostics('1.20.0-rc.1'),
|
|
39
|
+
new FN001025_DEP_microsoft_sp_dynamic_data('1.20.0-rc.1'),
|
|
40
|
+
new FN001026_DEP_microsoft_sp_extension_base('1.20.0-rc.1'),
|
|
41
|
+
new FN001027_DEP_microsoft_sp_http('1.20.0-rc.1'),
|
|
42
|
+
new FN001028_DEP_microsoft_sp_list_subscription('1.20.0-rc.1'),
|
|
43
|
+
new FN001029_DEP_microsoft_sp_loader('1.20.0-rc.1'),
|
|
44
|
+
new FN001030_DEP_microsoft_sp_module_interfaces('1.20.0-rc.1'),
|
|
45
|
+
new FN001031_DEP_microsoft_sp_odata_types('1.20.0-rc.1'),
|
|
46
|
+
new FN001032_DEP_microsoft_sp_page_context('1.20.0-rc.1'),
|
|
47
|
+
new FN001013_DEP_microsoft_decorators('1.20.0-rc.1'),
|
|
48
|
+
new FN001034_DEP_microsoft_sp_adaptive_card_extension_base('1.20.0-rc.1'),
|
|
49
|
+
new FN002001_DEVDEP_microsoft_sp_build_web('1.20.1'),
|
|
50
|
+
new FN002002_DEVDEP_microsoft_sp_module_interfaces('1.20.1'),
|
|
51
|
+
new FN002024_DEVDEP_eslint('8.57.0'),
|
|
52
|
+
new FN002022_DEVDEP_microsoft_eslint_plugin_spfx('1.20.1'),
|
|
53
|
+
new FN002023_DEVDEP_microsoft_eslint_config_spfx('1.20.1'),
|
|
54
|
+
new FN010001_YORC_version('1.20.0-rc.1'),
|
|
55
|
+
new FN010010_YORC_sdkVersions_teams_js('2.24.0')
|
|
56
|
+
];
|
|
57
|
+
//# sourceMappingURL=upgrade-1.20.0-rc.1.js.map
|
|
@@ -7,6 +7,8 @@ var _SpfxProjectUpgradeCommand_instances, _a, _SpfxProjectUpgradeCommand_initTel
|
|
|
7
7
|
import fs from 'fs';
|
|
8
8
|
import os from 'os';
|
|
9
9
|
import path from 'path';
|
|
10
|
+
// uncomment to support upgrading to preview releases
|
|
11
|
+
import { prerelease } from 'semver';
|
|
10
12
|
import { CommandError } from '../../../../Command.js';
|
|
11
13
|
import { fsUtil } from '../../../../utils/fsUtil.js';
|
|
12
14
|
import { packageManager } from '../../../../utils/packageManager.js';
|
|
@@ -72,7 +74,8 @@ class SpfxProjectUpgradeCommand extends BaseProjectCommand {
|
|
|
72
74
|
'1.18.0',
|
|
73
75
|
'1.18.1',
|
|
74
76
|
'1.18.2',
|
|
75
|
-
'1.19.0'
|
|
77
|
+
'1.19.0',
|
|
78
|
+
'1.20.0-rc.1'
|
|
76
79
|
];
|
|
77
80
|
__classPrivateFieldGet(this, _SpfxProjectUpgradeCommand_instances, "m", _SpfxProjectUpgradeCommand_initTelemetry).call(this);
|
|
78
81
|
__classPrivateFieldGet(this, _SpfxProjectUpgradeCommand_instances, "m", _SpfxProjectUpgradeCommand_initOptions).call(this);
|
|
@@ -85,15 +88,15 @@ class SpfxProjectUpgradeCommand extends BaseProjectCommand {
|
|
|
85
88
|
}
|
|
86
89
|
this.toVersion = args.options.toVersion ? args.options.toVersion : this.supportedVersions[this.supportedVersions.length - 1];
|
|
87
90
|
// uncomment to support upgrading to preview releases
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
if (!args.options.toVersion &&
|
|
92
|
+
!args.options.preview &&
|
|
93
|
+
prerelease(this.toVersion)) {
|
|
94
|
+
// no version and no preview specified while the current version to
|
|
95
|
+
// upgrade to is a prerelease so let's grab the first non-preview version
|
|
96
|
+
// since we're supporting only one preview version, it's sufficient for
|
|
97
|
+
// us to take second to last version
|
|
98
|
+
this.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
|
|
99
|
+
}
|
|
97
100
|
this.packageManager = args.options.packageManager || 'npm';
|
|
98
101
|
this.shell = args.options.shell || 'bash';
|
|
99
102
|
if (this.supportedVersions.indexOf(this.toVersion) < 0) {
|
|
@@ -482,9 +485,9 @@ _a = SpfxProjectUpgradeCommand, _SpfxProjectUpgradeCommand_instances = new WeakS
|
|
|
482
485
|
preview: args.options.preview
|
|
483
486
|
});
|
|
484
487
|
// uncomment to support upgrading to preview releases
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
+
if (prerelease(this.telemetryProperties.toVersion) && !args.options.preview) {
|
|
489
|
+
this.telemetryProperties.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
|
|
490
|
+
}
|
|
488
491
|
});
|
|
489
492
|
}, _SpfxProjectUpgradeCommand_initOptions = function _SpfxProjectUpgradeCommand_initOptions() {
|
|
490
493
|
this.options.unshift({
|
|
@@ -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-rc.1': {
|
|
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 = '';
|
|
@@ -0,0 +1,193 @@
|
|
|
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 _SpoSiteAdminRemoveCommand_instances, _SpoSiteAdminRemoveCommand_initTelemetry, _SpoSiteAdminRemoveCommand_initOptions, _SpoSiteAdminRemoveCommand_initValidators, _SpoSiteAdminRemoveCommand_initOptionSets, _SpoSiteAdminRemoveCommand_initTypes;
|
|
7
|
+
import { cli } from '../../../../cli/cli.js';
|
|
8
|
+
import request from '../../../../request.js';
|
|
9
|
+
import { entraGroup } from '../../../../utils/entraGroup.js';
|
|
10
|
+
import { entraUser } from '../../../../utils/entraUser.js';
|
|
11
|
+
import { formatting } from '../../../../utils/formatting.js';
|
|
12
|
+
import { spo } from '../../../../utils/spo.js';
|
|
13
|
+
import { validation } from '../../../../utils/validation.js';
|
|
14
|
+
import SpoCommand from '../../../base/SpoCommand.js';
|
|
15
|
+
import commands from '../../commands.js';
|
|
16
|
+
class SpoSiteAdminRemoveCommand extends SpoCommand {
|
|
17
|
+
get name() {
|
|
18
|
+
return commands.SITE_ADMIN_REMOVE;
|
|
19
|
+
}
|
|
20
|
+
get description() {
|
|
21
|
+
return 'Removes a user or group as site collection administrator';
|
|
22
|
+
}
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
_SpoSiteAdminRemoveCommand_instances.add(this);
|
|
26
|
+
__classPrivateFieldGet(this, _SpoSiteAdminRemoveCommand_instances, "m", _SpoSiteAdminRemoveCommand_initTelemetry).call(this);
|
|
27
|
+
__classPrivateFieldGet(this, _SpoSiteAdminRemoveCommand_instances, "m", _SpoSiteAdminRemoveCommand_initOptions).call(this);
|
|
28
|
+
__classPrivateFieldGet(this, _SpoSiteAdminRemoveCommand_instances, "m", _SpoSiteAdminRemoveCommand_initValidators).call(this);
|
|
29
|
+
__classPrivateFieldGet(this, _SpoSiteAdminRemoveCommand_instances, "m", _SpoSiteAdminRemoveCommand_initOptionSets).call(this);
|
|
30
|
+
__classPrivateFieldGet(this, _SpoSiteAdminRemoveCommand_instances, "m", _SpoSiteAdminRemoveCommand_initTypes).call(this);
|
|
31
|
+
}
|
|
32
|
+
async commandAction(logger, args) {
|
|
33
|
+
try {
|
|
34
|
+
if (!args.options.force) {
|
|
35
|
+
const principalToDelete = args.options.groupId || args.options.groupName ? 'group' : 'user';
|
|
36
|
+
const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove specified ${principalToDelete} from the site administrators list ${args.options.siteUrl}?` });
|
|
37
|
+
if (!result) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const loginNameToRemove = await this.getCorrectLoginName(args.options);
|
|
42
|
+
if (args.options.asAdmin) {
|
|
43
|
+
await this.callActionAsAdmin(logger, args, loginNameToRemove);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await this.callAction(logger, args, loginNameToRemove);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
this.handleRejectedODataJsonPromise(err);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async callActionAsAdmin(logger, args, loginNameToRemove) {
|
|
53
|
+
if (this.verbose) {
|
|
54
|
+
await logger.logToStderr('Removing site administrator as an administrator...');
|
|
55
|
+
}
|
|
56
|
+
const adminUrl = await spo.getSpoAdminUrl(logger, this.debug);
|
|
57
|
+
const siteId = await this.getSiteId(args.options.siteUrl, logger);
|
|
58
|
+
const primaryAdminLoginName = await spo.getPrimaryAdminLoginNameAsAdmin(adminUrl, siteId, logger, this.verbose);
|
|
59
|
+
if (loginNameToRemove === primaryAdminLoginName) {
|
|
60
|
+
throw 'You cannot remove the primary site collection administrator.';
|
|
61
|
+
}
|
|
62
|
+
const existingAdmins = await this.getSiteAdmins(adminUrl, siteId);
|
|
63
|
+
const adminsToSet = existingAdmins.filter(u => u.loginName.toLowerCase() !== loginNameToRemove.toLowerCase());
|
|
64
|
+
await this.setSiteAdminsAsAdmin(adminUrl, siteId, adminsToSet);
|
|
65
|
+
}
|
|
66
|
+
async getSiteId(siteUrl, logger) {
|
|
67
|
+
const siteGraphId = await spo.getSiteId(siteUrl, logger, this.verbose);
|
|
68
|
+
const match = siteGraphId.match(/,([a-f0-9\-]{36}),/i);
|
|
69
|
+
if (!match) {
|
|
70
|
+
throw `Site with URL ${siteUrl} not found`;
|
|
71
|
+
}
|
|
72
|
+
return match[1];
|
|
73
|
+
}
|
|
74
|
+
async getSiteAdmins(adminUrl, siteId) {
|
|
75
|
+
const requestOptions = {
|
|
76
|
+
url: `${adminUrl}/_api/SPO.Tenant/GetSiteAdministrators?siteId='${siteId}'`,
|
|
77
|
+
headers: {
|
|
78
|
+
accept: 'application/json;odata=nometadata',
|
|
79
|
+
'content-type': 'application/json;charset=utf-8'
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const response = await request.post(requestOptions);
|
|
83
|
+
const responseContent = JSON.parse(response);
|
|
84
|
+
return responseContent.value;
|
|
85
|
+
}
|
|
86
|
+
async getCorrectLoginName(options) {
|
|
87
|
+
if (options.userId || options.userName) {
|
|
88
|
+
const userPrincipalName = options.userName ? options.userName : await entraUser.getUpnByUserId(options.userId);
|
|
89
|
+
if (userPrincipalName) {
|
|
90
|
+
return `i:0#.f|membership|${userPrincipalName}`;
|
|
91
|
+
}
|
|
92
|
+
throw 'User not found.';
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const group = options.groupId ? await entraGroup.getGroupById(options.groupId) : await entraGroup.getGroupByDisplayName(options.groupName);
|
|
96
|
+
//for entra groups, M365 groups have an associated email and security groups don't
|
|
97
|
+
if (group?.mail) {
|
|
98
|
+
//M365 group is prefixed with c:0o.c|federateddirectoryclaimprovider
|
|
99
|
+
return `c:0o.c|federateddirectoryclaimprovider|${group.id}`;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
//security group is prefixed with c:0t.c|tenant
|
|
103
|
+
return `c:0t.c|tenant|${group?.id}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async setSiteAdminsAsAdmin(adminUrl, siteId, admins) {
|
|
108
|
+
const requestOptions = {
|
|
109
|
+
url: `${adminUrl}/_api/SPOInternalUseOnly.Tenant/SetSiteSecondaryAdministrators`,
|
|
110
|
+
headers: {
|
|
111
|
+
accept: 'application/json;odata=nometadata',
|
|
112
|
+
'content-type': 'application/json;charset=utf-8'
|
|
113
|
+
},
|
|
114
|
+
data: {
|
|
115
|
+
secondaryAdministratorsFieldsData: {
|
|
116
|
+
siteId: siteId,
|
|
117
|
+
secondaryAdministratorLoginNames: admins.map(u => u.loginName)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
await request.post(requestOptions);
|
|
122
|
+
}
|
|
123
|
+
async callAction(logger, args, loginNameToRemove) {
|
|
124
|
+
if (this.verbose) {
|
|
125
|
+
await logger.logToStderr('Removing site administrator...');
|
|
126
|
+
}
|
|
127
|
+
const primaryOwnerLogin = await spo.getPrimaryOwnerLoginFromSite(args.options.siteUrl, logger, this.verbose);
|
|
128
|
+
if (loginNameToRemove === primaryOwnerLogin) {
|
|
129
|
+
throw 'You cannot remove the primary site collection administrator.';
|
|
130
|
+
}
|
|
131
|
+
const requestOptions = {
|
|
132
|
+
url: `${args.options.siteUrl}/_api/web/siteusers('${formatting.encodeQueryParameter(loginNameToRemove)}')`,
|
|
133
|
+
headers: {
|
|
134
|
+
'accept': 'application/json',
|
|
135
|
+
'X-Http-Method': 'MERGE',
|
|
136
|
+
'If-Match': '*'
|
|
137
|
+
},
|
|
138
|
+
data: { IsSiteAdmin: false },
|
|
139
|
+
responseType: 'json'
|
|
140
|
+
};
|
|
141
|
+
await request.post(requestOptions);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
_SpoSiteAdminRemoveCommand_instances = new WeakSet(), _SpoSiteAdminRemoveCommand_initTelemetry = function _SpoSiteAdminRemoveCommand_initTelemetry() {
|
|
145
|
+
this.telemetry.push((args) => {
|
|
146
|
+
Object.assign(this.telemetryProperties, {
|
|
147
|
+
userId: typeof args.options.userId !== 'undefined',
|
|
148
|
+
userName: typeof args.options.userName !== 'undefined',
|
|
149
|
+
groupId: typeof args.options.groupId !== 'undefined',
|
|
150
|
+
groupName: typeof args.options.groupName !== 'undefined',
|
|
151
|
+
force: !!args.options.force,
|
|
152
|
+
asAdmin: !!args.options.asAdmin
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
}, _SpoSiteAdminRemoveCommand_initOptions = function _SpoSiteAdminRemoveCommand_initOptions() {
|
|
156
|
+
this.options.unshift({
|
|
157
|
+
option: '-u, --siteUrl <siteUrl>'
|
|
158
|
+
}, {
|
|
159
|
+
option: '--userId [userId]'
|
|
160
|
+
}, {
|
|
161
|
+
option: '--userName [userName]'
|
|
162
|
+
}, {
|
|
163
|
+
option: '--groupId [groupId]'
|
|
164
|
+
}, {
|
|
165
|
+
option: '--groupName [groupName]'
|
|
166
|
+
}, {
|
|
167
|
+
option: '--asAdmin'
|
|
168
|
+
}, {
|
|
169
|
+
option: '-f, --force'
|
|
170
|
+
});
|
|
171
|
+
}, _SpoSiteAdminRemoveCommand_initValidators = function _SpoSiteAdminRemoveCommand_initValidators() {
|
|
172
|
+
this.validators.push(async (args) => {
|
|
173
|
+
if (args.options.userId &&
|
|
174
|
+
!validation.isValidGuid(args.options.userId)) {
|
|
175
|
+
return `${args.options.userId} is not a valid GUID`;
|
|
176
|
+
}
|
|
177
|
+
if (args.options.userName && !validation.isValidUserPrincipalName(args.options.userName)) {
|
|
178
|
+
return `${args.options.userName} is not a valid userName`;
|
|
179
|
+
}
|
|
180
|
+
if (args.options.groupId &&
|
|
181
|
+
!validation.isValidGuid(args.options.groupId)) {
|
|
182
|
+
return `${args.options.groupId} is not a valid GUID`;
|
|
183
|
+
}
|
|
184
|
+
return validation.isValidSharePointUrl(args.options.siteUrl);
|
|
185
|
+
});
|
|
186
|
+
}, _SpoSiteAdminRemoveCommand_initOptionSets = function _SpoSiteAdminRemoveCommand_initOptionSets() {
|
|
187
|
+
this.optionSets.push({ options: ['userId', 'userName', 'groupId', 'groupName'] });
|
|
188
|
+
}, _SpoSiteAdminRemoveCommand_initTypes = function _SpoSiteAdminRemoveCommand_initTypes() {
|
|
189
|
+
this.types.string.push('siteUrl', 'userId', 'userName', 'groupId', 'groupName');
|
|
190
|
+
this.types.boolean.push('force', 'asAdmin');
|
|
191
|
+
};
|
|
192
|
+
export default new SpoSiteAdminRemoveCommand();
|
|
193
|
+
//# sourceMappingURL=site-admin-remove.js.map
|
|
@@ -247,6 +247,7 @@ export default {
|
|
|
247
247
|
SITE_ADD: `${prefix} site add`,
|
|
248
248
|
SITE_ADMIN_ADD: `${prefix} site admin add`,
|
|
249
249
|
SITE_ADMIN_LIST: `${prefix} site admin list`,
|
|
250
|
+
SITE_ADMIN_REMOVE: `${prefix} site admin remove`,
|
|
250
251
|
SITE_APPCATALOG_ADD: `${prefix} site appcatalog add`,
|
|
251
252
|
SITE_APPCATALOG_LIST: `${prefix} site appcatalog list`,
|
|
252
253
|
SITE_APPCATALOG_REMOVE: `${prefix} site appcatalog remove`,
|