@fnet/cli 0.2.0

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 (133) hide show
  1. package/dist/fbin/index.js +2 -0
  2. package/dist/fnet/index.-SGbq2cI.js +1 -0
  3. package/dist/fnet/index.B0TQiWy6.js +1 -0
  4. package/dist/fnet/index.B5XE4ChJ.js +1 -0
  5. package/dist/fnet/index.Bft2w7m3.js +1 -0
  6. package/dist/fnet/index.BuYxdKtK.js +1 -0
  7. package/dist/fnet/index.C2S9JYhS.js +1 -0
  8. package/dist/fnet/index.C7saWH6d.js +1 -0
  9. package/dist/fnet/index.CDct_kkF.js +1 -0
  10. package/dist/fnet/index.CMC8mlye.js +1 -0
  11. package/dist/fnet/index.CmMM-Ek9.js +1 -0
  12. package/dist/fnet/index.CuMyez3E.js +1 -0
  13. package/dist/fnet/index.CzAV0S36.js +1 -0
  14. package/dist/fnet/index.D2N9YZmA.js +1 -0
  15. package/dist/fnet/index.D3p7pncT.js +1 -0
  16. package/dist/fnet/index.DG8TqL-1.js +1 -0
  17. package/dist/fnet/index.DI3yyTtl.js +1 -0
  18. package/dist/fnet/index.DWpw12No.js +1 -0
  19. package/dist/fnet/index.DrwlOzAe.js +1 -0
  20. package/dist/fnet/index.Q-CYRcna.js +1 -0
  21. package/dist/fnet/index.W6RYgypK.js +1 -0
  22. package/dist/fnet/index.js +2 -0
  23. package/dist/fnet/index.rSKuKke7.js +1 -0
  24. package/dist/fnet/index.xd8c7XMr.js +1 -0
  25. package/dist/fnode/index.-SGbq2cI.js +1 -0
  26. package/dist/fnode/index.1IxoA5DY.js +1 -0
  27. package/dist/fnode/index.B5XE4ChJ.js +1 -0
  28. package/dist/fnode/index.Bft2w7m3.js +1 -0
  29. package/dist/fnode/index.BuYxdKtK.js +1 -0
  30. package/dist/fnode/index.C2S9JYhS.js +1 -0
  31. package/dist/fnode/index.C7saWH6d.js +1 -0
  32. package/dist/fnode/index.CDct_kkF.js +1 -0
  33. package/dist/fnode/index.CJ4EhqPO.js +1 -0
  34. package/dist/fnode/index.CMC8mlye.js +1 -0
  35. package/dist/fnode/index.CmMM-Ek9.js +1 -0
  36. package/dist/fnode/index.CuMyez3E.js +1 -0
  37. package/dist/fnode/index.CzAV0S36.js +1 -0
  38. package/dist/fnode/index.D2N9YZmA.js +1 -0
  39. package/dist/fnode/index.D3p7pncT.js +1 -0
  40. package/dist/fnode/index.DG8TqL-1.js +1 -0
  41. package/dist/fnode/index.DI3yyTtl.js +1 -0
  42. package/dist/fnode/index.DWpw12No.js +1 -0
  43. package/dist/fnode/index.DrwlOzAe.js +1 -0
  44. package/dist/fnode/index.N_a5FdgA.js +1 -0
  45. package/dist/fnode/index.Q-CYRcna.js +1 -0
  46. package/dist/fnode/index.UNoFg95r.js +1 -0
  47. package/dist/fnode/index.W6RYgypK.js +1 -0
  48. package/dist/fnode/index.js +2 -0
  49. package/dist/fnode/index.tq-9YxMP.js +1 -0
  50. package/dist/fnode/index.xd8c7XMr.js +1 -0
  51. package/dist/frun/index.js +2 -0
  52. package/dist/fservice/index.js +2 -0
  53. package/package.json +89 -0
  54. package/readme.md +251 -0
  55. package/template/fnet/core/assert.js +6 -0
  56. package/template/fnet/core/message.js +3 -0
  57. package/template/fnet/core/object.js +47 -0
  58. package/template/fnet/core/print.js +1 -0
  59. package/template/fnet/core/sleep.js +5 -0
  60. package/template/fnet/node/.gitignore.njk +9 -0
  61. package/template/fnet/node/build.js.njk +153 -0
  62. package/template/fnet/node/package.json.njk +118 -0
  63. package/template/fnet/node/readme.md.njk +21 -0
  64. package/template/fnet/node/rollup.config.mjs.njk +498 -0
  65. package/template/fnet/node/src/app/index.html.njk +67 -0
  66. package/template/fnet/node/src/app/index.js.njk +36 -0
  67. package/template/fnet/node/src/cli/index.js.njk +319 -0
  68. package/template/fnet/node/src/default/blocks/assign.js.njk +53 -0
  69. package/template/fnet/node/src/default/blocks/call.js.njk +156 -0
  70. package/template/fnet/node/src/default/blocks/for.js.njk +87 -0
  71. package/template/fnet/node/src/default/blocks/form.js.njk +69 -0
  72. package/template/fnet/node/src/default/blocks/modules.js.njk +57 -0
  73. package/template/fnet/node/src/default/blocks/new.js.njk +87 -0
  74. package/template/fnet/node/src/default/blocks/next.js.njk +37 -0
  75. package/template/fnet/node/src/default/blocks/output.js.njk +53 -0
  76. package/template/fnet/node/src/default/blocks/raise.js.njk +31 -0
  77. package/template/fnet/node/src/default/blocks/return.js.njk +33 -0
  78. package/template/fnet/node/src/default/blocks/signal.js.njk +37 -0
  79. package/template/fnet/node/src/default/blocks/steps.js.njk +63 -0
  80. package/template/fnet/node/src/default/blocks/switch.js.njk +79 -0
  81. package/template/fnet/node/src/default/blocks/tryexcept.js.njk +74 -0
  82. package/template/fnet/node/src/default/blocks/wait.js.njk +34 -0
  83. package/template/fnet/node/src/default/engine.js.njk +79 -0
  84. package/template/fnet/node/src/default/input.args.js.njk +122 -0
  85. package/template/fnet/node/src/default/macros/block-assign.js.njk +3 -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-entry-args.js.njk +2 -0
  88. package/template/fnet/node/src/default/macros/block-footer.js.njk +3 -0
  89. package/template/fnet/node/src/default/macros/block-header.js.njk +14 -0
  90. package/template/fnet/node/src/default/macros/block-library-header.js.njk +43 -0
  91. package/template/fnet/node/src/default/macros/block-modules-header.js.njk +8 -0
  92. package/template/fnet/node/src/default/macros/block-modules.js.njk +29 -0
  93. package/template/fnet/node/src/default/macros/block-next-header.js.njk +6 -0
  94. package/template/fnet/node/src/default/macros/block-next.js.njk +21 -0
  95. package/template/fnet/node/src/default/macros/block-run-footer.js.njk +7 -0
  96. package/template/fnet/node/src/default/macros/block-run-form.js.njk +32 -0
  97. package/template/fnet/node/src/default/macros/block-run-header.js.njk +31 -0
  98. package/template/fnet/node/src/default/macros/block-signal.js.njk +3 -0
  99. package/template/fnet/node/src/default/macros/page.js.njk +8 -0
  100. package/template/fnet/node/src/default/macros/workflow-header.js.njk +7 -0
  101. package/template/fnet/node/src/default/workflow.js.njk +123 -0
  102. package/template/fnet/node/tsconfig.json.njk +16 -0
  103. package/template/fnet/project/.gitignore.njk +7 -0
  104. package/template/fnet/project/.vscode/launch.json.njk +41 -0
  105. package/template/fnet/project/.vscode/tasks.json.njk +46 -0
  106. package/template/fnet/project/fnet/flows.yaml.njk +4 -0
  107. package/template/fnet/project/fnet/targets.yaml.njk +7 -0
  108. package/template/fnet/project/fnet.yaml.njk +3 -0
  109. package/template/fnode/node/.gitignore.njk +9 -0
  110. package/template/fnode/node/build.js.njk +149 -0
  111. package/template/fnode/node/package.json.njk +120 -0
  112. package/template/fnode/node/readme.md.njk +21 -0
  113. package/template/fnode/node/rollup.config.mjs.njk +498 -0
  114. package/template/fnode/node/src/app/index-js-with-react-host.njk +50 -0
  115. package/template/fnode/node/src/app/index-js-without-react-host.njk +23 -0
  116. package/template/fnode/node/src/app/index.html.njk +67 -0
  117. package/template/fnode/node/src/app/index.js.njk +9 -0
  118. package/template/fnode/node/src/cli/index.js.njk +403 -0
  119. package/template/fnode/node/src/default/engine.js.njk +17 -0
  120. package/template/fnode/node/src/default/input.args.js.njk +122 -0
  121. package/template/fnode/node/tsconfig.json.njk +16 -0
  122. package/template/fnode/project/.gitignore.njk +11 -0
  123. package/template/fnode/project/.vscode/launch.json.njk +78 -0
  124. package/template/fnode/project/.vscode/tasks.json.njk +46 -0
  125. package/template/fnode/project/fnet/targets.yaml.njk +25 -0
  126. package/template/fnode/project/fnode.yaml.njk +12 -0
  127. package/template/fnode/python/.gitignore.njk +7 -0
  128. package/template/fnode/python/package.json.njk +4 -0
  129. package/template/fnode/python/pyproject.toml.njk +3 -0
  130. package/template/fnode/python/readme.md.njk +12 -0
  131. package/template/fnode/python/setup.py.njk +19 -0
  132. package/template/fnode/python/src/cli/index.py.njk +25 -0
  133. package/template/schemas/to-npm.yaml +14 -0
