UNPKG

@luban-cli/cli-plugin-service

Version:
101 lines 4.19 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.delay = exports.render = exports.renderFile = exports.getModuleFromString = exports.getTemplate = void 0; const isomorphic_fetch_1 = __importDefault(require("isomorphic-fetch")); const module_1 = __importDefault(require("module")); const vm_1 = __importDefault(require("vm")); const ejs_1 = __importDefault(require("ejs")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const globby_1 = __importDefault(require("globby")); const https_1 = __importDefault(require("https")); // https://github.com/node-fetch/node-fetch/issues/19 const agent = new https_1.default.Agent({ rejectUnauthorized: false }); exports.getTemplate = (url) => { const useHttps = url.startsWith("https://"); const options = useHttps ? { agent } : {}; return new Promise((resolve, reject) => { isomorphic_fetch_1.default(url, options) // eslint-disable-next-line @typescript-eslint/no-explicit-any .then((response) => { if (response.status >= 400) { reject(new Error("Bad response from server")); } resolve(response.text()); }) .catch((error) => { reject(error); }); }); }; exports.getModuleFromString = (bundle, filename, initModule) => { const _module = initModule; const wrapper = module_1.default.wrap(bundle); const script = new vm_1.default.Script(wrapper, { filename, displayErrors: false, }); const result = script.runInThisContext(); try { result.call(_module.exports, _module.exports, require, _module); } catch (ignored) { throw new Error(ignored); } return _module; }; function renderFile(name, data, ejsOptions = {}) { const template = fs_1.default.readFileSync(name, "utf-8"); return ejs_1.default.render(template, data, Object.assign(Object.assign({}, ejsOptions), { async: false })); } exports.renderFile = renderFile; function extractCallDir() { const errorStack = { stack: "" }; Error.captureStackTrace(errorStack); const callSite = errorStack.stack.split("\n")[3]; if (callSite) { const fileNameMatchResult = callSite.match(/\s\((.*):\d+:\d+\)$/); if (Array.isArray(fileNameMatchResult)) { return path_1.default.dirname(fileNameMatchResult[1]); } } return ""; } function render(dir, additionalData = {}, ejsOptions = {}) { return __awaiter(this, void 0, void 0, function* () { const baseDir = extractCallDir(); const source = path_1.default.resolve(baseDir, dir); const _files = yield globby_1.default(["**/*"], { cwd: source }); const files = {}; for (const rawPath of _files) { const sourcePath = path_1.default.resolve(source, rawPath); const content = renderFile(sourcePath, additionalData, ejsOptions); if (Buffer.isBuffer(content) || /[^\s]/.test(content)) { files[rawPath] = content; } } return files; }); } exports.render = render; function delay(value) { return new Promise((resolve) => { setTimeout(() => { resolve(); }, value); }); } exports.delay = delay; //# sourceMappingURL=serverRender.js.map