ncc-prototype-email-alerts-sub
Version:
Northumberland Council Front End Email Alerts Subscription Prototype
124 lines (123 loc) • 5.85 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.replacePlaceHolders = exports.copyScaffoldFiles = exports.setupScaffoldFiles = void 0;
const replace_in_file_1 = __importDefault(require("replace-in-file"));
const logger_1 = __importDefault(require("../libs/logger"));
const promises_1 = require("node:fs/promises");
const path_1 = __importDefault(require("path"));
const get_root_path_1 = require("get-root-path");
const promises_2 = require("node:fs/promises");
const node_fs_1 = require("node:fs");
const fs_extra_1 = require("fs-extra");
const glob_1 = require("glob");
const setupScaffoldFiles = (routeName, method, template) => __awaiter(void 0, void 0, void 0, function* () {
const methodType = method.toLocaleLowerCase();
try {
const targetDir = path_1.default.join(get_root_path_1.rootPath, 'routes', routeName);
yield (0, promises_2.mkdir)(targetDir).then(() => {
(0, node_fs_1.access)(targetDir, promises_1.constants.W_OK, (err) => __awaiter(void 0, void 0, void 0, function* () {
logger_1.default.info(err);
if (err) {
throw Error('Copy failed');
}
else {
yield copyScaffoldFiles(routeName, method, template);
yield replacePlaceHolders(/TYPE/g, methodType, `${get_root_path_1.rootPath}/routes/${routeName}/*.ts`);
yield replacePlaceHolders(/PATH/g, routeName, `${get_root_path_1.rootPath}/routes/${routeName}/*.ts`);
}
}));
});
return true;
}
catch (e) {
logger_1.default.info(e);
return false;
}
});
exports.setupScaffoldFiles = setupScaffoldFiles;
const replacePlaceHolders = (placeholder, replacement, filePath) => __awaiter(void 0, void 0, void 0, function* () {
const formattedPath = formatPath(filePath);
const opts = {
files: formattedPath,
from: placeholder,
to: replacement,
};
const fileDir = filePath.replace('/*.ts', '');
(0, node_fs_1.access)(fileDir, promises_1.constants.W_OK, (err) => __awaiter(void 0, void 0, void 0, function* () {
const files = yield (0, glob_1.glob)(formattedPath);
if (err || !files.some) {
logger_1.default.info(err);
throw Error('Replace failed, files not found.');
}
(0, node_fs_1.access)(files[0], promises_1.constants.W_OK, (fileErr) => __awaiter(void 0, void 0, void 0, function* () {
if (fileErr) {
throw Error('Cannot read file');
}
const replaceResult = replace_in_file_1.default.sync(opts);
logger_1.default.info(replaceResult);
return;
}));
}));
return;
});
exports.replacePlaceHolders = replacePlaceHolders;
const copyScaffoldFiles = (routeName, pageType, templateType) => __awaiter(void 0, void 0, void 0, function* () {
const templateFilename = `${routeName}.njk`;
const templateName = `${templateType}.njk`;
const routeDest = `/routes/${routeName}`;
logger_1.default.info(`Creating page: ${routeName} with template ${templateType}`);
const templatePath = path_1.default.join(get_root_path_1.rootPath, '/scaffold/pages', templateName);
let routePath = path_1.default.join(get_root_path_1.rootPath, '/scaffold/templates/other');
if (pageType == 'page') {
routePath = path_1.default.join(get_root_path_1.rootPath, '/scaffold/templates/page');
}
try {
yield (0, fs_extra_1.copy)(templatePath, path_1.default.join(get_root_path_1.rootPath, 'views', templateFilename));
logger_1.default.info(`Page created: ${path_1.default.join(get_root_path_1.rootPath, routeDest, templateFilename)}`);
}
catch (copyErr) {
if (copyErr) {
logger_1.default.debug(copyErr);
}
}
try {
const filterFiles = (source) => {
if (pageType === 'get' && source.includes('post')) {
return false;
}
if (pageType === 'post' && source.includes('get')) {
return false;
}
return true;
};
yield (0, fs_extra_1.copy)(routePath, path_1.default.join(get_root_path_1.rootPath, routeDest), { filter: filterFiles });
logger_1.default.info(`Files created: ${path_1.default.join(get_root_path_1.rootPath, routeDest)}`);
}
catch (err) {
throw Error('Copy templates failed');
}
const globPath = formatPath(path_1.default.join(get_root_path_1.rootPath, routeDest));
const createdFiles = yield (0, glob_1.glob)(globPath + '/*.ts');
if (!createdFiles.some) {
throw Error('Cannot read templates');
}
return;
});
exports.copyScaffoldFiles = copyScaffoldFiles;
const formatPath = (path) => {
const { platform } = process;
const locale = path_1.default[platform === `win32` ? `win32` : `posix`];
return path.split(path_1.default.sep).join(locale.sep);
};