browser-reloader
Version:
A lightweight, configurable file watcher with live-reload capability for browser development via WebSocket.
16 lines (14 loc) • 3.48 kB
JavaScript
;var B=Object.create;var p=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var s=(e,o)=>()=>(e&&(o=e(e=0)),o);var x=(e,o)=>{for(var t in o)p(e,t,{get:o[t],enumerable:!0})},S=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of M(o))!z.call(e,a)&&a!==t&&p(e,a,{get:()=>o[a],enumerable:!(i=H(o,a))||i.enumerable});return e};var u=(e,o,t)=>(t=e!=null?B(N(e)):{},S(o||!e||!e.__esModule?p(t,"default",{value:e,enumerable:!0}):t,e)),G=e=>S(p({},"__esModule",{value:!0}),e);var r=s(()=>{"use strict"});var d,m=s(()=>{"use strict";r();d={watch:["."],ignore:["node_modules/**",".git/**"],debounce:300,quiet:!1}});function $(e,o){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>e(...i),o)}}var y=s(()=>{"use strict";r()});var l,h,j=s(()=>{"use strict";r();l=require("commander");m();h=new l.Command;h.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(()=>(w(),v)).then(({reloader:e})=>{e()})})});var q,F=s(()=>{"use strict";r();q=process.cwd()});var I,T,n,U,O,J,K,b,P=s(()=>{"use strict";r();I=require("cosmiconfig"),T=require("cosmiconfig-typescript-loader");j();F();m();n="reloader",U=h.opts(),O=U.config||null,J=(0,I.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(O?[O]:[]),loaders:{".ts":(0,T.TypeScriptLoader)()}}),K=J.search(q),b={...d,...K?.config,...U}});var v={};x(v,{reloader:()=>R});function R(e){let o={...b,...e,ignore:[...b.ignore].concat(e?.ignore||[])},t=(0,_.default)(),i=k.default.createServer(t),a=new D.WebSocketServer({server:i}),A=L.default.watch(o.watch,{ignored:o.ignore,ignoreInitial:!0}),E=(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.")});A.on("change",c=>{o.quiet||console.log(`\u{1F4C1} File changed: ${c}`),E()}),t.get("/reloader.js",(c,g)=>{let W=`
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");
}
`;g.setHeader("Content-Type","application/javascript"),g.writeHead(200),g.end(W)});let C=43878;i.listen(C,()=>{o.quiet||console.log(`Reloader server running at http://localhost:${C}`)})}var _,k,D,L,w=s(()=>{"use strict";r();_=u(require("express")),k=u(require("http")),D=require("ws"),L=u(require("chokidar"));y();P()});var Q={};x(Q,{reloader:()=>R});module.exports=G(Q);r();m();w();0&&(module.exports={reloader});