UNPKG

@sprucelabs/spruce-templates

Version:

Templates used for code generation in skills!

76 lines (75 loc) 3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const globby_1 = __importDefault(require("@sprucelabs/globby")); const handlebars_1 = __importDefault(require("handlebars")); class DirectoryTemplateUtility { static async filesInTemplate(code) { const filePaths = []; const files = await (0, globby_1.default)(path_1.default.join(__dirname, '../templates/directories', code), { dot: true, }); for (const file of files) { const isDefinitionFile = file.search('.d.ts') > -1; if (!isDefinitionFile) { const templateFile = this.loadFileDetails(code, file); filePaths.push(templateFile); } } return filePaths; } static async build(options) { const builtFiles = []; const { kind, context } = options; const files = await this.filesInTemplate(kind); for (const file of files) { const { isHandlebarsTemplate, path } = file; let contents = fs_1.default.readFileSync(path).toString(); if (isHandlebarsTemplate) { const compiledTemplate = handlebars_1.default.compile(contents); contents = compiledTemplate(context); } builtFiles.push({ ...file, contents, }); } return builtFiles; } static loadFileDetails(code, filePath) { const fullPath = path_1.default.resolve(filePath); const matches = fullPath.match(/(.*)\/([^/]+)$/); const directory = (matches && matches[1]) || ''; const templateFilename = matches && matches[2]; const fileMatches = templateFilename === null || templateFilename === void 0 ? void 0 : templateFilename.match(/(.*)\.hbs$/); let isHandlebarsTemplate = false; let filename; if (fileMatches && fileMatches[1]) { filename = fileMatches[1]; isHandlebarsTemplate = true; } else { filename = templateFilename; } const root = path_1.default.join(__dirname, '..', 'templates', 'directories', code); const relativeBaseDirectory = path_1.default.relative(root, directory); if (!directory || !filename || typeof relativeBaseDirectory === 'undefined') { throw new Error('INVALID_TEMPLATE_FILES'); } return { isHandlebarsTemplate, directory, relativeDirectory: relativeBaseDirectory, filename, path: filePath, relativePath: path_1.default.join(relativeBaseDirectory, filename), }; } } exports.default = DirectoryTemplateUtility;