@fnet/cli 0.111.0 → 0.111.2

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.
Files changed (154) hide show
  1. package/dist/fnet/index.DBSKvJyG.js +1 -0
  2. package/dist/fnet/index.DrwlOzAe.js +1 -0
  3. package/dist/fnet/index.js +1 -1
  4. package/dist/fnode/index.53yND1Av.js +1 -0
  5. package/dist/fnode/index.B1zLg4Y2.js +1 -0
  6. package/dist/fnode/index.B2LXSSn7.js +1 -0
  7. package/dist/fnode/index.BBrItYB9.js +1 -0
  8. package/dist/fnode/index.BSQp_bJN.js +1 -0
  9. package/dist/fnode/index.Bqzc7Bx8.js +1 -0
  10. package/dist/fnode/index.BwhWziH6.js +1 -0
  11. package/dist/fnode/index.CLlKzCGk.js +1 -0
  12. package/dist/fnode/index.Chvv_TJm.js +1 -0
  13. package/dist/fnode/index.D4KQB1ot.js +1 -0
  14. package/dist/fnode/index.DItyYiZ_.js +1 -0
  15. package/dist/fnode/index.DrwlOzAe.js +1 -0
  16. package/dist/fnode/index.js +1 -1
  17. package/dist/frun/index.js +126 -0
  18. package/package.json +8 -9
  19. package/readme.md +117 -25
  20. package/template/fnet/bun/fnet/flows.yaml.njk +1 -0
  21. package/template/fnet/bun/fnet.yaml.njk +1 -0
  22. package/template/fnet/bun/src/app/index.html.njk +67 -0
  23. package/template/fnet/bun/src/app/index.js.njk +36 -0
  24. package/template/fnet/bun/src/cli/index.js.njk +44 -0
  25. package/template/fnet/bun/src/default/blocks/assign.js.njk +40 -0
  26. package/template/fnet/bun/src/default/blocks/call.js.njk +92 -0
  27. package/template/fnet/bun/src/default/blocks/for.js.njk +81 -0
  28. package/template/fnet/bun/src/default/blocks/form.js.njk +65 -0
  29. package/template/fnet/bun/src/default/blocks/jump.js.njk +31 -0
  30. package/template/fnet/bun/src/default/blocks/modules.js.njk +50 -0
  31. package/template/fnet/bun/src/default/blocks/operation.js.njk +24 -0
  32. package/template/fnet/bun/src/default/blocks/raise.js.njk +25 -0
  33. package/template/fnet/bun/src/default/blocks/return.js.njk +27 -0
  34. package/template/fnet/bun/src/default/blocks/steps.js.njk +56 -0
  35. package/template/fnet/bun/src/default/blocks/switch.js.njk +73 -0
  36. package/template/fnet/bun/src/default/blocks/tryexcept.js.njk +65 -0
  37. package/template/fnet/bun/src/default/engine.js.njk +79 -0
  38. package/template/fnet/bun/src/default/macros/block-body-header.js.njk +7 -0
  39. package/template/fnet/bun/src/default/macros/block-footer.js.njk +3 -0
  40. package/template/fnet/bun/src/default/macros/block-header.js.njk +14 -0
  41. package/template/fnet/bun/src/default/macros/block-library-header.js.njk +19 -0
  42. package/template/fnet/bun/src/default/macros/block-modules-header.js.njk +8 -0
  43. package/template/fnet/bun/src/default/macros/block-modules.js.njk +29 -0
  44. package/template/fnet/bun/src/default/macros/block-next-header.js.njk +6 -0
  45. package/template/fnet/bun/src/default/macros/block-next.js.njk +20 -0
  46. package/template/fnet/bun/src/default/macros/block-run-form.js.njk +32 -0
  47. package/template/fnet/bun/src/default/macros/block-run-header.js.njk +39 -0
  48. package/template/fnet/bun/src/default/macros/page.js.njk +8 -0
  49. package/template/fnet/bun/src/default/macros/workflow-header.js.njk +7 -0
  50. package/template/fnet/bun/src/default/to.args.js.njk +120 -0
  51. package/template/fnet/bun/src/default/workflow.js.njk +117 -0
  52. package/template/fnet/core/assert.js +6 -0
  53. package/template/fnet/core/message.js +3 -0
  54. package/template/fnet/core/object.js +43 -0
  55. package/template/fnet/core/print.js +1 -0
  56. package/template/fnet/core/sleep.js +5 -0
  57. package/template/fnet/node/.gitignore.njk +8 -0
  58. package/template/fnet/node/fnet/flows.yaml.njk +1 -0
  59. package/template/fnet/node/fnet.yaml.njk +1 -0
  60. package/template/fnet/node/package.json.njk +90 -0
  61. package/template/fnet/node/readme.md.njk +21 -0
  62. package/template/fnet/node/rollup.config.mjs.njk +363 -0
  63. package/template/fnet/node/rollup_config_external.njk +8 -0
  64. package/template/fnet/node/rollup_config_onwarn.njk +9 -0
  65. package/template/fnet/node/rollup_config_output_banner.njk +3 -0
  66. package/template/fnet/node/rollup_config_output_footer.njk +5 -0
  67. package/template/fnet/node/rollup_config_output_globals.njk +9 -0
  68. package/template/fnet/node/rollup_config_output_name.njk +3 -0
  69. package/template/fnet/node/rollup_config_plugins.njk +90 -0
  70. package/template/fnet/node/src/app/index.html.njk +67 -0
  71. package/template/fnet/node/src/app/index.js.njk +36 -0
  72. package/template/fnet/node/src/cli/index.js.njk +44 -0
  73. package/template/fnet/node/src/default/blocks/assign.js.njk +40 -0
  74. package/template/fnet/node/src/default/blocks/call.js.njk +92 -0
  75. package/template/fnet/node/src/default/blocks/for.js.njk +81 -0
  76. package/template/fnet/node/src/default/blocks/form.js.njk +65 -0
  77. package/template/fnet/node/src/default/blocks/jump.js.njk +31 -0
  78. package/template/fnet/node/src/default/blocks/modules.js.njk +50 -0
  79. package/template/fnet/node/src/default/blocks/operation.js.njk +24 -0
  80. package/template/fnet/node/src/default/blocks/raise.js.njk +25 -0
  81. package/template/fnet/node/src/default/blocks/return.js.njk +27 -0
  82. package/template/fnet/node/src/default/blocks/steps.js.njk +56 -0
  83. package/template/fnet/node/src/default/blocks/switch.js.njk +73 -0
  84. package/template/fnet/node/src/default/blocks/tryexcept.js.njk +65 -0
  85. package/template/fnet/node/src/default/engine.js.njk +79 -0
  86. package/template/fnet/node/src/default/macros/block-body-header.js.njk +7 -0
  87. package/template/fnet/node/src/default/macros/block-footer.js.njk +3 -0
  88. package/template/fnet/node/src/default/macros/block-header.js.njk +14 -0
  89. package/template/fnet/node/src/default/macros/block-library-header.js.njk +19 -0
  90. package/template/fnet/node/src/default/macros/block-modules-header.js.njk +8 -0
  91. package/template/fnet/node/src/default/macros/block-modules.js.njk +29 -0
  92. package/template/fnet/node/src/default/macros/block-next-header.js.njk +6 -0
  93. package/template/fnet/node/src/default/macros/block-next.js.njk +20 -0
  94. package/template/fnet/node/src/default/macros/block-run-form.js.njk +32 -0
  95. package/template/fnet/node/src/default/macros/block-run-header.js.njk +39 -0
  96. package/template/fnet/node/src/default/macros/page.js.njk +8 -0
  97. package/template/fnet/node/src/default/macros/workflow-header.js.njk +7 -0
  98. package/template/fnet/node/src/default/to.args.js.njk +120 -0
  99. package/template/fnet/node/src/default/workflow.js.njk +117 -0
  100. package/template/fnet/node/tsconfig.json.njk +16 -0
  101. package/template/fnet/project/.gitignore.njk +7 -0
  102. package/template/fnet/project/.vscode/launch.json +41 -0
  103. package/template/fnet/project/.vscode/tasks.json +46 -0
  104. package/template/fnet/project/fnet/flows.yaml.njk +4 -0
  105. package/template/fnet/project/fnet/targets.yaml.njk +7 -0
  106. package/template/fnet/project/fnet.yaml.njk +3 -0
  107. package/template/fnode/bun/.gitignore.njk +8 -0
  108. package/template/fnode/bun/build.js.njk +156 -0
  109. package/template/fnode/bun/fnode.yaml.njk +1 -0
  110. package/template/fnode/bun/package.json.njk +89 -0
  111. package/template/fnode/bun/readme.md.njk +21 -0
  112. package/template/fnode/bun/src/app/index-js-with-react-host.njk +50 -0
  113. package/template/fnode/bun/src/app/index-js-without-react-host.njk +23 -0
  114. package/template/fnode/bun/src/app/index.html.njk +67 -0
  115. package/template/fnode/bun/src/app/index.js.njk +9 -0
  116. package/template/fnode/bun/src/cli/index.js.njk +81 -0
  117. package/template/fnode/bun/src/default/engine.js.njk +17 -0
  118. package/template/fnode/bun/src/default/to.args.js.njk +120 -0
  119. package/template/fnode/bun/tsconfig.json.njk +16 -0
  120. package/template/fnode/node/.gitignore.njk +8 -0
  121. package/template/fnode/node/fnode.yaml.njk +1 -0
  122. package/template/fnode/node/package.json.njk +90 -0
  123. package/template/fnode/node/readme.md.njk +21 -0
  124. package/template/fnode/node/rollup.config.mjs.njk +363 -0
  125. package/template/fnode/node/rollup_config_external.njk +8 -0
  126. package/template/fnode/node/rollup_config_onwarn.njk +9 -0
  127. package/template/fnode/node/rollup_config_output_banner.njk +3 -0
  128. package/template/fnode/node/rollup_config_output_footer.njk +5 -0
  129. package/template/fnode/node/rollup_config_output_globals.njk +9 -0
  130. package/template/fnode/node/rollup_config_output_name.njk +3 -0
  131. package/template/fnode/node/rollup_config_plugins.njk +90 -0
  132. package/template/fnode/node/src/app/index-js-with-react-host.njk +50 -0
  133. package/template/fnode/node/src/app/index-js-without-react-host.njk +23 -0
  134. package/template/fnode/node/src/app/index.html.njk +67 -0
  135. package/template/fnode/node/src/app/index.js.njk +9 -0
  136. package/template/fnode/node/src/cli/index.js.njk +81 -0
  137. package/template/fnode/node/src/default/engine.js.njk +17 -0
  138. package/template/fnode/node/src/default/to.args.js.njk +120 -0
  139. package/template/fnode/node/tsconfig.json.njk +16 -0
  140. package/template/fnode/project/.gitignore.njk +11 -0
  141. package/template/fnode/project/.vscode/launch.json.njk +78 -0
  142. package/template/fnode/project/.vscode/tasks.json.njk +46 -0
  143. package/template/fnode/project/fnet/targets.yaml.njk +25 -0
  144. package/template/fnode/project/fnode.yaml.njk +12 -0
  145. package/template/fnode/python/.gitignore.njk +7 -0
  146. package/template/fnode/python/fnode.yaml.njk +1 -0
  147. package/template/fnode/python/package.json.njk +4 -0
  148. package/template/fnode/python/pyproject.toml.njk +3 -0
  149. package/template/fnode/python/readme.md.njk +12 -0
  150. package/template/fnode/python/setup.py.njk +19 -0
  151. package/template/fnode/python/src/cli/index.py.njk +25 -0
  152. package/template/schemas/to-npm.yaml +14 -0
  153. package/dist/fnet/index.DZbefC4O.js +0 -1
  154. package/dist/fnode/index.DrdnDArw.js +0 -1
