@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
211 lines (210 loc) • 7.94 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNewPage = void 0;
const chalk_1 = __importDefault(require("chalk"));
const Slug_1 = require("diginext-utils/dist/Slug");
const string_1 = require("diginext-utils/dist/string");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const generateName = (name) => {
//
name = (0, string_1.capitalizeName)((0, string_1.clearUnicodeCharacters)(name)).replace(/\ /g, "");
return name;
};
const generateFileName = (name) => {
//
name = (0, Slug_1.makeSlug)((0, string_1.clearUnicodeCharacters)(name));
return name;
};
async function createNewPage(options) {
//
const isExample = options.e || options.example;
const isBlank = options.b || options.blank;
const isThree = options.t || options.three;
const isPixi = options.p || options.pixi;
const isOverwrite = options.o || options.overwrite;
const DIR_NAME = process.cwd();
const args = options._.slice();
args.shift();
args.shift();
const checkFramework = () => {
//
if (fs_1.default.existsSync(path_1.default.resolve(DIR_NAME, "package.json"))) {
const { dependencies } = require(path_1.default.resolve(DIR_NAME, "package.json"));
const { next } = dependencies;
if (next) {
if (!fs_1.default.existsSync(path_1.default.resolve(DIR_NAME, "tsconfig.json"))) {
//
console.log(chalk_1.default.red(`Not found tsconfig.json`));
console.log(chalk_1.default.red(`Support typescript only`));
return false;
}
}
else {
console.log(chalk_1.default.red(`Not found NextJS`));
return false;
}
}
else {
console.log(chalk_1.default.red(`Not found package.json`));
return false;
}
return true;
};
if (!checkFramework())
return;
const pathPages = args.map((x) => {
const name = generateName(x);
const nameComponent = `Page${name}`;
const fileName = generateFileName(x);
let PATH_PAGE = "pages";
let PATH_COMPONENT_PAGE = "components/router";
let PATH_MODULE = "modules";
let PAGE_TEMPLATE_FILENAME = "page-name";
let COMPONENT_TEMPLATE_FILENAME = "page-name";
const list = [];
if (isExample) {
PATH_PAGE = "pages/examples";
PATH_COMPONENT_PAGE = "components/router/examples";
}
switch (true) {
//
case isBlank:
{
PAGE_TEMPLATE_FILENAME = "blank";
COMPONENT_TEMPLATE_FILENAME = "blank";
}
break;
case isThree:
{
PAGE_TEMPLATE_FILENAME = "page-name";
COMPONENT_TEMPLATE_FILENAME = "three";
PATH_MODULE = "modules/three/scenes";
const nameClass = `${name}Scene`;
//
list.push({
source: path_1.default.resolve(__dirname, `../templates/nextjs/ts/0.1/modules/three.txt`),
target: `src/${PATH_MODULE}/${nameClass}.tsx`,
replaces: [
{
source: /\\t/g,
target: "\t",
},
{
source: /@@PAGE_FILE_NAME/g,
target: name,
},
],
});
}
break;
case isPixi:
{
PAGE_TEMPLATE_FILENAME = "page-name";
COMPONENT_TEMPLATE_FILENAME = "pixi";
PATH_MODULE = "modules/pixi/scenes";
const nameClass = `${name}Scene`;
//
list.push({
source: path_1.default.resolve(__dirname, `../templates/nextjs/ts/0.1/modules/pixi.txt`),
target: `src/${PATH_MODULE}/${nameClass}.tsx`,
replaces: [
{
source: /\\t/g,
target: "\t",
},
{
source: /@@PAGE_FILE_NAME/g,
target: name,
},
],
});
}
break;
default:
break;
}
list.push(...[
{
source: path_1.default.resolve(__dirname, `../templates/nextjs/ts/0.1/pages/${PAGE_TEMPLATE_FILENAME}.txt`),
target: `src/${PATH_PAGE}/${fileName}.tsx`,
replaces: [
//
{
source: /\\t/g,
target: "\t",
},
{
source: /@@URL/g,
target: `/${fileName}`,
},
{
source: /@@PAGE_NAME/g,
target: (0, string_1.capitalizeName)(fileName),
},
{
source: /@@PAGE_FILE_NAME/g,
target: name,
},
{
source: /@@PATH_COMPONENT/g,
target: `@/${PATH_COMPONENT_PAGE}/${nameComponent}`,
},
],
},
{
source: path_1.default.resolve(__dirname, `../templates/nextjs/ts/0.1/components/${COMPONENT_TEMPLATE_FILENAME}.txt`),
target: `src/${PATH_COMPONENT_PAGE}/${nameComponent}.tsx`,
replaces: [
//
{
source: /\\t/g,
target: "\t",
},
{
source: /@@PAGE_FILE_NAME/g,
target: name,
},
],
},
]);
return {
name,
list,
};
});
const createaFileAndReplaceText = async (list) => {
await Promise.all(list.map(async ({ source, target, replaces }) => {
//
let content = fs_1.default.readFileSync(source, "utf-8");
replaces.forEach((item) => {
content = content.replace(item.source, item.target);
});
const dirPath = path_1.default.dirname(`${DIR_NAME}/${target}`);
if (fs_1.default.existsSync(target)) {
if (isOverwrite) {
//
console.log(chalk_1.default.green(`Overwrite ${target}!`));
}
else {
console.log(chalk_1.default.yellow(`Found ${target} exited! do you want use -o or --overwrite?`));
return;
}
}
if (!fs_1.default.existsSync(dirPath)) {
fs_1.default.mkdirSync(dirPath, { recursive: true });
}
fs_1.default.writeFileSync(`${DIR_NAME}/${target}`, content);
}));
//
};
await Promise.all(pathPages.map(async ({ name, list }) => {
await createaFileAndReplaceText(list);
}));
//
}
exports.default = createNewPage;
exports.createNewPage = createNewPage;