@pnp/cli-microsoft365 7.5.0 → 7.6.0-beta.480812d
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 +3 -0
- package/README.md +1 -1
- package/allCommands.json +1 -1
- package/allCommandsFull.json +1 -1
- package/dist/Auth.js +12 -10
- package/dist/AuthServer.js +1 -1
- package/dist/cli/cli.js +1 -1
- package/dist/config.js +2 -2
- package/dist/m365/app/commands/app-get.js +1 -1
- package/dist/m365/app/commands/app-open.js +1 -1
- package/dist/m365/app/commands/permission/permission-add.js +2 -2
- package/dist/m365/app/commands/permission/permission-list.js +2 -2
- package/dist/m365/cli/commands/cli-consent.js +2 -2
- package/dist/m365/cli/commands/cli-reconsent.js +3 -3
- package/dist/m365/commands/login.js +1 -1
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-add.js +1 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-get.js +1 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-list.js +1 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-add.js +1 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-get.js +1 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-list.js +1 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-remove.js +1 -0
- package/dist/m365/entra/commands/app/app-add.js +7 -6
- package/dist/m365/entra/commands/app/app-get.js +4 -3
- package/dist/m365/entra/commands/app/app-list.js +1 -0
- package/dist/m365/entra/commands/app/app-permission-add.js +3 -2
- package/dist/m365/entra/commands/app/app-permission-list.js +1 -1
- package/dist/m365/entra/commands/app/app-remove.js +5 -4
- package/dist/m365/entra/commands/app/app-role-add.js +6 -5
- package/dist/m365/entra/commands/app/app-role-list.js +4 -3
- package/dist/m365/entra/commands/app/app-role-remove.js +6 -5
- package/dist/m365/entra/commands/app/app-set.js +8 -7
- package/dist/m365/entra/commands/approleassignment/approleassignment-add.js +2 -1
- package/dist/m365/entra/commands/approleassignment/approleassignment-list.js +1 -0
- package/dist/m365/entra/commands/approleassignment/approleassignment-remove.js +1 -0
- package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-add.js +1 -0
- package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-get.js +1 -0
- package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-list.js +1 -0
- package/dist/m365/entra/commands/group/group-get.js +1 -0
- package/dist/m365/entra/commands/group/group-list.js +1 -0
- package/dist/m365/entra/commands/group/group-remove.js +1 -0
- package/dist/m365/entra/commands/group/group-user-list.js +1 -0
- package/dist/m365/entra/commands/groupsetting/groupsetting-add.js +1 -0
- package/dist/m365/entra/commands/groupsetting/groupsetting-get.js +1 -0
- package/dist/m365/entra/commands/groupsetting/groupsetting-list.js +1 -0
- package/dist/m365/entra/commands/groupsetting/groupsetting-remove.js +1 -0
- package/dist/m365/entra/commands/groupsetting/groupsetting-set.js +1 -0
- package/dist/m365/entra/commands/groupsettingtemplate/groupsettingtemplate-get.js +1 -0
- package/dist/m365/entra/commands/groupsettingtemplate/groupsettingtemplate-list.js +1 -0
- package/dist/m365/entra/commands/license/license-list.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-add.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-conversation-list.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-conversation-post-list.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-get.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-list.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-clear.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-list.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-remove.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-restore.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-remove.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-renew.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-set.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-teamify.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-user-add.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-user-list.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-user-remove.js +1 -0
- package/dist/m365/entra/commands/m365group/m365group-user-set.js +1 -0
- package/dist/m365/entra/commands/oauth2grant/oauth2grant-add.js +1 -0
- package/dist/m365/entra/commands/oauth2grant/oauth2grant-list.js +1 -0
- package/dist/m365/entra/commands/oauth2grant/oauth2grant-remove.js +1 -0
- package/dist/m365/entra/commands/oauth2grant/oauth2grant-set.js +1 -0
- package/dist/m365/entra/commands/policy/policy-list.js +1 -0
- package/dist/m365/entra/commands/siteclassification/siteclassification-disable.js +1 -0
- package/dist/m365/entra/commands/siteclassification/siteclassification-enable.js +1 -0
- package/dist/m365/entra/commands/siteclassification/siteclassification-get.js +1 -0
- package/dist/m365/entra/commands/siteclassification/siteclassification-set.js +1 -0
- package/dist/m365/entra/commands/user/user-add.js +1 -0
- package/dist/m365/entra/commands/user/user-get.js +1 -0
- package/dist/m365/entra/commands/user/user-guest-add.js +1 -0
- package/dist/m365/entra/commands/user/user-hibp.js +1 -0
- package/dist/m365/entra/commands/user/user-license-add.js +1 -0
- package/dist/m365/entra/commands/user/user-license-list.js +1 -0
- package/dist/m365/entra/commands/user/user-license-remove.js +1 -0
- package/dist/m365/entra/commands/user/user-list.js +1 -0
- package/dist/m365/entra/commands/user/user-password-validate.js +1 -0
- package/dist/m365/entra/commands/user/user-recyclebinitem-clear.js +1 -0
- package/dist/m365/entra/commands/user/user-recyclebinitem-list.js +1 -0
- package/dist/m365/entra/commands/user/user-recyclebinitem-remove.js +2 -1
- package/dist/m365/entra/commands/user/user-recyclebinitem-restore.js +1 -0
- package/dist/m365/entra/commands/user/user-remove.js +1 -0
- package/dist/m365/entra/commands/user/user-set.js +1 -0
- package/dist/m365/entra/commands/user/user-signin-list.js +1 -0
- package/dist/m365/outlook/commands/message/message-remove.js +113 -0
- package/dist/m365/outlook/commands.js +1 -0
- package/dist/m365/pp/commands/managementapp/managementapp-add.js +7 -7
- package/dist/m365/purview/commands/threatassessment/threatassessment-add.js +123 -0
- package/dist/m365/purview/commands/threatassessment/threatassessment-list.js +104 -0
- package/dist/m365/purview/commands.js +3 -1
- package/dist/m365/spfx/commands/project/DeployWorkflow.js +111 -0
- package/dist/m365/spfx/commands/project/project-azuredevops-pipeline-add.js +183 -0
- package/dist/m365/spfx/commands/project/project-azuredevops-pipeline-model.js +2 -0
- package/dist/m365/spfx/commands/project/project-github-workflow-add.js +3 -4
- package/dist/m365/spfx/commands.js +1 -0
- package/dist/m365/spo/commands/folder/FolderColor.js +19 -0
- package/dist/m365/spo/commands/folder/folder-add.js +46 -17
- package/dist/m365/spo/commands/folder/folder-set.js +118 -0
- package/dist/m365/spo/commands/group/group-member-add.js +2 -2
- package/dist/m365/spo/commands/group/group-member-remove.js +1 -1
- package/dist/m365/spo/commands/site/site-apppermission-add.js +2 -2
- package/dist/m365/spo/commands/site/site-recyclebinitem-restore.js +66 -27
- package/dist/m365/spo/commands/tenant/tenant-settings-set.js +1 -1
- package/dist/m365/spo/commands/user/user-remove.js +93 -16
- package/dist/m365/spo/commands.js +1 -0
- package/dist/m365/teams/commands/tab/tab-get.js +1 -1
- package/dist/utils/spo.js +1 -1
- package/docs/docs/cmd/app/app-get.mdx +10 -10
- package/docs/docs/cmd/app/app-open.mdx +6 -6
- package/docs/docs/cmd/app/permission/permission-add.mdx +2 -2
- package/docs/docs/cmd/app/permission/permission-list.mdx +5 -5
- package/docs/docs/cmd/cli/cli-consent.mdx +2 -2
- package/docs/docs/cmd/cli/cli-reconsent.mdx +6 -6
- package/docs/docs/cmd/entra/app/app-permission-add.mdx +6 -6
- package/docs/docs/cmd/entra/approleassignment/approleassignment-add.mdx +1 -1
- package/docs/docs/cmd/entra/approleassignment/approleassignment-list.mdx +4 -4
- package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-add.mdx +1 -1
- package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-get.mdx +1 -1
- package/docs/docs/cmd/entra/group/group-user-add.mdx +7 -7
- package/docs/docs/cmd/entra/oauth2grant/oauth2grant-add.mdx +1 -1
- package/docs/docs/cmd/entra/oauth2grant/oauth2grant-list.mdx +1 -1
- package/docs/docs/cmd/entra/oauth2grant/oauth2grant-remove.mdx +1 -1
- package/docs/docs/cmd/entra/oauth2grant/oauth2grant-set.mdx +1 -1
- package/docs/docs/cmd/external/connection/connection-add.mdx +2 -2
- package/docs/docs/cmd/file/file-add.mdx +1 -1
- package/docs/docs/cmd/graph/schemaextension/schemaextension-add.mdx +2 -2
- package/docs/docs/cmd/graph/schemaextension/schemaextension-set.mdx +1 -1
- package/docs/docs/cmd/login.mdx +18 -18
- package/docs/docs/cmd/outlook/message/message-remove.mdx +67 -0
- package/docs/docs/cmd/pa/app/app-owner-set.mdx +1 -1
- package/docs/docs/cmd/pa/app/app-permission-ensure.mdx +3 -3
- package/docs/docs/cmd/pa/app/app-permission-remove.mdx +3 -3
- package/docs/docs/cmd/planner/plan/plan-add.mdx +1 -1
- package/docs/docs/cmd/planner/roster/roster-add.mdx +5 -5
- package/docs/docs/cmd/planner/roster/roster-get.mdx +7 -7
- package/docs/docs/cmd/planner/roster/roster-member-add.mdx +4 -4
- package/docs/docs/cmd/planner/roster/roster-member-get.mdx +4 -4
- package/docs/docs/cmd/planner/roster/roster-member-list.mdx +2 -2
- package/docs/docs/cmd/planner/roster/roster-member-remove.mdx +5 -5
- package/docs/docs/cmd/planner/roster/roster-plan-list.mdx +1 -1
- package/docs/docs/cmd/planner/roster/roster-remove.mdx +2 -2
- package/docs/docs/cmd/planner/task/task-add.mdx +1 -1
- package/docs/docs/cmd/planner/task/task-get.mdx +1 -1
- package/docs/docs/cmd/planner/task/task-list.mdx +1 -1
- package/docs/docs/cmd/planner/task/task-remove.mdx +1 -1
- package/docs/docs/cmd/planner/task/task-set.mdx +1 -1
- package/docs/docs/cmd/pp/environment/environment-get.mdx +1 -1
- package/docs/docs/cmd/pp/environment/environment-list.mdx +1 -1
- package/docs/docs/cmd/pp/managementapp/managementapp-add.mdx +9 -9
- package/docs/docs/cmd/purview/auditlog/auditlog-list.mdx +1 -1
- package/docs/docs/cmd/purview/sensitivitylabel/sensitivitylabel-get.mdx +1 -1
- package/docs/docs/cmd/purview/sensitivitylabel/sensitivitylabel-list.mdx +1 -1
- package/docs/docs/cmd/purview/sensitivitylabel/sensitivitylabel-policysettings-list.mdx +1 -1
- package/docs/docs/cmd/purview/threatassessment/threatassessment-add.mdx +131 -0
- package/docs/docs/cmd/purview/threatassessment/threatassessment-list.mdx +110 -0
- package/docs/docs/cmd/request.mdx +1 -1
- package/docs/docs/cmd/spfx/project/project-azuredevops-pipeline-add.mdx +87 -0
- package/docs/docs/cmd/spfx/project/project-github-workflow-add.mdx +2 -2
- package/docs/docs/cmd/spo/file/file-roleassignment-add.mdx +3 -3
- package/docs/docs/cmd/spo/file/file-roleassignment-remove.mdx +2 -2
- package/docs/docs/cmd/spo/folder/folder-add.mdx +38 -0
- package/docs/docs/cmd/spo/folder/folder-roleassignment-add.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-roleassignment-remove.mdx +1 -1
- package/docs/docs/cmd/spo/folder/folder-set.mdx +88 -0
- package/docs/docs/cmd/spo/group/group-member-add.mdx +2 -2
- package/docs/docs/cmd/spo/group/group-member-remove.mdx +3 -3
- package/docs/docs/cmd/spo/list/list-roleassignment-add.mdx +3 -3
- package/docs/docs/cmd/spo/list/list-roleassignment-remove.mdx +2 -2
- package/docs/docs/cmd/spo/listitem/listitem-roleassignment-add.mdx +8 -8
- package/docs/docs/cmd/spo/listitem/listitem-roleassignment-remove.mdx +2 -2
- package/docs/docs/cmd/spo/site/site-apppermission-add.mdx +2 -2
- package/docs/docs/cmd/spo/site/site-apppermission-set.mdx +2 -2
- package/docs/docs/cmd/spo/site/site-recyclebinitem-restore.mdx +29 -5
- package/docs/docs/cmd/spo/tenant/tenant-settings-set.mdx +89 -89
- package/docs/docs/cmd/spo/user/user-ensure.mdx +1 -1
- package/docs/docs/cmd/spo/user/user-remove.mdx +40 -9
- package/docs/docs/cmd/spo/web/web-roleassignment-add.mdx +3 -3
- package/docs/docs/cmd/spo/web/web-roleassignment-remove.mdx +2 -2
- package/docs/docs/cmd/teams/channel/channel-member-remove.mdx +1 -1
- package/docs/docs/cmd/teams/channel/channel-member-set.mdx +1 -1
- package/docs/docs/cmd/teams/chat/chat-member-remove.mdx +3 -3
- package/docs/docs/cmd/teams/report/report-directroutingcalls.mdx +1 -1
- package/docs/docs/cmd/teams/report/report-pstncalls.mdx +1 -1
- package/docs/docs/cmd/teams/tab/tab-get.mdx +19 -12
- package/docs/docs/cmd/tenant/security/security-alerts-list.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-group-list.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-group-user-add.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-group-user-remove.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-message-add.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-message-get.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-message-like-set.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-message-list.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-message-remove.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-network-list.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-search.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-user-get.mdx +1 -1
- package/docs/docs/cmd/viva/engage/engage-user-list.mdx +1 -1
- package/npm-shrinkwrap.json +64 -60
- package/package.json +12 -12
- package/dist/m365/spo/commands/folder/folder-rename.js +0 -72
- package/docs/docs/cmd/spo/folder/folder-rename.mdx +0 -44
|
@@ -0,0 +1,183 @@
|
|
|
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 _SpfxProjectAzureDevOpsPipelineAddCommand_instances, _a, _SpfxProjectAzureDevOpsPipelineAddCommand_initTelemetry, _SpfxProjectAzureDevOpsPipelineAddCommand_initOptions, _SpfxProjectAzureDevOpsPipelineAddCommand_initValidators;
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import yaml from 'yaml';
|
|
10
|
+
import { CommandError } from '../../../../Command.js';
|
|
11
|
+
import commands from '../../commands.js';
|
|
12
|
+
import { BaseProjectCommand } from './base-project-command.js';
|
|
13
|
+
import { validation } from '../../../../utils/validation.js';
|
|
14
|
+
import { pipeline } from './DeployWorkflow.js';
|
|
15
|
+
import { fsUtil } from '../../../../utils/fsUtil.js';
|
|
16
|
+
import { parse } from 'semver';
|
|
17
|
+
class SpfxProjectAzureDevOpsPipelineAddCommand extends BaseProjectCommand {
|
|
18
|
+
get name() {
|
|
19
|
+
return commands.PROJECT_AZUREDEVOPS_PIPELINE_ADD;
|
|
20
|
+
}
|
|
21
|
+
get description() {
|
|
22
|
+
return 'Adds a Azure DevOps Pipeline for a SharePoint Framework project.';
|
|
23
|
+
}
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
_SpfxProjectAzureDevOpsPipelineAddCommand_instances.add(this);
|
|
27
|
+
__classPrivateFieldGet(this, _SpfxProjectAzureDevOpsPipelineAddCommand_instances, "m", _SpfxProjectAzureDevOpsPipelineAddCommand_initTelemetry).call(this);
|
|
28
|
+
__classPrivateFieldGet(this, _SpfxProjectAzureDevOpsPipelineAddCommand_instances, "m", _SpfxProjectAzureDevOpsPipelineAddCommand_initOptions).call(this);
|
|
29
|
+
__classPrivateFieldGet(this, _SpfxProjectAzureDevOpsPipelineAddCommand_instances, "m", _SpfxProjectAzureDevOpsPipelineAddCommand_initValidators).call(this);
|
|
30
|
+
}
|
|
31
|
+
async commandAction(logger, args) {
|
|
32
|
+
this.projectRootPath = this.getProjectRoot(process.cwd());
|
|
33
|
+
if (this.projectRootPath === null) {
|
|
34
|
+
throw new CommandError(`Couldn't find project root folder`, _a.ERROR_NO_PROJECT_ROOT_FOLDER);
|
|
35
|
+
}
|
|
36
|
+
const solutionPackageJsonFile = path.join(this.projectRootPath, 'package.json');
|
|
37
|
+
const packageJson = fs.readFileSync(solutionPackageJsonFile, 'utf-8');
|
|
38
|
+
const solutionName = JSON.parse(packageJson).name;
|
|
39
|
+
if (this.debug) {
|
|
40
|
+
logger.logToStderr(`Adding Azure DevOps pipeline in the current SPFx project`);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
this.updatePipeline(solutionName, pipeline, args.options);
|
|
44
|
+
this.savePipeline(pipeline);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new CommandError(error);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
savePipeline(pipeline) {
|
|
51
|
+
const azureDevOpsPath = path.join(this.projectRootPath, '.azuredevops');
|
|
52
|
+
fsUtil.ensureDirectory(azureDevOpsPath);
|
|
53
|
+
const pipelinesPath = path.join(azureDevOpsPath, 'pipelines');
|
|
54
|
+
fsUtil.ensureDirectory(pipelinesPath);
|
|
55
|
+
const pipelineFile = path.join(pipelinesPath, 'deploy-spfx-solution.yml');
|
|
56
|
+
fs.writeFileSync(path.resolve(pipelineFile), yaml.stringify(pipeline), 'utf-8');
|
|
57
|
+
}
|
|
58
|
+
updatePipeline(solutionName, pipeline, options) {
|
|
59
|
+
if (options.name) {
|
|
60
|
+
pipeline.name = options.name;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
delete pipeline.name;
|
|
64
|
+
}
|
|
65
|
+
if (options.branchName) {
|
|
66
|
+
pipeline.trigger.branches.include[0] = options.branchName;
|
|
67
|
+
}
|
|
68
|
+
const version = this.getProjectVersion();
|
|
69
|
+
if (!version) {
|
|
70
|
+
throw `Unable to determine the version of the current SharePoint Framework project`;
|
|
71
|
+
}
|
|
72
|
+
const minorVersion = parse(version)?.minor;
|
|
73
|
+
if (minorVersion === undefined) {
|
|
74
|
+
throw `Unable to determine the minor version of the current SharePoint Framework project`;
|
|
75
|
+
}
|
|
76
|
+
if (minorVersion < 18) {
|
|
77
|
+
const node = this.getNodeAction(pipeline);
|
|
78
|
+
if (node.inputs) {
|
|
79
|
+
node.inputs.versionSpec = '16.x';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const script = this.getScriptAction(pipeline);
|
|
83
|
+
if (script.script) {
|
|
84
|
+
if (options.loginMethod === 'user') {
|
|
85
|
+
script.script = script.script.replace(`{{login}}`, `m365 login --authType password --userName '$(UserName)' --password '$(Password)'`);
|
|
86
|
+
pipeline.variables = pipeline.variables.filter(v => v.name !== 'CertificateBase64Encoded' &&
|
|
87
|
+
v.name !== 'CertificateSecureFileId' &&
|
|
88
|
+
v.name !== 'CertificatePassword' &&
|
|
89
|
+
v.name !== 'EntraAppId' &&
|
|
90
|
+
v.name !== 'TenantId');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
script.script = script.script.replace(`{{login}}`, `m365 login --authType certificate --certificateBase64Encoded '$(CertificateBase64Encoded)' --password '$(CertificatePassword)' --appId '$(EntraAppId)' --tenant '$(TenantId)'`);
|
|
94
|
+
pipeline.variables = pipeline.variables.filter(v => v.name !== 'UserName' &&
|
|
95
|
+
v.name !== 'Password');
|
|
96
|
+
}
|
|
97
|
+
if (options.scope === 'sitecollection') {
|
|
98
|
+
script.script = script.script.replace(`{{deploy}}`, `m365 spo app deploy --name '$(PackageName)' --appCatalogScope sitecollection --appCatalogUrl '$(SiteAppCatalogUrl)'`);
|
|
99
|
+
script.script = script.script.replace(`{{addApp}}`, `m365 spo app add --filePath '$(Build.SourcesDirectory)/sharepoint/solution/$(PackageName)' --appCatalogScope sitecollection --appCatalogUrl '$(SiteAppCatalogUrl)' --overwrite`);
|
|
100
|
+
this.assignPipelineVariables(pipeline, 'SiteAppCatalogUrl', options.siteUrl);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
script.script = script.script.replace(`{{deploy}}`, `m365 spo app deploy --name '$(PackageName)' --appCatalogScope 'tenant'`);
|
|
104
|
+
script.script = script.script.replace(`{{addApp}}`, `m365 spo app add --filePath '$(Build.SourcesDirectory)/sharepoint/solution/$(PackageName)' --overwrite`);
|
|
105
|
+
pipeline.variables = pipeline.variables.filter(v => v.name !== 'SiteAppCatalogUrl');
|
|
106
|
+
}
|
|
107
|
+
if (solutionName) {
|
|
108
|
+
this.assignPipelineVariables(pipeline, 'PackageName', `${solutionName}.sppkg`);
|
|
109
|
+
}
|
|
110
|
+
if (options.skipFeatureDeployment) {
|
|
111
|
+
script.script = script.script.replace(`m365 spo app deploy `, `m365 spo app deploy --skipFeatureDeployment `);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
assignPipelineVariables(pipeline, variableName, newVariableValue) {
|
|
116
|
+
const variable = pipeline.variables.find(v => v.name === variableName);
|
|
117
|
+
if (variable) {
|
|
118
|
+
variable.value = newVariableValue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
getScriptAction(pipeline) {
|
|
122
|
+
const steps = this.getPipelineSteps(pipeline);
|
|
123
|
+
return steps.find(step => step.script);
|
|
124
|
+
}
|
|
125
|
+
getNodeAction(pipeline) {
|
|
126
|
+
const steps = this.getPipelineSteps(pipeline);
|
|
127
|
+
return steps.find(step => step.task && step.task.indexOf('NodeTool') >= 0);
|
|
128
|
+
}
|
|
129
|
+
getPipelineSteps(pipeline) {
|
|
130
|
+
return pipeline.stages[0].jobs[0].steps;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
_a = SpfxProjectAzureDevOpsPipelineAddCommand, _SpfxProjectAzureDevOpsPipelineAddCommand_instances = new WeakSet(), _SpfxProjectAzureDevOpsPipelineAddCommand_initTelemetry = function _SpfxProjectAzureDevOpsPipelineAddCommand_initTelemetry() {
|
|
134
|
+
this.telemetry.push((args) => {
|
|
135
|
+
Object.assign(this.telemetryProperties, {
|
|
136
|
+
name: typeof args.options.name !== 'undefined',
|
|
137
|
+
branchName: typeof args.options.branchName !== 'undefined',
|
|
138
|
+
loginMethod: typeof args.options.loginMethod !== 'undefined',
|
|
139
|
+
scope: typeof args.options.scope !== 'undefined',
|
|
140
|
+
skipFeatureDeployment: !!args.options.skipFeatureDeployment
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}, _SpfxProjectAzureDevOpsPipelineAddCommand_initOptions = function _SpfxProjectAzureDevOpsPipelineAddCommand_initOptions() {
|
|
144
|
+
this.options.unshift({
|
|
145
|
+
option: '-n, --name [name]'
|
|
146
|
+
}, {
|
|
147
|
+
option: '-b, --branchName [branchName]'
|
|
148
|
+
}, {
|
|
149
|
+
option: '-l, --loginMethod [loginMethod]',
|
|
150
|
+
autocomplete: _a.loginMethod
|
|
151
|
+
}, {
|
|
152
|
+
option: '-s, --scope [scope]',
|
|
153
|
+
autocomplete: _a.scope
|
|
154
|
+
}, {
|
|
155
|
+
option: '-u, --siteUrl [siteUrl]'
|
|
156
|
+
}, {
|
|
157
|
+
option: '--skipFeatureDeployment'
|
|
158
|
+
});
|
|
159
|
+
}, _SpfxProjectAzureDevOpsPipelineAddCommand_initValidators = function _SpfxProjectAzureDevOpsPipelineAddCommand_initValidators() {
|
|
160
|
+
this.validators.push(async (args) => {
|
|
161
|
+
if (args.options.scope && args.options.scope === 'sitecollection') {
|
|
162
|
+
if (!args.options.siteUrl) {
|
|
163
|
+
return `siteUrl option has to be defined when scope set to ${args.options.scope}`;
|
|
164
|
+
}
|
|
165
|
+
const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.siteUrl);
|
|
166
|
+
if (isValidSharePointUrl !== true) {
|
|
167
|
+
return isValidSharePointUrl;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (args.options.loginMethod && _a.loginMethod.indexOf(args.options.loginMethod) < 0) {
|
|
171
|
+
return `${args.options.loginMethod} is not a valid login method. Allowed values are ${_a.loginMethod.join(', ')}`;
|
|
172
|
+
}
|
|
173
|
+
if (args.options.scope && _a.scope.indexOf(args.options.scope) < 0) {
|
|
174
|
+
return `${args.options.scope} is not a valid scope. Allowed values are ${_a.scope.join(', ')}`;
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
SpfxProjectAzureDevOpsPipelineAddCommand.loginMethod = ['application', 'user'];
|
|
180
|
+
SpfxProjectAzureDevOpsPipelineAddCommand.scope = ['tenant', 'sitecollection'];
|
|
181
|
+
SpfxProjectAzureDevOpsPipelineAddCommand.ERROR_NO_PROJECT_ROOT_FOLDER = 1;
|
|
182
|
+
export default new SpfxProjectAzureDevOpsPipelineAddCommand();
|
|
183
|
+
//# sourceMappingURL=project-azuredevops-pipeline-add.js.map
|
|
@@ -13,6 +13,7 @@ import { validation } from '../../../../utils/validation.js';
|
|
|
13
13
|
import commands from '../../commands.js';
|
|
14
14
|
import { workflow } from './DeployWorkflow.js';
|
|
15
15
|
import { BaseProjectCommand } from './base-project-command.js';
|
|
16
|
+
import { parse } from 'semver';
|
|
16
17
|
class SpfxProjectGithubWorkflowAddCommand extends BaseProjectCommand {
|
|
17
18
|
get name() {
|
|
18
19
|
return commands.PROJECT_GITHUB_WORKFLOW_ADD;
|
|
@@ -67,10 +68,8 @@ class SpfxProjectGithubWorkflowAddCommand extends BaseProjectCommand {
|
|
|
67
68
|
if (!version) {
|
|
68
69
|
throw `Unable to determine the version of the current SharePoint Framework project`;
|
|
69
70
|
}
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
const minorVersion = minorVersionString ? Number(minorVersionString) : null;
|
|
73
|
-
if (minorVersion === null || isNaN(minorVersion)) {
|
|
71
|
+
const minorVersion = parse(version)?.minor;
|
|
72
|
+
if (minorVersion === undefined) {
|
|
74
73
|
throw `Unable to determine the minor version of the current SharePoint Framework project`;
|
|
75
74
|
}
|
|
76
75
|
if (minorVersion < 18) {
|
|
@@ -2,6 +2,7 @@ const prefix = 'spfx';
|
|
|
2
2
|
export default {
|
|
3
3
|
DOCTOR: `${prefix} doctor`,
|
|
4
4
|
PACKAGE_GENERATE: `${prefix} package generate`,
|
|
5
|
+
PROJECT_AZUREDEVOPS_PIPELINE_ADD: `${prefix} project azuredevops pipeline add`,
|
|
5
6
|
PROJECT_DOCTOR: `${prefix} project doctor`,
|
|
6
7
|
PROJECT_EXTERNALIZE: `${prefix} project externalize`,
|
|
7
8
|
PROJECT_GITHUB_WORKFLOW_ADD: `${prefix} project github workflow add`,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const FolderColorValues = {
|
|
2
|
+
yellow: '0',
|
|
3
|
+
darkRed: '1',
|
|
4
|
+
darkOrange: '2',
|
|
5
|
+
darkGreen: '3',
|
|
6
|
+
darkTeal: '4',
|
|
7
|
+
darkBlue: '5',
|
|
8
|
+
darkPurple: '6',
|
|
9
|
+
darkPink: '7',
|
|
10
|
+
grey: '8',
|
|
11
|
+
lightRed: '9',
|
|
12
|
+
lightOrange: '10',
|
|
13
|
+
lightGreen: '11',
|
|
14
|
+
lightTeal: '12',
|
|
15
|
+
lightBlue: '13',
|
|
16
|
+
lightPurple: '14',
|
|
17
|
+
lightPink: '15'
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=FolderColor.js.map
|
|
@@ -3,13 +3,14 @@ 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 _SpoFolderAddCommand_instances, _SpoFolderAddCommand_initOptions, _SpoFolderAddCommand_initValidators, _SpoFolderAddCommand_initTypes;
|
|
6
|
+
var _SpoFolderAddCommand_instances, _SpoFolderAddCommand_initTelemetry, _SpoFolderAddCommand_initOptions, _SpoFolderAddCommand_initValidators, _SpoFolderAddCommand_initTypes;
|
|
7
7
|
import request from '../../../../request.js';
|
|
8
8
|
import { formatting } from '../../../../utils/formatting.js';
|
|
9
9
|
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
10
10
|
import { validation } from '../../../../utils/validation.js';
|
|
11
11
|
import SpoCommand from '../../../base/SpoCommand.js';
|
|
12
12
|
import commands from '../../commands.js';
|
|
13
|
+
import { FolderColorValues } from './FolderColor.js';
|
|
13
14
|
class SpoFolderAddCommand extends SpoCommand {
|
|
14
15
|
get name() {
|
|
15
16
|
return commands.FOLDER_ADD;
|
|
@@ -20,25 +21,35 @@ class SpoFolderAddCommand extends SpoCommand {
|
|
|
20
21
|
constructor() {
|
|
21
22
|
super();
|
|
22
23
|
_SpoFolderAddCommand_instances.add(this);
|
|
24
|
+
__classPrivateFieldGet(this, _SpoFolderAddCommand_instances, "m", _SpoFolderAddCommand_initTelemetry).call(this);
|
|
23
25
|
__classPrivateFieldGet(this, _SpoFolderAddCommand_instances, "m", _SpoFolderAddCommand_initOptions).call(this);
|
|
24
26
|
__classPrivateFieldGet(this, _SpoFolderAddCommand_instances, "m", _SpoFolderAddCommand_initValidators).call(this);
|
|
25
27
|
__classPrivateFieldGet(this, _SpoFolderAddCommand_instances, "m", _SpoFolderAddCommand_initTypes).call(this);
|
|
26
28
|
}
|
|
27
29
|
async commandAction(logger, args) {
|
|
28
|
-
if (this.verbose) {
|
|
29
|
-
await logger.logToStderr(`Adding folder to site ${args.options.webUrl}...`);
|
|
30
|
-
}
|
|
31
|
-
const parentFolderServerRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.parentFolderUrl);
|
|
32
|
-
const serverRelativeUrl = `${parentFolderServerRelativeUrl}/${args.options.name}`;
|
|
33
|
-
const requestUrl = `${args.options.webUrl}/_api/web/folders/addUsingPath(decodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
34
|
-
const requestOptions = {
|
|
35
|
-
url: requestUrl,
|
|
36
|
-
headers: {
|
|
37
|
-
'accept': 'application/json;odata=nometadata'
|
|
38
|
-
},
|
|
39
|
-
responseType: 'json'
|
|
40
|
-
};
|
|
41
30
|
try {
|
|
31
|
+
if (this.verbose) {
|
|
32
|
+
await logger.logToStderr(`Adding folder to site ${args.options.webUrl}...`);
|
|
33
|
+
}
|
|
34
|
+
const parentFolderServerRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.parentFolderUrl);
|
|
35
|
+
const serverRelativeUrl = `${parentFolderServerRelativeUrl}/${args.options.name}`;
|
|
36
|
+
const requestOptions = {
|
|
37
|
+
headers: {
|
|
38
|
+
'accept': 'application/json;odata=nometadata'
|
|
39
|
+
},
|
|
40
|
+
responseType: 'json'
|
|
41
|
+
};
|
|
42
|
+
if (args.options.color === undefined) {
|
|
43
|
+
requestOptions.url = `${args.options.webUrl}/_api/web/folders/addUsingPath(decodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
requestOptions.url = `${args.options.webUrl}/_api/foldercoloring/createfolder(DecodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}', overwrite=false)`;
|
|
47
|
+
requestOptions.data = {
|
|
48
|
+
coloringInformation: {
|
|
49
|
+
ColorHex: FolderColorValues[args.options.color] || args.options.color
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
42
53
|
const folder = await request.post(requestOptions);
|
|
43
54
|
await logger.log(folder);
|
|
44
55
|
}
|
|
@@ -47,18 +58,36 @@ class SpoFolderAddCommand extends SpoCommand {
|
|
|
47
58
|
}
|
|
48
59
|
}
|
|
49
60
|
}
|
|
50
|
-
_SpoFolderAddCommand_instances = new WeakSet(),
|
|
61
|
+
_SpoFolderAddCommand_instances = new WeakSet(), _SpoFolderAddCommand_initTelemetry = function _SpoFolderAddCommand_initTelemetry() {
|
|
62
|
+
this.telemetry.push((args) => {
|
|
63
|
+
Object.assign(this.telemetryProperties, {
|
|
64
|
+
color: typeof args.options.color !== 'undefined'
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}, _SpoFolderAddCommand_initOptions = function _SpoFolderAddCommand_initOptions() {
|
|
51
68
|
this.options.unshift({
|
|
52
69
|
option: '-u, --webUrl <webUrl>'
|
|
53
70
|
}, {
|
|
54
71
|
option: '-p, --parentFolderUrl <parentFolderUrl>'
|
|
55
72
|
}, {
|
|
56
73
|
option: '-n, --name <name>'
|
|
74
|
+
}, {
|
|
75
|
+
option: '--color [color]',
|
|
76
|
+
autocomplete: Object.keys(FolderColorValues)
|
|
57
77
|
});
|
|
58
78
|
}, _SpoFolderAddCommand_initValidators = function _SpoFolderAddCommand_initValidators() {
|
|
59
|
-
this.validators.push(async (args) =>
|
|
79
|
+
this.validators.push(async (args) => {
|
|
80
|
+
const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
|
|
81
|
+
if (isValidSharePointUrl !== true) {
|
|
82
|
+
return isValidSharePointUrl;
|
|
83
|
+
}
|
|
84
|
+
if (args.options.color && !Object.entries(FolderColorValues).flat().includes(args.options.color)) {
|
|
85
|
+
return `'${args.options.color}' is not a valid value for option 'color'. Allowed values are ${Object.keys(FolderColorValues).join(', ')}, ${Object.values(FolderColorValues).join(', ')}.`;
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
});
|
|
60
89
|
}, _SpoFolderAddCommand_initTypes = function _SpoFolderAddCommand_initTypes() {
|
|
61
|
-
this.types.string.push('webUrl', 'parentFolderUrl', 'name');
|
|
90
|
+
this.types.string.push('webUrl', 'parentFolderUrl', 'name', 'color');
|
|
62
91
|
};
|
|
63
92
|
export default new SpoFolderAddCommand();
|
|
64
93
|
//# sourceMappingURL=folder-add.js.map
|
|
@@ -0,0 +1,118 @@
|
|
|
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 _SpoFolderSetCommand_instances, _SpoFolderSetCommand_initTelemetry, _SpoFolderSetCommand_initOptions, _SpoFolderSetCommand_initValidators, _SpoFolderSetCommand_initTypes;
|
|
7
|
+
import request from '../../../../request.js';
|
|
8
|
+
import { formatting } from '../../../../utils/formatting.js';
|
|
9
|
+
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
10
|
+
import { validation } from '../../../../utils/validation.js';
|
|
11
|
+
import SpoCommand from '../../../base/SpoCommand.js';
|
|
12
|
+
import commands from '../../commands.js';
|
|
13
|
+
import { FolderColorValues } from './FolderColor.js';
|
|
14
|
+
class SpoFolderSetCommand extends SpoCommand {
|
|
15
|
+
get name() {
|
|
16
|
+
return commands.FOLDER_SET;
|
|
17
|
+
}
|
|
18
|
+
get description() {
|
|
19
|
+
return 'Updates a folder';
|
|
20
|
+
}
|
|
21
|
+
alias() {
|
|
22
|
+
return [commands.FOLDER_RENAME];
|
|
23
|
+
}
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
_SpoFolderSetCommand_instances.add(this);
|
|
27
|
+
__classPrivateFieldGet(this, _SpoFolderSetCommand_instances, "m", _SpoFolderSetCommand_initTelemetry).call(this);
|
|
28
|
+
__classPrivateFieldGet(this, _SpoFolderSetCommand_instances, "m", _SpoFolderSetCommand_initOptions).call(this);
|
|
29
|
+
__classPrivateFieldGet(this, _SpoFolderSetCommand_instances, "m", _SpoFolderSetCommand_initValidators).call(this);
|
|
30
|
+
__classPrivateFieldGet(this, _SpoFolderSetCommand_instances, "m", _SpoFolderSetCommand_initTypes).call(this);
|
|
31
|
+
}
|
|
32
|
+
getExcludedOptionsWithUrls() {
|
|
33
|
+
return ['url'];
|
|
34
|
+
}
|
|
35
|
+
async commandAction(logger, args) {
|
|
36
|
+
try {
|
|
37
|
+
await this.showDeprecationWarning(logger, this.alias()[0], this.name);
|
|
38
|
+
if (this.verbose) {
|
|
39
|
+
await logger.logToStderr(`Updating folder '${args.options.name}'...`);
|
|
40
|
+
}
|
|
41
|
+
const serverRelativePath = urlUtil.getServerRelativePath(args.options.webUrl, args.options.url);
|
|
42
|
+
if (!args.options.color) {
|
|
43
|
+
const requestOptions = {
|
|
44
|
+
url: `${args.options.webUrl}/_api/Web/GetFolderByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')/ListItemAllFields`,
|
|
45
|
+
headers: {
|
|
46
|
+
accept: 'application/json;odata=nometadata',
|
|
47
|
+
'if-match': '*'
|
|
48
|
+
},
|
|
49
|
+
data: {
|
|
50
|
+
FileLeafRef: args.options.name,
|
|
51
|
+
Title: args.options.name
|
|
52
|
+
},
|
|
53
|
+
responseType: 'json'
|
|
54
|
+
};
|
|
55
|
+
const response = await request.patch(requestOptions);
|
|
56
|
+
if (response && response['odata.null'] === true) {
|
|
57
|
+
throw 'Folder not found.';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const requestOptions = {
|
|
62
|
+
url: `${args.options.webUrl}/_api/foldercoloring/${args.options.name ? 'renamefolder' : 'stampcolor'}(DecodedUrl='${formatting.encodeQueryParameter(serverRelativePath)}')`,
|
|
63
|
+
headers: {
|
|
64
|
+
accept: 'application/json;odata=nometadata'
|
|
65
|
+
},
|
|
66
|
+
responseType: 'json',
|
|
67
|
+
data: {
|
|
68
|
+
coloringInformation: {
|
|
69
|
+
ColorHex: FolderColorValues[args.options.color] || args.options.color
|
|
70
|
+
},
|
|
71
|
+
newName: args.options.name
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
await request.post(requestOptions);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
this.handleRejectedODataJsonPromise(err);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
_SpoFolderSetCommand_instances = new WeakSet(), _SpoFolderSetCommand_initTelemetry = function _SpoFolderSetCommand_initTelemetry() {
|
|
83
|
+
this.telemetry.push((args) => {
|
|
84
|
+
Object.assign(this.telemetryProperties, {
|
|
85
|
+
name: typeof args.options.name !== 'undefined',
|
|
86
|
+
color: typeof args.options.color !== 'undefined'
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}, _SpoFolderSetCommand_initOptions = function _SpoFolderSetCommand_initOptions() {
|
|
90
|
+
this.options.unshift({
|
|
91
|
+
option: '-u, --webUrl <webUrl>'
|
|
92
|
+
}, {
|
|
93
|
+
option: '--url <url>'
|
|
94
|
+
}, {
|
|
95
|
+
option: '-n, --name [name]'
|
|
96
|
+
}, {
|
|
97
|
+
option: '--color [color]',
|
|
98
|
+
autocomplete: Object.keys(FolderColorValues)
|
|
99
|
+
});
|
|
100
|
+
}, _SpoFolderSetCommand_initValidators = function _SpoFolderSetCommand_initValidators() {
|
|
101
|
+
this.validators.push(async (args) => {
|
|
102
|
+
const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
|
|
103
|
+
if (isValidSharePointUrl !== true) {
|
|
104
|
+
return isValidSharePointUrl;
|
|
105
|
+
}
|
|
106
|
+
if (args.options.color === undefined && args.options.name === undefined) {
|
|
107
|
+
return `Specify at least one of the options: name or color.`;
|
|
108
|
+
}
|
|
109
|
+
if (args.options.color && !Object.entries(FolderColorValues).flat().includes(args.options.color)) {
|
|
110
|
+
return `'${args.options.color}' is not a valid value for option 'color'. Allowed values are ${Object.keys(FolderColorValues).join(', ')}, ${Object.values(FolderColorValues).join(', ')}.`;
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
}, _SpoFolderSetCommand_initTypes = function _SpoFolderSetCommand_initTypes() {
|
|
115
|
+
this.types.string.push('webUrl', 'url', 'name', 'color');
|
|
116
|
+
};
|
|
117
|
+
export default new SpoFolderSetCommand();
|
|
118
|
+
//# sourceMappingURL=folder-set.js.map
|
|
@@ -109,14 +109,14 @@ class SpoGroupMemberAddCommand extends SpoCommand {
|
|
|
109
109
|
}
|
|
110
110
|
else if (args.options.entraGroupNames) {
|
|
111
111
|
if (this.verbose) {
|
|
112
|
-
await logger.logToStderr(`Getting ID of
|
|
112
|
+
await logger.logToStderr(`Getting ID of Microsoft Entra group ${trimmedIdentifier}`);
|
|
113
113
|
}
|
|
114
114
|
const groupId = await entraGroup.getGroupIdByDisplayName(trimmedIdentifier);
|
|
115
115
|
validUserNames.push(groupId);
|
|
116
116
|
}
|
|
117
117
|
else {
|
|
118
118
|
if (this.verbose) {
|
|
119
|
-
await logger.logToStderr(`Getting
|
|
119
|
+
await logger.logToStderr(`Getting Microsoft Entra ID for user ${trimmedIdentifier}`);
|
|
120
120
|
}
|
|
121
121
|
const upn = await entraUser.getUserIdByEmail(trimmedIdentifier);
|
|
122
122
|
validUserNames.push(upn);
|
|
@@ -122,7 +122,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
|
|
|
122
122
|
foundGroups = getGroupMemberListOutput.filter((x) => { return x.Title === args.options.entraGroupName && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
|
|
123
123
|
}
|
|
124
124
|
if (foundGroups.length === 0) {
|
|
125
|
-
throw `The
|
|
125
|
+
throw `The Microsoft Entra group ${args.options.entraGroupId || args.options.entraGroupName} is not found in SharePoint group ${args.options.groupId || args.options.groupName}`;
|
|
126
126
|
}
|
|
127
127
|
return foundGroups[0].Id;
|
|
128
128
|
}
|
|
@@ -51,10 +51,10 @@ class SpoSiteAppPermissionAddCommand extends GraphCommand {
|
|
|
51
51
|
const response = await request.get(appRequestOptions);
|
|
52
52
|
const appItem = response.value[0];
|
|
53
53
|
if (!appItem) {
|
|
54
|
-
throw "The specified
|
|
54
|
+
throw "The specified Microsoft Entra app does not exist";
|
|
55
55
|
}
|
|
56
56
|
if (response.value.length > 1) {
|
|
57
|
-
throw `Multiple
|
|
57
|
+
throw `Multiple Microsoft Entra apps with displayName ${args.options.appDisplayName} found: ${response.value.map(x => x.appId)}`;
|
|
58
58
|
}
|
|
59
59
|
return {
|
|
60
60
|
appId: appItem.appId,
|
|
@@ -3,7 +3,7 @@ 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 _SpoSiteRecycleBinItemRestoreCommand_instances, _SpoSiteRecycleBinItemRestoreCommand_initOptions, _SpoSiteRecycleBinItemRestoreCommand_initValidators;
|
|
6
|
+
var _SpoSiteRecycleBinItemRestoreCommand_instances, _SpoSiteRecycleBinItemRestoreCommand_initOptions, _SpoSiteRecycleBinItemRestoreCommand_initValidators, _SpoSiteRecycleBinItemRestoreCommand_initTypes;
|
|
7
7
|
import request from '../../../../request.js';
|
|
8
8
|
import { formatting } from '../../../../utils/formatting.js';
|
|
9
9
|
import { validation } from '../../../../utils/validation.js';
|
|
@@ -21,43 +21,73 @@ class SpoSiteRecycleBinItemRestoreCommand extends SpoCommand {
|
|
|
21
21
|
_SpoSiteRecycleBinItemRestoreCommand_instances.add(this);
|
|
22
22
|
__classPrivateFieldGet(this, _SpoSiteRecycleBinItemRestoreCommand_instances, "m", _SpoSiteRecycleBinItemRestoreCommand_initOptions).call(this);
|
|
23
23
|
__classPrivateFieldGet(this, _SpoSiteRecycleBinItemRestoreCommand_instances, "m", _SpoSiteRecycleBinItemRestoreCommand_initValidators).call(this);
|
|
24
|
+
__classPrivateFieldGet(this, _SpoSiteRecycleBinItemRestoreCommand_instances, "m", _SpoSiteRecycleBinItemRestoreCommand_initTypes).call(this);
|
|
24
25
|
}
|
|
25
26
|
async commandAction(logger, args) {
|
|
26
27
|
if (this.verbose) {
|
|
27
28
|
await logger.logToStderr(`Restoring items from recycle bin at ${args.options.siteUrl}...`);
|
|
28
29
|
}
|
|
29
|
-
const
|
|
30
|
-
const ids = formatting.splitAndTrim(args.options.ids);
|
|
31
|
-
const idsChunks = [];
|
|
32
|
-
while (ids.length) {
|
|
33
|
-
idsChunks.push(ids.splice(0, 20));
|
|
34
|
-
}
|
|
30
|
+
const baseUrl = `${args.options.siteUrl}/_api`;
|
|
35
31
|
try {
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
32
|
+
if (args.options.ids) {
|
|
33
|
+
const requestUrl = baseUrl + '/site/RecycleBin/RestoreByIds';
|
|
34
|
+
const ids = formatting.splitAndTrim(args.options.ids);
|
|
35
|
+
const idsChunks = [];
|
|
36
|
+
while (ids.length) {
|
|
37
|
+
idsChunks.push(ids.splice(0, 20));
|
|
38
|
+
}
|
|
39
|
+
await Promise.all(idsChunks.map((idsChunk) => {
|
|
40
|
+
const requestOptions = {
|
|
41
|
+
url: requestUrl,
|
|
42
|
+
headers: {
|
|
43
|
+
'accept': 'application/json;odata=nometadata',
|
|
44
|
+
'content-type': 'application/json'
|
|
45
|
+
},
|
|
46
|
+
responseType: 'json',
|
|
47
|
+
data: {
|
|
48
|
+
ids: idsChunk
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
return request.post(requestOptions);
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
if (args.options.allPrimary && args.options.allSecondary) {
|
|
56
|
+
await this.restoreRecycleBinStage(baseUrl + '/site/RecycleBin/RestoreAll');
|
|
57
|
+
}
|
|
58
|
+
else if (args.options.allPrimary) {
|
|
59
|
+
await this.restoreRecycleBinStage(baseUrl + '/web/RecycleBin/RestoreAll');
|
|
60
|
+
}
|
|
61
|
+
else if (args.options.allSecondary) {
|
|
62
|
+
await this.restoreRecycleBinStage(baseUrl + '/site/GetRecycleBinItems(rowLimit=2000000000,itemState=2)/RestoreAll');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
50
65
|
}
|
|
51
66
|
catch (err) {
|
|
52
67
|
this.handleRejectedODataJsonPromise(err);
|
|
53
68
|
}
|
|
54
69
|
}
|
|
70
|
+
async restoreRecycleBinStage(requestUrl) {
|
|
71
|
+
const requestOptions = {
|
|
72
|
+
url: requestUrl,
|
|
73
|
+
headers: {
|
|
74
|
+
accept: 'application/json;odata=nometadata',
|
|
75
|
+
'content-type': 'application/json'
|
|
76
|
+
},
|
|
77
|
+
responseType: 'json'
|
|
78
|
+
};
|
|
79
|
+
return request.post(requestOptions);
|
|
80
|
+
}
|
|
55
81
|
}
|
|
56
82
|
_SpoSiteRecycleBinItemRestoreCommand_instances = new WeakSet(), _SpoSiteRecycleBinItemRestoreCommand_initOptions = function _SpoSiteRecycleBinItemRestoreCommand_initOptions() {
|
|
57
83
|
this.options.unshift({
|
|
58
84
|
option: '-u, --siteUrl <siteUrl>'
|
|
59
85
|
}, {
|
|
60
|
-
option: '-i, --ids
|
|
86
|
+
option: '-i, --ids [ids]'
|
|
87
|
+
}, {
|
|
88
|
+
option: '--allPrimary'
|
|
89
|
+
}, {
|
|
90
|
+
option: '--allSecondary'
|
|
61
91
|
});
|
|
62
92
|
}, _SpoSiteRecycleBinItemRestoreCommand_initValidators = function _SpoSiteRecycleBinItemRestoreCommand_initValidators() {
|
|
63
93
|
this.validators.push(async (args) => {
|
|
@@ -65,14 +95,23 @@ _SpoSiteRecycleBinItemRestoreCommand_instances = new WeakSet(), _SpoSiteRecycleB
|
|
|
65
95
|
if (isValidSharePointUrl !== true) {
|
|
66
96
|
return isValidSharePointUrl;
|
|
67
97
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
98
|
+
if (args.options.ids) {
|
|
99
|
+
const invalidIds = formatting
|
|
100
|
+
.splitAndTrim(args.options.ids)
|
|
101
|
+
.filter(id => !validation.isValidGuid(id));
|
|
102
|
+
if (invalidIds.length > 0) {
|
|
103
|
+
return `The following IDs are invalid: ${invalidIds.join(', ')}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if ((!args.options.ids && !args.options.allPrimary && !args.options.allSecondary)
|
|
107
|
+
|| (args.options.ids && (args.options.allPrimary || args.options.allSecondary))) {
|
|
108
|
+
return `Option 'ids' cannot be used with 'allPrimary' or 'allSecondary'.`;
|
|
73
109
|
}
|
|
74
110
|
return true;
|
|
75
111
|
});
|
|
112
|
+
}, _SpoSiteRecycleBinItemRestoreCommand_initTypes = function _SpoSiteRecycleBinItemRestoreCommand_initTypes() {
|
|
113
|
+
this.types.string.push('siteUrl', 'ids');
|
|
114
|
+
this.types.boolean.push('allPrimary', 'allSecondary');
|
|
76
115
|
};
|
|
77
116
|
export default new SpoSiteRecycleBinItemRestoreCommand();
|
|
78
117
|
//# sourceMappingURL=site-recyclebinitem-restore.js.map
|
|
@@ -89,7 +89,7 @@ class SpoTenantSettingsSetCommand extends SpoCommand {
|
|
|
89
89
|
throw response.ErrorInfo.ErrorMessage;
|
|
90
90
|
}
|
|
91
91
|
if (args.options.EnableAzureADB2BIntegration === true) {
|
|
92
|
-
await this.warn(logger, 'WARNING: Make sure to also enable the
|
|
92
|
+
await this.warn(logger, 'WARNING: Make sure to also enable the Microsoft Entra one-time passcode authentication preview. If it is not enabled then SharePoint will not use Microsoft Entra B2B even if EnableAzureADB2BIntegration is set to true. Learn more at http://aka.ms/spo-b2b-integration.');
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
catch (err) {
|