@crossdelta/platform-sdk 0.21.17 → 0.21.19
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/bin/cli.mjs +2 -2
- package/bin/templates/workspace/biome.json.hbs +13 -1
- package/dist/facade.js +1 -1
- package/dist/facade.mjs +1 -1
- package/package.json +1 -1
package/bin/cli.mjs
CHANGED
|
@@ -5,7 +5,7 @@ Hint: ${e.hint}`)),n&&process.exit(ia(e))}});var V=S(()=>{"use strict";Kt();wn()
|
|
|
5
5
|
`)}function aa(e){return e?Xe[e]("\u2587"):"\u2587"}function ca(e,t,r,n,o,s){let i=Math.round(e.value/t*r),a=e.barColor?Xe[e.barColor](n.repeat(i)):n.repeat(i),c=e.color??s;return`${Xe.bold(c?Xe[c](e.label.padEnd(12)):e.label.padEnd(12))} ${a} ${e.value.toLocaleString()}${o?` ${o}`:""}`}var Sn=S(()=>{"use strict"});import{existsSync as Qt,unlinkSync as la,writeFileSync as pa}from"fs";import{join as Xt}from"path";import Zt from"chokidar";var er,Qe,ma,bn,tr,da,En,rr=S(()=>{"use strict";v();f();er=".pf-generating",Qe=e=>Xt(e,er),ma=e=>Qt(Qe(e)),bn=e=>{pa(Qe(e),"","utf-8")},tr=e=>{let t=Qe(e);Qt(t)&&la(t)},da=e=>{let r=F(e)?.pf?.paths;return r?Object.values(r).filter(n=>typeof n=="object"&&n!==null&&n.watch===!0&&typeof n.path=="string"):[{path:"services"},{path:"apps"}]},En=(e,t)=>{tr(e);let r=da(e),n=Qe(e),s=ae(async()=>{ma(e)||await t()},300),i=[];i.push(Zt.watch(n,{ignoreInitial:!0}).on("unlink",()=>t()));for(let a of r){let c=Xt(e,a.path);if(!Qt(c))continue;let l=a.ignorePatterns?.map(p=>Xt(c,p));i.push(Zt.watch(c,{ignoreInitial:!0,depth:0,ignored:l,usePolling:!0,interval:1e3}).on("addDir",p=>p!==c&&s()).on("unlinkDir",p=>p!==c&&s())),i.push(Zt.watch(`${c}/*/package.json`,{ignoreInitial:!0,ignored:l}).on("add",s).on("change",s))}return async()=>{await Promise.all(i.map(a=>a.close()))}}});import Tn from"chalk";import{Command as ga}from"commander";import{Listr as $n}from"listr2";var J,ua,An,In=S(()=>{"use strict";V();rr();f();J=e=>{let t=new ga(e.name).description(e.description).showHelpAfterError();e.arguments?.forEach(([o,s])=>{t.argument(o,s)}),e.options?.forEach(([o,s])=>{t.option(o,s)}),e.exampleUsage&&t.addHelpText("after",()=>`${Tn.cyan.bold(`
|
|
6
6
|
Example:`)}
|
|
7
7
|
${Tn.bold(e.exampleUsage)}
|
|
8
|
-
`),e.additionalInfo&&t.addHelpText("after",()=>(typeof e.additionalInfo=="function"?e.additionalInfo():e.additionalInfo)??"");let r=async o=>{e.prompts?.length&&await new $n(An(e.prompts,o),{rendererOptions:{lazy:!0,showErrorMessage:!1}}).run(o),await new $n(An(e.actions,o),{rendererOptions:{lazy:!1,showErrorMessage:!1}}).run(o),await e.onComplete?.(o)},n=()=>{try{let o=g();return bn(o),o}catch{return null}};return t.action(async(...o)=>{let s=null;try{let i=o.at(-1),a=i.args,c=i.opts(),l=ua(e.arguments??[],a);if(e.shouldSkipWorkflow?.(l,c)){await e.onSkipWorkflow?.(l,c);return}let p=await e.buildContext(l,c);s=n(),await r(p)}catch(i){$(i,{exit:!1})}finally{s&&tr(s)}}),t},ua=(e,t)=>{let r=e.map(([n],o)=>[n.replace(/[<>[\]]/g,""),t[o]]);return Object.fromEntries(r)},An=(e,t)=>e.map(r=>typeof r=="function"?r(t):r)});var ae,Rn=S(()=>{"use strict";ae=(e,t)=>{let r=null;return(...n)=>(r&&clearTimeout(r),new Promise(o=>{r=setTimeout(async()=>{r=null,await e(...n),o()},t)}))}});var Nn=S(()=>{"use strict"});import{execaSync as fa}from"execa";function Ee(e){try{return fa(e,["--version"]),!0}catch{return!1}}var nr=S(()=>{"use strict"});var Fn=S(()=>{"use strict";nr()});import{readdirSync as ha}from"fs";import{dirname as On,isAbsolute as ya,join as va,normalize as Ca,resolve as Mn,sep as ka}from"path";import{fileURLToPath as xa}from"url";import{packageUpSync as wa}from"package-up";import{rimraf as Pa}from"rimraf";function jn(){let e=wa({cwd:On(Sa())});if(!e)throw new Error("Could not find package.json");return On(e)}var Sa,O,Dn,et,_n,or=S(()=>{"use strict";V();f();Sa=()=>typeof import.meta?.url=="string"?xa(import.meta.url):process.cwd(),O=e=>{let t=sr()?g():process.cwd();return va(t,e)},Dn=(e,t)=>{if(!e
|
|
8
|
+
`),e.additionalInfo&&t.addHelpText("after",()=>(typeof e.additionalInfo=="function"?e.additionalInfo():e.additionalInfo)??"");let r=async o=>{e.prompts?.length&&await new $n(An(e.prompts,o),{rendererOptions:{lazy:!0,showErrorMessage:!1}}).run(o),await new $n(An(e.actions,o),{rendererOptions:{lazy:!1,showErrorMessage:!1}}).run(o),await e.onComplete?.(o)},n=()=>{try{let o=g();return bn(o),o}catch{return null}};return t.action(async(...o)=>{let s=null;try{let i=o.at(-1),a=i.args,c=i.opts(),l=ua(e.arguments??[],a);if(e.shouldSkipWorkflow?.(l,c)){await e.onSkipWorkflow?.(l,c);return}let p=await e.buildContext(l,c);s=n(),await r(p)}catch(i){$(i,{exit:!1})}finally{s&&tr(s)}}),t},ua=(e,t)=>{let r=e.map(([n],o)=>[n.replace(/[<>[\]]/g,""),t[o]]);return Object.fromEntries(r)},An=(e,t)=>e.map(r=>typeof r=="function"?r(t):r)});var ae,Rn=S(()=>{"use strict";ae=(e,t)=>{let r=null;return(...n)=>(r&&clearTimeout(r),new Promise(o=>{r=setTimeout(async()=>{r=null,await e(...n),o()},t)}))}});var Nn=S(()=>{"use strict"});import{execaSync as fa}from"execa";function Ee(e){try{return fa(e,["--version"]),!0}catch{return!1}}var nr=S(()=>{"use strict"});var Fn=S(()=>{"use strict";nr()});import{readdirSync as ha}from"fs";import{dirname as On,isAbsolute as ya,join as va,normalize as Ca,resolve as Mn,sep as ka}from"path";import{fileURLToPath as xa}from"url";import{packageUpSync as wa}from"package-up";import{rimraf as Pa}from"rimraf";function jn(){let e=wa({cwd:On(Sa())});if(!e)throw new Error("Could not find package.json");return On(e)}var Sa,O,Dn,et,_n,or=S(()=>{"use strict";V();f();Sa=()=>typeof import.meta?.url=="string"?xa(import.meta.url):process.cwd(),O=e=>{let t=sr()?g():process.cwd();return va(t,e)},Dn=(e,t)=>{if(!e?.trim())throw new z("Path cannot be empty",e,{hint:"Provide a valid relative path"});if(ya(e))throw new z(`Absolute paths are not allowed: ${e}`,e,{hint:"Use a relative path within the target directory"});if(/^[a-zA-Z]:/.test(e))throw new z(`Windows drive paths are not allowed: ${e}`,e,{hint:"Use a relative path within the target directory"});if(e.replace(/\\/g,"/").split("/").some(a=>a===".."))throw new z(`Path traversal not allowed: ${e}`,e,{hint:"The path must stay within the target directory"});let o=Ca(e),s=Mn(t),i=Mn(t,o);if(!i.startsWith(s+ka)&&i!==s)throw new z(`Path escapes target directory: ${e}`,e,{hint:"The path must stay within the target directory"});return i},et=e=>{try{return ha(e).length===0}catch{return!0}};_n=e=>Pa(e)});import Te from"chalk";var Ln,ba,Ea,tt,d,Wn=S(()=>{"use strict";Ln={debug:0,info:1,warn:2,error:3,silent:4},ba=e=>e==="debug"||e==="info"||e==="warn"||e==="error"||e==="silent",Ea=()=>{let e=process.env.LOG_LEVEL;return ba(e)?e:process.env.DEBUG==="true"||process.env.VERBOSE==="true"?"debug":"info"},tt=e=>{let t=Ea();return Ln[e]>=Ln[t]},d={logs:[],breakLine:()=>(console.log(),d),success:(e,...t)=>(console.log(Te.green(`\u2714 ${e}`),...t),d),info:(e,...t)=>(tt("info")&&console.log(Te.cyan(`\u{1F6C8} ${e}`),...t),d),warn:(e,...t)=>(tt("warn")&&console.warn(Te.yellow(`\u26A0\uFE0E ${e}`),...t),d),error:(e,...t)=>(tt("error")&&console.error(Te.red(`\u2716 ${e}`),...t),d),debug:(e,...t)=>(tt("debug")&&console.log(Te.dim(`[debug] ${e}`),...t),d),log:(e,...t)=>(console.log(e,...t),d.logs.push({message:e,context:t.join()}),d),getStoredLogs:e=>e?d.logs.filter(t=>t.context?.includes(e)):d.logs,storeLog:(e,t)=>d.logs.push({message:e,context:t})}});var Hn=S(()=>{"use strict"});import Ta from"chalk";async function M(e,t){let r=Date.now(),n=e.title,o=()=>Math.floor((Date.now()-r)/1e3),s=setInterval(()=>{o()>1&&(e.title=`${n} (${o()}s)`)},1e3);try{return await t(o)}finally{clearInterval(s)}}async function rt(e,t,r){for(let n=0;n<t.length;n++){let o=t[n];e.output=Ta.dim(`[${n+1}/${t.length}] ${o.title}`),await o.fn(r??{},e)}}var Gn=S(()=>{"use strict"});var v=S(()=>{"use strict";Sn();In();Rn();Nn();Fn();or();Wn();Hn();nr();Gn()});var Vn={};ra(Vn,{discoverAvailableServices:()=>at,findWorkspaceRoot:()=>g,getContractsConfig:()=>x,getGeneratorConfig:()=>ce,getPackageJsonField:()=>Ha,getPfConfig:()=>Ie,getPkgJson:()=>cr,getRootPackageScope:()=>st,getWorkspacePackageJson:()=>F,getWorkspacePathsConfig:()=>E,isInWorkspace:()=>sr,pkgJson:()=>R,readPackageConfig:()=>Re,updatePackageJsonField:()=>it});import{existsSync as Ae,readdirSync as $a,readFileSync as Bn,writeFileSync as Aa}from"fs";import{join as I,resolve as Ia}from"path";var ar,Ra,Na,Fa,$e,Oa,ot,nt,Ma,Da,Un,ja,_a,zn,sr,g,F,E,Ie,x,st,La,Wa,Ha,it,Re,ir,cr,R,ce,at,f=S(()=>{"use strict";Ze();v();ar=e=>JSON.parse(Bn(e,"utf-8")),Ra=ar,Na=(e,t,r)=>Aa(e,`${JSON.stringify(t,null,2)}
|
|
9
9
|
`,"utf-8"),Fa=["@crossdelta/cloudevents"],$e={services:"services",apps:"apps",packages:"packages",contracts:"packages/contracts"},Oa={docs:{base:["service.md"],frameworks:{}},serviceTypes:{hono:{commandType:"hono-micro",entryPoint:"src/index.ts",skipFiles:[]},nest:{commandType:"nest-micro",entryPoint:"src/main.ts",skipFiles:[]}}},ot=e=>{if(!Ae(e))return null;try{return JSON.parse(Bn(e,"utf-8"))}catch{return null}},nt=(e,t)=>typeof e=="string"?e:typeof e=="object"&&e!==null&&"path"in e?e.path:t,Ma=e=>e.split("/").pop()||"workspace",Da=e=>{let t=e.slice(0,e.lastIndexOf("/"));return t===e?null:t},Un=e=>e.split("."),ja=(e,t)=>{if(!e.workspaces)return!1;if(e.pf||Ae(I(t,"turbo.json")))return!0;let r=Pn.some(o=>Ae(I(t,o))),n=Ae(I(t,"infra"));return r&&n},_a=e=>{let t=ot(I(e,"package.json"));return t?ja(t,e):!1},zn=e=>{let t=e;for(;t;){if(_a(t))return t;t=Da(t)}return null},sr=()=>zn(process.cwd())!==null,g=()=>{let e=zn(process.cwd());if(!e)throw new Error(`
|
|
10
10
|
\x1B[31m\u2716\x1B[0m Not in a workspace directory
|
|
11
11
|
|
|
@@ -519,7 +519,7 @@ export default handleEvent(${n}, async (data: ${o}) => {
|
|
|
519
519
|
console.log('\u{1F4E6} [${e}] Event received:', data)
|
|
520
520
|
// TODO: Inject and call service
|
|
521
521
|
})
|
|
522
|
-
`},rd=(e,t,r)=>!t.hasEvents||t.events.length===0?[]:he(r,"stub").delegateFromHandler?t.events.map(o=>{let s=Be(o),i=he(r,s);return{kind:"file:write",path:Vr(e,i.filePath),content:ed(o,t.workspaceScope)}}):[],nd=(e,t,r)=>!t.hasEvents||t.events.length===0?[]:t.events.map(n=>{let{kebab:o}=Jr(n),s=zr(r,o);return{kind:"file:write",path:Vr(e,s.filePath),content:td(n,t.workspaceScope,r)}}),od=e=>e==="hono"?"hono":e==="nest"?"nestjs":"hono",Gs=(e,t,r,n)=>{let o=od(n.framework),s=Zm(e,t),i=rd(e,r,o),a=nd(e,r,o),c=Xm(r.serviceName,r.port,n),l=Qm(r.envVarName,r.port);return[...s,...i,...a,c,l]};import{existsSync as sd,readdirSync as id,readFileSync as ad}from"fs";import{join as Bs}from"path";var Us=4001,cd=e=>{let t=e.match(/ports\(\)\.(?:http|https|grpc|primary)\((\d+)\)/);if(t)return Number.parseInt(t[1],10);let r=e.match(/containerPort:\s*(\d+)/);return r?Number.parseInt(r[1],10):null},zs=e=>{try{let t=Bs(e,"infra","services");return sd(t)?id(t).filter(n=>n.endsWith(".ts")).reduce((n,o)=>{let s=ad(Bs(t,o),"utf-8"),i=cd(s);return i!==null&&n.add(i),n},new Set):new Set}catch(t){return console.warn("Failed to scan ports:",t),new Set}},Kr=(e,t)=>e.has(t)?Kr(e,t+1):t;var pd=e=>{if(!e||e.trim().length===0)throw new Error("Service name cannot be empty");if(!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e))throw new Error(`Service name '${e}' must be kebab-case (lowercase, alphanumeric, hyphens only)`)},md=(e,t,r)=>{if(t){if(t.startsWith("/"))return t;if(t.startsWith("."))return It(r,t);if(t.includes("/"))return It(r,t)}let n=E(r);return It(r,n.services,e)},dd=e=>[...new Set(e.map(t=>ld(t).streamName))],gd=(e,t,r,n)=>{let s=x(t).packageName.split("/")[0],i=e.events??[],a=i.length>0||e.hasEvents||!1,c=i.length>0?dd(i):e.streams??[];return{serviceName:e.name,packageName:`${s}/${e.name}`,servicePath:r.replace(`${t}/`,""),port:n,envVarName:B(e.name),hasEvents:a,streams:c,events:i,workspaceScope:s,envVars:e.envVars}},ud=(e,t)=>e.files.filter(r=>!r.skip
|
|
522
|
+
`},rd=(e,t,r)=>!t.hasEvents||t.events.length===0?[]:he(r,"stub").delegateFromHandler?t.events.map(o=>{let s=Be(o),i=he(r,s);return{kind:"file:write",path:Vr(e,i.filePath),content:ed(o,t.workspaceScope)}}):[],nd=(e,t,r)=>!t.hasEvents||t.events.length===0?[]:t.events.map(n=>{let{kebab:o}=Jr(n),s=zr(r,o);return{kind:"file:write",path:Vr(e,s.filePath),content:td(n,t.workspaceScope,r)}}),od=e=>e==="hono"?"hono":e==="nest"?"nestjs":"hono",Gs=(e,t,r,n)=>{let o=od(n.framework),s=Zm(e,t),i=rd(e,r,o),a=nd(e,r,o),c=Xm(r.serviceName,r.port,n),l=Qm(r.envVarName,r.port);return[...s,...i,...a,c,l]};import{existsSync as sd,readdirSync as id,readFileSync as ad}from"fs";import{join as Bs}from"path";var Us=4001,cd=e=>{let t=e.match(/ports\(\)\.(?:http|https|grpc|primary)\((\d+)\)/);if(t)return Number.parseInt(t[1],10);let r=e.match(/containerPort:\s*(\d+)/);return r?Number.parseInt(r[1],10):null},zs=e=>{try{let t=Bs(e,"infra","services");return sd(t)?id(t).filter(n=>n.endsWith(".ts")).reduce((n,o)=>{let s=ad(Bs(t,o),"utf-8"),i=cd(s);return i!==null&&n.add(i),n},new Set):new Set}catch(t){return console.warn("Failed to scan ports:",t),new Set}},Kr=(e,t)=>e.has(t)?Kr(e,t+1):t;var pd=e=>{if(!e||e.trim().length===0)throw new Error("Service name cannot be empty");if(!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e))throw new Error(`Service name '${e}' must be kebab-case (lowercase, alphanumeric, hyphens only)`)},md=(e,t,r)=>{if(t){if(t.startsWith("/"))return t;if(t.startsWith("."))return It(r,t);if(t.includes("/"))return It(r,t)}let n=E(r);return It(r,n.services,e)},dd=e=>[...new Set(e.map(t=>ld(t).streamName))],gd=(e,t,r,n)=>{let s=x(t).packageName.split("/")[0],i=e.events??[],a=i.length>0||e.hasEvents||!1,c=i.length>0?dd(i):e.streams??[];return{serviceName:e.name,packageName:`${s}/${e.name}`,servicePath:r.replace(`${t}/`,""),port:n,envVarName:B(e.name),hasEvents:a,streams:c,events:i,workspaceScope:s,envVars:e.envVars}},ud=(e,t)=>e.files.filter(r=>!r.skip?.(t)).map(r=>({path:r.path,content:r.content(t)})),fd=(e,t,r)=>[...e.map(o=>({type:"file",path:It(r,o.path),description:`Service file: ${o.path}`})),{type:"config",path:`infra/services/${t}.ts`,description:"Infrastructure configuration"},{type:"env",path:".env.local",description:"Environment variables"}],hd=e=>[{command:`cd ${e} && bun dev`,description:"Start this service"},{command:"pf dev",description:"Start all services"}],Vs=e=>{pd(e.name);let t=e.workspaceRoot??g(),r=md(e.name,e.path,t),n=e.port??Kr(zs(t),Us),o=gd(e,t,r,n),s=Ws(e.type),i=ud(s,o),a=Gs(r,i,o,s),c=fd(i,e.name,r),l=hd(r);return Hr("service.generate",`Generated ${e.name} service (port ${n})`,{artifacts:c,changes:a,next:l,data:{serviceName:e.name,servicePath:r,port:n,vars:o}})},Js=e=>{let t=Vs(e);if(!t.ok||!t.data)throw new Error(t.summary);return{serviceName:t.data.serviceName,servicePath:t.data.servicePath,port:t.data.port,effects:t.changes,vars:t.data.vars}};f();f();f();import A from"chalk";import{execa as vd}from"execa";import{createJiti as Cd}from"jiti";var qr=async e=>{let{stdout:t}=await vd("sh",["-c",e]);return t.trim()},kd="pf-local-nats",xd="2.10-alpine",wd=4222,Pd=8222,Sd=e=>({clientPort:e.clientPort??wd,monitoringPort:e.monitoringPort??Pd,containerName:e.containerName??kd,version:e.version??xd}),bd=e=>["run","--rm","--detach",`--name=${e.containerName}`,`-p=${e.clientPort}:4222`,`-p=${e.monitoringPort}:8222`,`nats:${e.version}`,"--jetstream","--store_dir=/data","--http_port=8222"],Ed=e=>({containerName:e.containerName,clientUrl:`nats://localhost:${e.clientPort}`,monitoringUrl:`http://localhost:${e.monitoringPort}`}),Td=async()=>{try{return await qr("docker info"),!0}catch{return!1}},$d=async e=>{try{return(await qr(`docker ps -q -f name=${e}`)).length>0}catch{return!1}};var Ad=async e=>{let t=bd(e);try{return await qr(`docker ${t.join(" ")}`),{success:!0,value:Ed(e)}}catch{return{success:!1}}},Id=e=>{console.log(A.green("\u2713 NATS started")),console.log(A.dim(` Client: ${e.clientUrl}`)),console.log(A.dim(` Monitoring: ${e.monitoringUrl}`)),console.log(A.dim(" Streams: ephemeral, auto-created by services")),console.log("")},Ks=async(e={})=>{let t=Sd(e);if(!await Td())return console.log(A.yellow("\u26A0\uFE0F Docker not available - skipping NATS (services may fail)")),!1;if(await $d(t.containerName))return console.log(A.dim("\u2713 NATS already running")),!0;console.log(A.cyan("\u{1F680} Starting development infrastructure...")),console.log(A.dim(" NATS with JetStream (ephemeral)"));let r=await Ad(t);return r.success?(Id(r.value),!0):(console.error(A.red("\u2717 Failed to start NATS")),!1)},Rd=e=>e.map(t=>({stream:t,subjects:[`${t.toLowerCase()}.*`],config:{storage:"memory",retention:"limits",maxAge:36e5}})),Nd=e=>Array.from(new Set(Object.values(e).filter(t=>t!==null&&typeof t=="object"&&"channel"in t).map(t=>t.channel?.stream).filter(t=>!!t))),Fd=e=>{if(!(e instanceof Error))return!0;let t=e.message.toLowerCase();return!t.includes("insufficient storage")&&!t.includes("connection refused")},Od=e=>{if(!(e instanceof Error))return"Unknown error";let t=e.message.toLowerCase();return t.includes("insufficient storage")?["NATS has insufficient storage to create streams."," Your disk is likely full. Free space and restart:",""," docker system prune -af"," pf dev"].join(`
|
|
523
523
|
`):t.includes("connection refused")?"Cannot connect to NATS \u2014 is the container running?":e.message},Yr=async e=>{try{let{ensureJetStreams:t}=await import("@crossdelta/cloudevents"),{indexPath:r}=x(e),o=await Cd(e,{moduleCache:!1}).import(r,{default:!0}),s=Nd(o);if(s.length===0){console.log(A.dim(" No streams found in contracts"));return}let i=Rd(s);await t({streams:i}),console.log(A.dim(` Created ${s.length} ephemeral stream(s): ${s.join(", ")}`))}catch(t){if(!Fd(t))throw console.error(A.red(`
|
|
524
524
|
\u2717 ${Od(t)}
|
|
525
525
|
`)),t;console.log(A.yellow(` \u26A0\uFE0F Stream creation failed: ${t instanceof Error?t.message:"Unknown error"}`)),console.log(A.dim(" Streams will be created when services connect"))}};var qs=`// env: string literals \u2192 written to .env.local by generate-env (use for values meaningful locally)
|
package/dist/facade.js
CHANGED
|
@@ -2101,7 +2101,7 @@ var buildTemplateVars = (inputs, workspaceRoot, servicePath, port) => {
|
|
|
2101
2101
|
};
|
|
2102
2102
|
};
|
|
2103
2103
|
var generateFiles = (template, vars) => {
|
|
2104
|
-
return template.files.filter((f) => !f.skip
|
|
2104
|
+
return template.files.filter((f) => !f.skip?.(vars)).map((f) => ({
|
|
2105
2105
|
path: f.path,
|
|
2106
2106
|
content: f.content(vars)
|
|
2107
2107
|
}));
|
package/dist/facade.mjs
CHANGED
|
@@ -2030,7 +2030,7 @@ var buildTemplateVars = (inputs, workspaceRoot, servicePath, port) => {
|
|
|
2030
2030
|
};
|
|
2031
2031
|
};
|
|
2032
2032
|
var generateFiles = (template, vars) => {
|
|
2033
|
-
return template.files.filter((f) => !f.skip
|
|
2033
|
+
return template.files.filter((f) => !f.skip?.(vars)).map((f) => ({
|
|
2034
2034
|
path: f.path,
|
|
2035
2035
|
content: f.content(vars)
|
|
2036
2036
|
}));
|