UNPKG

@nlabs/lex

Version:
125 lines (124 loc) 16.9 kB
import { existsSync, readFileSync, renameSync, writeFileSync } from "fs"; import { resolve as pathResolve } from "path"; import { createChangelog } from "../../create/changelog.js"; import { LexConfig } from "../../LexConfig.js"; import { copyFolderRecursiveSync, getFilenames, removeFiles, updateTemplateName } from "../../utils/app.js"; import { getDirName } from "../../utils/file.js"; import { log } from "../../utils/log.js"; const create = async (type, cmd, callback = () => ({})) => { const { cliName = "Lex", outputFile = "", outputName = "", quiet } = cmd; const cwd = process.cwd(); log(`${cliName} creating ${type}...`, "info", quiet); await LexConfig.parseConfig(cmd, false); const { outputPath = "", sourcePath = "", useTypescript } = LexConfig.config; if (useTypescript) { LexConfig.checkTypescriptConfig(); } const { config } = LexConfig; const dirName = getDirName(); switch (type) { case "changelog": { const statusChangelog = await createChangelog({ cliName, config, outputFile, quiet }); callback(statusChangelog); return statusChangelog; } case "store": { try { const result = getFilenames({ cliName, name: outputName, quiet, type, useTypescript }); if (!result) { return 1; } const { nameCaps, templateExt, templatePath } = result; const storePath = `${cwd}/${nameCaps}Store`; if (!existsSync(storePath)) { copyFolderRecursiveSync(pathResolve(dirName, templatePath, "./.SampleStore"), cwd); renameSync(`${cwd}/.SampleStore`, storePath); const storeTestPath = `${storePath}/${nameCaps}Store.test${templateExt}`; renameSync(`${storePath}/SampleStore.test${templateExt}.txt`, storeTestPath); updateTemplateName(storeTestPath, outputName, nameCaps); const storeFilePath = `${storePath}/${nameCaps}Store${templateExt}`; renameSync(`${storePath}/SampleStore${templateExt}.txt`, storeFilePath); updateTemplateName(storeFilePath, outputName, nameCaps); } else { log(` ${cliName} Error: Cannot create new ${type}. Directory, ${storePath} already exists.`, "error", quiet); callback(1); return 1; } } catch (error) { log(` ${cliName} Error: Cannot create new ${type}. ${error.message}`, "error", quiet); callback(1); return 1; } break; } case "tsconfig": { await removeFiles("tsconfig.json", true); const templatePath = pathResolve(dirName, "../../../tsconfig.template.json"); let data = readFileSync(templatePath, "utf8"); data = data.replace(/.\/src/g, sourcePath); data = data.replace(/.\/lib/g, outputPath); const destPath = pathResolve(cwd, "./tsconfig.json"); writeFileSync(destPath, data, "utf8"); break; } case "view": { const result = getFilenames({ cliName, name: outputName, quiet, type, useTypescript }); if (!result) { return 1; } const { nameCaps, templatePath, templateReact } = result; const viewPath = `${cwd}/${nameCaps}View`; try { if (!existsSync(viewPath)) { copyFolderRecursiveSync(pathResolve(dirName, templatePath, "./.SampleView"), cwd); renameSync(`${cwd}/.SampleView`, viewPath); const viewStylePath = `${viewPath}/${outputName}View.css`; renameSync(`${viewPath}/sampleView.css`, viewStylePath); updateTemplateName(viewStylePath, outputName, nameCaps); const viewTestPath = `${viewPath}/${nameCaps}View.test${templateReact}`; renameSync(`${viewPath}/SampleView.test${templateReact}.txt`, viewTestPath); updateTemplateName(viewTestPath, outputName, nameCaps); const viewFilePath = `${viewPath}/${nameCaps}View${templateReact}`; renameSync(`${viewPath}/SampleView${templateReact}.txt`, viewFilePath); updateTemplateName(viewFilePath, outputName, nameCaps); } else { log(` ${cliName} Error: Cannot create new ${type}. Directory, ${viewPath} already exists.`, "error", quiet); callback(1); return 1; } } catch (error) { log(` ${cliName} Error: Cannot create new ${type}. ${error.message}`, "error", quiet); callback(1); return 1; } break; } case "vscode": { await removeFiles(".vscode", true); copyFolderRecursiveSync(pathResolve(dirName, "../../../.vscode"), cwd); break; } } callback(0); return 0; }; export { create }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgcmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVDaGFuZ2Vsb2d9IGZyb20gJy4uLy4uL2NyZWF0ZS9jaGFuZ2Vsb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NvcHlGb2xkZXJSZWN1cnNpdmVTeW5jLCBnZXRGaWxlbmFtZXMsIHJlbW92ZUZpbGVzLCB1cGRhdGVUZW1wbGF0ZU5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2dldERpck5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENyZWF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBDcmVhdGVDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBvdXRwdXRGaWxlID0gJycsIG91dHB1dE5hbWUgPSAnJywgcXVpZXR9ID0gY21kO1xuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG4gIGxvZyhgJHtjbGlOYW1lfSBjcmVhdGluZyAke3R5cGV9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQsIGZhbHNlKTtcbiAgY29uc3Qge291dHB1dFBhdGggPSAnJywgc291cmNlUGF0aCA9ICcnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0c2NvbmZpZy5qc29uIGV4aXN0c1xuICAgIExleENvbmZpZy5jaGVja1R5cGVzY3JpcHRDb25maWcoKTtcbiAgfVxuXG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSAnY2hhbmdlbG9nJzoge1xuICAgICAgY29uc3Qgc3RhdHVzQ2hhbmdlbG9nOiBudW1iZXIgPSBhd2FpdCBjcmVhdGVDaGFuZ2Vsb2coe2NsaU5hbWUsIGNvbmZpZywgb3V0cHV0RmlsZSwgcXVpZXR9KTtcbiAgICAgIGNhbGxiYWNrKHN0YXR1c0NoYW5nZWxvZyk7XG4gICAgICByZXR1cm4gc3RhdHVzQ2hhbmdlbG9nO1xuICAgIH1cbiAgICBjYXNlICdzdG9yZSc6IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEZpbGVuYW1lcyh7XG4gICAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgICBuYW1lOiBvdXRwdXROYW1lLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXNlVHlwZXNjcmlwdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlRXh0LCB0ZW1wbGF0ZVBhdGh9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCBzdG9yZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vJHtuYW1lQ2Fwc31TdG9yZWA7XG5cbiAgICAgICAgaWYoIWV4aXN0c1N5bmMoc3RvcmVQYXRoKSkge1xuICAgICAgICAvLyBDb3B5IHN0b3JlIGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlU3RvcmUnKSwgY3dkKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBkaXJlY3RvcnlcbiAgICAgICAgICByZW5hbWVTeW5jKGAke2N3ZH0vLlNhbXBsZVN0b3JlYCwgc3RvcmVQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSB0ZXN0XG4gICAgICAgICAgY29uc3Qgc3RvcmVUZXN0UGF0aDogc3RyaW5nID0gYCR7c3RvcmVQYXRofS8ke25hbWVDYXBzfVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHtzdG9yZVBhdGh9L1NhbXBsZVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZVRlc3RQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlVGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHN0b3JlRmlsZVBhdGg6IHN0cmluZyA9IGAke3N0b3JlUGF0aH0vJHtuYW1lQ2Fwc31TdG9yZSR7dGVtcGxhdGVFeHR9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3N0b3JlUGF0aH0vU2FtcGxlU3RvcmUke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZUZpbGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlRmlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uIERpcmVjdG9yeSwgJHtzdG9yZVBhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY3JlYXRlIG5ldyAke3R5cGV9LiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndHNjb25maWcnOiB7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGZpbGVcbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVzKCd0c2NvbmZpZy5qc29uJywgdHJ1ZSk7XG5cbiAgICAgIC8vIEdldCB0c2NvbmZpZyB0ZW1wbGF0ZVxuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vdHNjb25maWcudGVtcGxhdGUuanNvbicpO1xuICAgICAgbGV0IGRhdGE6IHN0cmluZyA9IHJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsICd1dGY4Jyk7XG5cbiAgICAgIC8vIFVwZGF0ZSBMZXggdHNjb25maWcgdGVtcGxhdGUgd2l0aCBzb3VyY2UgYW5kIG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLlxcL3NyYy9nLCBzb3VyY2VQYXRoKTtcbiAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLy5cXC9saWIvZywgb3V0cHV0UGF0aCk7XG5cbiAgICAgIC8vIFNhdmUgbmV3IHRzY29uZmlnIHRvIGFwcFxuICAgICAgY29uc3QgZGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuICAgICAgd3JpdGVGaWxlU3luYyhkZXN0UGF0aCwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd2aWV3Jzoge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0RmlsZW5hbWVzKHtcbiAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgbmFtZTogb3V0cHV0TmFtZSxcbiAgICAgICAgcXVpZXQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZVR5cGVzY3JpcHRcbiAgICAgIH0pO1xuXG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlUGF0aCwgdGVtcGxhdGVSZWFjdH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB2aWV3UGF0aDogc3RyaW5nID0gYCR7Y3dkfS8ke25hbWVDYXBzfVZpZXdgO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZighZXhpc3RzU3luYyh2aWV3UGF0aCkpIHtcbiAgICAgICAgLy8gQ29weSB2aWV3IGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlVmlldycpLCBjd2QpO1xuXG4gICAgICAgICAgLy8gUmVuYW1lIGRpcmVjdG9yeVxuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7Y3dkfS8uU2FtcGxlVmlld2AsIHZpZXdQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBDU1NcbiAgICAgICAgICBjb25zdCB2aWV3U3R5bGVQYXRoOiBzdHJpbmcgPSBgJHt2aWV3UGF0aH0vJHtvdXRwdXROYW1lfVZpZXcuY3NzYDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3ZpZXdQYXRofS9zYW1wbGVWaWV3LmNzc2AsIHZpZXdTdHlsZVBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3U3R5bGVQYXRoLCBvdXRwdXROYW1lLCBuYW1lQ2Fwcyk7XG5cbiAgICAgICAgICAvLyBSZW5hbWUgdGVzdFxuICAgICAgICAgIGNvbnN0IHZpZXdUZXN0UGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7bmFtZUNhcHN9Vmlldy50ZXN0JHt0ZW1wbGF0ZVJlYWN0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHt2aWV3UGF0aH0vU2FtcGxlVmlldy50ZXN0JHt0ZW1wbGF0ZVJlYWN0fS50eHRgLCB2aWV3VGVzdFBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3VGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHZpZXdGaWxlUGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7bmFtZUNhcHN9VmlldyR7dGVtcGxhdGVSZWFjdH1gO1xuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7dmlld1BhdGh9L1NhbXBsZVZpZXcke3RlbXBsYXRlUmVhY3R9LnR4dGAsIHZpZXdGaWxlUGF0aCk7XG5cbiAgICAgICAgICAvLyBTZWFyY2ggYW5kIHJlcGxhY2UgdmlldyBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHZpZXdGaWxlUGF0aCwgb3V0cHV0TmFtZSwgbmFtZUNhcHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNyZWF0ZSBuZXcgJHt0eXBlfS4gRGlyZWN0b3J5LCAke3ZpZXdQYXRofSBhbHJlYWR5IGV4aXN0cy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNyZWF0ZSBuZXcgJHt0eXBlfS4gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ3ZzY29kZSc6IHtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZGlyZWN0b3J5XG4gICAgICBhd2FpdCByZW1vdmVGaWxlcygnLnZzY29kZScsIHRydWUpO1xuXG4gICAgICAvLyBDb3B5IHZzY29kZSBjb25maWd1cmF0aW9uXG4gICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vLnZzY29kZScpLCBjd2QpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLFlBQVksY0FBYyxZQUFZLHFCQUFvQjtB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