@@ -0,0 +1,122 @@
1
+ {% if atom.doc.features.project.format === 'esm' %}
2
+ import fnetArgs from '@fnet/args';
3
+ import validate,{schema as inputSchema} from "./validate_input.js";
4
+
5
+ {% elif atom.doc.features.project.format === 'cjs' %}
6
+ const fnetArgs = require('@fnet/args');
7
+ const validate,{schema as inputSchema} = require("./validate_input.js");
8
+ {% endif %}
9
+
10
+ {% if atom.doc.features.cli.fargs and atom.doc.features.cli.fargs?.enabled !== false %}
11
+
12
+ const get_fargs = (argv) => {
13
+ const fargsIndex = argv.indexOf('--fargs');
14
+ if (fargsIndex !== -1 && argv[fargsIndex + 1]) return argv[fargsIndex + 1];
15
+ {% if atom.doc.features.cli.fargs.default %}
16
+ else return "{{atom.doc.features.cli.fargs.default}}";
17
+ {% endif %}
18
+ };
19
+
20
+ const get_ftags = (argv) => {
21
+ const ftags = [];
22
+ for (let i = 0; i < argv.length; i++) {
23
+ if (argv[i] === '--ftag' && argv[i + 1]) {
24
+ ftags.push(argv[i + 1]);
25
+ i++;
26
+ }
27
+ }
28
+
29
+ {% if atom.doc.features.cli.fargs.tags %}
30
+ return ftags.length > 0 ? ftags : {{atom.doc.features.cli.fargs.tags | dump | safe}};
31
+ {% else %}
32
+ return ftags.length > 0 ? ftags : undefined;
33
+ {% endif %}
34
+ };
35
+
36
+ {% endif %}
37
+
38
+ {% if atom.doc.features.project.format === 'esm' %}
39
+
40
+ export default async () => {
41
+
42
+ let schema = inputSchema;
43
+ let initial;
44
+
45
+ {% if atom.doc.features.cli.fargs and atom.doc.features.cli.fargs?.enabled !== false %}
46
+ const fargs = get_fargs(process.argv.slice(2));
47
+ const ftags = get_ftags(process.argv.slice(2));
48
+
49
+ if (fargs) {
50
+ const { default: fnetConfig } = await import("@fnet/config");
51
+ const config = await fnetConfig({ name: fargs, tags: ftags });
52
+ if (config?.data) {
53
+ initial=config.data;
54
+ }
55
+ }
56
+ {% endif %}
57
+
58
+ const packageCallback = async () => {
59
+ const { default: url } = await import("node:url");
60
+ const { default: path } = await import("node:path");
61
+ const { default: fs } = await import("node:fs");
62
+ let currentDir = path.dirname(url.fileURLToPath(import.meta.url));
63
+ let firstPackageJson = path.join(currentDir, "package.json");
64
+ while (currentDir !== path.parse(currentDir).root && !fs.existsSync(firstPackageJson)) {
65
+ currentDir = path.dirname(currentDir);
66
+ firstPackageJson = path.join(currentDir, "package.json");
67
+ }
68
+ if (!fs.existsSync(firstPackageJson)) return {
69
+ name: "Unknown",
70
+ version: "Unknown"
71
+ }
72
+ else return await JSON.parse(fs.readFileSync(firstPackageJson, "utf8"));
73
+ };
74
+
75
+ return await fnetArgs({schema,initial,validate,packageCallback});
76
+ };
77
+
78
+ {% elif atom.doc.features.project.format === 'cjs' %}
79
+
80
+ module.exports = async () => {
81
+
82
+ let schema = inputSchema;
83
+ let initial;
84
+
85
+ {% if atom.doc.features.cli.fargs and atom.doc.features.cli.fargs?.enabled !== false %}
86
+ const fargs = get_fargs(process.argv.slice(2));
87
+ const ftags = get_ftags(process.argv.slice(2));
88
+
89
+ if (fargs) {
90
+ const { default: fnetConfig } = await import("@fnet/config");
91
+ const config = await fnetConfig({ name: fargs, tags: ftags });
92
+ if (config?.data) {
93
+ initial=config.data;
94
+ }
95
+ }
96
+ {% endif %}
97
+
98
+ const packageCallback = async () => {
99
+ const path = require("node:path");
100
+ const fs = require("node:fs");
101
+
102
+ let currentDir = __dirname;
103
+ let firstPackageJson = path.join(currentDir, "package.json");
104
+
105
+ while (currentDir !== path.parse(currentDir).root && !fs.existsSync(firstPackageJson)) {
106
+ currentDir = path.dirname(currentDir);
107
+ firstPackageJson = path.join(currentDir, "package.json");
108
+ }
109
+
110
+ if (!fs.existsSync(firstPackageJson)) {
111
+ return {
112
+ name: "Unknown",
113
+ version: "Unknown"
114
+ };
115
+ } else {
116
+ return JSON.parse(fs.readFileSync(firstPackageJson, "utf8"));
117
+ }
118
+ };
119
+
120
+ return await fnetArgs({schema,initial,validate,packageCallback});
121
+ };
122
+ {% endif %}
@@ -0,0 +1,3 @@
1
+ {% for assign in context.transform.assign %}
2
+ flow.set({{assign.key | safe}},{{assign.value | safe}});
3
+ {% endfor%}
@@ -0,0 +1,7 @@
1
+ if (this.constructor !== Block) throw Error(Message.USE_CONSTRUCTOR);
2
+
3
+ this.context=context;
4
+
5
+ const { engine, flow, caller, onError, error }=context || {};
6
+
7
+ const _this=this;
@@ -0,0 +1,2 @@
1
+ const args=Array.from(arguments);
2
+ const input=arguments[0];
@@ -0,0 +1,3 @@
1
+ Block.TypeId="{{ typeId }}";
2
+ Block.ParentTypeId="{{ parent.typeId }}";
3
+ Block.IndexKey="{{ indexKey }}";
@@ -0,0 +1,14 @@
1
+ // BLOCK: {{indexKey}}
2
+
3
+ import Message from "../../core/message.js";
4
+ {% if context.transform.print %}
5
+ import print from "../../core/print.js";
6
+ {% endif %}
7
+
8
+ {% if context.transform.sleep %}
9
+ import sleep from "../../core/sleep.js";
10
+ {% endif %}
11
+
12
+ {% if context.transform.assert %}
13
+ import assert from "../../core/assert.js";
14
+ {% endif %}
@@ -0,0 +1,43 @@
1
+ {% if context.lib.type==='atom'%}
2
+ {# Check if this is a use: protocol (native JS) #}
3
+ {% if context.lib.atom.protocol==='use:' %}
4
+ {# NO IMPORT for use: protocol - it's native JS #}
5
+ // LIBRARY: {{context.lib.atom.name}} (native)
6
+ {% else %}
7
+ // LIBRARY: {{context.lib.atom.name}}
8
+ {% if context.lib.atom.relativePath %}
9
+ {% if context.transform.from and context.transform.import %}
10
+ {# NEW: from + import pattern (e.g., from: npm:eventemitter3, import: EventEmitter) #}
11
+ import { {{ context.transform.import | safe }} as LIBRARY } from "{{context.lib.atom.relativePath}}";
12
+ {% elseif context.transform.import %}
13
+ {# EXISTING: import pattern (e.g., import: npm:lodash, call: cloneDeep) #}
14
+ {% if context.transform.libExp %}
15
+ import { default as LIBRARY } from "{{context.lib.atom.relativePath}}";
16
+ {% else %}
17
+ import { {{ context.transform.call | safe }} as LIBRARY } from "{{context.lib.atom.relativePath}}";
18
+ {% endif %}
19
+ {% else %}
20
+ {# EXISTING: default import #}
21
+ import { default as LIBRARY } from "{{context.lib.atom.relativePath}}";
22
+ {% endif %}
23
+ {% else %}
24
+ {% if context.transform.from and context.transform.import %}
25
+ {# NEW: from + import pattern for non-relative paths #}
26
+ {% if context.transform.libExp %}
27
+ import { default as LIBRARY } from "../../libs/{{context.lib.atom.id or context.lib.atom.name}}";
28
+ {% else %}
29
+ import { {{ context.transform.import | safe }} as LIBRARY } from "../../libs/{{context.lib.atom.id or context.lib.atom.name}}";
30
+ {% endif %}
31
+ {% elseif context.transform.import %}
32
+ {# EXISTING: import pattern for non-relative paths #}
33
+ import { {{ context.transform.call | safe }} as LIBRARY } from "../../libs/{{context.lib.atom.id or context.lib.atom.name}}";
34
+ {% else %}
35
+ {# EXISTING: default import for non-relative paths #}
36
+ import { default as LIBRARY } from "../../libs/{{context.lib.atom.id or context.lib.atom.name}}";
37
+ {% endif %}
38
+ {% endif %}
39
+ {% endif %}
40
+ {% elseif context.lib.type==='subworkflow' %}
41
+ // LIBRARY: {{context.lib.indexKey}}
42
+ import { default as {{context.lib.codeKey}} } from "../{{context.lib.codeKey}}.js";
43
+ {% endif %}
@@ -0,0 +1,8 @@
1
+ {% for child in childs %}
2
+ {% if child.module===true%}
3
+ {% if not child.definition.dynamic %}
4
+ // MODULE : {{child.indexKey}}
5
+ import { default as {{child.codeKey}} } from "./{{child.codeKey}}.js";
6
+ {% endif %}
7
+ {% endif %}
8
+ {% endfor%}
@@ -0,0 +1,29 @@
1
+ {% for child in childs %}
2
+
3
+ {% if child.module===true%}
4
+
5
+ // MODULE : {{child.indexKey}}
6
+ {% if child.definition.dynamic %}
7
+ const { default: {{child.codeKey}} } = await import("./{{child.codeKey}}.js");
8
+ {% endif %}
9
+
10
+ m['{{child.name}}']=async function(){
11
+ const entry=new {{child.codeKey}}({engine,flow,parent:_this,caller:c,module:true});
12
+ const nextBlock=await entry.run.apply(entry,arguments);
13
+
14
+ if(nextBlock?.type==='return') return nextBlock.value;
15
+ else if(nextBlock?.type==='block') {
16
+ {% if workflow.parent.context.atom.doc.features.print_module_final_next %}
17
+ console.log('MODULE FINAL NEXT:',nextBlock);
18
+ {% endif %}
19
+ resolve(nextBlock);
20
+ }
21
+ }
22
+
23
+ {% if child.context.transform.export %}
24
+ flow.setModule({{child.context.transform.export | safe}}, m['{{child.name}}']);
25
+ {% endif %}
26
+
27
+ {% endif %}
28
+
29
+ {% endfor%}
@@ -0,0 +1,6 @@
1
+ {% if context.next %}
2
+ {% if not context.next.definition.dynamic %}
3
+ // NEXT : {{context.next.indexKey}}
4
+ import { default as {{context.next.codeKey}} } from "./{{context.next.codeKey}}.js";
5
+ {% endif %}
6
+ {% endif %}
@@ -0,0 +1,21 @@
1
+ {% if context.next %}
2
+
3
+ // NEXT : {{context.next.indexKey}}
4
+ {% if context.next.definition.dynamic %}
5
+ const { default: {{context.next.codeKey}} } = await import("./{{context.next.codeKey}}.js");
6
+ {% endif %}
7
+
8
+
9
+ resolve ({
10
+ type: 'block',
11
+ from: _this,
12
+ fromType: _this.constructor,
13
+ fromClosure: c,
14
+ toType:{{context.next.codeKey}},
15
+ onError,
16
+ {% if context.transform.output %}
17
+ input: {{context.transform.output | safe}},
18
+ {% endif %}
19
+ });
20
+
21
+ {% endif %}
@@ -0,0 +1,7 @@
1
+ {% if context.transform.print %}
2
+ print({{context.transform.print | safe}});
3
+ {% endif%}
4
+
5
+ {% if context.transform.assert %}
6
+ assert({{context.transform.assert | safe}});
7
+ {% endif%}
@@ -0,0 +1,32 @@
1
+ {% if context.transform.props %}
2
+ const formProps ={{context.transform.props | safe}} ;
3
+ {% else %}
4
+ const formProps={};
5
+ {% endif %}
6
+
7
+ function actionClick(){
8
+ flow.continueForNext({key:'{{indexKey}}'});
9
+ }
10
+
11
+ formProps.form=form;
12
+
13
+ formProps.actionClick=actionClick;
14
+
15
+ function Form(){
16
+ React.useEffect(()=>{
17
+
18
+ {% if workflow.parent.context.atom.doc.features.print_form_mounts %}
19
+ console.log('MOUNT:','{{indexKey}}');
20
+ {% endif %}
21
+
22
+ return ()=>{
23
+ {% if workflow.parent.context.atom.doc.features.print_form_mounts %}
24
+ console.log('UNMOUNT:','{{indexKey}}');
25
+ {% endif %}
26
+ }
27
+ },[]);
28
+
29
+ return React.createElement(formLib,formProps);
30
+ }
31
+
32
+ engine.setActiveForm({ form: Form, props:formProps });
@@ -0,0 +1,31 @@
1
+ {# variables #}
2
+ const v=flow.get();
3
+
4
+ {# module #}
5
+ {% if hasModules %}
6
+ const m={};
7
+ {% else %}
8
+ const m = null;
9
+ {% endif %}
10
+
11
+ {# form #}
12
+ {% if type === 'form' %}
13
+ const form={};
14
+ {% else %}
15
+ const form=null;
16
+ {% endif %}
17
+
18
+ {# closure #}
19
+ const c={ caller, resolve, reject, args, get form(){return form||caller?.form}, get module(){return m||caller?.module} };
20
+
21
+ {% if workflow.parent.context.atom.doc.features.print_steps %}
22
+ console.log(new Date().toLocaleString(),'{{indexKey}}');
23
+ {% endif %}
24
+
25
+ {% if definition.debugger %}
26
+ debugger;
27
+ {% endif %}
28
+
29
+ {% if context.transform.sleep %}
30
+ await sleep({{context.transform.sleep}});
31
+ {% endif %}
@@ -0,0 +1,3 @@
1
+ {% if context.transform.signal==='next' %}
2
+ flow.continueForNext({key:'{{indexKey}}'});
3
+ {% endif %}
@@ -0,0 +1,8 @@
1
+ {% if context.transform.page %}
2
+ const page= {{context.transform.page | safe}};
3
+
4
+ {% if definition.page.title %}
5
+ document? document.title=page.title:undefined;
6
+ {% endif %}
7
+
8
+ {% endif %}
@@ -0,0 +1,7 @@
1
+ // WORKFLOW: {{ indexKey }}
2
+
3
+ import Object from "../core/object.js";
4
+
5
+ {% if context.transform.print %}
6
+ import print from "../core/print.js";
7
+ {% endif %}
@@ -0,0 +1,123 @@
1
+ {% include "src/default/macros/workflow-header.js.njk" %}
2
+
3
+ {% if context.next %}
4
+ {% if not context.next.definition.dynamic %}
5
+ // NEXT: {{context.next.indexKey}}
6
+ import {{context.next.codeKey}} from "./blocks/{{context.next.codeKey}}.js";
7
+ {% endif %}
8
+ {% endif %}
9
+
10
+ export default class Workflow extends Object {
11
+
12
+ #waitContext;
13
+
14
+ constructor(context) {
15
+ super(context);
16
+
17
+ this.engine=context.engine;
18
+ }
19
+
20
+ async init(context) {
21
+
22
+ {% if context.transform.params %}
23
+ const params = context?.params;
24
+
25
+ {% for param in context.transform.params %}
26
+ {% if param.hasDefault%}
27
+ {% if param.type ==='string'%}
28
+ this.set('{{param.key}}', Reflect.has(params,'{{param.key}}')? params['{{param.key}}']:'{{param.default}}');
29
+ {% elif param.type ==='object' %}
30
+ this.set('{{param.key}}', Reflect.has(params,'{{param.key}}')? params['{{param.key}}']:{{param.default | dump | safe}});
31
+ {% else %}
32
+ this.set('{{param.key}}', Reflect.has(params,'{{param.key}}')? params['{{param.key}}']:{{param.default | dump}});
33
+ {% endif %}
34
+ {% else %}
35
+ this.set('{{param.key}}',this.getValue(params,'{{param.key}}'));
36
+ {% endif %}
37
+ {% endfor%}
38
+
39
+ this.set('$params',params);
40
+
41
+ {% endif %}
42
+ }
43
+
44
+ waitForNext(context){
45
+ this.#waitContext=context;
46
+ this.#waitContext?.timeoutId && clearTimeout(this.#waitContext.timeoutId) && (this.#waitContext.timeoutId=undefined);
47
+ this.#waitContext.timeoutId = setInterval(() => {}, 0x7FFFFFFF);
48
+ }
49
+
50
+ async continueForNext(context){
51
+ const next=this.#waitContext?.next;
52
+ this.#waitContext?.timeoutId && clearTimeout(this.#waitContext.timeoutId) && (this.#waitContext.timeoutId=undefined);
53
+ this.#waitContext=undefined;
54
+ next && await next();
55
+ }
56
+
57
+ async run(context) {
58
+
59
+ {% if workflow.parent.context.atom.doc.features.print_steps %}
60
+ console.log(new Date().toLocaleString(),'{{indexKey}}');
61
+ {% endif %}
62
+
63
+ {% if definition.debugger %}
64
+ debugger;
65
+ {% endif %}
66
+
67
+ {% if context.transform.sleep %}
68
+ await sleep({{context.transform.sleep}});
69
+ {% endif %}
70
+
71
+ await this.init(context);
72
+
73
+ {% if context.next %}
74
+
75
+ {% if context.next.definition.dynamic %}
76
+ // NEXT : {{context.next.indexKey}}
77
+ const { default: {{context.next.codeKey}} } = await import("./blocks/{{context.next.codeKey}}.js");
78
+ {% endif %}
79
+
80
+ {# closure #}
81
+ const c={};
82
+
83
+ let current=new {{context.next.codeKey}}({ parent:this, engine:this.engine, flow:this, caller:c });
84
+ let currentArgs;
85
+
86
+ do {
87
+
88
+ {% if workflow.parent.context.atom.doc.features.print_runners %}
89
+ console.log(new Date().toLocaleString(),' * ', this.constructor.IndexKey,' -> ',current.constructor.IndexKey);
90
+ {% endif %}
91
+
92
+ const nextBlock= typeof currentArgs==='undefined'? await current.run()
93
+ : Array.isArray(currentArgs)? await current.run.apply(current,currentArgs) : await current.run.call(current, currentArgs) ;
94
+
95
+
96
+ if(nextBlock?.type==='return') return nextBlock;
97
+ else if(nextBlock?.type!=='block') break;
98
+
99
+ if(nextBlock.toType.ParentTypeId!==this.constructor.TypeId)
100
+ throw new Error('Unknown situation');
101
+
102
+ current=new nextBlock.toType({ parent:this, engine:this.engine, flow:this, caller:c });
103
+ currentArgs=nextBlock.input;
104
+
105
+ } while(true);
106
+
107
+ {% endif %}
108
+
109
+
110
+ {% if context.transform.print %}
111
+ print({{context.transform.print | safe}});
112
+ {% endif%}
113
+
114
+ {% if context.transform.assert %}
115
+ assert({{context.transform.assert | safe}});
116
+ {% endif%}
117
+
118
+ return this.result;
119
+ }
120
+ }
121
+
122
+ Workflow.TypeId="{{typeId}}";
123
+ Workflow.IndexKey="{{indexKey}}";
@@ -0,0 +1,16 @@
1
+ {
2
+ "include": [
3
+ "src/**/*.js"
4
+ ],
5
+ "compilerOptions": {
6
+ "outDir": "./types",
7
+ "declaration": true,
8
+ "allowJs": true,
9
+ "emitDeclarationOnly": true,
10
+ "target": "es5",
11
+ "strict": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "skipLibCheck": true,
14
+ "jsx": "react-jsx"
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ .DS_Store
2
+ .workspace
3
+ .fnet
4
+ .out
5
+ .package
6
+ .npmrc
7
+ .vscode
@@ -0,0 +1,41 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "name": "debug-fnet-cli",
9
+ "type": "node",
10
+ "request": "launch",
11
+ "skipFiles": [
12
+ "<node_internals>/**"
13
+ ],
14
+ "program": "${workspaceFolder}/.workspace/src/cli/index.js",
15
+ "cwd": "${workspaceFolder}/.workspace",
16
+ "preLaunchTask": "fnet-watch",
17
+ "console": "integratedTerminal"
18
+ },
19
+ {
20
+ "name": "debug-fnet-app",
21
+ "type": "chrome",
22
+ "request": "launch",
23
+ "url": "http://localhost:3000/dist/app/esm/",
24
+ "webRoot": "${workspaceFolder}/.workspace",
25
+ "preLaunchTask": "fnet-watch",
26
+ // "userDataDir": false,
27
+ // "runtimeArgs": [
28
+ // "--profile-directory=<profile-name>",
29
+ // ]
30
+ },
31
+ ],
32
+ // "compounds": [
33
+ // {
34
+ // "name": "debug-fnet-all",
35
+ // "configurations": [
36
+ // "debug-fnet-cli",
37
+ // "debug-fnet-app"
38
+ // ]
39
+ // }
40
+ // ]
41
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "fnet-build",
6
+ "type": "shell",
7
+ "command": "fnet build",
8
+ },
9
+ {
10
+ "label": "fnet-watch",
11
+ "type": "shell",
12
+ "command": "fnet watch",
13
+ "isBackground": true
14
+ },
15
+ {
16
+ "label": "fnet-deploy",
17
+ "type": "shell",
18
+ "command": "fnet deploy",
19
+ },
20
+ {
21
+ "label": "fnet-cli",
22
+ "type": "shell",
23
+ "command": "fnet cli",
24
+ },
25
+ {
26
+ "label": "fnet-app",
27
+ "type": "shell",
28
+ "command": "fnet app",
29
+ },
30
+ {
31
+ "label": "fnet-project-update",
32
+ "type": "shell",
33
+ "command": "fnet project -u",
34
+ },
35
+ {
36
+ "label": "fnet-npm-update",
37
+ "type": "shell",
38
+ "command": "fnet npm update",
39
+ },
40
+ {
41
+ "label": "fnet-npm-outdated",
42
+ "type": "shell",
43
+ "command": "fnet npm outdated",
44
+ }
45
+ ]
46
+ }
@@ -0,0 +1,4 @@
1
+ main:
2
+ steps:
3
+ - hello-world:
4
+ return: Hello World!
@@ -0,0 +1,7 @@
1
+ npm-default:
2
+ type: npm
3
+ enabled: false
4
+ version: "{{npm.version or "0.1.0"}}"
5
+ params:
6
+ # bin: some-bin-name
7
+ name: "{{npm.name or "@fnet/"+name}}"
@@ -0,0 +1,3 @@
1
+ name: {{name}}
2
+
3
+ flows: g::file://./fnet/flows.yaml
@@ -0,0 +1,9 @@
1
+ node_modules
2
+ .DS_Store
3
+ .fnet
4
+ .out
5
+ .package
6
+ .vscode
7
+ .output
8
+ .npmrc
9
+ .bin