UNPKG

@pnp/cli-microsoft365

Version:

Manage Microsoft 365 and SharePoint Framework projects on any platform

328 lines • 16.6 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 _SpoPageSetCommand_instances, _SpoPageSetCommand_initTelemetry, _SpoPageSetCommand_initOptions, _SpoPageSetCommand_initTypes, _SpoPageSetCommand_initValidators; import { Auth } from '../../../../Auth.js'; import request from '../../../../request.js'; import { formatting } from '../../../../utils/formatting.js'; import { spo } from '../../../../utils/spo.js'; import { urlUtil } from '../../../../utils/urlUtil.js'; import { validation } from '../../../../utils/validation.js'; import SpoCommand from '../../../base/SpoCommand.js'; import commands from '../../commands.js'; import { Page, supportedPageLayouts, supportedPromoteAs } from './Page.js'; class SpoPageSetCommand extends SpoCommand { get name() { return commands.PAGE_SET; } get description() { return 'Updates modern page properties'; } constructor() { super(); _SpoPageSetCommand_instances.add(this); __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initTelemetry).call(this); __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initOptions).call(this); __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initTypes).call(this); __classPrivateFieldGet(this, _SpoPageSetCommand_instances, "m", _SpoPageSetCommand_initValidators).call(this); } async commandAction(logger, args) { const resource = Auth.getResourceFromUrl(args.options.webUrl); let pageName = args.options.name; const fileNameWithoutExtension = pageName.replace('.aspx', ''); let bannerImageUrl = ''; let canvasContent1 = ''; let layoutWebpartsContent = ''; let pageTitle = args.options.title || ""; let pageId = null; let pageDescription = args.options.description || ""; let topicHeader = ""; let authorByline = []; const pageData = {}; if (!pageName.endsWith('.aspx')) { pageName += '.aspx'; } const listServerRelativeUrl = `${urlUtil.getServerRelativeSiteUrl(args.options.webUrl)}/sitepages`; const serverRelativeFileUrl = `${listServerRelativeUrl}/${pageName}`; const listUrl = urlUtil.getServerRelativePath(args.options.webUrl, listServerRelativeUrl); const requestUrl = `${args.options.webUrl}/_api/web/GetList('${formatting.encodeQueryParameter(listUrl)}')`; const needsToSavePage = !!args.options.title || !!args.options.description; try { const requestDigestResult = await spo.getRequestDigest(args.options.webUrl); const requestDigest = requestDigestResult.FormDigestValue; const page = await Page.checkout(args.options.name, args.options.webUrl, logger, this.verbose); if (page) { pageTitle = pageTitle || page.Title; pageId = page.Id; bannerImageUrl = page.BannerImageUrl; canvasContent1 = args.options.content || page.CanvasContent1; layoutWebpartsContent = page.LayoutWebpartsContent; pageDescription = pageDescription || page.Description; topicHeader = page.TopicHeader; authorByline = page.AuthorByline; } if (args.options.layoutType) { const file = await spo.getFileAsListItemByUrl(args.options.webUrl, serverRelativeFileUrl, logger, this.verbose); const itemId = file.Id; const listItemSetOptions = { PageLayoutType: args.options.layoutType }; if (args.options.layoutType === 'Article') { listItemSetOptions.PromotedState = 0; listItemSetOptions.BannerImageUrl = `${resource}/_layouts/15/images/sitepagethumbnail.png, /_layouts/15/images/sitepagethumbnail.png`; } await spo.systemUpdateListItem(requestUrl, itemId, logger, this.verbose, listItemSetOptions); } if (args.options.promoteAs) { const requestOptions = { responseType: 'json' }; switch (args.options.promoteAs) { case 'HomePage': requestOptions.url = `${args.options.webUrl}/_api/web/rootfolder`; requestOptions.headers = { 'X-RequestDigest': requestDigest, 'X-HTTP-Method': 'MERGE', 'IF-MATCH': '*', 'content-type': 'application/json;odata=nometadata', accept: 'application/json;odata=nometadata' }; requestOptions.data = { WelcomePage: `SitePages/${pageName}` }; await request.post(requestOptions); break; case 'NewsPage': { const newsPageItem = await spo.getFileAsListItemByUrl(args.options.webUrl, serverRelativeFileUrl, logger, this.verbose); const newsPageItemId = newsPageItem.Id; const listItemSetOptions = { PromotedState: 2, FirstPublishedDate: new Date().toISOString() }; await spo.systemUpdateListItem(requestUrl, newsPageItemId, logger, this.verbose, listItemSetOptions); break; } case 'Template': { const templateItem = await spo.getFileAsListItemByUrl(args.options.webUrl, serverRelativeFileUrl, logger, this.verbose); const templateItemId = templateItem.Id; requestOptions.headers = { 'X-RequestDigest': requestDigest, 'content-type': 'application/json;odata=nometadata', 'X-HTTP-Method': 'POST', 'IF-MATCH': '*', accept: 'application/json;odata=nometadata' }; requestOptions.url = `${args.options.webUrl}/_api/SitePages/Pages(${templateItemId})/SavePageAsTemplate`; const res = await request.post(requestOptions); if (fileNameWithoutExtension) { pageData.Title = fileNameWithoutExtension; } if (pageDescription) { pageData.Description = pageDescription; } if (res.BannerImageUrl) { pageData.BannerImageUrl = res.BannerImageUrl; } if (res.LayoutWebpartsContent) { pageData.LayoutWebpartsContent = res.LayoutWebpartsContent; } if (res.CanvasContent1) { pageData.CanvasContent1 = res.CanvasContent1; } pageId = res.Id; break; } } } if (args.options.promoteAs !== 'Template') { if (pageTitle) { pageData.Title = pageTitle; } if (pageDescription) { pageData.Description = pageDescription; } if (bannerImageUrl) { pageData.BannerImageUrl = bannerImageUrl; } if (canvasContent1) { pageData.CanvasContent1 = canvasContent1; } if (layoutWebpartsContent) { pageData.LayoutWebpartsContent = layoutWebpartsContent; } if (topicHeader) { pageData.TopicHeader = topicHeader; } if (authorByline) { pageData.AuthorByline = authorByline; } } if (needsToSavePage) { const requestOptions = { responseType: 'json', url: `${args.options.webUrl}/_api/SitePages/Pages(${pageId})/SavePage`, headers: { 'X-RequestDigest': requestDigest, 'X-HTTP-Method': 'MERGE', 'IF-MATCH': '*', 'content-type': 'application/json;odata=nometadata', accept: 'application/json;odata=nometadata' }, data: pageData }; await request.post(requestOptions); } if (args.options.promoteAs === 'Template') { const requestOptions = { responseType: 'json', url: `${args.options.webUrl}/_api/SitePages/Pages(${pageId})/SavePageAsDraft`, headers: { 'X-RequestDigest': requestDigest, 'X-HTTP-Method': 'MERGE', 'IF-MATCH': '*', 'content-type': 'application/json;odata=nometadata', accept: 'application/json;odata=nometadata' }, data: pageData }; await request.post(requestOptions); } if (typeof args.options.commentsEnabled !== 'undefined') { const requestOptions = { url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${serverRelativeFileUrl}')/ListItemAllFields/SetCommentsDisabled(${args.options.commentsEnabled === false})`, headers: { 'X-RequestDigest': requestDigest, 'content-type': 'application/json;odata=nometadata', accept: 'application/json;odata=nometadata' }, responseType: 'json' }; await request.post(requestOptions); } if (args.options.demoteFrom === 'NewsPage') { const file = await spo.getFileAsListItemByUrl(args.options.webUrl, serverRelativeFileUrl, logger, this.verbose); const fileId = file.Id; const listItemSetOptions = { PromotedState: 0 }; await spo.systemUpdateListItem(requestUrl, fileId, logger, this.verbose, listItemSetOptions); } let requestOptions; if (!args.options.publish) { if (args.options.promoteAs === 'Template' || !pageId) { return; } requestOptions = { responseType: 'json', url: `${args.options.webUrl}/_api/SitePages/Pages(${pageId})/SavePageAsDraft`, headers: { 'content-type': 'application/json;odata=nometadata', 'accept': 'application/json;odata=nometadata' }, data: pageData }; } else { requestOptions = { url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${serverRelativeFileUrl}')/CheckIn(comment=@a1,checkintype=@a2)?@a1='${formatting.encodeQueryParameter(args.options.publishMessage || '')}'&@a2=1`, headers: { 'X-RequestDigest': requestDigest, 'content-type': 'application/json;odata=nometadata', accept: 'application/json;odata=nometadata' }, responseType: 'json' }; } await request.post(requestOptions); } catch (err) { this.handleRejectedODataJsonPromise(err); } } } _SpoPageSetCommand_instances = new WeakSet(), _SpoPageSetCommand_initTelemetry = function _SpoPageSetCommand_initTelemetry() { this.telemetry.push((args) => { Object.assign(this.telemetryProperties, { layoutType: args.options.layoutType || false, promoteAs: args.options.promoteAs || false, demotefrom: args.options.demoteFrom || false, commentsEnabled: args.options.commentsEnabled || false, publish: args.options.publish || false, publishMessage: typeof args.options.publishMessage !== 'undefined', description: typeof args.options.description !== 'undefined', title: typeof args.options.title !== 'undefined', content: typeof args.options.content !== 'undefined' }); }); }, _SpoPageSetCommand_initOptions = function _SpoPageSetCommand_initOptions() { this.options.unshift({ option: '-n, --name <name>' }, { option: '-u, --webUrl <webUrl>' }, { option: '-l, --layoutType [layoutType]', autocomplete: supportedPageLayouts }, { option: '-p, --promoteAs [promoteAs]', autocomplete: supportedPromoteAs }, { option: '--demoteFrom [demoteFrom]', autocomplete: ['NewsPage'] }, { option: '--commentsEnabled [commentsEnabled]', autocomplete: ['true', 'false'] }, { option: '--publish' }, { option: '--publishMessage [publishMessage]' }, { option: '--description [description]' }, { option: '--title [title]' }, { option: '--content [content]' }); }, _SpoPageSetCommand_initTypes = function _SpoPageSetCommand_initTypes() { this.types.boolean.push('commentsEnabled'); }, _SpoPageSetCommand_initValidators = function _SpoPageSetCommand_initValidators() { this.validators.push(async (args) => { const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl); if (isValidSharePointUrl !== true) { return isValidSharePointUrl; } if (!args.options.layoutType && !args.options.promoteAs && !args.options.demoteFrom && args.options.commentsEnabled === undefined && !args.options.publish && !args.options.description && !args.options.title && !args.options.content) { return 'Specify at least one option to update.'; } if (args.options.layoutType && supportedPageLayouts.indexOf(args.options.layoutType) < 0) { return `${args.options.layoutType} is not a valid option for layoutType. Allowed values ${supportedPageLayouts.join(', ')}`; } if (args.options.promoteAs && supportedPromoteAs.indexOf(args.options.promoteAs) < 0) { return `${args.options.promoteAs} is not a valid option for promoteAs. Allowed values ${supportedPromoteAs.join(', ')}`; } if (args.options.demoteFrom && args.options.demoteFrom !== 'NewsPage') { return `${args.options.demoteFrom} is not a valid option for demoteFrom. The only allowed value is 'NewsPage'`; } if (args.options.promoteAs === 'HomePage' && args.options.layoutType !== 'Home') { return 'You can only promote home pages as site home page'; } if (args.options.promoteAs === 'NewsPage' && args.options.layoutType && args.options.layoutType !== 'Article') { return 'You can only promote article pages as news article'; } if (args.options.content) { try { JSON.parse(args.options.content); } catch (e) { return `Specified content is not a valid JSON string. Input: ${args.options.content}. Error: ${e}`; } } return true; }); }; export default new SpoPageSetCommand(); //# sourceMappingURL=page-set.js.map