@salesforce/templates
Version:
Salesforce JS library for templates
95 lines • 6.16 kB
JavaScript
"use strict";
/*
* 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
*/
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const kit_1 = require("@salesforce/kit");
const path = require("path");
const i18n_1 = require("../i18n");
const utils_1 = require("../utils");
const baseGenerator_1 = require("./baseGenerator");
class LightningComponentGenerator extends baseGenerator_1.BaseGenerator {
constructor(options) {
super(options);
}
validateOptions() {
utils_1.CreateUtil.checkInputs(this.options.componentname);
utils_1.CreateUtil.checkInputs(this.options.template);
const fileparts = path.resolve(this.outputdir).split(path.sep);
if (!this.options.internal) {
if (this.options.type === 'lwc' && !fileparts.includes('lwc')) {
throw new Error(i18n_1.nls.localize('MissingLWCDir'));
}
else if (!fileparts.includes('aura') && this.options.type === 'aura') {
throw new Error(i18n_1.nls.localize('MissingAuraDir'));
}
}
if (utils_1.CreateUtil.getCommandTemplatesInSubdirs('lightningcomponent', {
subdir: this.options.type,
}).indexOf(this.options.template) < 0) {
throw new Error(i18n_1.nls.localize('MissingLightningComponentTemplate', [
this.options.template,
this.options.type,
]));
}
}
generate() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { template, componentname, type, internal } = this.options;
if (type === 'aura') {
this.sourceRootWithPartialPath(path.join('lightningcomponent', 'aura', template));
if (!internal) {
yield this.render(this.templatePath(`${template}.cmp-meta.xml`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}.cmp-meta.xml`)), {
componentname,
description: i18n_1.nls.localize('LightningComponentBundle'),
apiVersion: this.apiversion,
});
}
yield this.render(this.templatePath(`${template}.auradoc`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}.auradoc`)), {});
yield this.render(this.templatePath(`${template}.cmp`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}.cmp`)), {});
yield this.render(this.templatePath(`${template}.css`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}.css`)), {});
yield this.render(this.templatePath(`${template}.design`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}.design`)), {});
yield this.render(this.templatePath(`${template}.svg`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}.svg`)), {});
yield this.render(this.templatePath(`${template}Controller.js`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}Controller.js`)), {});
yield this.render(this.templatePath(`${template}Helper.js`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}Helper.js`)), {});
yield this.render(this.templatePath(`${template}Renderer.js`), this.destinationPath(path.join(this.outputdir, componentname, `${componentname}Renderer.js`)), {});
}
if (type === 'lwc') {
const pascalCaseComponentName = `${componentname
.substring(0, 1)
.toUpperCase()}${componentname.substring(1)}`;
const camelCaseComponentName = `${componentname
.substring(0, 1)
.toLowerCase()}${componentname.substring(1)}`;
const kebabCaseComponentName = componentname
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
.join('-')
.toLowerCase();
const ext = template === 'typeScript' ? 'ts' : 'js';
this.sourceRootWithPartialPath(path.join('lightningcomponent', 'lwc', template));
yield this.render(this.templatePath(`${template}.${ext}`), this.destinationPath(path.join(this.outputdir, camelCaseComponentName, `${camelCaseComponentName}.${ext}`)), { pascalCaseComponentName });
yield this.render(this.templatePath(`${template}.html`), this.destinationPath(path.join(this.outputdir, camelCaseComponentName, `${camelCaseComponentName}.html`)), {});
yield this.render(this.templatePath(path.join(`__tests__`, `${template}.test.${ext}`)), this.destinationPath(path.join(this.outputdir, camelCaseComponentName, `__tests__`, `${camelCaseComponentName}.test.${ext}`)), {
pascalCaseComponentName,
camelCaseComponentName,
kebabCaseComponentName,
});
if (template === 'typeScript') {
yield this.render(this.templatePath('gitignore'), this.destinationPath(path.join(this.outputdir, camelCaseComponentName, '.gitignore')), {});
}
if (!internal) {
const masterLabel = (0, kit_1.camelCaseToTitleCase)(componentname)
.replace(/</g, '<')
.replace(/>/g, '>');
yield this.render(this.templatePath(`${template}.js-meta.xml`), this.destinationPath(path.join(this.outputdir, camelCaseComponentName, `${camelCaseComponentName}.js-meta.xml`)), { apiVersion: this.apiversion, masterLabel });
}
}
});
}
}
exports.default = LightningComponentGenerator;
//# sourceMappingURL=lightningComponentGenerator.js.map