UNPKG

create-plume-react-project

Version:
64 lines (63 loc) 3.02 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_extra_1 = __importDefault(require("fs-extra")); const path_1 = __importDefault(require("path")); const simple_logging_system_1 = require("simple-logging-system"); const logger = new simple_logging_system_1.Logger('Creator'); /** * Handle project creation using templates */ class Creator { constructor(config) { this.config = config; } create() { try { this.copyTemplate(); this.updateTargetFilesWithProjectName(); logger.info(`Project created in ${this.config.get().targetDirectory}`); logger.info('To start the project, you can now run the commands: yarn && yarn start'); } catch (e) { logger.error('Could not create project', e); } } copyTemplate() { const { targetDirectory } = this.config.get(); if (fs_extra_1.default.readdirSync(targetDirectory).length > 0) { throw new Error(`Target directory '${targetDirectory}' is not empty`); } fs_extra_1.default.copySync(path_1.default.resolve(this.config.get().templateDirectory, this.config.get().template), targetDirectory); // strangely the .gitignore file is not copy when the CLI is executed by npx/npm init/yarn create/... // => so this hack enables to bypass this issue (cf 'package.json' & the 'copy-templates' script) fs_extra_1.default.moveSync(path_1.default.resolve(targetDirectory, '.gitignore_safe'), path_1.default.resolve(targetDirectory, '.gitignore')); } updateTargetFilesWithProjectName() { this.updatePackageJson(); this.updateIndexHtml(); } updatePackageJson() { const { projectName } = this.config.get(); this.updateFileContent('package.json', (fileContent) => { const packageJsonContent = JSON.parse(fileContent); packageJsonContent.name = projectName; return JSON.stringify(packageJsonContent, null, 2); }); } updateIndexHtml() { const { projectName } = this.config.get(); this.updateFileContent('index.html', (fileContent) => fileContent.replace('Plume admin', projectName)); } updateFileContent(relativePath, fileTransformer) { const absolutePath = path_1.default.resolve(this.config.get().targetDirectory, relativePath); const fileContent = fs_extra_1.default.readFileSync(absolutePath, 'utf-8'); const fileUpdatedContent = fileTransformer(fileContent); fs_extra_1.default.writeFileSync(absolutePath, fileUpdatedContent, 'utf-8'); } static get [Symbol.for("___CTOR_ARGS___")]() { return [`Config`]; } static get [Symbol.for("___CTOR_NAME___")]() { return "Creator"; } } exports.default = Creator;