You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
const path = require('path')const launch = require('launch-editor')
module.exports = (specifiedEditor, srcRoot, onErrorCallback) => { if (typeof specifiedEditor === 'function') { onErrorCallback = specifiedEditor specifiedEditor = undefined }
if (typeof srcRoot === 'function') { onErrorCallback = srcRoot srcRoot = undefined }
srcRoot = srcRoot || process.cwd()
return function launchEditorMiddleware(req, res) { let url
try { const fullUrl = req.url.startsWith('http') ? req.url : `http://localhost${req.url}` url = new URL(fullUrl) // eslint-disable-next-line no-unused-vars
} catch (_err) { res.statusCode = 500 res.end(`launch-editor-middleware: invalid URL.`) return }
const file = url.searchParams.get('file') if (!file) { res.statusCode = 500 res.end( `launch-editor-middleware: required query param "file" is missing.` ) } else { const resolved = file.startsWith('file://') ? file : path.resolve(srcRoot, file) launch(resolved, specifiedEditor, onErrorCallback) res.end() } }}
|