UNPKG

@pnp/cli-microsoft365

Version:

Manage Microsoft 365 and SharePoint Framework projects on any platform

274 lines • 12.5 kB
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