@liascript/devserver 1.1.2--0.10.30 → 1.1.2--0.10.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/views/main.hbs +1 -1
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -268,7 +268,7 @@ function $aa3bf3164f10b283$var$liascript() {
|
|
|
268
268
|
}
|
|
269
269
|
if ($aa3bf3164f10b283$var$argv.v || $aa3bf3164f10b283$var$argv.version) {
|
|
270
270
|
console.log("DevServer: 1.1.2");
|
|
271
|
-
console.log("LiaScript: 0.10.
|
|
271
|
+
console.log("LiaScript: 0.10.32");
|
|
272
272
|
process.exit();
|
|
273
273
|
}
|
|
274
274
|
if ($aa3bf3164f10b283$var$argv.h || $aa3bf3164f10b283$var$argv.help) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/index.ts","src/lib.ts"],"sourcesContent":["const argv = require('minimist')(process.argv.slice(2))\n\nimport * as server from './lib'\n\nfunction liascript() {\n console.log(' _ _ ____ _ _')\n console.log('| | (_) __ _/ ___| ___ _ __(_)_ __ | |_')\n console.log(\"| | | |/ _` \\\\___ \\\\ / __| '__| | '_ \\\\| __|\")\n console.log('| |___| | (_| |___) | (__| | | | |_) | |_ ')\n console.log('|_____|_|\\\\__,_|____/ \\\\___|_| |_| .__/ \\\\__|')\n console.log(' |_|')\n console.log()\n}\n\nif (argv.v || argv.version) {\n console.log('DevServer: 1.1.2')\n console.log('LiaScript: 0.10.30')\n process.exit()\n}\n\nif (argv.h || argv.help) {\n liascript()\n\n console.log('-h --help show this help')\n console.log('-v --version show version information')\n console.log('-i --input input README.md file or folder (default: .)')\n console.log('-n --hostname hostname of your server (default: localhost)')\n console.log('-p --port used port number (default: 3000)')\n console.log('-l --live do live reload on file change')\n console.log('-o --open open in default browser')\n console.log('-t --test test online on https://LiaScript.github.io')\n console.log()\n console.log('-r --responsiveVoice add optional responsiveVoice support,')\n console.log(' or pass your own responsiveVoice key.')\n console.log(' Adding this feature might slow down')\n console.log(' the reloading speed.')\n console.log(' For more information visit:')\n console.log(' https://responsivevoice.org')\n\n process.exit()\n}\n\nliascript()\n\nserver.init(argv.node_modules)\n\ntry {\n server.start(\n argv.p || argv.port,\n argv.n || argv.hostname,\n argv.i || argv.input,\n argv.r || argv.responsiveVoice || process.env.RESPONSIVE_VOICE_KEY,\n argv.l || argv.live,\n argv.o || argv.open,\n argv.t || argv.test\n )\n} catch (e) {\n console.error('Error: ', e.message)\n process.exit()\n}\n\nconsole.log('✨ hit Ctrl-c to close the server')\n","require('dotenv').config()\nimport * as express from 'express'\n\nimport * as fs from 'fs'\nimport * as path from 'path'\n\nconst cors = require('cors')\nconst handlebars = require('express-handlebars')\nconst ip = require('ip')\nconst open = require('open')\nconst bodyParser = require('body-parser')\n\nconst app: express.Application = express()\napp.use(bodyParser.json())\n\nvar dirname = ''\nvar node_modules\nvar reloadPath = ''\nvar liascriptPath = ''\n\nvar clients = []\n\nconst gotoScript = `<script>\nif (!window.LIA) {\n window.LIA = {}\n}\n\nvar filename__ = document.location.search.replace(\"?\"+document.location.origin, \"\")\n\nwindow.LIA.lineGoto = function(linenumber) {\n fetch(\"/lineGoto\", {\n method: \"POST\",\n headers: {'Content-Type': 'application/json'}, \n body: JSON.stringify({\n \"linenumber\": linenumber,\n \"filename\": filename__\n })\n }).then(res => {\n console.log(\"Goto line\", linenumber);\n });\n}\n\nconst events = new EventSource('/gotoLine');\nevents.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n if (data.filename == filename__) {\n console.log(\"goto line:\", data.linenumber);\n window.LIA.gotoLine(data.linenumber)\n }\n } catch (e) {\n console.warn(\"gotoLine failed\")\n }\n};\n</script>`\n\nvar serverPointer: any\n\ninit(__dirname)\n\nexport function init(serverPath?: string, nodeModulesPath?: string) {\n dirname = serverPath || path.join(__dirname, '..')\n\n node_modules = nodeModulesPath || path.join(dirname, 'node_modules')\n\n reloadPath = path.resolve(\n path.join(node_modules, 'reloadsh.js/reloader.browser.js')\n )\n\n liascriptPath = path.resolve(\n path.join(node_modules, '@liascript/editor/dist')\n )\n}\n\nexport function start(\n port?: number,\n hostname?: string,\n input?: string,\n responsiveVoice?: string,\n liveReload?: boolean,\n openInBrowser?: boolean,\n testOnline?: boolean,\n gotoCallback?: (linenumber: number, filename: string) => void\n) {\n port = port || 3000\n hostname = hostname || 'localhost'\n openInBrowser = openInBrowser || false\n input = input || '.'\n liveReload = liveReload || false\n testOnline = testOnline || false\n\n var project: {\n path: string\n readme?: string\n } = {\n path: input,\n readme: undefined,\n }\n\n if (input) {\n const stats = fs.lstatSync(input)\n\n // Is it a directory?\n if (stats.isDirectory()) {\n project.path = input\n } else if (stats.isFile()) {\n project.path = path.dirname(input)\n project.readme = path.basename(input)\n }\n }\n\n app.set('view engine', 'hbs')\n app.engine(\n 'hbs',\n handlebars({\n layoutsDir: path.resolve(path.join(dirname, 'views/layouts')),\n defaultLayout: 'main',\n extname: 'hbs',\n })\n )\n app.set('views', path.resolve(path.join(dirname, 'views')))\n\n app.get('/', function (req: express.Request, res: express.Response) {\n res.redirect('/home')\n })\n\n app.get('/gotoLine', eventsHandler)\n\n app.get('/home*', function (req: express.Request, res: express.Response) {\n const currentPath = project.path + '/' + req.params[0]\n\n const stats = fs.lstatSync(currentPath)\n\n // Is it a directory?\n if (stats.isDirectory()) {\n const files = fs.readdirSync(currentPath).filter((e: string) => {\n return e[0] !== '.'\n })\n\n let basePath = '/home'\n let pathNames = req.params[0].split('/').filter((e: string) => {\n return e !== ''\n })\n\n let paths: { name: string; href: string }[] = []\n for (let i = 0; i < pathNames.length; i++) {\n basePath += '/' + pathNames[i]\n paths.push({ name: pathNames[i], href: basePath })\n }\n\n res.render('main', {\n layout: 'index',\n path: paths,\n file: files\n .map((file: string) => {\n return {\n name: file,\n href: `http://${hostname}:${port}/home${req.params[0]}/${file}`,\n isDirectory: fs.lstatSync(currentPath + '/' + file).isDirectory(),\n }\n })\n .sort(\n (\n a: {\n name: string\n href: string\n isDirectory: boolean\n },\n b: {\n name: string\n href: string\n isDirectory: boolean\n }\n ) => {\n if (a.isDirectory && !b.isDirectory) {\n return -1\n } else if (!a.isDirectory && b.isDirectory) {\n return 1\n } else {\n if (a.name.toLocaleLowerCase() < b.name.toLocaleLowerCase()) {\n return -1\n } else {\n return 1\n }\n }\n return 0\n }\n ),\n })\n } else if (stats.isFile()) {\n if (req.params[0].toLocaleLowerCase().endsWith('.md')) {\n if (testOnline) {\n res.redirect(\n `https://LiaScript.github.io/course/?http://${hostname}:${port}/${req.params[0]}`\n )\n } else {\n res.redirect(\n `/liascript/index.html?http://${hostname}:${port}/${req.params[0]}`\n )\n }\n } else {\n res.sendFile(req.params[0], { root: project.path })\n }\n } else {\n res.send('ups, something went wrong')\n }\n })\n\n app.get(\n '/liascript/',\n function (req: express.Request, res: express.Response) {\n res.redirect('/liascript/index.html')\n }\n )\n\n app.get(\n '/liascript/index.html',\n function (req: express.Request, res: express.Response) {\n // ------------------------------------\n if (liveReload && responsiveVoice) {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(\n data.replace(\n '</head>',\n `<script type='text/javascript' src='/reloader/reloader.js'></script>\n <script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script>\n ${gotoScript}\n </head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else if (liveReload) {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(\n data.replace(\n '</head>',\n `<script type='text/javascript' src='/reloader/reloader.js'></script>\n ${gotoScript}\n </head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else if (responsiveVoice) {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(\n data.replace(\n '</head>',\n `<script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script>\n ${gotoScript}\n </head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(data.replace('</head>', `${gotoScript}</head>`))\n }\n )\n }\n }\n )\n\n // load everything from the liascript folder\n app.get(\n '/liascript/*',\n function (req: express.Request, res: express.Response) {\n res.sendFile(req.params[0], { root: liascriptPath })\n }\n )\n // ignore this one\n app.get('/sw.js', function (req: express.Request, res: express.Response) {})\n app.get(\n '/favicon.ico',\n function (req: express.Request, res: express.Response) {}\n )\n\n // pass the reloader, to be used for live updates\n app.get(\n '/reloader/reloader.js',\n function (req: express.Request, res: express.Response) {\n res.sendFile(reloadPath)\n }\n )\n\n // react to click-events\n app.post('/lineGoto', function (req: express.Request, res: express.Response) {\n if (gotoCallback) {\n try {\n const linenumber = req.body.linenumber\n const filename = req.body.filename\n gotoCallback(linenumber, filename)\n } catch (e) {\n console.warn(\n \"lineGoto event with wrong datatype, you have to provide {'linenumber': int, 'filename': string}\"\n )\n }\n }\n return res.json({})\n })\n\n // everything else comes from the current project folder\n app.get('/*', cors(), function (req: express.Request, res: express.Response) {\n res.sendFile(req.originalUrl, { root: project.path })\n })\n\n let localURL = 'http://' + hostname + ':' + port\n\n if (project.path && project.readme) {\n localURL +=\n '/liascript/index.html?http://' +\n hostname +\n ':' +\n port +\n '/' +\n project.readme\n }\n\n if (testOnline && project.readme) {\n localURL =\n 'https://LiaScript.github.io/course/?http://' +\n hostname +\n ':' +\n port +\n '/' +\n project.readme\n }\n\n const server = require('reloadsh.js')(\n app,\n liveReload ? [path.join(project.path, project.readme || '')] : []\n )\n\n if (liveReload) {\n console.log(\n `✨ watching for changes on: \"${path.join(\n project.path || '',\n project.readme || ''\n )}\"`\n )\n }\n\n server.on('error', (e: any) => {\n throw e\n })\n\n server.listen(port)\n\n if (openInBrowser) {\n open(localURL)\n }\n\n console.log('📡 starting server')\n console.log(` - local: ${localURL}`)\n console.log(\n ` - on your network: ${localURL.replace(hostname, ip.address())}`\n )\n\n serverPointer = server\n}\n\nexport function stop() {\n if (serverPointer) {\n serverPointer.close()\n }\n}\n\nexport function gotoLine(linenumber: number, filename: string) {\n clients.forEach((client) =>\n client.response.write(\n `data: ${JSON.stringify({\n linenumber: linenumber,\n filename: filename,\n })}\\n\\n`\n )\n )\n}\n\nfunction eventsHandler(\n request: express.Request,\n response: express.Response,\n next: any\n) {\n const headers = {\n 'Content-Type': 'text/event-stream',\n Connection: 'keep-alive',\n 'Cache-Control': 'no-cache',\n }\n response.writeHead(200, headers)\n\n const data = `data: \\n\\n`\n\n response.write(data)\n\n const clientId = Date.now()\n\n const newClient = {\n id: clientId,\n response,\n }\n\n clients.push(newClient)\n\n request.on('close', () => {\n console.log(`${clientId} Connection closed`)\n clients = clients.filter((client) => client.id !== clientId)\n })\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
|
1
|
+
{"mappings":"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","sources":["src/index.ts","src/lib.ts"],"sourcesContent":["const argv = require('minimist')(process.argv.slice(2))\n\nimport * as server from './lib'\n\nfunction liascript() {\n console.log(' _ _ ____ _ _')\n console.log('| | (_) __ _/ ___| ___ _ __(_)_ __ | |_')\n console.log(\"| | | |/ _` \\\\___ \\\\ / __| '__| | '_ \\\\| __|\")\n console.log('| |___| | (_| |___) | (__| | | | |_) | |_ ')\n console.log('|_____|_|\\\\__,_|____/ \\\\___|_| |_| .__/ \\\\__|')\n console.log(' |_|')\n console.log()\n}\n\nif (argv.v || argv.version) {\n console.log('DevServer: 1.1.2')\n console.log('LiaScript: 0.10.32')\n process.exit()\n}\n\nif (argv.h || argv.help) {\n liascript()\n\n console.log('-h --help show this help')\n console.log('-v --version show version information')\n console.log('-i --input input README.md file or folder (default: .)')\n console.log('-n --hostname hostname of your server (default: localhost)')\n console.log('-p --port used port number (default: 3000)')\n console.log('-l --live do live reload on file change')\n console.log('-o --open open in default browser')\n console.log('-t --test test online on https://LiaScript.github.io')\n console.log()\n console.log('-r --responsiveVoice add optional responsiveVoice support,')\n console.log(' or pass your own responsiveVoice key.')\n console.log(' Adding this feature might slow down')\n console.log(' the reloading speed.')\n console.log(' For more information visit:')\n console.log(' https://responsivevoice.org')\n\n process.exit()\n}\n\nliascript()\n\nserver.init(argv.node_modules)\n\ntry {\n server.start(\n argv.p || argv.port,\n argv.n || argv.hostname,\n argv.i || argv.input,\n argv.r || argv.responsiveVoice || process.env.RESPONSIVE_VOICE_KEY,\n argv.l || argv.live,\n argv.o || argv.open,\n argv.t || argv.test\n )\n} catch (e) {\n console.error('Error: ', e.message)\n process.exit()\n}\n\nconsole.log('✨ hit Ctrl-c to close the server')\n","require('dotenv').config()\nimport * as express from 'express'\n\nimport * as fs from 'fs'\nimport * as path from 'path'\n\nconst cors = require('cors')\nconst handlebars = require('express-handlebars')\nconst ip = require('ip')\nconst open = require('open')\nconst bodyParser = require('body-parser')\n\nconst app: express.Application = express()\napp.use(bodyParser.json())\n\nvar dirname = ''\nvar node_modules\nvar reloadPath = ''\nvar liascriptPath = ''\n\nvar clients = []\n\nconst gotoScript = `<script>\nif (!window.LIA) {\n window.LIA = {}\n}\n\nvar filename__ = document.location.search.replace(\"?\"+document.location.origin, \"\")\n\nwindow.LIA.lineGoto = function(linenumber) {\n fetch(\"/lineGoto\", {\n method: \"POST\",\n headers: {'Content-Type': 'application/json'}, \n body: JSON.stringify({\n \"linenumber\": linenumber,\n \"filename\": filename__\n })\n }).then(res => {\n console.log(\"Goto line\", linenumber);\n });\n}\n\nconst events = new EventSource('/gotoLine');\nevents.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n if (data.filename == filename__) {\n console.log(\"goto line:\", data.linenumber);\n window.LIA.gotoLine(data.linenumber)\n }\n } catch (e) {\n console.warn(\"gotoLine failed\")\n }\n};\n</script>`\n\nvar serverPointer: any\n\ninit(__dirname)\n\nexport function init(serverPath?: string, nodeModulesPath?: string) {\n dirname = serverPath || path.join(__dirname, '..')\n\n node_modules = nodeModulesPath || path.join(dirname, 'node_modules')\n\n reloadPath = path.resolve(\n path.join(node_modules, 'reloadsh.js/reloader.browser.js')\n )\n\n liascriptPath = path.resolve(\n path.join(node_modules, '@liascript/editor/dist')\n )\n}\n\nexport function start(\n port?: number,\n hostname?: string,\n input?: string,\n responsiveVoice?: string,\n liveReload?: boolean,\n openInBrowser?: boolean,\n testOnline?: boolean,\n gotoCallback?: (linenumber: number, filename: string) => void\n) {\n port = port || 3000\n hostname = hostname || 'localhost'\n openInBrowser = openInBrowser || false\n input = input || '.'\n liveReload = liveReload || false\n testOnline = testOnline || false\n\n var project: {\n path: string\n readme?: string\n } = {\n path: input,\n readme: undefined,\n }\n\n if (input) {\n const stats = fs.lstatSync(input)\n\n // Is it a directory?\n if (stats.isDirectory()) {\n project.path = input\n } else if (stats.isFile()) {\n project.path = path.dirname(input)\n project.readme = path.basename(input)\n }\n }\n\n app.set('view engine', 'hbs')\n app.engine(\n 'hbs',\n handlebars({\n layoutsDir: path.resolve(path.join(dirname, 'views/layouts')),\n defaultLayout: 'main',\n extname: 'hbs',\n })\n )\n app.set('views', path.resolve(path.join(dirname, 'views')))\n\n app.get('/', function (req: express.Request, res: express.Response) {\n res.redirect('/home')\n })\n\n app.get('/gotoLine', eventsHandler)\n\n app.get('/home*', function (req: express.Request, res: express.Response) {\n const currentPath = project.path + '/' + req.params[0]\n\n const stats = fs.lstatSync(currentPath)\n\n // Is it a directory?\n if (stats.isDirectory()) {\n const files = fs.readdirSync(currentPath).filter((e: string) => {\n return e[0] !== '.'\n })\n\n let basePath = '/home'\n let pathNames = req.params[0].split('/').filter((e: string) => {\n return e !== ''\n })\n\n let paths: { name: string; href: string }[] = []\n for (let i = 0; i < pathNames.length; i++) {\n basePath += '/' + pathNames[i]\n paths.push({ name: pathNames[i], href: basePath })\n }\n\n res.render('main', {\n layout: 'index',\n path: paths,\n file: files\n .map((file: string) => {\n return {\n name: file,\n href: `http://${hostname}:${port}/home${req.params[0]}/${file}`,\n isDirectory: fs.lstatSync(currentPath + '/' + file).isDirectory(),\n }\n })\n .sort(\n (\n a: {\n name: string\n href: string\n isDirectory: boolean\n },\n b: {\n name: string\n href: string\n isDirectory: boolean\n }\n ) => {\n if (a.isDirectory && !b.isDirectory) {\n return -1\n } else if (!a.isDirectory && b.isDirectory) {\n return 1\n } else {\n if (a.name.toLocaleLowerCase() < b.name.toLocaleLowerCase()) {\n return -1\n } else {\n return 1\n }\n }\n return 0\n }\n ),\n })\n } else if (stats.isFile()) {\n if (req.params[0].toLocaleLowerCase().endsWith('.md')) {\n if (testOnline) {\n res.redirect(\n `https://LiaScript.github.io/course/?http://${hostname}:${port}/${req.params[0]}`\n )\n } else {\n res.redirect(\n `/liascript/index.html?http://${hostname}:${port}/${req.params[0]}`\n )\n }\n } else {\n res.sendFile(req.params[0], { root: project.path })\n }\n } else {\n res.send('ups, something went wrong')\n }\n })\n\n app.get(\n '/liascript/',\n function (req: express.Request, res: express.Response) {\n res.redirect('/liascript/index.html')\n }\n )\n\n app.get(\n '/liascript/index.html',\n function (req: express.Request, res: express.Response) {\n // ------------------------------------\n if (liveReload && responsiveVoice) {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(\n data.replace(\n '</head>',\n `<script type='text/javascript' src='/reloader/reloader.js'></script>\n <script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script>\n ${gotoScript}\n </head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else if (liveReload) {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(\n data.replace(\n '</head>',\n `<script type='text/javascript' src='/reloader/reloader.js'></script>\n ${gotoScript}\n </head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else if (responsiveVoice) {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(\n data.replace(\n '</head>',\n `<script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script>\n ${gotoScript}\n </head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else {\n fs.readFile(\n liascriptPath + '/index.html',\n 'utf8',\n function (err: any, data: string) {\n res.send(data.replace('</head>', `${gotoScript}</head>`))\n }\n )\n }\n }\n )\n\n // load everything from the liascript folder\n app.get(\n '/liascript/*',\n function (req: express.Request, res: express.Response) {\n res.sendFile(req.params[0], { root: liascriptPath })\n }\n )\n // ignore this one\n app.get('/sw.js', function (req: express.Request, res: express.Response) {})\n app.get(\n '/favicon.ico',\n function (req: express.Request, res: express.Response) {}\n )\n\n // pass the reloader, to be used for live updates\n app.get(\n '/reloader/reloader.js',\n function (req: express.Request, res: express.Response) {\n res.sendFile(reloadPath)\n }\n )\n\n // react to click-events\n app.post('/lineGoto', function (req: express.Request, res: express.Response) {\n if (gotoCallback) {\n try {\n const linenumber = req.body.linenumber\n const filename = req.body.filename\n gotoCallback(linenumber, filename)\n } catch (e) {\n console.warn(\n \"lineGoto event with wrong datatype, you have to provide {'linenumber': int, 'filename': string}\"\n )\n }\n }\n return res.json({})\n })\n\n // everything else comes from the current project folder\n app.get('/*', cors(), function (req: express.Request, res: express.Response) {\n res.sendFile(req.originalUrl, { root: project.path })\n })\n\n let localURL = 'http://' + hostname + ':' + port\n\n if (project.path && project.readme) {\n localURL +=\n '/liascript/index.html?http://' +\n hostname +\n ':' +\n port +\n '/' +\n project.readme\n }\n\n if (testOnline && project.readme) {\n localURL =\n 'https://LiaScript.github.io/course/?http://' +\n hostname +\n ':' +\n port +\n '/' +\n project.readme\n }\n\n const server = require('reloadsh.js')(\n app,\n liveReload ? [path.join(project.path, project.readme || '')] : []\n )\n\n if (liveReload) {\n console.log(\n `✨ watching for changes on: \"${path.join(\n project.path || '',\n project.readme || ''\n )}\"`\n )\n }\n\n server.on('error', (e: any) => {\n throw e\n })\n\n server.listen(port)\n\n if (openInBrowser) {\n open(localURL)\n }\n\n console.log('📡 starting server')\n console.log(` - local: ${localURL}`)\n console.log(\n ` - on your network: ${localURL.replace(hostname, ip.address())}`\n )\n\n serverPointer = server\n}\n\nexport function stop() {\n if (serverPointer) {\n serverPointer.close()\n }\n}\n\nexport function gotoLine(linenumber: number, filename: string) {\n clients.forEach((client) =>\n client.response.write(\n `data: ${JSON.stringify({\n linenumber: linenumber,\n filename: filename,\n })}\\n\\n`\n )\n )\n}\n\nfunction eventsHandler(\n request: express.Request,\n response: express.Response,\n next: any\n) {\n const headers = {\n 'Content-Type': 'text/event-stream',\n Connection: 'keep-alive',\n 'Cache-Control': 'no-cache',\n }\n response.writeHead(200, headers)\n\n const data = `data: \\n\\n`\n\n response.write(data)\n\n const clientId = Date.now()\n\n const newClient = {\n id: clientId,\n response,\n }\n\n clients.push(newClient)\n\n request.on('close', () => {\n console.log(`${clientId} Connection closed`)\n clients = clients.filter((client) => client.id !== clientId)\n })\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liascript/devserver",
|
|
3
|
-
"version": "1.1.2--0.10.
|
|
3
|
+
"version": "1.1.2--0.10.32",
|
|
4
4
|
"description": "Run a development server for LiaScript locally",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"author": "André Dietrich",
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@liascript/editor": "^1.1.0--0.10.
|
|
35
|
+
"@liascript/editor": "^1.1.0--0.10.32",
|
|
36
36
|
"body-parser": "^1.20.0",
|
|
37
37
|
"cors": "^2.8.5",
|
|
38
38
|
"dotenv": "^5.0.1",
|