mincu-debug-tools
Version:
[](https://packagephobia.com/result?p=mincu-debug-tools)
110 lines (90 loc) • 3.04 kB
JavaScript
;
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;