mrkdown
Version:
Markdown files to HTML static site generator - angular.js app
196 lines (195 loc) • 9.89 kB
JavaScript
;
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"));