UNPKG

ncc-prototype-email-alerts-sub

Version:

Northumberland Council Front End Email Alerts Subscription Prototype

124 lines (123 loc) 5.85 kB
"use strict"; 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); };