@liascript/devserver 1.0.14--0.10.9 → 1.1.1--0.10.10

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
@@ -78,8 +78,8 @@ updated separately, we use two different version, one for the devServer and one
78
78
  for LiaScript.
79
79
 
80
80
  ```text
81
- DevServer: 1.0.14
82
- LiaScript: 0.10.9
81
+ DevServer: 1.1.1
82
+ LiaScript: 0.10.10
83
83
  ```
84
84
 
85
85
  ### `--input`
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ var $9KXPr$expresshandlebars = require("express-handlebars");
10
10
  var $9KXPr$ip = require("ip");
11
11
  var $9KXPr$open = require("open");
12
12
  var $9KXPr$reloadshjs = require("reloadsh.js");
13
+ var $9KXPr$bodyparser = require("body-parser");
13
14
 
14
15
 
15
16
 
@@ -20,11 +21,47 @@ $9KXPr$dotenv.config();
20
21
 
21
22
 
22
23
 
24
+
23
25
  const $dbf4313da36ea993$var$app = $9KXPr$express();
26
+ $dbf4313da36ea993$var$app.use($9KXPr$bodyparser.json());
24
27
  var $dbf4313da36ea993$var$dirname = '';
25
28
  var $dbf4313da36ea993$var$node_modules;
26
29
  var $dbf4313da36ea993$var$reloadPath = '';
27
30
  var $dbf4313da36ea993$var$liascriptPath = '';
31
+ var $dbf4313da36ea993$var$clients = [];
32
+ const $dbf4313da36ea993$var$gotoScript = `<script>
33
+ if (!window.LIA) {
34
+ window.LIA = {}
35
+ }
36
+
37
+ var filename__ = document.location.search.replace("?"+document.location.origin, "")
38
+
39
+ window.LIA.lineGoto = function(linenumber) {
40
+ fetch("/lineGoto", {
41
+ method: "POST",
42
+ headers: {'Content-Type': 'application/json'},
43
+ body: JSON.stringify({
44
+ "linenumber": linenumber,
45
+ "filename": filename__
46
+ })
47
+ }).then(res => {
48
+ console.log("Goto line", linenumber);
49
+ });
50
+ }
51
+
52
+ const events = new EventSource('/gotoLine');
53
+ events.onmessage = (event) => {
54
+ try {
55
+ const data = JSON.parse(event.data);
56
+ if (data.filename == filename__) {
57
+ console.log("goto line:", data.linenumber);
58
+ window.LIA.gotoLine(data.linenumber)
59
+ }
60
+ } catch (e) {
61
+ console.warn("gotoLine failed")
62
+ }
63
+ };
64
+ </script>`;
28
65
  var $dbf4313da36ea993$var$serverPointer;
29
66
  $dbf4313da36ea993$export$2cd8252107eb640b(__dirname);
30
67
  function $dbf4313da36ea993$export$2cd8252107eb640b(serverPath, nodeModulesPath) {
@@ -34,7 +71,7 @@ function $dbf4313da36ea993$export$2cd8252107eb640b(serverPath, nodeModulesPath)
34
71
  $dbf4313da36ea993$var$liascriptPath = $9KXPr$path.resolve($9KXPr$path.join($dbf4313da36ea993$var$node_modules, '@liascript/editor/dist'));
35
72
  }
36
73
 
