@coreframe/scripts 0.1.47 → 0.1.48
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.
- package/dist/dev.js +1 -1
- package/package.json +1 -1
package/dist/dev.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"./config.js";import{fs as t,net as n}from"./environment.js";import{ProjectPostgresAlreadyRunningError as r,startProjectPostgres as i,stopProjectPostgres as a}from"./db/local-postgres.js";import{ensureDevI18nCatalogs as o}from"./i18n/workflows.js";import{resolveMobileDevHost as s,selectMobileDevDevice as ee}from"./dev-device.js";import{devHttpsCertEnv as te,devHttpsKeyEnv as c,prepareDevHttps as ne}from"./dev-https.js";import{acquireDevLock as l}from"./dev-lock.js";import{createDevStartupTiming as u}from"./dev-timing.js";import{managedDevEnv as re}from"./managed-dev-protocol.js";import{isManagedDevCheckout as ie,isPrimaryCheckout as ae}from"./managed-dev.js";import{createTauriDevOutput as oe}from"./tauri-dev-output.js";import d from"node:path";import f from"nano-spawn";import{finished as p}from"node:stream/promises";import*as m from"@clack/prompts";import h from"node:process";import{once as g}from"node:events";import{determineAgent as _}from"@vercel/detect-agent";import{createPrefixStream as v,supervise as y}from"procband";const b=[`web`,`desktop`,`ios`,`android`],x=[`managed-dev-overlay`],S=`VITE_COREFRAME_MANAGED_DEV_OVERLAY_DEBUG`;function C(e){let t=e.dev?.platforms??[`web`];for(let e of t)if(!b.includes(e))throw Error(`Invalid development platform "${String(e)}". Expected one of: ${b.join(`, `)}.`);return[...new Set(t)]}const se=d.resolve(`node_modules`,`.bin`),w=h.platform===`win32`?`pnpm.cmd`:`pnpm`,ce=h.platform===`win32`?`portless.cmd`:`portless`,le=h.platform===`win32`?`react-router.cmd`:`react-router`,ue=h.platform===`win32`?`turso.cmd`:`turso`;async function T({cwd:r=h.cwd(),debug:i,device:a,env:g=h.env,host:b,https:x=!1,interactive:C=h.stdin.isTTY===!0,managed:T=!1,noManaged:P=!1,platform:F=`web`,verbose:fe=!1,webPort:I}={}){let L=u({env:g}),pe=g.PATH??g.Path??``,R=F===`web`?N(I??g.COREFRAME_WEB_PORT):void 0,z,B,V,H,U,W,G=!1,K,q=g;if(T&&P)throw Error(`Cannot use --managed and --no-managed together.`);if(i===`managed-dev-overlay`&&T)throw Error(`Cannot use --managed with --debug managed-dev-overlay.`);if(x&&F!==`web`)throw Error(`Local HTTPS is only supported for the web development platform.`);if(a!==void 0&&F!==`ios`&&F!==`android`)throw Error(`A device name or ID is only supported for iOS or Android development.`);if(F===`web`&&g.TAURI_ENV_PLATFORM!==void 0&&g.COREFRAME_TAURI_DEV!==`1`){let e=g.TAURI_ENV_PLATFORM===`ios`||g.TAURI_ENV_PLATFORM===`android`?g.TAURI_ENV_PLATFORM:`desktop`;throw Error(`Direct Tauri development is not supported. Run \`pnpm dev ${e}\` instead.`)}let J=await L.measure(`dev-lock`,()=>l({cwd:r,interactive:C}));if(!J)return;let Y=()=>{G||(G=!0,B?.kill(`SIGTERM`),H?.kill(`SIGTERM`),W?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),z?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),U?.kill(`SIGTERM`))},X=[`SIGINT`,`SIGTERM`].map(e=>{let t=()=>{K??=e,Y()};return h.on(e,t),{handler:t,signal:e}}),Z=async e=>{let t=y(e);B=t;try{await t.expectSuccess()}catch(e){if(!G)throw e}finally{B===t&&(B=void 0)}};try{let l=F===`ios`||F===`android`?F:void 0,u=l?await ee({env:g,interactive:C,platform:l,target:a}):void 0,D=l&&u?await s({device:u,host:b,interactive:C,platform:l}):void 0,N=D?!0:b,[I,B,K]=await Promise.all([L.measure(`config`,()=>e({cwd:r})),L.measure(`routing`,async()=>F===`web`&&g.PORTLESS!==`0`&&g.TAURI_ENV_PLATFORM===void 0&&!(await _()).isAgent&&await ae(r)),L.measure(`managed`,async()=>i!==`managed-dev-overlay`&&(T||C&&!P)&&await ie(r))]);await L.measure(`i18n`,()=>o({cwd:r,projectConfig:I}));let X=await L.measure(`https`,async()=>x&&!B?ne({cwd:r}):void 0);q={...g,...L.environment,...i===`managed-dev-overlay`?{[S]:`1`}:void 0,...F===`web`?void 0:{COREFRAME_TAURI_DEV:`1`,TAURI_ENV_PLATFORM:A(F),...D?{TAURI_DEV_HOST:D}:void 0},...X?{[te]:X.cert,[c]:X.key}:void 0};let Q=async()=>{let e=v({label:`web`}),t=v({color:`red`,label:`web`});e.pipe(h.stdout,{end:!1}),t.pipe(h.stderr,{end:!1}),W=f(B?ce:le,B?M({host:N,port:R}):j({host:N,port:R}),{cwd:r,env:{...q,CLOUDFLARE_ENV:`development`,PATH:se+d.delimiter+pe},stdin:`inherit`});let n=Promise.allSettled([E(W.stdout,e),E(W.stderr,t)]);try{await W;let e=(await n).find(e=>e.status===`rejected`);if(e)throw e.reason}catch(e){if(!G)throw e}finally{await n,e.end(),t.end(),await Promise.allSettled([p(e),p(t)]),W=void 0}},me=async()=>{if(F===`web`){await Q();return}let e=Q().then(()=>{if(!G)throw Error(`The Vite development server stopped while Tauri was still running.`)}),t,n;if(F===`ios`&&!fe){n=v({label:`ios`}),n.pipe(h.stdout,{end:!1});try{t=await oe({output:n}),m.log.info(`Full iOS log: ${t.logFile}`)}catch{n.end(),n=void 0,m.log.warn(`Could not create the temporary iOS log; showing full Tauri output.`)}}z=f(w,k(F,u?.name,D),{cwd:r,env:g,stdio:t?[`inherit`,`pipe`,`pipe`]:`inherit`});let i=t?.consume(z),a=z.catch(async e=>{throw G||(await i,await t?.reportFailure()),e});try{await Promise.race([e,a])}finally{Y(),await Promise.allSettled([e,z,i]),await t?.close(),n?.end(),z=void 0}},he=async()=>{let e=y({name:`panda`,command:w,args:[`exec`,`panda`,`dev`,`--no-color`],cwd:r,env:q});H=e;try{if(await e.expectSuccess(),!G)throw Error(`The Panda CSS watcher stopped while development was still running.`)}catch(e){if(!G)throw e}finally{H===e&&(H=void 0)}},$=async()=>{let e=he(),t=me();try{await Promise.race([e,t])}finally{Y(),await Promise.allSettled([e,t])}};if(K&&(q={...q,[re]:`1`}),G||I.database?.dialect===`sqlite`&&(await L.measure(`database`,async()=>{let e=await n.getAvailablePort(),i=d.resolve(r,`.coreframe`),a=d.join(i,`turso.db`);await t.mkdir(i,{recursive:!0}),q={...q,TURSO_DATABASE_URL:`http://127.0.0.1:${e}`,TURSO_AUTH_TOKEN:`dev`},U=y({name:`turso`,command:ue,args:[`dev`,`--port`,String(e),`--db-file`,a],cwd:r,env:g}),await U.waitFor(`listening`)}),await L.measure(`schema`,()=>Z({name:`db`,command:w,args:[`db`,`ensure`],cwd:r,env:q,prefix:!1})),G))return;if(O(I)){let e=v({label:`postgres`});e.pipe(h.stdout,{end:!1});try{let t=await L.measure(`database`,()=>de({config:I,cwd:r,env:q,failIfRunning:!0,interactive:C,isStopping:()=>G,postgresOutput:e,takeoverApproved:J.takeoverApproved}));if(!t)return;V=t,q=t.env;try{G||await L.measure(`schema`,()=>Z({name:`db`,command:w,args:[`db`,`ensure`],cwd:r,env:q,prefix:!1})),G||(L.report(),await $())}finally{await t[Symbol.asyncDispose](),V===t&&(V=void 0)}}finally{e.end()}return}L.report(),await $()}finally{Y();let e;try{await V?.[Symbol.asyncDispose]()}catch(t){e=t}finally{for(let{handler:e,signal:t}of X)h.off(t,e);K&&(h.exitCode??=K===`SIGINT`?130:143)}D(e),await J.release()}}async function E(e,t){for await(let n of e)t.write(`${n}\n`)||await g(t,`drain`)}function D(e){if(e)throw e}async function de({interactive:e,isStopping:t,takeoverApproved:n,...o}){try{return await i(o)}catch(s){if(!(s instanceof r)||!e)throw s;if(!n){let e=await m.confirm({initialValue:!1,message:`PostgreSQL is already running for this project (PID ${s.pid}). Stop it and start here?`});if(m.isCancel(e)||!e){m.cancel(`Keeping the existing PostgreSQL process.`);return}}return await a(s),t()?void 0:i(o)}}function O(e){return(e.database?.dialect??`postgres`)===`postgres`}function k(e,t,n){return[`exec`,`tauri`,...e===`desktop`?[]:[e],`dev`,`--config`,JSON.stringify({build:{beforeDevCommand:``}}),...n===void 0?[]:[`--host=${n}`],...t===void 0?[]:[t]]}function A(e){return e===`desktop`?h.platform===`win32`?`windows`:h.platform:e}function j({host:e,port:t}){return[`dev`,...e===void 0?[]:[`--host`,e===!0?`0.0.0.0`:e],...t===void 0?[]:[`--port`,String(t)]]}function M({host:e,port:t}){return[`run`,...t===void 0?[]:[`--app-port`,String(t)],`react-router`,...j({host:e,port:void 0})]}function N(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<=0||t>65535)throw Error(`COREFRAME_WEB_PORT must be a valid TCP port.`);return t}export{x as devDebugFeatures,b as devPlatforms,S as managedDevOverlayDebugEnv,C as resolveDevPlatforms,T as runDevServer};
|
|
2
|
+
import{readProjectConfig as e}from"./config.js";import{fs as t,net as n}from"./environment.js";import{ProjectPostgresAlreadyRunningError as r,startProjectPostgres as i,stopProjectPostgres as a}from"./db/local-postgres.js";import{ensureDevI18nCatalogs as o}from"./i18n/workflows.js";import{resolveMobileDevHost as s,selectMobileDevDevice as ee}from"./dev-device.js";import{devHttpsCertEnv as te,devHttpsKeyEnv as c,prepareDevHttps as ne}from"./dev-https.js";import{acquireDevLock as l}from"./dev-lock.js";import{createDevStartupTiming as u}from"./dev-timing.js";import{managedDevEnv as re}from"./managed-dev-protocol.js";import{isManagedDevCheckout as ie,isPrimaryCheckout as ae}from"./managed-dev.js";import{createTauriDevOutput as oe}from"./tauri-dev-output.js";import d from"node:path";import f from"nano-spawn";import{finished as p}from"node:stream/promises";import*as m from"@clack/prompts";import h from"node:process";import{once as g}from"node:events";import{determineAgent as _}from"@vercel/detect-agent";import{createPrefixStream as v,supervise as y}from"procband";const b=[`web`,`desktop`,`ios`,`android`],x=[`managed-dev-overlay`],S=`VITE_COREFRAME_MANAGED_DEV_OVERLAY_DEBUG`;function C(e){let t=e.dev?.platforms??[`web`];for(let e of t)if(!b.includes(e))throw Error(`Invalid development platform "${String(e)}". Expected one of: ${b.join(`, `)}.`);return[...new Set(t)]}const se=d.resolve(`node_modules`,`.bin`),w=h.platform===`win32`?`pnpm.cmd`:`pnpm`,ce=h.platform===`win32`?`portless.cmd`:`portless`,le=h.platform===`win32`?`react-router.cmd`:`react-router`,ue=h.platform===`win32`?`turso.cmd`:`turso`;async function T({cwd:r=h.cwd(),debug:i,device:a,env:g=h.env,host:b,https:x=!1,interactive:C=h.stdin.isTTY===!0,managed:T=!1,noManaged:P=!1,platform:F=`web`,verbose:fe=!1,webPort:I}={}){let L=u({env:g}),pe=g.PATH??g.Path??``,R=F===`web`?N(I??g.COREFRAME_WEB_PORT):void 0,z,B,V,H,U,W,G=!1,K,q=g;if(T&&P)throw Error(`Cannot use --managed and --no-managed together.`);if(i===`managed-dev-overlay`&&T)throw Error(`Cannot use --managed with --debug managed-dev-overlay.`);if(x&&F!==`web`)throw Error(`Local HTTPS is only supported for the web development platform.`);if(a!==void 0&&F!==`ios`&&F!==`android`)throw Error(`A device name or ID is only supported for iOS or Android development.`);if(F===`web`&&g.TAURI_ENV_PLATFORM!==void 0&&g.COREFRAME_TAURI_DEV!==`1`){let e=g.TAURI_ENV_PLATFORM===`ios`||g.TAURI_ENV_PLATFORM===`android`?g.TAURI_ENV_PLATFORM:`desktop`;throw Error(`Direct Tauri development is not supported. Run \`pnpm dev ${e}\` instead.`)}let J=await L.measure(`dev-lock`,()=>l({cwd:r,interactive:C}));if(!J)return;let Y=()=>{G||(G=!0,B?.kill(`SIGTERM`),H?.kill(`SIGTERM`),W?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),z?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),U?.kill(`SIGTERM`))},X=[`SIGINT`,`SIGTERM`].map(e=>{let t=()=>{K??=e,Y()};return h.on(e,t),{handler:t,signal:e}}),Z=async e=>{let t=y(e);B=t;try{await t.expectSuccess()}catch(e){if(!G)throw e}finally{B===t&&(B=void 0)}};try{let l=F===`ios`||F===`android`?F:void 0,u=l?await ee({env:g,interactive:C,platform:l,target:a}):void 0,D=l&&u?await s({device:u,host:b,interactive:C,platform:l}):void 0,N=D?!0:b,[I,B,K]=await Promise.all([L.measure(`config`,()=>e({cwd:r})),L.measure(`routing`,async()=>F===`web`&&g.PORTLESS!==`0`&&g.TAURI_ENV_PLATFORM===void 0&&!(await _()).isAgent&&await ae(r)),L.measure(`managed`,async()=>i!==`managed-dev-overlay`&&(T||C&&!P)&&await ie(r))]);await L.measure(`i18n`,()=>o({cwd:r,projectConfig:I}));let X=await L.measure(`https`,async()=>x&&!B?ne({cwd:r}):void 0);q={...g,...L.environment,...i===`managed-dev-overlay`?{[S]:`1`}:void 0,...F===`web`?void 0:{COREFRAME_TAURI_DEV:`1`,TAURI_ENV_PLATFORM:A(F),...D?{TAURI_DEV_HOST:D}:void 0},...X?{[te]:X.cert,[c]:X.key}:void 0};let Q=async()=>{let e=v({label:`web`}),t=v({color:`red`,label:`web`});e.pipe(h.stdout,{end:!1}),t.pipe(h.stderr,{end:!1}),W=f(B?ce:le,B?M({host:N,port:R}):j({host:N,port:R}),{cwd:r,env:{...q,CLOUDFLARE_ENV:`development`,NODE_OPTIONS:[q.NODE_OPTIONS,`--conditions=development`].filter(Boolean).join(` `),PATH:se+d.delimiter+pe},stdin:`inherit`});let n=Promise.allSettled([E(W.stdout,e),E(W.stderr,t)]);try{await W;let e=(await n).find(e=>e.status===`rejected`);if(e)throw e.reason}catch(e){if(!G)throw e}finally{await n,e.end(),t.end(),await Promise.allSettled([p(e),p(t)]),W=void 0}},me=async()=>{if(F===`web`){await Q();return}let e=Q().then(()=>{if(!G)throw Error(`The Vite development server stopped while Tauri was still running.`)}),t,n;if(F===`ios`&&!fe){n=v({label:`ios`}),n.pipe(h.stdout,{end:!1});try{t=await oe({output:n}),m.log.info(`Full iOS log: ${t.logFile}`)}catch{n.end(),n=void 0,m.log.warn(`Could not create the temporary iOS log; showing full Tauri output.`)}}z=f(w,k(F,u?.name,D),{cwd:r,env:g,stdio:t?[`inherit`,`pipe`,`pipe`]:`inherit`});let i=t?.consume(z),a=z.catch(async e=>{throw G||(await i,await t?.reportFailure()),e});try{await Promise.race([e,a])}finally{Y(),await Promise.allSettled([e,z,i]),await t?.close(),n?.end(),z=void 0}},he=async()=>{let e=y({name:`panda`,command:w,args:[`exec`,`panda`,`dev`,`--no-color`],cwd:r,env:q});H=e;try{if(await e.expectSuccess(),!G)throw Error(`The Panda CSS watcher stopped while development was still running.`)}catch(e){if(!G)throw e}finally{H===e&&(H=void 0)}},$=async()=>{let e=he(),t=me();try{await Promise.race([e,t])}finally{Y(),await Promise.allSettled([e,t])}};if(K&&(q={...q,[re]:`1`}),G||I.database?.dialect===`sqlite`&&(await L.measure(`database`,async()=>{let e=await n.getAvailablePort(),i=d.resolve(r,`.coreframe`),a=d.join(i,`turso.db`);await t.mkdir(i,{recursive:!0}),q={...q,TURSO_DATABASE_URL:`http://127.0.0.1:${e}`,TURSO_AUTH_TOKEN:`dev`},U=y({name:`turso`,command:ue,args:[`dev`,`--port`,String(e),`--db-file`,a],cwd:r,env:g}),await U.waitFor(`listening`)}),await L.measure(`schema`,()=>Z({name:`db`,command:w,args:[`db`,`ensure`],cwd:r,env:q,prefix:!1})),G))return;if(O(I)){let e=v({label:`postgres`});e.pipe(h.stdout,{end:!1});try{let t=await L.measure(`database`,()=>de({config:I,cwd:r,env:q,failIfRunning:!0,interactive:C,isStopping:()=>G,postgresOutput:e,takeoverApproved:J.takeoverApproved}));if(!t)return;V=t,q=t.env;try{G||await L.measure(`schema`,()=>Z({name:`db`,command:w,args:[`db`,`ensure`],cwd:r,env:q,prefix:!1})),G||(L.report(),await $())}finally{await t[Symbol.asyncDispose](),V===t&&(V=void 0)}}finally{e.end()}return}L.report(),await $()}finally{Y();let e;try{await V?.[Symbol.asyncDispose]()}catch(t){e=t}finally{for(let{handler:e,signal:t}of X)h.off(t,e);K&&(h.exitCode??=K===`SIGINT`?130:143)}D(e),await J.release()}}async function E(e,t){for await(let n of e)t.write(`${n}\n`)||await g(t,`drain`)}function D(e){if(e)throw e}async function de({interactive:e,isStopping:t,takeoverApproved:n,...o}){try{return await i(o)}catch(s){if(!(s instanceof r)||!e)throw s;if(!n){let e=await m.confirm({initialValue:!1,message:`PostgreSQL is already running for this project (PID ${s.pid}). Stop it and start here?`});if(m.isCancel(e)||!e){m.cancel(`Keeping the existing PostgreSQL process.`);return}}return await a(s),t()?void 0:i(o)}}function O(e){return(e.database?.dialect??`postgres`)===`postgres`}function k(e,t,n){return[`exec`,`tauri`,...e===`desktop`?[]:[e],`dev`,`--config`,JSON.stringify({build:{beforeDevCommand:``}}),...n===void 0?[]:[`--host=${n}`],...t===void 0?[]:[t]]}function A(e){return e===`desktop`?h.platform===`win32`?`windows`:h.platform:e}function j({host:e,port:t}){return[`dev`,...e===void 0?[]:[`--host`,e===!0?`0.0.0.0`:e],...t===void 0?[]:[`--port`,String(t)]]}function M({host:e,port:t}){return[`run`,...t===void 0?[]:[`--app-port`,String(t)],`react-router`,...j({host:e,port:void 0})]}function N(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<=0||t>65535)throw Error(`COREFRAME_WEB_PORT must be a valid TCP port.`);return t}export{x as devDebugFeatures,b as devPlatforms,S as managedDevOverlayDebugEnv,C as resolveDevPlatforms,T as runDevServer};
|