view-contracts 0.5.5 → 0.5.6

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/cli-contract.yaml CHANGED
@@ -3,7 +3,7 @@ cli_contracts: 0.1.0
3
3
 
4
4
  info:
5
5
  title: view-contracts CLI
6
- version: 0.5.5
6
+ version: 0.5.6
7
7
  description: >-
8
8
  Contract-first UI design toolchain. Compiles restricted view-contract TSX
9
9
  to language-neutral View IR and renders platform targets (React, SwiftUI, Compose).
@@ -424,7 +424,7 @@ cli_contracts: 0.1.0
424
424
 
425
425
  info:
426
426
  title: view-contracts CLI
427
- version: 0.5.5
427
+ version: 0.5.6
428
428
  description: >-
429
429
  Contract-first UI design toolchain. Compiles restricted view-contract TSX
430
430
  to language-neutral View IR and renders platform targets (React, SwiftUI, Compose).
@@ -627,7 +627,7 @@ command_sets:
627
627
  "cli_contracts": "0.1.0",
628
628
  "info": {
629
629
  "title": "view-contracts CLI",
630
- "version": "0.5.5",
630
+ "version": "0.5.6",
631
631
  "description": "Contract-first UI design toolchain. Compiles restricted view-contract TSX to language-neutral View IR and renders platform targets (React, SwiftUI, Compose)."
632
632
  },
