@viewdo/dxp-story-cli
Version:
DXP Story Management CLI
335 lines • 17.9 kB
JavaScript
;
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