@fnet/cli 0.64.3 → 0.64.4
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/builder/lib-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),n=require("fs"),s=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),f=require("@flownet/lib-is-redis-online"),g=require("nanoid"),y=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),v=require("lodash.merge"),b=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),j=require("ajv/dist/2020"),D=require("ajv/dist/standalone"),k=require("@fnet/shell"),x=require("semver"),S=require("@fnet/up-list-files"),A=require("node:os"),P=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),E=require("lodash.clonedeep"),T=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),R=require("@flownet/lib-to-docker"),M=require("form-data"),F=require("@fnet/to-rust"),q=require("@flownet/lib-parse-node-url"),L=require("@flownet/lib-pick-npm-versions"),N=require("chalk");const U=u,B=f;const{Api:z}=y,J=h.default,W=w;const K=v;var G=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:n,options:s,extraCheck:r,explicit:i}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const m=t[o]?.options;m&&(d=K(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||i||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(f=r()&&f),t[c]=f,f&&n.forEach((e=>a.push({package:e[0],version:e[1]})))};const H=G;const X=G;const Y=G;const Z=G;const Q=G;const V=G;const ee=G;const te=G;const ae=G;const oe=G;const ne=G;const se=G;const re=G;const ie=v,ce=l,pe=d,le=b,de=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;H({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:o,packageDevDependencies:a})},me=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;X({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:a})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:a})},fe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Z({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:a})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},we=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;te({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},ve=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ae({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},be=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;oe({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:a})},_e=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ne({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})},je=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,n={};!0===o.app?.enabled&&(n.targets=n.targets||[],n.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),se({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:n},features:o,packageDevDependencies:a})},De=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,n=o.css&&!1!==o.css.enabled;let s=[];if(n){s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}}))}re({feature:{name:"css",packages:s},features:o,packageDevDependencies:a})};function ke({dir:e,name:t="index"}){let a=pe.resolve(e,`./${t}.tsx`);if(ce.existsSync(a)||(a=pe.resolve(e,`./${t}.ts`)),ce.existsSync(a)||(a=pe.resolve(e,`./${t}.jsx`)),ce.existsSync(a)||(a=pe.resolve(e,`./${t}.js`)),!ce.existsSync(a))return{};const o=a,n=pe.extname(a);return{file:o,ext:n,ts:".ts"===n||".tsx"===n,name:t}}const xe=_;const Se=l,Ae=d,Pe=p;const Ie=m,Ee=l,Te=d,$e=b,Oe=_;const Ce=l,Re=d,Me=p;const Fe=l,qe=d,Le=m,Ne=b;const Ue=l,Be=d,ze=m,Je=j,We=D;const Ke=l,Ge=d,He=m;const Xe=l,Ye=d,Ze=m;const Qe=m,Ve=l,et=d,tt=i;const at=r,ot=a;const nt=r;const st=r;const rt=r;const it=k,ct=t;const pt=l,lt=d,dt=x,mt=k,ut=t;const ft=l,gt=d,yt=x,ht=r,wt=t,vt=S,bt=c,_t=s;const jt=l,Dt=d,kt=A,xt=m,St=P,At=t;const Pt=n,It=a,Et=t;const Tt=t,$t=I,Ot=E,Ct=x;const Rt=t,Mt=T,Ft=E,qt=x;const Lt=t,Nt=$,Ut=E,Bt=x;const zt=t,Jt=O,Wt=E,Kt=x;const Gt=t,Ht=C,Xt=E,Yt=x;const Zt=t,Qt=R,Vt=E,ea=x;const ta=l,aa=d,oa=x,na=k,sa=t,ra=h.default;const ia=x,ca=t,pa=h.default;const la=x,da=t,ma=h.default,ua=n,fa=k,ga=M;const ya=x,ha=t,wa=h.default,va=n,ba=k,_a=M;const ja=t,Da=F,ka=E,xa=x;const Sa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:n})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let r="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await ct({name:i,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:p}=c.data;r+=` --projectGroupId=${p.projectGroupId}`,r+=` --projectPath='${s}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${p.gitlabHost}'`,r+=` --gitlabToken='${p.gitlabToken}'`,r+=` --gitlabUsername='${p.gitlabUsername}'`,r+=` --gitlabUserEmail='${p.gitlabUserEmail}'`,!0!==o.dryRun&&(await it({cmd:r}),a.isDirty=!0)},Aa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n,yamlTarget:s})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=lt.resolve(r,"package.json"),c=pt.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=dt.inc(o.version,"patch"),delete p.scripts,delete p.devDependencies,pt.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await ut({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let m="fnet-files-to-gcs";m+=` --projectId='${d.env.GCS_PROJECT_ID}'`,m+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,m+=` --keyFilename='${lt.resolve(lt.dirname(l),d.env.GCS_UPLOADER_KEY_FILE)}'`,m+=` --dir='${r}'`,m+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",m+=` --destDir='${p.name}/${p.version}'`,m+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(m+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(m+=" --dryRun"),await mt({cmd:m}),pt.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.version=p.version,s.set("version",p.version),await n({target:o,packageJSON:p}))},Pa=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:s})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=gt.resolve(r,"package.json"),c=ft.readFileSync(i),p=JSON.parse(c);p.name=n.params.name,p.version=yt.inc(n.version,"patch");const l=n.params.bin?.name||n.params.bin;!1!==n.params.bin?.enabled&&l&&"string"==typeof l&&(p.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete p.scripts,delete p.devDependencies,p.scripts={serve:"npx serve ."},ft.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=n.config||"npm";let m=(await wt({name:d,dir:a.projectDir,tags:a.tags,optional:!0}))?.data;if(!m){const e=vt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await bt({schema:e[0],tags:a.tags}),o=a.project.projectDir,n=gt.resolve(o,".fnet");ft.existsSync(n)||ft.mkdirSync(n),ft.writeFileSync(gt.resolve(n,`${d}.fnet`),_t.stringify(t)),m=t}if(ft.writeFileSync(gt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${m.env.NPM_TOKEN}`),!0!==n.dryRun){if(0!==ht.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");ft.writeFileSync(i,c),o.isDirty=!0,n.version=p.version,s.set("version",p.version)}},Ia=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n,buildId:s,packageDependencies:r,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,p=a.templateDir,l="workflow"===e.type?"WF":"LIB";let d;if("simple"===n.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:n.deploy.id||St.util.generateId(),label:`${l}/${e.id?e.id:kt.hostname()}/${e.name}/${n.deploy.name||n.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:jt.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:St.util.generateId(),...n.params?.inject,payload:"json"===n.params?.inject?.payloadType?`'${JSON.stringify(n.params?.inject?.payload)}'`:n.params?.inject?.payload},debug:{id:St.util.generateId()}}};else if("cronjob"===n.deploy.template){let t=n.params?.schedules?cloneDeep(n.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:n.deploy.id||St.util.generateId(),label:`${l}/${e.id?e.id:kt.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:jt.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:St.util.generateId(),schedules:t},debug:{id:St.util.generateId()}}}}else{if("http"!==n.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:n.deploy.id||St.util.generateId(),label:`${l}/${e.id?e.id:kt.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:jt.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:St.util.generateId(),method:n.params.method||"get",url:n.params.url},httpout:{id:St.util.generateId()},debug:{id:St.util.generateId()}}}}let m=xt.compile(jt.readFileSync(Dt.resolve(p,`deploy/node-red/${n.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(jt.writeFileSync(Dt.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===n.dryRun)return;o.isDirty=!0;const u=(await At({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,f=n.deploy.url||u.env.RED_URL,g={};if(!1!==n.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),n.deploy.id)!0===n.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${n.deploy.id}`,headers:g}),delete n.actions.delete,delete n.deploy.id,n.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${n.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});n.deploy.id=e.data.id}},Ea=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:n,deploymentProject:s,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const i=(await Et({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,p,l,d=r.deploy.name.split("/");if(1===d.length)p=i.env.ATOM_LIBRARIES_ID,l=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,l=d[1]}}if(!0===r.dryRun)return;if(s.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:p,doc:{name:l,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Pt.readFileSync(It.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Pt.readFileSync(It.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Pt.readFileSync(It.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=l,c.doc.dependencies=n,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Ta=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as ios-app package."});const i=t?.config?await Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Ct.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ot(t.params);p.dependencies=Ot(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await $t(l)}},$a=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await Rt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=qt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ft(t.params);p.dependencies=Ft(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Mt(l)}},Oa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Bt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ut(t.params);p.dependencies=Ut(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Nt(l)}},Ca=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Kt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Wt(t.params);p.dependencies=Wt(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Jt(l)}},Ra=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Yt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Xt(t.params);p.dependencies=Xt(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Ht(l)}},Ma=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as docker package."});const i=t?.config?await Zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=ea.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Vt(t.params);p.dependencies=Vt(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Qt(l)}},Fa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,r=aa.resolve(s,"package.json"),i=ta.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=oa.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,ta.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await sa({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!l.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!l.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!l.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${l.env.ATOM_API_URL}/v1/auth/token`,m=l.env.ATOM_API_USERNAME,u=l.env.ATOM_API_PASSWORD;let f=await ra({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const g=f.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${l.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${l.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${aa.resolve(aa.dirname(p),l.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${s}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",l.env.DOMAIN&&(y+=` --domain='${l.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await na({cmd:y}),ta.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.version=c.version,n.set("version",c.version);const h=`${l.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(f=await ra({method:"POST",url:h,data:{name:c.name,version:c.version,version_domain:l.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),f.data?.error)throw new Error("Failed to publish fnet package.")},qa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet form."});const{file:s,data:r}=await ca({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await pa({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=ia.inc(o.version,"patch");o.params.version=m,o.version=m,n.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(l=await pa({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet form.")},La=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet flow."});const{file:s,data:r}=await da({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await ma({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=la.inc(o.version,"patch");o.params.version=m,o.version=m,n.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(l=await ma({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet flow.");const f=l.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await fa({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ga;w.append("file",ua.createReadStream(h));const v=await ma.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},Na=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet node."});const{file:s,data:r}=await ha({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await wa({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=ya.inc(o.version,"patch");o.params.version=m,o.version=m,n.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(l=await wa({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet node.");const f=l.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ba({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new _a;w.append("file",va.createReadStream(h));const v=await wa.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Ua=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as Rust package."});const i=t?.config?await ja({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=xa.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=ka(t.params);p.dependencies=ka(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Da(l)}};const Ba=l,za=d,Ja=s,Wa=r,Ka=m,Ga=async()=>{if(!await B({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=U.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Ha}=g,Xa=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(z.set_api_url(e.data.url),t)return z.set_req_token(t),void a(t);J({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:W.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{z.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{z.set_req_token(),o(e)}))}))}},Ya=async e=>{const{atom:t,context:a,packageDevDependencies:o}=e;t.doc.features=t.doc.features||{};const n=t.doc.features;n.project=n.project||{},n.project.format=n.project.format||n.project_format||"esm",n.project_format=n.project.format,n.dts_enabled=!0===n.dts||void 0!==n.dts&&!1!==n.dts,n.hasOwnProperty("all_parsed_imports")||(n.all_parsed_imports=!0);const s=pe.resolve(a.project.projectDir),r=ke({dir:pe.resolve(s,"./app")});if(r.file){let e=await le({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.app_uses_jsx=t,n.app_has_entry=!0,e=await le({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.app_entry_uses_jsx=t,n.app_entry_is_ts=r.ts,n.app_entry_ext=r.ext}const i=ke({dir:pe.resolve(s,"./cli")});if(i.file){let e=await le({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.cli_uses_jsx=t,n.cli_has_entry=!0,e=await le({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.cli_entry_uses_jsx=t,n.cli_entry_is_ts=i.ts,n.cli_entry_ext=i.ext}if("workflow.lib"===t.type){const e=ke({dir:pe.resolve(s,"./src")});if(e.file){let t=await le({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.src_uses_jsx=a,n.src_has_entry=!0,t=await le({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.src_entry_uses_jsx=a,n.src_entry_is_ts=e.ts,n.src_entry_ext=e.ext}}const c=Reflect.has(n,"app_entry_uses_jsx")?!0===n.app_entry_uses_jsx:!0===n.src_entry_uses_jsx,p=Reflect.has(n,"cli_entry_uses_jsx")?!0===n.cli_entry_uses_jsx:!0===n.src_entry_uses_jsx;n.form_enabled=!0===t.doc.form||!0===t.doc.form?.enabled||!0===n.form||!0===n.form?.enabled,n.multiple_enabled=n.multiple_enabled||!0===n.multiple||!0===n.multiple?.enabled,!1===n.app?n.app={enabled:!1}:!0===n.app?n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:c}:n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:c,...n.app||{}},n.app.enabled=!0===n.app.enabled&&(!0===t.doc.features.form_enabled||!0===n.app.extend||!0===n.app.enabled),n.app.format=n.app.format||"esm",n.app.folder=n.app.folder||n.app.format||"default",!1===n.cli?n.cli={enabled:!1}:!0===n.cli?n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:p}:n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:p,...n.cli||{}},n.cli.enabled=!0===n.cli.enabled&&(!1===t.doc.features.form_enabled||!0===n.cli.extend||!0===n.cli.enabled),n.cli.format=n.cli.format||"esm",n.cli.folder=n.cli.folder||n.cli.folder||"esm",n.cli.node_options=n.cli.node?.options||n.cli.node_options||"",n.json=n.cli.enabled||n.json;const l={cjs:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==n.cjs,copy:!1},esm:{format:"esm",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==n.esm,copy:!0},iife:{format:"iife",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==n.iife,terser:!0,copy:!1}};!0===n.webos&&(l.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===n.electron&&(l.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===n.nextjs&&(l.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===n.ios&&(l.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===n.macos&&(l.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===n.app.enabled&&(n.app.dir=`./dist/app/${n.app.folder}`,l.app={format:n.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:n.app.dir,terser:!0,output_exports:!1===n.app.export?"none":"auto"}),!0===n.cli.enabled&&(n.cli.dir=`./dist/cli/${n.cli.folder}`,l.cli={format:n.cli.format,context:"global",babel:!0===n.src_uses_jsx||!0===n.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:n.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===n.cli.export?"none":"auto"});const d={server:".",startPath:`${pe.normalize(n.app.dir||".")}`,files:[pe.normalize("./dist/**/*")],cors:!0,open:!1};n.babel_options=ie({targets:{browsers:"last 9 versions, not dead",node:"18"}},n.babel_options||n.babel?.options),n.browsersync_options=ie(d,n.browsersync_options||n.browsersync?.options||{}),n.replace_options=ie({},n.replace_options||n.replace?.options||{}),Reflect.has(n.browsersync_options,"proxy")&&delete n.browsersync_options.server,n.rollup=n.rollup||{},n.rollup_output=ie(l,n.rollup_output||n.rollup?.output||{}),n.preact_enabled=!0===n.preact||n.preact&&!1!==n.preact?.enabled;let m=Object.keys(l);for(const e of m){const t=l[e];t&&(!1!==n.rollup[e]?(t.babel_options=t.babel_options||n.babel_options,t.browsersync_options=ie(n.browsersync_options,t.browsersync_options),t.replace_options=ie(n.replace_options,t.replace_options),n.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),n.form_enabled&&(t.babel=!0)):delete n.rollup_output[e])}m=Object.keys(n.rollup_output),n.babel_enabled=m.some((e=>!0===n.rollup_output[e].babel)),n.browser_enabled=m.some((e=>!0===n.rollup_output[e].babel)),n.browsersync_enabled=!1!==n.browsersync&&m.some((e=>!0===n.rollup_output[e].browsersync)),n.browsersync_enabled=n.browsersync_enabled&&n.app.enabled,n.dependency_auto_enabled=!1!==n.dependency_auto&&!1!==n.dependency_auto?.enabled,n.npm_install_flags=n.npm_install_flags||"",n.react_version=n.react_version||n.react?.version||18,De(e),je(e),_e(e),be(e),ve(e),he(e),we(e),ye(e),ge(e),fe(e),ue(e),de(e),me(e)},Za=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await xe({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^26"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15"}),a.push({package:"@rollup/plugin-replace",version:"^5"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"})},Qa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const n={atom:e,packageDependencies:o,ts:Date.now()},s=a.templateDir,r=Ae.resolve(a.projectDir,"src/app");Se.existsSync(r)||Se.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await Pe({pattern:i,dir:Ae.resolve(s,"src/app"),outDir:r,context:n})},Va=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:n})=>{await n({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const s=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));s&&!r?a.push({package:"react-dom",version:s.version}):s&&r&&(r.version=s.version),s&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push({file:Te.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Te.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of i){const n=t.file;if(!Ee.existsSync(n))throw new Error(`App file not found: ${n}`);const s=await $e({file:n,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const n=(await Oe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${n}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},p=t.templateCommonDir,l=Ie.compile(Ee.readFileSync(Te.resolve(p,"package.json.njk"),"utf8"),Ie.configure(p)).render(c),d=t.projectDir,m=Te.resolve(d,"package.json");Ee.writeFileSync(m,l,"utf8");const u=Te.resolve(t.project.projectDir,"fnet");if(Ee.existsSync(u)){const e=Te.resolve(t.projectDir,"fnet");Ee.existsSync(e)||Ee.mkdirSync(e);const a=Ee.readdirSync(u);for(const t of a){const a=Te.resolve(u,t);if(!Ee.lstatSync(a).isFile())continue;const o=Te.resolve(e,t);Ee.copyFileSync(a,o)}}},eo=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const n={atom:e,packageDependencies:o},s=a.templateDir,r=Re.resolve(a.projectDir,"src/cli");Ce.existsSync(r)||Ce.mkdirSync(r,{recursive:!0}),await Me({pattern:["index.js.njk"],dir:Re.resolve(s,"src/cli"),outDir:r,context:n})},to=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const n={atom:e,packageDependencies:o},s=qe.resolve(a.projectDir,"src","default/index.js");if(!Fe.existsSync(s))throw new Error(`Entry file not found: ${s}`);const r=(await Ne({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const p=a.templateCommonDir;let l=Le.compile(Fe.readFileSync(qe.resolve(p,"rollup.config.mjs.njk"),"utf8"),Le.configure(p)).render(n);const d=a.projectDir;let m=qe.resolve(d,"rollup.config.mjs");Fe.writeFileSync(m,l,"utf8")},ao=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let n={};if(n=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),n.properties&&(n.properties.fargs=a,n.properties.ftag=o)}const s={options:n,imports:[],atom:e},r=a.templateDir,i=ze.compile(Ue.readFileSync(Be.resolve(r,"src/default/to.args.js.njk"),"utf8"),o).render(s),c=a.projectDir,p=Be.resolve(c,"src/default/to.args.js");Ue.writeFileSync(p,i,"utf8");const l=new Je({allErrors:!0,useDefaults:!0,strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}}),d=l.compile(e.doc.input),m=We(l,d);Ue.writeFileSync(Be.resolve(c,"src/default/validate_input.js"),m,"utf8")},oo=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const n={atom:e,packageDependencies:o},s=a.templateCommonDir,r=He.compile(Ke.readFileSync(Ge.resolve(s,".gitignore.njk"),"utf8"),He.configure(s)).render(n),i=a.projectDir,c=Ge.resolve(i,".gitignore");Ke.writeFileSync(c,r,"utf8")},no=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const n={atom:e,packageDependencies:o},s=a.templateCommonDir,r=Ze.compile(Xe.readFileSync(Ye.resolve(s,"tsconfig.json.njk"),"utf8"),Ze.configure(s)).render(n),i=a.projectDir,c=Ye.resolve(i,"tsconfig.json");Xe.writeFileSync(c,r,"utf8")},so=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const n="readme.md",s=`Creating ${n}`;if(await a({message:s}),t.project?.readme){const e=t.projectDir,a={content:t.project.readme.doc.content},o=et.resolve(t.project.projectDir,"fnet/how-to.md");if(Ve.existsSync(o)){const e=Ve.readFileSync(o,"utf8");a.howto=e}const s=et.resolve(t.project.projectDir,"fnet/input.yaml");if(Ve.existsSync(s)){const e=await tt({file:s,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Qe.compile(Ve.readFileSync(et.resolve(r,`${n}.njk`),"utf8"),Qe.configure(r)).render(a),c=et.resolve(e,`${n}`);Ve.writeFileSync(c,i,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:s,...r}=a.doc,i={content:s},c=t.templateCommonDir,p=Qe.compile(Ve.readFileSync(et.resolve(c,`${n}.njk`),"utf8"),Qe.configure(c)).render(i),l=t.projectDir,d=et.resolve(l,`${n}`);Ve.writeFileSync(d,p,"utf8")}},ro=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=ot.join("src","**","*");if(0!==at.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},io=async({atom:e,setInProgress:t,context:a})=>{if(!e.doc.features.dts_enabled)return;const o=a.projectDir;await t({message:"Creating .d.ts"});if(0!==nt.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},co=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==st.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},po=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==rt.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},lo=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:n,setInProgress:s,deploymentProject:r,yamlTarget:i}=e;if(!0===n.enabled)if("lib"===n.type)await Ea({...e});else if("red"===n.type)await Ia({...e});else if("npm"===n.type)await Pa({...e});else if("gcs"===n.type)await Aa({...e});else if("gitlab"===n.type)await Sa({...e});else if("fnet-package"===n.type)await Fa({...e});else if("fnet-form"===n.type)await qa({...e});else if("fnet-node"===n.type)await Na({...e});else if("fnet-flow"===n.type)await La({...e});else{let e;if("nextjs"===n.type?e=Ra:"webos"===n.type?e=Ca:"electron"===n.type?e=Oa:"docker"===n.type?e=Ma:"ios"===n.type?e=Ta:"macos"===n.type?e=$a:"rust"===n.type&&(e=Ua),!e)return;await e({atom:t,target:n,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:mo}=y,uo=q,fo=t,go=b,yo=L,ho=N;var wo=class{#e;#t;#a;#o;#n;#s;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new Xa,this.#t=e,this.#s=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:mo,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Ga(),this.#c=this.#t.buildId||Ha(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await fo({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await Ya(this.#y),await Za(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await mo.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];Ba.existsSync(e)&&Ba.readdirSync(e).forEach((o=>{a.includes(o)||(t=Wa.rm("-rf",za.join(e,o)))}));let o=e;if(!Ba.existsSync(o)&&(t=Wa.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=za.join(e,"src"),!Ba.existsSync(o)&&(t=Wa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=za.join(e,"src","default"),!Ba.existsSync()&&(t=Wa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ka.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#n=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],n=await this.findAtomLibrary({url:o.name});o.atom=n;const s=n.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=uo({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await mo.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await mo.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await mo.first({where:{name:a[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=za.resolve(this.#t.projectSrcDir,"index.js"),a=await go({file:t,recursive:!0}),o=e.doc.dependencies,n=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of n){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await yo({name:e.package,count:1});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:e}){await this.setInProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom,o=this.#t.projectDir;if("local:"===a.protocol){const e=za.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=za.relative(za.join(this.#t.projectDir,"src","default"),e);if(!Ba.existsSync(e)){Ba.mkdirSync(za.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ba.writeFileSync(e,t,"utf8")}a.relativePath=t.split(za.sep).join("/"),this.#a.typesDir=`./types/${za.basename(o)}/src`}else{const e=za.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ba.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#n.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=Ka.compile(Ba.readFileSync(za.resolve(t,za.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,n=za.resolve(o,za.join("src","default","index.js"));Ba.writeFileSync(n,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,n={content:Ja.stringify(o)},s=this.#t.templateDir,r=Ka.compile(Ba.readFileSync(za.resolve(s,`${e}.njk`),"utf8"),this.#o).render(n),i=this.#t.projectDir,c=za.resolve(i,`${e}`);Ba.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await mo.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await mo.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),n=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const s=n.get(o[e]);await lo({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await mo.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await mo.update(o,{id:o.id})):o=await mo.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setInProgress({message:e}){console.log(ho.blue(e)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#n}),await this.createEngine(),await this.createProjectYaml(),await so(this.#y),await no(this.#y),await oo(this.#y),await ao(this.#y),await eo(this.#y),await Qa(this.#y),await to(this.#y),await Va(this.#y),await ro(this.#y),await io(this.#y),this.#f&&(await co(this.#y),await po(this.#y),this.#g&&await this.deploy())),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const vo=l,bo=d;var _o=function({baseDir:e=__dirname}){let t=e;for(;t!==bo.parse(t).root;){const e=bo.join(t,"node_modules");if(vo.existsSync(e))return e;t=bo.dirname(t)}return null};const jo=process.cwd(),{spawn:Do}=e;t({name:["redis"],dir:jo,optional:!0});const ko=a,xo=o,So=n,Ao=s,Po=r,Io=i,Eo=t,To=c,$o=p,Oo=wo,Co=_o({baseDir:__dirname}),Ro="win32"===process.platform?";":":";process.env.PATH=`${ko.join(Co,"/.bin")}${Ro}${process.env.PATH}`;let Mo=xo(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=ko.resolve(Co,"@fnet/cli-project-node/dist/template/project"),a=ko.resolve(jo,e.name);So.existsSync(a)||So.mkdirSync(a),await $o({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Po.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Po.which("git")&&(o=Po.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Po.which("code")&&e.vscode&&(o=Po.exec(`cd ${a} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=ko.resolve(Co,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ko.basename(a),e.update){if(await $o({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Po.exec("fnode build",{cwd:a}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await qo(e),a=new Oo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await qo({...e,mode:"all"}),a=new Oo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await qo({...e,mode:"file"}),a=new Oo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function Fo(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await qo(e),{projectDir:n}=t,s=process.argv.slice(3);Do(a,[...o,...s],{cwd:n,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function qo(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ko.resolve(Co,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ko.resolve(Co,"./@fnet/cli-project-common/dist/template/default"),projectDir:ko.resolve(jo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=ko.resolve(jo,"node.yaml");if(!So.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Io({file:t,tags:e}),n=ko.dirname(t),s={libraryAtom:{doc:{...o},fileName:"index"},projectDir:n,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=ko.resolve(n,"fnet/targets.yaml");if(!So.existsSync(r)&&(r=ko.resolve(n,"node.devops.yaml"),So.existsSync(r))){const e=ko.resolve(n,"fnet");So.existsSync(e)||So.mkdirSync(e),So.copyFileSync(r,ko.resolve(n,"fnet/targets.yaml")),So.unlinkSync(r)}if(So.existsSync(r)){const{raw:t,parsed:a}=await Io({file:r,tags:e}),o=Ao.parseDocument(t);s.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{So.writeFileSync(s.devops.filePath,o.toString())}}}const i=ko.resolve(n,"readme.md");if(So.existsSync(i)){const e=So.readFileSync(i,"utf8");s.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ko.resolve(Co,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ko.resolve(Co,"./@fnet/cli-project-common/dist/template/default"),projectDir:ko.resolve(t.projectDir,"./.workspace"),projectSrcDir:ko.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Mo=Mo.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await qo(e),{project:a}=t,{projectDir:o,projectFileParsed:n}=a,s=n.input;if(!s)throw new Error("Config schema not found in project file.");const r=await To({schema:s,format:"yaml"}),i=ko.resolve(o,".fnet");So.existsSync(i)||So.mkdirSync(i);const c=ko.resolve(i,`${e.name}.fnet`);So.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Mo=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await qo(e),{project:a}=t,{projectDir:o,projectFileParsed:n}=a,s=n.input;if(!s)throw new Error("Config schema not found in project file.");const r=ko.resolve(o,".fnet"),i=ko.resolve(r,`${e.name}.fnet`),c=await To({schema:s,format:"yaml",ref:i});So.existsSync(r)||So.mkdirSync(r),So.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Mo),Mo=Fo(Mo,{bin:"npm"}),Mo=Fo(Mo,{bin:"node"}),Mo=Fo(Mo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Mo=Fo(Mo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Mo=Fo(Mo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Mo=Fo(Mo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Mo=Fo(Mo,{bin:"npx"}),Mo=Fo(Mo,{bin:"cdk"}),Mo=Fo(Mo,{bin:"aws"}),Mo=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await qo(e),{projectDir:o}=t,n=e.config,s=await Eo({name:n,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=s?.data?.env||void 0,i=e.command,c=process.argv.slice(5);Do(i,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Mo,{name:"with"}),Mo.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
|
2
|
+
"use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),n=require("fs"),s=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),f=require("@flownet/lib-is-redis-online"),g=require("nanoid"),y=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),v=require("lodash.merge"),b=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),j=require("ajv/dist/2020"),D=require("ajv/dist/standalone"),k=require("@fnet/shell"),x=require("semver"),S=require("@fnet/up-list-files"),A=require("node:os"),P=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),E=require("lodash.clonedeep"),T=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),R=require("@flownet/lib-to-docker"),M=require("form-data"),F=require("@fnet/to-rust"),q=require("@flownet/lib-parse-node-url"),L=require("@flownet/lib-pick-npm-versions"),N=require("chalk");const U=u,B=f;const{Api:z}=y,J=h.default,W=w;const K=v;var G=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:n,options:s,extraCheck:r,explicit:i}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const m=t[o]?.options;m&&(d=K(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||i||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(f=r()&&f),t[c]=f,f&&n.forEach((e=>a.push({package:e[0],version:e[1]})))};const H=G;const X=G;const Y=G;const Z=G;const Q=G;const V=G;const ee=G;const te=G;const ae=G;const oe=G;const ne=G;const se=G;const re=G;const ie=v,ce=l,pe=d,le=b,de=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;H({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:o,packageDevDependencies:a})},me=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;X({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:a})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:a})},fe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Z({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:a})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},we=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;te({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},ve=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ae({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},be=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;oe({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:a})},_e=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ne({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})},je=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,n={};!0===o.app?.enabled&&(n.targets=n.targets||[],n.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),se({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:n},features:o,packageDevDependencies:a})},De=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,n=o.css&&!1!==o.css.enabled;let s=[];if(n){s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}}))}re({feature:{name:"css",packages:s},features:o,packageDevDependencies:a})};function ke({dir:e,name:t="index"}){let a=pe.resolve(e,`./${t}.tsx`);if(ce.existsSync(a)||(a=pe.resolve(e,`./${t}.ts`)),ce.existsSync(a)||(a=pe.resolve(e,`./${t}.jsx`)),ce.existsSync(a)||(a=pe.resolve(e,`./${t}.js`)),!ce.existsSync(a))return{};const o=a,n=pe.extname(a);return{file:o,ext:n,ts:".ts"===n||".tsx"===n,name:t}}const xe=_;const Se=l,Ae=d,Pe=p;const Ie=m,Ee=l,Te=d,$e=b,Oe=_;const Ce=l,Re=d,Me=p;const Fe=l,qe=d,Le=m,Ne=b;const Ue=l,Be=d,ze=m,Je=j,We=D;const Ke=l,Ge=d,He=m;const Xe=l,Ye=d,Ze=m;const Qe=m,Ve=l,et=d,tt=i;const at=r,ot=a;const nt=r;const st=r;const rt=r;const it=k,ct=t;const pt=l,lt=d,dt=x,mt=k,ut=t;const ft=l,gt=d,yt=x,ht=r,wt=t,vt=S,bt=c,_t=s;const jt=l,Dt=d,kt=A,xt=m,St=P,At=t;const Pt=n,It=a,Et=t;const Tt=t,$t=I,Ot=E,Ct=x;const Rt=t,Mt=T,Ft=E,qt=x;const Lt=t,Nt=$,Ut=E,Bt=x;const zt=t,Jt=O,Wt=E,Kt=x;const Gt=t,Ht=C,Xt=E,Yt=x;const Zt=t,Qt=R,Vt=E,ea=x;const ta=l,aa=d,oa=x,na=k,sa=t,ra=h.default;const ia=x,ca=t,pa=h.default;const la=x,da=t,ma=h.default,ua=n,fa=k,ga=M;const ya=x,ha=t,wa=h.default,va=n,ba=k,_a=M;const ja=t,Da=F,ka=E,xa=x;const Sa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:n})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let r="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await ct({name:i,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:p}=c.data;r+=` --projectGroupId=${p.projectGroupId}`,r+=` --projectPath='${s}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${p.gitlabHost}'`,r+=` --gitlabToken='${p.gitlabToken}'`,r+=` --gitlabUsername='${p.gitlabUsername}'`,r+=` --gitlabUserEmail='${p.gitlabUserEmail}'`,!0!==o.dryRun&&(await it({cmd:r}),a.isDirty=!0)},Aa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n,yamlTarget:s})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=lt.resolve(r,"package.json"),c=pt.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=dt.inc(o.version,"patch"),delete p.scripts,delete p.devDependencies,pt.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await ut({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let m="fnet-files-to-gcs";m+=` --projectId='${d.env.GCS_PROJECT_ID}'`,m+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,m+=` --keyFilename='${lt.resolve(lt.dirname(l),d.env.GCS_UPLOADER_KEY_FILE)}'`,m+=` --dir='${r}'`,m+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",m+=` --destDir='${p.name}/${p.version}'`,m+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(m+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(m+=" --dryRun"),await mt({cmd:m}),pt.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.version=p.version,s.set("version",p.version),await n({target:o,packageJSON:p}))},Pa=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:s})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=gt.resolve(r,"package.json"),c=ft.readFileSync(i),p=JSON.parse(c);p.name=n.params.name,p.version=yt.inc(n.version,"patch");const l=n.params.bin?.name||n.params.bin;!1!==n.params.bin?.enabled&&l&&"string"==typeof l&&(p.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete p.scripts,delete p.devDependencies,p.scripts={serve:"npx serve ."},ft.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=n.config||"npm";let m=(await wt({name:d,dir:a.projectDir,tags:a.tags,optional:!0}))?.data;if(!m){const e=vt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await bt({schema:e[0],tags:a.tags}),o=a.project.projectDir,n=gt.resolve(o,".fnet");ft.existsSync(n)||ft.mkdirSync(n),ft.writeFileSync(gt.resolve(n,`${d}.fnet`),_t.stringify(t)),m=t}if(ft.writeFileSync(gt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${m.env.NPM_TOKEN}`),!0!==n.dryRun){if(0!==ht.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");ft.writeFileSync(i,c),o.isDirty=!0,n.version=p.version,s.set("version",p.version)}},Ia=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n,buildId:s,packageDependencies:r,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,p=a.templateDir,l="workflow"===e.type?"WF":"LIB";let d;if("simple"===n.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:n.deploy.id||St.util.generateId(),label:`${l}/${e.id?e.id:kt.hostname()}/${e.name}/${n.deploy.name||n.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:jt.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:St.util.generateId(),...n.params?.inject,payload:"json"===n.params?.inject?.payloadType?`'${JSON.stringify(n.params?.inject?.payload)}'`:n.params?.inject?.payload},debug:{id:St.util.generateId()}}};else if("cronjob"===n.deploy.template){let t=n.params?.schedules?cloneDeep(n.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:n.deploy.id||St.util.generateId(),label:`${l}/${e.id?e.id:kt.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:jt.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:St.util.generateId(),schedules:t},debug:{id:St.util.generateId()}}}}else{if("http"!==n.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:n.deploy.id||St.util.generateId(),label:`${l}/${e.id?e.id:kt.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:jt.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:St.util.generateId(),method:n.params.method||"get",url:n.params.url},httpout:{id:St.util.generateId()},debug:{id:St.util.generateId()}}}}let m=xt.compile(jt.readFileSync(Dt.resolve(p,`deploy/node-red/${n.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(jt.writeFileSync(Dt.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===n.dryRun)return;o.isDirty=!0;const u=(await At({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,f=n.deploy.url||u.env.RED_URL,g={};if(!1!==n.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),n.deploy.id)!0===n.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${n.deploy.id}`,headers:g}),delete n.actions.delete,delete n.deploy.id,n.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${n.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});n.deploy.id=e.data.id}},Ea=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:n,deploymentProject:s,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const i=(await Et({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,p,l,d=r.deploy.name.split("/");if(1===d.length)p=i.env.ATOM_LIBRARIES_ID,l=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,l=d[1]}}if(!0===r.dryRun)return;if(s.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:p,doc:{name:l,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Pt.readFileSync(It.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Pt.readFileSync(It.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Pt.readFileSync(It.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=l,c.doc.dependencies=n,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Ta=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as ios-app package."});const i=t?.config?await Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Ct.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ot(t.params);p.dependencies=Ot(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await $t(l)}},$a=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await Rt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=qt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ft(t.params);p.dependencies=Ft(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Mt(l)}},Oa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Bt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ut(t.params);p.dependencies=Ut(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Nt(l)}},Ca=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Kt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Wt(t.params);p.dependencies=Wt(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Jt(l)}},Ra=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=Yt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Xt(t.params);p.dependencies=Xt(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Ht(l)}},Ma=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as docker package."});const i=t?.config?await Zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=ea.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Vt(t.params);p.dependencies=Vt(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Qt(l)}},Fa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,r=aa.resolve(s,"package.json"),i=ta.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=oa.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,ta.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await sa({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!l.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!l.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!l.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${l.env.ATOM_API_URL}/v1/auth/token`,m=l.env.ATOM_API_USERNAME,u=l.env.ATOM_API_PASSWORD;let f=await ra({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const g=f.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${l.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${l.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${aa.resolve(aa.dirname(p),l.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${s}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",l.env.DOMAIN&&(y+=` --domain='${l.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await na({cmd:y}),ta.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.version=c.version,n.set("version",c.version);const h=`${l.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(f=await ra({method:"POST",url:h,data:{name:c.name,version:c.version,version_domain:l.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),f.data?.error)throw new Error("Failed to publish fnet package.")},qa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet form."});const{file:s,data:r}=await ca({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await pa({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=ia.inc(o.version,"patch");o.params.version=m,o.version=m,n.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(l=await pa({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet form.")},La=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet flow."});const{file:s,data:r}=await da({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await ma({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=la.inc(o.version,"patch");o.params.version=m,o.version=m,n.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(l=await ma({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet flow.");const f=l.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await fa({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ga;w.append("file",ua.createReadStream(h));const v=await ma.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},Na=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:n})=>{await e({message:"Deploying it as fnet node."});const{file:s,data:r}=await ha({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await wa({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=ya.inc(o.version,"patch");o.params.version=m,o.version=m,n.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(l=await wa({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet node.");const f=l.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ba({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new _a;w.append("file",va.createReadStream(h));const v=await wa.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Ua=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n,context:s,yamlTarget:r})=>{a&&await a({message:"Deploying it as Rust package."});const i=t?.config?await ja({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:s.tags}):void 0,c=xa.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=ka(t.params);p.dependencies=ka(n);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Da(l)}};const Ba=l,za=d,Ja=s,Wa=r,Ka=m,Ga=async()=>{if(!await B({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=U.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Ha}=g,Xa=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(z.set_api_url(e.data.url),t)return z.set_req_token(t),void a(t);J({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:W.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{z.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{z.set_req_token(),o(e)}))}))}},Ya=async e=>{const{atom:t,context:a,packageDevDependencies:o}=e;t.doc.features=t.doc.features||{};const n=t.doc.features;n.project=n.project||{},n.project.format=n.project.format||n.project_format||"esm",n.project_format=n.project.format,n.dts_enabled=!0===n.dts||void 0!==n.dts&&!1!==n.dts,n.hasOwnProperty("all_parsed_imports")||(n.all_parsed_imports=!0);const s=pe.resolve(a.project.projectDir),r=ke({dir:pe.resolve(s,"./app")});if(r.file){let e=await le({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.app_uses_jsx=t,n.app_has_entry=!0,e=await le({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.app_entry_uses_jsx=t,n.app_entry_is_ts=r.ts,n.app_entry_ext=r.ext}const i=ke({dir:pe.resolve(s,"./cli")});if(i.file){let e=await le({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.cli_uses_jsx=t,n.cli_has_entry=!0,e=await le({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.cli_entry_uses_jsx=t,n.cli_entry_is_ts=i.ts,n.cli_entry_ext=i.ext}if("workflow.lib"===t.type){const e=ke({dir:pe.resolve(s,"./src")});if(e.file){let t=await le({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.src_uses_jsx=a,n.src_has_entry=!0,t=await le({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.src_entry_uses_jsx=a,n.src_entry_is_ts=e.ts,n.src_entry_ext=e.ext}}const c=Reflect.has(n,"app_entry_uses_jsx")?!0===n.app_entry_uses_jsx:!0===n.src_entry_uses_jsx,p=Reflect.has(n,"cli_entry_uses_jsx")?!0===n.cli_entry_uses_jsx:!0===n.src_entry_uses_jsx;n.form_enabled=!0===t.doc.form||!0===t.doc.form?.enabled||!0===n.form||!0===n.form?.enabled,n.multiple_enabled=n.multiple_enabled||!0===n.multiple||!0===n.multiple?.enabled,!1===n.app?n.app={enabled:!1}:!0===n.app?n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:c}:n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:c,...n.app||{}},n.app.enabled=!0===n.app.enabled&&(!0===t.doc.features.form_enabled||!0===n.app.extend||!0===n.app.enabled),n.app.format=n.app.format||"esm",n.app.folder=n.app.folder||n.app.format||"default",!1===n.cli?n.cli={enabled:!1}:!0===n.cli?n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:p}:n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:p,...n.cli||{}},n.cli.enabled=!0===n.cli.enabled&&(!1===t.doc.features.form_enabled||!0===n.cli.extend||!0===n.cli.enabled),n.cli.format=n.cli.format||"esm",n.cli.folder=n.cli.folder||n.cli.folder||"esm",n.cli.node_options=n.cli.node?.options||n.cli.node_options||"",n.json=n.cli.enabled||n.json;const l={cjs:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==n.cjs,copy:!1},esm:{format:"esm",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==n.esm,copy:!0},iife:{format:"iife",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==n.iife,terser:!0,copy:!1}};!0===n.webos&&(l.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===n.electron&&(l.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===n.nextjs&&(l.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===n.ios&&(l.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===n.macos&&(l.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===n.app.enabled&&(n.app.dir=`./dist/app/${n.app.folder}`,l.app={format:n.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:n.app.dir,terser:!0,output_exports:!1===n.app.export?"none":"auto"}),!0===n.cli.enabled&&(n.cli.dir=`./dist/cli/${n.cli.folder}`,l.cli={format:n.cli.format,context:"global",babel:!0===n.src_uses_jsx||!0===n.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:n.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===n.cli.export?"none":"auto"});const d={server:".",startPath:`${pe.normalize(n.app.dir||".")}`,files:[pe.normalize("./dist/**/*")],cors:!0,open:!1};n.babel_options=ie({targets:{browsers:"last 9 versions, not dead",node:"18"}},n.babel_options||n.babel?.options),n.browsersync_options=ie(d,n.browsersync_options||n.browsersync?.options||{}),n.replace_options=ie({},n.replace_options||n.replace?.options||{}),Reflect.has(n.browsersync_options,"proxy")&&delete n.browsersync_options.server,n.rollup=n.rollup||{},n.rollup_output=ie(l,n.rollup_output||n.rollup?.output||{}),n.preact_enabled=!0===n.preact||n.preact&&!1!==n.preact?.enabled;let m=Object.keys(l);for(const e of m){const t=l[e];t&&(!1!==n.rollup[e]?(t.babel_options=t.babel_options||n.babel_options,t.browsersync_options=ie(n.browsersync_options,t.browsersync_options),t.replace_options=ie(n.replace_options,t.replace_options),n.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),n.form_enabled&&(t.babel=!0)):delete n.rollup_output[e])}m=Object.keys(n.rollup_output),n.babel_enabled=m.some((e=>!0===n.rollup_output[e].babel)),n.browser_enabled=m.some((e=>!0===n.rollup_output[e].babel)),n.browsersync_enabled=!1!==n.browsersync&&m.some((e=>!0===n.rollup_output[e].browsersync)),n.browsersync_enabled=n.browsersync_enabled&&n.app.enabled,n.dependency_auto_enabled=!1!==n.dependency_auto&&!1!==n.dependency_auto?.enabled,n.npm_install_flags=n.npm_install_flags||"",n.react_version=n.react_version||n.react?.version||18,De(e),je(e),_e(e),be(e),ve(e),he(e),we(e),ye(e),ge(e),fe(e),ue(e),de(e),me(e)},Za=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await xe({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^26"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15"}),a.push({package:"@rollup/plugin-replace",version:"^5"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"})},Qa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const n={atom:e,packageDependencies:o,ts:Date.now()},s=a.templateDir,r=Ae.resolve(a.projectDir,"src/app");Se.existsSync(r)||Se.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await Pe({pattern:i,dir:Ae.resolve(s,"src/app"),outDir:r,context:n})},Va=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:n})=>{await n({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const s=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));s&&!r?a.push({package:"react-dom",version:s.version}):s&&r&&(r.version=s.version),s&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push({file:Te.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Te.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of i){const n=t.file;if(!Ee.existsSync(n))throw new Error(`App file not found: ${n}`);const s=await $e({file:n,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const n=(await Oe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${n}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},p=t.templateCommonDir,l=Ie.compile(Ee.readFileSync(Te.resolve(p,"package.json.njk"),"utf8"),Ie.configure(p)).render(c),d=t.projectDir,m=Te.resolve(d,"package.json");Ee.writeFileSync(m,l,"utf8");const u=Te.resolve(t.project.projectDir,"fnet");if(Ee.existsSync(u)){const e=Te.resolve(t.projectDir,"fnet");Ee.existsSync(e)||Ee.mkdirSync(e);const a=Ee.readdirSync(u);for(const t of a){const a=Te.resolve(u,t);if(!Ee.lstatSync(a).isFile())continue;const o=Te.resolve(e,t);Ee.copyFileSync(a,o)}}},eo=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const n={atom:e,packageDependencies:o},s=a.templateDir,r=Re.resolve(a.projectDir,"src/cli");Ce.existsSync(r)||Ce.mkdirSync(r,{recursive:!0}),await Me({pattern:["index.js.njk"],dir:Re.resolve(s,"src/cli"),outDir:r,context:n})},to=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const n={atom:e,packageDependencies:o},s=qe.resolve(a.projectDir,"src","default/index.js");if(!Fe.existsSync(s))throw new Error(`Entry file not found: ${s}`);const r=(await Ne({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const p=a.templateCommonDir;let l=Le.compile(Fe.readFileSync(qe.resolve(p,"rollup.config.mjs.njk"),"utf8"),Le.configure(p)).render(n);const d=a.projectDir;let m=qe.resolve(d,"rollup.config.mjs");Fe.writeFileSync(m,l,"utf8")},ao=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let n={};if(n=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),n.properties&&(n.properties.fargs=a,n.properties.ftag=o)}const s={options:n,imports:[],atom:e},r=a.templateDir,i=ze.compile(Ue.readFileSync(Be.resolve(r,"src/default/to.args.js.njk"),"utf8"),o).render(s),c=a.projectDir,p=Be.resolve(c,"src/default/to.args.js");Ue.writeFileSync(p,i,"utf8");const l=new Je({allErrors:!0,useDefaults:!0,strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}}),d=l.compile(n),m=We(l,d);Ue.writeFileSync(Be.resolve(c,"src/default/validate_input.js"),m,"utf8")},oo=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const n={atom:e,packageDependencies:o},s=a.templateCommonDir,r=He.compile(Ke.readFileSync(Ge.resolve(s,".gitignore.njk"),"utf8"),He.configure(s)).render(n),i=a.projectDir,c=Ge.resolve(i,".gitignore");Ke.writeFileSync(c,r,"utf8")},no=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const n={atom:e,packageDependencies:o},s=a.templateCommonDir,r=Ze.compile(Xe.readFileSync(Ye.resolve(s,"tsconfig.json.njk"),"utf8"),Ze.configure(s)).render(n),i=a.projectDir,c=Ye.resolve(i,"tsconfig.json");Xe.writeFileSync(c,r,"utf8")},so=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const n="readme.md",s=`Creating ${n}`;if(await a({message:s}),t.project?.readme){const e=t.projectDir,a={content:t.project.readme.doc.content},o=et.resolve(t.project.projectDir,"fnet/how-to.md");if(Ve.existsSync(o)){const e=Ve.readFileSync(o,"utf8");a.howto=e}const s=et.resolve(t.project.projectDir,"fnet/input.yaml");if(Ve.existsSync(s)){const e=await tt({file:s,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Qe.compile(Ve.readFileSync(et.resolve(r,`${n}.njk`),"utf8"),Qe.configure(r)).render(a),c=et.resolve(e,`${n}`);Ve.writeFileSync(c,i,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:s,...r}=a.doc,i={content:s},c=t.templateCommonDir,p=Qe.compile(Ve.readFileSync(et.resolve(c,`${n}.njk`),"utf8"),Qe.configure(c)).render(i),l=t.projectDir,d=et.resolve(l,`${n}`);Ve.writeFileSync(d,p,"utf8")}},ro=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=ot.join("src","**","*");if(0!==at.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},io=async({atom:e,setInProgress:t,context:a})=>{if(!e.doc.features.dts_enabled)return;const o=a.projectDir;await t({message:"Creating .d.ts"});if(0!==nt.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},co=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==st.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},po=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==rt.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},lo=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:n,setInProgress:s,deploymentProject:r,yamlTarget:i}=e;if(!0===n.enabled)if("lib"===n.type)await Ea({...e});else if("red"===n.type)await Ia({...e});else if("npm"===n.type)await Pa({...e});else if("gcs"===n.type)await Aa({...e});else if("gitlab"===n.type)await Sa({...e});else if("fnet-package"===n.type)await Fa({...e});else if("fnet-form"===n.type)await qa({...e});else if("fnet-node"===n.type)await Na({...e});else if("fnet-flow"===n.type)await La({...e});else{let e;if("nextjs"===n.type?e=Ra:"webos"===n.type?e=Ca:"electron"===n.type?e=Oa:"docker"===n.type?e=Ma:"ios"===n.type?e=Ta:"macos"===n.type?e=$a:"rust"===n.type&&(e=Ua),!e)return;await e({atom:t,target:n,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:mo}=y,uo=q,fo=t,go=b,yo=L,ho=N;var wo=class{#e;#t;#a;#o;#n;#s;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new Xa,this.#t=e,this.#s=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:mo,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Ga(),this.#c=this.#t.buildId||Ha(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await fo({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await Ya(this.#y),await Za(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await mo.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];Ba.existsSync(e)&&Ba.readdirSync(e).forEach((o=>{a.includes(o)||(t=Wa.rm("-rf",za.join(e,o)))}));let o=e;if(!Ba.existsSync(o)&&(t=Wa.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=za.join(e,"src"),!Ba.existsSync(o)&&(t=Wa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=za.join(e,"src","default"),!Ba.existsSync()&&(t=Wa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ka.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#n=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],n=await this.findAtomLibrary({url:o.name});o.atom=n;const s=n.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=uo({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await mo.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await mo.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await mo.first({where:{name:a[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=za.resolve(this.#t.projectSrcDir,"index.js"),a=await go({file:t,recursive:!0}),o=e.doc.dependencies,n=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of n){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await yo({name:e.package,count:1});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:e}){await this.setInProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom,o=this.#t.projectDir;if("local:"===a.protocol){const e=za.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=za.relative(za.join(this.#t.projectDir,"src","default"),e);if(!Ba.existsSync(e)){Ba.mkdirSync(za.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ba.writeFileSync(e,t,"utf8")}a.relativePath=t.split(za.sep).join("/"),this.#a.typesDir=`./types/${za.basename(o)}/src`}else{const e=za.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ba.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#n.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=Ka.compile(Ba.readFileSync(za.resolve(t,za.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,n=za.resolve(o,za.join("src","default","index.js"));Ba.writeFileSync(n,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,n={content:Ja.stringify(o)},s=this.#t.templateDir,r=Ka.compile(Ba.readFileSync(za.resolve(s,`${e}.njk`),"utf8"),this.#o).render(n),i=this.#t.projectDir,c=za.resolve(i,`${e}`);Ba.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await mo.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await mo.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),n=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const s=n.get(o[e]);await lo({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await mo.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await mo.update(o,{id:o.id})):o=await mo.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setInProgress({message:e}){console.log(ho.blue(e)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#n}),await this.createEngine(),await this.createProjectYaml(),await so(this.#y),await no(this.#y),await oo(this.#y),await ao(this.#y),await eo(this.#y),await Qa(this.#y),await to(this.#y),await Va(this.#y),await ro(this.#y),await io(this.#y),this.#f&&(await co(this.#y),await po(this.#y),this.#g&&await this.deploy())),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const vo=l,bo=d;var _o=function({baseDir:e=__dirname}){let t=e;for(;t!==bo.parse(t).root;){const e=bo.join(t,"node_modules");if(vo.existsSync(e))return e;t=bo.dirname(t)}return null};const jo=process.cwd(),{spawn:Do}=e;t({name:["redis"],dir:jo,optional:!0});const ko=a,xo=o,So=n,Ao=s,Po=r,Io=i,Eo=t,To=c,$o=p,Oo=wo,Co=_o({baseDir:__dirname}),Ro="win32"===process.platform?";":":";process.env.PATH=`${ko.join(Co,"/.bin")}${Ro}${process.env.PATH}`;let Mo=xo(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=ko.resolve(Co,"@fnet/cli-project-node/dist/template/project"),a=ko.resolve(jo,e.name);So.existsSync(a)||So.mkdirSync(a),await $o({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Po.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Po.which("git")&&(o=Po.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Po.which("code")&&e.vscode&&(o=Po.exec(`cd ${a} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=ko.resolve(Co,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ko.basename(a),e.update){if(await $o({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Po.exec("fnode build",{cwd:a}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await qo(e),a=new Oo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await qo({...e,mode:"all"}),a=new Oo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await qo({...e,mode:"file"}),a=new Oo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function Fo(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await qo(e),{projectDir:n}=t,s=process.argv.slice(3);Do(a,[...o,...s],{cwd:n,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function qo(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ko.resolve(Co,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ko.resolve(Co,"./@fnet/cli-project-common/dist/template/default"),projectDir:ko.resolve(jo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=ko.resolve(jo,"node.yaml");if(!So.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Io({file:t,tags:e}),n=ko.dirname(t),s={libraryAtom:{doc:{...o},fileName:"index"},projectDir:n,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=ko.resolve(n,"fnet/targets.yaml");if(!So.existsSync(r)&&(r=ko.resolve(n,"node.devops.yaml"),So.existsSync(r))){const e=ko.resolve(n,"fnet");So.existsSync(e)||So.mkdirSync(e),So.copyFileSync(r,ko.resolve(n,"fnet/targets.yaml")),So.unlinkSync(r)}if(So.existsSync(r)){const{raw:t,parsed:a}=await Io({file:r,tags:e}),o=Ao.parseDocument(t);s.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{So.writeFileSync(s.devops.filePath,o.toString())}}}const i=ko.resolve(n,"readme.md");if(So.existsSync(i)){const e=So.readFileSync(i,"utf8");s.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ko.resolve(Co,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ko.resolve(Co,"./@fnet/cli-project-common/dist/template/default"),projectDir:ko.resolve(t.projectDir,"./.workspace"),projectSrcDir:ko.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Mo=Mo.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await qo(e),{project:a}=t,{projectDir:o,projectFileParsed:n}=a,s=n.input;if(!s)throw new Error("Config schema not found in project file.");const r=await To({schema:s,format:"yaml"}),i=ko.resolve(o,".fnet");So.existsSync(i)||So.mkdirSync(i);const c=ko.resolve(i,`${e.name}.fnet`);So.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Mo=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await qo(e),{project:a}=t,{projectDir:o,projectFileParsed:n}=a,s=n.input;if(!s)throw new Error("Config schema not found in project file.");const r=ko.resolve(o,".fnet"),i=ko.resolve(r,`${e.name}.fnet`),c=await To({schema:s,format:"yaml",ref:i});So.existsSync(r)||So.mkdirSync(r),So.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Mo),Mo=Fo(Mo,{bin:"npm"}),Mo=Fo(Mo,{bin:"node"}),Mo=Fo(Mo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Mo=Fo(Mo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Mo=Fo(Mo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Mo=Fo(Mo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Mo=Fo(Mo,{bin:"npx"}),Mo=Fo(Mo,{bin:"cdk"}),Mo=Fo(Mo,{bin:"aws"}),Mo=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await qo(e),{projectDir:o}=t,n=e.config,s=await Eo({name:n,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=s?.data?.env||void 0,i=e.command,c=process.argv.slice(5);Do(i,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Mo,{name:"with"}),Mo.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/builder/wf-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),o=require("yargs/yargs"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),_=require("ajv/dist/2020"),D=require("ajv/dist/standalone"),S=require("@fnet/shell"),P=require("semver"),A=require("@fnet/up-list-files"),T=require("node:os"),E=require("@node-red/util"),$=require("@flownet/lib-to-ios-app"),O=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),C=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),F=require("form-data"),R=require("@fnet/to-rust"),q=require("@flownet/lib-parse-node-url"),U=require("@flownet/lib-bpmn-from-flow"),L=require("@fnet/expression"),B=require("chalk"),J=require("lodash.pick"),z=require("lodash.omit");const W=g,K=h;const{Api:G}=w,H=v.default,V=b;const X=x;var Y=({feature:e,features:t,packageDevDependencies:n})=>{const{name:o,packages:i,options:a,extraCheck:s,explicit:r}=e,c=`${o}_enabled`,l=t.rollup_output||{},p=Object.keys(l);let d=a||{};const f=t[o]?.options;f&&(d=X(d,f));const m=!t[o]||!1===t[o]?.enabled;p.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=p.some((e=>!0===t.rollup_output[e][o]?.enabled));s&&(u=s()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))};const Z=Y;const Q=Y;const ee=Y;const te=Y;const ne=Y;const oe=Y;const ie=Y;const ae=Y;const se=Y;const re=Y;const ce=Y;const le=Y;const pe=Y;const de=x,fe=p,me=d,ue=k,ge=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Z({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:o,packageDevDependencies:n})},he=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:n})},ye=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ee({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:n})},we=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;te({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:n})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ie({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},ke=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},je=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;se({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},_e=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;re({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:n})},De=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ce({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:n})},Se=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),le({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})},Pe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let a=[];if(i){a.push(["rollup-plugin-postcss","^4"]),a.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push(["postcss-import","^15"]);break;case"postcss-url":a.push(["postcss-url","^10"]);break;case"postcss-preset-env":a.push(["postcss-preset-env","^9"]);break;case"autoprefixer":a.push(["autoprefixer","^10"]);break;case"cssnano":a.push(["cssnano","^6"])}}))}pe({feature:{name:"css",packages:a},features:o,packageDevDependencies:n})};function Ae({dir:e,name:t="index"}){let n=me.resolve(e,`./${t}.tsx`);if(fe.existsSync(n)||(n=me.resolve(e,`./${t}.ts`)),fe.existsSync(n)||(n=me.resolve(e,`./${t}.jsx`)),fe.existsSync(n)||(n=me.resolve(e,`./${t}.js`)),!fe.existsSync(n))return{};const o=n,i=me.extname(n);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Te=j;const Ee=p,$e=d,Oe=l;const Ie=f,Ce=p,Ne=d,Me=k,Fe=j;const Re=p,qe=d,Ue=l;const Le=p,Be=d,Je=f,ze=k;const We=p,Ke=d,Ge=f,He=_,Ve=D;const Xe=p,Ye=d,Ze=f;const Qe=p,et=d,tt=f;const nt=f,ot=p,it=d,at=r;const st=s,rt=n;const ct=s;const lt=s;const pt=s;const dt=S,ft=t;const mt=p,ut=d,gt=P,ht=S,yt=t;const wt=p,vt=d,bt=P,xt=s,kt=t,jt=A,_t=c,Dt=a;const St=p,Pt=d,At=T,Tt=f,Et=E,$t=t;const Ot=i,It=n,Ct=t;const Nt=t,Mt=$,Ft=m,Rt=P;const qt=t,Ut=O,Lt=m,Bt=P;const Jt=t,zt=I,Wt=m,Kt=P;const Gt=t,Ht=C,Vt=m,Xt=P;const Yt=t,Zt=N,Qt=m,en=P;const tn=t,nn=M,on=m,an=P;const sn=p,rn=d,cn=P,ln=S,pn=t,dn=v.default;const fn=P,mn=t,un=v.default;const gn=P,hn=t,yn=v.default,wn=i,vn=S,bn=F;const xn=P,kn=t,jn=v.default,_n=i,Dn=S,Sn=F;const Pn=t,An=R,Tn=m,En=P;const $n=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await ft({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${o.params.name}'`,s+=` --projectBranch='${o.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await dt({cmd:s}),n.isDirty=!0)},On=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:i,yamlTarget:a})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=ut.resolve(s,"package.json"),c=mt.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=gt.inc(o.version,"patch"),delete l.scripts,delete l.devDependencies,mt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await yt({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let f="fnet-files-to-gcs";f+=` --projectId='${d.env.GCS_PROJECT_ID}'`,f+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,f+=` --keyFilename='${ut.resolve(ut.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,f+=` --dir='${s}'`,f+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",f+=` --destDir='${l.name}/${l.version}'`,f+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(f+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(f+=" --dryRun"),await ht({cmd:f}),mt.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.version=l.version,a.set("version",l.version),await i({target:o,packageJSON:l}))},In=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:a})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=vt.resolve(s,"package.json"),c=wt.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=bt.inc(i.version,"patch");const p=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},wt.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=i.config||"npm";let f=(await kt({name:d,dir:n.projectDir,tags:n.tags,optional:!0}))?.data;if(!f){const e=jt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await _t({schema:e[0],tags:n.tags}),o=n.project.projectDir,i=vt.resolve(o,".fnet");wt.existsSync(i)||wt.mkdirSync(i),wt.writeFileSync(vt.resolve(i,`${d}.fnet`),Dt.stringify(t)),f=t}if(wt.writeFileSync(vt.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${f.env.NPM_TOKEN}`),!0!==i.dryRun){if(0!==xt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");wt.writeFileSync(r,c),o.isDirty=!0,i.version=l.version,a.set("version",l.version)}},Cn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=n.projectDir,l=n.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Et.util.generateId(),label:`${p}/${e.id?e.id:At.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Et.util.generateId(),name:e.doc.name,initialize:{content:St.readFileSync(Pt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Et.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Et.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Et.util.generateId(),label:`${p}/${e.id?e.id:At.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Et.util.generateId(),name:e.doc.name,initialize:{content:St.readFileSync(Pt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Et.util.generateId(),schedules:t},debug:{id:Et.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Et.util.generateId(),label:`${p}/${e.id?e.id:At.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Et.util.generateId(),name:e.doc.name,initialize:{content:St.readFileSync(Pt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Et.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Et.util.generateId()},debug:{id:Et.util.generateId()}}}}let f=Tt.compile(St.readFileSync(Pt.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(St.writeFileSync(Pt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await $t({name:n.redConfig||"red",dir:n.projectDir,tags:n.tags}))?.data,u=i.deploy.url||m.env.RED_URL,g={};if(!1!==i.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:g}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});i.deploy.id=e.data.id}},Nn=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await Ct({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=o.projectDir;c.doc.contents=[{content:Ot.readFileSync(It.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ot.readFileSync(It.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ot.readFileSync(It.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Mn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await Nt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Rt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Ft(t.params);l.dependencies=Ft(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Mt(p)}},Fn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Bt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Lt(t.params);l.dependencies=Lt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ut(p)}},Rn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await Jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Kt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Wt(t.params);l.dependencies=Wt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await zt(p)}},qn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Xt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Vt(t.params);l.dependencies=Vt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ht(p)}},Un=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await Yt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=en.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Qt(t.params);l.dependencies=Qt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Zt(p)}},Ln=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await tn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=an.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=on(t.params);l.dependencies=on(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await nn(p)}},Bn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=rn.resolve(a,"package.json"),r=sn.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=cn.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,sn.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await pn({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,f=p.env.ATOM_API_USERNAME,m=p.env.ATOM_API_PASSWORD;let u=await dn({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const g=u.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let h="fnet-files-to-gcs";if(h+=` --projectId='${p.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${rn.resolve(rn.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${a}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await ln({cmd:h}),sn.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.version=c.version,i.set("version",c.version);const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await dn({method:"POST",url:y,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Jn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet form."});const{file:a,data:s}=await mn({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await un({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=fn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await un({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},zn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet flow."});const{file:a,data:s}=await hn({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await yn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=gn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await yn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await vn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new bn;w.append("file",wn.createReadStream(y));const v=await yn.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},Wn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet node."});const{file:a,data:s}=await kn({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await jn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=xn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await jn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await Dn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new Sn;w.append("file",_n.createReadStream(y));const v=await jn.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Kn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await Pn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=En.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Tn(t.params);l.dependencies=Tn(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await An(p)}};const Gn=m;async function Hn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Gn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Gn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Vn={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const a={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Hn},resolve:Hn};const Xn=L,Yn=Vn;var Zn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Xn({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition),o=await Promise.all(n.map((e=>Xn({expression:e})))),i=[],a=o.find((e=>"if"===e?.processor)),s=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:s,processor:a}),delete t.definition[a.expression];const r=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await Yn.init(e)}};const Qn=m;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Qn(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||Qn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var to={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=eo},resolve:eo};const no=m;async function oo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=no(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],a=t[n],s={key:await o(n),value:await o(a)};i.assign[e]=s}await t({node:e}),n({node:e})}var io={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=oo},resolve:oo};const ao=m,so=J,ro=z;async function co({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||ao(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var lo={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[so(e.definition.for,t),ro(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=co},resolve:co};var po={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};const fo=m;async function mo({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||fo(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var uo={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=mo},resolve:mo};const go=m;async function ho({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||go(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var yo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ho},resolve:ho};const wo=m;async function vo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||wo(e.definition);const i=e.context.transform;i.args&&(i.args=await o(i.args)),i.result&&(i.result=await o(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),n({node:e})}var bo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=vo},resolve:vo};const xo=bo;var ko={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===i?{...o.args,cmd:o[n]}:o[n],delete o[n],await xo.init(e)}};const jo=bo;var _o={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===i?{...o.args,name:o[n]}:o[n],delete o[n],await jo.init(e)}};const Do=bo;var So={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===i?{...o.args,file:o[n]}:o[n],delete o[n],await Do.init(e)}};async function Po({node:e}){e.context.next=e.childs[0]}var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Po},resolve:Po};const To=m;async function Eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||To(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),n({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Eo},resolve:Eo};const Oo=m;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Oo(e.definition),await t({node:e})}var Co={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Io},resolve:Io};const No=m;async function Mo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||No(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var Fo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Mo},resolve:Mo};const Ro=bo;var qo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===i?{...o.args,message:o[n]}:o[n],delete o[n],await Ro.init(e)}};const Uo=bo;var Lo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,n="html-script",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await Uo.init(e)}};const Bo=bo;var Jo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,n="html-link",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await Bo.init(e)}};const zo=p,Wo=d,Ko=a,Go=s,Ho=f,Vo=m,Xo=u,Yo=async()=>{if(!await K({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=W.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Zo}=y,Qo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(G.set_api_url(e.data.url),t)return G.set_req_token(t),void n(t);H({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:V.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{G.set_req_token(e.data.access_token),n(e.data.access_token)})).catch((e=>{G.set_req_token(),o(e)}))}))}},ei=async e=>{const{atom:t,context:n,packageDevDependencies:o}=e;t.doc.features=t.doc.features||{};const i=t.doc.features;i.project=i.project||{},i.project.format=i.project.format||i.project_format||"esm",i.project_format=i.project.format,i.dts_enabled=!0===i.dts||void 0!==i.dts&&!1!==i.dts,i.hasOwnProperty("all_parsed_imports")||(i.all_parsed_imports=!0);const a=me.resolve(n.project.projectDir),s=Ae({dir:me.resolve(a,"./app")});if(s.file){let e=await ue({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.app_uses_jsx=t,i.app_has_entry=!0,e=await ue({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.app_entry_uses_jsx=t,i.app_entry_is_ts=s.ts,i.app_entry_ext=s.ext}const r=Ae({dir:me.resolve(a,"./cli")});if(r.file){let e=await ue({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.cli_uses_jsx=t,i.cli_has_entry=!0,e=await ue({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.cli_entry_uses_jsx=t,i.cli_entry_is_ts=r.ts,i.cli_entry_ext=r.ext}if("workflow.lib"===t.type){const e=Ae({dir:me.resolve(a,"./src")});if(e.file){let t=await ue({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.src_uses_jsx=n,i.src_has_entry=!0,t=await ue({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.src_entry_uses_jsx=n,i.src_entry_is_ts=e.ts,i.src_entry_ext=e.ext}}const c=Reflect.has(i,"app_entry_uses_jsx")?!0===i.app_entry_uses_jsx:!0===i.src_entry_uses_jsx,l=Reflect.has(i,"cli_entry_uses_jsx")?!0===i.cli_entry_uses_jsx:!0===i.src_entry_uses_jsx;i.form_enabled=!0===t.doc.form||!0===t.doc.form?.enabled||!0===i.form||!0===i.form?.enabled,i.multiple_enabled=i.multiple_enabled||!0===i.multiple||!0===i.multiple?.enabled,!1===i.app?i.app={enabled:!1}:!0===i.app?i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c}:i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c,...i.app||{}},i.app.enabled=!0===i.app.enabled&&(!0===t.doc.features.form_enabled||!0===i.app.extend||!0===i.app.enabled),i.app.format=i.app.format||"esm",i.app.folder=i.app.folder||i.app.format||"default",!1===i.cli?i.cli={enabled:!1}:!0===i.cli?i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:l}:i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:l,...i.cli||{}},i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled),i.cli.format=i.cli.format||"esm",i.cli.folder=i.cli.folder||i.cli.folder||"esm",i.cli.node_options=i.cli.node?.options||i.cli.node_options||"",i.json=i.cli.enabled||i.json;const p={cjs:{format:"cjs",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==i.cjs,copy:!1},esm:{format:"esm",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==i.esm,copy:!0},iife:{format:"iife",context:i.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==i.iife,terser:!0,copy:!1}};!0===i.webos&&(p.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===i.electron&&(p.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===i.nextjs&&(p.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===i.ios&&(p.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===i.macos&&(p.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===i.app.enabled&&(i.app.dir=`./dist/app/${i.app.folder}`,p.app={format:i.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:i.app.dir,terser:!0,output_exports:!1===i.app.export?"none":"auto"}),!0===i.cli.enabled&&(i.cli.dir=`./dist/cli/${i.cli.folder}`,p.cli={format:i.cli.format,context:"global",babel:!0===i.src_uses_jsx||!0===i.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:i.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===i.cli.export?"none":"auto"});const d={server:".",startPath:`${me.normalize(i.app.dir||".")}`,files:[me.normalize("./dist/**/*")],cors:!0,open:!1};i.babel_options=de({targets:{browsers:"last 9 versions, not dead",node:"18"}},i.babel_options||i.babel?.options),i.browsersync_options=de(d,i.browsersync_options||i.browsersync?.options||{}),i.replace_options=de({},i.replace_options||i.replace?.options||{}),Reflect.has(i.browsersync_options,"proxy")&&delete i.browsersync_options.server,i.rollup=i.rollup||{},i.rollup_output=de(p,i.rollup_output||i.rollup?.output||{}),i.preact_enabled=!0===i.preact||i.preact&&!1!==i.preact?.enabled;let f=Object.keys(p);for(const e of f){const t=p[e];t&&(!1!==i.rollup[e]?(t.babel_options=t.babel_options||i.babel_options,t.browsersync_options=de(i.browsersync_options,t.browsersync_options),t.replace_options=de(i.replace_options,t.replace_options),i.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),i.form_enabled&&(t.babel=!0)):delete i.rollup_output[e])}f=Object.keys(i.rollup_output),i.babel_enabled=f.some((e=>!0===i.rollup_output[e].babel)),i.browser_enabled=f.some((e=>!0===i.rollup_output[e].babel)),i.browsersync_enabled=!1!==i.browsersync&&f.some((e=>!0===i.rollup_output[e].browsersync)),i.browsersync_enabled=i.browsersync_enabled&&i.app.enabled,i.dependency_auto_enabled=!1!==i.dependency_auto&&!1!==i.dependency_auto?.enabled,i.npm_install_flags=i.npm_install_flags||"",i.react_version=i.react_version||i.react?.version||18,Pe(e),Se(e),De(e),_e(e),je(e),xe(e),ke(e),be(e),ve(e),we(e),ye(e),ge(e),he(e)},ti=async({atom:e,packageDependencies:t,packageDevDependencies:n})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let n="^18.2";n=`^${(await Te({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),n.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^26"}),n.push({package:"@rollup/plugin-node-resolve",version:"^15"}),n.push({package:"@rollup/plugin-replace",version:"^5"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"})},ni=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const i={atom:e,packageDependencies:o,ts:Date.now()},a=n.templateDir,s=$e.resolve(n.projectDir,"src/app");Ee.existsSync(s)||Ee.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await Oe({pattern:r,dir:$e.resolve(a,"src/app"),outDir:s,context:i})},oi=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:i})=>{await i({message:"Creating package.json."});n.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const a=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));a&&!s?n.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:Ne.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:Ne.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const i=t.file;if(!Ce.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await Me({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const i=(await Fe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=Ie.compile(Ce.readFileSync(Ne.resolve(l,"package.json.njk"),"utf8"),Ie.configure(l)).render(c),d=t.projectDir,f=Ne.resolve(d,"package.json");Ce.writeFileSync(f,p,"utf8");const m=Ne.resolve(t.project.projectDir,"fnet");if(Ce.existsSync(m)){const e=Ne.resolve(t.projectDir,"fnet");Ce.existsSync(e)||Ce.mkdirSync(e);const n=Ce.readdirSync(m);for(const t of n){const n=Ne.resolve(m,t);if(!Ce.lstatSync(n).isFile())continue;const o=Ne.resolve(e,t);Ce.copyFileSync(n,o)}}},ii=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},a=n.templateDir,s=qe.resolve(n.projectDir,"src/cli");Re.existsSync(s)||Re.mkdirSync(s,{recursive:!0}),await Ue({pattern:["index.js.njk"],dir:qe.resolve(a,"src/cli"),outDir:s,context:i})},ai=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},a=Be.resolve(n.projectDir,"src","default/index.js");if(!Le.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await ze({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const n=s[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=n.templateCommonDir;let p=Je.compile(Le.readFileSync(Be.resolve(l,"rollup.config.mjs.njk"),"utf8"),Je.configure(l)).render(i);const d=n.projectDir;let f=Be.resolve(d,"rollup.config.mjs");Le.writeFileSync(f,p,"utf8")},si=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};if(i=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,n={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(n.default=t.default),i.properties&&(i.properties.fargs=n,i.properties.ftag=o)}const a={options:i,imports:[],atom:e},s=n.templateDir,r=Ge.compile(We.readFileSync(Ke.resolve(s,"src/default/to.args.js.njk"),"utf8"),o).render(a),c=n.projectDir,l=Ke.resolve(c,"src/default/to.args.js");We.writeFileSync(l,r,"utf8");const p=new He({allErrors:!0,useDefaults:!0,strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}}),d=p.compile(e.doc.input),f=Ve(p,d);We.writeFileSync(Ke.resolve(c,"src/default/validate_input.js"),f,"utf8")},ri=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=Ze.compile(Xe.readFileSync(Ye.resolve(a,".gitignore.njk"),"utf8"),Ze.configure(a)).render(i),r=n.projectDir,c=Ye.resolve(r,".gitignore");Xe.writeFileSync(c,s,"utf8")},ci=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=tt.compile(Qe.readFileSync(et.resolve(a,"tsconfig.json.njk"),"utf8"),tt.configure(a)).render(i),r=n.projectDir,c=et.resolve(r,"tsconfig.json");Qe.writeFileSync(c,s,"utf8")},li=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const i="readme.md",a=`Creating ${i}`;if(await n({message:a}),t.project?.readme){const e=t.projectDir,n={content:t.project.readme.doc.content},o=it.resolve(t.project.projectDir,"fnet/how-to.md");if(ot.existsSync(o)){const e=ot.readFileSync(o,"utf8");n.howto=e}const a=it.resolve(t.project.projectDir,"fnet/input.yaml");if(ot.existsSync(a)){const e=await at({file:a,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=nt.compile(ot.readFileSync(it.resolve(s,`${i}.njk`),"utf8"),nt.configure(s)).render(n),c=it.resolve(e,`${i}`);ot.writeFileSync(c,r,"utf8")}else if(e.id){const n=await o.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:a,...s}=n.doc,r={content:a},c=t.templateCommonDir,l=nt.compile(ot.readFileSync(it.resolve(c,`${i}.njk`),"utf8"),nt.configure(c)).render(r),p=t.projectDir,d=it.resolve(p,`${i}`);ot.writeFileSync(d,l,"utf8")}},pi=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=rt.join("src","**","*");if(0!==st.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},di=async({atom:e,setInProgress:t,context:n})=>{if(!e.doc.features.dts_enabled)return;const o=n.projectDir;await t({message:"Creating .d.ts"});if(0!==ct.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},fi=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==lt.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},mi=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==pt.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},ui=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s,yamlTarget:r}=e;if(!0===i.enabled)if("lib"===i.type)await Nn({...e});else if("red"===i.type)await Cn({...e});else if("npm"===i.type)await In({...e});else if("gcs"===i.type)await On({...e});else if("gitlab"===i.type)await $n({...e});else if("fnet-package"===i.type)await Bn({...e});else if("fnet-form"===i.type)await Jn({...e});else if("fnet-node"===i.type)await Wn({...e});else if("fnet-flow"===i.type)await zn({...e});else{let e;if("nextjs"===i.type?e=Un:"webos"===i.type?e=qn:"electron"===i.type?e=Rn:"docker"===i.type?e=Ln:"ios"===i.type?e=Mn:"macos"===i.type?e=Fn:"rust"===i.type&&(e=Kn),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:gi}=w,hi=q,yi=j,wi=U,vi=t,bi=k,xi=L,ki=r,ji=B,_i=Zn,Di=to,Si=io,Pi=lo,Ai=Vn,Ti=po,Ei=uo,$i=yo,Oi=bo,Ii=ko,Ci=_o,Ni=So,Mi=Ao,Fi=$o,Ri=Co,qi=Fo,Ui=qo,Li=Lo,Bi=Jo,Ji=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}};var zi=class{#e;#t;#n;#o;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#y;#w;#v;#b;constructor(e){this.#e=new Qo,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:gi,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Vo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ji,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Yo(),this.#p=this.#t.buildId||Zo(24),this.#v.buildId=this.#p,this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#y=["all","deploy"].includes(this.#u),this.#w=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await vi({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await ei(this.#v),await ti(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await gi.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await ki({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"@fnet/args",version:"^0.1"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),zo.statSync(e).isDirectory()?(zo.readdirSync(e).forEach((t=>{const n=Wo.join(e,t);this.#x(n)})),zo.rmSync(e)):zo.unlinkSync(e)}#k(e,t){const n=zo.existsSync(e),o=n&&zo.statSync(e);n&&o.isDirectory()?(zo.mkdirSync(t,{recursive:!0}),zo.readdirSync(e).forEach((n=>{this.#k(Wo.join(e,n),Wo.join(t,n))}))):zo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(zo.existsSync(e)){const t=zo.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=Wo.join(e,o);zo.rmSync(t,{recursive:!0})}}zo.existsSync(e)||zo.mkdirSync(e,{recursive:!0});const o=Wo.join(e,"src");zo.existsSync(o)||zo.mkdirSync(o,{recursive:!0});const i=Wo.join(o,"core");this.#k(t,i);const a=Wo.join(o,"default","blocks");zo.existsSync(a)||zo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Ho.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await Di.hits(t))await Di.init(t);else if(await Pi.hits(t))await Pi.init(t);else if(await Ai.hits(t))await Ai.init(t);else if(await _i.hits(t))await _i.init(t);else if(await Ti.hits(t))await Ti.init(t);else if(await Si.hits(t))await Si.init(t);else if(await Ei.hits(t))await Ei.init(t);else if(await $i.hits(t))await $i.init(t);else if(await Oi.hits(t))await Oi.init(t);else if(await Ii.hits(t))await Ii.init(t);else if(await Ci.hits(t))await Ci.init(t);else if(await Ni.hits(t))await Ni.init(t);else if(await Li.hits(t))await Li.init(t);else if(await Bi.hits(t))await Bi.init(t);else if(await Fi.hits(t))await Fi.init(t);else if(await Ri.hits(t))await Ri.init(t);else if(await Ui.hits(t))await Ui.init(t);else if(await Mi.hits(t))await Mi.init(t);else{if(!await qi.hits(t))throw new Error("Undefined step type.");await qi.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const n=Wo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let i=e;for(;i?.parent;)o.push(i.index),i=i.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=Zo(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e,libRef:t}){const n=hi({url:e});if(!n)throw new Error(`Invalid package name: ${e}`);if(n.protocol||(n.protocol=this.#f),"ac:"===n.protocol){const t=n.pathname.split("/");if(1===t.length)return await gi.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await gi.first({where:{name:t[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await gi.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const e=Wo.resolve(this.#t.projectSrcDir,`${n.pathname}.js`),t=[],o=await bi({file:e,recursive:!0}),i=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of i){if("npm"!==e.type)continue;if(t.find((t=>t.package===e.package)))continue;const n=(await yi({name:e.package,groupBy:{minor:!0}}))[0][0];t.push({package:e.package,subpath:e.subpath,version:`^${n}`,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:n.protocol}}if("npm:"===n.protocol){const e=(await yi({name:n.pathname,groupBy:{minor:!0}}))[0][0];return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:`^${e}`,type:"npm"}]},protocol:n.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Vo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#b,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,o=this.#t.projectDir;if("local:"===n.protocol){const e=Wo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=Wo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!zo.existsSync(e)){zo.mkdirSync(Wo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",zo.writeFileSync(e,t,"utf8")}n.relativePath=t.split(Wo.sep).join("/"),this.#n.typesDir=`./types/${Wo.basename(o)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else{const e=`${o}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;zo.writeFileSync(Wo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Ho.compile(zo.readFileSync(Wo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=Wo.resolve(o,"src/default/index.js");zo.writeFileSync(i,n,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,n=Ho.compile(zo.readFileSync(Wo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=Wo.resolve(o,`src/default/${e.codeKey}.js`);zo.writeFileSync(i,n,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const n=this.#t.templateDir;return t=Ho.compile(zo.readFileSync(Wo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=Wo.resolve(t,`src/default/blocks/${n}`);zo.writeFileSync(o,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=o}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(Xo(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await xi({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:n,...o}=this.#n.doc,i={content:Ko.stringify(o)},a=this.#t.templateDir,s=Ho.compile(zo.readFileSync(Wo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=Wo.resolve(r,`${e}`);zo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Ko.stringify(this.#o)},o=this.#t.templateDir,i=Ho.compile(zo.readFileSync(Wo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=Wo.resolve(a,`${e}`);zo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Go.exec("prettier --write .",{cwd:Wo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await gi.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await gi.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const a=i.get(o[e]);await ui({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await gi.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await gi.update(o,{id:o.id})):o=await gi.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setInProgress({message:e}){console.log(ji.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#w&&!this.#g)return await this.createNetwork();try{const e=this.#w?await wi({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#w){const t=this.#t.project?.projectDir||this.#t.projectDir;zo.writeFileSync(Wo.resolve(t,"./fnet/flow.bpmn"),e.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await li(this.#v),await ci(this.#v),await ri(this.#v),await si(this.#v),await ii(this.#v),await ni(this.#v),await ai(this.#v),await oi(this.#v),await pi(this.#v),await di(this.#v),this.#h&&(await fi(this.#v),await mi(this.#v),this.#y&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await wi({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}};const Wi=p,Ki=d;var Gi=function({baseDir:e=__dirname}){let t=e;for(;t!==Ki.parse(t).root;){const e=Ki.join(t,"node_modules");if(Wi.existsSync(e))return e;t=Ki.dirname(t)}return null};const Hi=process.cwd(),{spawn:Vi}=e;t({name:["redis"],dir:Hi,optional:!0});const Xi=n,Yi=o,Zi=i,Qi=a,ea=s,ta=r,na=t,oa=c,ia=l,aa=zi,sa=Gi({baseDir:__dirname}),ra="win32"===process.platform?";":":";process.env.PATH=`${Xi.join(sa,"/.bin")}${ra}${process.env.PATH}`;let ca=Yi(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/project"),n=Xi.resolve(Hi,e.name);Zi.existsSync(n)||Zi.mkdirSync(n),await ia({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=ea.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(ea.which("git")&&(o=ea.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(ea.which("code")&&e.vscode&&(o=ea.exec(`cd ${n} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=Xi.resolve(sa,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=Xi.basename(n),e.update){if(await ia({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==ea.exec("fnet build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await pa(e),n=new aa(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await pa({...e,mode:"all"}),n=new aa(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await pa({...e,mode:"file"}),n=new aa(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function la(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await pa(e),{projectDir:i}=t,a=process.argv.slice(3);Vi(n,[...o,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function pa(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Xi.resolve(Hi,`./.output/${e.id}`),templateDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Xi.resolve(sa,"./@fnet/cli-project-common/dist/template/default"),coreDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Xi.resolve(Hi,"flow.yaml");if(!Zi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await ta({file:t,tags:e}),i=Xi.dirname(t),a=o.main||"flow.main.yaml";let s=Xi.resolve(i,a);if(!Zi.existsSync(s)&&(s=Xi.resolve(i,a+".yaml"),!Zi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await ta({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=Xi.resolve(i,"fnet/targets.yaml");if(!Zi.existsSync(p)&&(p=Xi.resolve(i,"flow.devops.yaml"),Zi.existsSync(p))){const e=Xi.resolve(i,"fnet");Zi.existsSync(e)||Zi.mkdirSync(e),Zi.copyFileSync(p,Xi.resolve(i,"fnet/targets.yaml")),Zi.unlinkSync(p)}if(Zi.existsSync(p)){const{raw:t,parsed:n}=await ta({file:p,tags:e}),o=Qi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{Zi.writeFileSync(l.devops.filePath,o.toString())}}}const d=Xi.resolve(i,"readme.md");if(Zi.existsSync(d)){const e=Zi.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Xi.resolve(sa,"./@fnet/cli-project-common/dist/template/default"),coreDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Xi.resolve(t.projectDir,"./.workspace"),projectSrcDir:Xi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}ca=ca.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await pa(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=await oa({schema:a,format:"yaml"}),r=Xi.resolve(o,".fnet");Zi.existsSync(r)||Zi.mkdirSync(r);const c=Xi.resolve(r,`${e.name}.fnet`);Zi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),ca=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await pa(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=Xi.resolve(o,".fnet"),r=Xi.resolve(s,`${e.name}.fnet`),c=await oa({schema:a,format:"yaml",ref:r});Zi.existsSync(s)||Zi.mkdirSync(s),Zi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ca),ca=la(ca,{bin:"npm"}),ca=la(ca,{bin:"node"}),ca=la(ca,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ca=la(ca,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ca=la(ca,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ca=la(ca,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ca=la(ca,{bin:"npx"}),ca=la(ca,{bin:"cdk"}),ca=la(ca,{bin:"aws"}),ca=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await pa(e),{projectDir:o}=t,i=e.config,a=await na({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);Vi(r,[...n,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(ca,{name:"with"}),ca.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
|
2
|
+
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),o=require("yargs/yargs"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),_=require("ajv/dist/2020"),D=require("ajv/dist/standalone"),S=require("@fnet/shell"),P=require("semver"),A=require("@fnet/up-list-files"),T=require("node:os"),E=require("@node-red/util"),$=require("@flownet/lib-to-ios-app"),O=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),C=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),F=require("form-data"),R=require("@fnet/to-rust"),q=require("@flownet/lib-parse-node-url"),U=require("@flownet/lib-bpmn-from-flow"),L=require("@fnet/expression"),B=require("chalk"),J=require("lodash.pick"),z=require("lodash.omit");const W=g,K=h;const{Api:G}=w,H=v.default,V=b;const X=x;var Y=({feature:e,features:t,packageDevDependencies:n})=>{const{name:o,packages:i,options:a,extraCheck:s,explicit:r}=e,c=`${o}_enabled`,l=t.rollup_output||{},p=Object.keys(l);let d=a||{};const f=t[o]?.options;f&&(d=X(d,f));const m=!t[o]||!1===t[o]?.enabled;p.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=p.some((e=>!0===t.rollup_output[e][o]?.enabled));s&&(u=s()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))};const Z=Y;const Q=Y;const ee=Y;const te=Y;const ne=Y;const oe=Y;const ie=Y;const ae=Y;const se=Y;const re=Y;const ce=Y;const le=Y;const pe=Y;const de=x,fe=p,me=d,ue=k,ge=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Z({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:o,packageDevDependencies:n})},he=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:n})},ye=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ee({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:n})},we=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;te({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:n})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ie({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},ke=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},je=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;se({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},_e=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;re({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:n})},De=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ce({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:n})},Se=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),le({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})},Pe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let a=[];if(i){a.push(["rollup-plugin-postcss","^4"]),a.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push(["postcss-import","^15"]);break;case"postcss-url":a.push(["postcss-url","^10"]);break;case"postcss-preset-env":a.push(["postcss-preset-env","^9"]);break;case"autoprefixer":a.push(["autoprefixer","^10"]);break;case"cssnano":a.push(["cssnano","^6"])}}))}pe({feature:{name:"css",packages:a},features:o,packageDevDependencies:n})};function Ae({dir:e,name:t="index"}){let n=me.resolve(e,`./${t}.tsx`);if(fe.existsSync(n)||(n=me.resolve(e,`./${t}.ts`)),fe.existsSync(n)||(n=me.resolve(e,`./${t}.jsx`)),fe.existsSync(n)||(n=me.resolve(e,`./${t}.js`)),!fe.existsSync(n))return{};const o=n,i=me.extname(n);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Te=j;const Ee=p,$e=d,Oe=l;const Ie=f,Ce=p,Ne=d,Me=k,Fe=j;const Re=p,qe=d,Ue=l;const Le=p,Be=d,Je=f,ze=k;const We=p,Ke=d,Ge=f,He=_,Ve=D;const Xe=p,Ye=d,Ze=f;const Qe=p,et=d,tt=f;const nt=f,ot=p,it=d,at=r;const st=s,rt=n;const ct=s;const lt=s;const pt=s;const dt=S,ft=t;const mt=p,ut=d,gt=P,ht=S,yt=t;const wt=p,vt=d,bt=P,xt=s,kt=t,jt=A,_t=c,Dt=a;const St=p,Pt=d,At=T,Tt=f,Et=E,$t=t;const Ot=i,It=n,Ct=t;const Nt=t,Mt=$,Ft=m,Rt=P;const qt=t,Ut=O,Lt=m,Bt=P;const Jt=t,zt=I,Wt=m,Kt=P;const Gt=t,Ht=C,Vt=m,Xt=P;const Yt=t,Zt=N,Qt=m,en=P;const tn=t,nn=M,on=m,an=P;const sn=p,rn=d,cn=P,ln=S,pn=t,dn=v.default;const fn=P,mn=t,un=v.default;const gn=P,hn=t,yn=v.default,wn=i,vn=S,bn=F;const xn=P,kn=t,jn=v.default,_n=i,Dn=S,Sn=F;const Pn=t,An=R,Tn=m,En=P;const $n=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await ft({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${o.params.name}'`,s+=` --projectBranch='${o.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await dt({cmd:s}),n.isDirty=!0)},On=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:i,yamlTarget:a})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=ut.resolve(s,"package.json"),c=mt.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=gt.inc(o.version,"patch"),delete l.scripts,delete l.devDependencies,mt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await yt({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let f="fnet-files-to-gcs";f+=` --projectId='${d.env.GCS_PROJECT_ID}'`,f+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,f+=` --keyFilename='${ut.resolve(ut.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,f+=` --dir='${s}'`,f+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",f+=` --destDir='${l.name}/${l.version}'`,f+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(f+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(f+=" --dryRun"),await ht({cmd:f}),mt.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.version=l.version,a.set("version",l.version),await i({target:o,packageJSON:l}))},In=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:a})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=vt.resolve(s,"package.json"),c=wt.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=bt.inc(i.version,"patch");const p=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},wt.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=i.config||"npm";let f=(await kt({name:d,dir:n.projectDir,tags:n.tags,optional:!0}))?.data;if(!f){const e=jt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await _t({schema:e[0],tags:n.tags}),o=n.project.projectDir,i=vt.resolve(o,".fnet");wt.existsSync(i)||wt.mkdirSync(i),wt.writeFileSync(vt.resolve(i,`${d}.fnet`),Dt.stringify(t)),f=t}if(wt.writeFileSync(vt.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${f.env.NPM_TOKEN}`),!0!==i.dryRun){if(0!==xt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");wt.writeFileSync(r,c),o.isDirty=!0,i.version=l.version,a.set("version",l.version)}},Cn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=n.projectDir,l=n.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Et.util.generateId(),label:`${p}/${e.id?e.id:At.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Et.util.generateId(),name:e.doc.name,initialize:{content:St.readFileSync(Pt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Et.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Et.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Et.util.generateId(),label:`${p}/${e.id?e.id:At.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Et.util.generateId(),name:e.doc.name,initialize:{content:St.readFileSync(Pt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Et.util.generateId(),schedules:t},debug:{id:Et.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Et.util.generateId(),label:`${p}/${e.id?e.id:At.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Et.util.generateId(),name:e.doc.name,initialize:{content:St.readFileSync(Pt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Et.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Et.util.generateId()},debug:{id:Et.util.generateId()}}}}let f=Tt.compile(St.readFileSync(Pt.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(St.writeFileSync(Pt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await $t({name:n.redConfig||"red",dir:n.projectDir,tags:n.tags}))?.data,u=i.deploy.url||m.env.RED_URL,g={};if(!1!==i.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:g}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});i.deploy.id=e.data.id}},Nn=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await Ct({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=o.projectDir;c.doc.contents=[{content:Ot.readFileSync(It.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ot.readFileSync(It.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ot.readFileSync(It.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Mn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await Nt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Rt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Ft(t.params);l.dependencies=Ft(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Mt(p)}},Fn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Bt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Lt(t.params);l.dependencies=Lt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ut(p)}},Rn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await Jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Kt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Wt(t.params);l.dependencies=Wt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await zt(p)}},qn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Xt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Vt(t.params);l.dependencies=Vt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ht(p)}},Un=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await Yt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=en.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Qt(t.params);l.dependencies=Qt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Zt(p)}},Ln=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await tn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=an.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=on(t.params);l.dependencies=on(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await nn(p)}},Bn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=rn.resolve(a,"package.json"),r=sn.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=cn.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,sn.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await pn({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,f=p.env.ATOM_API_USERNAME,m=p.env.ATOM_API_PASSWORD;let u=await dn({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const g=u.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let h="fnet-files-to-gcs";if(h+=` --projectId='${p.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${rn.resolve(rn.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${a}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await ln({cmd:h}),sn.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.version=c.version,i.set("version",c.version);const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await dn({method:"POST",url:y,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Jn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet form."});const{file:a,data:s}=await mn({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await un({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=fn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await un({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},zn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet flow."});const{file:a,data:s}=await hn({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await yn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=gn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await yn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await vn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new bn;w.append("file",wn.createReadStream(y));const v=await yn.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},Wn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet node."});const{file:a,data:s}=await kn({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await jn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=xn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await jn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await Dn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new Sn;w.append("file",_n.createReadStream(y));const v=await jn.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Kn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await Pn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=En.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Tn(t.params);l.dependencies=Tn(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await An(p)}};const Gn=m;async function Hn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Gn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Gn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Vn={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const a={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Hn},resolve:Hn};const Xn=L,Yn=Vn;var Zn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Xn({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition),o=await Promise.all(n.map((e=>Xn({expression:e})))),i=[],a=o.find((e=>"if"===e?.processor)),s=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:s,processor:a}),delete t.definition[a.expression];const r=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await Yn.init(e)}};const Qn=m;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Qn(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||Qn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var to={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=eo},resolve:eo};const no=m;async function oo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=no(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],a=t[n],s={key:await o(n),value:await o(a)};i.assign[e]=s}await t({node:e}),n({node:e})}var io={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=oo},resolve:oo};const ao=m,so=J,ro=z;async function co({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||ao(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var lo={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[so(e.definition.for,t),ro(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=co},resolve:co};var po={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};const fo=m;async function mo({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||fo(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var uo={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=mo},resolve:mo};const go=m;async function ho({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||go(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var yo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ho},resolve:ho};const wo=m;async function vo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||wo(e.definition);const i=e.context.transform;i.args&&(i.args=await o(i.args)),i.result&&(i.result=await o(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),n({node:e})}var bo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=vo},resolve:vo};const xo=bo;var ko={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===i?{...o.args,cmd:o[n]}:o[n],delete o[n],await xo.init(e)}};const jo=bo;var _o={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===i?{...o.args,name:o[n]}:o[n],delete o[n],await jo.init(e)}};const Do=bo;var So={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===i?{...o.args,file:o[n]}:o[n],delete o[n],await Do.init(e)}};async function Po({node:e}){e.context.next=e.childs[0]}var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Po},resolve:Po};const To=m;async function Eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||To(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),n({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Eo},resolve:Eo};const Oo=m;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Oo(e.definition),await t({node:e})}var Co={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Io},resolve:Io};const No=m;async function Mo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||No(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var Fo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Mo},resolve:Mo};const Ro=bo;var qo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===i?{...o.args,message:o[n]}:o[n],delete o[n],await Ro.init(e)}};const Uo=bo;var Lo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,n="html-script",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await Uo.init(e)}};const Bo=bo;var Jo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,n="html-link",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await Bo.init(e)}};const zo=p,Wo=d,Ko=a,Go=s,Ho=f,Vo=m,Xo=u,Yo=async()=>{if(!await K({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=W.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Zo}=y,Qo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(G.set_api_url(e.data.url),t)return G.set_req_token(t),void n(t);H({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:V.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{G.set_req_token(e.data.access_token),n(e.data.access_token)})).catch((e=>{G.set_req_token(),o(e)}))}))}},ei=async e=>{const{atom:t,context:n,packageDevDependencies:o}=e;t.doc.features=t.doc.features||{};const i=t.doc.features;i.project=i.project||{},i.project.format=i.project.format||i.project_format||"esm",i.project_format=i.project.format,i.dts_enabled=!0===i.dts||void 0!==i.dts&&!1!==i.dts,i.hasOwnProperty("all_parsed_imports")||(i.all_parsed_imports=!0);const a=me.resolve(n.project.projectDir),s=Ae({dir:me.resolve(a,"./app")});if(s.file){let e=await ue({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.app_uses_jsx=t,i.app_has_entry=!0,e=await ue({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.app_entry_uses_jsx=t,i.app_entry_is_ts=s.ts,i.app_entry_ext=s.ext}const r=Ae({dir:me.resolve(a,"./cli")});if(r.file){let e=await ue({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.cli_uses_jsx=t,i.cli_has_entry=!0,e=await ue({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.cli_entry_uses_jsx=t,i.cli_entry_is_ts=r.ts,i.cli_entry_ext=r.ext}if("workflow.lib"===t.type){const e=Ae({dir:me.resolve(a,"./src")});if(e.file){let t=await ue({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.src_uses_jsx=n,i.src_has_entry=!0,t=await ue({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.src_entry_uses_jsx=n,i.src_entry_is_ts=e.ts,i.src_entry_ext=e.ext}}const c=Reflect.has(i,"app_entry_uses_jsx")?!0===i.app_entry_uses_jsx:!0===i.src_entry_uses_jsx,l=Reflect.has(i,"cli_entry_uses_jsx")?!0===i.cli_entry_uses_jsx:!0===i.src_entry_uses_jsx;i.form_enabled=!0===t.doc.form||!0===t.doc.form?.enabled||!0===i.form||!0===i.form?.enabled,i.multiple_enabled=i.multiple_enabled||!0===i.multiple||!0===i.multiple?.enabled,!1===i.app?i.app={enabled:!1}:!0===i.app?i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c}:i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c,...i.app||{}},i.app.enabled=!0===i.app.enabled&&(!0===t.doc.features.form_enabled||!0===i.app.extend||!0===i.app.enabled),i.app.format=i.app.format||"esm",i.app.folder=i.app.folder||i.app.format||"default",!1===i.cli?i.cli={enabled:!1}:!0===i.cli?i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:l}:i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:l,...i.cli||{}},i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled),i.cli.format=i.cli.format||"esm",i.cli.folder=i.cli.folder||i.cli.folder||"esm",i.cli.node_options=i.cli.node?.options||i.cli.node_options||"",i.json=i.cli.enabled||i.json;const p={cjs:{format:"cjs",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==i.cjs,copy:!1},esm:{format:"esm",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==i.esm,copy:!0},iife:{format:"iife",context:i.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==i.iife,terser:!0,copy:!1}};!0===i.webos&&(p.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===i.electron&&(p.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===i.nextjs&&(p.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===i.ios&&(p.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===i.macos&&(p.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===i.app.enabled&&(i.app.dir=`./dist/app/${i.app.folder}`,p.app={format:i.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:i.app.dir,terser:!0,output_exports:!1===i.app.export?"none":"auto"}),!0===i.cli.enabled&&(i.cli.dir=`./dist/cli/${i.cli.folder}`,p.cli={format:i.cli.format,context:"global",babel:!0===i.src_uses_jsx||!0===i.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:i.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===i.cli.export?"none":"auto"});const d={server:".",startPath:`${me.normalize(i.app.dir||".")}`,files:[me.normalize("./dist/**/*")],cors:!0,open:!1};i.babel_options=de({targets:{browsers:"last 9 versions, not dead",node:"18"}},i.babel_options||i.babel?.options),i.browsersync_options=de(d,i.browsersync_options||i.browsersync?.options||{}),i.replace_options=de({},i.replace_options||i.replace?.options||{}),Reflect.has(i.browsersync_options,"proxy")&&delete i.browsersync_options.server,i.rollup=i.rollup||{},i.rollup_output=de(p,i.rollup_output||i.rollup?.output||{}),i.preact_enabled=!0===i.preact||i.preact&&!1!==i.preact?.enabled;let f=Object.keys(p);for(const e of f){const t=p[e];t&&(!1!==i.rollup[e]?(t.babel_options=t.babel_options||i.babel_options,t.browsersync_options=de(i.browsersync_options,t.browsersync_options),t.replace_options=de(i.replace_options,t.replace_options),i.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),i.form_enabled&&(t.babel=!0)):delete i.rollup_output[e])}f=Object.keys(i.rollup_output),i.babel_enabled=f.some((e=>!0===i.rollup_output[e].babel)),i.browser_enabled=f.some((e=>!0===i.rollup_output[e].babel)),i.browsersync_enabled=!1!==i.browsersync&&f.some((e=>!0===i.rollup_output[e].browsersync)),i.browsersync_enabled=i.browsersync_enabled&&i.app.enabled,i.dependency_auto_enabled=!1!==i.dependency_auto&&!1!==i.dependency_auto?.enabled,i.npm_install_flags=i.npm_install_flags||"",i.react_version=i.react_version||i.react?.version||18,Pe(e),Se(e),De(e),_e(e),je(e),xe(e),ke(e),be(e),ve(e),we(e),ye(e),ge(e),he(e)},ti=async({atom:e,packageDependencies:t,packageDevDependencies:n})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let n="^18.2";n=`^${(await Te({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),n.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^26"}),n.push({package:"@rollup/plugin-node-resolve",version:"^15"}),n.push({package:"@rollup/plugin-replace",version:"^5"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"})},ni=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const i={atom:e,packageDependencies:o,ts:Date.now()},a=n.templateDir,s=$e.resolve(n.projectDir,"src/app");Ee.existsSync(s)||Ee.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await Oe({pattern:r,dir:$e.resolve(a,"src/app"),outDir:s,context:i})},oi=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:i})=>{await i({message:"Creating package.json."});n.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const a=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));a&&!s?n.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:Ne.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:Ne.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const i=t.file;if(!Ce.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await Me({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const i=(await Fe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=Ie.compile(Ce.readFileSync(Ne.resolve(l,"package.json.njk"),"utf8"),Ie.configure(l)).render(c),d=t.projectDir,f=Ne.resolve(d,"package.json");Ce.writeFileSync(f,p,"utf8");const m=Ne.resolve(t.project.projectDir,"fnet");if(Ce.existsSync(m)){const e=Ne.resolve(t.projectDir,"fnet");Ce.existsSync(e)||Ce.mkdirSync(e);const n=Ce.readdirSync(m);for(const t of n){const n=Ne.resolve(m,t);if(!Ce.lstatSync(n).isFile())continue;const o=Ne.resolve(e,t);Ce.copyFileSync(n,o)}}},ii=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},a=n.templateDir,s=qe.resolve(n.projectDir,"src/cli");Re.existsSync(s)||Re.mkdirSync(s,{recursive:!0}),await Ue({pattern:["index.js.njk"],dir:qe.resolve(a,"src/cli"),outDir:s,context:i})},ai=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},a=Be.resolve(n.projectDir,"src","default/index.js");if(!Le.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await ze({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const n=s[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=n.templateCommonDir;let p=Je.compile(Le.readFileSync(Be.resolve(l,"rollup.config.mjs.njk"),"utf8"),Je.configure(l)).render(i);const d=n.projectDir;let f=Be.resolve(d,"rollup.config.mjs");Le.writeFileSync(f,p,"utf8")},si=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};if(i=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,n={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(n.default=t.default),i.properties&&(i.properties.fargs=n,i.properties.ftag=o)}const a={options:i,imports:[],atom:e},s=n.templateDir,r=Ge.compile(We.readFileSync(Ke.resolve(s,"src/default/to.args.js.njk"),"utf8"),o).render(a),c=n.projectDir,l=Ke.resolve(c,"src/default/to.args.js");We.writeFileSync(l,r,"utf8");const p=new He({allErrors:!0,useDefaults:!0,strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}}),d=p.compile(i),f=Ve(p,d);We.writeFileSync(Ke.resolve(c,"src/default/validate_input.js"),f,"utf8")},ri=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=Ze.compile(Xe.readFileSync(Ye.resolve(a,".gitignore.njk"),"utf8"),Ze.configure(a)).render(i),r=n.projectDir,c=Ye.resolve(r,".gitignore");Xe.writeFileSync(c,s,"utf8")},ci=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=tt.compile(Qe.readFileSync(et.resolve(a,"tsconfig.json.njk"),"utf8"),tt.configure(a)).render(i),r=n.projectDir,c=et.resolve(r,"tsconfig.json");Qe.writeFileSync(c,s,"utf8")},li=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const i="readme.md",a=`Creating ${i}`;if(await n({message:a}),t.project?.readme){const e=t.projectDir,n={content:t.project.readme.doc.content},o=it.resolve(t.project.projectDir,"fnet/how-to.md");if(ot.existsSync(o)){const e=ot.readFileSync(o,"utf8");n.howto=e}const a=it.resolve(t.project.projectDir,"fnet/input.yaml");if(ot.existsSync(a)){const e=await at({file:a,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=nt.compile(ot.readFileSync(it.resolve(s,`${i}.njk`),"utf8"),nt.configure(s)).render(n),c=it.resolve(e,`${i}`);ot.writeFileSync(c,r,"utf8")}else if(e.id){const n=await o.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:a,...s}=n.doc,r={content:a},c=t.templateCommonDir,l=nt.compile(ot.readFileSync(it.resolve(c,`${i}.njk`),"utf8"),nt.configure(c)).render(r),p=t.projectDir,d=it.resolve(p,`${i}`);ot.writeFileSync(d,l,"utf8")}},pi=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=rt.join("src","**","*");if(0!==st.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},di=async({atom:e,setInProgress:t,context:n})=>{if(!e.doc.features.dts_enabled)return;const o=n.projectDir;await t({message:"Creating .d.ts"});if(0!==ct.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},fi=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==lt.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},mi=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==pt.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},ui=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s,yamlTarget:r}=e;if(!0===i.enabled)if("lib"===i.type)await Nn({...e});else if("red"===i.type)await Cn({...e});else if("npm"===i.type)await In({...e});else if("gcs"===i.type)await On({...e});else if("gitlab"===i.type)await $n({...e});else if("fnet-package"===i.type)await Bn({...e});else if("fnet-form"===i.type)await Jn({...e});else if("fnet-node"===i.type)await Wn({...e});else if("fnet-flow"===i.type)await zn({...e});else{let e;if("nextjs"===i.type?e=Un:"webos"===i.type?e=qn:"electron"===i.type?e=Rn:"docker"===i.type?e=Ln:"ios"===i.type?e=Mn:"macos"===i.type?e=Fn:"rust"===i.type&&(e=Kn),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:gi}=w,hi=q,yi=j,wi=U,vi=t,bi=k,xi=L,ki=r,ji=B,_i=Zn,Di=to,Si=io,Pi=lo,Ai=Vn,Ti=po,Ei=uo,$i=yo,Oi=bo,Ii=ko,Ci=_o,Ni=So,Mi=Ao,Fi=$o,Ri=Co,qi=Fo,Ui=qo,Li=Lo,Bi=Jo,Ji=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}};var zi=class{#e;#t;#n;#o;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#y;#w;#v;#b;constructor(e){this.#e=new Qo,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:gi,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Vo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ji,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Yo(),this.#p=this.#t.buildId||Zo(24),this.#v.buildId=this.#p,this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#y=["all","deploy"].includes(this.#u),this.#w=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await vi({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await ei(this.#v),await ti(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await gi.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await ki({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"@fnet/args",version:"^0.1"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),zo.statSync(e).isDirectory()?(zo.readdirSync(e).forEach((t=>{const n=Wo.join(e,t);this.#x(n)})),zo.rmSync(e)):zo.unlinkSync(e)}#k(e,t){const n=zo.existsSync(e),o=n&&zo.statSync(e);n&&o.isDirectory()?(zo.mkdirSync(t,{recursive:!0}),zo.readdirSync(e).forEach((n=>{this.#k(Wo.join(e,n),Wo.join(t,n))}))):zo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(zo.existsSync(e)){const t=zo.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=Wo.join(e,o);zo.rmSync(t,{recursive:!0})}}zo.existsSync(e)||zo.mkdirSync(e,{recursive:!0});const o=Wo.join(e,"src");zo.existsSync(o)||zo.mkdirSync(o,{recursive:!0});const i=Wo.join(o,"core");this.#k(t,i);const a=Wo.join(o,"default","blocks");zo.existsSync(a)||zo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Ho.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await Di.hits(t))await Di.init(t);else if(await Pi.hits(t))await Pi.init(t);else if(await Ai.hits(t))await Ai.init(t);else if(await _i.hits(t))await _i.init(t);else if(await Ti.hits(t))await Ti.init(t);else if(await Si.hits(t))await Si.init(t);else if(await Ei.hits(t))await Ei.init(t);else if(await $i.hits(t))await $i.init(t);else if(await Oi.hits(t))await Oi.init(t);else if(await Ii.hits(t))await Ii.init(t);else if(await Ci.hits(t))await Ci.init(t);else if(await Ni.hits(t))await Ni.init(t);else if(await Li.hits(t))await Li.init(t);else if(await Bi.hits(t))await Bi.init(t);else if(await Fi.hits(t))await Fi.init(t);else if(await Ri.hits(t))await Ri.init(t);else if(await Ui.hits(t))await Ui.init(t);else if(await Mi.hits(t))await Mi.init(t);else{if(!await qi.hits(t))throw new Error("Undefined step type.");await qi.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const n=Wo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let i=e;for(;i?.parent;)o.push(i.index),i=i.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=Zo(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e,libRef:t}){const n=hi({url:e});if(!n)throw new Error(`Invalid package name: ${e}`);if(n.protocol||(n.protocol=this.#f),"ac:"===n.protocol){const t=n.pathname.split("/");if(1===t.length)return await gi.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await gi.first({where:{name:t[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await gi.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const e=Wo.resolve(this.#t.projectSrcDir,`${n.pathname}.js`),t=[],o=await bi({file:e,recursive:!0}),i=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of i){if("npm"!==e.type)continue;if(t.find((t=>t.package===e.package)))continue;const n=(await yi({name:e.package,groupBy:{minor:!0}}))[0][0];t.push({package:e.package,subpath:e.subpath,version:`^${n}`,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:n.protocol}}if("npm:"===n.protocol){const e=(await yi({name:n.pathname,groupBy:{minor:!0}}))[0][0];return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:`^${e}`,type:"npm"}]},protocol:n.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Vo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#b,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,o=this.#t.projectDir;if("local:"===n.protocol){const e=Wo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=Wo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!zo.existsSync(e)){zo.mkdirSync(Wo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",zo.writeFileSync(e,t,"utf8")}n.relativePath=t.split(Wo.sep).join("/"),this.#n.typesDir=`./types/${Wo.basename(o)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else{const e=`${o}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;zo.writeFileSync(Wo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Ho.compile(zo.readFileSync(Wo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=Wo.resolve(o,"src/default/index.js");zo.writeFileSync(i,n,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,n=Ho.compile(zo.readFileSync(Wo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=Wo.resolve(o,`src/default/${e.codeKey}.js`);zo.writeFileSync(i,n,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const n=this.#t.templateDir;return t=Ho.compile(zo.readFileSync(Wo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=Wo.resolve(t,`src/default/blocks/${n}`);zo.writeFileSync(o,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=o}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(Xo(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await xi({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:n,...o}=this.#n.doc,i={content:Ko.stringify(o)},a=this.#t.templateDir,s=Ho.compile(zo.readFileSync(Wo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=Wo.resolve(r,`${e}`);zo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Ko.stringify(this.#o)},o=this.#t.templateDir,i=Ho.compile(zo.readFileSync(Wo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=Wo.resolve(a,`${e}`);zo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Go.exec("prettier --write .",{cwd:Wo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await gi.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await gi.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const a=i.get(o[e]);await ui({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await gi.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await gi.update(o,{id:o.id})):o=await gi.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setInProgress({message:e}){console.log(ji.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#w&&!this.#g)return await this.createNetwork();try{const e=this.#w?await wi({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#w){const t=this.#t.project?.projectDir||this.#t.projectDir;zo.writeFileSync(Wo.resolve(t,"./fnet/flow.bpmn"),e.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await li(this.#v),await ci(this.#v),await ri(this.#v),await si(this.#v),await ii(this.#v),await ni(this.#v),await ai(this.#v),await oi(this.#v),await pi(this.#v),await di(this.#v),this.#h&&(await fi(this.#v),await mi(this.#v),this.#y&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await wi({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}};const Wi=p,Ki=d;var Gi=function({baseDir:e=__dirname}){let t=e;for(;t!==Ki.parse(t).root;){const e=Ki.join(t,"node_modules");if(Wi.existsSync(e))return e;t=Ki.dirname(t)}return null};const Hi=process.cwd(),{spawn:Vi}=e;t({name:["redis"],dir:Hi,optional:!0});const Xi=n,Yi=o,Zi=i,Qi=a,ea=s,ta=r,na=t,oa=c,ia=l,aa=zi,sa=Gi({baseDir:__dirname}),ra="win32"===process.platform?";":":";process.env.PATH=`${Xi.join(sa,"/.bin")}${ra}${process.env.PATH}`;let ca=Yi(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/project"),n=Xi.resolve(Hi,e.name);Zi.existsSync(n)||Zi.mkdirSync(n),await ia({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=ea.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(ea.which("git")&&(o=ea.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(ea.which("code")&&e.vscode&&(o=ea.exec(`cd ${n} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=Xi.resolve(sa,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=Xi.basename(n),e.update){if(await ia({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==ea.exec("fnet build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await pa(e),n=new aa(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await pa({...e,mode:"all"}),n=new aa(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await pa({...e,mode:"file"}),n=new aa(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function la(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await pa(e),{projectDir:i}=t,a=process.argv.slice(3);Vi(n,[...o,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function pa(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Xi.resolve(Hi,`./.output/${e.id}`),templateDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Xi.resolve(sa,"./@fnet/cli-project-common/dist/template/default"),coreDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Xi.resolve(Hi,"flow.yaml");if(!Zi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await ta({file:t,tags:e}),i=Xi.dirname(t),a=o.main||"flow.main.yaml";let s=Xi.resolve(i,a);if(!Zi.existsSync(s)&&(s=Xi.resolve(i,a+".yaml"),!Zi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await ta({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=Xi.resolve(i,"fnet/targets.yaml");if(!Zi.existsSync(p)&&(p=Xi.resolve(i,"flow.devops.yaml"),Zi.existsSync(p))){const e=Xi.resolve(i,"fnet");Zi.existsSync(e)||Zi.mkdirSync(e),Zi.copyFileSync(p,Xi.resolve(i,"fnet/targets.yaml")),Zi.unlinkSync(p)}if(Zi.existsSync(p)){const{raw:t,parsed:n}=await ta({file:p,tags:e}),o=Qi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{Zi.writeFileSync(l.devops.filePath,o.toString())}}}const d=Xi.resolve(i,"readme.md");if(Zi.existsSync(d)){const e=Zi.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Xi.resolve(sa,"./@fnet/cli-project-common/dist/template/default"),coreDir:Xi.resolve(sa,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Xi.resolve(t.projectDir,"./.workspace"),projectSrcDir:Xi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}ca=ca.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await pa(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=await oa({schema:a,format:"yaml"}),r=Xi.resolve(o,".fnet");Zi.existsSync(r)||Zi.mkdirSync(r);const c=Xi.resolve(r,`${e.name}.fnet`);Zi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),ca=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await pa(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=Xi.resolve(o,".fnet"),r=Xi.resolve(s,`${e.name}.fnet`),c=await oa({schema:a,format:"yaml",ref:r});Zi.existsSync(s)||Zi.mkdirSync(s),Zi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ca),ca=la(ca,{bin:"npm"}),ca=la(ca,{bin:"node"}),ca=la(ca,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ca=la(ca,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ca=la(ca,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ca=la(ca,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ca=la(ca,{bin:"npx"}),ca=la(ca,{bin:"cdk"}),ca=la(ca,{bin:"aws"}),ca=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await pa(e),{projectDir:o}=t,i=e.config,a=await na({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);Vi(r,[...n,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(ca,{name:"with"}),ca.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,t,
|
|
2
|
+
"use strict";var e,t,s=require("@fnet/config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),f=require("qs");function w(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var _,b,m,y,k={name:"@fnet/cli",version:"0.43.0",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.3.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-docker":"^0.3.1","@flownet/lib-to-electron":"^0.3.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.3.1","@flownet/lib-to-macos-app":"^0.3.1","@flownet/lib-to-nextjs":"^0.3.1","@flownet/lib-to-webos":"^0.3.1","@fnet/cli-project-common":"^0.1.26","@fnet/cli-project-flow":"^0.1.9","@fnet/cli-project-node":"^0.1.12","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/object-from-schema":"^0.1.2","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.12","@fnet/yargs-options-from-schema":"^0.1.1","@node-red/util":"^4.0.2",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","form-data":"^4.0.0","get-value":"^3.0.1",helmet:"^7.1.0",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^25.0.5","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^3.1.0",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.3","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^4.9.6"}};const g=process.cwd(),j=s;(async function(){await j({name:["server","redis"],dir:g,optional:!0});const e=await w()();if(!e)throw new Error("Redis is offline.");const t=k,s=n,i=o,r=l,v=function(){if(b)return _;b=1;const e=n,t=c,s=d,{nanoid:i}=a;return _=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;s.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=c,s=d,{nanoid:i}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=s(),T=f;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(i()),R.use(s.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
|
package/package.json
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
$schema: "https://json-schema.org/draft/2020-12/schema"
|
|
2
|
-
type: object
|
|
3
|
-
properties:
|
|
4
|
-
env:
|
|
5
|
-
type: object
|
|
6
|
-
description: "Environment configuration"
|
|
7
|
-
properties:
|
|
8
|
-
NPM_TOKEN:
|
|
9
|
-
type: string
|
|
10
|
-
description: "NPM token"
|
|
11
|
-
required:
|
|
12
|
-
- NPM_TOKEN
|
|
13
|
-
required:
|
|
14
|
-
- env
|
package/dist/schemas/to-npm.yaml
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
$schema: "https://json-schema.org/draft/2020-12/schema"
|
|
2
|
-
type: object
|
|
3
|
-
properties:
|
|
4
|
-
env:
|
|
5
|
-
type: object
|
|
6
|
-
description: "Environment configuration"
|
|
7
|
-
properties:
|
|
8
|
-
NPM_TOKEN:
|
|
9
|
-
type: string
|
|
10
|
-
description: "NPM token"
|
|
11
|
-
required:
|
|
12
|
-
- NPM_TOKEN
|
|
13
|
-
required:
|
|
14
|
-
- env
|