@luban-cli/cli-plugin-service
Version:
A development runtime environment dependency
101 lines • 4.19 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.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