vite-plugin-cloudflared
Version:
Implement a cloudflare tunnel as part of your vite dev server
1 lines • 1.13 kB
JavaScript
import fs from"fs";import{tunnel}from"cloudflared";const viteCloudflared=(config={})=>{const tunnelOptions={...config},devServerListeningHandler=async(devServer,logger)=>{const localURL=await new Promise((resolve=>{setTimeout((()=>{devServer.resolvedUrls?.local?.length&&resolve(devServer.resolvedUrls.local[0])}),100)}));tunnelOptions["--url"]=localURL;const connectedTunnel=tunnel(tunnelOptions),tunnelUrl=await connectedTunnel.url;devServer.resolvedUrls?.network.push(tunnelUrl),logger.info(`Cloudflared tunnel is running at ${tunnelUrl}`,{timestamp:!0})};return{name:"vite-plugin-cloudflared",enforce:"pre",apply:"serve",configureServer(server){server.config.logger.info("Starting Cloudflared tunnel...",{timestamp:!0}),tunnelOptions.config&&(fs.existsSync(tunnelOptions.config)?tunnelOptions.config=tunnelOptions.config:(server.config.logger.warn(`Cloudflared config file not found at ${tunnelOptions.config}, creating quick tunnel`,{timestamp:!0}),delete tunnelOptions["--config"])),server.httpServer?.addListener("listening",devServerListeningHandler.bind(this,server,server.config.logger))}}};export default viteCloudflared;