@pnp/cli-microsoft365 7.0.0-beta.4ebf3ad → 7.0.0-beta.669444a
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/.eslintrc.cjs +1 -1
- package/dist/Auth.js +2 -1
- package/dist/Command.js +1 -1
- package/dist/cli/Cli.js +19 -2
- package/dist/m365/aad/commands/{o365group/o365group-add.js → m365group/m365group-add.js} +17 -17
- package/dist/m365/aad/commands/{o365group/o365group-conversation-list.js → m365group/m365group-conversation-list.js} +10 -10
- package/dist/m365/aad/commands/{o365group/o365group-conversation-post-list.js → m365group/m365group-conversation-post-list.js} +14 -14
- package/dist/m365/aad/commands/{o365group/o365group-get.js → m365group/m365group-get.js} +13 -10
- package/dist/m365/aad/commands/{o365group/o365group-list.js → m365group/m365group-list.js} +13 -28
- package/dist/m365/aad/commands/{o365group/o365group-recyclebinitem-clear.js → m365group/m365group-recyclebinitem-clear.js} +15 -15
- package/dist/m365/aad/commands/{o365group/o365group-recyclebinitem-list.js → m365group/m365group-recyclebinitem-list.js} +10 -10
- package/dist/m365/aad/commands/{o365group/o365group-recyclebinitem-remove.js → m365group/m365group-recyclebinitem-remove.js} +14 -14
- package/dist/m365/aad/commands/{o365group/o365group-recyclebinitem-restore.js → m365group/m365group-recyclebinitem-restore.js} +14 -14
- package/dist/m365/aad/commands/{o365group/o365group-remove.js → m365group/m365group-remove.js} +12 -12
- package/dist/m365/aad/commands/{o365group/o365group-renew.js → m365group/m365group-renew.js} +10 -10
- package/dist/m365/aad/commands/{o365group/o365group-report-activitycounts.js → m365group/m365group-report-activitycounts.js} +4 -4
- package/dist/m365/aad/commands/{o365group/o365group-report-activitydetail.js → m365group/m365group-report-activitydetail.js} +4 -4
- package/dist/m365/aad/commands/{o365group/o365group-report-activityfilecounts.js → m365group/m365group-report-activityfilecounts.js} +4 -4
- package/dist/m365/aad/commands/{o365group/o365group-report-activitygroupcounts.js → m365group/m365group-report-activitygroupcounts.js} +4 -4
- package/dist/m365/aad/commands/{o365group/o365group-report-activitystorage.js → m365group/m365group-report-activitystorage.js} +4 -4
- package/dist/m365/aad/commands/{o365group/o365group-set.js → m365group/m365group-set.js} +17 -17
- package/dist/m365/aad/commands/{o365group/o365group-teamify.js → m365group/m365group-teamify.js} +14 -14
- package/dist/m365/aad/commands/{o365group/o365group-user-add.js → m365group/m365group-user-add.js} +14 -14
- package/dist/m365/aad/commands/{o365group/o365group-user-list.js → m365group/m365group-user-list.js} +12 -12
- package/dist/m365/aad/commands/{o365group/o365group-user-remove.js → m365group/m365group-user-remove.js} +14 -14
- package/dist/m365/aad/commands/{o365group/o365group-user-set.js → m365group/m365group-user-set.js} +15 -15
- package/dist/m365/aad/commands.js +22 -22
- package/dist/m365/cli/commands/config/config-list.js +16 -0
- package/dist/m365/cli/commands.js +1 -0
- package/dist/m365/pa/commands/app/app-permission-ensure.js +162 -0
- package/dist/m365/pa/commands/app/app-permission-list.js +2 -2
- package/dist/m365/pa/commands/app/app-permission-remove.js +153 -0
- package/dist/m365/pa/commands.js +2 -0
- package/dist/m365/planner/commands/bucket/bucket-add.js +2 -2
- package/dist/m365/planner/commands/bucket/bucket-get.js +2 -2
- package/dist/m365/planner/commands/bucket/bucket-list.js +2 -2
- package/dist/m365/planner/commands/bucket/bucket-remove.js +2 -2
- package/dist/m365/planner/commands/bucket/bucket-set.js +2 -2
- package/dist/m365/planner/commands/plan/plan-get.js +1 -2
- package/dist/m365/planner/commands/plan/plan-list.js +4 -5
- package/dist/m365/planner/commands/plan/plan-set.js +2 -2
- package/dist/m365/spfx/commands/project/project-externalize/rules/PnPJsRule.js +2 -2
- package/dist/m365/spfx/commands/spfx-doctor.js +73 -103
- package/dist/m365/spo/commands/file/file-add.js +13 -13
- package/dist/m365/spo/commands/file/file-checkin.js +1 -1
- package/dist/m365/spo/commands/file/file-checkout.js +1 -1
- package/dist/m365/spo/commands/file/file-copy.js +36 -4
- package/dist/m365/spo/commands/file/file-list.js +4 -4
- package/dist/m365/spo/commands/file/file-move.js +74 -98
- package/dist/m365/spo/commands/file/file-remove.js +6 -6
- package/dist/m365/spo/commands/file/file-rename.js +2 -2
- package/dist/m365/spo/commands/file/file-retentionlabel-ensure.js +1 -1
- package/dist/m365/spo/commands/file/file-retentionlabel-remove.js +1 -1
- package/dist/m365/spo/commands/file/file-roleassignment-add.js +1 -1
- package/dist/m365/spo/commands/file/file-roleassignment-remove.js +1 -1
- package/dist/m365/spo/commands/file/file-roleinheritance-break.js +1 -1
- package/dist/m365/spo/commands/file/file-roleinheritance-reset.js +1 -1
- package/dist/m365/spo/commands/file/file-version-clear.js +1 -1
- package/dist/m365/spo/commands/file/file-version-get.js +1 -1
- package/dist/m365/spo/commands/file/file-version-list.js +1 -1
- package/dist/m365/spo/commands/file/file-version-remove.js +1 -1
- package/dist/m365/spo/commands/file/file-version-restore.js +1 -1
- package/dist/m365/spo/commands/folder/folder-add.js +2 -4
- package/dist/m365/spo/commands/folder/folder-copy.js +89 -45
- package/dist/m365/spo/commands/folder/folder-get.js +1 -1
- package/dist/m365/spo/commands/folder/folder-list.js +2 -2
- package/dist/m365/spo/commands/folder/folder-move.js +89 -47
- package/dist/m365/spo/commands/folder/folder-remove.js +7 -4
- package/dist/m365/spo/commands/folder/folder-rename.js +13 -17
- package/dist/m365/spo/commands/folder/folder-retentionlabel-ensure.js +1 -1
- package/dist/m365/spo/commands/folder/folder-retentionlabel-remove.js +1 -1
- package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +1 -1
- package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +1 -1
- package/dist/m365/spo/commands/folder/folder-roleinheritance-break.js +1 -1
- package/dist/m365/spo/commands/folder/folder-roleinheritance-reset.js +1 -1
- package/dist/m365/spo/commands/group/group-list.js +0 -1
- package/dist/m365/spo/commands/navigation/navigation-node-set.js +2 -2
- package/dist/m365/spo/commands/site/site-set.js +2 -2
- package/dist/m365/spo/commands/theme/theme-list.js +1 -9
- package/dist/utils/planner.js +4 -3
- package/dist/utils/spo.js +13 -54
- package/docs/docs/cmd/aad/{o365group/o365group-add.mdx → m365group/m365group-add.mdx} +13 -13
- package/docs/docs/cmd/aad/{o365group/o365group-conversation-list.mdx → m365group/m365group-conversation-list.mdx} +4 -4
- package/docs/docs/cmd/aad/{o365group/o365group-conversation-post-list.mdx → m365group/m365group-conversation-post-list.mdx} +8 -8
- package/docs/docs/cmd/aad/{o365group/o365group-get.mdx → m365group/m365group-get.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-list.mdx → m365group/m365group-list.mdx} +12 -29
- package/docs/docs/cmd/aad/{o365group/o365group-recyclebinitem-clear.mdx → m365group/m365group-recyclebinitem-clear.mdx} +5 -5
- package/docs/docs/cmd/aad/{o365group/o365group-recyclebinitem-list.mdx → m365group/m365group-recyclebinitem-list.mdx} +8 -8
- package/docs/docs/cmd/aad/{o365group/o365group-recyclebinitem-remove.mdx → m365group/m365group-recyclebinitem-remove.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-recyclebinitem-restore.mdx → m365group/m365group-recyclebinitem-restore.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-remove.mdx → m365group/m365group-remove.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-renew.mdx → m365group/m365group-renew.mdx} +4 -4
- package/docs/docs/cmd/aad/{o365group/o365group-report-activitycounts.mdx → m365group/m365group-report-activitycounts.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-report-activitydetail.mdx → m365group/m365group-report-activitydetail.mdx} +7 -7
- package/docs/docs/cmd/aad/{o365group/o365group-report-activityfilecounts.mdx → m365group/m365group-report-activityfilecounts.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-report-activitygroupcounts.mdx → m365group/m365group-report-activitygroupcounts.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-report-activitystorage.mdx → m365group/m365group-report-activitystorage.mdx} +6 -6
- package/docs/docs/cmd/aad/{o365group/o365group-set.mdx → m365group/m365group-set.mdx} +8 -8
- package/docs/docs/cmd/aad/{o365group/o365group-teamify.mdx → m365group/m365group-teamify.mdx} +5 -5
- package/docs/docs/cmd/aad/{o365group/o365group-user-add.mdx → m365group/m365group-user-add.mdx} +5 -5
- package/docs/docs/cmd/aad/{o365group/o365group-user-list.mdx → m365group/m365group-user-list.mdx} +7 -7
- package/docs/docs/cmd/aad/{o365group/o365group-user-remove.mdx → m365group/m365group-user-remove.mdx} +5 -5
- package/docs/docs/cmd/aad/{o365group/o365group-user-set.mdx → m365group/m365group-user-set.mdx} +5 -5
- package/docs/docs/cmd/aad/user/user-set.mdx +1 -1
- package/docs/docs/cmd/cli/config/config-list.mdx +78 -0
- package/docs/docs/cmd/flow/flow-enable.mdx +2 -2
- package/docs/docs/cmd/login.mdx +6 -0
- package/docs/docs/cmd/pa/app/app-permission-ensure.mdx +85 -0
- package/docs/docs/cmd/pa/app/app-permission-remove.mdx +74 -0
- package/docs/docs/cmd/planner/plan/plan-add.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-get.mdx +2 -2
- package/docs/docs/cmd/pp/dataverse/dataverse-table-list.mdx +2 -2
- package/docs/docs/cmd/pp/dataverse/dataverse-table-remove.mdx +3 -3
- package/docs/docs/cmd/spo/file/file-add.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-checkin.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-checkout-undo.mdx +1 -9
- package/docs/docs/cmd/spo/file/file-checkout.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-copy.mdx +20 -16
- package/docs/docs/cmd/spo/file/file-get.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-list.mdx +2 -2
- package/docs/docs/cmd/spo/file/file-move.mdx +36 -18
- package/docs/docs/cmd/spo/file/file-remove.mdx +8 -8
- package/docs/docs/cmd/spo/file/file-rename.mdx +3 -3
- package/docs/docs/cmd/spo/file/file-retentionlabel-ensure.mdx +2 -2
- package/docs/docs/cmd/spo/file/file-retentionlabel-remove.mdx +3 -3
- package/docs/docs/cmd/spo/file/file-roleassignment-add.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-roleassignment-remove.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-roleinheritance-break.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-roleinheritance-reset.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinginfo-get.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinglink-add.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinglink-clear.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinglink-get.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinglink-list.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinglink-remove.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-sharinglink-set.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-version-clear.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-version-get.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-version-list.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-version-remove.mdx +1 -1
- package/docs/docs/cmd/spo/file/file-version-restore.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-add.mdx +76 -1
- package/docs/docs/cmd/spo/folder/folder-copy.mdx +39 -12
- package/docs/docs/cmd/spo/folder/folder-get.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-list.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-move.mdx +40 -13
- package/docs/docs/cmd/spo/folder/folder-remove.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-rename.mdx +5 -1
- package/docs/docs/cmd/spo/folder/folder-retentionlabel-ensure.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-retentionlabel-remove.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-roleassignment-add.mdx +2 -2
- package/docs/docs/cmd/spo/folder/folder-roleassignment-remove.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-roleinheritance-break.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-roleinheritance-reset.mdx +1 -1
- package/docs/docs/cmd/spo/listitem/listitem-attachment-list.mdx +1 -1
- package/docs/docs/cmd/spo/site/site-add.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-add.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-list.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-remove.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-add.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-remove.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-set.mdx +1 -1
- package/docs/docs/cmd/teams/team/team-add.mdx +1 -1
- package/docs/docs/cmd/yammer/network/network-list.mdx +1 -1
- package/npm-shrinkwrap.json +142 -88
- package/package.json +13 -13
- /package/dist/m365/aad/commands/{o365group → m365group}/GroupExtended.js +0 -0
|
@@ -3,17 +3,12 @@ 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 _SpoFileMoveCommand_instances, _SpoFileMoveCommand_initTelemetry, _SpoFileMoveCommand_initOptions, _SpoFileMoveCommand_initValidators;
|
|
7
|
-
import url from 'url';
|
|
8
|
-
import { Cli } from '../../../../cli/Cli.js';
|
|
6
|
+
var _SpoFileMoveCommand_instances, _SpoFileMoveCommand_initTelemetry, _SpoFileMoveCommand_initOptions, _SpoFileMoveCommand_initValidators, _SpoFileMoveCommand_initOptionSets;
|
|
9
7
|
import request from '../../../../request.js';
|
|
10
|
-
import { formatting } from '../../../../utils/formatting.js';
|
|
11
|
-
import { spo } from '../../../../utils/spo.js';
|
|
12
8
|
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
13
9
|
import { validation } from '../../../../utils/validation.js';
|
|
14
10
|
import SpoCommand from '../../../base/SpoCommand.js';
|
|
15
11
|
import commands from '../../commands.js';
|
|
16
|
-
import removeCommand from './file-remove.js';
|
|
17
12
|
class SpoFileMoveCommand extends SpoCommand {
|
|
18
13
|
get name() {
|
|
19
14
|
return commands.FILE_MOVE;
|
|
@@ -24,143 +19,124 @@ class SpoFileMoveCommand extends SpoCommand {
|
|
|
24
19
|
constructor() {
|
|
25
20
|
super();
|
|
26
21
|
_SpoFileMoveCommand_instances.add(this);
|
|
22
|
+
this.nameConflictBehaviorOptions = ['fail', 'replace', 'rename'];
|
|
27
23
|
__classPrivateFieldGet(this, _SpoFileMoveCommand_instances, "m", _SpoFileMoveCommand_initTelemetry).call(this);
|
|
28
24
|
__classPrivateFieldGet(this, _SpoFileMoveCommand_instances, "m", _SpoFileMoveCommand_initOptions).call(this);
|
|
29
25
|
__classPrivateFieldGet(this, _SpoFileMoveCommand_instances, "m", _SpoFileMoveCommand_initValidators).call(this);
|
|
26
|
+
__classPrivateFieldGet(this, _SpoFileMoveCommand_instances, "m", _SpoFileMoveCommand_initOptionSets).call(this);
|
|
30
27
|
}
|
|
31
28
|
getExcludedOptionsWithUrls() {
|
|
32
29
|
return ['targetUrl', 'sourceUrl'];
|
|
33
30
|
}
|
|
34
31
|
async commandAction(logger, args) {
|
|
35
|
-
const webUrl = args.options.webUrl;
|
|
36
|
-
const parsedUrl = url.parse(webUrl);
|
|
37
|
-
const tenantUrl = `${parsedUrl.protocol}//${parsedUrl.hostname}`;
|
|
38
32
|
try {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
await this.recycleFile(tenantUrl, args.options.targetUrl, filename, logger);
|
|
33
|
+
const sourcePath = await this.getSourcePath(logger, args.options);
|
|
34
|
+
if (this.verbose) {
|
|
35
|
+
await logger.logToStderr(`Moving file ${sourcePath} to ${args.options.targetUrl}...`);
|
|
36
|
+
}
|
|
37
|
+
const absoluteSourcePath = this.getAbsoluteUrl(args.options.webUrl, sourcePath);
|
|
38
|
+
let absoluteTargetPath = this.getAbsoluteUrl(args.options.webUrl, args.options.targetUrl) + '/';
|
|
39
|
+
if (args.options.newName) {
|
|
40
|
+
absoluteTargetPath += args.options.newName;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Keep the original file name
|
|
44
|
+
absoluteTargetPath += sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
|
|
52
45
|
}
|
|
53
|
-
// all preconditions met, now create copy job
|
|
54
|
-
const sourceAbsoluteUrl = urlUtil.urlCombine(tenantUrl, serverRelativePath);
|
|
55
|
-
const allowSchemaMismatch = args.options.allowSchemaMismatch || false;
|
|
56
|
-
const requestUrl = urlUtil.urlCombine(webUrl, '/_api/site/CreateCopyJobs');
|
|
57
46
|
const requestOptions = {
|
|
58
|
-
url:
|
|
47
|
+
url: `${args.options.webUrl}/_api/SP.MoveCopyUtil.MoveFileByPath`,
|
|
59
48
|
headers: {
|
|
60
|
-
|
|
49
|
+
accept: 'application/json;odata=nometadata'
|
|
61
50
|
},
|
|
51
|
+
responseType: 'json',
|
|
62
52
|
data: {
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
srcPath: {
|
|
54
|
+
DecodedUrl: absoluteSourcePath
|
|
55
|
+
},
|
|
56
|
+
destPath: {
|
|
57
|
+
DecodedUrl: absoluteTargetPath
|
|
58
|
+
},
|
|
59
|
+
overwrite: args.options.nameConflictBehavior === 'replace',
|
|
65
60
|
options: {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
KeepBoth: args.options.nameConflictBehavior === 'rename',
|
|
62
|
+
ShouldBypassSharedLocks: !!args.options.bypassSharedLock,
|
|
63
|
+
RetainEditorAndModifiedOnMove: !!args.options.retainEditorAndModified
|
|
69
64
|
}
|
|
70
|
-
}
|
|
71
|
-
responseType: 'json'
|
|
65
|
+
}
|
|
72
66
|
};
|
|
73
|
-
|
|
74
|
-
const copyJobInfo = jobInfo.value[0];
|
|
75
|
-
const progressPollInterval = 1800; // 30 * 60; //used previously implemented interval. The API does not provide guidance on what value should be used.
|
|
76
|
-
await new Promise((resolve, reject) => {
|
|
77
|
-
setTimeout(() => {
|
|
78
|
-
spo.waitUntilCopyJobFinished({
|
|
79
|
-
copyJobInfo,
|
|
80
|
-
siteUrl: webUrl,
|
|
81
|
-
pollingInterval: progressPollInterval,
|
|
82
|
-
resolve,
|
|
83
|
-
reject,
|
|
84
|
-
logger,
|
|
85
|
-
debug: this.debug,
|
|
86
|
-
verbose: this.verbose
|
|
87
|
-
});
|
|
88
|
-
}, progressPollInterval);
|
|
89
|
-
});
|
|
67
|
+
await request.post(requestOptions);
|
|
90
68
|
}
|
|
91
69
|
catch (err) {
|
|
92
70
|
this.handleRejectedODataJsonPromise(err);
|
|
93
71
|
}
|
|
94
72
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
73
|
+
async getSourcePath(logger, options) {
|
|
74
|
+
if (options.sourceUrl) {
|
|
75
|
+
return urlUtil.getServerRelativePath(options.webUrl, options.sourceUrl);
|
|
76
|
+
}
|
|
77
|
+
if (this.verbose) {
|
|
78
|
+
await logger.logToStderr(`Retrieving server-relative path for file with ID '${options.sourceId}'...`);
|
|
79
|
+
}
|
|
100
80
|
const requestOptions = {
|
|
101
|
-
url:
|
|
102
|
-
method: 'GET',
|
|
81
|
+
url: `${options.webUrl}/_api/Web/GetFileById('${options.sourceId}')?$select=ServerRelativePath`,
|
|
103
82
|
headers: {
|
|
104
|
-
|
|
83
|
+
accept: 'application/json;odata=nometadata'
|
|
105
84
|
},
|
|
106
85
|
responseType: 'json'
|
|
107
86
|
};
|
|
108
|
-
|
|
87
|
+
const file = await request.get(requestOptions);
|
|
88
|
+
return file.ServerRelativePath.DecodedUrl;
|
|
109
89
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
*/
|
|
113
|
-
async recycleFile(tenantUrl, targetUrl, filename, logger) {
|
|
114
|
-
const targetFolderAbsoluteUrl = urlUtil.urlCombine(tenantUrl, targetUrl);
|
|
115
|
-
// since the target WebFullUrl is unknown we can use getRequestDigest
|
|
116
|
-
// to get it from target folder absolute url.
|
|
117
|
-
// Similar approach used here Microsoft.SharePoint.Client.Web.WebUrlFromFolderUrlDirect
|
|
118
|
-
const contextResponse = await spo.getRequestDigest(targetFolderAbsoluteUrl);
|
|
119
|
-
if (this.debug) {
|
|
120
|
-
await logger.logToStderr(`contextResponse.WebFullUrl: ${contextResponse.WebFullUrl}`);
|
|
121
|
-
}
|
|
122
|
-
const targetFileServerRelativeUrl = `${urlUtil.getServerRelativePath(contextResponse.WebFullUrl, targetUrl)}/${filename}`;
|
|
123
|
-
const removeOptions = {
|
|
124
|
-
webUrl: contextResponse.WebFullUrl,
|
|
125
|
-
url: targetFileServerRelativeUrl,
|
|
126
|
-
recycle: true,
|
|
127
|
-
force: true,
|
|
128
|
-
debug: this.debug,
|
|
129
|
-
verbose: this.verbose
|
|
130
|
-
};
|
|
131
|
-
try {
|
|
132
|
-
await Cli.executeCommand(removeCommand, { options: { ...removeOptions, _: [] } });
|
|
133
|
-
}
|
|
134
|
-
catch (err) {
|
|
135
|
-
if (err !== undefined && err.message !== undefined && err.message.includes('does not exist')) {
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
throw err;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
90
|
+
getAbsoluteUrl(webUrl, url) {
|
|
91
|
+
return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
|
|
141
92
|
}
|
|
142
93
|
}
|
|
143
94
|
_SpoFileMoveCommand_instances = new WeakSet(), _SpoFileMoveCommand_initTelemetry = function _SpoFileMoveCommand_initTelemetry() {
|
|
144
95
|
this.telemetry.push((args) => {
|
|
145
96
|
Object.assign(this.telemetryProperties, {
|
|
146
|
-
|
|
147
|
-
|
|
97
|
+
sourceUrl: typeof args.options.sourceUrl !== 'undefined',
|
|
98
|
+
sourceId: typeof args.options.sourceId !== 'undefined',
|
|
99
|
+
newName: typeof args.options.newName !== 'undefined',
|
|
100
|
+
nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined',
|
|
101
|
+
retainEditorAndModified: !!args.options.retainEditorAndModified,
|
|
102
|
+
bypassSharedLock: !!args.options.bypassSharedLock
|
|
148
103
|
});
|
|
149
104
|
});
|
|
150
105
|
}, _SpoFileMoveCommand_initOptions = function _SpoFileMoveCommand_initOptions() {
|
|
151
106
|
this.options.unshift({
|
|
152
107
|
option: '-u, --webUrl <webUrl>'
|
|
153
108
|
}, {
|
|
154
|
-
option: '-s, --sourceUrl
|
|
109
|
+
option: '-s, --sourceUrl [sourceUrl]'
|
|
110
|
+
}, {
|
|
111
|
+
option: '-i, --sourceId [sourceId]'
|
|
155
112
|
}, {
|
|
156
113
|
option: '-t, --targetUrl <targetUrl>'
|
|
157
114
|
}, {
|
|
158
|
-
option: '--
|
|
115
|
+
option: '--newName [newName]'
|
|
116
|
+
}, {
|
|
117
|
+
option: '--nameConflictBehavior [nameConflictBehavior]',
|
|
118
|
+
autocomplete: this.nameConflictBehaviorOptions
|
|
159
119
|
}, {
|
|
160
|
-
option: '--
|
|
120
|
+
option: '--retainEditorAndModified'
|
|
121
|
+
}, {
|
|
122
|
+
option: '--bypassSharedLock'
|
|
161
123
|
});
|
|
162
124
|
}, _SpoFileMoveCommand_initValidators = function _SpoFileMoveCommand_initValidators() {
|
|
163
|
-
this.validators.push(async (args) =>
|
|
125
|
+
this.validators.push(async (args) => {
|
|
126
|
+
const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
|
|
127
|
+
if (isValidSharePointUrl !== true) {
|
|
128
|
+
return isValidSharePointUrl;
|
|
129
|
+
}
|
|
130
|
+
if (args.options.sourceId && !validation.isValidGuid(args.options.sourceId)) {
|
|
131
|
+
return `'${args.options.sourceId}' is not a valid GUID for sourceId.`;
|
|
132
|
+
}
|
|
133
|
+
if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
|
|
134
|
+
return `'${args.options.nameConflictBehavior}' is not a valid value for nameConflictBehavior. Allowed values are: ${this.nameConflictBehaviorOptions.join(', ')}.`;
|
|
135
|
+
}
|
|
136
|
+
return true;
|
|
137
|
+
});
|
|
138
|
+
}, _SpoFileMoveCommand_initOptionSets = function _SpoFileMoveCommand_initOptionSets() {
|
|
139
|
+
this.optionSets.push({ options: ['sourceUrl', 'sourceId'] });
|
|
164
140
|
};
|
|
165
141
|
export default new SpoFileMoveCommand();
|
|
166
142
|
//# sourceMappingURL=file-move.js.map
|
|
@@ -43,7 +43,7 @@ class SpoFileRemoveCommand extends SpoCommand {
|
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
45
|
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, args.options.url);
|
|
46
|
-
requestUrl = `${args.options.webUrl}/_api/web/
|
|
46
|
+
requestUrl = `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')`;
|
|
47
47
|
}
|
|
48
48
|
if (args.options.recycle) {
|
|
49
49
|
requestUrl += `/recycle()`;
|
|
@@ -73,7 +73,7 @@ class SpoFileRemoveCommand extends SpoCommand {
|
|
|
73
73
|
type: 'confirm',
|
|
74
74
|
name: 'continue',
|
|
75
75
|
default: false,
|
|
76
|
-
message: `Are you sure you want to ${args.options.recycle ?
|
|
76
|
+
message: `Are you sure you want to ${args.options.recycle ? 'recycle' : 'remove'} the file ${args.options.id || args.options.url} located in site ${args.options.webUrl}?`
|
|
77
77
|
});
|
|
78
78
|
if (result.continue) {
|
|
79
79
|
await removeFile();
|
|
@@ -84,10 +84,10 @@ class SpoFileRemoveCommand extends SpoCommand {
|
|
|
84
84
|
_SpoFileRemoveCommand_instances = new WeakSet(), _SpoFileRemoveCommand_initTelemetry = function _SpoFileRemoveCommand_initTelemetry() {
|
|
85
85
|
this.telemetry.push((args) => {
|
|
86
86
|
Object.assign(this.telemetryProperties, {
|
|
87
|
-
id:
|
|
88
|
-
url:
|
|
89
|
-
recycle:
|
|
90
|
-
force:
|
|
87
|
+
id: typeof args.options.id !== 'undefined',
|
|
88
|
+
url: typeof args.options.url !== 'undefined',
|
|
89
|
+
recycle: !!args.options.recycle,
|
|
90
|
+
force: !!args.options.force
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
93
|
}, _SpoFileRemoveCommand_initOptions = function _SpoFileRemoveCommand_initOptions() {
|
|
@@ -41,7 +41,7 @@ class SpoFileRenameCommand extends SpoCommand {
|
|
|
41
41
|
}]
|
|
42
42
|
};
|
|
43
43
|
const requestOptions = {
|
|
44
|
-
url: `${webUrl}/_api/web/
|
|
44
|
+
url: `${webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(originalFileServerRelativePath)}')/ListItemAllFields/ValidateUpdateListItem()`,
|
|
45
45
|
headers: {
|
|
46
46
|
'accept': 'application/json;odata=nometadata'
|
|
47
47
|
},
|
|
@@ -56,7 +56,7 @@ class SpoFileRenameCommand extends SpoCommand {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
async getFile(originalFileServerRelativeUrl, webUrl) {
|
|
59
|
-
const requestUrl = `${webUrl}/_api/web/
|
|
59
|
+
const requestUrl = `${webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(originalFileServerRelativeUrl)}')?$select=UniqueId`;
|
|
60
60
|
const requestOptions = {
|
|
61
61
|
url: requestUrl,
|
|
62
62
|
headers: {
|
|
@@ -61,7 +61,7 @@ class SpoFileRetentionLabelEnsureCommand extends SpoCommand {
|
|
|
61
61
|
}
|
|
62
62
|
else {
|
|
63
63
|
const serverRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
64
|
-
requestUrl += `
|
|
64
|
+
requestUrl += `GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
65
65
|
}
|
|
66
66
|
const requestOptions = {
|
|
67
67
|
url: `${requestUrl}?$expand=ListItemAllFields,ListItemAllFields/ParentList&$select=ServerRelativeUrl,ListItemAllFields/ParentList/Id,ListItemAllFields/Id`,
|
|
@@ -80,7 +80,7 @@ class SpoFileRetentionLabelRemoveCommand extends SpoCommand {
|
|
|
80
80
|
}
|
|
81
81
|
else {
|
|
82
82
|
const serverRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
83
|
-
requestUrl += `
|
|
83
|
+
requestUrl += `GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
84
84
|
}
|
|
85
85
|
requestOptions.url = `${requestUrl}?$expand=ListItemAllFields,ListItemAllFields/ParentList&$select=ListItemAllFields/ParentList/Id,ListItemAllFields/Id`;
|
|
86
86
|
const response = await request.get(requestOptions);
|
|
@@ -55,7 +55,7 @@ class SpoFileRoleAssignmentAddCommand extends SpoCommand {
|
|
|
55
55
|
}
|
|
56
56
|
async addRoleAssignment(fileUrl, webUrl, principalId, roleDefinitionId) {
|
|
57
57
|
const requestOptions = {
|
|
58
|
-
url: `${webUrl}/_api/web/
|
|
58
|
+
url: `${webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(fileUrl)}')/ListItemAllFields/roleassignments/addroleassignment(principalid='${principalId}',roledefid='${roleDefinitionId}')`,
|
|
59
59
|
method: 'POST',
|
|
60
60
|
headers: {
|
|
61
61
|
'accept': 'application/json;odata=nometadata',
|
|
@@ -48,7 +48,7 @@ class SpoFileRoleAssignmentRemoveCommand extends SpoCommand {
|
|
|
48
48
|
}
|
|
49
49
|
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, fileURL);
|
|
50
50
|
const requestOptions = {
|
|
51
|
-
url: `${args.options.webUrl}/_api/web/
|
|
51
|
+
url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')/ListItemAllFields/roleassignments/removeroleassignment(principalid='${principalId}')`,
|
|
52
52
|
headers: {
|
|
53
53
|
accept: 'application/json;odata=nometadata'
|
|
54
54
|
},
|
|
@@ -36,7 +36,7 @@ class SpoFileRoleInheritanceBreakCommand extends SpoCommand {
|
|
|
36
36
|
const fileURL = await this.getFileURL(args);
|
|
37
37
|
const keepExistingPermissions = !args.options.clearExistingPermissions;
|
|
38
38
|
const requestOptions = {
|
|
39
|
-
url: `${args.options.webUrl}/_api/web/
|
|
39
|
+
url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(fileURL)}')/ListItemAllFields/breakroleinheritance(${keepExistingPermissions})`,
|
|
40
40
|
headers: {
|
|
41
41
|
accept: 'application/json;odata=nometadata'
|
|
42
42
|
},
|
|
@@ -35,7 +35,7 @@ class SpoFileRoleInheritanceResetCommand extends SpoCommand {
|
|
|
35
35
|
try {
|
|
36
36
|
const fileURL = await this.getFileURL(args);
|
|
37
37
|
const requestOptions = {
|
|
38
|
-
url: `${args.options.webUrl}/_api/web/
|
|
38
|
+
url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(fileURL)}')/ListItemAllFields/resetroleinheritance`,
|
|
39
39
|
headers: {
|
|
40
40
|
accept: 'application/json;odata=nometadata'
|
|
41
41
|
},
|
|
@@ -54,7 +54,7 @@ class SpoFileVersionClearCommand extends SpoCommand {
|
|
|
54
54
|
let requestUrl = `${args.options.webUrl}/_api/web/`;
|
|
55
55
|
if (args.options.fileUrl) {
|
|
56
56
|
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
57
|
-
requestUrl += `
|
|
57
|
+
requestUrl += `GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')/versions/DeleteAll()`;
|
|
58
58
|
}
|
|
59
59
|
else {
|
|
60
60
|
requestUrl += `GetFileById('${args.options.fileId}')/versions/DeleteAll()`;
|
|
@@ -42,7 +42,7 @@ class SpoFileVersionGetCommand extends SpoCommand {
|
|
|
42
42
|
let requestUrl = `${args.options.webUrl}/_api/web/`;
|
|
43
43
|
if (args.options.fileUrl) {
|
|
44
44
|
const serverRelUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
45
|
-
requestUrl += `
|
|
45
|
+
requestUrl += `GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelUrl)}')/versions/?$filter=VersionLabel eq '${args.options.label}'`;
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
48
|
requestUrl += `GetFileById('${args.options.fileId}')/versions/?$filter=VersionLabel eq '${args.options.label}'`;
|
|
@@ -36,7 +36,7 @@ class SpoFileVersionListCommand extends SpoCommand {
|
|
|
36
36
|
let requestUrl = `${args.options.webUrl}/_api/web`;
|
|
37
37
|
if (args.options.fileUrl) {
|
|
38
38
|
const serverRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
39
|
-
requestUrl += `/
|
|
39
|
+
requestUrl += `/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
requestUrl += `/GetFileById('${args.options.fileId}')`;
|
|
@@ -55,7 +55,7 @@ class SpoFileVersionRemoveCommand extends SpoCommand {
|
|
|
55
55
|
let requestUrl = `${args.options.webUrl}/_api/web/`;
|
|
56
56
|
if (args.options.fileUrl) {
|
|
57
57
|
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
58
|
-
requestUrl += `
|
|
58
|
+
requestUrl += `GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')/versions/DeleteByLabel('${args.options.label}')`;
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
61
61
|
requestUrl += `GetFileById('${args.options.fileId}')/versions/DeleteByLabel('${args.options.label}')`;
|
|
@@ -55,7 +55,7 @@ class SpoFileVersionRestoreCommand extends SpoCommand {
|
|
|
55
55
|
let requestUrl = `${args.options.webUrl}/_api/web/`;
|
|
56
56
|
if (args.options.fileUrl) {
|
|
57
57
|
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
|
|
58
|
-
requestUrl += `
|
|
58
|
+
requestUrl += `GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')/versions/RestoreByLabel('${args.options.label}')`;
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
61
61
|
requestUrl += `GetFileById('${args.options.fileId}')/versions/RestoreByLabel('${args.options.label}')`;
|
|
@@ -5,6 +5,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
5
5
|
};
|
|
6
6
|
var _SpoFolderAddCommand_instances, _SpoFolderAddCommand_initOptions, _SpoFolderAddCommand_initValidators;
|
|
7
7
|
import request from '../../../../request.js';
|
|
8
|
+
import { formatting } from '../../../../utils/formatting.js';
|
|
8
9
|
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
9
10
|
import { validation } from '../../../../utils/validation.js';
|
|
10
11
|
import SpoCommand from '../../../base/SpoCommand.js';
|
|
@@ -28,15 +29,12 @@ class SpoFolderAddCommand extends SpoCommand {
|
|
|
28
29
|
}
|
|
29
30
|
const parentFolderServerRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.parentFolderUrl);
|
|
30
31
|
const serverRelativeUrl = `${parentFolderServerRelativeUrl}/${args.options.name}`;
|
|
31
|
-
const requestUrl = `${args.options.webUrl}/_api/web/folders`;
|
|
32
|
+
const requestUrl = `${args.options.webUrl}/_api/web/folders/addUsingPath(decodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
32
33
|
const requestOptions = {
|
|
33
34
|
url: requestUrl,
|
|
34
35
|
headers: {
|
|
35
36
|
'accept': 'application/json;odata=nometadata'
|
|
36
37
|
},
|
|
37
|
-
data: {
|
|
38
|
-
'ServerRelativeUrl': serverRelativeUrl
|
|
39
|
-
},
|
|
40
38
|
responseType: 'json'
|
|
41
39
|
};
|
|
42
40
|
try {
|
|
@@ -3,10 +3,8 @@ 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 _SpoFolderCopyCommand_instances, _SpoFolderCopyCommand_initTelemetry, _SpoFolderCopyCommand_initOptions, _SpoFolderCopyCommand_initValidators;
|
|
7
|
-
import url from 'url';
|
|
6
|
+
var _SpoFolderCopyCommand_instances, _SpoFolderCopyCommand_initTelemetry, _SpoFolderCopyCommand_initOptions, _SpoFolderCopyCommand_initValidators, _SpoFolderCopyCommand_initOptionSets;
|
|
8
7
|
import request from '../../../../request.js';
|
|
9
|
-
import { spo } from '../../../../utils/spo.js';
|
|
10
8
|
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
11
9
|
import { validation } from '../../../../utils/validation.js';
|
|
12
10
|
import SpoCommand from '../../../base/SpoCommand.js';
|
|
@@ -21,77 +19,123 @@ class SpoFolderCopyCommand extends SpoCommand {
|
|
|
21
19
|
constructor() {
|
|
22
20
|
super();
|
|
23
21
|
_SpoFolderCopyCommand_instances.add(this);
|
|
22
|
+
this.nameConflictBehaviorOptions = ['fail', 'rename'];
|
|
24
23
|
__classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initTelemetry).call(this);
|
|
25
24
|
__classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initOptions).call(this);
|
|
26
25
|
__classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initValidators).call(this);
|
|
26
|
+
__classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initOptionSets).call(this);
|
|
27
27
|
}
|
|
28
28
|
getExcludedOptionsWithUrls() {
|
|
29
29
|
return ['targetUrl', 'sourceUrl'];
|
|
30
30
|
}
|
|
31
31
|
async commandAction(logger, args) {
|
|
32
|
-
const webUrl = args.options.webUrl;
|
|
33
|
-
const parsedUrl = url.parse(webUrl);
|
|
34
|
-
const tenantUrl = `${parsedUrl.protocol}//${parsedUrl.hostname}`;
|
|
35
|
-
const serverRelativePath = urlUtil.getServerRelativePath(webUrl, args.options.sourceUrl);
|
|
36
|
-
const sourceAbsoluteUrl = urlUtil.urlCombine(tenantUrl, serverRelativePath);
|
|
37
|
-
const allowSchemaMismatch = args.options.allowSchemaMismatch || false;
|
|
38
|
-
const requestOptions = {
|
|
39
|
-
url: urlUtil.urlCombine(webUrl, '/_api/site/CreateCopyJobs'),
|
|
40
|
-
headers: {
|
|
41
|
-
'accept': 'application/json;odata=nometadata'
|
|
42
|
-
},
|
|
43
|
-
data: {
|
|
44
|
-
exportObjectUris: [sourceAbsoluteUrl],
|
|
45
|
-
destinationUri: urlUtil.urlCombine(tenantUrl, args.options.targetUrl),
|
|
46
|
-
options: {
|
|
47
|
-
"AllowSchemaMismatch": allowSchemaMismatch,
|
|
48
|
-
"IgnoreVersionHistory": true
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
responseType: 'json'
|
|
52
|
-
};
|
|
53
32
|
try {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
33
|
+
const sourcePath = await this.getSourcePath(logger, args.options);
|
|
34
|
+
if (this.verbose) {
|
|
35
|
+
await logger.logToStderr(`Copying folder ${sourcePath} to ${args.options.targetUrl}...`);
|
|
36
|
+
}
|
|
37
|
+
const absoluteSourcePath = this.getAbsoluteUrl(args.options.webUrl, sourcePath);
|
|
38
|
+
let absoluteTargetPath = this.getAbsoluteUrl(args.options.webUrl, args.options.targetUrl) + '/';
|
|
39
|
+
if (args.options.newName) {
|
|
40
|
+
absoluteTargetPath += args.options.newName;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Keep the original folder name
|
|
44
|
+
absoluteTargetPath += sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
|
|
45
|
+
}
|
|
46
|
+
const requestOptions = {
|
|
47
|
+
url: `${args.options.webUrl}/_api/SP.MoveCopyUtil.CopyFolderByPath`,
|
|
48
|
+
headers: {
|
|
49
|
+
accept: 'application/json;odata=nometadata'
|
|
50
|
+
},
|
|
51
|
+
responseType: 'json',
|
|
52
|
+
data: {
|
|
53
|
+
srcPath: {
|
|
54
|
+
DecodedUrl: absoluteSourcePath
|
|
55
|
+
},
|
|
56
|
+
destPath: {
|
|
57
|
+
DecodedUrl: absoluteTargetPath
|
|
58
|
+
},
|
|
59
|
+
options: {
|
|
60
|
+
KeepBoth: args.options.nameConflictBehavior === 'rename',
|
|
61
|
+
ShouldBypassSharedLocks: !!args.options.bypassSharedLock,
|
|
62
|
+
ResetAuthorAndCreatedOnCopy: !!args.options.resetAuthorAndCreated
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
await request.post(requestOptions);
|
|
71
67
|
}
|
|
72
68
|
catch (err) {
|
|
73
69
|
this.handleRejectedODataJsonPromise(err);
|
|
74
70
|
}
|
|
75
71
|
}
|
|
72
|
+
async getSourcePath(logger, options) {
|
|
73
|
+
if (options.sourceUrl) {
|
|
74
|
+
return urlUtil.getServerRelativePath(options.webUrl, options.sourceUrl);
|
|
75
|
+
}
|
|
76
|
+
if (this.verbose) {
|
|
77
|
+
await logger.logToStderr(`Retrieving server-relative path for folder with ID '${options.sourceId}'...`);
|
|
78
|
+
}
|
|
79
|
+
const requestOptions = {
|
|
80
|
+
url: `${options.webUrl}/_api/Web/GetFolderById('${options.sourceId}')?$select=ServerRelativePath`,
|
|
81
|
+
headers: {
|
|
82
|
+
accept: 'application/json;odata=nometadata'
|
|
83
|
+
},
|
|
84
|
+
responseType: 'json'
|
|
85
|
+
};
|
|
86
|
+
const file = await request.get(requestOptions);
|
|
87
|
+
return file.ServerRelativePath.DecodedUrl;
|
|
88
|
+
}
|
|
89
|
+
getAbsoluteUrl(webUrl, url) {
|
|
90
|
+
return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
|
|
91
|
+
}
|
|
76
92
|
}
|
|
77
93
|
_SpoFolderCopyCommand_instances = new WeakSet(), _SpoFolderCopyCommand_initTelemetry = function _SpoFolderCopyCommand_initTelemetry() {
|
|
78
94
|
this.telemetry.push((args) => {
|
|
79
95
|
Object.assign(this.telemetryProperties, {
|
|
80
|
-
|
|
96
|
+
sourceUrl: typeof args.options.sourceUrl !== 'undefined',
|
|
97
|
+
sourceId: typeof args.options.sourceId !== 'undefined',
|
|
98
|
+
newName: typeof args.options.newName !== 'undefined',
|
|
99
|
+
nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined',
|
|
100
|
+
resetAuthorAndCreated: !!args.options.resetAuthorAndCreated,
|
|
101
|
+
bypassSharedLock: !!args.options.bypassSharedLock
|
|
81
102
|
});
|
|
82
103
|
});
|
|
83
104
|
}, _SpoFolderCopyCommand_initOptions = function _SpoFolderCopyCommand_initOptions() {
|
|
84
105
|
this.options.unshift({
|
|
85
106
|
option: '-u, --webUrl <webUrl>'
|
|
86
107
|
}, {
|
|
87
|
-
option: '-s, --sourceUrl
|
|
108
|
+
option: '-s, --sourceUrl [sourceUrl]'
|
|
109
|
+
}, {
|
|
110
|
+
option: '-i, --sourceId [sourceId]'
|
|
88
111
|
}, {
|
|
89
112
|
option: '-t, --targetUrl <targetUrl>'
|
|
90
113
|
}, {
|
|
91
|
-
option: '--
|
|
114
|
+
option: '--newName [newName]'
|
|
115
|
+
}, {
|
|
116
|
+
option: '--nameConflictBehavior [nameConflictBehavior]',
|
|
117
|
+
autocomplete: this.nameConflictBehaviorOptions
|
|
118
|
+
}, {
|
|
119
|
+
option: '--resetAuthorAndCreated'
|
|
120
|
+
}, {
|
|
121
|
+
option: '--bypassSharedLock'
|
|
92
122
|
});
|
|
93
123
|
}, _SpoFolderCopyCommand_initValidators = function _SpoFolderCopyCommand_initValidators() {
|
|
94
|
-
this.validators.push(async (args) =>
|
|
124
|
+
this.validators.push(async (args) => {
|
|
125
|
+
const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
|
|
126
|
+
if (isValidSharePointUrl !== true) {
|
|
127
|
+
return isValidSharePointUrl;
|
|
128
|
+
}
|
|
129
|
+
if (args.options.sourceId && !validation.isValidGuid(args.options.sourceId)) {
|
|
130
|
+
return `'${args.options.sourceId}' is not a valid GUID for sourceId.`;
|
|
131
|
+
}
|
|
132
|
+
if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
|
|
133
|
+
return `'${args.options.nameConflictBehavior}' is not a valid value for nameConflictBehavior. Allowed values are: ${this.nameConflictBehaviorOptions.join(', ')}.`;
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
});
|
|
137
|
+
}, _SpoFolderCopyCommand_initOptionSets = function _SpoFolderCopyCommand_initOptionSets() {
|
|
138
|
+
this.optionSets.push({ options: ['sourceUrl', 'sourceId'] });
|
|
95
139
|
};
|
|
96
140
|
export default new SpoFolderCopyCommand();
|
|
97
141
|
//# sourceMappingURL=folder-copy.js.map
|
|
@@ -40,7 +40,7 @@ class SpoFolderGetCommand extends SpoCommand {
|
|
|
40
40
|
}
|
|
41
41
|
else if (args.options.url) {
|
|
42
42
|
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, args.options.url);
|
|
43
|
-
requestUrl += `/
|
|
43
|
+
requestUrl += `/GetFolderByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')`;
|
|
44
44
|
}
|
|
45
45
|
if (args.options.withPermissions) {
|
|
46
46
|
requestUrl += `?$expand=ListItemAllFields/HasUniqueRoleAssignments,ListItemAllFields/RoleAssignments/Member,ListItemAllFields/RoleAssignments/RoleDefinitionBindings`;
|