@coreframe/scripts 0.2.22 → 0.2.24

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/coreframe.js CHANGED
@@ -17,7 +17,7 @@ h Show this help.
17
17
  q Quit.
18
18
  `):t===`c`&&o.write(`\x1Bc`)};return n.setRawMode?.(!0),n.resume(),n.on(`data`,l),t.CI!==`true`&&o.write(`
19
19
  Coreframe: Press "R" to restart the Flutter process.
20
- `),()=>{n.off(`data`,l),c||n.setRawMode?.(!1),s!==!0&&n.pause()}}function Ao(e=!1){return e?`debug`:`profile`}function jo({device:e,mode:t,platform:n}){if(t===`profile`&&!e.physical)throw Error(`Flutter profile mode is unavailable on ${n===`ios`?`iOS simulator`:`Android emulator`}s. Re-run with --flutter-debug or select a physical device.`)}function Mo({device:e,mode:t,serverUrl:n,verbose:r}){return[`run`,`--${t}`,`-d`,e.id,`--dart-define=COREFRAME_DEV_SERVER_URL=${n}`,...r?[`--verbose`]:[]]}const No={command:Yo,isRunning:Bo,stop(e){try{X.kill(e,`SIGTERM`)}catch(e){if(!Uo(e))throw e}},waitForExit:Vo};async function Po({confirmStop:e=Lo,cwd:t=X.cwd(),interactive:n=X.stdin.isTTY===!0,pid:r=X.pid,platform:i=`web`,processes:a=No}={}){let o=await Qo(t,i),s=o.file,c={pid:r,platform:i,repository:o.repository,token:Y()},l=`${JSON.stringify(c)}\n`,u=`${s}.${c.token}.tmp`,d=await Go({confirmStop:e,file:P.resolve(t,`.coreframe/dev.lock`),interactive:n,owner:c,processes:a});if(d===void 0)return;let f=d;await G(P.dirname(s),{recursive:!0}),await J(u,l,{flag:`wx`,mode:384});try{for(;;){try{return await ye(u,s),{owner:c,async release(){await zo(s,l)},takeoverApproved:f}}catch(e){if(!Ho(e))throw e}let t=await Io({confirmStop:e,file:s,interactive:n,owner:c,processes:a});if(t===void 0)return;f||=t}}finally{await Te(u).catch(()=>void 0)}}async function Fo({cwd:e=X.cwd(),platform:t=`web`}={}){let{file:n}=await Qo(e,t);return(await Ro(n))?.owner}async function Io({confirmStop:e,file:t,interactive:n,owner:r,processes:i}){let a=await Ro(t);if(!a||!ns(a.owner,r)||!i.isRunning(a.owner.pid))return await zo(t,a?.source),!1;if(!n)throw Error(`Coreframe dev is already running for this project (PID ${a.owner.pid}). Stop it before starting another.`);if(await e(a.owner.pid))return i.stop(a.owner.pid),await i.waitForExit(a.owner.pid),await zo(t,a.source),!0}async function Lo(e){let t=await H.confirm({initialValue:!1,message:`Coreframe dev is already running for this project (PID ${e}). Stop it and start here?`});return H.isCancel(t)||!t?(H.cancel(`Keeping the existing Coreframe dev process.`),!1):!0}async function Ro(e){try{let t=await K(e,`utf8`),n=JSON.parse(t);return!Number.isSafeInteger(n.pid)||Number(n.pid)<=0||typeof n.platform!=`string`||n.platform.length===0||typeof n.repository!=`string`||n.repository.length===0||typeof n.token!=`string`||n.token.length===0?void 0:{owner:n,source:t}}catch{return}}async function zo(e,t){let n=await K(e,`utf8`).catch(()=>void 0);(t===void 0||n===t)&&await Te(e).catch(()=>void 0)}function Bo(e){try{return X.kill(e,0),!0}catch(e){return!Uo(e)}}async function Vo(e){let t=Date.now()+1e4;for(;Bo(e);){if(Date.now()>=t)throw Error(`Coreframe dev process ${e} did not stop within 10 seconds.`);await new Promise(e=>setTimeout(e,50))}}function Ho(e){return Wo(e)&&e.code===`EEXIST`}function Uo(e){return Wo(e)&&e.code===`ESRCH`}function Wo(e){return e instanceof Error}async function Go({confirmStop:e,file:t,interactive:n,owner:r,processes:i}){let a=await Ko(t);if(!a||!i.isRunning(a.owner.pid))return await zo(t,a?.source),!1;let o=i.command?.(a.owner.pid);if(!o||!qo(o,r.platform))return!1;if(!n)throw Error(`Coreframe dev is already running for this project (PID ${a.owner.pid}). Stop it before starting another.`);if(await e(a.owner.pid))return i.stop(a.owner.pid),await i.waitForExit(a.owner.pid),await zo(t,a.source),!0}async function Ko(e){try{let t=await K(e,`utf8`),n=JSON.parse(t);return!Number.isSafeInteger(n.pid)||Number(n.pid)<=0||typeof n.token!=`string`||n.token.length===0?void 0:{owner:n,source:t}}catch{return}}function qo(e,t){let n=e.trim().split(/\s+/u),r=n.findIndex(e=>{let t=e.split(/[\\/]/u).at(-1);return t===`coreframe`||t===`coreframe.js`||t===`coreframe.ts`});if(r<0)return!1;let i=n.indexOf(`dev`,r+1);return i<0?!1:Jo(n.slice(i+1))===t}function Jo(e){let t=new Set([`android`,`ios`,`linux`,`macos`,`web`,`windows`]),n=new Set([`--debug`,`--host`,`--port`]),r=!1;for(let i of e){if(r){r=!1;continue}if(n.has(i)){r=!0;continue}if(!i.startsWith(`-`))return t.has(i)?i:`web`}return`web`}function Yo(e){let t=X.platform===`win32`?Zo(e):Xo(e);if(t.status===0)return t.stdout.trim()||void 0}function Xo(e){return Z(`ps`,[`-p`,String(e),`-o`,`command=`],{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]})}function Zo(e){return Z(`powershell.exe`,[`-NoProfile`,`-NonInteractive`,`-Command`,`(Get-CimInstance Win32_Process -Filter 'ProcessId = ${e}').CommandLine`],{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]})}async function Qo(e,t){let n=await $o(P.resolve(e)),r=n.gitCommonDir?P.join(n.path,`coreframe-dev`):P.join(n.path,`.coreframe`);return{file:P.join(r,`dev.${t}.lock`),repository:n.path}}async function $o(e){let t=es(e);return t?{gitCommonDir:!0,path:await ts(P.resolve(e,t))}:{gitCommonDir:!1,path:await ts(e)}}function es(e){let t=Z(`git`,[`rev-parse`,`--git-common-dir`],{cwd:e,encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]});if(t.status===0)return t.stdout.trim()||void 0}async function ts(e){return Se(e).catch(()=>P.resolve(e))}function ns(e,t){return e.platform===t.platform&&e.repository===t.repository}function rs(e,t){let n={...e};return t===`web`||t===`webext`?n.COREFRAME_PLATFORM=`web`:n.COREFRAME_PLATFORM=t,n}const is=X.platform===`win32`?`portless.cmd`:`portless`,as=RegExp(`\x1B\\[[0-?]*[ -/]*[@-~]`,`g`),os=/^Proxy is already running on port \d+\.$/,ss=/^To restart: portless proxy stop(?: (?:-p|--port) \d+)? && portless proxy start(?: (?:-p|--port) \d+)?$/;function cs(e){let t=e.split(/(\r\n|\n)/),n=[];for(let e=0;e<t.length;){let r=t[e],i=t[e+2];if(r!==void 0&&i!==void 0&&os.test(r.replace(as,``).trim())&&ss.test(i.replace(as,``).trim())){e+=t[e+3]===void 0?3:4;continue}n.push(t[e]??``),e+=1}return n.join(``)}function ls(e){let t=cs(e);t&&X.stdout.write(t.endsWith(`
20
+ `),()=>{n.off(`data`,l),c||n.setRawMode?.(!1),s!==!0&&n.pause()}}function Ao(e=!1){return e?`debug`:`profile`}function jo({device:e,mode:t,platform:n}){if(t===`profile`&&!e.physical)throw Error(`Flutter profile mode is unavailable on ${n===`ios`?`iOS simulator`:`Android emulator`}s. Re-run with --flutter-debug or select a physical device.`)}function Mo({device:e,mode:t,serverUrl:n,verbose:r}){return[`run`,`--${t}`,`-d`,e.id,`--dart-define=COREFRAME_DEV_SERVER_URL=${n}`,...r?[`--verbose`]:[]]}const No={command:Yo,isRunning:Bo,stop(e){try{X.kill(e,`SIGTERM`)}catch(e){if(!Uo(e))throw e}},waitForExit:Vo};async function Po({confirmStop:e=Lo,cwd:t=X.cwd(),interactive:n=X.stdin.isTTY===!0,pid:r=X.pid,platform:i=`web`,processes:a=No}={}){let o=await Qo(t,i),s=o.file,c={pid:r,platform:i,repository:o.repository,token:Y()},l=`${JSON.stringify(c)}\n`,u=`${s}.${c.token}.tmp`,d=await Go({confirmStop:e,file:P.resolve(t,`.coreframe/dev.lock`),interactive:n,owner:c,processes:a});if(d===void 0)return;let f=d;await G(P.dirname(s),{recursive:!0}),await J(u,l,{flag:`wx`,mode:384});try{for(;;){try{return await ye(u,s),{owner:c,async release(){await zo(s,l)},takeoverApproved:f}}catch(e){if(!Ho(e))throw e}let t=await Io({confirmStop:e,file:s,interactive:n,owner:c,processes:a});if(t===void 0)return;f||=t}}finally{await Te(u).catch(()=>void 0)}}async function Fo({cwd:e=X.cwd(),platform:t=`web`}={}){let{file:n}=await Qo(e,t);return(await Ro(n))?.owner}async function Io({confirmStop:e,file:t,interactive:n,owner:r,processes:i}){let a=await Ro(t);if(!a||!ns(a.owner,r)||!i.isRunning(a.owner.pid))return await zo(t,a?.source),!1;if(!n)throw Error(`Coreframe dev is already running for this project (PID ${a.owner.pid}). Stop it before starting another.`);if(await e(a.owner.pid))return i.stop(a.owner.pid),await i.waitForExit(a.owner.pid),await zo(t,a.source),!0}async function Lo(e){let t=await H.confirm({initialValue:!1,message:`Coreframe dev is already running for this project (PID ${e}). Stop it and start here?`});return H.isCancel(t)||!t?(H.cancel(`Keeping the existing Coreframe dev process.`),!1):!0}async function Ro(e){try{let t=await K(e,`utf8`),n=JSON.parse(t);return!Number.isSafeInteger(n.pid)||Number(n.pid)<=0||typeof n.platform!=`string`||n.platform.length===0||typeof n.repository!=`string`||n.repository.length===0||typeof n.token!=`string`||n.token.length===0?void 0:{owner:n,source:t}}catch{return}}async function zo(e,t){let n=await K(e,`utf8`).catch(()=>void 0);(t===void 0||n===t)&&await Te(e).catch(()=>void 0)}function Bo(e){try{return X.kill(e,0),!0}catch(e){return!Uo(e)}}async function Vo(e){let t=Date.now()+1e4;for(;Bo(e);){if(Date.now()>=t)throw Error(`Coreframe dev process ${e} did not stop within 10 seconds.`);await new Promise(e=>setTimeout(e,50))}}function Ho(e){return Wo(e)&&e.code===`EEXIST`}function Uo(e){return Wo(e)&&e.code===`ESRCH`}function Wo(e){return e instanceof Error}async function Go({confirmStop:e,file:t,interactive:n,owner:r,processes:i}){let a=await Ko(t);if(!a||!i.isRunning(a.owner.pid))return await zo(t,a?.source),!1;let o=i.command?.(a.owner.pid);if(!o||!qo(o,r.platform))return!1;if(!n)throw Error(`Coreframe dev is already running for this project (PID ${a.owner.pid}). Stop it before starting another.`);if(await e(a.owner.pid))return i.stop(a.owner.pid),await i.waitForExit(a.owner.pid),await zo(t,a.source),!0}async function Ko(e){try{let t=await K(e,`utf8`),n=JSON.parse(t);return!Number.isSafeInteger(n.pid)||Number(n.pid)<=0||typeof n.token!=`string`||n.token.length===0?void 0:{owner:n,source:t}}catch{return}}function qo(e,t){let n=e.trim().split(/\s+/u),r=n.findIndex(e=>{let t=e.split(/[\\/]/u).at(-1);return t===`coreframe`||t===`coreframe.js`||t===`coreframe.ts`});if(r<0)return!1;let i=n.indexOf(`dev`,r+1);return i<0?!1:Jo(n.slice(i+1))===t}function Jo(e){let t=new Set([`android`,`ios`,`linux`,`macos`,`web`,`windows`]),n=new Set([`--debug`,`--host`,`--port`]),r=!1;for(let i of e){if(r){r=!1;continue}if(n.has(i)){r=!0;continue}if(!i.startsWith(`-`))return t.has(i)?i:`web`}return`web`}function Yo(e){let t=X.platform===`win32`?Zo(e):Xo(e);if(t.status===0)return t.stdout.trim()||void 0}function Xo(e){return Z(`ps`,[`-p`,String(e),`-o`,`command=`],{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]})}function Zo(e){return Z(`powershell.exe`,[`-NoProfile`,`-NonInteractive`,`-Command`,`(Get-CimInstance Win32_Process -Filter 'ProcessId = ${e}').CommandLine`],{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]})}async function Qo(e,t){let n=await $o(P.resolve(e)),r=n.gitCommonDir?P.join(n.path,`coreframe-dev`):P.join(n.path,`.coreframe`);return{file:P.join(r,`dev.${t}.lock`),repository:n.path}}async function $o(e){let t=es(e);return t?{gitCommonDir:!0,path:await ts(P.resolve(e,t))}:{gitCommonDir:!1,path:await ts(e)}}function es(e){let t=Z(`git`,[`rev-parse`,`--git-common-dir`],{cwd:e,encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]});if(t.status===0)return t.stdout.trim()||void 0}async function ts(e){return Se(e).catch(()=>P.resolve(e))}function ns(e,t){return e.platform===t.platform&&e.repository===t.repository}function rs(e,t){let n={...e};return t===`web`||t===`webext`?n.COREFRAME_PLATFORM=`web`:n.COREFRAME_PLATFORM=t,n}const is=X.platform===`win32`?`portless.cmd`:`portless`,as=RegExp(`\x1B\\[[0-?]*[ -/]*[@-~]`,`g`),os=/^Proxy is already running on port (\d+)\.$/,ss=/^To restart: portless proxy stop(?: (?:-p|--port) \d+)? && portless proxy start(?: (?:-p|--port) \d+)?$/;function cs(e){let t=e.split(/(\r\n|\n)/),n=[];for(let e=0;e<t.length;){let r=t[e],i=t[e+2],a=r?.replace(as,``).trim().match(os);if(a?.[1]!==void 0&&i!==void 0&&ss.test(i.replace(as,``).trim())){n.push(`Portless proxy is running on port ${a[1]}.`),t[e+1]!==void 0&&n.push(t[e+1]),e+=t[e+3]===void 0?3:4;continue}n.push(t[e]??``),e+=1}return n.join(``)}function ls(e){let t=cs(e);t&&X.stdout.write(t.endsWith(`
21
21
  `)?t:`${t}\n`)}async function us({cwd:e,env:t,platform:n}){return n!==`web`||t.PORTLESS===`0`||(await Bt()).isAgent?!1:kt(e)}async function ds({cwd:e,env:t,lan:n=!1}){let r=P.join(`node_modules`,`.bin`,is),i=[`proxy`,`start`,...n?[`--lan`]:[]];try{let{stdout:n}=await V(P.resolve(e,r),i,{cwd:e,env:t,stdin:`inherit`,stdout:`pipe`,stderr:`inherit`});ls(n)}catch(e){throw typeof e==`object`&&e&&`stdout`in e&&typeof e.stdout==`string`&&ls(e.stdout),e}}function fs({host:e,lan:t=!1,port:n}){return[...t?[`--lan`]:[],`run`,...n===void 0?[]:[`--app-port`,String(n)],`react-router`,`dev`,...e===void 0?[]:[`--host`,e===!0?`0.0.0.0`:e]]}async function ps({cwd:e=X.cwd(),platform:t}){let n=await ms({cwd:e});if(!n||!Cs(n.platform)||!ws(n.platform,t)||!Es(n.owner.pid))return;let r=await Fo({cwd:e,platform:n.platform});if(!(!r||!Ds(n.owner,r))&&!(n.postgres?.pid!==void 0&&!Es(n.postgres.pid)))return n}async function ms({cwd:e=X.cwd()}={}){let t;try{t=JSON.parse(await K(_s(e),`utf8`))}catch{return}return vs(t)&&t.cwd===P.resolve(e)?t:void 0}async function hs({cwd:e=X.cwd(),owner:t,platform:n,postgres:r,vitePort:i}){let a=_s(e),o=P.dirname(a),s=`${a}.${Y()}.tmp`,c={cwd:P.resolve(e),owner:t,platform:n,...r?{postgres:r}:void 0,version:1,vite:{port:i}};await G(o,{recursive:!0});try{await J(s,`${JSON.stringify(c)}\n`,{flag:`wx`,mode:384}),await Ce(s,a)}finally{await Te(s).catch(()=>void 0)}}async function gs({cwd:e=X.cwd(),owner:t}){let n=_s(e),r=await ms({cwd:e});!r||!Ds(r.owner,t)||await Te(n).catch(()=>void 0)}function _s(e){return P.resolve(e,`.coreframe/dev.session.json`)}function vs(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.version===1&&typeof t.cwd==`string`&&ys(t.owner)&&xs(t.platform)&&Ts(t.vite?.port)&&(t.postgres===void 0||bs(t.postgres))}function ys(e){if(!e||typeof e!=`object`)return!1;let t=e,n=t.pid;return typeof n==`number`&&Number.isSafeInteger(n)&&n>0&&typeof t.token==`string`}function bs(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.dataDir==`string`&&(t.pid===void 0||Number.isSafeInteger(t.pid)&&t.pid>0)}function xs(e){return e===`android`||e===`ios`||e===`linux`||e===`macos`||e===`web`||e===`windows`}function Ss(e){return e===`android`||e===`ios`||e===`linux`||e===`macos`||e===`windows`}function Cs(e){return e===`web`||Ss(e)}function ws(e,t){return t===void 0?Ss(e):e===t}function Ts(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>0&&e<=65535}function Es(e){try{return X.kill(e,0),!0}catch(e){return e instanceof Error&&e.code===`EPERM`}}function Ds(e,t){return e.pid===t.pid&&e.token===t.token}const Os=X.platform===`win32`?`pnpm.cmd`:`pnpm`,ks=X.platform===`win32`?`portless.cmd`:`portless`,As=X.platform===`win32`?`react-router.cmd`:`react-router`;async function js({cwd:e=X.cwd(),debug:t,device:n,env:r=X.env,flutterDebug:i=!1,flutterOutput:a=`filtered`,host:o,https:s=!1,interactive:c=X.stdin.isTTY===!0,lan:l=!1,managed:u=!1,noCodesign:d=!1,noManaged:f=!1,noDevJobs:p=!1,platform:m=`web`,portless:h,fresh:g=!1,reuseVite:_=!1,verbose:v=!1,webPort:y,supervisor:b}){let x=Tt({env:r}),S=Ls(m)?m:void 0,C=Ao(i);if(i&&S===void 0)throw Error(`The --flutter-debug option is only supported for Flutter development platforms (iOS, Android, macOS, Windows, and Linux).`);let w=Rs(m),T=m===`ios`||m===`android`?m:void 0,E=T?await Xa({env:r,interactive:c,platform:T,target:n}):void 0;T&&E&&jo({device:E,mode:C,platform:T});let D=S?!0:o,O=await x.measure(`config`,()=>Me({cwd:e})),ee=await x.measure(`managed`,async()=>t!==`managed-dev-overlay`&&(u||c&&!f)&&await Ot(e));await x.measure(`i18n`,()=>Bn({cwd:e,projectConfig:O}));let te=await x.measure(`routing`,async()=>h??await us({cwd:e,env:r,platform:m})),ne=await x.measure(`https`,async()=>s&&!te?At({cwd:e}):void 0),re=rs(r,m),ie=!_&&wr(e),k,A={...re,...x.environment,...ee?{[Ft]:`1`,[Lt]:`1`}:void 0,...t===`managed-dev-overlay`?{VITE_COREFRAME_MANAGED_DEV_OVERLAY_DEBUG:`1`}:void 0,...!p&&m!==`webext`?{[It]:Y()}:void 0,...S?{COREFRAME_PLATFORM:S,[Rt]:P.resolve(e,`.coreframe`,`managed-dev-flutter-restart`)}:void 0,...ne?{[Et]:ne.cert,[Dt]:ne.key}:void 0},j=!1,oe,se,M,N,F,I,L,R,z,B=new Promise(e=>{z=e}),V=new Map,H=[`postgres`,`sqlite`,w];for(let e of H){let t=e===`postgres`||e===`sqlite`?e:e.startsWith(`vite:flutter`)?`flutter`:`web`,n=qe({label:t}),r=qe({color:`red`,label:t});n.pipe(X.stdout,{end:!1}),r.pipe(X.stderr,{end:!1}),V.set(e,{stderr:r,stdout:n})}let U=b.onEvent(e=>{e.event===`log`?(V.get(e.resource)?.[e.stream])?.write(e.data):e.event===`service`&&e.resource===w&&(e.state===`failed`||e.state===`stopped`)&&(e.state===`failed`&&(R=Error(e.error??`${w} development failed.`)),ce())}),ce=()=>{j||(j=!0,z(),M?.kill(`SIGTERM`),se?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0))},le=e=>{oe??=e,ce()},ue=[`SIGINT`,`SIGTERM`].map(e=>{let t=()=>le(e);return X.on(e,t),{handler:t,signal:e}}),W=async e=>{let t=Je(e);M=t;try{await t.expectSuccess()}catch(e){if(!j)throw e}finally{M===t&&(M=void 0)}};try{if(await b.subscribe(H),Is(O)){let e=await b.acquirePostgres({config:O,env:A});F=e.leaseId,A={...A,...e.env}}if(O.database?.dialect===`sqlite`){let e=await b.acquireSqlite({config:O,env:A});I=e.leaseId,A={...A,...e.env}}(Is(O)||O.database?.dialect===`sqlite`)&&await x.measure(`schema`,()=>W({name:`db`,command:Os,args:[`db`,`ensure`],cwd:e,env:A,prefix:!1}));let t=Fs(y??r.COREFRAME_WEB_PORT),n=await b.status(),i=n.resources?.find(e=>e.resource===w),u=i!==void 0&&!g,f=u&&t===void 0?void 0:t??(_?5173:await _r.getAvailablePort()),p=f??i?.endpoint?.port??5173;if(f!==void 0&&n.resources?.some(e=>e.resource!==w&&e.endpoint?.port===p)){if(t!==void 0)throw Error(`Port ${p} is already used by another Coreframe development shell.`);p=await _r.getAvailablePort()}if(ie&&!u&&(k=await _r.getAvailablePort(),k===p&&(k=await _r.getAvailablePort()),A={...A,COREFRAME_DASHBOARD_ORIGIN:`http://127.0.0.1:${k}`}),T&&E&&(N=await Qa({device:E,env:r,host:o,interactive:c,platform:T,port:p}),D=N.viteHost),!_){let t={...A,CLOUDFLARE_ENV:`development`,NODE_OPTIONS:[A.NODE_OPTIONS,`--conditions=development`].filter(Boolean).join(` `),PATH:P.join(e,`node_modules`,`.bin`)+P.delimiter+(A.PATH??``)},n=[{args:te?fs({host:D,lan:l,port:p}):[`dev`,...D===void 0?[]:[`--host`,D===!0?`0.0.0.0`:D],`--port`,String(p),...m===`web`||S?[`--strictPort`]:[]],command:te?ks:As,cwd:e,env:t},{args:[`exec`,`panda`,`dev`,`--no-color`],command:Os,cwd:e,env:A},...k?[{args:Tr(k),command:Os,cwd:e,env:A}]:[]],r=await b.acquireVite({configFingerprint:Ps({cwd:e,host:D,lan:l,https:s,portless:te,resource:w}),endpoint:{host:D===!0?`0.0.0.0`:D??`127.0.0.1`,port:p},processes:n,resource:w},g);L=r.leaseId,p=r.endpoint.port}if(x.report(),j)return;if(m===`web`?await Promise.race([Ns(b,w,()=>R),B]):(await ae({cwd:e}),await Ms({cwd:e,env:re,interactive:c,platform:m,requestStop:ce,selectedDevice:E,serverUrl:N?.serverUrl??$a(m,void 0,p),mode:C,noCodesign:d,output:a,flutterRestartFile:A[Rt],handleShutdown:le,isStopping:()=>j,stopRequested:B,setActiveNative:e=>{se=e},verbose:v})),R)throw R}finally{ce(),await N?.close(),N=void 0,L&&await b.release(L).catch(()=>void 0),F&&await b.release(F).catch(()=>void 0),I&&await b.release(I).catch(()=>void 0),U();for(let{handler:e,signal:t}of ue)X.off(t,e);for(let e of V.values())e.stdout.end(),e.stderr.end();oe&&(X.exitCode??=oe===`SIGINT`?130:143),b.close()}}async function Ms({cwd:e,env:t,interactive:n,platform:r,requestStop:i,selectedDevice:a,serverUrl:o,mode:s,noCodesign:c,output:l,flutterRestartFile:u,handleShutdown:d,isStopping:f,stopRequested:p,setActiveNative:m,verbose:h}){let g,_=!1,v=()=>{_||f()||!g||(_=!0,t.CI!==`true`&&X.stdout.write(`
22
22
  Restarting Flutter process...
23
23
  `),g.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0))},y=Eo(u,v);try{for(;;){_=!1;let u=r===`android`&&l===`filtered`&&!h?await se():void 0,y=n&&s===`profile`,b=V(`flutter`,Mo({device:a??{id:r},mode:s,serverUrl:o,verbose:h}),{cwd:P.join(e,`src-flutter`),env:Oo(t,{noCodesign:c}),stdio:u?[y?`pipe`:`inherit`,`pipe`,`pipe`]:y?[`pipe`,`inherit`,`inherit`]:`inherit`});m(b),g=b;let x=ko({enabled:y,env:t,onInterrupt:()=>d(`SIGINT`),onQuit:i,onRestart:v});try{if(await Promise.all([b,u?.capture(b)]),!_||f())return}catch{if(_&&!f())continue;if(f())return;let e=n?await H.confirm({initialValue:!0,message:`Flutter failed. Retry?`}):!1;if(H.isCancel(e)||!e){H.log.warn(`Flutter stopped. Web development is still running.`),await p;return}}finally{x(),m(void 0),g===b&&(g=void 0)}}}finally{(await y)()}}async function Ns(e,t,n){await e.waitForServiceExit(t);let r=n();if(r)throw r}function Ps({cwd:e,host:t,lan:n,https:r,portless:i,resource:a}){return Pe(`sha256`).update(JSON.stringify({cwd:P.resolve(e),host:t??null,lan:n,https:r,portless:i,resource:a})).digest(`hex`)}function Fs(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}function Is(e){return(e.database?.dialect??`postgres`)===`postgres`}function Ls(e){return e===`android`||e===`ios`||e===`linux`||e===`macos`||e===`windows`}function Rs(e){if(e===`web`)return`vite:web`;if(Ls(e))return`vite:flutter:${e}`;throw Error(`Unsupported supervised development platform: ${e}.`)}const zs=`extension:dev`;function Bs(e){if(!Ie(L(e,`src-webext/wxt.config.ts`)))throw Error("No WXT configuration found at src-webext/wxt.config.ts. Apply the wxt recipe or add that convention before running `coreframe dev webext`.");let t=L(e,`package.json`),n;try{n=JSON.parse(Be(t,`utf8`))}catch(e){throw Error(`Could not parse ${t}.`,{cause:e})}if(!n||typeof n!=`object`||!(`scripts`in n)||!n.scripts||typeof n.scripts!=`object`||!(`extension:dev`in n.scripts)||typeof n.scripts[`extension:dev`]!=`string`)throw Error(`package.json must define scripts.${zs} for \`coreframe dev webext\`. Apply the wxt recipe and add its named extension lifecycle scripts.`)}function Vs({host:e,port:t}){let n=[...e===void 0?[]:[`--host`,e===!0?`0.0.0.0`:e],...t===void 0?[]:[`--port`,String(t)]];return[`run`,zs,...n.length>0?[`--`,...n]:[]]}const Hs=[`web`,`webext`,`ios`,`android`,`macos`,`windows`,`linux`],Us=[`managed-dev-overlay`],Ws=P.resolve(`node_modules`,`.bin`),Gs=X.platform===`win32`?`pnpm.cmd`:`pnpm`,Ks=X.platform===`win32`?`portless.cmd`:`portless`,qs=X.platform===`win32`?`react-router.cmd`:`react-router`;async function Js({cwd:e=X.cwd(),debug:t,device:n,env:r=X.env,flutterDebug:i=!1,flutterOutput:a=`filtered`,host:o,https:s=!1,interactive:c=X.stdin.isTTY===!0,lan:l=!1,managed:u=!1,noCodesign:d=!1,noManaged:f=!1,noDevJobs:p=!1,platform:m=`web`,fresh:h=!1,reuseVite:g=!1,supervisor:_,verbose:v=!1,webPort:y}={}){let b=Tt({env:r}),x=r.PATH??r.Path??``,S=nc(m)?m:void 0,C=Ao(i),w=m===`web`||S!==void 0;if(h&&g)throw Error(`Cannot use --fresh and --reuse-vite together.`);let T=!h&&(S||m===`web`)?await b.measure(`dev-session`,()=>ps({cwd:e,platform:m})):void 0,E=g||T!==void 0,D=tc(y??r.COREFRAME_WEB_PORT);if(T&&D!==void 0&&D!==T.vite.port)throw Error(`The active development session uses port ${T.vite.port}. Omit --port or use that port when reusing it.`);let O,ee,te,ne,ie,k,A,j,oe,M,N=!1,F,I=r,L,R;if(u&&f)throw Error(`Cannot use --managed and --no-managed together.`);if(t===`managed-dev-overlay`&&u)throw Error(`Cannot use --managed with --debug managed-dev-overlay.`);if(i&&S===void 0)throw Error(`The --flutter-debug option is only supported for Flutter development platforms (iOS, Android, macOS, Windows, and Linux).`);if(d&&m!==`macos`)throw Error(`The --no-codesign option is only supported for macOS Flutter development.`);if(a===`full`&&S===void 0)throw Error(`The --flutter-output option is only supported for Flutter development platforms (iOS, Android, macOS, Windows, and Linux).`);if(g&&S===void 0)throw Error(`The --reuse-vite option is only supported for Flutter development platforms (iOS, Android, macOS, Windows, and Linux).`);if(m===`webext`){if(u||f||t!==void 0||v)throw Error(`Managed development, debug features, and verbose native output are only supported for the main web or native development platforms.`);Bs(e)}if(s&&m!==`web`)throw Error(`Local HTTPS is only supported for the web development platform.`);if(n!==void 0&&m!==`ios`&&m!==`android`)throw Error(`A device name or ID is only supported for iOS or Android development.`);let z=await b.measure(`routing`,()=>us({cwd:e,env:r,platform:m}));if(z&&await b.measure(`portless`,()=>ds({cwd:e,env:r,lan:l})),w&&r.COREFRAME_DEV_SUPERVISOR!==`0`){let b=_??await wt({cwd:e,env:r});if(b)return js({cwd:e,debug:t,device:n,env:r,flutterDebug:i,flutterOutput:a,fresh:h,host:o,https:s,interactive:c,lan:l,managed:u,noCodesign:d,noManaged:f,noDevJobs:p,platform:m,portless:z,reuseVite:g,supervisor:b,verbose:v,webPort:y})}let B=E?void 0:await b.measure(`dev-lock`,()=>Po({cwd:e,interactive:c,platform:m}));if(!E&&!B)return;let U=S===void 0?m===`web`||m===`webext`?T?.vite.port??D:void 0:T?.vite.port??D??(g?5173:await _r.getAvailablePort()),ce,le=new Promise(e=>{ce=e}),ue=()=>{N||(N=!0,ce(),ee?.kill(`SIGTERM`),k?.kill(`SIGTERM`),A?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),j?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),oe?.close().catch(()=>void 0),O?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),W().catch(()=>void 0))},W=()=>ne?(ie??=ne[Symbol.asyncDispose](),ie):Promise.resolve(),de=e=>{F??=e,ue()},fe=[`SIGINT`,`SIGTERM`].map(e=>{let t=()=>de(e);return X.on(e,t),{handler:t,signal:e}}),pe=async e=>{let t=Je(e);ee=t;try{await t.expectSuccess()}catch(e){if(!N)throw e}finally{ee===t&&(ee=void 0)}};try{let i=m===`ios`||m===`android`?m:void 0,h=i?await Xa({env:r,interactive:c,platform:i,target:n}):void 0;i&&h&&jo({device:h,mode:C,platform:i}),M=i&&h&&U!==void 0?await Qa({device:h,env:r,host:o,interactive:c,platform:i,port:U}):void 0;let g=M?.viteHost??(S?!0:o),_={},y=!1,w;E||([_,y]=await Promise.all([b.measure(`config`,()=>Me({cwd:e})),b.measure(`managed`,async()=>t!==`managed-dev-overlay`&&(u||c&&!f)&&await Ot(e))]),await b.measure(`i18n`,()=>Bn({cwd:e,projectConfig:_})),w=m!==`webext`&&wr(e)?await _r.getAvailablePort():void 0);let T=E?void 0:await b.measure(`https`,async()=>s&&!z?At({cwd:e}):void 0),D=rs(r,m);I={...D,...b.environment,...y?{[Ft]:`1`}:void 0,...t===`managed-dev-overlay`?{VITE_COREFRAME_MANAGED_DEV_OVERLAY_DEBUG:`1`}:void 0,...!p&&m!==`webext`?{[It]:Y()}:void 0,...S&&(y||E)?{COREFRAME_PLATFORM:S,[Rt]:P.resolve(e,`.coreframe`,`managed-dev-flutter-restart`)}:void 0,...T?{[Et]:T.cert,[Dt]:T.key}:void 0,...w?{COREFRAME_DASHBOARD_ORIGIN:`http://127.0.0.1:${w}`}:void 0};let ee=async()=>{if(!w)return;let t=Er({cwd:e,env:I,port:w});oe=t;try{await t.listen(),await t.wait()}finally{await t.close(),oe===t&&(oe=void 0)}},ie=async()=>{let t=qe({label:`web`}),n=qe({color:`red`,label:`web`});t.pipe(X.stdout,{end:!1}),n.pipe(X.stderr,{end:!1}),A=V(z?Ks:qs,z?fs({host:g,lan:l,port:U}):ec({host:g,port:U,strictPort:S!==void 0}),{cwd:e,env:{...I,CLOUDFLARE_ENV:`development`,NODE_OPTIONS:[I.NODE_OPTIONS,`--conditions=development`].filter(Boolean).join(` `),PATH:Ws+P.delimiter+x},stdin:`inherit`});let r=Promise.allSettled([Ys(A.stdout,t),Ys(A.stderr,n)]);try{await A;let e=(await r).find(e=>e.status===`rejected`);if(e)throw e.reason}catch(e){if(!N)throw e}finally{await r,t.end(),n.end(),await Promise.allSettled([Ke(t),Ke(n)]),A=void 0}},F=async()=>{let t=qe({label:`webext`}),n=qe({color:`red`,label:`webext`});t.pipe(X.stdout,{end:!1}),n.pipe(X.stderr,{end:!1}),j=V(Gs,Vs({host:o,port:U}),{cwd:e,env:I,stdin:`inherit`});let r=Promise.allSettled([Ys(j.stdout,t),Ys(j.stderr,n)]);try{await j;let e=(await r).find(e=>e.status===`rejected`);if(e)throw e.reason}catch(e){if(!N)throw e}finally{await r,t.end(),n.end(),await Promise.allSettled([Ke(t),Ke(n)]),j=void 0}},ce=async t=>{let n,i=!1,o=()=>{i||N||!n||(i=!0,r.CI!==`true`&&X.stdout.write(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coreframe/scripts",
3
- "version": "0.2.22",
3
+ "version": "0.2.24",
4
4
  "description": "Coreframe project workflow CLI and automation scripts",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,13 +30,13 @@
30
30
  "yaml": "^2.9.0",
31
31
  "@coreframe/assets": "^0.1.12",
32
32
  "@coreframe/config": "^0.1.9",
33
- "@coreframe/db": "^0.1.10",
33
+ "@coreframe/db": "^0.1.12",
34
34
  "@coreframe/deploy": "^0.1.9",
35
- "@coreframe/dev": "^0.1.13",
36
- "@coreframe/flutter-tools": "^0.1.16",
35
+ "@coreframe/dev": "^0.1.15",
37
36
  "@coreframe/dev-contracts": "^0.1.6",
38
- "@coreframe/object-storage": "^0.1.4",
39
- "@coreframe/preview": "^0.1.9"
37
+ "@coreframe/flutter-tools": "^0.1.17",
38
+ "@coreframe/preview": "^0.1.11",
39
+ "@coreframe/object-storage": "^0.1.4"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^26.1.0",