UNPKG

mrkdown

Version:

Markdown files to HTML static site generator - angular.js app

196 lines (195 loc) 9.89 kB
#!/usr/bin/env node "use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var path_1 = __importDefault(require("path")); var fs_1 = __importDefault(require("fs")); var chalk_1 = __importDefault(require("chalk")); var uglifyJs = require('uglify-js'); var uglifyCss = require("uglifycss"); var uglifyHtml = require('html-minifier').minify; var config_1 = require("./lib/config"); var file_utils_1 = require("./lib/file-utils"); var const_1 = require("./lib/const"); var common_1 = require("./lib/common"); var file_info_1 = require("./models/file-info"); var defaultConfig = (0, config_1.fetchConfig)(); function generate(directory) { if (!fs_1.default.existsSync(directory)) { fs_1.default.mkdirSync(directory); } // home html if (defaultConfig.home) { if (defaultConfig.homeHtml) { if (defaultConfig.prod) { try { defaultConfig.homeHtml = uglifyHtml(defaultConfig.homeHtml, const_1.CONFIG_HTML_UGLIFY); } catch (error) { console.log("unable to minify: " + directory + '/home.html'); } } fs_1.default.writeFileSync(directory + '/home.html', defaultConfig.homeHtml); } else if (defaultConfig.homeHtmlUrl && fs_1.default.existsSync(defaultConfig.homeHtmlUrl)) { var homeFile = fs_1.default.readFileSync(path_1.default.join(defaultConfig.homeHtmlUrl)); if (defaultConfig.prod) { try { homeFile = uglifyHtml(homeFile.toString(), const_1.CONFIG_HTML_UGLIFY); } catch (error) { console.log("unable to minify: " + directory + '/home.html'); } } fs_1.default.writeFileSync(directory + '/home.html', homeFile); } else { console.log(chalk_1.default.red(defaultConfig.homeHtmlUrl + " [homeHtmlUrl] does not exists")); } } var skipFolderName = __spreadArray([defaultConfig.distFolderName], defaultConfig.skipFolders, true); var fileInfos = (0, file_utils_1.readAllFiles)(path_1.default.resolve(), skipFolderName, const_1.CONFIG_ACCEPT_FILES).map(function (x) { return new file_info_1.FileInfo(x); }); (0, file_utils_1.createFiles)(defaultConfig.distFolderName, fileInfos); var basicFileInfo = fileInfos.map(function (x) { return ({ id: x.id, file: x.filePath }); }); var linkStructure = (0, common_1.createLinkStructure)(basicFileInfo); var sideLinkHtml = (0, common_1.generateSideLink)(linkStructure); // generate html for link var angularRouterLink = fileInfos.map(function (x) { if (x.codeCount > 0) { return ".when(\"/".concat(x.url, "\", { templateUrl : \"./").concat(x.templateUrl, "\", controller: \"").concat(x.controlName, "\" })"); } else { return ".when(\"/".concat(x.url, "\", { templateUrl : \"./").concat(x.templateUrl, "\" })"); } }).join(""); var controllerFunctions = fileInfos.filter(function (x) { return x.codeCount > 0; }) .map(function (x) { return "app.controller(\"".concat(x.controlName, "\", ['$scope', ").concat(x.code ? " '$timeout', " : "", "function($scope").concat(x.code ? ", $timeout" : "", "){ \n").concat(x.code || "", " }])"); }) .join("\n"); defaultConfig.menus = fileInfos.map(function (x) { return { controlName: x.controlName, filePath: x.filePath, folderStructureName: x.folderStructureName, id: x.id, menuName: x.menuName, templateUrl: x.templateUrl, url: x.url }; }); // app-module var scriptFile = fs_1.default.readFileSync(path_1.default.join(__dirname, 'templates', 'app-module.js')).toString(); scriptFile = scriptFile.toString().replace(/\/\*\{\{routes-placeholder\}\}\*\//gi, angularRouterLink).toString(); scriptFile = scriptFile.toString().replace(/\/\*\{\{controllers-placeholder\}\}\*\//gi, controllerFunctions); scriptFile = scriptFile.replace(/\/\*\{\{ng-config-placeholder\}\}\*\//gi, JSON.stringify(defaultConfig, null, 2)); if (!defaultConfig.useHash) scriptFile = scriptFile.replace(/\/\*\{\{useHash-placeholder\}\}\*\//gi, '$locationProvider.html5Mode(true);'); else scriptFile = scriptFile.replace(/\/\*\{\{useHash-placeholder\}\}\*\//gi, ''); if (defaultConfig.prod) { try { var result = uglifyJs.minify(scriptFile); scriptFile = result.code; } catch (error) { console.log("unable to minify: " + directory + '/app-module.js'); } } fs_1.default.writeFileSync(directory + '/app-module.js', scriptFile); // models var modelsFile = fs_1.default.readFileSync(path_1.default.join(__dirname, 'templates', 'models.js')); if (defaultConfig.prod) { try { var result = uglifyJs.minify(modelsFile.toString()); modelsFile = result.code; } catch (error) { console.log("unable to minify: " + directory + '/models.js'); } } fs_1.default.writeFileSync(directory + '/models.js', modelsFile); // auth-controller var authFile = fs_1.default.readFileSync(path_1.default.join(__dirname, 'templates', 'auth-controller.js')).toString(); authFile = authFile.toString().replace(/\/\*\{\{routes-placeholder\}\}\*\//gi, angularRouterLink); if (defaultConfig.prod) { try { var result = uglifyJs.minify(authFile); authFile = result.code; } catch (error) { console.log("unable to minify: " + directory + '/auth-controller.js'); } } fs_1.default.writeFileSync(directory + '/auth-controller.js', authFile); // style var styleFile = fs_1.default.readFileSync(path_1.default.join(__dirname, 'templates', 'style.css')); if (defaultConfig.prod) { try { var result = uglifyCss.processString(styleFile.toString()); styleFile = result; } catch (error) { console.log("unable to minify: " + directory + '/style.css'); } } fs_1.default.writeFileSync(directory + '/style.css', styleFile.toString()); // index html var indexFile = fs_1.default.readFileSync(path_1.default.join(__dirname, 'templates', 'index.html')).toString(); indexFile = indexFile.toString(); indexFile = indexFile.replace(/\<\!-- \{\{sideLink-placeholder\}\} --\>/gi, sideLinkHtml); indexFile = indexFile.replace(/\<\!-- \{\{favicon-placeholder\}\} --\>/gi, defaultConfig.favIconUrl); if (!defaultConfig.useHash) indexFile = indexFile.replace(/\<\!-- \{\{base-placeholder\}\} --\>/gi, '<base href="/">'); else indexFile = indexFile.replace(/\<\!-- \{\{base-placeholder\}\} --\>/gi, ''); if (defaultConfig.prod) { try { indexFile = uglifyHtml(indexFile, const_1.CONFIG_HTML_UGLIFY); } catch (error) { console.log("unable to minify: " + directory + '/index.html'); } } fs_1.default.writeFileSync(directory + '/index.html', indexFile); } var fullTime = (0, file_utils_1.getExecutionTime)(function () { var command = process.argv[2]; if (command && command.toLowerCase() == "build") { var commands = process.argv.map(function (x) { return x.trim().toLocaleLowerCase(); }); if (commands.some(function (x) { return x.toLowerCase() === "--use-hash"; }) || commands.some(function (x) { return x.toLowerCase() === '--use-hash=true'; })) { defaultConfig.useHash = true; } else if (commands.some(function (x) { return x.toLowerCase() === '--use-hash=false'; })) { defaultConfig.useHash = false; } if (commands.some(function (x) { return x.toLowerCase() === "--prod"; })) { defaultConfig.prod = true; } var rmTime = (0, file_utils_1.getExecutionTime)(function () { return (0, common_1.removeExistingFolder)(defaultConfig.distFolderName); }); console.log(chalk_1.default.yellow("".concat(rmTime, " sec ")) + chalk_1.default.green("removing dist folder files")); var skipFolderName_1 = __spreadArray([defaultConfig.distFolderName], defaultConfig.skipFolders, true); var imgTime = (0, file_utils_1.getExecutionTime)(function () { var allImageFiles = (0, file_utils_1.readAllFiles)(path_1.default.resolve(), skipFolderName_1, const_1.CONFIG_IMAGE_EXTENSION); (0, file_utils_1.moveImageFiles)(defaultConfig.distFolderName, allImageFiles); }); console.log(chalk_1.default.yellow("".concat(imgTime, " sec ")) + chalk_1.default.green("copy all image files to ".concat((defaultConfig.distFolderName)))); var gnTime = (0, file_utils_1.getExecutionTime)(function () { return generate(defaultConfig.distFolderName); }); console.log(chalk_1.default.yellow("".concat(gnTime, " sec ")) + chalk_1.default.green("generating HTML files")); } else if (command && command.toLowerCase() == "init") { (0, common_1.createConfigFile)(); } else { (0, common_1.showOption)(); } }); console.log(chalk_1.default.yellow("\n".concat(fullTime, " sec ")) + chalk_1.default.green("total time\n"));