@rip-lang/print 1.1.6 → 1.1.7

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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/print.rip +33 -13
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rip-lang/print",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "Syntax-highlighted source code printer — highlight.js-powered, serves once, auto-opens browser",
5
5
  "type": "module",
6
6
  "main": "print.rip",
@@ -29,7 +29,7 @@
29
29
  "author": "Steve Shreeve <steve.shreeve@gmail.com>",
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
- "rip-lang": ">=3.13.10",
32
+ "rip-lang": ">=3.13.11",
33
33
  "highlight.js": "^11.11.1"
34
34
  },
35
35
  "files": [
package/print.rip CHANGED
@@ -325,7 +325,7 @@ html = """
325
325
  <html lang="en">
326
326
  <head>
327
327
  <meta charset="utf-8">
328
- <title>Rip Print - #{new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })} at #{new Date().toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' }).toLowerCase()}</title>
328
+ <title>Printed on #{new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })} at #{new Date().toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' }).toLowerCase()}</title>
329
329
  <link rel="icon" href="data:,">
330
330
  <style id="hljs-theme">#{defaultCss}</style>
331
331
  <style>
@@ -432,26 +432,48 @@ html = """
432
432
  var sizeBtn = document.querySelector('.size-btn[data-size="' + savedSize + '"]');
433
433
  if (sizeBtn) sizeBtn.click();
434
434
  }
435
+
436
+ // Service worker: cache page so refresh works after server exits
437
+ if ('serviceWorker' in navigator) {
438
+ navigator.serviceWorker.register('/sw.js').catch(function() {});
439
+ }
435
440
  </script>
436
441
  </body>
437
442
  </html>
438
443
  """
439
444
 
440
445
  # ==============================================================================
441
- # Serve once and open browser
446
+ # Serve and open browser (service worker caches page for offline refresh)
442
447
  # ==============================================================================
443
448
 
444
- served = false
449
+ swScript = """\
450
+ self.addEventListener('install', function(e) { self.skipWaiting(); });
451
+ self.addEventListener('activate', function(e) { e.waitUntil(self.clients.claim()); });
452
+ self.addEventListener('fetch', function(e) {
453
+ e.respondWith(caches.match(e.request).then(function(r) {
454
+ return r || fetch(e.request).then(function(res) {
455
+ var c = res.clone();
456
+ caches.open('rip-print').then(function(cache) { cache.put(e.request, c); });
457
+ return res;
458
+ });
459
+ }));
460
+ });
461
+ """
462
+
463
+ hits = 0
445
464
 
446
465
  server = Bun.serve
447
466
  port: 9111
448
467
  fetch: (req) ->
449
- served = true
468
+ url = new URL(req.url)
469
+ if url.pathname is '/sw.js'
470
+ hits++
471
+ return new Response swScript, headers: { 'Content-Type': 'application/javascript' }
472
+ hits++
450
473
  new Response html, headers: { 'Content-Type': 'text/html; charset=utf-8' }
451
474
 
452
475
  console.log "\nOpening browser..."
453
476
 
454
- # Open browser
455
477
  try
456
478
  if process.platform is 'darwin'
457
479
  execSync "open 'http://localhost:#{server.port}/'"
@@ -462,14 +484,12 @@ try
462
484
  catch
463
485
  console.log "Visit: http://localhost:#{server.port}/"
464
486
 
465
- # Exit after serving
466
- setTimeout ->
467
- if served
468
- server.stop()
469
- process.exit(0)
470
- else
487
+ # Exit once page and service worker are served (refresh works in Chrome)
488
+ poll = setInterval ->
489
+ if hits >= 2
490
+ clearInterval(poll)
471
491
  setTimeout ->
472
492
  server.stop()
473
493
  process.exit(0)
474
- , 5000
475
- , 3000
494
+ , 500
495
+ , 200