UNPKG

browser-reloader

Version:

A lightweight, configurable file watcher with live-reload capability for browser development via WebSocket.

17 lines (15 loc) 3.39 kB
#!/usr/bin/env node "use strict";var A=Object.create;var g=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var s=(e,o)=>()=>(e&&(o=e(e=0)),o);var M=(e,o)=>{for(var t in o)g(e,t,{get:o[t],enumerable:!0})},N=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of W(o))!H.call(e,a)&&a!==t&&g(e,a,{get:()=>o[a],enumerable:!(i=E(o,a))||i.enumerable});return e};var u=(e,o,t)=>(t=e!=null?A(B(e)):{},N(o||!e||!e.__esModule?g(t,"default",{value:e,enumerable:!0}):t,e));var r=s(()=>{"use strict"});var d,h=s(()=>{"use strict";r();d={watch:["."],ignore:["node_modules/**",".git/**"],debounce:300,quiet:!1}});function C(e,o){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>e(...i),o)}}var S=s(()=>{"use strict";r()});var $,y=s(()=>{"use strict";r();$=process.cwd()});var x,j,n,q,v,z,G,w,F=s(()=>{"use strict";r();x=require("cosmiconfig"),j=require("cosmiconfig-typescript-loader");b();y();h();n="reloader",q=f.opts(),v=q.config||null,z=(0,x.cosmiconfigSync)(n,{searchPlaces:["package.json",`.${n}rc`,`.${n}rc.json`,`.${n}rc.yaml`,`.${n}rc.yml`,`.${n}rc.js`,`.${n}rc.ts`,`.${n}rc.cjs`,`${n}.config.js`,`${n}.config.ts`,`${n}.config.cjs`].concat(v?[v]:[]),loaders:{".ts":(0,j.TypeScriptLoader)()}}),G=z.search($),w={...d,...G?.config,...q}});var P={};M(P,{reloader:()=>J});function J(e){let o={...w,...e,ignore:[...w.ignore].concat(e?.ignore||[])},t=(0,O.default)(),i=I.default.createServer(t),a=new T.WebSocketServer({server:i}),k=U.default.watch(o.watch,{ignored:o.ignore,ignoreInitial:!0}),D=(c=>C(c,o.debounce))(()=>{a.clients.forEach(c=>{c.readyState===1&&c.send("reload")}),o.quiet||console.log("\u{1F501} Reload broadcast sent to clients.")});k.on("change",c=>{o.quiet||console.log(`\u{1F4C1} File changed: ${c}`),D()}),t.get("/reloader.js",(c,m)=>{let L=` try { const rh = new URL( Array.from(document.scripts).find((s) => s.src.includes("reloader.js")) ?.src || "" ); const ws = new WebSocket("ws://" + rh?.host); ws.onmessage = ({ data }) => { if (data === "reload") location.reload(); }; } catch { console.log("Reloader initialize failed"); } `;m.setHeader("Content-Type","application/javascript"),m.writeHead(200),m.end(L)});let R=43878;i.listen(R,()=>{o.quiet||console.log(`Reloader server running at http://localhost:${R}`)})}var O,I,T,U,_=s(()=>{"use strict";r();O=u(require("express")),I=u(require("http")),T=require("ws"),U=u(require("chokidar"));S();F()});var l,f,b=s(()=>{"use strict";r();l=require("commander");h();f=new l.Command;f.name("reloader").description("Watch files and reload browsers on change based on ReloaderConfig").version("1.0.0").addOption(new l.Option("-w, --watch <paths...>","Files or directories to watch").default(d.watch.slice())).addOption(new l.Option("-i, --ignore <patterns...>","Glob patterns to ignore").argParser((e,o)=>o.concat(e)).default(d.ignore.slice())).addOption(new l.Option("-d, --debounce <ms>","Debounce filesystem events (ms)").argParser(e=>parseInt(e,10)).default(d.debounce)).addOption(new l.Option("--quiet","Suppress non-error output").default(d.quiet)).action(()=>{Promise.resolve().then(()=>(_(),P)).then(({reloader:e})=>{e()})})});r();b();f.parse(process.argv);