@liascript/devserver 1.1.2--0.12.3 → 1.1.2--0.12.4

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 CHANGED
@@ -79,7 +79,7 @@ for LiaScript.
79
79
 
80
80
  ```text
81
81
  DevServer: 1.1.2
82
- LiaScript: 0.12.3
82
+ LiaScript: 0.12.4
83
83
  ```
84
84
 
85
85
  ### `--input`
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.12.3");
271
+ console.log("LiaScript: 0.12.4");
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.12.3')\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.12.4')\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.12.3",
3
+ "version": "1.1.2--0.12.4",
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.1--0.12.3",
35
+ "@liascript/editor": "^1.1.1--0.12.4",
36
36
  "body-parser": "^1.20.0",
37
37
  "cors": "^2.8.5",
38
38
  "dotenv": "^5.0.1",
package/views/main.hbs CHANGED
@@ -7,7 +7,7 @@
7
7
  | |___| | (_| |___) | (__| | | | |_) | |_
8
8
  |_____|_|\__,_|____/ \___|_| |_| .__/ \__|
9
9
  |_|
10
- [ DevServer: 1.1.2--0.12.3 ]
10
+ [ DevServer: 1.1.2--0.12.4 ]
11
11
  </pre>
12
12
  </code>
13
13
  </h4>