UNPKG

@viewdo/dxp-story-cli

Version:

DXP Story Management CLI

335 lines 17.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.InitManager = void 0; const typedi_1 = require("typedi"); const ConfigurationManager_1 = require("./ConfigurationManager"); const TaskService_1 = require("../services/TaskService"); const FileService_1 = require("../services/FileService"); const execa_1 = __importDefault(require("execa")); const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); let InitManager = class InitManager { constructor(file_service, configuration_manager, task_service) { this.file_service = file_service; this.configuration_manager = configuration_manager; this.task_service = task_service; } get installDirectory() { return path_1.default.resolve(__dirname, "../../../"); } copyDXPFolder() { let subTasks = [{ title: "Copy DXP Files", task: () => { let asset_folder = path_1.default.resolve(this.installDirectory, "./assets/.dxp"); let dxpPath = path_1.default.resolve(process.cwd(), './.dxp'); this.file_service.syncDirectories(asset_folder, dxpPath, true); }, },]; return this.task_service.runTasks(subTasks); } initRootFolder(force) { let subTasks = [{ title: "Copy Root Files", task: () => { let asset_folder = path_1.default.resolve(this.installDirectory, "./assets/root"); let rootPath = process.cwd(); this.file_service.syncDirectories(asset_folder, rootPath, force); }, }, { title: "Merge .vscode extensions", task: () => { let extensions_path = path_1.default.resolve(this.installDirectory, "./assets/.vscode/extensions.json"); let extensions = JSON.parse(fs_1.default.readFileSync(extensions_path).toString()); const existing_extensions_path = "./.vscode/extensions.json"; if (this.file_service.exists(existing_extensions_path)) { let existing_extensions = JSON.parse(this.file_service.read(existing_extensions_path)); extensions = Object.assign(existing_extensions, extensions); } this.file_service.write(existing_extensions_path, JSON.stringify(extensions, null, 2)); }, }, { title: "Merge .vscode settings", task: () => { let settings_path = path_1.default.resolve(this.installDirectory, "./assets/.vscode/settings.json"); let settings = JSON.parse(fs_1.default.readFileSync(settings_path).toString()); const existing_settings_path = "./.vscode/settings.json"; if (this.file_service.exists(existing_settings_path)) { let existing_settings = JSON.parse(this.file_service.read(existing_settings_path)); settings = Object.assign(existing_settings, settings); } this.file_service.write(existing_settings_path, JSON.stringify(settings, null, 2)); }, }, ]; return this.task_service.runTasks(subTasks); } updatePackages() { let samplePackageJson = this.file_service.read(path_1.default.resolve(this.installDirectory, "./assets/package.json")); let samplePackage = JSON.parse(samplePackageJson); const localPackagePath = path_1.default.resolve(process.cwd(), "./package.json"); let localPackage = null; if (fs_1.default.existsSync(localPackagePath)) { localPackage = JSON.parse(fs_1.default.readFileSync(localPackagePath).toString()); } const tasks = [{ title: "Update Dependencies", skip: () => !localPackage, task: () => { Object.getOwnPropertyNames(samplePackage.devDependencies).forEach((key) => { localPackage.devDependencies[key] = samplePackage.devDependencies[key]; }); fs_1.default.writeFileSync(localPackagePath, JSON.stringify(localPackage, null, 2)); }, }, { title: "Update Scripts", skip: () => !localPackage, task: () => { Object.getOwnPropertyNames(samplePackage.scripts).forEach((key) => { if (!localPackage.scripts[key]) localPackage.scripts[key] = samplePackage.scripts[key]; }); fs_1.default.writeFileSync(localPackagePath, JSON.stringify(localPackage, null, 2)); }, }, { title: "Installing Dependencies", task: () => (0, execa_1.default)("yarn"), }, ]; return this.task_service.runTasks(tasks); } installPackages(git) { let samplePackageJson = this.file_service.read(path_1.default.resolve(this.installDirectory, "./assets/package.json")); let samplePackage = JSON.parse(samplePackageJson); const localPackagePath = path_1.default.resolve(process.cwd(), "./package.json"); let subTasks = [{ /* Make sure we have a package.json maybe walk through that process of init */ title: "Initialize", // if it doesn't exist skip: () => this.file_service.exists(`./package.json`), task: () => (0, execa_1.default)("npm", ["init", "-y", "--scope", "viewdo"]), }, { title: "Installing Self", task: () => (0, execa_1.default)("yarn", ["add", "-D", "@viewdo/dxp-story-cli", "-W"]), }, { title: "Add Dependencies", task: (ctx, task) => { let packageJson = this.file_service.read(`./package.json`); if (!packageJson) return; let existingPackage = JSON.parse(packageJson); if (!existingPackage.devDependencies) existingPackage.devDependencies = {}; Object.getOwnPropertyNames(samplePackage.devDependencies).forEach((key) => { existingPackage.devDependencies[key] = samplePackage.devDependencies[key]; }); fs_1.default.writeFileSync(localPackagePath, JSON.stringify(existingPackage, null, 2)); }, }, { title: "Installing Dependencies", task: () => (0, execa_1.default)("yarn"), }, { /* Make sure we are setup with git-flow. */ title: "Initialize Git Extensions", skip: () => !git, task: (ctx, task) => __awaiter(this, void 0, void 0, function* () { yield (0, execa_1.default)("git", ["lfs", "install"]); yield (0, execa_1.default)("git", ["flow", "init", "-d", "-f"]); }), }, { /* Make sure remote is setup */ title: "Push Develop Branch to Origin", skip: () => !git, task: (ctx, task) => { return (0, execa_1.default)("git", ["push", "--set-upstream", "origin", "develop"]); }, },]; return this.task_service.runTasks(subTasks); } initStoryFolders(story_keys, force) { return this.task_service .runTasks(story_keys.map((story_key) => this._initStoryFolder(story_key, force))) .then((ctx) => (ctx.success == false ? 1 : 0)); } _initStoryFolder(story_key, force) { let story_config = this.configuration_manager.getStoryConfig(story_key); return this.task_service.createTaskSet(`Set up Build & Preview for ${story_key}`, (ctx, task) => { return [{ title: "Copying build files", task: () => { // create build files over let story_folder = `./stories/${story_key}`; if (this.file_service.exists(`${story_folder}/index.js`)) this.file_service.rename(`${story_folder}/index.js`, `${story_folder}/default.js`); else if (this.file_service.exists(`${story_folder}/story.js`)) this.file_service.rename(`${story_folder}/story.js`, `${story_folder}/default.js`); else this.file_service.ensure(`${story_folder}/default.js`); if (this.file_service.exists(`${story_folder}/index.scss`)) this.file_service.rename(`${story_folder}/index.scss`, `${story_folder}/default.scss`); else if (this.file_service.exists(`${story_folder}/story.scss`)) this.file_service.rename(`${story_folder}/story.scss`, `${story_folder}/default.scss`); else this.file_service.ensure(`${story_folder}/default.scss`); if (story_config.episodes) story_config.episodes.forEach((e) => { this.file_service.ensure(`${story_folder}/episode-${e.key}.scss`); this.file_service.ensure(`${story_folder}/episode-${e.key}.js`); }); let asset_folder = path_1.default.resolve(this.installDirectory, "./assets/story"); if (story_config.host == "Hosted") { const pagePath = this.file_service.exists(".dxp/story-page.html") ? ".dxp/story-page.html" : path_1.default.join(asset_folder, "default.html"); const defaultPage = this.file_service.read(pagePath) || ""; if (!this.file_service.exists(`${story_folder}/default.html`)) this.file_service.write(`${story_folder}/default.html`, defaultPage); if (story_config.episodes) story_config.episodes.forEach((e) => { const epPath = `${story_folder}/episode-${e.key}.html`; if (!this.file_service.exists(epPath)) this.file_service.write(epPath, defaultPage); }); } let story_folder_path = path_1.default.resolve(process.cwd(), story_folder); this.file_service.syncDirectories(asset_folder, story_folder_path, force); }, }, { title: "Copy Asset Folder", task: () => { // create build files over let story_folder = `./stories/${story_key}`; let story_folder_path = path_1.default.resolve(process.cwd(), `${story_folder}/assets`); if (!this.file_service.exists(story_folder_path)) { let asset_folder = path_1.default.resolve(this.installDirectory, "./assets/story/assets "); this.file_service.syncDirectories(asset_folder, story_folder_path, force); } }, }, ]; }); } updateStoryFolders(story_keys, upgrade = false) { return this.task_service .runTasks(story_keys.map((story_key) => this._updateStoryFolder(story_key, upgrade))) .then((ctx) => (ctx.success == false ? 1 : 0)); } _updateStoryFolder(story_key, upgrade) { const story_folder = `./stories/${story_key}`; const story_config = this.configuration_manager.getStoryConfig(story_key); const asset_folder = path_1.default.resolve(this.installDirectory, "./assets"); return this.task_service.createTaskSet(`Migrate ${story_key} to XUI`, (ctx, task) => { return [{ title: "Update Host Type", skip: () => !upgrade, task: () => { // create build files over story_config.host = "Hosted"; this.configuration_manager.saveStoryConfig(story_config); }, }, { title: "Add HTML Pages", skip: () => !upgrade, task: () => { // create build files over const pagePath = this.file_service.exists(".dxp/story-page.html") ? ".dxp/story-page.html" : path_1.default.join(asset_folder, "default.html"); const defaultPage = this.file_service.read(pagePath) || ""; if (!this.file_service.exists(`${story_folder}/default.html`)) { this.file_service.write(`${story_folder}/default.html`, defaultPage); } if (story_config.episodes) { story_config.episodes.forEach((e) => { const epPath = `${story_folder}/episode-${e.key}.html`; if (!this.file_service.exists(epPath)) this.file_service.write(epPath, defaultPage); }); } }, }, { title: "Add Base Tailwind Config", skip: () => this.file_service.exists(`${story_folder}/tailwind.config.js`), task: () => { this.file_service.write(`${story_folder}/tailwind.config.js`, this.file_service.read(`.dxp/tailwind.config.js`) || ""); }, }, { title: "Update Webpack Configs", task: () => { let story_folder_path = path_1.default.resolve(process.cwd(), story_folder); this.file_service.syncDirectories(path_1.default.join(asset_folder, "story"), story_folder_path, true); }, }, ]; }); } initOrgFolders(org_keys, force) { return this.task_service .runTasks(org_keys.map((org_key) => this._initOrgFolder(org_key, force))) .then((ctx) => (ctx.success == false ? 1 : 0)); } _initOrgFolder(org_key, force) { return this.task_service.createTaskSet(`Add Organization Assets ${org_key}`, (ctx, task) => { return Promise.resolve([{ title: "Copying folders", task: () => { // create build files over let org_folder = `./organizations/${org_key}`; let asset_folder = path_1.default.resolve(this.installDirectory, "./assets/organization"); let org_folder_path = path_1.default.resolve(process.cwd(), org_folder); this.file_service.syncDirectories(asset_folder, org_folder_path, force); }, },]); }); } }; exports.InitManager = InitManager; exports.InitManager = InitManager = __decorate([ (0, typedi_1.Service)(), __metadata("design:paramtypes", [FileService_1.FileService, ConfigurationManager_1.ConfigurationManager, TaskService_1.TaskService]) ], InitManager); //# sourceMappingURL=InitManager.js.map