@code0-tech/triangulum 0.31.0 → 0.32.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.
@@ -4,8 +4,7 @@ import { JsonSchema } from '../util/jsonSchema.util';
4
4
  * The input/output JSON schemas computed for a callable signature.
5
5
  *
6
6
  * Both are derived from the *real* signature — the flow's own signature for the
7
- * flow, or the callback parameter type (e.g. `(item: T) => void`) for a
8
- * sub-flow.
7
+ * flow, or the generated lambda value (`(...p) => { …body… }`) for a sub-flow.
9
8
  *
10
9
  * `inputSchema` is an `object` schema whose `properties` hold one entry per
11
10
  * signature parameter, keyed by the parameter name (non-optional parameters are
@@ -37,11 +36,13 @@ export type SchematizedFlow = Flow & SignatureSchemas;
37
36
  * The schemas are computed from the real signatures, resolved through the same
38
37
  * virtual TypeScript program that {@link generateFlowSourceCode} builds:
39
38
  * - For the flow, the schemas come from the flow's own `signature`.
40
- * - For a sub-flow, the schemas come from the callback parameter type of the
41
- * surrounding function (e.g. `std::list::for_each`'s `consumer` parameter is
42
- * typed `(item: T) => void`). Because the type is resolved from the concrete
43
- * call, generic type parameters (the `T` above) are already instantiated with
44
- * the real element type at that node.
39
+ * - For a sub-flow, the schemas come from the *value* generated at that argument
40
+ * position — the lambda `(...p) => { …body… }` emitted by
41
+ * {@link generateFlowSourceCode} — not from the callback parameter the
42
+ * surrounding function declares. The input carries the real (already
43
+ * instantiated) argument types the lambda receives, and the output is what the
44
+ * sub-flow body actually returns (e.g. via a `std::control::return` node),
45
+ * rather than the `void` the surrounding function merely expects.
45
46
  *
46
47
  * The actual JSON Schema generation is delegated to `ts-json-schema-generator`
47
48
  * (see {@link generateJsonSchemas}); this function only resolves the real
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-7sodyQ3_.cjs");let t=require("typescript");t=e.d(t,1);var n=(n,r)=>{let i=e.u(n?.value);if(!i)return`any`;let a=`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-Cezd6toj.cjs");let t=require("typescript");t=e.d(t,1);var n=(n,r)=>{let i=e.u(n?.value);if(!i)return`any`;let a=`
2
2
  ${e.r(r,`unknown`)}
3
3
  const tempValue = ${i??`any`};
4
4
  `,o=`index.ts`,s=e.t(o,a),c=s.getSourceFile(o),l=s.languageService.getProgram().getTypeChecker(),u=`any`,d=e=>{if(t.default.isVariableDeclaration(e)&&e.name.getText()===`tempValue`){let n=l.getTypeAtLocation(e),r=n=>{if(n.isUnion()){let e=n.types.map(r);return Array.from(new Set(e)).sort().join(` | `)}if(l.isArrayType(n)){let e=n.typeArguments||[],t=e.length>0?r(e[0]):`any`;return e[0]?.isUnion()?`(${t})[]`:`${t}[]`}if(n.getFlags()&t.default.TypeFlags.Object||n.isClassOrInterface()){let t=l.getPropertiesOfType(n);if(t.length>0)return`{ ${t.map(t=>{let n=l.getTypeOfSymbolAtLocation(t,e);return`${t.getName()}: ${r(n)}`}).join(`, `)} }`}let i=l.getBaseTypeOfLiteralType(n);return l.typeToString(i,e)};u=r(n)}t.default.forEachChild(e,d)};return d(c),u},r=(n,r)=>{let i=`
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c, u as l } from "./utils-CcypN6ln.js";
1
+ import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c, u as l } from "./utils-Cn-uViWS.js";
2
2
  import u, { flattenDiagnosticMessageText as d } from "typescript";
3
3
  //#region src/extraction/getTypeFromValue.ts
4
4
  var f = (e, t) => {
package/dist/server.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-7sodyQ3_.cjs");let t=require("typescript");t=e.d(t,1);let n=require("ts-json-schema-generator");var r={...n.DEFAULT_CONFIG,expose:`none`,topRef:!1,jsDoc:`none`,skipTypeCheck:!0},i=(e,t)=>{let n=Object.keys(e);if(n.length===0)return{};let r=o(a(e,t)),i={};for(let e of n)try{i[e]=s(r.createSchema(e))}catch{i[e]={}}return i},a=(t,n)=>{let r=Object.entries(t).map(([e,t])=>`export type ${e} = ${t};`).join(`
2
- `);return`${e.r(n)}\n${r}`},o=t=>{let i=e.t(`index.ts`,t).languageService.getProgram();return new n.SchemaGenerator(i,(0,n.createParser)(i,r),(0,n.createFormatter)(r),r)},s=e=>{let{$schema:t,definitions:n,...r}=e,i=n&&Object.keys(n).length>0?{...r,definitions:n}:r;return JSON.parse(JSON.stringify(i))},c=(t,n,r)=>{if(!t)return;let a=`index.ts`,o=e.n(t,n,r),s=e.t(a,o),c=s.getSourceFile(a),d=s.languageService.getProgram().getTypeChecker(),m=i({...f(d,c),...p(d,c,t)},r),h=(t.nodes?.nodes??[]).map(e=>e&&v(e,m));return{...t,inputSchema:m[l]??g(),outputSchema:m[u]??_(),nodes:{...t.nodes,nodes:h}}},l=`Flow_input`,u=`Flow_output`,d=(t,n,r)=>`Node_${e.i(t)}_${n}_${r}`,f=(e,n)=>{let r=n.statements.filter(t.default.isFunctionDeclaration).find(e=>e.name?.getText()===`flow`);if(!r)return{};let i=e.getSignatureFromDeclaration(r);if(!i)return{};let{input:a,output:o}=h(e,i,r);return{[l]:a,[u]:o}},p=(e,t,n)=>{let r=S(t),i={};for(let t of n.nodes?.nodes??[]){if(!t?.id)continue;let n=t.parameters?.nodes;if(!n?.some(y))continue;let a=x(r,t),o=a?e.getResolvedSignature(a):void 0;o&&n.forEach((n,r)=>{if(!y(n))return;let s=m(e,o,a,r);if(!s)return;let{input:c,output:l}=h(e,s,a);i[d(t.id,r,`input`)]=c,i[d(t.id,r,`output`)]=l})}return i},m=(e,t,n,r)=>{let i=t.parameters[r];if(i)return e.getTypeOfSymbolAtLocation(i,n).getCallSignatures()[0]},h=(e,n,r)=>{let i=n=>e.typeToString(n,r,t.default.TypeFormatFlags.NoTruncation);return{input:`{ ${n.parameters.map(t=>{let n=e.getTypeOfSymbolAtLocation(t,t.valueDeclaration??r),a=b(t)?`?`:``;return`${t.getName()}${a}: ${i(n)}`}).join(`; `)} }`,output:i(e.getReturnTypeOfSignature(n))}},g=()=>({type:`object`}),_=()=>({}),v=(e,t)=>{let n=e.parameters?.nodes;if(!n?.some(y))return e;let r=n.map((n,r)=>{if(!y(n))return n;let i={...n.value,inputSchema:t[d(e.id,r,`input`)]??g(),outputSchema:t[d(e.id,r,`output`)]??_()};return{...n,value:i}});return{...e,parameters:{...e.parameters,nodes:r}}},y=e=>e?.value?.__typename===`SubFlowValue`,b=e=>{let n=e.valueDeclaration;return!!n&&t.default.isParameter(n)&&(!!n.questionToken||!!n.initializer||!!n.dotDotDotToken)},x=(n,r)=>{let i=n.get(`node_${e.i(r.id)}`)?.initializer;return i&&t.default.isCallExpression(i)?i:void 0},S=e=>{let n=new Map;return e.statements.forEach(e=>{e.forEachChild(function e(r){t.default.isVariableDeclaration(r)&&(r.parent.flags&t.default.NodeFlags.Const)!==0&&n.set(r.name.getText(),r),r.forEachChild(e)})}),n};exports.getFlowSchemas=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-Cezd6toj.cjs");let t=require("typescript");t=e.d(t,1);let n=require("ts-json-schema-generator");var r={...n.DEFAULT_CONFIG,expose:`none`,topRef:!1,jsDoc:`none`,skipTypeCheck:!0},i=(e,t)=>{let n=Object.keys(e);if(n.length===0)return{};let r=o(a(e,t)),i={};for(let e of n)try{i[e]=s(r.createSchema(e))}catch{i[e]={}}return i},a=(t,n)=>{let r=Object.entries(t).map(([e,t])=>`export type ${e} = ${t};`).join(`
2
+ `);return`${e.r(n)}\n${r}`},o=t=>{let i=e.t(`index.ts`,t).languageService.getProgram();return new n.SchemaGenerator(i,(0,n.createParser)(i,r),(0,n.createFormatter)(r),r)},s=e=>{let{$schema:t,definitions:n,...r}=e,i=n&&Object.keys(n).length>0?{...r,definitions:n}:r;return JSON.parse(JSON.stringify(i))},c=(t,n,r)=>{if(!t)return;let a=`index.ts`,o=e.n(t,n,r),s=e.t(a,o),c=s.getSourceFile(a),d=s.languageService.getProgram().getTypeChecker(),m=i({...f(d,c),...p(d,c,t)},r),h=(t.nodes?.nodes??[]).map(e=>e&&b(e,m));return{...t,inputSchema:m[l]??v(),outputSchema:m[u]??y(),nodes:{...t.nodes,nodes:h}}},l=`Flow_input`,u=`Flow_output`,d=(t,n,r)=>`Node_${e.i(t)}_${n}_${r}`,f=(e,n)=>{let r=n.statements.filter(t.default.isFunctionDeclaration).find(e=>e.name?.getText()===`flow`);if(!r)return{};let i=e.getSignatureFromDeclaration(r);if(!i)return{};let{input:a,output:o}=_(e,i,r);return{[l]:a,[u]:o}},p=(e,t,n)=>{let r=w(t),i={};for(let t of n.nodes?.nodes??[]){if(!t?.id)continue;let n=t.parameters?.nodes;if(!n?.some(x))continue;let a=C(r,t);a&&n.forEach((n,r)=>{if(!x(n))return;let o=a.arguments[r],s=o?e.getTypeAtLocation(o).getCallSignatures()[0]:void 0;if(!s)return;let{input:c,output:l}=m(e,s,o);i[d(t.id,r,`input`)]=c,i[d(t.id,r,`output`)]=l})}return i},m=(e,n,r)=>({input:`{ ${h(e,n,r).join(`; `)} }`,output:(n=>e.typeToString(n,r,t.default.TypeFormatFlags.NoTruncation))(e.getReturnTypeOfSignature(n))}),h=(e,n,r)=>{let i=n=>e.typeToString(n,r,t.default.TypeFormatFlags.NoTruncation),a=n.getParameters();if(a.length===1){let t=g(e,e.getTypeOfSymbolAtLocation(a[0],a[0].valueDeclaration??r),r);if(t)return t}return a.map(t=>{let n=e.getTypeOfSymbolAtLocation(t,t.valueDeclaration??r),a=S(t)?`?`:``;return`${t.getName()}${a}: ${i(n)}`})},g=(e,n,r)=>{let i=n,a=i.target;if(!(!a||(a.objectFlags&t.default.ObjectFlags.Tuple)===0))return e.getTypeArguments(i).map((n,i)=>{let o=a.labeledElementDeclarations?.[i];return`${o?.name&&t.default.isIdentifier(o.name)?o.name.text:`arg${i}`}${(a.elementFlags[i]&t.default.ElementFlags.Optional)===0?``:`?`}: ${e.typeToString(n,r,t.default.TypeFormatFlags.NoTruncation)}`})},_=(e,n,r)=>{let i=n=>e.typeToString(n,r,t.default.TypeFormatFlags.NoTruncation);return{input:`{ ${n.parameters.map(t=>{let n=e.getTypeOfSymbolAtLocation(t,t.valueDeclaration??r),a=S(t)?`?`:``;return`${t.getName()}${a}: ${i(n)}`}).join(`; `)} }`,output:i(e.getReturnTypeOfSignature(n))}},v=()=>({type:`object`}),y=()=>({}),b=(e,t)=>{let n=e.parameters?.nodes;if(!n?.some(x))return e;let r=n.map((n,r)=>{if(!x(n))return n;let i={...n.value,inputSchema:t[d(e.id,r,`input`)]??v(),outputSchema:t[d(e.id,r,`output`)]??y()};return{...n,value:i}});return{...e,parameters:{...e.parameters,nodes:r}}},x=e=>e?.value?.__typename===`SubFlowValue`,S=e=>{let n=e.valueDeclaration;return!!n&&t.default.isParameter(n)&&(!!n.questionToken||!!n.initializer||!!n.dotDotDotToken)},C=(n,r)=>{let i=n.get(`node_${e.i(r.id)}`)?.initializer;return i&&t.default.isCallExpression(i)?i:void 0},w=e=>{let n=new Map;return e.statements.forEach(e=>{e.forEachChild(function e(r){t.default.isVariableDeclaration(r)&&(r.parent.flags&t.default.NodeFlags.Const)!==0&&n.set(r.name.getText(),r),r.forEachChild(e)})}),n};exports.getFlowSchemas=c;
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- import { i as e, n as t, r as n, t as r } from "./utils-CcypN6ln.js";
1
+ import { i as e, n as t, r as n, t as r } from "./utils-Cn-uViWS.js";
2
2
  import i from "typescript";
3
3
  import { DEFAULT_CONFIG as a, SchemaGenerator as o, createFormatter as s, createParser as c } from "ts-json-schema-generator";
4
4
  //#region src/util/jsonSchema.util.ts
@@ -35,11 +35,11 @@ var l = {
35
35
  let a = "index.ts", o = t(e, n, i), s = r(a, o), c = s.getSourceFile(a), l = s.languageService.getProgram().getTypeChecker(), d = u({
36
36
  ...v(l, c),
37
37
  ...y(l, c, e)
38
- }, i), f = (e.nodes?.nodes ?? []).map((e) => e && w(e, d));
38
+ }, i), f = (e.nodes?.nodes ?? []).map((e) => e && E(e, d));
39
39
  return {
40
40
  ...e,
41
- inputSchema: d[h] ?? S(),
42
- outputSchema: d[g] ?? C(),
41
+ inputSchema: d[h] ?? w(),
42
+ outputSchema: d[g] ?? T(),
43
43
  nodes: {
44
44
  ...e.nodes,
45
45
  nodes: f
@@ -50,48 +50,64 @@ var l = {
50
50
  if (!n) return {};
51
51
  let r = e.getSignatureFromDeclaration(n);
52
52
  if (!r) return {};
53
- let { input: a, output: o } = x(e, r, n);
53
+ let { input: a, output: o } = C(e, r, n);
54
54
  return {
55
55
  [h]: a,
56
56
  [g]: o
57
57
  };
58
58
  }, y = (e, t, n) => {
59
- let r = O(t), i = {};
59
+ let r = A(t), i = {};
60
60
  for (let t of n.nodes?.nodes ?? []) {
61
61
  if (!t?.id) continue;
62
62
  let n = t.parameters?.nodes;
63
- if (!n?.some(T)) continue;
64
- let a = D(r, t), o = a ? e.getResolvedSignature(a) : void 0;
65
- o && n.forEach((n, r) => {
66
- if (!T(n)) return;
67
- let s = b(e, o, a, r);
63
+ if (!n?.some(D)) continue;
64
+ let a = k(r, t);
65
+ a && n.forEach((n, r) => {
66
+ if (!D(n)) return;
67
+ let o = a.arguments[r], s = o ? e.getTypeAtLocation(o).getCallSignatures()[0] : void 0;
68
68
  if (!s) return;
69
- let { input: c, output: l } = x(e, s, a);
69
+ let { input: c, output: l } = b(e, s, o);
70
70
  i[_(t.id, r, "input")] = c, i[_(t.id, r, "output")] = l;
71
71
  });
72
72
  }
73
73
  return i;
74
- }, b = (e, t, n, r) => {
75
- let i = t.parameters[r];
76
- if (i) return e.getTypeOfSymbolAtLocation(i, n).getCallSignatures()[0];
77
- }, x = (e, t, n) => {
74
+ }, b = (e, t, n) => ({
75
+ input: `{ ${x(e, t, n).join("; ")} }`,
76
+ output: ((t) => e.typeToString(t, n, i.TypeFormatFlags.NoTruncation))(e.getReturnTypeOfSignature(t))
77
+ }), x = (e, t, n) => {
78
+ let r = (t) => e.typeToString(t, n, i.TypeFormatFlags.NoTruncation), a = t.getParameters();
79
+ if (a.length === 1) {
80
+ let t = S(e, e.getTypeOfSymbolAtLocation(a[0], a[0].valueDeclaration ?? n), n);
81
+ if (t) return t;
82
+ }
83
+ return a.map((t) => {
84
+ let i = e.getTypeOfSymbolAtLocation(t, t.valueDeclaration ?? n), a = O(t) ? "?" : "";
85
+ return `${t.getName()}${a}: ${r(i)}`;
86
+ });
87
+ }, S = (e, t, n) => {
88
+ let r = t, a = r.target;
89
+ if (!(!a || (a.objectFlags & i.ObjectFlags.Tuple) === 0)) return e.getTypeArguments(r).map((t, r) => {
90
+ let o = a.labeledElementDeclarations?.[r];
91
+ return `${o?.name && i.isIdentifier(o.name) ? o.name.text : `arg${r}`}${(a.elementFlags[r] & i.ElementFlags.Optional) === 0 ? "" : "?"}: ${e.typeToString(t, n, i.TypeFormatFlags.NoTruncation)}`;
92
+ });
93
+ }, C = (e, t, n) => {
78
94
  let r = (t) => e.typeToString(t, n, i.TypeFormatFlags.NoTruncation);
79
95
  return {
80
96
  input: `{ ${t.parameters.map((t) => {
81
- let i = e.getTypeOfSymbolAtLocation(t, t.valueDeclaration ?? n), a = E(t) ? "?" : "";
97
+ let i = e.getTypeOfSymbolAtLocation(t, t.valueDeclaration ?? n), a = O(t) ? "?" : "";
82
98
  return `${t.getName()}${a}: ${r(i)}`;
83
99
  }).join("; ")} }`,
84
100
  output: r(e.getReturnTypeOfSignature(t))
85
101
  };
86
- }, S = () => ({ type: "object" }), C = () => ({}), w = (e, t) => {
102
+ }, w = () => ({ type: "object" }), T = () => ({}), E = (e, t) => {
87
103
  let n = e.parameters?.nodes;
88
- if (!n?.some(T)) return e;
104
+ if (!n?.some(D)) return e;
89
105
  let r = n.map((n, r) => {
90
- if (!T(n)) return n;
106
+ if (!D(n)) return n;
91
107
  let i = {
92
108
  ...n.value,
93
- inputSchema: t[_(e.id, r, "input")] ?? S(),
94
- outputSchema: t[_(e.id, r, "output")] ?? C()
109
+ inputSchema: t[_(e.id, r, "input")] ?? w(),
110
+ outputSchema: t[_(e.id, r, "output")] ?? T()
95
111
  };
96
112
  return {
97
113
  ...n,
@@ -105,13 +121,13 @@ var l = {
105
121
  nodes: r
106
122
  }
107
123
  };
108
- }, T = (e) => e?.value?.__typename === "SubFlowValue", E = (e) => {
124
+ }, D = (e) => e?.value?.__typename === "SubFlowValue", O = (e) => {
109
125
  let t = e.valueDeclaration;
110
126
  return !!t && i.isParameter(t) && (!!t.questionToken || !!t.initializer || !!t.dotDotDotToken);
111
- }, D = (t, n) => {
127
+ }, k = (t, n) => {
112
128
  let r = t.get(`node_${e(n.id)}`)?.initializer;
113
129
  return r && i.isCallExpression(r) ? r : void 0;
114
- }, O = (e) => {
130
+ }, A = (e) => {
115
131
  let t = /* @__PURE__ */ new Map();
116
132
  return e.statements.forEach((e) => {
117
133
  e.forEachChild(function e(n) {
@@ -67,6 +67,16 @@ export interface PrimitiveInput extends Input {
67
67
  export interface DateInput extends Input {
68
68
  input?: "date";
69
69
  }
70
+ /**
71
+ * Represents a color input type.
72
+ * Emitted for the COLOR data type so the UI can render a dedicated color picker
73
+ * instead of expanding the `{ hue, saturation, lightness, alpha? }` object its
74
+ * underlying type would otherwise produce. Like {@link DateInput}, it carries no
75
+ * additional properties.
76
+ */
77
+ export interface ColorInput extends Input {
78
+ input?: "color";
79
+ }
70
80
  /**
71
81
  * Represents a file input type.
72
82
  * Emitted for the FILE data type so the UI can render a dedicated file picker
@@ -96,6 +106,58 @@ export interface ListFileInput extends Input {
96
106
  /** See {@link FileInput.mimetype}. */
97
107
  mimetype?: string;
98
108
  }
109
+ /**
110
+ * Represents a list of select inputs.
111
+ * Emitted for any array/list whose element is a select type (a primitive
112
+ * literal union or a single string/number literal — e.g. `LIST<HTTP_METHOD>`,
113
+ * `('GET' | 'POST')[]`) so the UI can render a dedicated multi-select instead
114
+ * of the generic list input its underlying type would otherwise produce.
115
+ */
116
+ export interface ListSelectInput extends Omit<ListInput, 'input'> {
117
+ input?: "list-select";
118
+ }
119
+ /**
120
+ * Represents a list of boolean inputs.
121
+ * Emitted for any array/list of plain booleans (e.g. `LIST<BOOLEAN>`,
122
+ * `boolean[]`) so the UI can render a dedicated multi-boolean input instead of
123
+ * the generic list of individual boolean inputs its underlying type would
124
+ * otherwise produce. Carries the per-item schemas in `items`, like a generic
125
+ * {@link ListInput}.
126
+ */
127
+ export interface ListBooleanInput extends Omit<ListInput, 'input'> {
128
+ input?: "list-boolean";
129
+ }
130
+ /**
131
+ * Represents a list of number inputs.
132
+ * Emitted for any array/list of plain numbers (e.g. `LIST<NUMBER>`, `number[]`)
133
+ * so the UI can render a dedicated multi-number input instead of the generic
134
+ * list of individual number inputs its underlying type would otherwise produce.
135
+ * Carries the per-item schemas in `items`, like a generic {@link ListInput}.
136
+ */
137
+ export interface ListNumberInput extends Omit<ListInput, 'input'> {
138
+ input?: "list-number";
139
+ }
140
+ /**
141
+ * Represents a list of text inputs.
142
+ * Emitted for any array/list of plain strings (e.g. `LIST<TEXT>`, `string[]`)
143
+ * so the UI can render a dedicated multi-text input instead of the generic list
144
+ * of individual text inputs its underlying type would otherwise produce. Carries
145
+ * the per-item schemas in `items`, like a generic {@link ListInput}.
146
+ */
147
+ export interface ListTextInput extends Omit<ListInput, 'input'> {
148
+ input?: "list-text";
149
+ }
150
+ /**
151
+ * Represents a list of sub-flow inputs.
152
+ * Emitted for any array/list whose element is a callable/sub-flow type (e.g.
153
+ * `LIST<FLOW>`, `(() => void)[]`) so the UI can render a dedicated multi-sub-flow
154
+ * input instead of the generic list of individual sub-flow inputs its underlying
155
+ * type would otherwise produce. Carries the per-item schemas in `items`, like a
156
+ * generic {@link ListInput}.
157
+ */
158
+ export interface ListSubFlowInput extends Omit<ListInput, 'input'> {
159
+ input?: "list-sub-flow";
160
+ }
99
161
  /**
100
162
  * Represents a data object input type with structured properties.
101
163
  * Includes property definitions and required field tracking.
@@ -131,7 +193,7 @@ export interface TypeInput extends Input {
131
193
  * Union type representing all possible schema input types.
132
194
  * Discriminated union based on the 'input' field.
133
195
  */
134
- export type Schema = PrimitiveInput | DateInput | FileInput | ListFileInput | DataInput | ListInput | TypeInput | SubFlowInput | GenericInput;
196
+ export type Schema = PrimitiveInput | DateInput | ColorInput | FileInput | ListFileInput | ListSelectInput | ListBooleanInput | ListNumberInput | ListTextInput | ListSubFlowInput | DataInput | ListInput | TypeInput | SubFlowInput | GenericInput;
135
197
  /**
136
198
  * Generates a schema definition for a given TypeScript type.
137
199
  *
@@ -157,28 +219,6 @@ export type Schema = PrimitiveInput | DateInput | FileInput | ListFileInput | Da
157
219
  * @returns A Schema object describing how to handle the parameter type
158
220
  */
159
221
  export declare const getSchema: (checker: ts.TypeChecker, node: ts.VariableDeclaration | undefined, parameterType: ts.Type, functionDeclarations: FunctionDeclaration[], functions: FunctionDefinition[], suggestions?: boolean, suggestionType?: ts.Type, visited?: Set<ts.Type>, recursionCache?: Map<ts.Type, boolean>) => Schema;
160
- /**
161
- * Merges a function-declared parameter schema with the schema derived from the
162
- * concrete node value. The function schema is treated as the source of truth for
163
- * the structural shape (input kind, properties, items); the node schema only
164
- * contributes additional suggestions and, when the function schema is generic,
165
- * a fallback shape.
166
- *
167
- * Rules:
168
- * - If the function schema is generic, follow the node schema — but never as a
169
- * select. A single literal value (e.g. "Test") narrowing a generic T must not
170
- * collapse the input into a select with one option; it should remain free-form
171
- * text/number/boolean matching the literal kind.
172
- * - Otherwise use the function schema's input kind and merge suggestions from both.
173
- * Recurse into `properties` (for data) and `items` (for list) so nested generics
174
- * inside concrete containers are handled the same way.
175
- *
176
- * Suggestions are concatenated and de-duplicated by structural equality.
177
- *
178
- * @param functionSchema - The schema derived from the declared function parameter type
179
- * @param nodeSchema - The schema derived from the node's concrete (narrowed) parameter type
180
- * @returns A single merged schema
181
- */
182
222
  export declare const mergeSchemas: (functionSchema: Schema | undefined, nodeSchema: Schema, valueProvided?: boolean) => Schema;
183
223
  /**
184
224
  * Checks if a type is a callable type (has call signatures).
@@ -0,0 +1,45 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("typescript");c=s(c,1);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(null,arguments)}var u=!1;try{u=typeof localStorage<`u`}catch{}var d=typeof process<`u`,f=u&&typeof localStorage.getItem==`function`&&localStorage.getItem(`DEBUG`)||d&&process.env.DEBUG?console.log:function(e){return``};function p(e,t,n,r,i){r===void 0&&(r={});var a=l({},g(n),r),o=te(e,t,a,n,i),s=o.languageServiceHost,c=o.updateFile,u=o.deleteFile,d=n.createLanguageService(s),f=d.getCompilerOptionsDiagnostics();if(f.length){var p=v(e,r,n);throw Error(n.formatDiagnostics(f,p.compilerHost))}return{name:`vfs`,sys:e,languageService:d,getSourceFile:function(e){return d.getProgram()?.getSourceFile(e)},createFile:function(e,t){c(n.createSourceFile(e,t,a.target,!1))},updateFile:function(e,t,r){var i=d.getProgram().getSourceFile(e);if(!i)throw Error(`Did not find a source file for `+e);var a=i.text,o=r??n.createTextSpan(0,a.length),s=a.slice(0,o.start)+t+a.slice(o.start+o.length);c(n.updateSourceFile(i,s,{span:o,newLength:t.length}))},deleteFile:function(e){var t=d.getProgram().getSourceFile(e);t&&u(t)}}}function m(e){throw Error(`Method '`+e+`' is not implemented.`)}function h(e,t){return function(){for(var n=arguments.length,r=Array(n),i=0;i<n;i++)r[i]=arguments[i];var a=t.apply(void 0,r),o=typeof a==`string`?a.slice(0,80)+`...`:a;return f.apply(void 0,[`> `+e].concat(r)),f(`< `+o),a}}var g=function(e){return l({},e.getDefaultCompilerOptions(),{jsx:e.JsxEmit.React,strict:!0,esModuleInterop:!0,module:e.ModuleKind.ESNext,suppressOutputPathCheck:!0,skipLibCheck:!0,skipDefaultLibCheck:!0},e.versionMajorMinor&&Number(e.versionMajorMinor.split(`.`)[0])>=6?{ignoreDeprecations:`6.0`}:{moduleResolution:e.ModuleResolutionKind.NodeJs})},_=function(e){return e.replace(`/`,`/lib.`).toLowerCase()};function ee(e){return{args:[],createDirectory:function(){return m(`createDirectory`)},directoryExists:h(`directoryExists`,function(t){return Array.from(e.keys()).some(function(e){return e.startsWith(t)})}),exit:function(){return m(`exit`)},fileExists:h(`fileExists`,function(t){return e.has(t)||e.has(_(t))}),getCurrentDirectory:function(){return`/`},getDirectories:function(){return[]},getExecutingFilePath:function(){return m(`getExecutingFilePath`)},readDirectory:h(`readDirectory`,function(t){return t===`/`?Array.from(e.keys()):[]}),readFile:h(`readFile`,function(t){return e.get(t)??e.get(_(t))}),resolvePath:function(e){return e},newLine:`
2
+ `,useCaseSensitiveFileNames:!0,write:function(){return m(`write`)},writeFile:function(t,n){e.set(t,n)},deleteFile:function(t){e.delete(t)}}}function v(e,t,n){var r=new Map,i=function(e){return r.set(e.fileName,e),e};return{compilerHost:l({},e,{getCanonicalFileName:function(e){return e},getDefaultLibFileName:function(){return`/`+n.getDefaultLibFileName(t)},getNewLine:function(){return e.newLine},getSourceFile:function(a,o){return r.get(a)||i(n.createSourceFile(a,e.readFile(a),o??t.target??g(n).target,!1))},useCaseSensitiveFileNames:function(){return e.useCaseSensitiveFileNames}}),updateFile:function(t){var n=r.has(t.fileName);return e.writeFile(t.fileName,t.text),r.set(t.fileName,t),n},deleteFile:function(t){var n=r.has(t.fileName);return r.delete(t.fileName),e.deleteFile(t.fileName),n}}}function te(e,t,n,r,i){var a=[].concat(t),o=v(e,n,r),s=o.compilerHost,c=o.updateFile,u=o.deleteFile,d=new Map,f=0;return{languageServiceHost:l({},s,{getProjectVersion:function(){return f.toString()},getCompilationSettings:function(){return n},getCustomTransformers:function(){return i},getScriptFileNames:function(){return a.slice()},getScriptSnapshot:function(t){var n=e.readFile(t);if(n&&typeof n==`string`)return r.ScriptSnapshot.fromString(n)},getScriptVersion:function(e){return d.get(e)||`0`},writeFile:e.writeFile}),updateFile:function(e){f++,d.set(e.fileName,f.toString()),a.includes(e.fileName)||a.push(e.fileName),c(e)},deleteFile:function(e){f++,d.set(e.fileName,f.toString());var t=a.indexOf(e.fileName);t!==-1&&a.splice(t,1),u(e)}}}function ne(e){return re.test(e)}var re=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/;function y(e,t,n,r){let i=ie(n);return a(typeof t==`function`?t.call({"":e},``,e):e,``);function a(e,t){if(Array.isArray(r)){let t=r.find(t=>t.test(e));if(t){let n=t.stringify(e);if(typeof n!=`string`||!ne(n))throw Error(`Invalid JSON number: output of a number stringifier must be a string containing a JSON number (output: ${n})`);return n}}if(typeof e==`boolean`||typeof e==`number`||typeof e==`string`||e===null||e instanceof Date||e instanceof Boolean||e instanceof Number||e instanceof String)return JSON.stringify(e);if(e?.isLosslessNumber||typeof e==`bigint`)return e.toString();if(Array.isArray(e))return o(e,t);if(e&&typeof e==`object`)return s(e,t)}function o(e,n){if(e.length===0)return`[]`;let r=i?n+i:void 0,o=i?`[
3
+ `:`[`;for(let n=0;n<e.length;n++){let s=typeof t==`function`?t.call(e,String(n),e[n]):e[n];i&&(o+=r),o+=s!==void 0&&typeof s!=`function`?a(s,r):`null`,n<e.length-1&&(o+=i?`,
4
+ `:`,`)}return o+=i?`\n${n}]`:`]`,o}function s(e,r){if(typeof e.toJSON==`function`)return y(e.toJSON(),t,n,void 0);let o=Array.isArray(t)?t.map(String):Object.keys(e);if(o.length===0)return`{}`;let s=i?r+i:void 0,l=!0,u=i?`{
5
+ `:`{`;for(let n of o){let r=typeof t==`function`?t.call(e,n,e[n]):e[n];if(c(n,r)){l?l=!1:u+=i?`,
6
+ `:`,`;let e=JSON.stringify(n);u+=i?`${s+e}: `:`${e}:`,u+=a(r,s)}}return u+=i?`\n${r}}`:`}`,u}function c(e,t){return t!==void 0&&typeof t!=`function`&&typeof t!=`symbol`}}function ie(e){if(typeof e==`number`)return` `.repeat(e);if(typeof e==`string`&&e!==``)return e}var b=e=>{if(c.default.isUnionTypeNode(e))return e.types.flatMap(b);if(c.default.isLiteralTypeNode(e)){let t=e.literal;if(c.default.isStringLiteral(t))return[{value:t.text,__typename:`LiteralValue`}];if(c.default.isNumericLiteral(t))return[{value:Number(t.text)}];if(t.kind===c.default.SyntaxKind.TrueKeyword)return[{value:!0,__typename:`LiteralValue`}];if(t.kind===c.default.SyntaxKind.FalseKeyword)return[{value:!1,__typename:`LiteralValue`}]}return[]},x=(e,t)=>{if(t&&e.aliasSymbol){let t=e.aliasSymbol.declarations?.[0];if(t&&c.default.isTypeAliasDeclaration(t))return b(t.type)}return e.isUnion()?e.types.flatMap(e=>x(e,t)):e.isStringLiteral()?[{value:e.value,__typename:`LiteralValue`}]:e.isNumberLiteral()?[{value:e.value.toString()}]:e.intrinsicName===`true`?[{value:!0,__typename:`LiteralValue`}]:e.intrinsicName===`false`?[{value:!1,__typename:`LiteralValue`}]:[]},S=(e,t,n,r)=>r.flatMap(r=>{let i=r.getName();if(!C(i))return[];let a=r.getDeclarations()?.[0];if(!a||a.getEnd()>=t.getEnd())return[];let o=e.getTypeOfSymbolAtLocation(r,t);return i.startsWith(`node_`)?w(i,o,e,n):i.startsWith(`p_`)?ae(i,o,e,n):i.startsWith(`flow_`)?oe(o,e,n):[]}),C=e=>e.startsWith(`node_`)||e.startsWith(`p_`)||e.startsWith(`flow_`),w=(e,t,n,r)=>{if((t.flags&c.default.TypeFlags.Void)!==0)return[];let i=T(e.replace(`node_`,``));return O(t,n,r).flatMap(({path:e})=>{let t={__typename:`ReferenceValue`,nodeFunctionId:i};return e.length>0&&(t.referencePath=e),t})},ae=(e,t,n,r)=>{let{nodeFunctionId:i,paramIndexFromName:a}=se(e);if(!n.isTupleType(t))return[];let o=t;return n.getTypeArguments(o).flatMap((e,t)=>O(e,n,r).flatMap(({path:e})=>{let n={__typename:`ReferenceValue`,nodeFunctionId:i,parameterIndex:isNaN(a)?0:a,inputIndex:t,inputTypeIdentifier:o.target.labeledElementDeclarations?.[t].name.getText()};return e.length>0&&(n.referencePath=e),n}))},oe=(e,t,n)=>O(e,t,n).flatMap(({path:e})=>{let t={__typename:`ReferenceValue`,nodeFunctionId:null};return e.length>0&&(t.referencePath=e),t}),T=e=>e.replace(/___/g,`://`).replace(/__/g,`/`).replace(/_/g,`/`),se=e=>{let t=e.replace(`p_`,``),n=t.lastIndexOf(`_`),r=t.substring(0,n),i=parseInt(t.substring(n+1),10);return{nodeFunctionId:T(r),paramIndexFromName:i}},ce=7,E=(e,t,n)=>{let r=n.get(e);if(r!==void 0)return r;let i=new Set,a=n=>{if(i.has(n)||!k(n))return!1;i.add(n);for(let r of n.getProperties()){if(!r.valueDeclaration)continue;let n=t.getNonNullableType(t.getTypeOfSymbolAtLocation(r,r.valueDeclaration));if(n===e||a(n))return!0}return!1},o=a(e);return n.set(e,o),o},D=(e,t,n)=>e.isUnion()?e.types.some(e=>D(t.getNonNullableType(e),t,n)):(e.flags&c.default.TypeFlags.Never)===0&&t.isTypeAssignableTo(e,n),le=(e,t)=>e.isUnion()?e.types.map(e=>t.getNonNullableType(e)).filter(k):k(e)?[e]:[],O=(e,t,n,r=[],i=new Set,a=new Map)=>{let o=[],s=t.getNonNullableType(e);return D(s,t,n)&&o.push({path:r,type:e}),le(s,t).forEach(e=>{if(i.has(e)||r.length>=ce&&E(e,t,a))return;let s=e.getProperties();s&&s.length>0&&(i.add(e),s.forEach(e=>{let s=t.getTypeOfSymbolAtLocation(e,e.valueDeclaration),c=e.getName(),l=[...r,{path:c}];o.push(...O(s,t,n,l,i,a))}),i.delete(e))}),o},k=e=>{let t=c.default.TypeFlags.String|c.default.TypeFlags.Number|c.default.TypeFlags.Boolean|c.default.TypeFlags.Undefined|c.default.TypeFlags.Null|c.default.TypeFlags.BigInt|c.default.TypeFlags.ESSymbol;return(e.flags&t)===0},ue=(e,t,n,r)=>X(r)?[]:t.flatMap(t=>{let i=de(e,t,n,r);return i?[i]:[]}),de=(e,t,n,r)=>{if(t.parameters.length>0)return null;let i=e.getSignatureFromDeclaration(t),a=A(e,e.getReturnTypeOfSignature(i)),o=e.getNonNullableType(a);if((o.flags&c.default.TypeFlags.Never)!==0||!e.isTypeAssignableTo(o,r))return null;let s=j(t.name?.getText());return M(n.find(e=>e.identifier===s))},A=(e,t)=>t.isTypeParameter()?e.getBaseConstraintOfType(t)||e.getAnyType():t,j=e=>e?e.replace(`fn_`,``).replace(`_`,`::`).replace(`_`,`::`):``,M=e=>{let t=(e?.parameterDefinitions?.nodes?.length??0)>0,n={__typename:`NodeFunction`,id:`gid://sagittarius/NodeFunction/1`,functionDefinition:{__typename:`FunctionDefinition`,id:e?.id,identifier:e?.identifier,names:e?.names,descriptions:e?.descriptions,displayIcon:e?.displayIcon}};return t&&(n.parameters=N(e?.parameterDefinitions?.nodes||[])),n},N=e=>({__typename:`NodeParameterConnection`,nodes:e.map(e=>P(e))}),P=e=>({__typename:`NodeParameter`,parameterDefinition:{__typename:`ParameterDefinition`,id:e?.id,identifier:e?.identifier},value:e?.defaultValue?{__typename:`LiteralValue`,value:e.defaultValue.value}:null}),F=(e,t,n,r)=>X(r)?t.flatMap(t=>{let i=I(e,t,n,r);return i?[i]:[]}):[],I=(e,t,n,r)=>{let i=e.getTypeAtLocation(t);if(!e.isTypeAssignableTo(i,r))return null;let a=L(t.name?.getText()),o=n.find(e=>e.identifier===a);return o?R(o):null},L=e=>e?e.replace(`fn_`,``).replace(`_`,`::`).replace(`_`,`::`):``,R=e=>({__typename:`SubFlowValue`,functionDefinition:e,signature:e.signature,settings:e.parameterDefinitions?.nodes?.map(e=>({__typename:`SubFlowValueSetting`,identifier:e?.identifier,defaultValue:e?.defaultValue??null,hidden:e?.hidden??!1,optional:e?.optional??!1}))}),z={DATE:`date`},B=e=>e!=null&&e in z,V=7,H=(e,t,n,r,i,a=!0,o,s=new Set,l=new Map)=>{if((n.flags&c.default.TypeFlags.TypeParameter)!==0){let u=n.symbol?.declarations?.[0];if(u&&c.default.isTypeParameterDeclaration(u)&&u.constraint)return H(e,t,e.getTypeFromTypeNode(u.constraint),r,i,a,o,s,l)}let u=e.typeToString(B(n.aliasSymbol?.getName())&&n.isIntersection()?n.types.find(e=>(e.flags&c.default.TypeFlags.Object)===0)??n:{...n,aliasSymbol:void 0}),d=o??n,f=a?{suggestions:[...x(d,e),...t?S(e,t,d,e.getSymbolsInScope(t,c.default.SymbolFlags.Variable)):[],...ue(e,r,i,d),...F(e,r,i,d)]}:{};if(n.isUnion()){let a=n.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0);if(a.length===1)return{...H(e,t,a[0],r,i,!1,void 0,s,l),type:u,...f}}let p=_e(n);if(p)return{input:p,type:u,...f};if(W(e,n))return{input:`file`,type:u,mimetype:G(e,n),...f};if(ve(e,n))return{input:`color`,type:u,...f};if(K(n))return{input:`boolean`,type:u,...f};if(Y(n))return{input:`select`,type:u,...f};if(q(n))return{input:`number`,type:u,...f};if(J(n))return{input:`text`,type:u,...f};if(X(n))return{input:`sub-flow`,type:u,...f};if(Se(e,n)){let o=e.getTypeArguments(n);if(o.length===1&&W(e,o[0]))return{input:`list-file`,type:u,mimetype:G(e,o[0]),...f};let c=o.flatMap(n=>(n.isUnion()?n.types:[n]).map(n=>H(e,t,n,r,i,a,void 0,s,l)));if(o.length===1&&Y(o[0]))return{input:`list-select`,type:u,items:c,...f};if(o.length===1){let e=o[0];if(K(e))return{input:`list-boolean`,type:u,items:c,...f};if(q(e))return{input:`list-number`,type:u,items:c,...f};if(J(e))return{input:`list-text`,type:u,items:c,...f};if(X(e))return{input:`list-sub-flow`,type:u,items:c,...f}}return{input:`list`,type:u,items:c,...f}}if((n.flags&c.default.TypeFlags.Object)!==0){if(s.has(n)||s.size>=V&&E(n,e,l))return{input:`data`,type:u,...f};s.add(n);let o={},d=[];for(let u of e.getPropertiesOfType(n)){let n=u.valueDeclaration??u.declarations?.[0];if(!n)continue;let f=e.getTypeOfSymbolAtLocation(u,n),p=(u.flags&c.default.SymbolFlags.Optional)!==0||f.isUnion()&&f.types.some(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))!==0),m=(f.isUnion()?f.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0):[f]).map(n=>H(e,t,n,r,i,a,void 0,s,l));o[u.name]=m.length===1?m[0]:m,p||d.push(u.name)}return s.delete(n),{input:`data`,type:u,properties:o,required:d,...f}}return{input:`generic`,type:u,...f}},fe=new Set([`list`,`list-select`,`list-boolean`,`list-number`,`list-text`,`list-sub-flow`]),U=(e,t,n=!1)=>{if(!e||e.input===`generic`)return he(ge(t),n);let r=me(e.suggestions,t.suggestions);if(e.input===`data`){let n=e.properties??{},i=t.input===`data`?t.properties??{}:{},a={},o=new Set([...Object.keys(n),...Object.keys(i)]);for(let e of o){let t=n[e],r=i[e];a[e]=pe(t,r)}return{...e,properties:a,...r?{suggestions:r}:{}}}if(fe.has(e.input)){let n=e.items??[],i=t.input===e.input?t.items??[]:[],a=n.length===i.length&&n.length>0?n.map((e,t)=>U(e,i[t])):n;return{...e,items:a,...r?{suggestions:r}:{}}}return{...e,...r?{suggestions:r}:{}}},pe=(e,t)=>e&&!Array.isArray(e)&&t&&!Array.isArray(t)?U(e,t):e??t,me=(e,t)=>{let n=[...e??[],...t??[]];if(n.length===0)return;let r=new Set,i=[];for(let e of n){let t=JSON.stringify(e);r.has(t)||(r.add(t),i.push(e))}return i},he=(e,t)=>!t||e.input!==`generic`?e:{input:`data`,...e.type?{type:e.type}:{},properties:{},required:[],...e.suggestions?{suggestions:e.suggestions}:{}},ge=e=>{if(e.input!==`select`)return e;let t=e.suggestions??[],n=new Set;for(let e of t){let t=typeof e.value;(t===`string`||t===`number`||t===`boolean`)&&n.add(t)}return{input:n.size===1?{string:`text`,number:`number`,boolean:`boolean`}[[...n][0]]:`text`,...e.type?{type:e.type}:{},...t.length>0?{suggestions:t}:{}}};function _e(e){let t=e.aliasSymbol?.getName();return B(t)?z[t]:void 0}function W(e,t){if(t.aliasSymbol?.getName()!==`FILE`||(t.flags&c.default.TypeFlags.Object)===0)return!1;let n=e.getPropertiesOfType(t);if(n.length!==4)return!1;let r=new Map(n.map(e=>[e.name,e])),i=r.get(`valueType`);if(!r.has(`contentType`)||!r.has(`fileName`)||!r.has(`value`)||!i)return!1;let a=i.valueDeclaration??i.declarations?.[0];if(!a)return!1;let o=e.getTypeOfSymbolAtLocation(i,a);return o.isStringLiteral()&&o.value===`base64`}function ve(e,t){if(t.aliasSymbol?.getName()!==`COLOR`||(t.flags&c.default.TypeFlags.Object)===0)return!1;let n=new Map(e.getPropertiesOfType(t).map(e=>[e.name,e]));return[`hue`,`saturation`,`lightness`].every(t=>{let r=n.get(t);if(!r)return!1;let i=r.valueDeclaration??r.declarations?.[0];return i?q(e.getTypeOfSymbolAtLocation(r,i)):!1})}function G(e,t){let n=/^(\*|[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+-]*)\/(\*|[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+-]*)$/,r=e.getPropertiesOfType(t).find(e=>e.name===`contentType`);if(!r)return`*/*`;let i=r.valueDeclaration??r.declarations?.[0];if(!i)return`*/*`;let a=e.getTypeOfSymbolAtLocation(r,i);return a.isStringLiteral()&&n.test(a.value)?a.value:`*/*`}function K(e){if((e.flags&c.default.TypeFlags.Boolean)!==0||(e.flags&c.default.TypeFlags.BooleanLiteral)!==0)return!0;if(e.isUnion()){let t=e.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0);return t.length>0&&t.every(e=>(e.flags&c.default.TypeFlags.Boolean)!==0||(e.flags&c.default.TypeFlags.BooleanLiteral)!==0)}return!1}function q(e){return(e.flags&c.default.TypeFlags.Number)!==0||(e.flags&c.default.TypeFlags.NumberLiteral)!==0}function J(e){return(e.flags&c.default.TypeFlags.String)!==0||(e.flags&c.default.TypeFlags.StringLiteral)!==0}function ye(e){return J(e)||q(e)||K(e)}function be(e){return(e.flags&c.default.TypeFlags.StringLiteral)!==0||(e.flags&c.default.TypeFlags.NumberLiteral)!==0}function Y(e){return K(e)?!1:xe(e)||be(e)}function xe(e){if(!e.isUnion())return!1;let t=e.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0);return t.length>0&&t.every(ye)}function Se(e,t){return e.isArrayType(t)||e.isTupleType(t)}function X(e){return e.getCallSignatures().length>0}var Ce=`
7
+ interface Array<T> {
8
+ [n: number]: T;
9
+ length: number;
10
+ }
11
+ interface String { readonly length: number; }
12
+ interface Number { }
13
+ interface Boolean { }
14
+ interface Object { }
15
+ interface Function { }
16
+ interface CallableFunction extends Function {}
17
+ interface NewableFunction extends Function {}
18
+ interface IArguments { }
19
+ interface RegExp { }
20
+
21
+ declare namespace Utils {
22
+ type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
23
+ }
24
+
25
+ import ReturnType = Utils.ReturnType;
26
+ `;function we(e,t){let n=new Map;return n.set(e,t),n.set(`lib.codezero.d.ts`,Ce),p(ee(n),[e,`lib.codezero.d.ts`],c.default,Te)}var Te={target:c.default.ScriptTarget.Latest,lib:[`lib.codezero.d.ts`],noEmit:!0,strictNullChecks:!0};function Z(e){let t=[],n=0,r=null,i=``;for(let a of e){if(r)a===r&&(r=null);else if(a===`'`||a===`"`||a==="`")r=a;else if(a===`<`||a===`{`||a===`(`||a===`[`)n++;else if(a===`>`||a===`}`||a===`)`||a===`]`)n--;else if(a===`,`&&n===0){t.push(i),i=``;continue}i+=a}return t.push(i),t.map(e=>(e.trim().split(/\s+/).find(e=>e!==`const`&&e!==`in`&&e!==`out`)??``).match(/^[A-Za-z_$][A-Za-z0-9_$]*/)?.[0]??``).filter(e=>e.length>0)}function Q(e,t=`any`,n=!0){let r=Array.from(new Set(e?.flatMap(e=>e.genericKeys||[]).flatMap(Z))).map(e=>`type ${e} = ${t};`).join(`
27
+ `),i=e?.map(e=>{let t=(e.genericKeys?.length??0)>0?`<${e.genericKeys?.join(`,`)}>`:``,n=B(e.identifier)?`${e.type} & {}`:e.type;return`type ${e.identifier}${t} = ${n};`}).join(`
28
+ `),a=e?.filter(e=>(e.genericKeys?.length??0)>0).map(e=>`declare const __widen_${e.identifier}: ${e.identifier}<${e.genericKeys.map(()=>`any`).join(`, `)}>;`).join(`
29
+ `)??``;return`${n?r:``}\n${i}\n${a}`}var $=e=>e?.replace(/[^a-zA-Z0-9]/g,`_`);function Ee(e,t,n,r=!1,i=!0){let a=e?.nodes?.nodes||[],o=new Map(t?.map(e=>[e.identifier,e])),s=new Set,c=(t,n=``)=>{let l=a.find(e=>e?.id===t);if(!l||!l.functionDefinition)return``;if(t?.includes(`NodeFunction`)&&s.add(t),!o.get(l.functionDefinition.identifier))return`${n}// Error: Function ${l.functionDefinition.identifier} not found\n`;let u=(l.parameters?.nodes||[]).map((a,o)=>{let s=a.value;if(!s)return r?`/* @pos ${t} ${o} */ {}`:`/* @pos ${t} ${o} */ undefined`;if(s.__typename===`ReferenceValue`){let n=s,r=typeof n.inputIndex==`number`?`p_${$(n.nodeFunctionId??`undefined`)}_${n.parameterIndex}[${n.inputIndex}]`:n.nodeFunctionId?`node_${$(n.nodeFunctionId)}`:`flow_${$(e?.id??`undefined`)}`;return n.referencePath?.forEach(e=>{r+=`?.${e.path}`}),`/* @pos ${t} ${o} */ (${r})${i?`!`:``}`}if(s.__typename===`LiteralValue`)return`/* @pos ${t} ${o} */ ${s?.value!==null&&s?.value!==void 0?y(s?.value):void 0}`;if(s.__typename===`SubFlowValue`){let e=s;return!e.startingNodeId&&e.functionDefinition?.identifier?`/* @pos ${t} ${o} */ ${`fn_${e.functionDefinition.identifier.replace(/::/g,`_`)}`}`:`/* @pos ${t} ${o} */ (...${`p_${$(t)}_${o}`}) => {\n${c(e.startingNodeId||e.functionDefinition?.id,n+` `)}${n}}`}return r?`/* @pos ${t} ${o} */ {}`:`/* @pos ${t} ${o} */ undefined`}),d=`node_${$(l.id)}`,f=`fn_${l?.functionDefinition?.identifier?.replace(/::/g,`_`)}`;u.includes(`undefined`);let p=`${n}`;return l.functionDefinition.identifier===`std::control::return`?(p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,p+=`return ${d};\n`):l.functionDefinition.identifier===`std::control::if`?(p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,p+=`if(${u[0]}) {
30
+ ${c(l.parameters?.nodes?.[1]?.value?.startingNodeId||(l.parameters?.nodes?.[1]?.value)?.functionDefinition?.identifier,n+` `)}
31
+ }`):l.functionDefinition.identifier===`std::control::if_else`?(p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,p+=`if(${u[0]}) {
32
+ ${c(l.parameters?.nodes?.[1]?.value?.startingNodeId||(l.parameters?.nodes?.[1]?.value)?.functionDefinition?.identifier,n+` `)}
33
+ } else {
34
+ ${c(l.parameters?.nodes?.[2]?.value?.startingNodeId||(l.parameters?.nodes?.[2]?.value)?.functionDefinition?.identifier,n+` `)}
35
+ }`):p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,l.nextNodeId&&(p+=c(l.nextNodeId,n)),p},l=Q(n),u=`declare function flow${e?.signature??`(): void`}`,d=t?.map(e=>`declare function fn_${e.identifier?.replace(/::/g,`_`)}${e.signature}`).join(`
36
+ `),f=new Set(a.map(e=>e?.nextNodeId).filter(e=>!!e)),p=new Set;return a.forEach(e=>e?.parameters?.nodes?.forEach(e=>{e?.value?.__typename===`SubFlowValue`&&(e.value.startingNodeId||e.value.functionDefinition?.id)&&p.add(e.value.startingNodeId||e.value.functionDefinition?.id)})),`
37
+ ${l}\n
38
+ ${u}\n
39
+ ${d}\n
40
+ (() =>
41
+ ${e?`const flow_${$(e.id??``)} = /* @pos null null */ flow(${e.settings?.nodes?.map((e,t)=>`/* @pos null ${t} */ ${e?.value!==null&&e?.value!==void 0?y(e?.value):void 0}`).join(`, `)??``});`:``}
42
+ ${a.filter(e=>e?.id&&!f.has(e.id)&&!p.has(e.id)).map(e=>c(e.id)).join(`
43
+ `)}
44
+ )();
45
+ `}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return y}});
@@ -288,7 +288,7 @@ var _ = (t) => {
288
288
  }), b = (e) => e.startsWith("node_") || e.startsWith("p_") || e.startsWith("flow_"), ee = (t, n, r, i) => {
289
289
  if ((n.flags & e.TypeFlags.Void) !== 0) return [];
290
290
  let a = x(t.replace("node_", ""));
291
- return D(n, r, i).flatMap(({ path: e }) => {
291
+ return E(n, r, i).flatMap(({ path: e }) => {
292
292
  let t = {
293
293
  __typename: "ReferenceValue",
294
294
  nodeFunctionId: a
@@ -299,7 +299,7 @@ var _ = (t) => {
299
299
  let { nodeFunctionId: i, paramIndexFromName: a } = S(e);
300
300
  if (!n.isTupleType(t)) return [];
301
301
  let o = t;
302
- return n.getTypeArguments(o).flatMap((e, t) => D(e, n, r).flatMap(({ path: e }) => {
302
+ return n.getTypeArguments(o).flatMap((e, t) => E(e, n, r).flatMap(({ path: e }) => {
303
303
  let n = {
304
304
  __typename: "ReferenceValue",
305
305
  nodeFunctionId: i,
@@ -309,7 +309,7 @@ var _ = (t) => {
309
309
  };
310
310
  return e.length > 0 && (n.referencePath = e), n;
311
311
  }));
312
- }, ne = (e, t, n) => D(e, t, n).flatMap(({ path: e }) => {
312
+ }, ne = (e, t, n) => E(e, t, n).flatMap(({ path: e }) => {
313
313
  let t = {
314
314
  __typename: "ReferenceValue",
315
315
  nodeFunctionId: null
@@ -325,7 +325,7 @@ var _ = (t) => {
325
325
  let r = n.get(e);
326
326
  if (r !== void 0) return r;
327
327
  let i = /* @__PURE__ */ new Set(), a = (n) => {
328
- if (i.has(n) || !O(n)) return !1;
328
+ if (i.has(n) || !D(n)) return !1;
329
329
  i.add(n);
330
330
  for (let r of n.getProperties()) {
331
331
  if (!r.valueDeclaration) continue;
@@ -335,32 +335,32 @@ var _ = (t) => {
335
335
  return !1;
336
336
  }, o = a(e);
337
337
  return n.set(e, o), o;
338
- }, T = (t, n, r) => t.isUnion() ? t.types.some((e) => T(n.getNonNullableType(e), n, r)) : (t.flags & e.TypeFlags.Never) === 0 && n.isTypeAssignableTo(t, r), E = (e, t) => e.isUnion() ? e.types.map((e) => t.getNonNullableType(e)).filter(O) : O(e) ? [e] : [], D = (e, t, n, r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Map()) => {
338
+ }, T = (t, n, r) => t.isUnion() ? t.types.some((e) => T(n.getNonNullableType(e), n, r)) : (t.flags & e.TypeFlags.Never) === 0 && n.isTypeAssignableTo(t, r), re = (e, t) => e.isUnion() ? e.types.map((e) => t.getNonNullableType(e)).filter(D) : D(e) ? [e] : [], E = (e, t, n, r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Map()) => {
339
339
  let o = [], s = t.getNonNullableType(e);
340
340
  return T(s, t, n) && o.push({
341
341
  path: r,
342
342
  type: e
343
- }), E(s, t).forEach((e) => {
343
+ }), re(s, t).forEach((e) => {
344
344
  if (i.has(e) || r.length >= C && w(e, t, a)) return;
345
345
  let s = e.getProperties();
346
346
  s && s.length > 0 && (i.add(e), s.forEach((e) => {
347
347
  let s = t.getTypeOfSymbolAtLocation(e, e.valueDeclaration), c = e.getName(), l = [...r, { path: c }];
348
- o.push(...D(s, t, n, l, i, a));
348
+ o.push(...E(s, t, n, l, i, a));
349
349
  }), i.delete(e));
350
350
  }), o;
351
- }, O = (t) => {
351
+ }, D = (t) => {
352
352
  let n = e.TypeFlags.String | e.TypeFlags.Number | e.TypeFlags.Boolean | e.TypeFlags.Undefined | e.TypeFlags.Null | e.TypeFlags.BigInt | e.TypeFlags.ESSymbol;
353
353
  return (t.flags & n) === 0;
354
- }, re = (e, t, n, r) => X(r) ? [] : t.flatMap((t) => {
355
- let i = ie(e, t, n, r);
354
+ }, ie = (e, t, n, r) => X(r) ? [] : t.flatMap((t) => {
355
+ let i = ae(e, t, n, r);
356
356
  return i ? [i] : [];
357
- }), ie = (t, n, r, i) => {
357
+ }), ae = (t, n, r, i) => {
358
358
  if (n.parameters.length > 0) return null;
359
- let a = t.getSignatureFromDeclaration(n), o = ae(t, t.getReturnTypeOfSignature(a)), s = t.getNonNullableType(o);
359
+ let a = t.getSignatureFromDeclaration(n), o = oe(t, t.getReturnTypeOfSignature(a)), s = t.getNonNullableType(o);
360
360
  if ((s.flags & e.TypeFlags.Never) !== 0 || !t.isTypeAssignableTo(s, i)) return null;
361
- let c = oe(n.name?.getText());
362
- return se(r.find((e) => e.identifier === c));
363
- }, ae = (e, t) => t.isTypeParameter() ? e.getBaseConstraintOfType(t) || e.getAnyType() : t, oe = (e) => e ? e.replace("fn_", "").replace("_", "::").replace("_", "::") : "", se = (e) => {
361
+ let c = se(n.name?.getText());
362
+ return ce(r.find((e) => e.identifier === c));
363
+ }, oe = (e, t) => t.isTypeParameter() ? e.getBaseConstraintOfType(t) || e.getAnyType() : t, se = (e) => e ? e.replace("fn_", "").replace("_", "::").replace("_", "::") : "", ce = (e) => {
364
364
  let t = (e?.parameterDefinitions?.nodes?.length ?? 0) > 0, n = {
365
365
  __typename: "NodeFunction",
366
366
  id: "gid://sagittarius/NodeFunction/1",
@@ -373,11 +373,11 @@ var _ = (t) => {
373
373
  displayIcon: e?.displayIcon
374
374
  }
375
375
  };
376
- return t && (n.parameters = k(e?.parameterDefinitions?.nodes || [])), n;
377
- }, k = (e) => ({
376
+ return t && (n.parameters = le(e?.parameterDefinitions?.nodes || [])), n;
377
+ }, le = (e) => ({
378
378
  __typename: "NodeParameterConnection",
379
- nodes: e.map((e) => A(e))
380
- }), A = (e) => ({
379
+ nodes: e.map((e) => O(e))
380
+ }), O = (e) => ({
381
381
  __typename: "NodeParameter",
382
382
  parameterDefinition: {
383
383
  __typename: "ParameterDefinition",
@@ -388,15 +388,15 @@ var _ = (t) => {
388
388
  __typename: "LiteralValue",
389
389
  value: e.defaultValue.value
390
390
  } : null
391
- }), j = (e, t, n, r) => X(r) ? t.flatMap((t) => {
392
- let i = M(e, t, n, r);
391
+ }), k = (e, t, n, r) => X(r) ? t.flatMap((t) => {
392
+ let i = A(e, t, n, r);
393
393
  return i ? [i] : [];
394
- }) : [], M = (e, t, n, r) => {
394
+ }) : [], A = (e, t, n, r) => {
395
395
  let i = e.getTypeAtLocation(t);
396
396
  if (!e.isTypeAssignableTo(i, r)) return null;
397
- let a = N(t.name?.getText()), o = n.find((e) => e.identifier === a);
398
- return o ? P(o) : null;
399
- }, N = (e) => e ? e.replace("fn_", "").replace("_", "::").replace("_", "::") : "", P = (e) => ({
397
+ let a = j(t.name?.getText()), o = n.find((e) => e.identifier === a);
398
+ return o ? M(o) : null;
399
+ }, j = (e) => e ? e.replace("fn_", "").replace("_", "::").replace("_", "::") : "", M = (e) => ({
400
400
  __typename: "SubFlowValue",
401
401
  functionDefinition: e,
402
402
  signature: e.signature,
@@ -407,56 +407,61 @@ var _ = (t) => {
407
407
  hidden: e?.hidden ?? !1,
408
408
  optional: e?.optional ?? !1
409
409
  }))
410
- }), F = { DATE: "date" }, I = (e) => e != null && e in F, L = 7, R = (t, n, r, i, a, o = !0, s, c = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Map()) => {
410
+ }), N = { DATE: "date" }, P = (e) => e != null && e in N, F = 7, I = (t, n, r, i, a, o = !0, s, c = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Map()) => {
411
411
  if ((r.flags & e.TypeFlags.TypeParameter) !== 0) {
412
412
  let u = r.symbol?.declarations?.[0];
413
- if (u && e.isTypeParameterDeclaration(u) && u.constraint) return R(t, n, t.getTypeFromTypeNode(u.constraint), i, a, o, s, c, l);
413
+ if (u && e.isTypeParameterDeclaration(u) && u.constraint) return I(t, n, t.getTypeFromTypeNode(u.constraint), i, a, o, s, c, l);
414
414
  }
415
- let u = t.typeToString(I(r.aliasSymbol?.getName()) && r.isIntersection() ? r.types.find((t) => (t.flags & e.TypeFlags.Object) === 0) ?? r : {
415
+ let u = t.typeToString(P(r.aliasSymbol?.getName()) && r.isIntersection() ? r.types.find((t) => (t.flags & e.TypeFlags.Object) === 0) ?? r : {
416
416
  ...r,
417
417
  aliasSymbol: void 0
418
418
  }), d = s ?? r, f = o ? { suggestions: [
419
419
  ...v(d, t),
420
420
  ...n ? y(t, n, d, t.getSymbolsInScope(n, e.SymbolFlags.Variable)) : [],
421
- ...re(t, i, a, d),
422
- ...j(t, i, a, d)
421
+ ...ie(t, i, a, d),
422
+ ...k(t, i, a, d)
423
423
  ] } : {};
424
424
  if (r.isUnion()) {
425
425
  let o = r.types.filter((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) === 0);
426
426
  if (o.length === 1) return {
427
- ...R(t, n, o[0], i, a, !1, void 0, c, l),
427
+ ...I(t, n, o[0], i, a, !1, void 0, c, l),
428
428
  type: u,
429
429
  ...f
430
430
  };
431
431
  }
432
- let p = W(r);
432
+ let p = U(r);
433
433
  if (p) return {
434
434
  input: p,
435
435
  type: u,
436
436
  ...f
437
437
  };
438
- if (G(t, r)) return {
438
+ if (W(t, r)) return {
439
439
  input: "file",
440
440
  type: u,
441
- mimetype: K(t, r),
441
+ mimetype: G(t, r),
442
442
  ...f
443
443
  };
444
- if (q(r)) return {
444
+ if (ue(t, r)) return {
445
+ input: "color",
446
+ type: u,
447
+ ...f
448
+ };
449
+ if (K(r)) return {
445
450
  input: "boolean",
446
451
  type: u,
447
452
  ...f
448
453
  };
449
- if (ue(r) || le(r)) return {
454
+ if (Y(r)) return {
450
455
  input: "select",
451
456
  type: u,
452
457
  ...f
453
458
  };
454
- if (J(r)) return {
459
+ if (q(r)) return {
455
460
  input: "number",
456
461
  type: u,
457
462
  ...f
458
463
  };
459
- if (Y(r)) return {
464
+ if (J(r)) return {
460
465
  input: "text",
461
466
  type: u,
462
467
  ...f
@@ -466,22 +471,57 @@ var _ = (t) => {
466
471
  type: u,
467
472
  ...f
468
473
  };
469
- if (de(t, r)) {
474
+ if (me(t, r)) {
470
475
  let e = t.getTypeArguments(r);
471
- return e.length === 1 && G(t, e[0]) ? {
476
+ if (e.length === 1 && W(t, e[0])) return {
472
477
  input: "list-file",
473
478
  type: u,
474
- mimetype: K(t, e[0]),
479
+ mimetype: G(t, e[0]),
480
+ ...f
481
+ };
482
+ let s = e.flatMap((e) => (e.isUnion() ? e.types : [e]).map((e) => I(t, n, e, i, a, o, void 0, c, l)));
483
+ if (e.length === 1 && Y(e[0])) return {
484
+ input: "list-select",
485
+ type: u,
486
+ items: s,
475
487
  ...f
476
- } : {
488
+ };
489
+ if (e.length === 1) {
490
+ let t = e[0];
491
+ if (K(t)) return {
492
+ input: "list-boolean",
493
+ type: u,
494
+ items: s,
495
+ ...f
496
+ };
497
+ if (q(t)) return {
498
+ input: "list-number",
499
+ type: u,
500
+ items: s,
501
+ ...f
502
+ };
503
+ if (J(t)) return {
504
+ input: "list-text",
505
+ type: u,
506
+ items: s,
507
+ ...f
508
+ };
509
+ if (X(t)) return {
510
+ input: "list-sub-flow",
511
+ type: u,
512
+ items: s,
513
+ ...f
514
+ };
515
+ }
516
+ return {
477
517
  input: "list",
478
518
  type: u,
479
- items: e.flatMap((e) => (e.isUnion() ? e.types : [e]).map((e) => R(t, n, e, i, a, o, void 0, c, l))),
519
+ items: s,
480
520
  ...f
481
521
  };
482
522
  }
483
523
  if ((r.flags & e.TypeFlags.Object) !== 0) {
484
- if (c.has(r) || c.size >= L && w(r, t, l)) return {
524
+ if (c.has(r) || c.size >= F && w(r, t, l)) return {
485
525
  input: "data",
486
526
  type: u,
487
527
  ...f
@@ -491,7 +531,7 @@ var _ = (t) => {
491
531
  for (let u of t.getPropertiesOfType(r)) {
492
532
  let r = u.valueDeclaration ?? u.declarations?.[0];
493
533
  if (!r) continue;
494
- let f = t.getTypeOfSymbolAtLocation(u, r), p = (u.flags & e.SymbolFlags.Optional) !== 0 || f.isUnion() && f.types.some((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) !== 0), m = (f.isUnion() ? f.types.filter((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) === 0) : [f]).map((e) => R(t, n, e, i, a, o, void 0, c, l));
534
+ let f = t.getTypeOfSymbolAtLocation(u, r), p = (u.flags & e.SymbolFlags.Optional) !== 0 || f.isUnion() && f.types.some((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) !== 0), m = (f.isUnion() ? f.types.filter((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) === 0) : [f]).map((e) => I(t, n, e, i, a, o, void 0, c, l));
495
535
  s[u.name] = m.length === 1 ? m[0] : m, p || d.push(u.name);
496
536
  }
497
537
  return c.delete(r), {
@@ -507,14 +547,21 @@ var _ = (t) => {
507
547
  type: u,
508
548
  ...f
509
549
  };
510
- }, z = (e, t, n = !1) => {
511
- if (!e || e.input === "generic") return H(U(t), n);
512
- let r = V(e.suggestions, t.suggestions);
550
+ }, L = /* @__PURE__ */ new Set([
551
+ "list",
552
+ "list-select",
553
+ "list-boolean",
554
+ "list-number",
555
+ "list-text",
556
+ "list-sub-flow"
557
+ ]), R = (e, t, n = !1) => {
558
+ if (!e || e.input === "generic") return V(H(t), n);
559
+ let r = B(e.suggestions, t.suggestions);
513
560
  if (e.input === "data") {
514
561
  let n = e.properties ?? {}, i = t.input === "data" ? t.properties ?? {} : {}, a = {}, o = /* @__PURE__ */ new Set([...Object.keys(n), ...Object.keys(i)]);
515
562
  for (let e of o) {
516
563
  let t = n[e], r = i[e];
517
- a[e] = B(t, r);
564
+ a[e] = z(t, r);
518
565
  }
519
566
  return {
520
567
  ...e,
@@ -522,8 +569,8 @@ var _ = (t) => {
522
569
  ...r ? { suggestions: r } : {}
523
570
  };
524
571
  }
525
- if (e.input === "list") {
526
- let n = e.items ?? [], i = t.input === "list" ? t.items ?? [] : [], a = n.length === i.length && n.length > 0 ? n.map((e, t) => z(e, i[t])) : n;
572
+ if (L.has(e.input)) {
573
+ let n = e.items ?? [], i = t.input === e.input ? t.items ?? [] : [], a = n.length === i.length && n.length > 0 ? n.map((e, t) => R(e, i[t])) : n;
527
574
  return {
528
575
  ...e,
529
576
  items: a,
@@ -534,7 +581,7 @@ var _ = (t) => {
534
581
  ...e,
535
582
  ...r ? { suggestions: r } : {}
536
583
  };
537
- }, B = (e, t) => e && !Array.isArray(e) && t && !Array.isArray(t) ? z(e, t) : e ?? t, V = (e, t) => {
584
+ }, z = (e, t) => e && !Array.isArray(e) && t && !Array.isArray(t) ? R(e, t) : e ?? t, B = (e, t) => {
538
585
  let n = [...e ?? [], ...t ?? []];
539
586
  if (n.length === 0) return;
540
587
  let r = /* @__PURE__ */ new Set(), i = [];
@@ -543,13 +590,13 @@ var _ = (t) => {
543
590
  r.has(t) || (r.add(t), i.push(e));
544
591
  }
545
592
  return i;
546
- }, H = (e, t) => !t || e.input !== "generic" ? e : {
593
+ }, V = (e, t) => !t || e.input !== "generic" ? e : {
547
594
  input: "data",
548
595
  ...e.type ? { type: e.type } : {},
549
596
  properties: {},
550
597
  required: [],
551
598
  ...e.suggestions ? { suggestions: e.suggestions } : {}
552
- }, U = (e) => {
599
+ }, H = (e) => {
553
600
  if (e.input !== "select") return e;
554
601
  let t = e.suggestions ?? [], n = /* @__PURE__ */ new Set();
555
602
  for (let e of t) {
@@ -566,22 +613,36 @@ var _ = (t) => {
566
613
  ...t.length > 0 ? { suggestions: t } : {}
567
614
  };
568
615
  };
569
- function W(e) {
616
+ function U(e) {
570
617
  let t = e.aliasSymbol?.getName();
571
- return I(t) ? F[t] : void 0;
618
+ return P(t) ? N[t] : void 0;
572
619
  }
573
- function G(t, n) {
620
+ function W(t, n) {
574
621
  if (n.aliasSymbol?.getName() !== "FILE" || (n.flags & e.TypeFlags.Object) === 0) return !1;
575
622
  let r = t.getPropertiesOfType(n);
576
- if (r.length !== 3) return !1;
623
+ if (r.length !== 4) return !1;
577
624
  let i = new Map(r.map((e) => [e.name, e])), a = i.get("valueType");
578
- if (!i.has("contentType") || !i.has("value") || !a) return !1;
625
+ if (!i.has("contentType") || !i.has("fileName") || !i.has("value") || !a) return !1;
579
626
  let o = a.valueDeclaration ?? a.declarations?.[0];
580
627
  if (!o) return !1;
581
628
  let s = t.getTypeOfSymbolAtLocation(a, o);
582
629
  return s.isStringLiteral() && s.value === "base64";
583
630
  }
584
- function K(e, t) {
631
+ function ue(t, n) {
632
+ if (n.aliasSymbol?.getName() !== "COLOR" || (n.flags & e.TypeFlags.Object) === 0) return !1;
633
+ let r = new Map(t.getPropertiesOfType(n).map((e) => [e.name, e]));
634
+ return [
635
+ "hue",
636
+ "saturation",
637
+ "lightness"
638
+ ].every((e) => {
639
+ let n = r.get(e);
640
+ if (!n) return !1;
641
+ let i = n.valueDeclaration ?? n.declarations?.[0];
642
+ return i ? q(t.getTypeOfSymbolAtLocation(n, i)) : !1;
643
+ });
644
+ }
645
+ function G(e, t) {
585
646
  let n = /^(\*|[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+-]*)\/(\*|[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+-]*)$/, r = e.getPropertiesOfType(t).find((e) => e.name === "contentType");
586
647
  if (!r) return "*/*";
587
648
  let i = r.valueDeclaration ?? r.declarations?.[0];
@@ -589,7 +650,7 @@ function K(e, t) {
589
650
  let a = e.getTypeOfSymbolAtLocation(r, i);
590
651
  return a.isStringLiteral() && n.test(a.value) ? a.value : "*/*";
591
652
  }
592
- function q(t) {
653
+ function K(t) {
593
654
  if ((t.flags & e.TypeFlags.Boolean) !== 0 || (t.flags & e.TypeFlags.BooleanLiteral) !== 0) return !0;
594
655
  if (t.isUnion()) {
595
656
  let n = t.types.filter((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) === 0);
@@ -597,24 +658,27 @@ function q(t) {
597
658
  }
598
659
  return !1;
599
660
  }
600
- function J(t) {
661
+ function q(t) {
601
662
  return (t.flags & e.TypeFlags.Number) !== 0 || (t.flags & e.TypeFlags.NumberLiteral) !== 0;
602
663
  }
603
- function Y(t) {
664
+ function J(t) {
604
665
  return (t.flags & e.TypeFlags.String) !== 0 || (t.flags & e.TypeFlags.StringLiteral) !== 0;
605
666
  }
606
- function ce(e) {
607
- return Y(e) || J(e) || q(e);
667
+ function de(e) {
668
+ return J(e) || q(e) || K(e);
608
669
  }
609
- function le(t) {
670
+ function fe(t) {
610
671
  return (t.flags & e.TypeFlags.StringLiteral) !== 0 || (t.flags & e.TypeFlags.NumberLiteral) !== 0;
611
672
  }
612
- function ue(t) {
673
+ function Y(e) {
674
+ return K(e) ? !1 : pe(e) || fe(e);
675
+ }
676
+ function pe(t) {
613
677
  if (!t.isUnion()) return !1;
614
678
  let n = t.types.filter((t) => (t.flags & (e.TypeFlags.Undefined | e.TypeFlags.Null)) === 0);
615
- return n.length > 0 && n.every(ce);
679
+ return n.length > 0 && n.every(de);
616
680
  }
617
- function de(e, t) {
681
+ function me(e, t) {
618
682
  return e.isArrayType(t) || e.isTupleType(t);
619
683
  }
620
684
  function X(e) {
@@ -622,18 +686,18 @@ function X(e) {
622
686
  }
623
687
  //#endregion
624
688
  //#region src/utils.ts
625
- var Z = "\n interface Array<T> { \n [n: number]: T; \n length: number; \n }\n interface String { readonly length: number; }\n interface Number { }\n interface Boolean { }\n interface Object { }\n interface Function { }\n interface CallableFunction extends Function {}\n interface NewableFunction extends Function {}\n interface IArguments { }\n interface RegExp { }\n \n declare namespace Utils {\n type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;\n }\n\n import ReturnType = Utils.ReturnType;\n";
626
- function fe(t, n) {
689
+ var he = "\n interface Array<T> { \n [n: number]: T; \n length: number; \n }\n interface String { readonly length: number; }\n interface Number { }\n interface Boolean { }\n interface Object { }\n interface Function { }\n interface CallableFunction extends Function {}\n interface NewableFunction extends Function {}\n interface IArguments { }\n interface RegExp { }\n \n declare namespace Utils {\n type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;\n }\n\n import ReturnType = Utils.ReturnType;\n";
690
+ function Z(t, n) {
627
691
  let r = /* @__PURE__ */ new Map();
628
- return r.set(t, n), r.set("lib.codezero.d.ts", Z), a(u(r), [t, "lib.codezero.d.ts"], e, pe);
692
+ return r.set(t, n), r.set("lib.codezero.d.ts", he), a(u(r), [t, "lib.codezero.d.ts"], e, ge);
629
693
  }
630
- var pe = {
694
+ var ge = {
631
695
  target: e.ScriptTarget.Latest,
632
696
  lib: ["lib.codezero.d.ts"],
633
697
  noEmit: !0,
634
698
  strictNullChecks: !0
635
699
  };
636
- function me(e) {
700
+ function _e(e) {
637
701
  let t = [], n = 0, r = null, i = "";
638
702
  for (let a of e) {
639
703
  if (r) a === r && (r = null);
@@ -649,14 +713,14 @@ function me(e) {
649
713
  return t.push(i), t.map((e) => (e.trim().split(/\s+/).find((e) => e !== "const" && e !== "in" && e !== "out") ?? "").match(/^[A-Za-z_$][A-Za-z0-9_$]*/)?.[0] ?? "").filter((e) => e.length > 0);
650
714
  }
651
715
  function Q(e, t = "any", n = !0) {
652
- let r = Array.from(new Set(e?.flatMap((e) => e.genericKeys || []).flatMap(me))).map((e) => `type ${e} = ${t};`).join("\n"), i = e?.map((e) => {
653
- let t = (e.genericKeys?.length ?? 0) > 0 ? `<${e.genericKeys?.join(",")}>` : "", n = I(e.identifier) ? `${e.type} & {}` : e.type;
716
+ let r = Array.from(new Set(e?.flatMap((e) => e.genericKeys || []).flatMap(_e))).map((e) => `type ${e} = ${t};`).join("\n"), i = e?.map((e) => {
717
+ let t = (e.genericKeys?.length ?? 0) > 0 ? `<${e.genericKeys?.join(",")}>` : "", n = P(e.identifier) ? `${e.type} & {}` : e.type;
654
718
  return `type ${e.identifier}${t} = ${n};`;
655
719
  }).join("\n"), a = e?.filter((e) => (e.genericKeys?.length ?? 0) > 0).map((e) => `declare const __widen_${e.identifier}: ${e.identifier}<${e.genericKeys.map(() => "any").join(", ")}>;`).join("\n") ?? "";
656
720
  return `${n ? r : ""}\n${i}\n${a}`;
657
721
  }
658
722
  var $ = (e) => e?.replace(/[^a-zA-Z0-9]/g, "_");
659
- function he(e, t, n, r = !1, i = !0) {
723
+ function ve(e, t, n, r = !1, i = !0) {
660
724
  let a = e?.nodes?.nodes || [], o = new Map(t?.map((e) => [e.identifier, e])), s = /* @__PURE__ */ new Set(), c = (t, n = "") => {
661
725
  let l = a.find((e) => e?.id === t);
662
726
  if (!l || !l.functionDefinition) return "";
@@ -673,7 +737,7 @@ function he(e, t, n, r = !1, i = !0) {
673
737
  if (s.__typename === "LiteralValue") return `/* @pos ${t} ${o} */ ${s?.value !== null && s?.value !== void 0 ? h(s?.value) : void 0}`;
674
738
  if (s.__typename === "SubFlowValue") {
675
739
  let e = s;
676
- return `/* @pos ${t} ${o} */ (...${`p_${$(t)}_${o}`}) => {\n${c(e.startingNodeId || e.functionDefinition?.id, n + " ")}${n}}`;
740
+ return !e.startingNodeId && e.functionDefinition?.identifier ? `/* @pos ${t} ${o} */ ${`fn_${e.functionDefinition.identifier.replace(/::/g, "_")}`}` : `/* @pos ${t} ${o} */ (...${`p_${$(t)}_${o}`}) => {\n${c(e.startingNodeId || e.functionDefinition?.id, n + " ")}${n}}`;
677
741
  }
678
742
  return r ? `/* @pos ${t} ${o} */ {}` : `/* @pos ${t} ${o} */ undefined`;
679
743
  }), d = `node_${$(l.id)}`, f = `fn_${l?.functionDefinition?.identifier?.replace(/::/g, "_")}`;
@@ -700,4 +764,4 @@ function he(e, t, n, r = !1, i = !0) {
700
764
  `;
