UNPKG

@calljmp/cli

Version:
4 lines (3 loc) 3.81 kB
"use strict";var T=Object.create;var m=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var M=(r,t)=>{for(var e in t)m(r,e,{get:t[e],enumerable:!0})},j=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of z(t))!K.call(r,a)&&a!==e&&m(r,a,{get:()=>t[a],enumerable:!(s=W(t,a))||s.enumerable});return r};var d=(r,t,e)=>(e=r!=null?T(D(r)):{},j(t||!r||!r.__esModule?m(e,"default",{value:r,enumerable:!0}):e,r)),U=r=>j(m({},"__esModule",{value:!0}),r);var B={};M(B,{default:()=>q});module.exports=U(B);var $=require("commander"),c=d(require("../config")),v=d(require("../server")),C=require("../env"),n=d(require("chalk")),o=d(require("../logger")),F=d(require("readline")),P=d(require("chokidar")),w=require("../configure"),R=require("../project");const L=r=>{const t=parseInt(r,10);if(isNaN(t)||t<0||t>65535)throw new Error("Port must be a number between 0 and 65535");return t},N=()=>new $.Command("start").description("Start the server").option("--port <number>","Port to run the server",L,8787).addOption(c.ConfigOptions.ProjectDirectory).addOption(c.ConfigOptions.ModuleDirectory).action(async r=>{const t=await(0,c.default)(r);await H({...t,port:r.port,database:t.data})});async function H({port:r,database:t,...e}){let s=null;const a=async(l,p)=>{if(p.name==="c")o.default.info(n.default.dim("Stopping server...")),process.exit();else if(p.name==="r")o.default.info(n.default.dim("Restarting server...")),o.default.info(" "),s?.abort();else if(p.name==="b"){(!e.projectId||!e.accessToken)&&(o.default.error(n.default.red("Project is not linked. Please run `setup` command first.")),process.exit(1));const x=new R.Project({baseUrl:e.baseUrl,accessToken:e.accessToken});o.default.info(n.default.dim("Synchronizing service bindings..."));try{let f=function(E,u=""){Object.entries(E).forEach(([h,b],I,O)=>{const g=I===O.length-1,k=g?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",A=u+(g?" ":"\u2502 ");typeof b=="object"&&b!==null&&!Array.isArray(b)?(o.default.info(`${u}${n.default.dim(k)}${h}`),f(b,A)):o.default.info(`${u}${n.default.dim(k)}${h}: ${b}`)})};var i=f;const y=await x.bindings({projectId:e.projectId});e.bindings=y,await(0,c.writeConfig)(e),o.default.info("Service bindings"),f(y),await(0,w.configureService)({directory:e.project,entry:e.entry,buckets:e.bindings?.buckets})}catch{o.default.error(n.default.red("Failed to synchronize service bindings. Please try again."))}}};F.emitKeypressEvents(process.stdin),process.stdin.setRawMode(!0),process.stdin.on("keypress",a),process.on("exit",()=>{process.stdin.off("keypress",a),process.stdin.setRawMode(!1)});const S=async()=>{for(;;){s&&(s.abort(),await new Promise(i=>setTimeout(i,250))),await(0,w.configureService)({directory:e.project,entry:e.entry,buckets:e.bindings?.buckets}),s=new AbortController;const{signal:l}=s,p=()=>new Promise(i=>{l.aborted?i():(o.default.info(` Key commands: `),o.default.info(` ${n.default.bgWhite(n.default.black(" c "))} - Stop server`),o.default.info(` ${n.default.bgWhite(n.default.black(" r "))} - Restart server`),o.default.info(` ${n.default.bgWhite(n.default.black(" b "))} - Synchronize service bindings`),o.default.info(" "),l.onabort=()=>{i()})});try{const i=await v.buildWithLocalHandler(e.entry);await v.start({projectDirectory:e.project,script:i,port:r,database:t,buckets:Object.values(e.bindings?.buckets||{}),onReady:p})}catch(i){i instanceof Error?o.default.error(i):o.default.error(new Error(`Unknown error: ${i}`))}}};P.default.watch([e.module,...(0,C.resolveEnvFiles)(e.project,"development")],{persistent:!0,ignoreInitial:!0}).on("all",async()=>{o.default.info(n.default.dim("Changes detected, restarting server...")),o.default.info(" "),s?.abort()}),await S()}var q=N;