ssr-hook
Version:
Server-Side Rendering hook for your React projects.
72 lines (71 loc) • 2.97 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var path_1 = require("path");
var child_process_1 = require("child_process");
var fs_1 = require("fs");
var yargs_1 = __importDefault(require("yargs"));
var helpers_1 = require("yargs/helpers");
var version = JSON.parse((0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, "package.json"), "utf-8")).version.version;
var argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
.usage('\nSSR hook - Server-Site Rendering hook for React')
.help('help').alias('help', 'h')
.version('version', version).alias('version', 'v')
.options({
init: {
alias: 'i',
type: "string",
description: "<project name> Input project name",
requiresArg: true,
},
})
.parse();
var name = argv === null || argv === void 0 ? void 0 : argv.init;
if (typeof name !== "string" || !name.trim()) {
console.log("Missing project name!");
process.exit(1);
}
name = name.trim();
var nameSlug = slugify(name);
var cwd = (0, path_1.resolve)(process.cwd());
var path = (0, path_1.resolve)(cwd, nameSlug);
if ((0, fs_1.existsSync)(path)) {
console.log("Folder / Project ".concat(nameSlug, " already exists!"));
process.exit(1);
}
console.log("\nCreating project ".concat(name, "..."));
(0, fs_1.mkdirSync)(path);
console.log("\nCopy init files...");
(0, fs_1.cpSync)((0, path_1.resolve)(__dirname, "init"), path, { recursive: true });
console.log("\nSetting project name...");
changeName("package.json", nameSlug);
changeName("README.md", name);
changeName("src/site.webmanifest", name);
changeName("src/pages/Item.tsx", name);
changeName("src/pages/Items.tsx", name);
changeName("src/pages/NotFound.tsx", name);
console.log("\nInstalling dependencies...");
(0, child_process_1.execSync)("cd " + path + " && npm install", { stdio: "inherit" });
console.log("\nCreating project ".concat(name, " id done!\nGo to the project: \n$ cd ").concat(nameSlug, "\n\nRun development server:\n$ npm run dev\nOpen http://localhost:1234 in your browser.\n\nBuild project:\n$ npm run build\n\nRun production server:\n$ npm start\n\n\nTell your developer friends about RRS-hook ;)\n"));
// ---------------------- helpers ----------------------
function slugify(text) {
return text
.toString()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
.replace(/([A-Z])/g, ' $1')
.toLowerCase()
.trim()
.replace(/\s+/g, '-')
.replace(/[^\w-]+/g, '')
.replace(/--+/g, '-');
}
function changeName(fileName, name) {
var pathFile = (0, path_1.resolve)(path, fileName);
var file = (0, fs_1.readFileSync)(pathFile, "utf-8");
var fileChanged = file.replaceAll("__NAME__", name);
(0, fs_1.writeFileSync)(pathFile, fileChanged);
}