701
765
  }
702
766
  //#endregion
703
- export { F as a, X as c, $ as i, z as l, he as n, R as o, Q as r, I as s, fe as t, h as u };
767
+ export { N as a, X as c, $ as i, R as l, ve as n, I as o, Q as r, P as s, Z as t, h as u };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code0-tech/triangulum",
3
- "version": "0.31.0",
3
+ "version": "0.32.0",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/code0-tech/triangulum#readme",
6
6
  "bugs": {
@@ -1,45 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("typescript");c=s(c,1);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(null,arguments)}var u=!1;try{u=typeof localStorage<`u`}catch{}var d=typeof process<`u`,f=u&&typeof localStorage.getItem==`function`&&localStorage.getItem(`DEBUG`)||d&&process.env.DEBUG?console.log:function(e){return``};function p(e,t,n,r,i){r===void 0&&(r={});var a=l({},g(n),r),o=y(e,t,a,n,i),s=o.languageServiceHost,c=o.updateFile,u=o.deleteFile,d=n.createLanguageService(s),f=d.getCompilerOptionsDiagnostics();if(f.length){var p=v(e,r,n);throw Error(n.formatDiagnostics(f,p.compilerHost))}return{name:`vfs`,sys:e,languageService:d,getSourceFile:function(e){return d.getProgram()?.getSourceFile(e)},createFile:function(e,t){c(n.createSourceFile(e,t,a.target,!1))},updateFile:function(e,t,r){var i=d.getProgram().getSourceFile(e);if(!i)throw Error(`Did not find a source file for `+e);var a=i.text,o=r??n.createTextSpan(0,a.length),s=a.slice(0,o.start)+t+a.slice(o.start+o.length);c(n.updateSourceFile(i,s,{span:o,newLength:t.length}))},deleteFile:function(e){var t=d.getProgram().getSourceFile(e);t&&u(t)}}}function m(e){throw Error(`Method '`+e+`' is not implemented.`)}function h(e,t){return function(){for(var n=arguments.length,r=Array(n),i=0;i<n;i++)r[i]=arguments[i];var a=t.apply(void 0,r),o=typeof a==`string`?a.slice(0,80)+`...`:a;return f.apply(void 0,[`> `+e].concat(r)),f(`< `+o),a}}var g=function(e){return l({},e.getDefaultCompilerOptions(),{jsx:e.JsxEmit.React,strict:!0,esModuleInterop:!0,module:e.ModuleKind.ESNext,suppressOutputPathCheck:!0,skipLibCheck:!0,skipDefaultLibCheck:!0},e.versionMajorMinor&&Number(e.versionMajorMinor.split(`.`)[0])>=6?{ignoreDeprecations:`6.0`}:{moduleResolution:e.ModuleResolutionKind.NodeJs})},_=function(e){return e.replace(`/`,`/lib.`).toLowerCase()};function ee(e){return{args:[],createDirectory:function(){return m(`createDirectory`)},directoryExists:h(`directoryExists`,function(t){return Array.from(e.keys()).some(function(e){return e.startsWith(t)})}),exit:function(){return m(`exit`)},fileExists:h(`fileExists`,function(t){return e.has(t)||e.has(_(t))}),getCurrentDirectory:function(){return`/`},getDirectories:function(){return[]},getExecutingFilePath:function(){return m(`getExecutingFilePath`)},readDirectory:h(`readDirectory`,function(t){return t===`/`?Array.from(e.keys()):[]}),readFile:h(`readFile`,function(t){return e.get(t)??e.get(_(t))}),resolvePath:function(e){return e},newLine:`
2
- `,useCaseSensitiveFileNames:!0,write:function(){return m(`write`)},writeFile:function(t,n){e.set(t,n)},deleteFile:function(t){e.delete(t)}}}function v(e,t,n){var r=new Map,i=function(e){return r.set(e.fileName,e),e};return{compilerHost:l({},e,{getCanonicalFileName:function(e){return e},getDefaultLibFileName:function(){return`/`+n.getDefaultLibFileName(t)},getNewLine:function(){return e.newLine},getSourceFile:function(a,o){return r.get(a)||i(n.createSourceFile(a,e.readFile(a),o??t.target??g(n).target,!1))},useCaseSensitiveFileNames:function(){return e.useCaseSensitiveFileNames}}),updateFile:function(t){var n=r.has(t.fileName);return e.writeFile(t.fileName,t.text),r.set(t.fileName,t),n},deleteFile:function(t){var n=r.has(t.fileName);return r.delete(t.fileName),e.deleteFile(t.fileName),n}}}function y(e,t,n,r,i){var a=[].concat(t),o=v(e,n,r),s=o.compilerHost,c=o.updateFile,u=o.deleteFile,d=new Map,f=0;return{languageServiceHost:l({},s,{getProjectVersion:function(){return f.toString()},getCompilationSettings:function(){return n},getCustomTransformers:function(){return i},getScriptFileNames:function(){return a.slice()},getScriptSnapshot:function(t){var n=e.readFile(t);if(n&&typeof n==`string`)return r.ScriptSnapshot.fromString(n)},getScriptVersion:function(e){return d.get(e)||`0`},writeFile:e.writeFile}),updateFile:function(e){f++,d.set(e.fileName,f.toString()),a.includes(e.fileName)||a.push(e.fileName),c(e)},deleteFile:function(e){f++,d.set(e.fileName,f.toString());var t=a.indexOf(e.fileName);t!==-1&&a.splice(t,1),u(e)}}}function b(e){return te.test(e)}var te=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/;function x(e,t,n,r){let i=ne(n);return a(typeof t==`function`?t.call({"":e},``,e):e,``);function a(e,t){if(Array.isArray(r)){let t=r.find(t=>t.test(e));if(t){let n=t.stringify(e);if(typeof n!=`string`||!b(n))throw Error(`Invalid JSON number: output of a number stringifier must be a string containing a JSON number (output: ${n})`);return n}}if(typeof e==`boolean`||typeof e==`number`||typeof e==`string`||e===null||e instanceof Date||e instanceof Boolean||e instanceof Number||e instanceof String)return JSON.stringify(e);if(e?.isLosslessNumber||typeof e==`bigint`)return e.toString();if(Array.isArray(e))return o(e,t);if(e&&typeof e==`object`)return s(e,t)}function o(e,n){if(e.length===0)return`[]`;let r=i?n+i:void 0,o=i?`[
3
- `:`[`;for(let n=0;n<e.length;n++){let s=typeof t==`function`?t.call(e,String(n),e[n]):e[n];i&&(o+=r),o+=s!==void 0&&typeof s!=`function`?a(s,r):`null`,n<e.length-1&&(o+=i?`,
4
- `:`,`)}return o+=i?`\n${n}]`:`]`,o}function s(e,r){if(typeof e.toJSON==`function`)return x(e.toJSON(),t,n,void 0);let o=Array.isArray(t)?t.map(String):Object.keys(e);if(o.length===0)return`{}`;let s=i?r+i:void 0,l=!0,u=i?`{
5
- `:`{`;for(let n of o){let r=typeof t==`function`?t.call(e,n,e[n]):e[n];if(c(n,r)){l?l=!1:u+=i?`,
6
- `:`,`;let e=JSON.stringify(n);u+=i?`${s+e}: `:`${e}:`,u+=a(r,s)}}return u+=i?`\n${r}}`:`}`,u}function c(e,t){return t!==void 0&&typeof t!=`function`&&typeof t!=`symbol`}}function ne(e){if(typeof e==`number`)return` `.repeat(e);if(typeof e==`string`&&e!==``)return e}var S=e=>{if(c.default.isUnionTypeNode(e))return e.types.flatMap(S);if(c.default.isLiteralTypeNode(e)){let t=e.literal;if(c.default.isStringLiteral(t))return[{value:t.text,__typename:`LiteralValue`}];if(c.default.isNumericLiteral(t))return[{value:Number(t.text)}];if(t.kind===c.default.SyntaxKind.TrueKeyword)return[{value:!0,__typename:`LiteralValue`}];if(t.kind===c.default.SyntaxKind.FalseKeyword)return[{value:!1,__typename:`LiteralValue`}]}return[]},C=(e,t)=>{if(t&&e.aliasSymbol){let t=e.aliasSymbol.declarations?.[0];if(t&&c.default.isTypeAliasDeclaration(t))return S(t.type)}return e.isUnion()?e.types.flatMap(e=>C(e,t)):e.isStringLiteral()?[{value:e.value,__typename:`LiteralValue`}]:e.isNumberLiteral()?[{value:e.value.toString()}]:e.intrinsicName===`true`?[{value:!0,__typename:`LiteralValue`}]:e.intrinsicName===`false`?[{value:!1,__typename:`LiteralValue`}]:[]},re=(e,t,n,r)=>r.flatMap(r=>{let i=r.getName();if(!w(i))return[];let a=r.getDeclarations()?.[0];if(!a||a.getEnd()>=t.getEnd())return[];let o=e.getTypeOfSymbolAtLocation(r,t);return i.startsWith(`node_`)?ie(i,o,e,n):i.startsWith(`p_`)?ae(i,o,e,n):i.startsWith(`flow_`)?oe(o,e,n):[]}),w=e=>e.startsWith(`node_`)||e.startsWith(`p_`)||e.startsWith(`flow_`),ie=(e,t,n,r)=>{if((t.flags&c.default.TypeFlags.Void)!==0)return[];let i=T(e.replace(`node_`,``));return O(t,n,r).flatMap(({path:e})=>{let t={__typename:`ReferenceValue`,nodeFunctionId:i};return e.length>0&&(t.referencePath=e),t})},ae=(e,t,n,r)=>{let{nodeFunctionId:i,paramIndexFromName:a}=se(e);if(!n.isTupleType(t))return[];let o=t;return n.getTypeArguments(o).flatMap((e,t)=>O(e,n,r).flatMap(({path:e})=>{let n={__typename:`ReferenceValue`,nodeFunctionId:i,parameterIndex:isNaN(a)?0:a,inputIndex:t,inputTypeIdentifier:o.target.labeledElementDeclarations?.[t].name.getText()};return e.length>0&&(n.referencePath=e),n}))},oe=(e,t,n)=>O(e,t,n).flatMap(({path:e})=>{let t={__typename:`ReferenceValue`,nodeFunctionId:null};return e.length>0&&(t.referencePath=e),t}),T=e=>e.replace(/___/g,`://`).replace(/__/g,`/`).replace(/_/g,`/`),se=e=>{let t=e.replace(`p_`,``),n=t.lastIndexOf(`_`),r=t.substring(0,n),i=parseInt(t.substring(n+1),10);return{nodeFunctionId:T(r),paramIndexFromName:i}},ce=7,E=(e,t,n)=>{let r=n.get(e);if(r!==void 0)return r;let i=new Set,a=n=>{if(i.has(n)||!k(n))return!1;i.add(n);for(let r of n.getProperties()){if(!r.valueDeclaration)continue;let n=t.getNonNullableType(t.getTypeOfSymbolAtLocation(r,r.valueDeclaration));if(n===e||a(n))return!0}return!1},o=a(e);return n.set(e,o),o},D=(e,t,n)=>e.isUnion()?e.types.some(e=>D(t.getNonNullableType(e),t,n)):(e.flags&c.default.TypeFlags.Never)===0&&t.isTypeAssignableTo(e,n),le=(e,t)=>e.isUnion()?e.types.map(e=>t.getNonNullableType(e)).filter(k):k(e)?[e]:[],O=(e,t,n,r=[],i=new Set,a=new Map)=>{let o=[],s=t.getNonNullableType(e);return D(s,t,n)&&o.push({path:r,type:e}),le(s,t).forEach(e=>{if(i.has(e)||r.length>=ce&&E(e,t,a))return;let s=e.getProperties();s&&s.length>0&&(i.add(e),s.forEach(e=>{let s=t.getTypeOfSymbolAtLocation(e,e.valueDeclaration),c=e.getName(),l=[...r,{path:c}];o.push(...O(s,t,n,l,i,a))}),i.delete(e))}),o},k=e=>{let t=c.default.TypeFlags.String|c.default.TypeFlags.Number|c.default.TypeFlags.Boolean|c.default.TypeFlags.Undefined|c.default.TypeFlags.Null|c.default.TypeFlags.BigInt|c.default.TypeFlags.ESSymbol;return(e.flags&t)===0},ue=(e,t,n,r)=>Z(r)?[]:t.flatMap(t=>{let i=A(e,t,n,r);return i?[i]:[]}),A=(e,t,n,r)=>{if(t.parameters.length>0)return null;let i=e.getSignatureFromDeclaration(t),a=j(e,e.getReturnTypeOfSignature(i)),o=e.getNonNullableType(a);if((o.flags&c.default.TypeFlags.Never)!==0||!e.isTypeAssignableTo(o,r))return null;let s=M(t.name?.getText());return N(n.find(e=>e.identifier===s))},j=(e,t)=>t.isTypeParameter()?e.getBaseConstraintOfType(t)||e.getAnyType():t,M=e=>e?e.replace(`fn_`,``).replace(`_`,`::`).replace(`_`,`::`):``,N=e=>{let t=(e?.parameterDefinitions?.nodes?.length??0)>0,n={__typename:`NodeFunction`,id:`gid://sagittarius/NodeFunction/1`,functionDefinition:{__typename:`FunctionDefinition`,id:e?.id,identifier:e?.identifier,names:e?.names,descriptions:e?.descriptions,displayIcon:e?.displayIcon}};return t&&(n.parameters=P(e?.parameterDefinitions?.nodes||[])),n},P=e=>({__typename:`NodeParameterConnection`,nodes:e.map(e=>F(e))}),F=e=>({__typename:`NodeParameter`,parameterDefinition:{__typename:`ParameterDefinition`,id:e?.id,identifier:e?.identifier},value:e?.defaultValue?{__typename:`LiteralValue`,value:e.defaultValue.value}:null}),I=(e,t,n,r)=>Z(r)?t.flatMap(t=>{let i=L(e,t,n,r);return i?[i]:[]}):[],L=(e,t,n,r)=>{let i=e.getTypeAtLocation(t);if(!e.isTypeAssignableTo(i,r))return null;let a=R(t.name?.getText()),o=n.find(e=>e.identifier===a);return o?z(o):null},R=e=>e?e.replace(`fn_`,``).replace(`_`,`::`).replace(`_`,`::`):``,z=e=>({__typename:`SubFlowValue`,functionDefinition:e,signature:e.signature,settings:e.parameterDefinitions?.nodes?.map(e=>({__typename:`SubFlowValueSetting`,identifier:e?.identifier,defaultValue:e?.defaultValue??null,hidden:e?.hidden??!1,optional:e?.optional??!1}))}),B={DATE:`date`},V=e=>e!=null&&e in B,H=7,U=(e,t,n,r,i,a=!0,o,s=new Set,l=new Map)=>{if((n.flags&c.default.TypeFlags.TypeParameter)!==0){let u=n.symbol?.declarations?.[0];if(u&&c.default.isTypeParameterDeclaration(u)&&u.constraint)return U(e,t,e.getTypeFromTypeNode(u.constraint),r,i,a,o,s,l)}let u=e.typeToString(V(n.aliasSymbol?.getName())&&n.isIntersection()?n.types.find(e=>(e.flags&c.default.TypeFlags.Object)===0)??n:{...n,aliasSymbol:void 0}),d=o??n,f=a?{suggestions:[...C(d,e),...t?re(e,t,d,e.getSymbolsInScope(t,c.default.SymbolFlags.Variable)):[],...ue(e,r,i,d),...I(e,r,i,d)]}:{};if(n.isUnion()){let a=n.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0);if(a.length===1)return{...U(e,t,a[0],r,i,!1,void 0,s,l),type:u,...f}}let p=he(n);if(p)return{input:p,type:u,...f};if(G(e,n))return{input:`file`,type:u,mimetype:K(e,n),...f};if(q(n))return{input:`boolean`,type:u,...f};if(X(n)||_e(n))return{input:`select`,type:u,...f};if(J(n))return{input:`number`,type:u,...f};if(Y(n))return{input:`text`,type:u,...f};if(Z(n))return{input:`sub-flow`,type:u,...f};if(ve(e,n)){let o=e.getTypeArguments(n);return o.length===1&&G(e,o[0])?{input:`list-file`,type:u,mimetype:K(e,o[0]),...f}:{input:`list`,type:u,items:o.flatMap(n=>(n.isUnion()?n.types:[n]).map(n=>U(e,t,n,r,i,a,void 0,s,l))),...f}}if((n.flags&c.default.TypeFlags.Object)!==0){if(s.has(n)||s.size>=H&&E(n,e,l))return{input:`data`,type:u,...f};s.add(n);let o={},d=[];for(let u of e.getPropertiesOfType(n)){let n=u.valueDeclaration??u.declarations?.[0];if(!n)continue;let f=e.getTypeOfSymbolAtLocation(u,n),p=(u.flags&c.default.SymbolFlags.Optional)!==0||f.isUnion()&&f.types.some(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))!==0),m=(f.isUnion()?f.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0):[f]).map(n=>U(e,t,n,r,i,a,void 0,s,l));o[u.name]=m.length===1?m[0]:m,p||d.push(u.name)}return s.delete(n),{input:`data`,type:u,properties:o,required:d,...f}}return{input:`generic`,type:u,...f}},W=(e,t,n=!1)=>{if(!e||e.input===`generic`)return pe(me(t),n);let r=fe(e.suggestions,t.suggestions);if(e.input===`data`){let n=e.properties??{},i=t.input===`data`?t.properties??{}:{},a={},o=new Set([...Object.keys(n),...Object.keys(i)]);for(let e of o){let t=n[e],r=i[e];a[e]=de(t,r)}return{...e,properties:a,...r?{suggestions:r}:{}}}if(e.input===`list`){let n=e.items??[],i=t.input===`list`?t.items??[]:[],a=n.length===i.length&&n.length>0?n.map((e,t)=>W(e,i[t])):n;return{...e,items:a,...r?{suggestions:r}:{}}}return{...e,...r?{suggestions:r}:{}}},de=(e,t)=>e&&!Array.isArray(e)&&t&&!Array.isArray(t)?W(e,t):e??t,fe=(e,t)=>{let n=[...e??[],...t??[]];if(n.length===0)return;let r=new Set,i=[];for(let e of n){let t=JSON.stringify(e);r.has(t)||(r.add(t),i.push(e))}return i},pe=(e,t)=>!t||e.input!==`generic`?e:{input:`data`,...e.type?{type:e.type}:{},properties:{},required:[],...e.suggestions?{suggestions:e.suggestions}:{}},me=e=>{if(e.input!==`select`)return e;let t=e.suggestions??[],n=new Set;for(let e of t){let t=typeof e.value;(t===`string`||t===`number`||t===`boolean`)&&n.add(t)}return{input:n.size===1?{string:`text`,number:`number`,boolean:`boolean`}[[...n][0]]:`text`,...e.type?{type:e.type}:{},...t.length>0?{suggestions:t}:{}}};function he(e){let t=e.aliasSymbol?.getName();return V(t)?B[t]:void 0}function G(e,t){if(t.aliasSymbol?.getName()!==`FILE`||(t.flags&c.default.TypeFlags.Object)===0)return!1;let n=e.getPropertiesOfType(t);if(n.length!==3)return!1;let r=new Map(n.map(e=>[e.name,e])),i=r.get(`valueType`);if(!r.has(`contentType`)||!r.has(`value`)||!i)return!1;let a=i.valueDeclaration??i.declarations?.[0];if(!a)return!1;let o=e.getTypeOfSymbolAtLocation(i,a);return o.isStringLiteral()&&o.value===`base64`}function K(e,t){let n=/^(\*|[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+-]*)\/(\*|[a-zA-Z0-9][a-zA-Z0-9!#$&^_.+-]*)$/,r=e.getPropertiesOfType(t).find(e=>e.name===`contentType`);if(!r)return`*/*`;let i=r.valueDeclaration??r.declarations?.[0];if(!i)return`*/*`;let a=e.getTypeOfSymbolAtLocation(r,i);return a.isStringLiteral()&&n.test(a.value)?a.value:`*/*`}function q(e){if((e.flags&c.default.TypeFlags.Boolean)!==0||(e.flags&c.default.TypeFlags.BooleanLiteral)!==0)return!0;if(e.isUnion()){let t=e.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0);return t.length>0&&t.every(e=>(e.flags&c.default.TypeFlags.Boolean)!==0||(e.flags&c.default.TypeFlags.BooleanLiteral)!==0)}return!1}function J(e){return(e.flags&c.default.TypeFlags.Number)!==0||(e.flags&c.default.TypeFlags.NumberLiteral)!==0}function Y(e){return(e.flags&c.default.TypeFlags.String)!==0||(e.flags&c.default.TypeFlags.StringLiteral)!==0}function ge(e){return Y(e)||J(e)||q(e)}function _e(e){return(e.flags&c.default.TypeFlags.StringLiteral)!==0||(e.flags&c.default.TypeFlags.NumberLiteral)!==0}function X(e){if(!e.isUnion())return!1;let t=e.types.filter(e=>(e.flags&(c.default.TypeFlags.Undefined|c.default.TypeFlags.Null))===0);return t.length>0&&t.every(ge)}function ve(e,t){return e.isArrayType(t)||e.isTupleType(t)}function Z(e){return e.getCallSignatures().length>0}var ye=`
7
- interface Array<T> {
8
- [n: number]: T;
9
- length: number;
10
- }
11
- interface String { readonly length: number; }
12
- interface Number { }
13
- interface Boolean { }
14
- interface Object { }
15
- interface Function { }
16
- interface CallableFunction extends Function {}
17
- interface NewableFunction extends Function {}
18
- interface IArguments { }
19
- interface RegExp { }
20
-
21
- declare namespace Utils {
22
- type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
23
- }
24
-
25
- import ReturnType = Utils.ReturnType;
26
- `;function be(e,t){let n=new Map;return n.set(e,t),n.set(`lib.codezero.d.ts`,ye),p(ee(n),[e,`lib.codezero.d.ts`],c.default,xe)}var xe={target:c.default.ScriptTarget.Latest,lib:[`lib.codezero.d.ts`],noEmit:!0,strictNullChecks:!0};function Se(e){let t=[],n=0,r=null,i=``;for(let a of e){if(r)a===r&&(r=null);else if(a===`'`||a===`"`||a==="`")r=a;else if(a===`<`||a===`{`||a===`(`||a===`[`)n++;else if(a===`>`||a===`}`||a===`)`||a===`]`)n--;else if(a===`,`&&n===0){t.push(i),i=``;continue}i+=a}return t.push(i),t.map(e=>(e.trim().split(/\s+/).find(e=>e!==`const`&&e!==`in`&&e!==`out`)??``).match(/^[A-Za-z_$][A-Za-z0-9_$]*/)?.[0]??``).filter(e=>e.length>0)}function Q(e,t=`any`,n=!0){let r=Array.from(new Set(e?.flatMap(e=>e.genericKeys||[]).flatMap(Se))).map(e=>`type ${e} = ${t};`).join(`
27
- `),i=e?.map(e=>{let t=(e.genericKeys?.length??0)>0?`<${e.genericKeys?.join(`,`)}>`:``,n=V(e.identifier)?`${e.type} & {}`:e.type;return`type ${e.identifier}${t} = ${n};`}).join(`
28
- `),a=e?.filter(e=>(e.genericKeys?.length??0)>0).map(e=>`declare const __widen_${e.identifier}: ${e.identifier}<${e.genericKeys.map(()=>`any`).join(`, `)}>;`).join(`
29
- `)??``;return`${n?r:``}\n${i}\n${a}`}var $=e=>e?.replace(/[^a-zA-Z0-9]/g,`_`);function Ce(e,t,n,r=!1,i=!0){let a=e?.nodes?.nodes||[],o=new Map(t?.map(e=>[e.identifier,e])),s=new Set,c=(t,n=``)=>{let l=a.find(e=>e?.id===t);if(!l||!l.functionDefinition)return``;if(t?.includes(`NodeFunction`)&&s.add(t),!o.get(l.functionDefinition.identifier))return`${n}// Error: Function ${l.functionDefinition.identifier} not found\n`;let u=(l.parameters?.nodes||[]).map((a,o)=>{let s=a.value;if(!s)return r?`/* @pos ${t} ${o} */ {}`:`/* @pos ${t} ${o} */ undefined`;if(s.__typename===`ReferenceValue`){let n=s,r=typeof n.inputIndex==`number`?`p_${$(n.nodeFunctionId??`undefined`)}_${n.parameterIndex}[${n.inputIndex}]`:n.nodeFunctionId?`node_${$(n.nodeFunctionId)}`:`flow_${$(e?.id??`undefined`)}`;return n.referencePath?.forEach(e=>{r+=`?.${e.path}`}),`/* @pos ${t} ${o} */ (${r})${i?`!`:``}`}if(s.__typename===`LiteralValue`)return`/* @pos ${t} ${o} */ ${s?.value!==null&&s?.value!==void 0?x(s?.value):void 0}`;if(s.__typename===`SubFlowValue`){let e=s;return`/* @pos ${t} ${o} */ (...${`p_${$(t)}_${o}`}) => {\n${c(e.startingNodeId||e.functionDefinition?.id,n+` `)}${n}}`}return r?`/* @pos ${t} ${o} */ {}`:`/* @pos ${t} ${o} */ undefined`}),d=`node_${$(l.id)}`,f=`fn_${l?.functionDefinition?.identifier?.replace(/::/g,`_`)}`;u.includes(`undefined`);let p=`${n}`;return l.functionDefinition.identifier===`std::control::return`?(p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,p+=`return ${d};\n`):l.functionDefinition.identifier===`std::control::if`?(p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,p+=`if(${u[0]}) {
30
- ${c(l.parameters?.nodes?.[1]?.value?.startingNodeId||(l.parameters?.nodes?.[1]?.value)?.functionDefinition?.identifier,n+` `)}
31
- }`):l.functionDefinition.identifier===`std::control::if_else`?(p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,p+=`if(${u[0]}) {
32
- ${c(l.parameters?.nodes?.[1]?.value?.startingNodeId||(l.parameters?.nodes?.[1]?.value)?.functionDefinition?.identifier,n+` `)}
33
- } else {
34
- ${c(l.parameters?.nodes?.[2]?.value?.startingNodeId||(l.parameters?.nodes?.[2]?.value)?.functionDefinition?.identifier,n+` `)}
35
- }`):p+=`const ${d} = /* @pos ${t} null */ ${f}(${u.join(`, `)}) ;\n`,l.nextNodeId&&(p+=c(l.nextNodeId,n)),p},l=Q(n),u=`declare function flow${e?.signature??`(): void`}`,d=t?.map(e=>`declare function fn_${e.identifier?.replace(/::/g,`_`)}${e.signature}`).join(`
36
- `),f=new Set(a.map(e=>e?.nextNodeId).filter(e=>!!e)),p=new Set;return a.forEach(e=>e?.parameters?.nodes?.forEach(e=>{e?.value?.__typename===`SubFlowValue`&&(e.value.startingNodeId||e.value.functionDefinition?.id)&&p.add(e.value.startingNodeId||e.value.functionDefinition?.id)})),`
37
- ${l}\n
38
- ${u}\n
39
- ${d}\n
40
- (() =>
41
- ${e?`const flow_${$(e.id??``)} = /* @pos null null */ flow(${e.settings?.nodes?.map((e,t)=>`/* @pos null ${t} */ ${e?.value!==null&&e?.value!==void 0?x(e?.value):void 0}`).join(`, `)??``});`:``}
42
- ${a.filter(e=>e?.id&&!f.has(e.id)&&!p.has(e.id)).map(e=>c(e.id)).join(`
43
- `)}
44
- )();
45
- `}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return x}});