@@ -0,0 +1 @@
1
+ import e from"node:fs";import t from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import s from"@fnet/object-from-schema";import n from"yaml";import{r as m,w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"node:child_process";import"node:os";import"tree-kill";import"yargs";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"node:util";import"nunjucks";import"lodash.clonedeep";import"isobject";import"redis";import"@flownet/lib-is-redis-online";import"node:crypto";import"@flownet/lib-atom-api-js";import"lodash.merge";import"@flownet/lib-parse-imports-js";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@flownet/lib-parse-node-url";import"bpmn-moddle";import"dagre";import"@fnet/expression";import"chalk";import"@fnet/list-files";import"@fnet/key-value-transformer";import"lodash.pick";import"lodash.omit";async function l({atom:a,setProgress:l,context:c,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await l({message:"Deploying it as npm package."});const w=c.projectDir,b=t.resolve(w,"package.json"),h=e.readFileSync(b),j=JSON.parse(h);j.name=f.params.name,j.version=r.inc(f.version,"patch");const u=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&u&&"string"==typeof u&&(j.bin={[u]:"dist/cli/esm/index.js"}),delete j.scripts,delete j.devDependencies,j.scripts={serve:"npx serve ."},e.writeFileSync(b,JSON.stringify(j,null,"\t"));const g=f.config||"npm";let v=(await i({name:g,dir:c.projectDir,tags:c.tags,optional:!0}))?.data;if(!v){const r=m("./template/schemas/to-npm.yaml"),o=await s({schema:r,tags:c.tags}),i=c.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${g}.fnet`),n.stringify(o)),v=o}if(e.writeFileSync(t.resolve(w,".npmrc"),`//registry.npmjs.org/:_authToken=${v.env.NPM_TOKEN}`),!0!==f.dryRun){if(p("bun")){if(0!==(await o("bun publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(b,h),d.isDirty=!0,f.version=j.version,y.set("version",j.version)}}t.dirname(a(import.meta.url)),process.cwd();export{l as default};
@@ -0,0 +1 @@
1
+ import e from"fs";import r from"path";import n from"@fnet/yaml";import t from"@fnet/shell-flow";async function o({projectType:e,group:r,tags:o,args:f,argv:i}){try{const m=await a(e),{parsed:s}=await n({file:m.path,tags:o}),c=s.commands;if(!c)throw new Error(`Commands section not found in ${m.name}`);const y=c[r];if(!y)throw new Error(`Command group '${r}' not found in ${m.name}`);await t({commands:y,context:{args:f,argv:i,projectType:m.type}})}catch(e){console.error(`Error: ${e.message}`),process.exit(1)}}async function a(n){const t=process.cwd(),o=r.resolve(t,"fnode.yaml"),a=r.resolve(t,"fnet.yaml");if("fnode"===n){if(e.existsSync(o))return{path:o,name:"fnode.yaml",type:"fnode"};throw new Error("fnode.yaml file not found in current directory")}if("fnet"===n){if(e.existsSync(a))return{path:a,name:"fnet.yaml",type:"fnet"};throw new Error("fnet.yaml file not found in current directory")}if(e.existsSync(o))return{path:o,name:"fnode.yaml",type:"fnode"};if(e.existsSync(a))return{path:a,name:"fnet.yaml",type:"fnet"};throw new Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{a as detectProjectFile,o as runCommandGroup};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import e,{delimiter as t,join as o}from"node:path";import{fileURLToPath as n}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import a,{existsSync as r}from"node:fs";import c from"tree-kill";import p from"yaml";import l from"yargs";import d from"@fnet/prompt";import f from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import h from"@fnet/shell-flow";import y from"@flownet/lib-render-templates-dir";import{promisify as w}from"node:util";import g from"nunjucks";import x from"lodash.clonedeep";import b from"isobject";import k from"redis";import v from"@flownet/lib-is-redis-online";import{randomUUID as j}from"node:crypto";import{Api as _,Atom as D}from"@flownet/lib-atom-api-js";import E from"lodash.merge";import S from"@flownet/lib-parse-imports-js";import P from"@fnet/npm-list-versions";import $ from"@fnet/npm-pick-versions";import T from"object-hash";import C from"ajv/dist/2020.js";import N from"ajv/dist/standalone/index.js";import F from"ajv-formats";import A from"@flownet/lib-parse-node-url";import O from"bpmn-moddle";import I from"dagre";import B from"@fnet/expression";import K from"chalk";import R from"@fnet/list-files";import M from"@fnet/key-value-transformer";import J from"lodash.pick";import L from"lodash.omit";const z=e.dirname(n(import.meta.url));var q=e=>{const n=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=n.split(t);for(const t of s)for(const n of i){const i=o(t,"win32"===process.platform?e+n:e);if(r(i))return i}return null};const G=w(c);let W=!1;async function X(e,t){if(W)return;if(W=!0,!e.killed&&e.pid)try{await G(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await G(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const o="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(o)}function U(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await X(e,t)}))})),process.on("uncaughtException",(async t=>{await X(e)})),process.on("unhandledRejection",(async t=>{await X(e)})),e.on("close",(e=>{W||process.exit(e)}))}class V{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(_.set_api_url(e.data.url),t)return _.set_req_token(t),void o(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{_.set_req_token(e.access_token),o(e.access_token)})).catch((e=>{_.set_req_token(),n(e)}))}))}}function H({feature:e,features:t,packageDevDependencies:o}){const{name:n,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${n}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[n]?.options;f&&(d=E(d,f));const m=!t[n]||!1===t[n]?.enabled;l.forEach((e=>{const o=t.rollup_output[e];if(o){if(Reflect.has(o,n)){if(m||!o[n]||!1===o[n]?.enabled)return void delete o[n];!0===o[n]&&(o[n]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;o[n]={enabled:!0}}o[n]=o[n]||{},o[n].options={...d,...o[n].options}}}));let u=l.some((e=>!0===t.rollup_output[e][n]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>o.push({package:e[0],version:e[1]})))}function Y({dir:t,name:o="index"}){let n=e.resolve(t,`./${o}.tsx`);if(a.existsSync(n)||(n=e.resolve(t,`./${o}.ts`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.jsx`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.js`)),!a.existsSync(n))return{};const i=n,s=e.extname(n);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:o}}async function Q(t){const{atom:o,context:n,setProgress:i}=t;i("Initializing features..."),o.doc.features=o.doc.features||{};const s=o.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=e.resolve(n.project.projectDir),r=Y({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await S({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await S({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=Y({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await S({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await S({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===o.type){const t=Y({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await S({file:t.file,recursive:!0}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=o,s.src_has_entry=!0,e=await S({file:t.file}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=o,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===o.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===o.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.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===s.electron&&(d.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===s.nextjs&&(d.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===s.ios&&(d.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===s.macos&&(d.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===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=E({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=E(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=E({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=E(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=E(s.browsersync_options,t.browsersync_options),t.replace_options=E(s.replace_options,t.replace_options),s.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"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i=n.css&&!1!==n.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(n.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"])}})));H({feature:{name:"css",packages:s},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i={};!0===n.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:n.app.dir}),Reflect.has(n.app,"copy")||Reflect.has(n,"copy")||(n.copy=!0)),H({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;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:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t)}async function Z({projectDir:t,name:o,setProgress:n,count:i=1}){let s;const r=T(["npm-pick-versions",o,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(n&&n(`Picking npm version of ${o} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(n&&n(`Picking npm version of ${o} ...`),s=await $({name:o,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var ee=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.DZbefC4O.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},te={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function oe(e,t){return e.filter(((e,o,n)=>n.map((e=>e[t])).indexOf(e[t])===o))}function ne(e){const{nodes:t,nodeIndex:o,root:n}=e,i=e.targetNodes||n.childs;i.forEach((t=>{const o="workflow"===t.type||"subworkflow"===t.type,n=!o&&t.childs.filter((e=>!e.virtual)).length>0;if(n&&(t.bpmn.type="bpmn:SubProcess"),o||n){const o=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((o=>{const n=ie({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const n=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));n&&s.length&&s.forEach((o=>{const i=ie({location:t.childs.indexOf(o),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:n},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const o=ie({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}if(o)if(t.bpmn.starts.length>1){const o=ie({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),n=ie({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:n.indexKey})));const i=n.bpmn.edges.find((e=>!0===e.next));if(i){const o=ie({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=o.indexKey}}else{const n=ie({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});n.bpmn.edges.push({from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((o=>{o.bpmn.outside.forEach((n=>{const s=i.indexOf(t),a=ie({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:n.to,location:s+1});o.bpmn.edges.push({from:o.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((o=>{const n=i.indexOf(o),s=ie({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:n+1});s.bpmn.edges=o.bpmn.edges.map((e=>({...e,from:s.indexKey}))),o.bpmn.edges=[{from:o.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.outside=[]}))}ne({...e,targetNodes:t.childs})}))}function ie(e){const{parent:t,nodes:o,nodeIndex:n,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),o.push(f),n[f.indexKey]=f,f}function se(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=o.get("flowElements");o.$nodes=o.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,o.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((o=>{"attachedToRef"===o&&t.set(o,e.bpmn.attrs[o].$flow)}))}if(e.bpmn.definitions){const o=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((o=>{t.set(o,e.attrs[o])})),t}));t.eventDefinitions=o}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=o.get("flowElements");o.$edges=o.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const n=e,c=a[t.to],p=`edge.${n.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${n.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),o.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new I.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),o.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),o.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),I.layout(d),o.$nodes.forEach((e=>{const t=d.node(e.id);let o=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:o,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);n.get("planeElement").push(a)})),o.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),o=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:p+e.x,y:l+e.y});o.get("waypoint").push(t)}));n.get("planeElement").push(o)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const o=s[`node.${t.pathKey}`],n=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[n.id]=n,r.push(n);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,n.plane=a,a.bpmnElement=o,se({...e,targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:a})}))}(e)}async function ae(e){const t=e.root,o=t.context.index,n=Object.keys(o).map((e=>o[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],o=[],n=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&o.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&o.push({to:t,type:"bpmn:SequenceFlow"}),n(t)}))};n(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=o.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=oe(i,"to"),e.bpmn.outside=oe(s,"to"),e.bpmn.starts=oe(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:n}),ne({nodes:n,nodeIndex:o,root:t});const i=new O({atom:te}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;se({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:o,nodes:n,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function re(e={}){return await ae(x(e))}async function ce({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((o=>{const n={...t[o]};"modules"===e.type&&(n.export=n.export||o),e.definition.modules.push({[o]:n})}))}const o=[],n=await M({data:e.definition,callback:(e,t,n)=>{const i=B({expression:e});if("m"===i?.processor){const e=n.slice(0,-1);e.push(i.statement);const s=e.join("_");return o.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});o.length>0&&(e.definition=n,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(o)),e.hasModules=e.definition.modules?.length>0;for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function pe({node:e,transformExpression:t}){const o=e.context.transform;Reflect.has(o,"export")&&(o.export=await t(o.export)),Reflect.has(o,"return")&&(e.hasReturn=!0,o.return=await t(o.return)),o.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,o.nextArgs=await t(o.nextArgs))}async function le({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||x(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var de={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const o=e.definition.switch||[];if(!o.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===o.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=o.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!o[o.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===n.length,await ce({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=le},resolve:le};var fe={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>B({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition).map((e=>B({expression:e}))),n=[],i=o.find((e=>"if"===e?.processor)),s=t.definition[i.expression];n.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=o.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const o=t.definition[e.expression];n.push({name:`${t.name}_elseif_${r++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of n)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await de.init(e)}};async function me({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){if(e.context.transform=e.context.transform||x(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||x(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ue={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",await ce({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=me},resolve:me};async function he({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ye={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await ce({node:e,initNode:t}),e.resolve=he},resolve:he};async function we({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ge={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await ce({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[J(e.definition.for,t),L(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=we},resolve:we};var xe={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};async function be({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||x(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var ke={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=be},resolve:be};async function ve({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||x(e.definition);const n=e.context.transform;e.hasReturn=!0,n.return=await o(n.return),await t({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await n(e.target.atom.name)),i.args&&(i.args=await n(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await ce({node:e,initNode:t}),e.resolve=_e},resolve:_e};async function Ee({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||x(e.definition),await pe({node:e,transformExpression:t})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Ee},resolve:Ee};async function Pe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var $e={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await ce({node:e,initNode:t}),e.resolve=Pe},resolve:Pe};async function Te({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||x(e.definition),await t({node:e})}var Ce={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Te},resolve:Te};async function Ne({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);const i=e.context.transform;i.next=await n(i.next),await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Fe={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ne},resolve:Ne};async function Ae({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition),e.context.transform,await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Oe={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await ce({node:e,initNode:t}),e.resolve=Ae},resolve:Ae};function Ie({node:e}){const t=e.definition;if(!e.hasReturn)if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}}class Be{#e;#t;#o;#n;constructor({key:e,npm:t,master:o,extras:n}){this.#e=e,this.#t=t,this.#o=o,this.#n=n}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,o=this.#e,n=t.definition,i=typeof n[o];if(n.call=`npm:${this.#t}`,n.args="object"!==i?{...n.args,[`${this.#o}`]:n[o]}:n[o],delete n[o],this.#n)for(const e in this.#n)n[e]=this.#n[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await De.init(e)}}function Ke(e){return new Be(e)}class Re{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#w;#g;#x;#b;#k;#v;#j;#_;#D=[];constructor(e){this.#i=new V,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Ke({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Ke({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Ke({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Ke({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Ke({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Ke({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Ke({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Ke({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Ke({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Ke({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Ke({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Ke({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Ke({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Ke({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Ke({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:D,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:x,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ie,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await v({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=k.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||j(),this.#j.buildId=this.#u,this.#g=this.#s.mode,this.#x=["all","deploy","build","file"].includes(this.#g),this.#b=["all","deploy","build"].includes(this.#g),this.#k=["all","deploy"].includes(this.#g),this.#v=["all","deploy","build","file","bpmn"].includes(this.#g),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#w=(await u({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});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.initEntryFiles({root:e,features:this.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await Q(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:o,setProgress:n}){n("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>o.push(e))),"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 o="^18.2";n("Fetching React versions"),o=`^${(await P({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/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"}),o.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.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&o.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^28"}),o.push({package:"@rollup/plugin-node-resolve",version:"^16"}),o.push({package:"@rollup/plugin-replace",version:"^6"}),o.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":o.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":o.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":o.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":o.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":o.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#s.id&&(this.#f=await this.#i.init({config:this.#w}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await D.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await m({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;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",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((o=>{const n=e.join(t,o);this.#E(n)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,o){const n=a.existsSync(t),i=n&&a.statSync(t);n&&i.isDirectory()?(a.mkdirSync(o,{recursive:!0}),a.readdirSync(t).forEach((n=>{this.#S(e.join(t,n),e.join(o,n))}))):a.copyFileSync(t,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,o=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const n=R({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of n)a.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(o,s);const r=e.join(i,"default","blocks");a.existsSync(r)||a.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=g.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),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,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#a}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ue.hits(t))await ue.init(t);else if(await ge.hits(t))await ge.init(t);else if(await de.hits(t))await de.init(t);else if(await fe.hits(t))await fe.init(t);else if(await xe.hits(t))await xe.init(t);else if(await ye.hits(t))await ye.init(t);else if(await ke.hits(t))await ke.init(t);else if(await De.hits(t))await De.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await $e.hits(t))await $e.init(t);else if(await Ce.hits(t))await Ce.init(t);else if(await Se.hits(t))await Se.init(t);else if(await Fe.hits(t))await Fe.init(t);else if(await Oe.hits(t))await Oe.init(t);else{if(!await je.hits(t))throw new Error("Undefined step type.");await je.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:t,index:o}){const n=e.join(t.parent.indexKey,t.name);t.indexKey=n,o[n]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=j();for await(const e of t.childs)await this.initNodeIndex({node:e,index:o})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.import||e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom",definition:e.definition},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.import||e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const o of e)"form"!==o.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:o.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const o of e.childs){let e;if("main"===o.name)e="index.js";else if("cli"===o.name)e="cli.js";else if("app"===o.name)e="app.js";else{if("api"!==o.name)continue;e="api.js"}t[`${o.name}_default_entry_file`]=e,o.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name,libRef:n});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t,libRef:o}){const n=A({url:t});if(!n)throw new Error(`Invalid package name: ${t}`);if(n.protocol||(n.protocol=this.#y),"ac:"===n.protocol){const e=n.pathname.split("/");if(1===e.length)return await D.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await D.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await D.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.pathname}.js`),o=[],i=(await S({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Z({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:n.protocol}}if("npm:"===n.protocol){const e=await Z({name:n.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===o?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:e.minorRange,type:"npm"}]},protocol:n.protocol}}if("use:"===n.protocol){return{name:n.pathname,doc:{type:"function",dependencies:[]},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=e.context.transform||x(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n],type:typeof o[n]}}}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.#_,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:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const o=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<o.length;t++){const n=o[t].atom,i=this.#s.projectDir;if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.fileName||n.name}.js`),o=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let o="export default async (args)=>{\n";o+="}",a.writeFileSync(t,o,"utf8")}n.relativePath=o.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else if("use:"===n.protocol);else{const t=`${i}/src/libs/${n.id}.js`,o=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;a.writeFileSync(e.normalize(t),o.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const o=this.#s.templateDir,n=g.compile(a.readFileSync(e.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#c);for(let o=0;o<t.childs.length;o++){const i=t.childs[o];if(!i.entryFile)continue;const s=n.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=e.resolve(r,`src/default/${i.entryFile}`);a.writeFileSync(c,s,"utf8")}}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const o=this.#s.templateDir,n=g.compile(a.readFileSync(e.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);a.writeFileSync(s,n,"utf8");for await(const e of t.childs)await this.createType({node:e})}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":case"modules":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:t}){let o=this.#d[t.type];if(o)return o;const n=this.#s.templateDir;return o=g.compile(a.readFileSync(e.resolve(n,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=o,o}createStepFile({node:t}){const o=this.#s.projectDir,n=`${t.codeKey}.js`,i=e.resolve(o,`src/default/blocks/${n}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=n,t.context.filePath=i}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(b(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++){const n=t[o],i=B({expression:n});if(i)if("e"===i.processor){const t=e[n].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[n]}else e[n]=await this.transformValue(e[n]);else e[n]=await this.transformValue(e[n])}}else if("string"==typeof e){const t=B({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::c.module['${n}']::`;break;case"fm":e=`$::flow.getModule('${n}')::`;break;case"f":e=`$::c.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="fnet.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const{content:n,...i}=this.#a.doc,s={content:p.stringify(i)},r=this.#s.templateDir,c=g.compile(a.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),l=this.#s.projectDir,d=e.resolve(l,`${t}`);a.writeFileSync(d,c,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const n={content:p.stringify(this.#r)},i=this.#s.templateDir,s=g.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(n),r=this.#s.projectDir,c=e.resolve(r,`${t}`);a.writeFileSync(c,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(q("bun")){const o=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}else{const o=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#a.id){const e=await D.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await D.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:o}=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 n=Object.keys(t.doc||{}),i=o||{};for(let e=0;e<n.length;e++){const o=t.doc[n[e]];o.name=n[e];const s=i.get(n[e]);await ee({...this.#j,deploymentProject:t,deploymentProjectTarget:o,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#s.id)return;let n=await D.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await D.update(n,{id:n.id})):n=await D.create({parent_id:this.#w.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(K.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#x)return await this.createNetwork();try{const t=this.#v?await re({root:this.#m}):void 0;if(this.#x){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let o=this.#s.project?.projectDir||this.#s.projectDir;o=e.resolve(o,"fnet"),a.existsSync(o)&&a.writeFileSync(e.resolve(o,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:o,setProgress:n,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await n({message:r}),o.project?.readme){const t=o.projectDir,n={content:o.project.readme.doc.content},i=e.resolve(o.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");n.howto=e}const r=e.resolve(o.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await m({file:r,tags:o.tags});n.input=e.content}const c=e.resolve(o.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await m({file:c,tags:o.tags});n.output=e.content}const p=o.templateCommonDir,l=g.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),g.configure(p)).render(n),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"utf8")}else if(t.id){const n=await i.first({type:"wiki",parent_id:t.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:r,...c}=n.doc,p={content:r},l=o.templateCommonDir,d=g.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),g.configure(l)).render(p),f=o.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=g.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),g.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=g.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),g.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,o={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(o.default=e.default),s.properties&&(s.properties.fargs=o,s.properties.ftag=n)}const r={options:s,imports:[],atom:t},c=n.templateDir,p=g.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=n.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new C({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});F(f);const m=f.compile(s),u=N(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=n.templateDir,c=e.resolve(n.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await y({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await o({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=n.templateDir,c=e.resolve(n.projectDir,"src/app");a.existsSync(c)||a.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await y({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(n.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await S({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.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<c.length;e++){const o=c[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=n.templateCommonDir;let f=g.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),g.configure(d)).render(s);const m=n.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:o,packageDependencies:n,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),n.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const r=n.find((e=>"react"===e.package)),c=n.find((e=>"react-dom"===e.package));r&&!c?n.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.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 p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(o.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(o.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!a.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await S({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(n.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await Z({name:t.package,projectDir:o.projectDir,setProgress:s});(!0===e.dev?i:n).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:n,packageDevDependencies:i},d=o.templateCommonDir,f=g.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),g.configure(d)).render(l),m=o.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(o.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(o.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const n=a.readdirSync(h);for(const o of n){const n=e.resolve(h,o);if(!a.lstatSync(n).isFile())continue;const i=e.resolve(t,o);a.copyFileSync(n,i)}}}(this.#j),await async function({setProgress:t,context:o}){const n=o.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(q("bun")){const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}else{const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}}(this.#j),await async function({atom:e,setProgress:t,context:o}){if(!e.doc.features.dts_enabled)return;const n=o.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await f("tsc",{cwd:n})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#b&&(await async function({setProgress:e,atom:t,context:o}){const n=o.projectDir;if(await e({message:"Installing npm packages."}),q("bun")){if(0!==(await f(`bun install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await f(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const o=t.projectDir;if(await e({message:"Building main project."}),0!==(await f("npm run build",{cwd:o})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await re({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}const Me=e.dirname(n(import.meta.url)),Je=process.cwd();process.on("uncaughtException",(e=>{W||(W=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{W||(W=!0,setTimeout((()=>process.exit(1)),500))})),u({name:["redis"],dir:Je,optional:!0});const Le=function({baseDir:t}){let o=t=t||z;for(;o!==e.parse(o).root;){const t=e.join(o,"node_modules");if(a.existsSync(t))return t;o=e.dirname(o)}return null}({baseDir:Me}),ze="win32"===process.platform?";":":";Le&&(process.env.PATH=`${e.join(Le,"/.bin")}${ze}${process.env.PATH}`);let qe=l(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async t=>{try{const o=e.resolve(Le,"./@fnet/cli-project-flow/dist/template/project"),n=e.resolve(Je,t.name);a.existsSync(n)||a.mkdirSync(n),await y({dir:o,outDir:n,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await f("fnet build",{cwd:n});if(0!==i.code)throw new Error("Failed to build project.");if(q("git")&&(i=await f("git init --initial-branch=main",{cwd:n}),0!==i.code))throw new Error("Failed to initialize git.");if(q("code")&&t.vscode&&(i=await f(`cd ${n} && code .`),0!==i.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 t=>{try{const o=e.resolve(Le,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),i=await We(t);if(t.update){if(await y({dir:o,outDir:n,context:{name:i.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await f("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 We(e),o=new Re(t);await o.init(),await o.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 We({...e,mode:"all"}),o=new Re(t);await o.init(),await o.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 We({...e,mode:"file"}),o=new Re(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Ge(e,{name:t,bin:o,preArgs:n=[]}){return"function"==typeof o&&(o=o()),e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await We(e),{projectDir:s}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);U(i(o,[...n,...r],{cwd:s,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}async function We(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(Je,`./.output/${t.id}`),templateDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Le,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/core"),tags:t.ftag}}{const o=await async function({tags:t}){const o=e.resolve(Je,"fnet.yaml");if(!a.existsSync(o))throw new Error("fnet.yaml file not found in current directory.");const{raw:n,parsed:i}=await m({file:o,tags:t}),s=e.dirname(o);let r;if("object"==typeof i.flows)r=i.flows;else{let o="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(o=e.join("fnet","flows.yaml"));const n=i.main||o;let c=e.resolve(s,n);if(a.existsSync(c)){const{parsed:e}=await m({file:c,tags:t});r=e}else r={main:{steps:[]}}}const c={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:o,projectFileContent:n,projectFileParsed:i};let l=e.resolve(s,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(s,"flow.devops.yaml"),a.existsSync(l))){const t=e.resolve(s,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:o}=await m({file:l,tags:t}),n=p.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,n.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Le,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/core"),projectDir:e.resolve(o.projectDir,"./.workspace"),projectSrcDir:e.resolve(o.projectDir,"./src"),project:o,tags:t.ftag}}}qe=qe.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const o=await We(t),{project:n}=o,{projectDir:i,projectFileParsed:s}=n,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await d({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");a.existsSync(c)||a.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),l=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:l?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),qe=Ge(qe,{bin:"npm"}),qe=Ge(qe,{bin:"node"}),qe=Ge(qe,{bin:"bun"}),qe=Ge(qe,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),qe=Ge(qe,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),qe=Ge(qe,{name:"app",bin:"bun",preArgs:["run","app","--"]}),qe=Ge(qe,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),qe=Ge(qe,{bin:"npx"}),qe=Ge(qe,{bin:"cdk"}),qe=Ge(qe,{bin:"aws"}),qe=function(e,{name:t,preArgs:o=[]}){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 We(e),{projectDir:n}=t,s=e.config,r=await u({name:s,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);U(i(p,[...o,...l],{cwd:a.existsSync(n)?n:Je,stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(qe,{name:"with"}),qe=function(e,{name:t}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await We(e),{project:o}=t,{projectFileParsed:n}=o,i=n.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await h({commands:s,context:{args:e,argv:process.argv}})}catch(e){console.error(e.message),process.exit(1)}}))}(qe,{name:"run"}),qe.demandCommand(1,"You need at least one command before moving on").help().argv;export{q as w};
2
+ import e,{delimiter as t,join as n}from"node:path";import{fileURLToPath as o}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import a,{existsSync as r}from"node:fs";import c from"tree-kill";import p from"yaml";import l from"yargs";import d from"@fnet/prompt";import f from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import"@fnet/shell-flow";import h from"@flownet/lib-render-templates-dir";import{promisify as y}from"node:util";import w from"nunjucks";import g from"lodash.clonedeep";import x from"isobject";import b from"redis";import k from"@flownet/lib-is-redis-online";import{randomUUID as v}from"node:crypto";import{Api as j,Atom as _}from"@flownet/lib-atom-api-js";import D from"lodash.merge";import E from"@flownet/lib-parse-imports-js";import S from"@fnet/npm-list-versions";import P from"@fnet/npm-pick-versions";import $ from"object-hash";import T from"ajv/dist/2020.js";import N from"ajv/dist/standalone/index.js";import C from"ajv-formats";import F from"@flownet/lib-parse-node-url";import A from"bpmn-moddle";import O from"dagre";import I from"@fnet/expression";import B from"chalk";import K from"@fnet/list-files";import R from"@fnet/key-value-transformer";import M from"lodash.pick";import J from"lodash.omit";const L=e.dirname(o(import.meta.url));var z=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=n(t,"win32"===process.platform?e+o:e);if(r(i))return i}return null};const G=y(c);let q=!1;async function W(e,t){if(q)return;if(q=!0,!e.killed&&e.pid)try{await G(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await G(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const n="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(n)}function X(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await W(e,t)}))})),process.on("uncaughtException",(async t=>{await W(e)})),process.on("unhandledRejection",(async t=>{await W(e)})),e.on("close",(e=>{q||process.exit(e)}))}const U=e.dirname(o(import.meta.url)),V=process.cwd();function H(t){const n=e.resolve(V,t);if(a.existsSync(n))return n;const o=e.resolve(U,"../..",t);if(a.existsSync(o))return o;throw new Error(`Template path not found: ${t}`)}class Y{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(j.set_api_url(e.data.url),t)return j.set_req_token(t),void n(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{j.set_req_token(e.access_token),n(e.access_token)})).catch((e=>{j.set_req_token(),o(e)}))}))}}function Q({feature:e,features:t,packageDevDependencies:n}){const{name:o,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[o]?.options;f&&(d=D(d,f));const m=!t[o]||!1===t[o]?.enabled;l.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=l.some((e=>!0===t.rollup_output[e][o]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))}function Z({dir:t,name:n="index"}){let o=e.resolve(t,`./${n}.tsx`);if(a.existsSync(o)||(o=e.resolve(t,`./${n}.ts`)),a.existsSync(o)||(o=e.resolve(t,`./${n}.jsx`)),a.existsSync(o)||(o=e.resolve(t,`./${n}.js`)),!a.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:n}}async function ee(t){const{atom:n,context:o,setProgress:i}=t;i("Initializing features..."),n.doc.features=n.doc.features||{};const s=n.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=e.resolve(o.project.projectDir),r=Z({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await E({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await E({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=Z({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await E({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await E({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===n.type){const t=Z({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await E({file:t.file,recursive:!0}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=n,s.src_has_entry=!0,e=await E({file:t.file}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=n,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===n.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===n.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.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===s.electron&&(d.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===s.nextjs&&(d.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===s.ios&&(d.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===s.macos&&(d.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===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=D({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=D(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=D({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=D(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=D(s.browsersync_options,t.browsersync_options),t.replace_options=D(s.replace_options,t.replace_options),s.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"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(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"])}})));Q({feature:{name:"css",packages:s},features:o,packageDevDependencies:n})}(t),function(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)),Q({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({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:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;Q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t)}async function te({projectDir:t,name:n,setProgress:o,count:i=1}){let s;const r=$(["npm-pick-versions",n,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(o&&o(`Picking npm version of ${n} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(o&&o(`Picking npm version of ${n} ...`),s=await P({name:n,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var ne=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.DBSKvJyG.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},oe={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function ie(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function se(e){const{nodes:t,nodeIndex:n,root:o}=e,i=e.targetNodes||o.childs;i.forEach((t=>{const n="workflow"===t.type||"subworkflow"===t.type,o=!n&&t.childs.filter((e=>!e.virtual)).length>0;if(o&&(t.bpmn.type="bpmn:SubProcess"),n||o){const n=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((n=>{const o=ae({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const o=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));o&&s.length&&s.forEach((n=>{const i=ae({location:t.childs.indexOf(n),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:o},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const n=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}if(n)if(t.bpmn.starts.length>1){const n=ae({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=ae({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:o.indexKey})));const i=o.bpmn.edges.find((e=>!0===e.next));if(i){const n=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=n.indexKey}}else{const o=ae({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});o.bpmn.edges.push({from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((n=>{n.bpmn.outside.forEach((o=>{const s=i.indexOf(t),a=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:o.to,location:s+1});n.bpmn.edges.push({from:n.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((n=>{const o=i.indexOf(n),s=ae({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:o+1});s.bpmn.edges=n.bpmn.edges.map((e=>({...e,from:s.indexKey}))),n.bpmn.edges=[{from:n.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.outside=[]}))}se({...e,targetNodes:t.childs})}))}function ae(e){const{parent:t,nodes:n,nodeIndex:o,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),n.push(f),o[f.indexKey]=f,f}function re(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=n.get("flowElements");n.$nodes=n.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,n.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((n=>{"attachedToRef"===n&&t.set(n,e.bpmn.attrs[n].$flow)}))}if(e.bpmn.definitions){const n=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((n=>{t.set(n,e.attrs[n])})),t}));t.eventDefinitions=n}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a}=e,r=n.get("flowElements");n.$edges=n.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const o=e,c=a[t.to],p=`edge.${o.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${o.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),n.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new O.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),n.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),n.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),O.layout(d),n.$nodes.forEach((e=>{const t=d.node(e.id);let n=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:n,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);o.get("planeElement").push(a)})),n.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),n=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:p+e.x,y:l+e.y});n.get("waypoint").push(t)}));o.get("planeElement").push(n)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const n=s[`node.${t.pathKey}`],o=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[o.id]=o,r.push(o);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,o.plane=a,a.bpmnElement=n,re({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:a})}))}(e)}async function ce(e){const t=e.root,n=t.context.index,o=Object.keys(n).map((e=>n[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],n=[],o=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&n.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&n.push({to:t,type:"bpmn:SequenceFlow"}),o(t)}))};o(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=n.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=ie(i,"to"),e.bpmn.outside=ie(s,"to"),e.bpmn.starts=ie(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:o}),se({nodes:o,nodeIndex:n,root:t});const i=new A({atom:oe}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;re({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:n,nodes:o,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function pe(e={}){return await ce(g(e))}async function le({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((n=>{const o={...t[n]};"modules"===e.type&&(o.export=o.export||n),e.definition.modules.push({[n]:o})}))}const n=[],o=await R({data:e.definition,callback:(e,t,o)=>{const i=I({expression:e});if("m"===i?.processor){const e=o.slice(0,-1);e.push(i.statement);const s=e.join("_");return n.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});n.length>0&&(e.definition=o,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(n)),e.hasModules=e.definition.modules?.length>0;for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function de({node:e,transformExpression:t}){const n=e.context.transform;Reflect.has(n,"export")&&(n.export=await t(n.export)),Reflect.has(n,"return")&&(e.hasReturn=!0,n.return=await t(n.return)),n.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,n.nextArgs=await t(n.nextArgs))}async function fe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||g(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var me={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const n=e.definition.switch||[];if(!n.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===n.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=n.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!n[n.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===o.length,await le({node:e,initNode:t}),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 s={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=fe},resolve:fe};var ue={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>I({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition).map((e=>I({expression:e}))),o=[],i=n.find((e=>"if"===e?.processor)),s=t.definition[i.expression];o.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=n.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const n=t.definition[e.expression];o.push({name:`${t.name}_elseif_${r++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of o)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await me.init(e)}};async function he({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){if(e.context.transform=e.context.transform||g(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||g(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ye={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",await le({node:e,initNode:t}),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=he},resolve:he};async function we({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(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],s=t[n],a={key:await o(n),value:await o(s)};i.assign[e]=a}await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ge={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await le({node:e,initNode:t}),e.resolve=we},resolve:we};async function xe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var be={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await le({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[M(e.definition.for,t),J(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],s={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=xe},resolve:xe};var ke={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}){}};async function ve({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||g(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||g(e.definition);const o=e.context.transform;e.hasReturn=!0,o.return=await n(o.return),await t({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=_e},resolve:_e};async function Ee({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await o(e.target.atom.name)),i.args&&(i.args=await o(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],n=Object.keys(t)[0],s=t[n],a={key:await o(n),value:await o(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await le({node:e,initNode:t}),e.resolve=Ee},resolve:Ee};async function Pe({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||g(e.definition),await de({node:e,transformExpression:t})}var $e={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=Pe},resolve:Pe};async function Te({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Ne={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await le({node:e,initNode:t}),e.resolve=Te},resolve:Te};async function Ce({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||g(e.definition),await t({node:e})}var Fe={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Ce},resolve:Ce};async function Ae({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition);const i=e.context.transform;i.next=await o(i.next),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Oe={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ae},resolve:Ae};async function Ie({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition),e.context.transform,await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Be={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await le({node:e,initNode:t}),e.resolve=Ie},resolve:Ie};function Ke({node:e}){const t=e.definition;if(!e.hasReturn)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{if(!0===e.module)return;let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(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}}}class Re{#e;#t;#n;#o;constructor({key:e,npm:t,master:n,extras:o}){this.#e=e,this.#t=t,this.#n=n,this.#o=o}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,n=this.#e,o=t.definition,i=typeof o[n];if(o.call=`npm:${this.#t}`,o.args="object"!==i?{...o.args,[`${this.#n}`]:o[n]}:o[n],delete o[n],this.#o)for(const e in this.#o)o[e]=this.#o[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await Se.init(e)}}function Me(e){return new Re(e)}class Je{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#w;#g;#x;#b;#k;#v;#j;#_;#D=[];constructor(e){this.#i=new Y,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Me({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Me({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Me({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Me({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Me({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Me({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Me({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Me({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Me({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Me({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Me({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Me({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Me({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Me({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Me({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:_,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:g,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ke,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 async function(){if(!await k({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=b.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||v(),this.#j.buildId=this.#u,this.#g=this.#s.mode,this.#x=["all","deploy","build","file"].includes(this.#g),this.#b=["all","deploy","build"].includes(this.#g),this.#k=["all","deploy"].includes(this.#g),this.#v=["all","deploy","build","file","bpmn"].includes(this.#g),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#w=(await u({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});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.initEntryFiles({root:e,features:this.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await ee(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>n.push(e))),"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";o("Fetching React versions"),n=`^${(await S({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:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/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.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&n.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^28"}),n.push({package:"@rollup/plugin-node-resolve",version:"^16"}),n.push({package:"@rollup/plugin-replace",version:"^6"}),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.10"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#s.id&&(this.#f=await this.#i.init({config:this.#w}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await _.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await m({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;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",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((n=>{const o=e.join(t,n);this.#E(o)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,n){const o=a.existsSync(t),i=o&&a.statSync(t);o&&i.isDirectory()?(a.mkdirSync(n,{recursive:!0}),a.readdirSync(t).forEach((o=>{this.#S(e.join(t,o),e.join(n,o))}))):a.copyFileSync(t,n)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,n=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const o=K({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of o)a.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(n,s);const r=e.join(i,"default","blocks");a.existsSync(r)||a.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=w.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),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.#a}};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.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ye.hits(t))await ye.init(t);else if(await be.hits(t))await be.init(t);else if(await me.hits(t))await me.init(t);else if(await ue.hits(t))await ue.init(t);else if(await ke.hits(t))await ke.init(t);else if(await ge.hits(t))await ge.init(t);else if(await je.hits(t))await je.init(t);else if(await Se.hits(t))await Se.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await Ne.hits(t))await Ne.init(t);else if(await Fe.hits(t))await Fe.init(t);else if(await $e.hits(t))await $e.init(t);else if(await Oe.hits(t))await Oe.init(t);else if(await Be.hits(t))await Be.init(t);else{if(!await De.hits(t))throw new Error("Undefined step type.");await De.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:t,index:n}){const o=e.join(t.parent.indexKey,t.name);t.indexKey=o,n[o]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=v();for await(const e of t.childs)await this.initNodeIndex({node:e,index:n})}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.import||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.import||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 initFeaturesFromNodes({childs:e,features:t}){for await(const n of e)"form"!==n.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:n.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const n of e.childs){let e;if("main"===n.name)e="index.js";else if("cli"===n.name)e="cli.js";else if("app"===n.name)e="app.js";else{if("api"!==n.name)continue;e="api.js"}t[`${n.name}_default_entry_file`]=e,n.entryFile=e}}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 s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.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:t,libRef:n}){const o=F({url:t});if(!o)throw new Error(`Invalid package name: ${t}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const e=o.pathname.split("/");if(1===e.length)return await _.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await _.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await _.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.pathname}.js`),n=[],i=(await E({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=await te({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});n.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:o.protocol}}if("npm:"===o.protocol){const e=await te({name:o.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===n?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=e.context.transform||g(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],type:typeof 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.#_,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:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const n=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<n.length;t++){const o=n[t].atom,i=this.#s.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.fileName||o.name}.js`),n=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let n="export default async (args)=>{\n";n+="}",a.writeFileSync(t,n,"utf8")}o.relativePath=n.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else if("use:"===o.protocol);else{const t=`${i}/src/libs/${o.id}.js`,n=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;a.writeFileSync(e.normalize(t),n.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const n=this.#s.templateDir,o=w.compile(a.readFileSync(e.resolve(n,"src/default/engine.js.njk"),"utf8"),this.#c);for(let n=0;n<t.childs.length;n++){const i=t.childs[n];if(!i.entryFile)continue;const s=o.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=e.resolve(r,`src/default/${i.entryFile}`);a.writeFileSync(c,s,"utf8")}}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const n=this.#s.templateDir,o=w.compile(a.readFileSync(e.resolve(n,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);a.writeFileSync(s,o,"utf8");for await(const e of t.childs)await this.createType({node:e})}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":case"modules":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:t}){let n=this.#d[t.type];if(n)return n;const o=this.#s.templateDir;return n=w.compile(a.readFileSync(e.resolve(o,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=n,n}createStepFile({node:t}){const n=this.#s.projectDir,o=`${t.codeKey}.js`,i=e.resolve(n,`src/default/blocks/${o}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=o,t.context.filePath=i}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(x(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],i=I({expression:o});if(i)if("e"===i.processor){const t=e[o].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[o]}else e[o]=await this.transformValue(e[o]);else e[o]=await this.transformValue(e[o])}}else if("string"==typeof e){const t=I({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=`$::c.module['${o}']::`;break;case"fm":e=`$::flow.getModule('${o}')::`;break;case"f":e=`$::c.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 t="fnet.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const{content:o,...i}=this.#a.doc,s={content:p.stringify(i)},r=this.#s.templateDir,c=w.compile(a.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),l=this.#s.projectDir,d=e.resolve(l,`${t}`);a.writeFileSync(d,c,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const o={content:p.stringify(this.#r)},i=this.#s.templateDir,s=w.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(o),r=this.#s.projectDir,c=e.resolve(r,`${t}`);a.writeFileSync(c,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(z("bun")){const n=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}else{const n=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.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.#a.id){const e=await _.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await _.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 s=i.get(o[e]);await ne({...this.#j,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#s.id)return;let o=await _.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await _.update(o,{id:o.id})):o=await _.create({parent_id:this.#w.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(B.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#x)return await this.createNetwork();try{const t=this.#v?await pe({root:this.#m}):void 0;if(this.#x){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let n=this.#s.project?.projectDir||this.#s.projectDir;n=e.resolve(n,"fnet"),a.existsSync(n)&&a.writeFileSync(e.resolve(n,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:n,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),n.project?.readme){const t=n.projectDir,o={content:n.project.readme.doc.content},i=e.resolve(n.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(n.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await m({file:r,tags:n.tags});o.input=e.content}const c=e.resolve(n.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await m({file:c,tags:n.tags});o.output=e.content}const p=n.templateDir,l=w.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),w.configure(p)).render(o),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...c}=o.doc,p={content:r},l=n.templateDir,d=w.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),w.configure(l)).render(p),f=n.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=w.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),w.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateDir,c=w.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),w.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.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(e,"default")&&(n.default=e.default),s.properties&&(s.properties.fargs=n,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},c=o.templateDir,p=w.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new T({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});C(f);const m=f.compile(s),u=N(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.resolve(o.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await h({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await n({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,c=e.resolve(o.projectDir,"src/app");a.existsSync(c)||a.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await h({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await E({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.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<c.length;e++){const n=c[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(c)}}const d=o.templateDir;let f=w.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),w.configure(d)).render(s);const m=o.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:n,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),c=o.find((e=>"react-dom"===e.package));r&&!c?o.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(n.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(n.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!a.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await E({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await te({name:t.package,projectDir:n.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=n.templateDir,f=w.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),w.configure(d)).render(l),m=n.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(n.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(n.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const o=a.readdirSync(h);for(const n of o){const o=e.resolve(h,n);if(!a.lstatSync(o).isFile())continue;const i=e.resolve(t,n);a.copyFileSync(o,i)}}}(this.#j),await async function({setProgress:t,context:n}){const o=n.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(z("bun")){const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}else{const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}}(this.#j),await async function({atom:e,setProgress:t,context:n}){if(!e.doc.features.dts_enabled)return;const o=n.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await f("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#b&&(await async function({setProgress:e,atom:t,context:n}){const o=n.projectDir;if(await e({message:"Installing npm packages."}),z("bun")){if(0!==(await f(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await f(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const n=t.projectDir;if(await e({message:"Building main project."}),0!==(await f("npm run build",{cwd:n})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await pe({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}const Le=e.dirname(o(import.meta.url)),ze=process.cwd();process.on("uncaughtException",(e=>{q||(q=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{q||(q=!0,setTimeout((()=>process.exit(1)),500))})),u({name:["redis"],dir:ze,optional:!0});const Ge=function({baseDir:t}){let n=t=t||L;for(;n!==e.parse(n).root;){const t=e.join(n,"node_modules");if(a.existsSync(t))return t;n=e.dirname(n)}return null}({baseDir:Le}),qe="win32"===process.platform?";":":";Ge&&(process.env.PATH=`${e.join(Ge,"/.bin")}${qe}${process.env.PATH}`);let We=l(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async t=>{try{const n=H("./template/fnet/project"),o=e.resolve(ze,t.name);a.existsSync(o)||a.mkdirSync(o),await h({dir:n,outDir:o,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await f("fnet build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(z("git")&&(i=await f("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(z("code")&&t.vscode&&(i=await f(`cd ${o} && code .`),0!==i.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=H("./template/fnet/project"),n=process.cwd(),o=await Ue(e);if(e.update){if(await h({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await f("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 Ue(e),n=new Je(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 Ue({...e,mode:"all"}),n=new Je(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 Ue({...e,mode:"file"}),n=new Je(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 Xe(e,{name:t,bin:n,preArgs:o=[]}){return"function"==typeof n&&(n=n()),e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ue(e),{projectDir:s}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);X(i(n,[...o,...r],{cwd:s,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ue(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(ze,`./.output/${t.id}`),templateDir:H("./template/fnet/node"),coreDir:H("./template/fnet/core"),tags:t.ftag}}{const n=await async function({tags:t}){const n=e.resolve(ze,"fnet.yaml");if(!a.existsSync(n))throw new Error("fnet.yaml file not found in current directory.");const{raw:o,parsed:i}=await m({file:n,tags:t}),s=e.dirname(n);let r;if("object"==typeof i.flows)r=i.flows;else{let n="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(n=e.join("fnet","flows.yaml"));const o=i.main||n;let c=e.resolve(s,o);if(a.existsSync(c)){const{parsed:e}=await m({file:c,tags:t});r=e}else r={main:{steps:[]}}}const c={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:n,projectFileContent:o,projectFileParsed:i};let l=e.resolve(s,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(s,"flow.devops.yaml"),a.existsSync(l))){const t=e.resolve(s,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:n}=await m({file:l,tags:t}),o=p.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:H("./template/fnet/node"),coreDir:H("./template/fnet/core"),projectDir:e.resolve(n.projectDir,"./.workspace"),projectSrcDir:e.resolve(n.projectDir,"./src"),project:n,tags:t.ftag}}}We=We.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const n=await Ue(t),{project:o}=n,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await d({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");a.existsSync(c)||a.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),l=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:l?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),We=Xe(We,{bin:"npm"}),We=Xe(We,{bin:"node"}),We=Xe(We,{bin:"bun"}),We=Xe(We,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),We=Xe(We,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),We=Xe(We,{name:"app",bin:"bun",preArgs:["run","app","--"]}),We=Xe(We,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),We=Xe(We,{bin:"npx"}),We=Xe(We,{bin:"cdk"}),We=Xe(We,{bin:"aws"}),We=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 Ue(e),{projectDir:o}=t,s=e.config,r=await u({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);X(i(p,[...n,...l],{cwd:a.existsSync(o)?o:ze,stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(We,{name:"with"}),We=function(e,{name:t}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:t}=await import("./index.DrwlOzAe.js");await t({projectType:"fnet",group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(We,{name:"run"}),We.demandCommand(1,"You need at least one command before moving on").help().argv;export{H as r,z as w};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import r from"node:path";import t from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/object-from-schema";import s from"yaml";import{r as m,w as a}from"./index.js";import{fileURLToPath as p}from"node:url";import"node:child_process";import"node:os";import"yargs";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"node:util";import"tree-kill";async function c({atom:p,setProgress:c,context:l,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await c({message:"Deploying it as npm package."});const g=l.projectDir,w=r.resolve(g,"package.json"),u=e.readFileSync(w),b=JSON.parse(u);b.name=f.params.name,b.version=t.inc(f.version,"patch");const h=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&h&&"string"==typeof h&&(b.bin={[h]:"dist/cli/esm/index.js"}),delete b.scripts,delete b.devDependencies,b.scripts={serve:"npx serve ."},e.writeFileSync(w,JSON.stringify(b,null,"\t"));const v=f.config||"npm";let j=(await i({name:v,dir:l.projectDir,tags:l.tags,optional:!0}))?.data;if(!j){const t=m("./template/schemas/to-npm.yaml"),o=await n({schema:t,tags:l.tags}),i=l.project.projectDir,a=r.resolve(i,".fnet");e.existsSync(a)||e.mkdirSync(a),e.writeFileSync(r.resolve(a,`${v}.fnet`),s.stringify(o)),j=o}if(e.writeFileSync(r.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${j.env.NPM_TOKEN}`),!0!==f.dryRun){if(a("bun")){if(0!==(await o("bun publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(w,u),d.isDirty=!0,f.version=b.version,y.set("version",b.version)}}r.dirname(p(import.meta.url)),process.cwd();export{c as default};
@@ -0,0 +1 @@
1
+ import e from"lodash.merge";import t from"node:fs";import a from"node:path";import s from"@flownet/lib-parse-imports-js";import{h as r,j as n,k as i,l as o,m as l}from"./index.CLlKzCGk.js";import p from"@fnet/npm-list-versions";import c from"nunjucks";function d({dir:e,name:s="index"}){let r=a.resolve(e,`./${s}.tsx`);if(t.existsSync(r)||(r=a.resolve(e,`./${s}.ts`)),t.existsSync(r)||(r=a.resolve(e,`./${s}.jsx`)),t.existsSync(r)||(r=a.resolve(e,`./${s}.js`)),!t.existsSync(r))return{};const n=r,i=a.extname(r);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:s}}async function f({atom:t,context:p,setProgress:c}){await c({message:"Initializing features..."}),t.doc.features=t.doc.features||{};const f=t.doc.features;f.project=f.project||{},f.project.format=f.project.format||f.project_format||"esm",f.project_format=f.project.format,f.dts_enabled=!0===f.dts||void 0!==f.dts&&!1!==f.dts;const u=a.resolve(p.project.projectDir),m=d({dir:a.resolve(u,"./app")});if(m.file){c("Parsing app entry imports...");let e=await s({file:m.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));f.app_uses_jsx=t,f.app_has_entry=!0,e=await s({file:m.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),f.app_entry_uses_jsx=t,f.app_entry_is_ts=m.ts,f.app_entry_ext=m.ext}const _=d({dir:a.resolve(u,"./cli")});if(_.file){c("Parsing cli entry imports...");let e=await s({file:_.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));f.cli_uses_jsx=t,f.cli_has_entry=!0,e=await s({file:_.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),f.cli_entry_uses_jsx=t,f.cli_entry_is_ts=_.ts,f.cli_entry_ext=_.ext}if("workflow.lib"===t.type){const e=d({dir:a.resolve(u,"./src")});if(e.file){c("Parsing src entry imports...");let t=await s({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));f.src_uses_jsx=a,f.src_has_entry=!0,t=await s({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),f.src_entry_uses_jsx=a,f.src_entry_is_ts=e.ts,f.src_entry_ext=e.ext}}const y=Reflect.has(f,"app_entry_uses_jsx")?!0===f.app_entry_uses_jsx:!0===f.src_entry_uses_jsx,b=Reflect.has(f,"cli_entry_uses_jsx")?!0===f.cli_entry_uses_jsx:!0===f.src_entry_uses_jsx;f.form_enabled=y||b||!0===f.form||!0===f.form?.enabled,f.multiple_enabled=f.multiple_enabled||!0===f.multiple||!0===f.multiple?.enabled,!1===f.app?f.app={enabled:!1}:!0===f.app?f.app={enabled:!0,extend:!0===f.app_has_entry,export:!0,react:y}:f.app={enabled:!0,extend:!0===f.app_has_entry,export:!0,react:y,...f.app||{}},f.app.enabled=!0===f.app.enabled&&(!0===t.doc.features.form_enabled||!0===f.app.extend||!0===f.app.enabled),f.app.format=f.app.format||"esm",f.app.folder=f.app.folder||f.app.format||"esm",f.app.dir=`./dist/app/${f.app.folder}`,f.app.html=!1!==f.app.html,!1===f.cli?f.cli={enabled:!1}:!0===f.cli?f.cli={enabled:!0,extend:!0===f.cli_has_entry,export:!0,react:b}:f.cli={enabled:!0,extend:!0===f.cli_has_entry,export:!0,react:b,...f.cli||{}},f.cli.enabled=!0===f.cli.enabled&&(!1===t.doc.features.form_enabled||!0===f.cli.extend||!0===f.cli.enabled),f.cli.format=f.cli.format||"esm",f.cli.folder=f.cli.folder||f.cli.folder||"esm",f.cli.dir=`./dist/cli/${f.cli.folder}`,f.cli.node_options=f.cli.node?.options||f.cli.node_options||"",f.json=f.cli.enabled||f.json,f.bun=f.bun||{},f.bun.build=f.bun.build||{};const x={default:{format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/esm"},defaultCjs:{format:"cjs",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/cjs"}};f.cli.enabled&&(x.cli={format:"esm",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/cli/index.js"],outdir:f.cli.dir}),f.app.enabled&&(x.app={format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/app/index.js"],outdir:f.app.dir}),f.bun.build=e(x,f.bun.build||{}),f.preact_enabled=!0===f.preact||f.preact&&!1!==f.preact?.enabled,f.dependency_auto_enabled=!1!==f.dependency_auto&&!1!==f.dependency_auto?.enabled,f.npm_install_flags=f.npm_install_flags||"",f.react_version=f.react_version||f.react?.version||18,f.runtime=f.runtime||{},f.runtime.type="bun",f.runtime.template="bun",r({atom:t}),n({atom:t}),i({atom:t}),o({atom:t}),l({atom:t})}async function u({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:s}){s("Initializing dependencies for Bun");const r=e.doc.dependencies||[];if(r.filter((e=>!e.dev)).forEach((e=>t.push(e))),r.filter((e=>e.dev)).forEach((e=>a.push(e))),"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";s("Fetching React versions");a=`^${(await p({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:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/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.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}async function m({atom:e,setProgress:s,context:r,packageDependencies:n}){await s({message:"Creating build.js file."});const i={atom:e,packageDependencies:n},o=r.templateDir,l=c.compile(t.readFileSync(a.resolve(o,"build.js.njk"),"utf8"),c.configure(o)).render(i),p=r.projectDir,d=a.resolve(p,"build.js");t.writeFileSync(d,l,"utf8"),t.chmodSync(d,"755")}export{u as a,m as c,f as i};
@@ -0,0 +1 @@
1
+ import t from"node:fs";import i from"node:path";import e from"node:os";import s from"@fnet/list-files";import{B as o}from"./index.Bqzc7Bx8.js";import{i as r,a,c as n,b as c}from"./index.BBrItYB9.js";import{c as l,a as m}from"./index.BwhWziH6.js";import"node:crypto";import"yaml";import"nunjucks";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@flownet/lib-render-templates-dir";import"@fnet/auto-conda-env";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";class d extends o{async initRuntime(){await r(this.apiContext),await a(this.apiContext),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const o=this.context.projectDir;this.setProgress({message:"Cleaning project directory."});const r=s({dir:o,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const i of r)t.rmSync(i,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=o;t.existsSync(a)||t.mkdirSync(a,{recursive:!0}),a=i.join(o,"src"),t.existsSync(a)||t.mkdirSync(a,{recursive:!0}),a=i.join(o,"src","default");const n=this.context.projectSrcDir;if(!t.existsSync(a))try{"win32"===e.platform()?t.symlinkSync(n,a,"junction"):t.symlinkSync(n,a,"dir")}catch(t){throw new Error(`Couldn't create symlink. Error: ${t.message}`)}}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const t=this.atom;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const i=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id,atom:t}];this.libs=i}async createAtomLibFilesPython({libs:e}){await this.setProgress({message:"Creating external lib files."});const s=e.filter((t=>"atom"===t.type));for(let e=0;e<s.length;e++){const o=s[e].atom;if("local:"===o.protocol){const e=i.resolve(this.context.projectSrcDir,`${o.fileName||o.name}.py`);if(!t.existsSync(e)){t.mkdirSync(i.dirname(e),{recursive:!0});let s="def default():\n";s+=' print("Hello world!")\n',t.writeFileSync(e,s,"utf8")}}}}async build(){try{this.fileMode&&(await this.createAtomLibFilesPython({libs:this.libs}),await this.createProjectYaml(),await l(this.apiContext),await m(this.apiContext),await n(this.apiContext),this.buildMode&&(await c(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(t){throw await this._cache_set(this.buildKey,{status:"FAILED",message:t.message||t}),console.log(t),t}}}export{d as default};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import a from"node:path";import n from"@flownet/lib-render-templates-dir";import t from"@fnet/auto-conda-env";async function r(e){const{atom:a,context:n,setProgress:t}=e;t("Initializing features..."),a.doc.features=a.doc.features||{};const r=a.doc.features;!1===r.cli?r.cli={enabled:!1}:(r.cli,r.cli={enabled:!0}),r.cli.enabled=!0===r.cli.enabled&&(!1===a.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled)}async function i({atom:e,packageDependencies:a,packageDevDependencies:n,setProgress:t}){t("Initializing dependencies")}async function o({atom:t,setProgress:r,context:i,packageDependencies:o}){if(!0!==t.doc.features.cli.enabled)return;await r({message:"Creating cli."});const s={atom:t,packageDependencies:o},c=i.templateDir,p=a.join(i.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await n({pattern:["index.py.njk","__init__.py.njk"],dir:a.join(c,"src","cli"),outDir:p,context:s})}async function s(e){const{setProgress:r,atom:i,context:o}=e;r({message:"Installing Python packages"});const s=o.projectDir,c=await t({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:p,result:d}=await c.runBin("fnet_import_parser",["--entry_file",a.join(s,"src","default","index.py")],{captureName:"result"});if(p)throw new Error(p.format());const m=JSON.parse(d.items[0].stdout),l=m.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],f=i.doc.dependencies||[];for(const e of l)f.some((a=>a.package===e.package))||f.push(e);const u=a.join(s,".conda"),g=await t({envDir:u,pythonVersion:i.doc.features.runtime.version||"3.12",packages:f});o.pythonEnv=g,e.packageDependencies=f;const k=i.doc.features.render?.dirs||[];for(const e of k)e.dir=a.resolve(s,e.dir),e.outDir=a.resolve(s,e.outDir),await n(e);let y={params:{}};y.params.package_name=i.doc.name,y.params.version="0.1.0",y.params.bin_name=i.doc.name,y.params.python_requires=i.doc.features.runtime.version||">=3.12",y.params.dependencies=f,y.params.scripts=JSON.stringify({cli:`PYTHONPATH='${a.join("src")}' '${a.relative(o.projectDir,g.pythonBin)}' '${a.join("src","cli","index.py")}'`}),await n({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:o.templateDir,outDir:o.projectDir,context:y})}export{i as a,s as b,o as c,r as i};
@@ -0,0 +1 @@
1
+ import t from"node:fs";import i from"node:path";import e from"node:os";import s from"yaml";import a from"nunjucks";import{randomUUID as o}from"node:crypto";import{Atom as n}from"@flownet/lib-atom-api-js";import r from"@flownet/lib-parse-node-url";import c from"@fnet/config";import p from"@flownet/lib-parse-imports-js";import h from"@fnet/list-files";import l from"chalk";import{A as d,d as m,c as y,a as f,b as g}from"./index.BwhWziH6.js";import{i as u,a as w,c as x,b}from"./index.D4KQB1ot.js";import{i as j,a as C,c as k,b as D}from"./index.BBrItYB9.js";import{i as v,a as P,c as _}from"./index.B1zLg4Y2.js";import{p as S,c as A,a as E,b as L,d as I,e as M,f as T,i as F,r as N}from"./index.CLlKzCGk.js";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"lodash.merge";import"@fnet/npm-list-versions";import"@fnet/shelljs";import"@flownet/lib-render-templates-dir";import"@fnet/auto-conda-env";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"./index.js";import"node:url";import"node:child_process";import"yargs";import"@fnet/prompt";import"@fnet/shell-flow";import"node:util";import"tree-kill";class B{#t;#i;#e;#s;#a;#o;#n;#r;#c;#p;#h;#l;#d;#m;#y;#f;#g;constructor(t){this.#t=new d,this.#i=t,this.#o=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#g={packageDependencies:this.#o,packageDevDependencies:this.#n,setProgress:this.setProgress.bind(this),context:this.#i,Atom:n,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(t,i,e){this._redis_client&&await this._redis_client.SETEX(t,e||this._expire_ttl,JSON.stringify(i)).catch(console.error)}async initAuth(){this.#i.id&&(this.#r=await this.#t.init({config:this.#l}),this.#g.atomAccessToken=this.#r)}async initLibrary(){const t=this.#i.id;this.#e=this.#i.project?.libraryAtom||await n.get({id:t});let i=this.#e.doc.bundleName;i=i||(this.#e.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#e.doc.bundleName=i,this.#e.type=this.#e.type||"workflow.lib",this.#g.atom=this.#e}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const e=this.#i.projectDir;this.setProgress({message:"Cleaning project directory."});const s=h({dir:e,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const i of s)t.rmSync(i,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=e;t.existsSync(a)||t.mkdirSync(a,{recursive:!0}),a=i.join(e,"src"),t.existsSync(a)||t.mkdirSync(a,{recursive:!0}),a=i.join(e,"src","default"),t.existsSync()||t.mkdirSync(a,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const s=this.#i.projectDir;this.setProgress({message:"Cleaning project directory."});const a=h({dir:s,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const i of a)t.rmSync(i,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=s;t.existsSync(o)||t.mkdirSync(o,{recursive:!0}),o=i.join(s,"src"),t.existsSync(o)||t.mkdirSync(o,{recursive:!0}),o=i.join(s,"src","default");const n=this.#i.projectSrcDir;if(!t.existsSync(o))try{"win32"===e.platform()?t.symlinkSync(n,o,"junction"):t.symlinkSync(n,o,"dir")}catch(t){throw new Error(`Couldn't create symlink. Error: ${t.message}`)}}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const t=this.#i.templateDir;this.#s=a.configure(t,{watch:!1,dev:!0}),this.#g.njEnv=this.#s}async initLibs(){this.setProgress({message:"Initializing external libs."});const t=[{name:this.#e.doc.name,type:"atom",parent_id:this.#e.parent_id}];this.#a=t,await this.initAtomLibsAndDeps({libs:t,packageDependencies:this.#o})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const t=this.#e;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const i=[{name:this.#e.doc.name,type:"atom",parent_id:this.#e.parent_id,atom:t}];this.#a=i}async initAtomLibsAndDeps({libs:t,packageDependencies:i}){const e=t.filter((t=>"atom"===t.type));for(let t=0;t<e.length;t++){const s=e[t],a=await this.findAtomLibrary({url:s.name});s.atom=a;const o=a.doc.dependencies?.filter((t=>void 0===t.repo||"npm"===t.repo));o?.forEach((t=>{const e=i.find((i=>i.package===t.package));e?"string"==typeof t.path?(e.path||[]).some((i=>i===t.path))||(e.path=e.path||[],e.path.push(t.path)):Array.isArray(t.path)&&t.path.forEach((t=>{(e.path||[]).some((i=>i===t))||(e.path=e.path||[],e.path.push(t))})):i.push(t)}))}i.sort(((t,i)=>t.package?.localeCompare(i.package)))}async findAtomLibrary({url:t}){const e=r({url:t});if(!e)throw new Error(`Invalid package name: ${t}`);if(e.protocol||(e.protocol=this.#h),"ac:"===e.protocol){const i=e.pathname.split("/");if(1===i.length)return await n.first({where:{name:t,parent_id:this.#l.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===i.length){const t=await n.first({where:{name:i[0],parent_id:this.#l.env.ATOM_LIBRARIES_ID,type:"folder"}});return await n.first({where:{name:i[1],parent_id:t.id,type:"workflow.lib"}})}}else if("local:"===e.protocol){const t=this.#e;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const e=i.resolve(this.#i.projectSrcDir,"index.js"),s=await p({file:e,recursive:!0}),a=t.doc.dependencies,o=s.all;for await(const t of o){if("npm"!==t.type)continue;if(a.find((i=>i.package===t.package)))continue;const i=await S({name:t.package,projectDir:this.#i.projectDir,setProgress:this.#g.setProgress});a.push({package:t.package,subpath:t.subpath,version:i.minorRange,type:"npm"})}return t}}async createAtomLibFiles({libs:e}){await this.setProgress({message:"Creating external lib files."}),this.#e.typesDir="./types";const s=e.filter((t=>"atom"===t.type));for(let e=0;e<s.length;e++){const a=s[e].atom,o=this.#i.projectDir;if("local:"===a.protocol){const e=i.resolve(this.#i.projectSrcDir,`${a.fileName||a.name}.js`),s=i.relative(i.join(this.#i.projectDir,"src","default"),e);if(!t.existsSync(e)){t.mkdirSync(i.dirname(e),{recursive:!0});let s="export default async (args)=>{\n";s+="}",t.writeFileSync(e,s,"utf8")}a.relativePath=s.split(i.sep).join("/"),this.#e.typesDir=`./types/${i.basename(o)}/src`}else{const e=i.join(o,"src","libs",`${a.id}.js`),s=a.doc.contents?.find((t=>"esm"===t.format))||a.doc;t.writeFileSync(e,s.content,"utf8")}}}async createAtomLibFilesPython({libs:e}){await this.setProgress({message:"Creating external lib files."});const s=e.filter((t=>"atom"===t.type));for(let e=0;e<s.length;e++){const a=s[e].atom;if("local:"===a.protocol){const e=i.resolve(this.#i.projectSrcDir,`${a.fileName||a.name}.py`);if(!t.existsSync(e)){t.mkdirSync(i.dirname(e),{recursive:!0});let s="def default():\n";s+=' print("Hello world!")\n',t.writeFileSync(e,s,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const e={libs:this.#a.filter((t=>"atom"===t.type)),libraryAtom:this.#e,atom:this.#e},s=this.#i.templateDir,o=a.compile(t.readFileSync(i.resolve(s,i.join("src","default","engine.js.njk")),"utf8"),this.#s).render(e),n=this.#i.projectDir,r=i.resolve(n,i.join("src","default","index.js"));t.writeFileSync(r,o,"utf8")}async createProjectYaml(){const e="fnode.yaml",o=`Creating ${e}`;await this.setProgress({message:o});const{content:n,...r}=this.#e.doc,c={content:s.stringify(r)},p=this.#i.templateDir,h=i.resolve(p,`${e}.njk`);if(!t.existsSync(h))throw new Error(`fnode.yaml.njk template not found in ${p}`);const l=a.compile(t.readFileSync(h,"utf8"),this.#s).render(c),d=this.#i.projectDir,m=i.resolve(d,`${e}`);t.writeFileSync(m,l,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#i.project?.devops){const t=[this.#i.project?.devops];for(let i=0;i<t.length;i++){let e=t[i];await this.deployProject({deploymentProject:e}),!0===e.isDirty&&await e.save()}}else if(this.#e.id){const t=await n.list({type:"library.deploy",parent_id:this.#e.id});for(let i=0;i<t.length;i++){let e=t[i];await this.deployProject({deploymentProject:e}),!0===e.isDirty&&(e=await n.update(e,{id:e.id}))}}}async deployProject(t){const{deploymentProject:i}=t,{yamlDocument:e}=i;if(i.doc.targets&&Array.isArray(i.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const s=Object.keys(i.doc||{}),a=e||{};for(let t=0;t<s.length;t++){const e=i.doc[s[t]];e.name=s[t];const o=a.get(s[t]);await m({...this.#g,deploymentProject:i,deploymentProjectTarget:e,yamlTarget:o})}}async registerToPackageManager(t){const{target:i,packageJSON:e}=t;if(!this.#i.id)return;let s=await n.first({name:i.params.name,parent_id:this.#l.env.ATOM_PACKAGES_ID});s?(s.doc.versions.splice(0,0,{v:e.version}),await n.update(s,{id:s.id})):s=await n.create({parent_id:this.#l.env.ATOM_PACKAGES_ID,doc:{name:i.params.name,type:"pm",versions:[{v:e.version}]}})}async setProgress(t){const i="string"==typeof t?t:t?.message;console.log(l.blue(i)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:i})}async initNode(){await u(this.#g),await w(this.#g),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initBun(){await v(this.#g),await P(this.#g),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await j(this.#g),await C(this.#g),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#m&&(await this.createAtomLibFiles({libs:this.#a}),await this.createEngine(),await this.createProjectYaml(),await y(this.#g),await A(this.#g),await f(this.#g),await E(this.#g),await L(this.#g),await I(this.#g),await x(this.#g),await M(this.#g),await T(this.#g),await b(this.#g),this.#y&&(await F(this.#g),await N(this.#g),this.#f&&await this.deploy()))}async bunBuild(){this.#m&&(await this.createAtomLibFiles({libs:this.#a}),await this.createEngine(),await this.createProjectYaml(),await y(this.#g),await A(this.#g),await f(this.#g),await E(this.#g),await L(this.#g),await I(this.#g),await _(this.#g),await M(this.#g),await T(this.#g),this.#y&&(await F(this.#g),await N(this.#g),this.#f&&await this.deploy()))}async pythonBuild(){this.#m&&(await this.createAtomLibFilesPython({libs:this.#a}),await this.createProjectYaml(),await y(this.#g),await f(this.#g),await k(this.#g),this.#y&&(await D(this.#g),this.#f&&await this.deploy()))}async init(){this._redis_client=await g(),this.#c=this.#i.buildId||o(),this.#g.buildId=this.#c,this.#d=this.#i.mode,this.#m=["all","deploy","build","file"].includes(this.#d),this.#y=["all","deploy","build"].includes(this.#d),this.#f=["all","deploy"].includes(this.#d),this.#h=this.#i.protocol,this.#p="BUILD:"+this.#c,this.#l=(await c({optional:!0,name:this.#i.atomConfig||"atom",dir:this.#i.projectDir,tags:this.#i.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),"node"===this.#e.doc.features.runtime.type?await this.initNode():"bun"===this.#e.doc.features.runtime.type?await this.initBun():"python"===this.#e.doc.features.runtime.type&&await this.initPython()}catch(t){throw await this._cache_set(this.#p,{status:"FAILED",message:t?.message||t}),t}}async build(){try{"node"===this.#e.doc.features.runtime.type?await this.nodeBuild():"bun"===this.#e.doc.features.runtime.type?await this.bunBuild():"python"===this.#e.doc.features.runtime.type&&await this.pythonBuild(),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(t){throw await this._cache_set(this.#p,{status:"FAILED",message:t.message||t}),console.log(t),t}}}export{B as default};
@@ -0,0 +1 @@
1
+ import t from"node:fs";import e from"node:path";import{randomUUID as i}from"node:crypto";import s from"yaml";import o from"nunjucks";import n from"chalk";import{Atom as a}from"@flownet/lib-atom-api-js";import r from"@fnet/config";import c from"@fnet/list-files";import{A as d,d as l,b as h}from"./index.BwhWziH6.js";class m{#t;#e;#i;#s;#o;#n;#a;#r;#c;#d;#l;#h;#m;#p;#g;#y;#u;constructor(t){this.#t=new d,this.#e=t,this.#n=[],this.#a=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#u={packageDependencies:this.#n,packageDevDependencies:this.#a,setProgress:this.setProgress.bind(this),context:this.#e,Atom:a,registerToPackageManager:this.registerToPackageManager.bind(this)}}get apiContext(){return this.#u}get context(){return this.#e}get atom(){return this.#i}get libs(){return this.#o}set libs(t){this.#o=t}get fileMode(){return this.#p}get buildMode(){return this.#g}get deployMode(){return this.#y}async _cache_set(t,e,i){this._redis_client&&await this._redis_client.SETEX(t,i||this._expire_ttl,JSON.stringify(e)).catch(console.error)}async initAuth(){this.#e.id&&(this.#r=await this.#t.init({config:this.#h}),this.#u.atomAccessToken=this.#r)}async initLibrary(){const t=this.#e.id;this.#i=this.#e.project?.libraryAtom||await a.get({id:t});let e=this.#i.doc.bundleName;e=e||(this.#i.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#i.doc.bundleName=e,this.#i.type=this.#i.type||"workflow.lib",this.#u.atom=this.#i}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const i=this.#e.projectDir;this.setProgress({message:"Cleaning project directory."});const s=c({dir:i,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of s)t.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=i;t.existsSync(o)||t.mkdirSync(o,{recursive:!0}),o=e.join(i,"src"),t.existsSync(o)||t.mkdirSync(o,{recursive:!0}),o=e.join(i,"src","default"),t.existsSync(o)||t.mkdirSync(o,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const t=this.#e.templateDir;this.#s=o.configure(t,{watch:!1,dev:!0}),this.#u.njEnv=this.#s}async createProjectYaml(){const i="fnode.yaml",n=`Creating ${i}`;await this.setProgress({message:n});const{content:a,...r}=this.#i.doc,c={content:s.stringify(r)},d=this.#e.templateDir,l=e.resolve(d,`${i}.njk`);if(!t.existsSync(l))throw new Error(`fnode.yaml.njk template not found in ${d}`);const h=o.compile(t.readFileSync(l,"utf8"),this.#s).render(c),m=this.#e.projectDir,p=e.resolve(m,`${i}`);t.writeFileSync(p,h,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#e.project?.devops){const t=[this.#e.project?.devops];for(let e=0;e<t.length;e++){let i=t[e];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&await i.save()}}else if(this.#i.id){const t=await a.list({type:"library.deploy",parent_id:this.#i.id});for(let e=0;e<t.length;e++){let i=t[e];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&(i=await a.update(i,{id:i.id}))}}}async deployProject(t){const{deploymentProject:e}=t,{yamlDocument:i}=e;if(e.doc.targets&&Array.isArray(e.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const s=Object.keys(e.doc||{}),o=i||{};for(let t=0;t<s.length;t++){const i=e.doc[s[t]];i.name=s[t];const n=o.get(s[t]);await l({...this.#u,deploymentProject:e,deploymentProjectTarget:i,yamlTarget:n})}}async registerToPackageManager(t){const{target:e,packageJSON:i}=t;if(!this.#e.id)return;let s=await a.first({name:e.params.name,parent_id:this.#h.env.ATOM_PACKAGES_ID});s?(s.doc.versions.splice(0,0,{v:i.version}),await a.update(s,{id:s.id})):s=await a.create({parent_id:this.#h.env.ATOM_PACKAGES_ID,doc:{name:e.params.name,type:"pm",versions:[{v:i.version}]}})}async setProgress(t){const e="string"==typeof t?t:t?.message;console.log(n.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async init(){this._redis_client=await h(),this.#c=this.#e.buildId||i(),this.#u.buildId=this.#c,this.#m=this.#e.mode,this.#p=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#y=["all","deploy"].includes(this.#m),this.#l=this.#e.protocol,this.#d="BUILD:"+this.#c,this.#h=(await r({optional:!0,name:this.#e.atomConfig||"atom",dir:this.#e.projectDir,tags:this.#e.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await this.initRuntime()}catch(t){throw await this._cache_set(this.#d,{status:"FAILED",message:t?.message||t}),t}}async initRuntime(){throw new Error("initRuntime method must be implemented by runtime-specific builder")}async build(){throw new Error("build method must be implemented by runtime-specific builder")}}export{m as B};
@@ -0,0 +1 @@
1
+ import e from"redis";import t from"@flownet/lib-is-redis-online";import{Api as r}from"@flownet/lib-atom-api-js";import i from"node:fs";import o from"node:path";import a from"nunjucks";import n from"@fnet/yaml";async function s(){if(!await t({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const r=e.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await r.connect(),r}class c{init({config:e,accessToken:t}){return new Promise(((i,o)=>{if(r.set_api_url(e.data.url),t)return r.set_req_token(t),void i(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{r.set_req_token(e.access_token),i(e.access_token)})).catch((e=>{r.set_req_token(),o(e)}))}))}}async function p({atom:e,setProgress:t,context:r,packageDependencies:n}){await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:n},c=r.templateDir,p=a.compile(i.readFileSync(o.resolve(c,".gitignore.njk"),"utf8"),a.configure(c)).render(s),d=r.projectDir,l=o.resolve(d,".gitignore");i.writeFileSync(l,p,"utf8")}async function d({atom:e,context:t,setProgress:r,Atom:s}){const c="readme.md",p=`Creating ${c}`;if(await r({message:p}),t.project?.readme){const e=t.projectDir,r={content:t.project.readme.doc.content},s=o.resolve(t.project.projectDir,"fnet/how-to.md");if(i.existsSync(s)){const e=i.readFileSync(s,"utf8");r.howto=e}const p=o.resolve(t.project.projectDir,"fnet/input.yaml");if(i.existsSync(p)){const e=await n({file:p,tags:t.tags});r.input=e.content}const d=o.resolve(t.project.projectDir,"fnet/output.yaml");if(i.existsSync(d)){const e=await n({file:d,tags:t.tags});r.output=e.content}const l=t.templateDir,f=a.compile(i.readFileSync(o.resolve(l,`${c}.njk`),"utf8"),a.configure(l)).render(r),m=o.resolve(e,`${c}`);i.writeFileSync(m,f,"utf8")}else if(e.id){const r=await s.first({type:"wiki",parent_id:e.id});if(!r||"markdown"!==r.doc?.["content-type"])return;const{content:n,...p}=r.doc,d={content:n},l=t.templateDir,f=a.compile(i.readFileSync(o.resolve(l,`${c}.njk`),"utf8"),a.configure(l)).render(d),m=t.projectDir,w=o.resolve(m,`${c}`);i.writeFileSync(w,f,"utf8")}}var l=async e=>{const{atom:t,packageDependencies:r,context:i,deploymentProjectTarget:o,setProgress:a,deploymentProject:n,yamlTarget:s}=e;if(!0!==o.enabled)return;const c=o.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.53yND1Av.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:o,onProgress:a,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:s}),n.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}};export{c as A,p as a,s as b,d as c,l as d};
@@ -0,0 +1 @@
1
+ import e from"lodash.merge";import s from"node:fs";import t from"node:path";import a from"@flownet/lib-render-templates-dir";import n from"nunjucks";import o from"@flownet/lib-parse-imports-js";import r from"@fnet/npm-pick-versions";import c from"object-hash";import i from"ajv/dist/2020.js";import p from"ajv/dist/standalone/index.js";import l from"ajv-formats";import f from"@fnet/shelljs";import{w as d}from"./index.js";function u({feature:s,features:t,packageDevDependencies:a}){const{name:n,packages:o,options:r,extraCheck:c,explicit:i}=s,p=`${n}_enabled`,l=t.rollup_output||{},f=Object.keys(l);let d=r||{};const u=t[n]?.options;u&&(d=e(d,u));const m=!t[n]||!1===t[n]?.enabled;f.forEach((e=>{const s=t.rollup_output[e];if(s){if(Reflect.has(s,n)){if(m||!s[n]||!1===s[n]?.enabled)return void delete s[n];!0===s[n]&&(s[n]={enabled:!0,options:d})}else{if(m||i||!1===t[p])return;s[n]={enabled:!0}}s[n]=s[n]||{},s[n].options={...d,...s[n].options}}}));let g=f.some((e=>!0===t.rollup_output[e][n]?.enabled));c&&(g=c()&&g),t[p]=g,g&&o.forEach((e=>a.push({package:e[0],version:e[1]})))}function m(e){const{atom:s,packageDevDependencies:t}=e;u({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:s.doc.features,packageDevDependencies:t})}function g(e){const{atom:s,packageDevDependencies:t}=e;u({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:s.doc.features,packageDevDependencies:t})}function k(e){const{atom:s,packageDevDependencies:t}=e;u({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:s.doc.features,packageDevDependencies:t})}function j(e){const{atom:s,packageDevDependencies:t}=e,a=s.doc.features,n={};!0===a.app?.enabled&&(n.targets=n.targets||[],n.targets.push({src:"./src/app/index.html",dest:a.app.dir}),Reflect.has(a.app,"copy")||Reflect.has(a,"copy")||(a.copy=!0)),u({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:n},features:a,packageDevDependencies:t})}function v(e){const{atom:s,packageDevDependencies:t}=e,a=s.doc.features,n=a.css&&!1!==a.css.enabled;let o=[];if(n){o.push(["rollup-plugin-postcss","^4"]),o.push(["sass","^1.66"]);(a.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push(["postcss-import","^15"]);break;case"postcss-url":o.push(["postcss-url","^10"]);break;case"postcss-preset-env":o.push(["postcss-preset-env","^9"]);break;case"autoprefixer":o.push(["autoprefixer","^10"]);break;case"cssnano":o.push(["cssnano","^6"])}}))}u({feature:{name:"css",packages:o},features:a,packageDevDependencies:t})}async function D({atom:e,setProgress:n,context:o,packageDependencies:r}){if(!0!==e.doc.features.app.enabled)return;await n({message:"Creating app folder"});const c={atom:e,packageDependencies:r,ts:Date.now()},i=o.templateDir,p=t.resolve(o.projectDir,"src/app");s.existsSync(p)||s.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==e.doc.features.app.html&&l.push("index.html.njk"),await a({pattern:l,dir:t.resolve(i,"src/app"),outDir:p,context:c})}async function h({projectDir:e,name:a,setProgress:n,count:o=1}){let i;const p=c(["npm-pick-versions",a,o]),l=t.join(e,".cache"),f=t.join(l,p+".json");return s.existsSync(f)?(n&&n(`Picking npm version of ${a} from cache ...`),i=JSON.parse(s.readFileSync(f,"utf8"))):(n&&n(`Picking npm version of ${a} ...`),i=await r({name:a,count:o}),s.mkdirSync(l,{recursive:!0}),s.writeFileSync(f,JSON.stringify(i),"utf8")),i}async function y({atom:e,context:a,packageDependencies:r,packageDevDependencies:c,setProgress:i}){await i({message:"Creating package.json."});r.filter((e=>!0===e.dev)).forEach((e=>{c.find((s=>s.package===e.package))||c.push(e);const s=r.findIndex((s=>s.package===e.package));r.splice(s,1)}));const p=r.find((e=>"react"===e.package)),l=r.find((e=>"react-dom"===e.package));p&&!l?r.push({package:"react-dom",version:p.version}):p&&l&&(l.version=p.version),p&&e.doc.features.react_version>=17&&(r.find((e=>"@emotion/react"===e.package))||r.push({package:"@emotion/react",version:"^11"}),r.find((e=>"@emotion/styled"===e.package))||r.push({package:"@emotion/styled",version:"^11"}));const f=[];!0===e.doc.features.app.enabled&&f.push({file:t.resolve(a.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&f.push({file:t.resolve(a.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const e of f){const t=e.file;if(!s.existsSync(t))throw new Error(`App file not found: ${t}`);const n=(await o({file:t,recursive:!0})).all;for await(const s of n){if("npm"!==s.type)continue;if(r.find((e=>e.package===s.package)))continue;if(c.find((e=>e.package===s.package)))continue;const t=await h({name:s.package,projectDir:a.projectDir,setProgress:i});(!0===e.dev?c:r).push({package:s.package,subpath:s.subpath,version:t.minorRange,type:"npm"})}}const d={atom:e,packageDependencies:r,packageDevDependencies:c},u=a.templateDir,m=n.compile(s.readFileSync(t.resolve(u,"package.json.njk"),"utf8"),n.configure(u)).render(d),g=a.projectDir,k=t.resolve(g,"package.json");s.writeFileSync(k,m,"utf8");const j=t.resolve(a.project.projectDir,"fnet");if(s.existsSync(j)){const e=t.resolve(a.projectDir,"fnet");s.existsSync(e)||s.mkdirSync(e);const n=s.readdirSync(j);for(const a of n){const n=t.resolve(j,a);if(!s.lstatSync(n).isFile())continue;const o=t.resolve(e,a);s.copyFileSync(n,o)}}}async function w({atom:e,setProgress:n,context:o,packageDependencies:r}){if(!0!==e.doc.features.cli.enabled)return;await n({message:"Creating cli."});const c={atom:e,packageDependencies:r},i=o.templateDir,p=t.resolve(o.projectDir,"src/cli");s.existsSync(p)||s.mkdirSync(p,{recursive:!0}),await a({pattern:["index.js.njk"],dir:t.resolve(i,"src/cli"),outDir:p,context:c})}async function b({atom:e,setProgress:a,context:o,njEnv:r}){if(!0!==e.doc.features.cli.enabled)return;await a({message:"Creating yargs."});let c={};if(c=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const s=e.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},a={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(s,"default")&&(t.default=s.default),c.properties&&(c.properties.fargs=t,c.properties.ftag=a)}const f={options:c,imports:[],atom:e},d=o.templateDir,u=n.compile(s.readFileSync(t.resolve(d,"src/default/to.args.js.njk"),"utf8"),r).render(f),m=o.projectDir,g=t.resolve(m,"src/default/to.args.js");s.writeFileSync(g,u,"utf8");const k=new i({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});l(k);const j=k.compile(c),v=p(k,j);s.writeFileSync(t.resolve(m,"src/default/validate_input.js"),v,"utf8")}async function x({atom:e,setProgress:a,context:o,packageDependencies:r}){await a({message:"Creating tsconfig.json."});const c={atom:e,packageDependencies:r},i=o.templateDir,p=n.compile(s.readFileSync(t.resolve(i,"tsconfig.json.njk"),"utf8"),n.configure(i)).render(c),l=o.projectDir,f=t.resolve(l,"tsconfig.json");s.writeFileSync(f,p,"utf8")}async function S({setProgress:e,context:s}){const a=s.projectDir;await e({message:"Prettifiying source files."});let n=t.join("src","**","*");if(d("bun")){const e=await f(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a});if(0!==e.code)throw new Error(e.stderr)}else{const e=await f(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a});if(0!==e.code)throw new Error(e.stderr)}}async function P({setProgress:e,atom:s,context:t}){const a=t.projectDir;if(await e({message:"Installing npm packages."}),d("bun")){if(0!==(await f(`bun install ${s.doc.features.npm_install_flags}`,{cwd:a})).code)throw new Error("Couldnt install npm packages.")}else{if(0!==(await f(`npm install ${s.doc.features.npm_install_flags}`,{cwd:a})).code)throw new Error("Couldnt install npm packages.")}}async function E({setProgress:e,context:s}){const t=s.projectDir;await e({message:"Building main project."});if(0!==(await f("npm run build",{cwd:t})).code)throw new Error("Couldnt build project.")}export{b as a,w as b,x as c,D as d,y as e,S as f,u as g,v as h,P as i,j,k,m as l,g as m,h as p,E as r};
@@ -0,0 +1 @@
1
+ import t from"node:fs";import i from"node:path";import e from"nunjucks";import a from"@flownet/lib-parse-imports-js";import s from"@flownet/lib-parse-node-url";import{B as o}from"./index.Bqzc7Bx8.js";import{i as n,a as r,c as p}from"./index.B1zLg4Y2.js";import{p as c,c as l,a as m,b as h,d,e as f,f as w,i as g,r as y}from"./index.CLlKzCGk.js";import{c as x,a as u}from"./index.BwhWziH6.js";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"lodash.merge";import"@fnet/npm-list-versions";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@fnet/shelljs";import"./index.js";import"node:url";import"node:child_process";import"node:os";import"yargs";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"node:util";import"tree-kill";import"redis";import"@flownet/lib-is-redis-online";class b extends o{async initRuntime(){await n(this.apiContext),await r(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const t=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=t,await this.initAtomLibsAndDeps({libs:t,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:t,packageDependencies:i}){const e=t.filter((t=>"atom"===t.type));for(let t=0;t<e.length;t++){const a=e[t],s=await this.findAtomLibrary({url:a.name});a.atom=s;const o=s.doc.dependencies?.filter((t=>void 0===t.repo||"npm"===t.repo));o?.forEach((t=>{const e=i.find((i=>i.package===t.package));e?"string"==typeof t.path?(e.path||[]).some((i=>i===t.path))||(e.path=e.path||[],e.path.push(t.path)):Array.isArray(t.path)&&t.path.forEach((t=>{(e.path||[]).some((i=>i===t))||(e.path=e.path||[],e.path.push(t))})):i.push(t)}))}i.sort(((t,i)=>t.package?.localeCompare(i.package)))}async findAtomLibrary({url:t}){const e=s({url:t});if(!e)throw new Error(`Invalid package name: ${t}`);if(e.protocol||(e.protocol=this.context.protocol),"ac:"===e.protocol){const i=e.pathname.split("/");if(1===i.length)return await this.apiContext.Atom.first({where:{name:t,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===i.length){const t=await this.apiContext.Atom.first({where:{name:i[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:i[1],parent_id:t.id,type:"workflow.lib"}})}}else if("local:"===e.protocol){const t=this.atom;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const e=i.resolve(this.context.projectSrcDir,"index.js"),s=await a({file:e,recursive:!0}),o=t.doc.dependencies,n=s.all;for await(const t of n){if("npm"!==t.type)continue;if(o.find((i=>i.package===t.package)))continue;const i=await c({name:t.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});o.push({package:t.package,subpath:t.subpath,version:i.minorRange,type:"npm"})}return t}}async createAtomLibFiles({libs:e}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const a=e.filter((t=>"atom"===t.type));for(let e=0;e<a.length;e++){const s=a[e].atom,o=this.context.projectDir;if("local:"===s.protocol){const e=i.resolve(this.context.projectSrcDir,`${s.fileName||s.name}.js`),a=i.relative(i.join(this.context.projectDir,"src","default"),e);if(!t.existsSync(e)){t.mkdirSync(i.dirname(e),{recursive:!0});let a="export default async (args)=>{\n";a+="}",t.writeFileSync(e,a,"utf8")}s.relativePath=a.split(i.sep).join("/"),this.atom.typesDir=`./types/${i.basename(o)}/src`}else{const e=i.join(o,"src","libs",`${s.id}.js`),a=s.doc.contents?.find((t=>"esm"===t.format))||s.doc;t.writeFileSync(e,a.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const a={libs:this.libs.filter((t=>"atom"===t.type)),libraryAtom:this.atom,atom:this.atom},s=this.context.templateDir,o=e.compile(t.readFileSync(i.resolve(s,i.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(a),n=this.context.projectDir,r=i.resolve(n,i.join("src","default","index.js"));t.writeFileSync(r,o,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await x(this.apiContext),await l(this.apiContext),await u(this.apiContext),await m(this.apiContext),await h(this.apiContext),await d(this.apiContext),await p(this.apiContext),await f(this.apiContext),await w(this.apiContext),this.buildMode&&(await g(this.apiContext),await y(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(t){throw await this._cache_set(this.buildKey,{status:"FAILED",message:t.message||t}),console.log(t),t}}}export{b as default};