UNPKG

dtsgenerator

Version:

TypeScript d.ts file generator for JSON Schema file

157 lines (156 loc) 4.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.readConfig = exports.globFiles = exports.buildProxyOptions = exports.readUrl = exports.readStream = void 0; const tslib_1 = require("tslib"); const fs = tslib_1.__importStar(require("fs")); const url_1 = require("url"); const glob_1 = require("glob"); const http_proxy_agent_1 = require("http-proxy-agent"); const https_proxy_agent_1 = require("https-proxy-agent"); const typescript_1 = require("typescript"); const commandOptions_1 = require("./commandOptions"); function readStream(stream, encoding = 'utf8') { stream.setEncoding(encoding); return new Promise((resolve, reject) => { let data = ''; stream.on('data', (chunk) => (data += chunk)); stream.on('end', () => resolve(data)); stream.on('error', (error) => reject(error)); }); } exports.readStream = readStream; async function readUrl(url) { const init = buildProxyOptions(url); const res = await fetch(url, init); const data = await res.text(); if (!res.ok) { throw new Error(`Error on fetch from url(${url}): ${res.status}, ${data}`); } return data; } exports.readUrl = readUrl; function noProxy(url) { if (process.env.NO_PROXY) { for (const domain of process.env.NO_PROXY.split(/[, ]+/)) { if (url.hostname.endsWith(domain)) { return true; } } } return false; } function buildProxyOptions(url) { const parsedUrl = new url_1.URL(url); if (!noProxy(parsedUrl)) { if (parsedUrl.protocol === 'http:' && process.env.HTTP_PROXY) { return { agent: new http_proxy_agent_1.HttpProxyAgent(process.env.HTTP_PROXY), }; } else if (parsedUrl.protocol === 'https:' && process.env.HTTPS_PROXY) { return { agent: new https_proxy_agent_1.HttpsProxyAgent(process.env.HTTPS_PROXY), }; } } return undefined; } exports.buildProxyOptions = buildProxyOptions; async function globFiles(pattern, options) { const result = []; for await (const r of (0, glob_1.globIterate)(pattern, options !== null && options !== void 0 ? options : {})) { if (typeof r === 'string') { result.push(r); } else { result.push(r.fullpath()); } } return result; } exports.globFiles = globFiles; function readConfig(options) { var _a; let pc = {}; const configFile = (_a = options.configFile) !== null && _a !== void 0 ? _a : commandOptions_1.defaultConfigFile; try { pc = loadJSON(configFile); pc.configFile = configFile; } catch (err) { if (options.configFile != null) { console.error('Error to load config file from ' + options.configFile); } } if (pc.input == null) { pc.input = { files: [], urls: [], stdin: false, }; } if (options.files.length > 0) { pc.input.files = options.files; } else if (pc.input.files == null) { pc.input.files = []; } if (options.urls.length > 0) { pc.input.urls = options.urls; } else if (pc.input.urls == null) { pc.input.urls = []; } if (options.stdin != null) { pc.input.stdin = options.stdin; } else { pc.input.stdin = pc.input.stdin || (pc.input.files.length === 0 && pc.input.urls.length === 0); } if (options.out != null) { pc.outputFile = options.out; } if (options.target != null) { pc.target = convertToScriptTarget(options.target); } else if (pc.target != null) { pc.target = convertToScriptTarget(pc.target); } pc.outputAST = !!options.outputAST; return pc; } exports.readConfig = readConfig; function loadJSON(file) { const content = fs.readFileSync(file, 'utf-8'); return JSON.parse(content); } function convertToScriptTarget(target) { switch (target.trim().toLowerCase()) { case 'es3': return typescript_1.ScriptTarget.ES3; case 'es5': return typescript_1.ScriptTarget.ES5; case 'es2015': return typescript_1.ScriptTarget.ES2015; case 'es2016': return typescript_1.ScriptTarget.ES2016; case 'es2017': return typescript_1.ScriptTarget.ES2017; case 'es2018': return typescript_1.ScriptTarget.ES2018; case 'es2019': return typescript_1.ScriptTarget.ES2019; case 'es2020': return typescript_1.ScriptTarget.ES2020; case 'es2021': return typescript_1.ScriptTarget.ES2021; case 'es2022': return typescript_1.ScriptTarget.ES2022; case 'esnext': return typescript_1.ScriptTarget.ESNext; default: return typescript_1.ScriptTarget.Latest; } }