@code0-tech/triangulum 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-Kbkh95iw.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
+ ${e.r(r,`unknown`)}
3
+ const tempValue = ${i??`any`};
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=`
5
+ ${e.r(r)}
6
+ type Target = ${n};
7
+ `,a=`index.ts`,o=e.t(a,i),s=o.getSourceFile(a),c=o.languageService.getProgram().getTypeChecker(),l=s.statements.find(e=>t.default.isTypeAliasDeclaration(e)&&e.name.text===`Target`);if(!l)return{__typename:`LiteralValue`,value:null};let u=c.getTypeAtLocation(l.type),d=(e,n,r=new Set)=>{let i=new Set(r);if(i.has(e))return null;let a=e.getFlags();if(e.isUnion()){if(n.type,t.default.isTypeAliasDeclaration(n)&&n.type&&t.default.isUnionTypeNode(n.type))return d(c.getTypeFromTypeNode(n.type.types[0]),n,i);let r=e.types.filter(e=>{let n=e.getFlags();return!(n&t.default.TypeFlags.Undefined)&&!(n&t.default.TypeFlags.Null)});return d(r.length>0?r[0]:e.types[0],n,i)}if(a&t.default.TypeFlags.StringLiteral)return e.value;if(a&t.default.TypeFlags.String)return``;if(a&t.default.TypeFlags.NumberLiteral)return e.value;if(a&t.default.TypeFlags.Number)return 0;if(a&t.default.TypeFlags.BooleanLiteral)return e.intrinsicName===`true`;if(a&t.default.TypeFlags.Boolean)return!1;if(c.isArrayType(e)){i.add(e);let t=d(e.typeArguments?.[0]||c.getAnyType(),n,i);return t===null?[]:[t]}if(e.isClassOrInterface()||a&t.default.TypeFlags.Object||e.getProperties().length>0){i.add(e);let t={};return e.getProperties().forEach(e=>{let r=c.getTypeOfSymbolAtLocation(e,n),a=e.valueDeclaration;r&&(t[e.getName()]=d(r,a||n,i))}),t}return null};return{__typename:`LiteralValue`,value:d(u,l)}},i=2345,a=2339,o=(e,t,n)=>{if(e.getStart()>t||e.getEnd()<n)return;let r=e;return e.forEachChild(e=>{let i=o(e,t,n);i&&(r=i)}),r},s=(e,n,r)=>{if(e.start===void 0||e.length===void 0)return!1;let s=o(n,e.start,e.start+e.length);if(!s)return!1;if(e.code===i&&t.default.isExpression(s)){let e=r.getTypeAtLocation(s);if(!e.isUnion())return!1;let n=r.getContextualType(s);return n?e.types.some(e=>(e.flags&(t.default.TypeFlags.Null|t.default.TypeFlags.Undefined))===0&&r.isTypeAssignableTo(e,n)):!1}if(e.code===a&&t.default.isPropertyAccessExpression(s.parent)){let e=r.getNonNullableType(r.getTypeAtLocation(s.parent.expression));if(!e.isUnion())return!1;let t=s.getText();return e.types.some(e=>e.getProperty(t)!==void 0)}return!1},c=(n,r,i)=>{if(!n?.startingNodeId)return{isValid:!1,returnType:`void`,diagnostics:[{nodeId:null,parameterIndex:null,code:0,message:`You need to provide a starting node to be able to execute this flow.`,severity:`error`}]};if(!n.nodes?.nodes?.find(e=>e?.id==n.startingNodeId))return{isValid:!1,returnType:`void`,diagnostics:[{nodeId:null,parameterIndex:null,code:0,message:`The starting node is not linked within the flow. Please make sure the starting node is connected to the rest of the flow.`,severity:`error`}]};let a=new Set(r?.map(e=>e.identifier)),o=(n.nodes?.nodes??[]).filter(e=>e?.functionDefinition&&!a.has(e.functionDefinition.identifier)).map(e=>({nodeId:e.id,parameterIndex:null,code:0,message:`The function definition "${e.functionDefinition.identifier}" is not reachable.`,severity:`error`}));if(o.length>0)return{isValid:!1,returnType:`void`,diagnostics:o};let c=e.n(n,r,i,!1,!1),l=`index.ts`,u=e.t(l,c),d=u.getSourceFile(l),f=u.languageService.getProgram(),p=f.getTypeChecker(),m=f.getSemanticDiagnostics(d).map(e=>{let n=(0,t.flattenDiagnosticMessageText)(e.messageText,`
8
+ `),r,i=null;if(e.start!==void 0){let t=d.getFullText(),n=Math.max(0,e.start-300),a=Math.min(t.length,e.start),o=t.substring(n,a),s=/\/\* @pos ([^ ]+) (\d+|null) \*\//g,c,l=null,u=-1;for(;(c=s.exec(o))!==null;){let t=n+c.index+c[0].length;t<=e.start&&t>u&&(u=t,l=c)}l&&(r=l[1]===`null`?null:l[1],i=parseInt(l[2],10))}let a=s(e,d,p)?`warning`:`error`;return{message:n,code:e.code,severity:a,nodeId:r,parameterIndex:typeof i==`number`&&Number.isSafeInteger(i)?i:null}}).filter(e=>e!==null);return{isValid:!m.some(e=>e?.severity===`error`),returnType:`void`,diagnostics:m}},l=(n,r,i)=>{let a=e.u(r?.value),o=`
9
+ ${e.r(i)}
10
+ const testValue: ${n} = ${a};
11
+ `,s=`index.ts`,c=e.t(s,o).languageService.getSemanticDiagnostics(s).map(e=>{let n=t.default.flattenDiagnosticMessageText(e.messageText,`
12
+ `),r=n.includes(`not assignable to parameter of type`)&&(n.includes(`'{}'`)||n.includes(`undefined`))||n.includes(`not assignable to type 'undefined'`)||n.includes(`not assignable to type 'void'`)||n.includes(`may be a mistake because neither type sufficiently overlaps`);return{message:n,code:e.code,severity:r?`warning`:`error`}});return{isValid:!c.some(e=>e.severity===`error`),returnType:`void`,diagnostics:c}},u=(n,r,i,a)=>{let o=e.n(n,i,r),s=`index.ts`,c=e.t(s,o),l=c.getSourceFile(s),u=c.languageService.getProgram().getTypeChecker(),v=n.nodes?.nodes?.find(e=>e?.id===a),y=a?`fn_${v?.functionDefinition?.identifier?.replace(/::/g,`_`)}`:`flow`,b=a?`node_${e.i(a)}`:`flow_${e.i(n.id)}`,x=f(l),S=p(l).get(b),C=x.get(y),w=m(u,S),T=h(u,C,S),E=w?.map((e,n)=>(e.flags&t.default.TypeFlags.Undefined)===0?e:T?.[n]??e),D=(v?.parameters?.nodes??[]).map(e=>e?.value!=null),O=_(u,S,E,T,g(C,w,D),a?x:new Map,a?i:[],D),k=d(u,S,C);return{nodeId:a,parameters:O,return:k?e.o(u,S,k,Array.from(x.values()),i,!1):{input:`generic`}}},d=(e,n,r)=>{if(n?.initializer&&t.default.isCallExpression(n.initializer)){let t=e.getResolvedSignature(n.initializer);if(t)return e.getReturnTypeOfSignature(t)}if(r){let t=e.getSignatureFromDeclaration(r);if(t)return e.getReturnTypeOfSignature(t)}},f=e=>new Map(e.statements.filter(t.default.isFunctionDeclaration).map(e=>[e.name.getText(),e])),p=e=>{let n=[];return e.statements.forEach(e=>{e.forEachChild(function e(r){t.default.isVariableDeclaration(r)&&(r.parent.flags&t.default.NodeFlags.Const)!==0&&n.push([r.name.getText(),r]),r.forEachChild(e)})}),new Map(n)},m=(e,n)=>{if(!(!n?.initializer||!t.default.isCallExpression(n.initializer)))return e.getResolvedSignature(n.initializer)?.parameters.map(t=>e.getTypeOfSymbolAtLocation(t,n.initializer))},h=(e,t,n)=>{if(!(!t||!n?.initializer))return t.parameters.map(t=>{let r=e.getSymbolAtLocation(t.name);return e.getTypeOfSymbolAtLocation(r,n.initializer)})},g=(e,n,r=[])=>{let i=e.typeParameters?.map(e=>e.name.getText())||[],a={};e.parameters.forEach((e,n)=>{if(!e.type)return;let r=new Set;e.type.forEachChild(function n(a){if(t.default.isTypeReferenceNode(a)&&t.default.isIdentifier(a.typeName)){let e=a.typeName.text;i.includes(e)&&r.add(e)}if(t.default.isTypeReferenceNode(e.type)&&t.default.isIdentifier(e.type.typeName)){let t=e.type.typeName.text;i.includes(t)&&r.add(t)}a.forEachChild(n)}),r.forEach(e=>{a[e]||(a[e]=[]),a[e].push(n)})});let o=Object.values(a).filter(e=>e.length>1).map(([e,...t])=>t.map(t=>({parameterIndex:t,dependsOnIndex:e}))).flat();return n?o.filter(e=>{if(r[e.dependsOnIndex])return!1;let i=n[e.parameterIndex];if(!i)return!0;let a=(i.flags&t.default.TypeFlags.Null)!==0,o=(i.flags&t.default.TypeFlags.Undefined)!==0;return a||o}):o},_=(t,n,r,i,a,o,s,c)=>r?r.map((r,l)=>{let u=i?.[l],d=u?v(t,u,n):void 0,f=e.o(t,n,r,Array.from(o.values()),s,!0,d);return{schema:e.l(u?e.o(t,n,u,Array.from(o.values()),s,!1):void 0,f,c[l]??!1),blockedBy:a.filter(e=>e.parameterIndex===l).map(e=>e.dependsOnIndex)}}):[],v=(e,n,r)=>{if((n.flags&t.default.TypeFlags.TypeParameter)!==0){let r=n.symbol?.declarations?.[0];return r&&t.default.isTypeParameterDeclaration(r)&&r.constraint?e.getTypeFromTypeNode(r.constraint):e.getAnyType()}if((n.flags&t.default.TypeFlags.Conditional)!==0)return e.getBaseConstraintOfType(n)??e.getAnyType();if((n.flags&t.default.TypeFlags.Object)!==0&&y(n,e,new Set)){let i=n.aliasSymbol?.getName();if(i){let n=e.getSymbolsInScope(r,t.default.SymbolFlags.Variable).find(e=>e.getName()===`__widen_${i}`);if(n)return e.getTypeOfSymbolAtLocation(n,r)}return e.getAnyType()}return n},y=(e,n,r)=>r.has(e)?!1:(r.add(e),!!((e.flags&t.default.TypeFlags.TypeParameter)!==0||(e.flags&t.default.TypeFlags.Object)!==0&&(n.getTypeArguments(e).some(e=>y(e,n,r))||e.aliasTypeArguments?.some(e=>y(e,n,r))))),b=(n,r=[])=>{let i=`index.ts`,a=e.t(i,`${e.r(r)}\ntype MyType = ${n}`).languageService.getProgram(),o=a?.getSourceFile(i),s=a?.getTypeChecker();if(!o||!s)return;let c=o.statements.filter(e=>t.default.isTypeAliasDeclaration(e)||t.default.isInterfaceDeclaration(e)||t.default.isClassDeclaration(e)).pop();if(!c)return;let l=s.getTypeAtLocation(c);if(l)return e.o(s,void 0,l,[],[],!1)};exports.CUSTOM_INPUT_IDENTIFIERS=e.a,exports.getFlowValidation=c,exports.getSchema=e.o,exports.getSignatureSchema=u,exports.getTypeFromValue=n,exports.getTypeSchema=b,exports.getValueFromType=r,exports.getValueValidation=l,exports.isCustomInputIdentifier=e.s,exports.isSubFlow=e.c,exports.mergeSchemas=e.l;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  export * from './extraction/getTypeFromValue';
2
2
  export * from './extraction/getValueFromType';
3
- export * from './extraction/getFlowSchemas';
4
- export type { JsonSchema } from './util/jsonSchema.util';
3
+ export * from './util/schema.util';
5
4
  export * from './validation/getFlowValidation';
6
5
  export * from './validation/getValueValidation';
7
6
  export * from './schema/getSignatureSchema';
package/dist/index.js ADDED
@@ -0,0 +1,272 @@
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-CXLl9T2B.js";
2
+ import u, { flattenDiagnosticMessageText as d } from "typescript";
3
+ //#region src/extraction/getTypeFromValue.ts
4
+ var f = (e, t) => {
5
+ let n = l(e?.value);
6
+ if (!n) return "any";
7
+ let r = `
8
+ ${o(t, "unknown")}
9
+ const tempValue = ${n ?? "any"};
10
+ `, i = "index.ts", a = c(i, r), s = a.getSourceFile(i), d = a.languageService.getProgram().getTypeChecker(), f = "any", p = (e) => {
11
+ if (u.isVariableDeclaration(e) && e.name.getText() === "tempValue") {
12
+ let t = d.getTypeAtLocation(e), n = (t) => {
13
+ if (t.isUnion()) {
14
+ let e = t.types.map(n);
15
+ return Array.from(new Set(e)).sort().join(" | ");
16
+ }
17
+ if (d.isArrayType(t)) {
18
+ let e = t.typeArguments || [], r = e.length > 0 ? n(e[0]) : "any";
19
+ return e[0]?.isUnion() ? `(${r})[]` : `${r}[]`;
20
+ }
21
+ if (t.getFlags() & u.TypeFlags.Object || t.isClassOrInterface()) {
22
+ let r = d.getPropertiesOfType(t);
23
+ if (r.length > 0) return `{ ${r.map((t) => {
24
+ let r = d.getTypeOfSymbolAtLocation(t, e);
25
+ return `${t.getName()}: ${n(r)}`;
26
+ }).join(", ")} }`;
27
+ }
28
+ let r = d.getBaseTypeOfLiteralType(t);
29
+ return d.typeToString(r, e);
30
+ };
31
+ f = n(t);
32
+ }
33
+ u.forEachChild(e, p);
34
+ };
35
+ return p(s), f;
36
+ }, p = (e, t) => {
37
+ let n = `
38
+ ${o(t)}
39
+ type Target = ${e};
40
+ `, r = "index.ts", i = c(r, n), a = i.getSourceFile(r), s = i.languageService.getProgram().getTypeChecker(), l = a.statements.find((e) => u.isTypeAliasDeclaration(e) && e.name.text === "Target");
41
+ if (!l) return {
42
+ __typename: "LiteralValue",
43
+ value: null
44
+ };
45
+ let d = s.getTypeAtLocation(l.type), f = (e, t, n = /* @__PURE__ */ new Set()) => {
46
+ let r = new Set(n);
47
+ if (r.has(e)) return null;
48
+ let i = e.getFlags();
49
+ if (e.isUnion()) {
50
+ if (t.type, u.isTypeAliasDeclaration(t) && t.type && u.isUnionTypeNode(t.type)) return f(s.getTypeFromTypeNode(t.type.types[0]), t, r);
51
+ let n = e.types.filter((e) => {
52
+ let t = e.getFlags();
53
+ return !(t & u.TypeFlags.Undefined) && !(t & u.TypeFlags.Null);
54
+ });
55
+ return f(n.length > 0 ? n[0] : e.types[0], t, r);
56
+ }
57
+ if (i & u.TypeFlags.StringLiteral) return e.value;
58
+ if (i & u.TypeFlags.String) return "";
59
+ if (i & u.TypeFlags.NumberLiteral) return e.value;
60
+ if (i & u.TypeFlags.Number) return 0;
61
+ if (i & u.TypeFlags.BooleanLiteral) return e.intrinsicName === "true";
62
+ if (i & u.TypeFlags.Boolean) return !1;
63
+ if (s.isArrayType(e)) {
64
+ r.add(e);
65
+ let n = f(e.typeArguments?.[0] || s.getAnyType(), t, r);
66
+ return n === null ? [] : [n];
67
+ }
68
+ if (e.isClassOrInterface() || i & u.TypeFlags.Object || e.getProperties().length > 0) {
69
+ r.add(e);
70
+ let n = {};
71
+ return e.getProperties().forEach((e) => {
72
+ let i = s.getTypeOfSymbolAtLocation(e, t), a = e.valueDeclaration;
73
+ i && (n[e.getName()] = f(i, a || t, r));
74
+ }), n;
75
+ }
76
+ return null;
77
+ };
78
+ return {
79
+ __typename: "LiteralValue",
80
+ value: f(d, l)
81
+ };
82
+ }, m = 2345, h = 2339, g = (e, t, n) => {
83
+ if (e.getStart() > t || e.getEnd() < n) return;
84
+ let r = e;
85
+ return e.forEachChild((e) => {
86
+ let i = g(e, t, n);
87
+ i && (r = i);
88
+ }), r;
89
+ }, _ = (e, t, n) => {
90
+ if (e.start === void 0 || e.length === void 0) return !1;
91
+ let r = g(t, e.start, e.start + e.length);
92
+ if (!r) return !1;
93
+ if (e.code === m && u.isExpression(r)) {
94
+ let e = n.getTypeAtLocation(r);
95
+ if (!e.isUnion()) return !1;
96
+ let t = n.getContextualType(r);
97
+ return t ? e.types.some((e) => (e.flags & (u.TypeFlags.Null | u.TypeFlags.Undefined)) === 0 && n.isTypeAssignableTo(e, t)) : !1;
98
+ }
99
+ if (e.code === h && u.isPropertyAccessExpression(r.parent)) {
100
+ let e = n.getNonNullableType(n.getTypeAtLocation(r.parent.expression));
101
+ if (!e.isUnion()) return !1;
102
+ let t = r.getText();
103
+ return e.types.some((e) => e.getProperty(t) !== void 0);
104
+ }
105
+ return !1;
106
+ }, v = (e, t, n) => {
107
+ if (!e?.startingNodeId) return {
108
+ isValid: !1,
109
+ returnType: "void",
110
+ diagnostics: [{
111
+ nodeId: null,
112
+ parameterIndex: null,
113
+ code: 0,
114
+ message: "You need to provide a starting node to be able to execute this flow.",
115
+ severity: "error"
116
+ }]
117
+ };
118
+ if (!e.nodes?.nodes?.find((t) => t?.id == e.startingNodeId)) return {
119
+ isValid: !1,
120
+ returnType: "void",
121
+ diagnostics: [{
122
+ nodeId: null,
123
+ parameterIndex: null,
124
+ code: 0,
125
+ message: "The starting node is not linked within the flow. Please make sure the starting node is connected to the rest of the flow.",
126
+ severity: "error"
127
+ }]
128
+ };
129
+ let r = new Set(t?.map((e) => e.identifier)), a = (e.nodes?.nodes ?? []).filter((e) => e?.functionDefinition && !r.has(e.functionDefinition.identifier)).map((e) => ({
130
+ nodeId: e.id,
131
+ parameterIndex: null,
132
+ code: 0,
133
+ message: `The function definition "${e.functionDefinition.identifier}" is not reachable.`,
134
+ severity: "error"
135
+ }));
136
+ if (a.length > 0) return {
137
+ isValid: !1,
138
+ returnType: "void",
139
+ diagnostics: a
140
+ };
141
+ let o = i(e, t, n, !1, !1), s = "index.ts", l = c(s, o), u = l.getSourceFile(s), f = l.languageService.getProgram(), p = f.getTypeChecker(), m = f.getSemanticDiagnostics(u).map((e) => {
142
+ let t = d(e.messageText, "\n"), n, r = null;
143
+ if (e.start !== void 0) {
144
+ let t = u.getFullText(), i = Math.max(0, e.start - 300), a = Math.min(t.length, e.start), o = t.substring(i, a), s = /\/\* @pos ([^ ]+) (\d+|null) \*\//g, c, l = null, d = -1;
145
+ for (; (c = s.exec(o)) !== null;) {
146
+ let t = i + c.index + c[0].length;
147
+ t <= e.start && t > d && (d = t, l = c);
148
+ }
149
+ l && (n = l[1] === "null" ? null : l[1], r = parseInt(l[2], 10));
150
+ }
151
+ let i = _(e, u, p) ? "warning" : "error";
152
+ return {
153
+ message: t,
154
+ code: e.code,
155
+ severity: i,
156
+ nodeId: n,
157
+ parameterIndex: typeof r == "number" && Number.isSafeInteger(r) ? r : null
158
+ };
159
+ }).filter((e) => e !== null);
160
+ return {
161
+ isValid: !m.some((e) => e?.severity === "error"),
162
+ returnType: "void",
163
+ diagnostics: m
164
+ };
165
+ }, y = (e, t, n) => {
166
+ let r = l(t?.value), i = `
167
+ ${o(n)}
168
+ const testValue: ${e} = ${r};
169
+ `, a = "index.ts", s = c(a, i).languageService.getSemanticDiagnostics(a).map((e) => {
170
+ let t = u.flattenDiagnosticMessageText(e.messageText, "\n"), n = t.includes("not assignable to parameter of type") && (t.includes("'{}'") || t.includes("undefined")) || t.includes("not assignable to type 'undefined'") || t.includes("not assignable to type 'void'") || t.includes("may be a mistake because neither type sufficiently overlaps");
171
+ return {
172
+ message: t,
173
+ code: e.code,
174
+ severity: n ? "warning" : "error"
175
+ };
176
+ });
177
+ return {
178
+ isValid: !s.some((e) => e.severity === "error"),
179
+ returnType: "void",
180
+ diagnostics: s
181
+ };
182
+ }, b = (e, t, r, o) => {
183
+ let s = i(e, r, t), l = "index.ts", d = c(l, s), f = d.getSourceFile(l), p = d.languageService.getProgram().getTypeChecker(), m = e.nodes?.nodes?.find((e) => e?.id === o), h = o ? `fn_${m?.functionDefinition?.identifier?.replace(/::/g, "_")}` : "flow", g = o ? `node_${n(o)}` : `flow_${n(e.id)}`, _ = S(f), v = C(f).get(g), y = _.get(h), b = w(p, v), O = T(p, y, v), k = b?.map((e, t) => (e.flags & u.TypeFlags.Undefined) === 0 ? e : O?.[t] ?? e), A = (m?.parameters?.nodes ?? []).map((e) => e?.value != null), j = D(p, v, k, O, E(y, b, A), o ? _ : /* @__PURE__ */ new Map(), o ? r : [], A), M = x(p, v, y);
184
+ return {
185
+ nodeId: o,
186
+ parameters: j,
187
+ return: M ? a(p, v, M, Array.from(_.values()), r, !1) : { input: "generic" }
188
+ };
189
+ }, x = (e, t, n) => {
190
+ if (t?.initializer && u.isCallExpression(t.initializer)) {
191
+ let n = e.getResolvedSignature(t.initializer);
192
+ if (n) return e.getReturnTypeOfSignature(n);
193
+ }
194
+ if (n) {
195
+ let t = e.getSignatureFromDeclaration(n);
196
+ if (t) return e.getReturnTypeOfSignature(t);
197
+ }
198
+ }, S = (e) => new Map(e.statements.filter(u.isFunctionDeclaration).map((e) => [e.name.getText(), e])), C = (e) => {
199
+ let t = [];
200
+ return e.statements.forEach((e) => {
201
+ e.forEachChild(function e(n) {
202
+ u.isVariableDeclaration(n) && (n.parent.flags & u.NodeFlags.Const) !== 0 && t.push([n.name.getText(), n]), n.forEachChild(e);
203
+ });
204
+ }), new Map(t);
205
+ }, w = (e, t) => {
206
+ if (!(!t?.initializer || !u.isCallExpression(t.initializer))) return e.getResolvedSignature(t.initializer)?.parameters.map((n) => e.getTypeOfSymbolAtLocation(n, t.initializer));
207
+ }, T = (e, t, n) => {
208
+ if (!(!t || !n?.initializer)) return t.parameters.map((t) => {
209
+ let r = e.getSymbolAtLocation(t.name);
210
+ return e.getTypeOfSymbolAtLocation(r, n.initializer);
211
+ });
212
+ }, E = (e, t, n = []) => {
213
+ let r = e.typeParameters?.map((e) => e.name.getText()) || [], i = {};
214
+ e.parameters.forEach((e, t) => {
215
+ if (!e.type) return;
216
+ let n = /* @__PURE__ */ new Set();
217
+ e.type.forEachChild(function t(i) {
218
+ if (u.isTypeReferenceNode(i) && u.isIdentifier(i.typeName)) {
219
+ let e = i.typeName.text;
220
+ r.includes(e) && n.add(e);
221
+ }
222
+ if (u.isTypeReferenceNode(e.type) && u.isIdentifier(e.type.typeName)) {
223
+ let t = e.type.typeName.text;
224
+ r.includes(t) && n.add(t);
225
+ }
226
+ i.forEachChild(t);
227
+ }), n.forEach((e) => {
228
+ i[e] || (i[e] = []), i[e].push(t);
229
+ });
230
+ });
231
+ let a = Object.values(i).filter((e) => e.length > 1).map(([e, ...t]) => t.map((t) => ({
232
+ parameterIndex: t,
233
+ dependsOnIndex: e
234
+ }))).flat();
235
+ return t ? a.filter((e) => {
236
+ if (n[e.dependsOnIndex]) return !1;
237
+ let r = t[e.parameterIndex];
238
+ if (!r) return !0;
239
+ let i = (r.flags & u.TypeFlags.Null) !== 0, a = (r.flags & u.TypeFlags.Undefined) !== 0;
240
+ return i || a;
241
+ }) : a;
242
+ }, D = (e, t, n, i, o, s, c, l) => n ? n.map((n, u) => {
243
+ let d = i?.[u], f = d ? O(e, d, t) : void 0, p = a(e, t, n, Array.from(s.values()), c, !0, f);
244
+ return {
245
+ schema: r(d ? a(e, t, d, Array.from(s.values()), c, !1) : void 0, p, l[u] ?? !1),
246
+ blockedBy: o.filter((e) => e.parameterIndex === u).map((e) => e.dependsOnIndex)
247
+ };
248
+ }) : [], O = (e, t, n) => {
249
+ if ((t.flags & u.TypeFlags.TypeParameter) !== 0) {
250
+ let n = t.symbol?.declarations?.[0];
251
+ return n && u.isTypeParameterDeclaration(n) && n.constraint ? e.getTypeFromTypeNode(n.constraint) : e.getAnyType();
252
+ }
253
+ if ((t.flags & u.TypeFlags.Conditional) !== 0) return e.getBaseConstraintOfType(t) ?? e.getAnyType();
254
+ if ((t.flags & u.TypeFlags.Object) !== 0 && k(t, e, /* @__PURE__ */ new Set())) {
255
+ let r = t.aliasSymbol?.getName();
256
+ if (r) {
257
+ let t = e.getSymbolsInScope(n, u.SymbolFlags.Variable).find((e) => e.getName() === `__widen_${r}`);
258
+ if (t) return e.getTypeOfSymbolAtLocation(t, n);
259
+ }
260
+ return e.getAnyType();
261
+ }
262
+ return t;
263
+ }, k = (e, t, n) => n.has(e) ? !1 : (n.add(e), !!((e.flags & u.TypeFlags.TypeParameter) !== 0 || (e.flags & u.TypeFlags.Object) !== 0 && (t.getTypeArguments(e).some((e) => k(e, t, n)) || e.aliasTypeArguments?.some((e) => k(e, t, n))))), A = (e, t = []) => {
264
+ let n = "index.ts", r = c(n, `${o(t)}\ntype MyType = ${e}`).languageService.getProgram(), i = r?.getSourceFile(n), s = r?.getTypeChecker();
265
+ if (!i || !s) return;
266
+ let l = i.statements.filter((e) => u.isTypeAliasDeclaration(e) || u.isInterfaceDeclaration(e) || u.isClassDeclaration(e)).pop();
267
+ if (!l) return;
268
+ let d = s.getTypeAtLocation(l);
269
+ if (d) return a(s, void 0, d, [], [], !1);
270
+ };
271
+ //#endregion
272
+ export { e as CUSTOM_INPUT_IDENTIFIERS, v as getFlowValidation, a as getSchema, b as getSignatureSchema, f as getTypeFromValue, A as getTypeSchema, p as getValueFromType, y as getValueValidation, s as isCustomInputIdentifier, t as isSubFlow, r as mergeSchemas };
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-Kbkh95iw.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.t(a,e.n(t,n,r)),s=o.getSourceFile(a),c=o.languageService.getProgram().getTypeChecker(),d=i({...f(c,s),...p(c,s,t)},r),m=(t.nodes?.nodes??[]).map(e=>e&&v(e,d));return{...t,inputSchema:d[l]??g(),outputSchema:d[u]??_(),nodes:{...t.nodes,nodes:m}}},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;
@@ -0,0 +1,2 @@
1
+ export * from './extraction/getFlowSchemas';
2
+ export type { JsonSchema } from './util/jsonSchema.util';
package/dist/server.js ADDED
@@ -0,0 +1,123 @@
1
+ import { i as e, n as t, r as n, t as r } from "./utils-CXLl9T2B.js";
2
+ import i from "typescript";
3
+ import { DEFAULT_CONFIG as a, SchemaGenerator as o, createFormatter as s, createParser as c } from "ts-json-schema-generator";
4
+ //#region src/util/jsonSchema.util.ts
5
+ var l = {
6
+ ...a,
7
+ expose: "none",
8
+ topRef: !1,
9
+ jsDoc: "none",
10
+ skipTypeCheck: !0
11
+ }, u = (e, t) => {
12
+ let n = Object.keys(e);
13
+ if (n.length === 0) return {};
14
+ let r = f(d(e, t)), i = {};
15
+ for (let e of n) try {
16
+ i[e] = p(r.createSchema(e));
17
+ } catch {
18
+ i[e] = {};
19
+ }
20
+ return i;
21
+ }, d = (e, t) => {
22
+ let r = Object.entries(e).map(([e, t]) => `export type ${e} = ${t};`).join("\n");
23
+ return `${n(t)}\n${r}`;
24
+ }, f = (e) => {
25
+ let t = r("index.ts", e).languageService.getProgram();
26
+ return new o(t, c(t, l), s(l), l);
27
+ }, p = (e) => {
28
+ let { $schema: t, definitions: n, ...r } = e, i = n && Object.keys(n).length > 0 ? {
29
+ ...r,
30
+ definitions: n
31
+ } : r;
32
+ return JSON.parse(JSON.stringify(i));
33
+ }, m = (e, n, i) => {
34
+ if (!e) return;
35
+ let a = "index.ts", o = r(a, t(e, n, i)), s = o.getSourceFile(a), c = o.languageService.getProgram().getTypeChecker(), l = u({
36
+ ...v(c, s),
37
+ ...y(c, s, e)
38
+ }, i), d = (e.nodes?.nodes ?? []).map((e) => e && w(e, l));
39
+ return {
40
+ ...e,
41
+ inputSchema: l[h] ?? S(),
42
+ outputSchema: l[g] ?? C(),
43
+ nodes: {
44
+ ...e.nodes,
45
+ nodes: d
46
+ }
47
+ };
48
+ }, h = "Flow_input", g = "Flow_output", _ = (t, n, r) => `Node_${e(t)}_${n}_${r}`, v = (e, t) => {
49
+ let n = t.statements.filter(i.isFunctionDeclaration).find((e) => e.name?.getText() === "flow");
50
+ if (!n) return {};
51
+ let r = e.getSignatureFromDeclaration(n);
52
+ if (!r) return {};
53
+ let { input: a, output: o } = x(e, r, n);
54
+ return {
55
+ [h]: a,
56
+ [g]: o
57
+ };
58
+ }, y = (e, t, n) => {
59
+ let r = O(t), i = {};
60
+ for (let t of n.nodes?.nodes ?? []) {
61
+ if (!t?.id) continue;
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);
68
+ if (!s) return;
69
+ let { input: c, output: l } = x(e, s, a);
70
+ i[_(t.id, r, "input")] = c, i[_(t.id, r, "output")] = l;
71
+ });
72
+ }
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) => {
78
+ let r = (t) => e.typeToString(t, n, i.TypeFormatFlags.NoTruncation);
79
+ return {
80
+ input: `{ ${t.parameters.map((t) => {
81
+ let i = e.getTypeOfSymbolAtLocation(t, t.valueDeclaration ?? n), a = E(t) ? "?" : "";
82
+ return `${t.getName()}${a}: ${r(i)}`;
83
+ }).join("; ")} }`,
84
+ output: r(e.getReturnTypeOfSignature(t))
85
+ };
86
+ }, S = () => ({ type: "object" }), C = () => ({}), w = (e, t) => {
87
+ let n = e.parameters?.nodes;
88
+ if (!n?.some(T)) return e;
89
+ let r = n.map((n, r) => {
90
+ if (!T(n)) return n;
91
+ let i = {
92
+ ...n.value,
93
+ inputSchema: t[_(e.id, r, "input")] ?? S(),
94
+ outputSchema: t[_(e.id, r, "output")] ?? C()
95
+ };
96
+ return {
97
+ ...n,
98
+ value: i
99
+ };
100
+ });
101
+ return {
102
+ ...e,
103
+ parameters: {
104
+ ...e.parameters,
105
+ nodes: r
106
+ }
107
+ };
108
+ }, T = (e) => e?.value?.__typename === "SubFlowValue", E = (e) => {
109
+ let t = e.valueDeclaration;
110
+ return !!t && i.isParameter(t) && (!!t.questionToken || !!t.initializer || !!t.dotDotDotToken);
111
+ }, D = (t, n) => {
112
+ let r = t.get(`node_${e(n.id)}`)?.initializer;
113
+ return r && i.isCallExpression(r) ? r : void 0;
114
+ }, O = (e) => {
115
+ let t = /* @__PURE__ */ new Map();
116
+ return e.statements.forEach((e) => {
117
+ e.forEachChild(function e(n) {
118
+ i.isVariableDeclaration(n) && (n.parent.flags & i.NodeFlags.Const) !== 0 && t.set(n.name.getText(), n), n.forEachChild(e);
119
+ });
120
+ }), t;
121
+ };
122
+ //#endregion
123
+ export { m as getFlowSchemas };