633
633
  "artifact_slots": {
@@ -1084,5 +1084,5 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
1084
1084
  `,s=ya(t,"entry.tsx");return await ld(s,o,"utf8"),s}async function ud(t,e,n){let r=await Ke(t),o=(await Et(r.bindings)).views.find(I=>I.screenName===e);if(!o)throw new Error(`No view binding for screen "${e}"`);if(!o.targets.includes("react"))throw new Error(`Screen "${e}" is not a react target`);let s=we(t),[a,l,c]=await Promise.all([Yb(t,e),Kv(t,r,e),Di(r,t)]),d=LT(o.exportName),p=Yp(e),f=ya(MT(),`view-contracts-preview-${process.pid}`);await NT(f,{recursive:!0});let m=await qT(f,a,l,d,p),g=Re(),y=[en(s,"node_modules"),en(g,"node_modules")],w=await VT({entryPoints:[m],bundle:!0,write:!1,format:"esm",platform:"browser",target:"es2022",jsx:"automatic",jsxImportSource:"react",absWorkingDir:s,nodePaths:y,alias:jT(s),logLevel:"silent"});if(w.errors.length>0)throw new Error(w.errors.map(I=>I.text).join(`
1085
1085
  `));let b=w.outputFiles[0]?.text??"";return{html:DT(),themeCss:c,bundleJs:b,version:n}}async function Xb(t,e){let n=await Et((await Ke(t)).bindings);if(e){let i=n.views.find(o=>o.screenName===e);if(!i)throw new Error(`Unknown screen "${e}" in view-bindings.yaml`);if(!i.targets.includes("react"))throw new Error(`Screen "${e}" is not a react target`);return e}let r=n.views.find(i=>i.targets.includes("react"));if(!r)throw new Error("No react target views in view-bindings.yaml");return r.screenName}jr();function co(t,e,n,r){t.writeHead(e,{"Content-Type":r,"Cache-Control":"no-store"}),t.end(n)}function HT(t,e,n){let r=t.url?.split("?")[0]??"/";if(r==="/"||r==="/index.html"){co(e,200,n.html,"text/html; charset=utf-8");return}if(r==="/bundle.js"){co(e,200,n.bundleJs,"text/javascript; charset=utf-8");return}if(r==="/theme.css"){co(e,200,n.themeCss,"text/css; charset=utf-8");return}if(r==="/__vc-reload"){co(e,200,JSON.stringify({version:n.version}),"application/json");return}co(e,404,"Not found","text/plain; charset=utf-8")}async function WT(t,e,n){let r=await Ke(t),i=we(t),{tokensPath:o,themePath:s}=on(r),a=await Yv(t,r),l=Bb(),c=[Un(i,r.viewsDir),Un(i,o),Un(i,s),a,l];r.extensions&&c.push(Un(i,r.extensions)),r.design?.extensionsCss&&c.push(Un(i,r.design.extensionsCss)),c.push(Un(i,"contracts/view-models.ts")),c.push(Un(i,"src/components/extensions.tsx"));let d,p=()=>{d&&clearTimeout(d),d=setTimeout(()=>n(),150)},f=[];for(let g of c)await Lr(g)&&f.push(g);let m=f.map(g=>BT(g,{recursive:!0},()=>p()));return()=>{d&&clearTimeout(d);for(let g of m)g.close()}}async function Qb(t){let e=t.port??5173,n=t.host??"127.0.0.1",r=await Xb(t.configPath,t.screen),i=0,o=await ud(t.configPath,r,i),s=!1,a=!1,l=async()=>{if(s){a=!0;return}s=!0;try{i+=1,o=await ud(t.configPath,r,i),console.log(`[preview] rebuilt (v${i})`)}catch(f){let m=f instanceof Error?f.message:String(f);console.error(`[preview] compile error:
1086
1086
  ${m}`)}finally{s=!1,a&&(a=!1,l())}},c=FT((f,m)=>HT(f,m,o));await new Promise((f,m)=>{c.once("error",m),c.listen(e,n,()=>f())});let d=`http://${n}:${e}/`;console.log(`[preview] ${r} \u2192 ${d}`),console.log("[preview] watching views/ and design files (Ctrl+C to stop)");let p=await WT(t.configPath,r,()=>{l()});await new Promise(f=>{let m=()=>{p(),c.close(()=>f())};process.once("SIGINT",m),process.once("SIGTERM",m)})}async function dd(t){if(!t.extensions)return{allowlistExtra:t.allowlistExtra??[]};let e=await cs(t.extensions),n=[...new Set([...t.allowlistExtra??[],...Object.keys(e.extensions)])];return{extensionRegistry:e,allowlistExtra:n}}async function Zb(t){await new Promise((e,n)=>{let r=JT("npx",["micro-contracts",...t],{stdio:"inherit"});r.on("error",n),r.on("close",i=>{i===0?e():n(new Error(`micro-contracts exited with code ${i}`))})})}async function pd(t){let e=await Ke(t),n=await Et(e.bindings),{extensionRegistry:r,allowlistExtra:i}=await dd(e),o=we(t),{screens:s,partials:a}=await Gd(n.views.map(l=>({sourcePath:Mt(o,l.source),exportName:l.exportName,screenName:l.screenName,targets:l.targets})),{allowlistExtra:i,extensionRegistry:r});return{screens:new Map(n.views.map((l,c)=>[l.screenName,s[c]])),partials:a}}function zn(t,e){let n=GT(n_(t),e).replace(/\\/g,"/");return n.startsWith(".")||(n=`./${n}`),n.replace(/\.tsx?$/,".js")}async function e_(t,e,n){let r=await Ke(t),i=we(t),{allowlistExtra:o}=await dd(r),s=await Et(r.bindings);for(let a of n){let l=Mt(r.generated.reactDir,"components",`${a.exportName}.generated.tsx`),c=zn(l,Mt(r.generated.reactDir,"runtime.ts")),d=zn(l,Mt(r.generated.reactDir,"extensions.generated.ts")),p=zn(l,Mt(i,"contracts/view-models.ts"));await ad(a,l,{runtimeImportFrom:c,extensionsImportFrom:d,contractsImportFrom:p,allowlistExtra:o}),console.log(` ${a.exportName} \u2192 ${l}`)}for(let a of s.views){if(!a.targets.includes("react"))continue;let l=e.get(a.screenName);if(!l)throw new Error(`Missing View IR for ${a.screenName}`);let c=Df(r,a),d=zn(c,Mt(r.generated.reactDir,"runtime.ts")),p=zn(c,Mt(r.generated.reactDir,"extensions.generated.ts")),f=zn(c,Mt(i,"contracts/view-models.ts")),m=new Map;for(let g of n){let y=Wb(r.generated.reactDir,g);m.set(g.exportName,zn(c,y))}await ad(l,c,{runtimeImportFrom:d,extensionsImportFrom:p,contractsImportFrom:f,allowlistExtra:o,viewRefImportFrom:m}),console.log(` ${a.exportName} \u2192 ${c}`)}}async function t_(t){let e=await Ke(t),n=await Et(e.bindings),r=we(t),o=["// Auto-generated view bridge registry \u2014 DO NOT EDIT",`// Generated from ${qf(r,e.bindings)}`,"","export const viewBridgeRegistry = {"];for(let s of n.views)o.push(` ${s.screenConst}: {`),o.push(` id: ${JSON.stringify(s.id)},`),o.push(` screenId: ${JSON.stringify(s.screenId)},`),o.push(` screenName: ${JSON.stringify(s.screenName)},`),o.push(` route: ${JSON.stringify(s.route)},`),o.push(` operationId: ${JSON.stringify(s.operationId)},`),o.push(` viewModel: ${JSON.stringify(s.viewModel)},`),o.push(` source: ${JSON.stringify(s.source)},`),o.push(` targets: ${JSON.stringify(s.targets)},`),o.push(" },");o.push("} as const;",""),o.push("export type ViewBridgeKey = keyof typeof viewBridgeRegistry;",""),await zT(n_(Mt(e.generated.bridge)),{recursive:!0}),await UT(Mt(e.generated.bridge),o.join(`
1087
- `),"utf-8"),console.log(`Bridge registry \u2192 ${e.generated.bridge} (${n.views.length} view(s))`)}var r_={compile:async(t,e)=>{let{screens:n,partials:r}=await pd(await rn(t.config));console.log(`Compiled ${n.size} screen(s) and ${r.length} partial(s) to View IR (in-memory)`)},renderReact:async(t,e)=>{let n=await rn(t.config),{screens:r,partials:i}=await pd(n);await e_(n,r,i)},renderBridge:async(t,e)=>{await t_(await rn(t.config))},build:async(t,e)=>{let n=await rn(t.config),r=await Ke(n),i=await Et(r.bindings),{screens:o,partials:s}=await pd(n);console.log(`Compiled ${o.size} screen(s) and ${s.length} partial(s) to View IR (in-memory)`);let{tokensPath:a,themePath:l}=on(r),{tokenIR:c,themeIR:d}=await xr(a,l);await Vn(r,n);let{allowlistExtra:p}=await dd(r),f=[...o.values(),...s];await ha(f,p),ji(f,d),await Ub(n,r),await e_(n,o,s),await t_(n),await zb(n,r,i,{theme:d,tokens:c},{screens:o,partials:s}),await Gb(n,r,i,{theme:d,tokens:c},{screens:o,partials:s}),await Kb(n,r,i)},contractsGenerate:async(t,e)=>{let n=await Ke(await rn(t.config));await Zb(["generate","-c",n.microContractsConfig]),console.log("Contracts generated via micro-contracts")},contractsCheck:async(t,e)=>{let n=await Ke(await rn(t.config));await Zb(["lint","-c",n.microContractsConfig])},preview:async(t,e)=>{try{await Qb({configPath:await rn(t.config),port:t.port!=null?Number(t.port):void 0,host:t.host,screen:t.screen})}catch(n){console.error(n instanceof Error?n.message:n),process.exit(1)}}};var KT={version:"0.5.5"};Id(r_,KT.version).parseAsync(process.argv).catch(t=>{console.error(t instanceof Error?t.message:t),process.exit(1)});
1087
+ `),"utf-8"),console.log(`Bridge registry \u2192 ${e.generated.bridge} (${n.views.length} view(s))`)}var r_={compile:async(t,e)=>{let{screens:n,partials:r}=await pd(await rn(t.config));console.log(`Compiled ${n.size} screen(s) and ${r.length} partial(s) to View IR (in-memory)`)},renderReact:async(t,e)=>{let n=await rn(t.config),{screens:r,partials:i}=await pd(n);await e_(n,r,i)},renderBridge:async(t,e)=>{await t_(await rn(t.config))},build:async(t,e)=>{let n=await rn(t.config),r=await Ke(n),i=await Et(r.bindings),{screens:o,partials:s}=await pd(n);console.log(`Compiled ${o.size} screen(s) and ${s.length} partial(s) to View IR (in-memory)`);let{tokensPath:a,themePath:l}=on(r),{tokenIR:c,themeIR:d}=await xr(a,l);await Vn(r,n);let{allowlistExtra:p}=await dd(r),f=[...o.values(),...s];await ha(f,p),ji(f,d),await Ub(n,r),await e_(n,o,s),await t_(n),await zb(n,r,i,{theme:d,tokens:c},{screens:o,partials:s}),await Gb(n,r,i,{theme:d,tokens:c},{screens:o,partials:s}),await Kb(n,r,i)},contractsGenerate:async(t,e)=>{let n=await Ke(await rn(t.config));await Zb(["generate","-c",n.microContractsConfig]),console.log("Contracts generated via micro-contracts")},contractsCheck:async(t,e)=>{let n=await Ke(await rn(t.config));await Zb(["lint","-c",n.microContractsConfig])},preview:async(t,e)=>{try{await Qb({configPath:await rn(t.config),port:t.port!=null?Number(t.port):void 0,host:t.host,screen:t.screen})}catch(n){console.error(n instanceof Error?n.message:n),process.exit(1)}}};var KT={version:"0.5.6"};Id(r_,KT.version).parseAsync(process.argv).catch(t=>{console.error(t instanceof Error?t.message:t),process.exit(1)});
1088
1088
  //# sourceMappingURL=view-contracts.bundle.mjs.map