| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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()
- }
- }
- }
|