@salesforce/plugin-templates
Version:
Commands to create metadata from a default or custom template
113 lines • 4.94 kB
JavaScript
/*
* Copyright (c) 2019, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/
import { Flags, loglevel, orgApiVersionFlagWithDeprecations, SfCommand, Ux } from '@salesforce/sf-plugins-core';
import { TemplateType } from '@salesforce/templates';
import { Messages } from '@salesforce/core';
import { getCustomTemplates, runGenerator } from '../../../../utils/templateCommand.js';
import { internalFlag, outputDirFlag } from '../../../../utils/flags.js';
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
const messages = Messages.loadMessages('@salesforce/plugin-templates', 'flexipage');
export default class FlexipageGenerate extends SfCommand {
static summary = messages.getMessage('summary');
static description = messages.getMessage('description');
static examples = messages.getMessages('examples');
static state = 'beta';
static flags = {
name: Flags.string({
char: 'n',
summary: messages.getMessage('flags.name.summary'),
description: messages.getMessage('flags.name.description'),
required: true,
aliases: ['flexipagename'],
deprecateAliases: true,
}),
template: Flags.option({
char: 't',
summary: messages.getMessage('flags.template.summary'),
required: true,
options: ['RecordPage', 'AppPage', 'HomePage'],
})(),
'output-dir': outputDirFlag,
'api-version': orgApiVersionFlagWithDeprecations,
label: Flags.string({
summary: messages.getMessage('flags.label.summary'),
aliases: ['masterlabel'],
deprecateAliases: true,
}),
description: Flags.string({
summary: messages.getMessage('flags.description.summary'),
}),
sobject: Flags.string({
char: 's',
summary: messages.getMessage('flags.sobject.summary'),
description: messages.getMessage('flags.sobject.description'),
aliases: ['entity-name', 'entity'],
deprecateAliases: true,
}),
'primary-field': Flags.string({
summary: messages.getMessage('flags.primary-field.summary'),
}),
'secondary-fields': Flags.string({
summary: messages.getMessage('flags.secondary-fields.summary'),
multiple: true,
delimiter: ',',
}),
'detail-fields': Flags.string({
summary: messages.getMessage('flags.detail-fields.summary'),
multiple: true,
delimiter: ',',
}),
internal: internalFlag,
loglevel,
};
static MAX_SECONDARY_FIELDS = 11;
async run() {
const { flags } = await this.parse(FlexipageGenerate);
// Validate RecordPage requires sobject
if (flags.template === 'RecordPage' && !flags.sobject) {
throw new Error(messages.getMessage('errors.recordPageRequiresSobject'));
}
// Validate RecordPage-specific flags are only used with RecordPage template
const recordPageOnlyFlags = ['primary-field', 'secondary-fields', 'detail-fields'];
if (flags.template !== 'RecordPage') {
for (const flagName of recordPageOnlyFlags) {
if (flags[flagName]) {
throw new Error(messages.getMessage('errors.flagRequiresRecordPage', [flagName]));
}
}
}
// Validate secondary fields limit (Dynamic Highlights Panel supports max 11)
const secondaryFieldsCount = flags['secondary-fields']?.length ?? 0;
if (secondaryFieldsCount > FlexipageGenerate.MAX_SECONDARY_FIELDS) {
throw new Error(messages.getMessage('errors.tooManySecondaryFields', [
secondaryFieldsCount.toString(),
FlexipageGenerate.MAX_SECONDARY_FIELDS.toString(),
]));
}
// Convert CLI flags to library options
const flagsAsOptions = {
flexipagename: flags.name,
template: flags.template,
outputdir: flags['output-dir'],
apiversion: flags['api-version'],
masterlabel: flags.label,
description: flags.description,
entityName: flags.sobject,
primaryField: flags['primary-field'],
secondaryFields: flags['secondary-fields'] ?? [],
detailFields: flags['detail-fields'] ?? [],
internal: flags.internal,
};
return runGenerator({
templateType: TemplateType.Flexipage,
opts: flagsAsOptions,
ux: new Ux({ jsonEnabled: this.jsonEnabled() }),
templates: getCustomTemplates(this.configAggregator),
});
}
}
//# sourceMappingURL=index.js.map