@pnp/cli-microsoft365
Version:
Manage Microsoft 365 and SharePoint Framework projects on any platform
274 lines • 12.5 kB
JavaScript
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _SpoCustomActionAddCommand_instances, _SpoCustomActionAddCommand_initTelemetry, _SpoCustomActionAddCommand_initOptions, _SpoCustomActionAddCommand_initValidators;
import request from '../../../../request.js';
import { validation } from '../../../../utils/validation.js';
import SpoCommand from '../../../base/SpoCommand.js';
import { BasePermissions, PermissionKind } from '../../base-permissions.js';
import commands from '../../commands.js';
class SpoCustomActionAddCommand extends SpoCommand {
get name() {
return commands.CUSTOMACTION_ADD;
}
get description() {
return 'Adds a user custom action for site or site collection';
}
constructor() {
super();
_SpoCustomActionAddCommand_instances.add(this);
__classPrivateFieldGet(this, _SpoCustomActionAddCommand_instances, "m", _SpoCustomActionAddCommand_initTelemetry).call(this);
__classPrivateFieldGet(this, _SpoCustomActionAddCommand_instances, "m", _SpoCustomActionAddCommand_initOptions).call(this);
__classPrivateFieldGet(this, _SpoCustomActionAddCommand_instances, "m", _SpoCustomActionAddCommand_initValidators).call(this);
}
/**
* Maps the base PermissionsKind enum to string array so it can
* more easily be used in validation or descriptions.
*/
get permissionsKindMap() {
const result = [];
for (const kind in PermissionKind) {
if (typeof PermissionKind[kind] === 'number') {
result.push(kind);
}
}
return result;
}
async commandAction(logger, args) {
try {
if (!args.options.scope) {
args.options.scope = 'Web';
}
const requestBody = this.mapRequestBody(args.options);
const requestOptions = {
url: `${args.options.webUrl}/_api/${args.options.scope}/UserCustomActions`,
headers: {
accept: 'application/json;odata=nometadata'
},
data: requestBody,
responseType: 'json'
};
const customAction = await request.post(requestOptions);
if (this.verbose) {
await logger.logToStderr({
ClientSideComponentId: customAction.ClientSideComponentId,
ClientSideComponentProperties: customAction.ClientSideComponentProperties,
CommandUIExtension: customAction.CommandUIExtension,
Description: customAction.Description,
Group: customAction.Group,
Id: customAction.Id,
ImageUrl: customAction.ImageUrl,
Location: customAction.Location,
Name: customAction.Name,
RegistrationId: customAction.RegistrationId,
RegistrationType: customAction.RegistrationType,
Rights: JSON.stringify(customAction.Rights),
Scope: args.options.scope, // because it is more human readable
ScriptBlock: customAction.ScriptBlock,
ScriptSrc: customAction.ScriptSrc,
Sequence: customAction.Sequence,
Title: customAction.Title,
Url: customAction.Url,
VersionOfUserCustomAction: customAction.VersionOfUserCustomAction
});
}
}
catch (err) {
this.handleRejectedPromise(err);
}
}
mapRequestBody(options) {
const requestBody = {
Title: options.title,
Name: options.name,
Location: options.location
};
if (options.group) {
requestBody.Group = options.group;
}
if (options.description) {
requestBody.Description = options.description;
}
if (options.sequence) {
requestBody.Sequence = options.sequence;
}
if (options.registrationType) {
requestBody.RegistrationType = this.getRegistrationType(options.registrationType);
}
if (options.registrationId) {
requestBody.RegistrationId = options.registrationId.toString();
}
if (options.actionUrl) {
requestBody.Url = options.actionUrl;
}
if (options.imageUrl) {
requestBody.ImageUrl = options.imageUrl;
}
if (options.clientSideComponentId) {
requestBody.ClientSideComponentId = options.clientSideComponentId;
}
if (options.clientSideComponentProperties) {
requestBody.ClientSideComponentProperties = options.clientSideComponentProperties;
}
if (options.scriptBlock) {
requestBody.ScriptBlock = options.scriptBlock;
}
if (options.scriptSrc) {
requestBody.ScriptSrc = options.scriptSrc;
}
if (options.commandUIExtension) {
requestBody.CommandUIExtension = `${options.commandUIExtension}`;
}
if (options.rights) {
const permissions = new BasePermissions();
const rights = options.rights.split(',');
for (const item of rights) {
const kind = PermissionKind[item.trim()];
permissions.set(kind);
}
requestBody.Rights = {
High: permissions.high.toString(),
Low: permissions.low.toString()
};
}
return requestBody;
}
getRegistrationType(registrationType) {
switch (registrationType.toLowerCase()) {
case 'list':
return 1;
case 'contenttype':
return 2;
case 'progid':
return 3;
case 'filetype':
return 4;
}
return 0; // None
}
}
_SpoCustomActionAddCommand_instances = new WeakSet(), _SpoCustomActionAddCommand_initTelemetry = function _SpoCustomActionAddCommand_initTelemetry() {
this.telemetry.push((args) => {
Object.assign(this.telemetryProperties, {
location: args.options.location,
scope: args.options.scope || 'Web',
group: (!(!args.options.group)).toString(),
description: (!(!args.options.description)).toString(),
sequence: (!(!args.options.sequence)).toString(),
actionUrl: (!(!args.options.actionUrl)).toString(),
imageUrl: (!(!args.options.imageUrl)).toString(),
commandUIExtension: (!(!args.options.commandUIExtension)).toString(),
registrationId: args.options.registrationId,
registrationType: args.options.registrationType,
rights: args.options.rights,
scriptSrc: (!(!args.options.scriptSrc)).toString(),
scriptBlock: (!(!args.options.scriptBlock)).toString(),
clientSideComponentId: (!(!args.options.clientSideComponentId)).toString(),
clientSideComponentProperties: (!(!args.options.clientSideComponentProperties)).toString()
});
});
}, _SpoCustomActionAddCommand_initOptions = function _SpoCustomActionAddCommand_initOptions() {
this.options.unshift({
option: '-u, --webUrl <webUrl>'
}, {
option: '-n, --name <name>'
}, {
option: '-t, --title <title>'
}, {
option: '-l, --location <location>'
}, {
option: '-g, --group [group]'
}, {
option: '-d, --description [description]'
}, {
option: '--sequence [sequence]'
}, {
option: '--actionUrl [actionUrl]'
}, {
option: '--imageUrl [imageUrl]'
}, {
option: '-e, --commandUIExtension [commandUIExtension]'
}, {
option: '--registrationId [registrationId]'
}, {
option: '--registrationType [registrationType]',
autocomplete: ['None', 'List', 'ContentType', 'ProgId', 'FileType']
}, {
option: '--rights [rights]',
autocomplete: this.permissionsKindMap
}, {
option: '-s, --scope [scope]',
autocomplete: ['Site', 'Web']
}, {
option: '--scriptBlock [scriptBlock]'
}, {
option: '--scriptSrc [scriptSrc]'
}, {
option: '-c, --clientSideComponentId [clientSideComponentId]'
}, {
option: '-p, --clientSideComponentProperties [clientSideComponentProperties]'
});
}, _SpoCustomActionAddCommand_initValidators = function _SpoCustomActionAddCommand_initValidators() {
this.validators.push(async (args) => {
const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
if (isValidSharePointUrl !== true) {
return isValidSharePointUrl;
}
if (args.options.registrationId && !args.options.registrationType) {
return 'Option registrationId is specified, but registrationType is missing';
}
if (args.options.registrationType && !args.options.registrationId) {
return 'Option registrationType is specified, but registrationId is missing';
}
const location = args.options.location.toLowerCase();
const locationsRequireGroup = [
'microsoft.sharepoint.standardmenu', 'microsoft.sharepoint.contenttypesettings',
'microsoft.sharepoint.contenttypetemplatesettings', 'microsoft.sharepoint.create',
'microsoft.sharepoint.groupspage', 'microsoft.sharepoint.listedit',
'microsoft.sharepoint.listedit.documentlibrary', 'microsoft.sharepoint.peoplepage',
'microsoft.sharepoint.sitesettings'
];
if (locationsRequireGroup.indexOf(location) > -1 && !args.options.group) {
return `The location specified requires the group option to be specified as well`;
}
if (location === 'scriptlink' &&
!args.options.scriptSrc &&
!args.options.scriptBlock) {
return 'Option scriptSrc or scriptBlock is required when the location is set to ScriptLink';
}
if ((args.options.scriptSrc || args.options.scriptBlock) && location !== 'scriptlink') {
return 'Option scriptSrc or scriptBlock is specified, but the location option is different than ScriptLink. Please use --actionUrl, if the location should be different than ScriptLink';
}
if (args.options.scriptSrc && args.options.scriptBlock) {
return 'Either option scriptSrc or scriptBlock can be specified, but not both';
}
if (args.options.sequence && (args.options.sequence < 0 || args.options.sequence > 65536)) {
return 'Invalid option sequence. Expected value in range from 0 to 65536';
}
if (args.options.clientSideComponentId && validation.isValidGuid(args.options.clientSideComponentId) === false) {
return `ClientSideComponentId ${args.options.clientSideComponentId} is not a valid GUID`;
}
if (args.options.clientSideComponentProperties && !args.options.clientSideComponentId) {
return `Option clientSideComponentProperties is specified, but the clientSideComponentId option is missing`;
}
if (args.options.scope &&
args.options.scope !== 'Site' &&
args.options.scope !== 'Web') {
return `${args.options.scope} is not a valid custom action scope. Allowed values are Site|Web`;
}
if (args.options.rights) {
const rights = args.options.rights.split(',');
for (const item of rights) {
const kind = PermissionKind[item.trim()];
if (!kind) {
return `Rights option '${item}' is not recognized as valid PermissionKind choice. Please note it is case sensitive`;
}
}
}
return true;
});
};
export default new SpoCustomActionAddCommand();
//# sourceMappingURL=customaction-add.js.map