geenee-spell
Version:
regenerates project code based upon settings and a template
96 lines (95 loc) • 3.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.regenerateCode = void 0;
const { dirNames, fileNames, suffixes } = require('magicalstrings').constants;
const { getNsInfo } = require('magicalstrings').nsFiles;
const { getConfig } = require('magicalstrings').configs;
const { storeCustomCode, insertCustomCode } = require('custom-jeans');
const { copyCodeBaseToNewDir } = require('magicalstrings').copyCodeBaseToNewDir;
const { moveOverIgnored } = require('magicalstrings').moveOverIgnored;
const createSpecElement_1 = require("./specs/specCreation/createSpecElement");
const updatePackageJson_1 = require("./packageJson/updatePackageJson");
const fs = require('fs-extra');
const { setNsInfo } = require('magicalstrings').nsFiles;
const generateCode = require('geenee-rate');
async function regenerateCode(codeDir, session, sourceLocation) {
const sourceCodeDir = sourceLocation || codeDir;
const starter = `${sourceCodeDir}${suffixes.STARTUP_DIR}`;
const backupDir = `${sourceCodeDir}${suffixes.BACKUP_DIR}`;
const originalMetaDir = `${sourceCodeDir}/${dirNames.META}`;
const templateDir = `${originalMetaDir}/${dirNames.TEMPLATE}`;
const config = await getConfig(templateDir);
const metaDir = `${codeDir}/${dirNames.META}`;
if (sourceLocation) {
// this is a test generation (for checking the code) in a different directory
try {
await fs.remove(codeDir);
await copyCodeBaseToNewDir(starter, codeDir);
await moveOverIgnored(sourceCodeDir, codeDir, config);
}
catch (error) {
throw new Error(`cannot get test dir set up: ${error}`);
}
}
const nsInfo = await getNsInfo(codeDir);
// const customCodeJson = await storeCustomCode(sourceCodeDir, config)
if (!starter)
throw new Error(`the '${fileNames.NS_FILE}' file contains no starter. ` +
'You need a starter to generate code.');
try {
const { general } = config;
let generalSettings = nsInfo.general || {};
if (Object.keys(generalSettings).length === 0)
generalSettings = await createSpecElement_1.createSpecElement(general, session);
nsInfo.general = generalSettings;
await setNsInfo(codeDir, nsInfo);
await storeCustomCode(sourceCodeDir, config);
// replace the backup
await fs.remove(backupDir);
await copyCodeBaseToNewDir(codeDir, backupDir);
}
catch (error) {
throw new Error(`could not generate the code: ${error}`);
}
// regenerate the code
try {
await fs.remove(codeDir);
await copyCodeBaseToNewDir(starter, codeDir);
}
catch (error) {
throw new Error(`could not copy code base: ${error}`);
}
try {
await moveOverIgnored(backupDir, codeDir, config);
// copy over backed up package.json
const codePackageJsonPath = `${codeDir}/package.json`;
const backupPackageJsonPath = `${codeDir}${suffixes.BACKUP_DIR}/package.json`;
if (await fs.pathExists(backupPackageJsonPath)) {
await fs.copy(backupPackageJsonPath, codePackageJsonPath);
}
}
catch (error) {
throw new Error(`could not move over ignored: ${error}`);
}
try {
await generateCode(codeDir, nsInfo, config, templateDir, false);
}
catch (error) {
throw new Error(`could not regenerate the code: ${error}`);
}
await new Promise(r => setTimeout(r, 1000));
try {
const customCodeDoc = `${metaDir}/${fileNames.CUSTOM_CODE_FILE}`;
await insertCustomCode(codeDir, customCodeDoc, config);
}
catch (error) {
throw new Error(`could not insert custom code: ${error}`);
}
try {
await updatePackageJson_1.updatePackageJson(codeDir, starter);
}
catch (error) {
throw new Error(`could not build json: ${error}`);
}
}
exports.regenerateCode = regenerateCode;