UNPKG

mincu-debug-tools

Version:

[![npm install size](https://packagephobia.com/badge?p=mincu-debug-tools)](https://packagephobia.com/result?p=mincu-debug-tools)

110 lines (90 loc) 3.04 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var http = require('http'); var path = require('path'); var serveHandler = require('serve-handler'); var linkPreviewJs = require('link-preview-js'); var debug = require('debug'); var crossFetch = require('cross-fetch'); var internalIp = require('internal-ip'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } var path__default = /*#__PURE__*/_interopDefault(path); var serveHandler__default = /*#__PURE__*/_interopDefault(serveHandler); var internalIp__default = /*#__PURE__*/_interopDefault(internalIp); const makeApi = cb => { return (req, res) => cb(req, res); }; const log = debug.debug('preview'); const cache = new Map(); const getPreviewContent = async url => { if (url.match('http://localhost')) { const res = await crossFetch.fetch(url); const html = await res.text(); return linkPreviewJs.getPreviewFromContent({ data: html, headers: res.headers, url: res.url }); } return linkPreviewJs.getLinkPreview(url); }; const preview = makeApi(async (req, res) => { if (!req.url) return; const params = new URLSearchParams(req.url.split('?')[1]); const target = params.get('target'); if (target && typeof target === 'string') { try { let content = cache.get(target); if (content) { log('hitting cache: ', content, target); res.end(JSON.stringify(content)); return; } content = await getPreviewContent(target); log('fresh load: ', content, target); cache.set(target, content); res.end(JSON.stringify(content)); } catch (e) { log('error: ', e); res.end(e.message); } } else { log('error: ', 'target is not a string'); res.end('No target'); } }); const IPV4 = internalIp__default["default"].v4.sync(); const PUBLIC_PATH = path__default["default"].resolve(__dirname, __dirname.includes('dist') ? '../' : '', '../output'); const DEV_TOOL_PORT = 23333; const cors = (req, res) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Request-Method', '*'); res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET'); res.setHeader('Access-Control-Allow-Headers', '*'); if (req.method === 'OPTIONS') { res.writeHead(200); res.end(); return; } }; // Exported for mincu-debug const startDevTool = () => { http.createServer(async (req, res) => { cors(req, res); const url = req.url || ''; if (url.includes('/api/preview')) { return preview(req, res); } else if (url.includes('/api/ip')) { return makeApi((req, res) => { res.end(IPV4); })(req, res); } else { return serveHandler__default["default"](req, res, { public: PUBLIC_PATH }); } }).listen(DEV_TOOL_PORT, () => { console.log('\r' + `DebugTools listening on http://localhost:${DEV_TOOL_PORT}`); }); }; exports.DEV_TOOL_PORT = DEV_TOOL_PORT; exports.startDevTool = startDevTool;