37
- function $dbf4313da36ea993$export$b3571188c770cc5a(port, hostname, input, responsiveVoice, liveReload, openInBrowser, testOnline) {
74
+ function $dbf4313da36ea993$export$b3571188c770cc5a(port, hostname, input, responsiveVoice, liveReload, openInBrowser, testOnline, gotoCallback) {
38
75
  port = port || 3000;
39
76
  hostname = hostname || 'localhost';
40
77
  openInBrowser = openInBrowser || false;
@@ -64,6 +101,7 @@ function $dbf4313da36ea993$export$b3571188c770cc5a(port, hostname, input, respon
64
101
  $dbf4313da36ea993$var$app.get('/', function(req, res) {
65
102
  res.redirect('/home');
66
103
  });
104
+ $dbf4313da36ea993$var$app.get('/gotoLine', $dbf4313da36ea993$var$eventsHandler);
67
105
  $dbf4313da36ea993$var$app.get('/home*', function(req, res) {
68
106
  const currentPath = project.path + '/' + req.params[0];
69
107
  const stats = $9KXPr$fs.lstatSync(currentPath);
@@ -120,15 +158,22 @@ function $dbf4313da36ea993$export$b3571188c770cc5a(port, hostname, input, respon
120
158
  if (liveReload && responsiveVoice) $9KXPr$fs.readFile($dbf4313da36ea993$var$liascriptPath + '/index.html', 'utf8', function(err, data) {
121
159
  res.send(data.replace('</head>', `<script type='text/javascript' src='/reloader/reloader.js'></script>
122
160
  <script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script>
161
+ ${$dbf4313da36ea993$var$gotoScript}
123
162
  </head>`));
124
163
  });
125
164
  else if (liveReload) $9KXPr$fs.readFile($dbf4313da36ea993$var$liascriptPath + '/index.html', 'utf8', function(err, data) {
126
- res.send(data.replace('</head>', `<script type='text/javascript' src='/reloader/reloader.js'></script></head>`));
165
+ res.send(data.replace('</head>', `<script type='text/javascript' src='/reloader/reloader.js'></script>
166
+ ${$dbf4313da36ea993$var$gotoScript}
167
+ </head>`));
127
168
  });
128
169
  else if (responsiveVoice) $9KXPr$fs.readFile($dbf4313da36ea993$var$liascriptPath + '/index.html', 'utf8', function(err, data) {
129
- res.send(data.replace('</head>', `<script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script></head>`));
170
+ res.send(data.replace('</head>', `<script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=${responsiveVoice}'></script>
171
+ ${$dbf4313da36ea993$var$gotoScript}
172
+ </head>`));
173
+ });
174
+ else $9KXPr$fs.readFile($dbf4313da36ea993$var$liascriptPath + '/index.html', 'utf8', function(err, data) {
175
+ res.send(data.replace('</head>', `${$dbf4313da36ea993$var$gotoScript}</head>`));
130
176
  });
131
- else res.sendFile($dbf4313da36ea993$var$liascriptPath + '/index.html');
132
177
  });
133
178
  // load everything from the liascript folder
134
179
  $dbf4313da36ea993$var$app.get('/liascript/*', function(req, res) {
@@ -143,6 +188,17 @@ function $dbf4313da36ea993$export$b3571188c770cc5a(port, hostname, input, respon
143
188
  $dbf4313da36ea993$var$app.get('/reloader/reloader.js', function(req, res) {
144
189
  res.sendFile($dbf4313da36ea993$var$reloadPath);
145
190
  });
191
+ // react to click-events
192
+ $dbf4313da36ea993$var$app.post('/lineGoto', function(req, res) {
193
+ if (gotoCallback) try {
194
+ const linenumber = req.body.linenumber;
195
+ const filename = req.body.filename;
196
+ gotoCallback(linenumber, filename);
197
+ } catch (e) {
198
+ console.warn("lineGoto event with wrong datatype, you have to provide {'linenumber': int, 'filename': string}");
199
+ }
200
+ return res.json({});
201
+ });
146
202
  // everything else comes from the current project folder
147
203
  $dbf4313da36ea993$var$app.get('/*', $9KXPr$cors(), function(req, res) {
148
204
  res.sendFile(req.originalUrl, {
@@ -169,6 +225,34 @@ function $dbf4313da36ea993$export$b3571188c770cc5a(port, hostname, input, respon
169
225
  function $dbf4313da36ea993$export$fa6813432f753b0d() {
170
226
  if ($dbf4313da36ea993$var$serverPointer) $dbf4313da36ea993$var$serverPointer.close();
171
227
  }
228
+ function $dbf4313da36ea993$export$5d5b784f9a618ec3(linenumber, filename) {
229
+ $dbf4313da36ea993$var$clients.forEach((client)=>client.response.write(`data: ${JSON.stringify({
230
+ linenumber: linenumber,
231
+ filename: filename
232
+ })}\n\n`)
233
+ );
234
+ }
235
+ function $dbf4313da36ea993$var$eventsHandler(request, response, next) {
236
+ const headers = {
237
+ 'Content-Type': 'text/event-stream',
238
+ Connection: 'keep-alive',
239
+ 'Cache-Control': 'no-cache'
240
+ };
241
+ response.writeHead(200, headers);
242
+ const data = `data: \n\n`;
243
+ response.write(data);
244
+ const clientId = Date.now();
245
+ const newClient = {
246
+ id: clientId,
247
+ response: response
248
+ };
249
+ $dbf4313da36ea993$var$clients.push(newClient);
250
+ request.on('close', ()=>{
251
+ console.log(`${clientId} Connection closed`);
252
+ $dbf4313da36ea993$var$clients = $dbf4313da36ea993$var$clients.filter((client)=>client.id !== clientId
253
+ );
254
+ });
255
+ }
172
256
 
173
257
 
174
258
 
@@ -183,8 +267,8 @@ function $aa3bf3164f10b283$var$liascript() {
183
267
  console.log();
184
268
  }
185
269
  if ($aa3bf3164f10b283$var$argv.v || $aa3bf3164f10b283$var$argv.version) {
186
- console.log('DevServer: 1.0.14');
187
- console.log('LiaScript: 0.10.9');
270
+ console.log('DevServer: 1.1.1');
271
+ console.log('LiaScript: 0.10.10');
188
272
  process.exit();
189
273
  }
190
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.0.14')\n console.log('LiaScript: 0.10.9')\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')\n\nconst app: express.Application = express()\n\nvar dirname = ''\nvar node_modules\nvar reloadPath = ''\nvar liascriptPath = ''\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) {\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('/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 </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></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></head>`\n )\n )\n }\n )\n }\n // ------------------------------------\n else {\n res.sendFile(liascriptPath + '/index.html')\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 // 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"],"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.1')\n console.log('LiaScript: 0.10.10')\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/dist/lib.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare function init(serverPath?: string, nodeModulesPath?: string): void;
2
- export declare function start(port?: number, hostname?: string, input?: string, responsiveVoice?: string, liveReload?: boolean, openInBrowser?: boolean, testOnline?: boolean): void;
2
+ export declare function start(port?: number, hostname?: string, input?: string, responsiveVoice?: string, liveReload?: boolean, openInBrowser?: boolean, testOnline?: boolean, gotoCallback?: (linenumber: number, filename: string) => void): void;
3
3
  export declare function stop(): void;
4
+ export declare function gotoLine(linenumber: number, filename: string): void;
package/dist/lib.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  exports.__esModule = true;
3
- exports.stop = exports.start = exports.init = void 0;
3
+ exports.gotoLine = exports.stop = exports.start = exports.init = void 0;
4
4
  require('dotenv').config();
5
5
  var express = require("express");
6
6
  var fs = require("fs");
@@ -9,11 +9,15 @@ var cors = require('cors');
9
9
  var handlebars = require('express-handlebars');
10
10
  var ip = require('ip');
11
11
  var open = require('open');
12
+ var bodyParser = require('body-parser');
12
13
  var app = express();
14
+ app.use(bodyParser.json());
13
15
  var dirname = '';
14
16
  var node_modules;
15
17
  var reloadPath = '';
16
18
  var liascriptPath = '';
19
+ var clients = [];
20
+ var 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>";
17
21
  var serverPointer;
18
22
  init(__dirname);
19
23
  function init(serverPath, nodeModulesPath) {
@@ -23,7 +27,7 @@ function init(serverPath, nodeModulesPath) {
23
27
  liascriptPath = path.resolve(path.join(node_modules, '@liascript/editor/dist'));
24
28
  }
25
29
  exports.init = init;
26
- function start(port, hostname, input, responsiveVoice, liveReload, openInBrowser, testOnline) {
30
+ function start(port, hostname, input, responsiveVoice, liveReload, openInBrowser, testOnline, gotoCallback) {
27
31
  port = port || 3000;
28
32
  hostname = hostname || 'localhost';
29
33
  openInBrowser = openInBrowser || false;
@@ -55,6 +59,7 @@ function start(port, hostname, input, responsiveVoice, liveReload, openInBrowser
55
59
  app.get('/', function (req, res) {
56
60
  res.redirect('/home');
57
61
  });
62
+ app.get('/gotoLine', eventsHandler);
58
63
  app.get('/home*', function (req, res) {
59
64
  var currentPath = project.path + '/' + req.params[0];
60
65
  var stats = fs.lstatSync(currentPath);
@@ -126,24 +131,26 @@ function start(port, hostname, input, responsiveVoice, liveReload, openInBrowser
126
131
  // ------------------------------------
127
132
  if (liveReload && responsiveVoice) {
128
133
  fs.readFile(liascriptPath + '/index.html', 'utf8', function (err, data) {
129
- res.send(data.replace('</head>', "<script type='text/javascript' src='/reloader/reloader.js'></script>\n <script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=".concat(responsiveVoice, "'></script>\n </head>")));
134
+ res.send(data.replace('</head>', "<script type='text/javascript' src='/reloader/reloader.js'></script>\n <script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=".concat(responsiveVoice, "'></script>\n ").concat(gotoScript, "\n </head>")));
130
135
  });
131
136
  }
132
137
  // ------------------------------------
133
138
  else if (liveReload) {
134
139
  fs.readFile(liascriptPath + '/index.html', 'utf8', function (err, data) {
135
- res.send(data.replace('</head>', "<script type='text/javascript' src='/reloader/reloader.js'></script></head>"));
140
+ res.send(data.replace('</head>', "<script type='text/javascript' src='/reloader/reloader.js'></script>\n ".concat(gotoScript, "\n </head>")));
136
141
  });
137
142
  }
138
143
  // ------------------------------------
139
144
  else if (responsiveVoice) {
140
145
  fs.readFile(liascriptPath + '/index.html', 'utf8', function (err, data) {
141
- res.send(data.replace('</head>', "<script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=".concat(responsiveVoice, "'></script></head>")));
146
+ res.send(data.replace('</head>', "<script type='text/javascript' src='https://code.responsivevoice.org/responsivevoice.js?key=".concat(responsiveVoice, "'></script>\n ").concat(gotoScript, "\n </head>")));
142
147
  });
143
148
  }
144
149
  // ------------------------------------
145
150
  else {
146
- res.sendFile(liascriptPath + '/index.html');
151
+ fs.readFile(liascriptPath + '/index.html', 'utf8', function (err, data) {
152
+ res.send(data.replace('</head>', "".concat(gotoScript, "</head>")));
153
+ });
147
154
  }
148
155
  });
149
156
  // load everything from the liascript folder
@@ -157,6 +164,20 @@ function start(port, hostname, input, responsiveVoice, liveReload, openInBrowser
157
164
  app.get('/reloader/reloader.js', function (req, res) {
158
165
  res.sendFile(reloadPath);
159
166
  });
167
+ // react to click-events
168
+ app.post('/lineGoto', function (req, res) {
169
+ if (gotoCallback) {
170
+ try {
171
+ var linenumber = req.body.linenumber;
172
+ var filename = req.body.filename;
173
+ gotoCallback(linenumber, filename);
174
+ }
175
+ catch (e) {
176
+ console.warn("lineGoto event with wrong datatype, you have to provide {'linenumber': int, 'filename': string}");
177
+ }
178
+ }
179
+ return res.json({});
180
+ });
160
181
  // everything else comes from the current project folder
161
182
  app.get('/*', cors(), function (req, res) {
162
183
  res.sendFile(req.originalUrl, { root: project.path });
@@ -203,3 +224,32 @@ function stop() {
203
224
  }
204
225
  }
205
226
  exports.stop = stop;
227
+ function gotoLine(linenumber, filename) {
228
+ clients.forEach(function (client) {
229
+ return client.response.write("data: ".concat(JSON.stringify({
230
+ linenumber: linenumber,
231
+ filename: filename
232
+ }), "\n\n"));
233
+ });
234
+ }
235
+ exports.gotoLine = gotoLine;
236
+ function eventsHandler(request, response, next) {
237
+ var headers = {
238
+ 'Content-Type': 'text/event-stream',
239
+ Connection: 'keep-alive',
240
+ 'Cache-Control': 'no-cache'
241
+ };
242
+ response.writeHead(200, headers);
243
+ var data = "data: \n\n";
244
+ response.write(data);
245
+ var clientId = Date.now();
246
+ var newClient = {
247
+ id: clientId,
248
+ response: response
249
+ };
250
+ clients.push(newClient);
251
+ request.on('close', function () {
252
+ console.log("".concat(clientId, " Connection closed"));
253
+ clients = clients.filter(function (client) { return client.id !== clientId; });
254
+ });
255
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liascript/devserver",
3
- "version": "1.0.14--0.10.9",
3
+ "version": "1.1.1--0.10.10",
4
4
  "description": "Run a development server for LiaScript locally",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -32,7 +32,8 @@
32
32
  "author": "André Dietrich",
33
33
  "license": "MIT",
34
34
  "dependencies": {
35
- "@liascript/editor": "^1.1.0--0.10.9",
35
+ "@liascript/editor": "^1.1.0--0.10.10",
36
+ "body-parser": "^1.20.0",
36
37
  "cors": "^2.8.5",
37
38
  "dotenv": "^5.0.1",
38
39
  "express": "^4.17.3",
package/views/main.hbs CHANGED
@@ -7,7 +7,7 @@
7
7
  | |___| | (_| |___) | (__| | | | |_) | |_
8
8
  |_____|_|\__,_|____/ \___|_| |_| .__/ \__|
9
9
  |_|
10
- [ DevServer: 1.0.14--0.10.9 ]
10
+ [ DevServer: 1.1.1--0.10.10 ]
11
11
  </pre>
12
12
  </code>
13
13
  </h4>