@code0-tech/triangulum 0.7.0 → 0.8.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.
- package/dist/index.d.ts +1 -10
- package/dist/{extraction → src/extraction}/getTypeFromValue.d.ts +2 -2
- package/dist/src/extraction/getTypeVariant.d.ts +19 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/suggestion/getReferenceSuggestions.d.ts +16 -0
- package/dist/{utils.d.ts → src/utils.d.ts} +2 -2
- package/dist/triangulum.cjs.js +33 -41
- package/dist/triangulum.es.js +664 -684
- package/package.json +6 -6
- package/dist/extraction/getTypeVariant.d.ts +0 -12
- package/dist/suggestion/getReferenceSuggestions.d.ts +0 -6
- /package/dist/{extraction → src/extraction}/getTypesFromFunction.d.ts +0 -0
- /package/dist/{extraction → src/extraction}/getTypesFromNode.d.ts +0 -0
- /package/dist/{extraction → src/extraction}/getValueFromType.d.ts +0 -0
- /package/dist/{suggestion → src/suggestion}/getNodeSuggestions.d.ts +0 -0
- /package/dist/{suggestion → src/suggestion}/getValueSuggestions.d.ts +0 -0
- /package/dist/{validation → src/validation}/getFlowValidation.d.ts +0 -0
- /package/dist/{validation → src/validation}/getValueValidation.d.ts +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from './extraction/getTypeVariant';
|
|
3
|
-
export * from './extraction/getValueFromType';
|
|
4
|
-
export * from './extraction/getTypesFromNode';
|
|
5
|
-
export * from './extraction/getTypesFromFunction';
|
|
6
|
-
export * from './suggestion/getNodeSuggestions';
|
|
7
|
-
export * from './suggestion/getReferenceSuggestions';
|
|
8
|
-
export * from './suggestion/getValueSuggestions';
|
|
9
|
-
export * from './validation/getFlowValidation';
|
|
10
|
-
export * from './validation/getValueValidation';
|
|
1
|
+
export {}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LiteralValue } from '@code0-tech/sagittarius-graphql-types';
|
|
1
|
+
import { DataType, LiteralValue } from '@code0-tech/sagittarius-graphql-types';
|
|
2
2
|
/**
|
|
3
3
|
* Uses the TypeScript compiler to generate a precise type string from any runtime value.
|
|
4
4
|
*/
|
|
5
|
-
export declare const getTypeFromValue: (value?: LiteralValue | null) => string;
|
|
5
|
+
export declare const getTypeFromValue: (value?: LiteralValue | null, dataTypes?: DataType[]) => string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DataType } from '@code0-tech/sagittarius-graphql-types';
|
|
2
|
+
export declare enum DataTypeVariant {
|
|
3
|
+
PRIMITIVE = 0,
|
|
4
|
+
TYPE = 1,
|
|
5
|
+
ARRAY = 2,
|
|
6
|
+
OBJECT = 3,
|
|
7
|
+
NODE = 4
|
|
8
|
+
}
|
|
9
|
+
export interface TypeVariantResult {
|
|
10
|
+
identifier: string;
|
|
11
|
+
variant: DataTypeVariant;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Determines the variant of a given TypeScript types string or DataType(s) using the TS compiler.
|
|
15
|
+
* - If types is a string: returns one result with the string as identifier
|
|
16
|
+
* - If types is a DataType: returns one result with DataType.identifier
|
|
17
|
+
* - If types is a DataType[]: returns results for each DataType with their identifiers
|
|
18
|
+
*/
|
|
19
|
+
export declare const getTypeVariant: (types?: string | DataType | DataType[], dataTypes?: DataType[]) => TypeVariantResult[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './extraction/getTypeFromValue';
|
|
2
|
+
export * from './extraction/getTypeVariant';
|
|
3
|
+
export * from './extraction/getValueFromType';
|
|
4
|
+
export * from './extraction/getTypesFromNode';
|
|
5
|
+
export * from './extraction/getTypesFromFunction';
|
|
6
|
+
export * from './suggestion/getNodeSuggestions';
|
|
7
|
+
export * from './suggestion/getReferenceSuggestions';
|
|
8
|
+
export * from './suggestion/getValueSuggestions';
|
|
9
|
+
export * from './validation/getFlowValidation';
|
|
10
|
+
export * from './validation/getValueValidation';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DataType, Flow, FunctionDefinition, NodeFunction, ReferenceValue } from '@code0-tech/sagittarius-graphql-types';
|
|
2
|
+
/**
|
|
3
|
+
* Calculates all available reference suggestions for a specific target parameter in a flow.
|
|
4
|
+
*
|
|
5
|
+
* This function analyzes the flow's generated source code to find all variables
|
|
6
|
+
* (node_ and p_ prefixed) that are in scope and compatible with the target parameter's
|
|
7
|
+
* expected type. For object types, it also extracts nested properties and their access paths.
|
|
8
|
+
*
|
|
9
|
+
* @param flow The flow configuration
|
|
10
|
+
* @param nodeId The ID of the node containing the target parameter
|
|
11
|
+
* @param targetIndex The index of the target parameter
|
|
12
|
+
* @param functions Available function definitions for type resolution
|
|
13
|
+
* @param dataTypes Available data type definitions
|
|
14
|
+
* @returns Array of ReferenceValue objects representing available suggestions
|
|
15
|
+
*/
|
|
16
|
+
export declare const getReferenceSuggestions: (flow?: Flow, nodeId?: NodeFunction["id"], targetIndex?: number, functions?: FunctionDefinition[], dataTypes?: DataType[]) => ReferenceValue[];
|
|
@@ -18,7 +18,7 @@ export interface ValidationResult {
|
|
|
18
18
|
/**
|
|
19
19
|
* Minimal TypeScript library definitions for the virtual compiler environment.
|
|
20
20
|
*/
|
|
21
|
-
export declare const MINIMAL_LIB = "\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
|
|
21
|
+
export declare const MINIMAL_LIB = "\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";
|
|
22
22
|
/**
|
|
23
23
|
* Common configuration for the TypeScript compiler host across different validation/inference tasks.
|
|
24
24
|
*/
|
|
@@ -30,7 +30,7 @@ export declare const DEFAULT_COMPILER_OPTIONS: ts.CompilerOptions;
|
|
|
30
30
|
/**
|
|
31
31
|
* Extracts and returns common type and generic declarations from DATA_TYPES.
|
|
32
32
|
*/
|
|
33
|
-
export declare function getSharedTypeDeclarations(dataTypes?: DataType[], genericType?: string): string;
|
|
33
|
+
export declare function getSharedTypeDeclarations(dataTypes?: DataType[], genericType?: string, useGenericDeclarations?: boolean): string;
|
|
34
34
|
/**
|
|
35
35
|
* Sanitizes an ID for use as a TypeScript variable name.
|
|
36
36
|
*/
|
package/dist/triangulum.cjs.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
`,useCaseSensitiveFileNames:!0,write:function(){return
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});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,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`typescript`);c=s(c);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=b(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=y(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 v(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 y(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 b(e,t,n,r,i){var a=[].concat(t),o=y(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)}}}var x=function(e){return e[e.PRIMITIVE=0]=`PRIMITIVE`,e[e.TYPE=1]=`TYPE`,e[e.ARRAY=2]=`ARRAY`,e[e.OBJECT=3]=`OBJECT`,e[e.NODE=4]=`NODE`,e}({}),S=(e,t)=>{let n=D(t),r=typeof e==`string`,i=Array.isArray(e),a=i?e:r?[{identifier:e,type:e}]:[e],o=i?e.map(e=>e.identifier):r?[e]:[e.identifier],s=[];for(let t=0;t<a.length;t++){let i=a[t],l=o[t],u=r?e:i.type,d=`
|
|
3
|
+
${n}
|
|
4
|
+
${u?`type TargetType = ${u};`:``}
|
|
5
|
+
const val: TargetType = {} as any;
|
|
6
|
+
`,f=`index.ts`,p=T(f,d),m=p.getSourceFile(f),h=p.languageService.getProgram().getTypeChecker(),g=x.TYPE,_=e=>{if(c.default.isVariableDeclaration(e)&&e.name.getText()===`val`){let t=h.getTypeAtLocation(e);g=t.getCallSignatures().length>0?x.NODE:h.isArrayType(t)?x.ARRAY:t.isStringLiteral()||t.isNumberLiteral()||(t.getFlags()&(c.default.TypeFlags.String|c.default.TypeFlags.Number|c.default.TypeFlags.Boolean|c.default.TypeFlags.EnumLiteral|c.default.TypeFlags.BigInt|c.default.TypeFlags.ESSymbol))!==0?x.PRIMITIVE:t.isClassOrInterface()||(t.getFlags()&c.default.TypeFlags.Object)!==0?x.OBJECT:x.TYPE}c.default.forEachChild(e,_)};_(m),s.push({identifier:l,variant:g})}return s},C=e=>{let t=e.signature;if(!t)return{parameters:[],returnType:`any`};let n=0;if(t.trim().startsWith(`<`)){let e=0;for(let r=0;r<t.length;r++){let i=t[r];if(i===`<`)e++;else if(i===`>`&&(e--,e===0)){n=r+1;break}}}let r=t.indexOf(`(`,n);if(r===-1)return{parameters:[],returnType:`any`};let i=-1,a=0;for(let e=r;e<t.length;e++){let n=t[e];if(n===`(`)a++;else if(n===`)`&&(a--,a===0)){i=e;break}}if(i===-1)return{parameters:[],returnType:`any`};let o=t.substring(r+1,i),s=t.substring(i+1).trim();s.startsWith(`:`)&&(s=s.substring(1).trim());let c=s||`void`,l=[];if(o.trim()){let e=``,t=0,n=0,r=0,i=0,a=e=>{let t=-1,n=0,r=0,i=0,a=0;for(let o=0;o<e.length;o++){let s=e[o];if(s===`{`)n++;else if(s===`}`)n--;else if(s===`[`)r++;else if(s===`]`)r--;else if(s===`(`)i++;else if(s===`)`)i--;else if(s===`<`)a++;else if(s===`>`)a--;else if(s===`:`&&n===0&&r===0&&i===0&&a===0){t=o;break}}t===-1?l.push(`any`):l.push(e.substring(t+1).trim())};for(let s of o){if(s===`(`)t++;else if(s===`)`)t--;else if(s===`<`)n++;else if(s===`>`)n--;else if(s===`{`)r++;else if(s===`}`)r--;else if(s===`[`)i++;else if(s===`]`)i--;else if(s===`,`&&t===0&&n===0&&r===0&&i===0){a(e.trim()),e=``;continue}e+=s}e.trim()&&a(e.trim())}return{parameters:l,returnType:c}},w=`
|
|
7
7
|
interface Array<T> {
|
|
8
8
|
[n: number]: T;
|
|
9
9
|
length: number;
|
|
@@ -17,41 +17,33 @@
|
|
|
17
17
|
interface NewableFunction extends Function {}
|
|
18
18
|
interface IArguments { }
|
|
19
19
|
interface RegExp { }
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
`),
|
|
24
|
-
`);return
|
|
25
|
-
${
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
${
|
|
29
|
-
|
|
30
|
-
`),
|
|
31
|
-
|
|
32
|
-
${
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
${
|
|
36
|
-
${k(n)}
|
|
37
|
-
type Target = ${t};
|
|
38
|
-
`,a="index.ts",c=L(a,i),g=c.getSourceFile(a),p=c.languageService.getProgram().getTypeChecker(),u=g.statements.find(o=>F.isTypeAliasDeclaration(o)&&o.name.text==="Target");if(!u)return{__typename:"LiteralValue",value:null};const m=p.getTypeAtLocation(u.type),r=(o,y,e=new Set)=>{if(e.has(o))return null;e.add(o);const s=o.getFlags();if(o.isUnion()){if(y.type,F.isTypeAliasDeclaration(y)&&y.type&&F.isUnionTypeNode(y.type)){const h=p.getTypeFromTypeNode(y.type.types[0]);return r(h,y,e)}const l=o.types.filter(h=>{const v=h.getFlags();return!(v&F.TypeFlags.Undefined)&&!(v&F.TypeFlags.Null)}),T=l.length>0?l[0]:o.types[0];return r(T,y,e)}if(s&F.TypeFlags.StringLiteral)return o.value;if(s&F.TypeFlags.String)return"";if(s&F.TypeFlags.NumberLiteral)return o.value;if(s&F.TypeFlags.Number)return 0;if(s&F.TypeFlags.BooleanLiteral)return o.intrinsicName==="true";if(s&F.TypeFlags.Boolean)return!1;if(p.isArrayType(o)){const T=o.typeArguments?.[0]||p.getAnyType(),h=r(T,y,e);return h!==null?[h]:[]}if(o.isClassOrInterface()||s&F.TypeFlags.Object||o.getProperties().length>0){const l={};return o.getProperties().forEach(h=>{const v=p.getTypeOfSymbolAtLocation(h,y);v&&(l[h.getName()]=r(v,y,e))}),l}return null};return{__typename:"LiteralValue",value:r(m,u)}},le=(t,n,i)=>{if(!t)return{parameters:[],returnType:"any"};const a=t.id||"temp_node_id",c={...t,id:a,parameters:{...t.parameters,nodes:t.parameters?.nodes?.map(e=>e?.value?e:{...e,value:null})||[]}},g=a+"_params",f={...c,id:g,parameters:{...c.parameters,nodes:c.parameters.nodes.map(e=>e.value?.__typename==="LiteralValue"&&e.value.value!==null&&typeof e.value.value!="object"?{...e,value:null}:e)}},u=oe({nodes:{__typename:"NodeFunctionConnection",nodes:[c,f]}},n,i),m=A(a),r=A(g),d=u.parameters.get(m)||[],o=u.parameters.get(r)||[];return{parameters:d.map((e,s)=>{const l=o[s];return l&&l!=="any"&&l!=="unknown"?l:e}),returnType:u.nodes.get(m)||"any"}},ue=(t,n,i)=>{let a=n;const c=t?H(t,i):null;if(t&&n&&c!==j.NODE){let g=function(y){const e=y.trim().match(/^<([^>]+)>/);return e?e[1].split(",").map(s=>s.trim()).filter(Boolean).length:0};const f=`
|
|
39
|
-
${k(i)}
|
|
40
|
-
type TargetType = ${t};
|
|
41
|
-
${n?.map((y,e)=>`
|
|
42
|
-
declare function Fu${e}${y.signature};
|
|
43
|
-
type F${e} = ReturnType<typeof Fu${e}${g(y.signature)>0?`<${Array(g(y.signature)).fill("any").join(", ")}>`:""}>;
|
|
20
|
+
`;function T(e,t){let n=new Map;return n.set(e,t),n.set(`lib.codezero.d.ts`,w),p(v(n),[e,`lib.codezero.d.ts`],c.default,E)}var E={target:c.default.ScriptTarget.Latest,lib:[`lib.codezero.d.ts`],noEmit:!0,strictNullChecks:!0};function D(e,t=`any`,n=!0){let r=Array.from(new Set(e?.flatMap(e=>e.genericKeys||[]))).map(e=>`type ${e} = ${t};`).join(`
|
|
21
|
+
`),i=e?.map(e=>`type ${e.identifier}${(e.genericKeys?.length??0)>0?`<${e.genericKeys?.join(`,`)}>`:``} = ${e.type};`).join(`
|
|
22
|
+
`);return`${n?r:``}\n${i}`}var O=e=>e.replace(/[^a-zA-Z0-9]/g,`_`);function k(e,t,n,r=!1){let i=e?.nodes?.nodes||[],a=new Map(t?.map(e=>[e.identifier,e])),o=new Set,s=(e,t,n)=>{let a=i.find(t=>t?.id===e);if(!a||!a.functionDefinition?.identifier)return`undefined`;let o=(a.parameters?.nodes||[]).map((t,n)=>{let i=t.value;if(!i)return r?`/* @pos ${e} ${n} */ {}`:`/* @pos ${e} ${n} */ undefined`;if(i.__typename===`ReferenceValue`){let t=i;if(!t.nodeFunctionId)return`/* @pos ${e} ${n} */ undefined`;let r=t.inputIndex===void 0?`node_${O(t.nodeFunctionId)}`:`p_${O(t.nodeFunctionId)}_${t.parameterIndex}[${t.inputIndex}]`;return t.referencePath?.forEach(e=>{r+=`?.${e.path}`}),`/* @pos ${e} ${n} */ ${r}`}return i.__typename===`LiteralValue`?`/* @pos ${e} ${n} */ ${JSON.stringify(i.value)}`:i.__typename===`NodeFunctionIdWrapper`?s(i.id,e,n):r?`/* @pos ${e} ${n} */ ({} as any)`:`/* @pos ${e} ${n} */ undefined`}).join(`, `),c=`${`fn_${a.functionDefinition.identifier.replace(/::/g,`_`)}`}(${o})`;return t!==void 0&&n!==void 0?`${c}`:c},c=(e,t=``)=>{if(o.has(e))return``;let l=i.find(t=>t?.id===e);if(!l||!l.functionDefinition)return``;o.add(e);let u=a.get(l.functionDefinition.identifier);if(!u)return`${t}// Error: Function ${l.functionDefinition.identifier} not found\n`;let d={parameters:[]};r||(d=C(u));let f=(l.parameters?.nodes||[]).map((i,a)=>{let o=i.value;if(!o)return r?`/* @pos ${e} ${a} */ {}`:`/* @pos ${e} ${a} */ undefined`;if(o.__typename===`ReferenceValue`){let t=o;if(!t.nodeFunctionId)return`/* @pos ${e} ${a} */ undefined`;let n=t.inputIndex===void 0?`node_${O(t.nodeFunctionId)}`:`p_${O(t.nodeFunctionId)}_${t.parameterIndex}[${t.inputIndex}]`;return t.referencePath?.forEach(e=>{n+=`?.${e.path}`}),`/* @pos ${e} ${a} */ ${n}`}if(o.__typename===`LiteralValue`)return`/* @pos ${e} ${a} */ ${JSON.stringify(o.value)}`;if(o.__typename===`NodeFunctionIdWrapper`){let i=o;if(r)return`/* @pos ${e} ${a} */ (...${`p_${O(e)}_${a}`}) => {\n${c(i.id,t+` `)}${t}}`;{let r=d.parameters[a];return r&&S(r,n)[0].variant===x.NODE?`/* @pos ${e} ${a} */ (...${`p_${O(e)}_${a}`}) => {\n${c(i.id,t+` `)}${t}}`:`/* @pos ${e} ${a} */ ${s(i.id,e,a)}`}}return r?`/* @pos ${e} ${a} */ {}`:`/* @pos ${e} ${a} */ undefined`}).join(`, `),p=`node_${O(l.id)}`,m=`fn_${l?.functionDefinition?.identifier?.replace(/::/g,`_`)}`;f.includes(`undefined`);let h=`${t}${l.functionDefinition.identifier===`std::control::return`?`return `:`const ${p} = `}${m}(${f}) ;\n`;return l.nextNodeId&&(h+=c(l.nextNodeId,t)),h},l=D(n),u=t?.map(e=>`declare function fn_${e.identifier?.replace(/::/g,`_`)}${e.signature}`).join(`
|
|
23
|
+
`),d=new Set(i.map(e=>e?.nextNodeId).filter(e=>!!e)),f=new Set;return i.forEach(e=>e?.parameters?.nodes?.forEach(e=>{e?.value?.__typename===`NodeFunctionIdWrapper`&&e.value.id&&f.add(e.value.id)})),`${l}\n${u}\n\n// --- Flow ---\n${i.filter(e=>e?.id&&!d.has(e.id)&&!f.has(e.id)).map(e=>c(e.id)).join(`
|
|
24
|
+
`)}`}function A(e,t,n){let r=k(e,t,n,!0),i=`index.ts`,a=T(i,r),o=a.getSourceFile(i),s=a.languageService.getProgram().getTypeChecker(),l=new Map,u=new Map,d=new Map;(e?.nodes?.nodes||[]).forEach(e=>{e?.id&&d.set(O(e.id),e)});let f=e=>{if(c.default.isVariableDeclaration(e)&&e.name.getText().startsWith(`node_`)){let t=e.name.getText().replace(`node_`,``),n=s.getTypeAtLocation(e);if(l.set(t,s.typeToString(n,e,c.default.TypeFormatFlags.NoTruncation)),e.initializer&&c.default.isCallExpression(e.initializer)){let n=s.getResolvedSignature(e.initializer);if(n){let r=n.getParameters().map(t=>{let n=s.getTypeOfSymbolAtLocation(t,e.initializer);return s.typeToString(n,e.initializer,c.default.TypeFormatFlags.NoTruncation)});u.set(t,r)}}}if(c.default.isReturnStatement(e)&&e.expression&&c.default.isCallExpression(e.expression)){let t=e.expression;s.getResolvedSignature(t)}c.default.forEachChild(e,f)};return f(o),{nodes:l,parameters:u}}var j=(e,t)=>{let n=JSON.stringify(e?.value);if(!n)return`any`;let r=`
|
|
25
|
+
${D(t,`unknown`)}
|
|
26
|
+
const tempValue = ${n??`any`};
|
|
27
|
+
`,i=`index.ts`,a=T(i,r),o=a.getSourceFile(i),s=a.languageService.getProgram().getTypeChecker(),l=`any`,u=e=>{if(c.default.isVariableDeclaration(e)&&e.name.getText()===`tempValue`){let t=s.getTypeAtLocation(e),n=s.getSymbolsInScope(e,c.default.SymbolFlags.TypeAlias),r=t=>{if(t.isUnion()){let e=t.types.map(r);return Array.from(new Set(e)).sort().join(` | `)}if(s.isArrayType(t)){let e=t.typeArguments||[],n=e.length>0?r(e[0]):`any`;return e[0]?.isUnion()?`(${n})[]`:`${n}[]`}if(t.getFlags()&c.default.TypeFlags.Object||t.isClassOrInterface()){let n=s.getPropertiesOfType(t);if(n.length>0)return`{ ${n.map(t=>{let n=s.getTypeOfSymbolAtLocation(t,e);return`${t.getName()}: ${r(n)}`}).join(`, `)} }`}let i=n.filter(e=>s.isTypeAssignableTo(t,s.getDeclaredTypeOfSymbol(e)));return i.length>0?i.sort((e,t)=>{let n=s.getDeclaredTypeOfSymbol(e),r=s.getDeclaredTypeOfSymbol(t),i=s.isTypeAssignableTo(n,r),a=s.isTypeAssignableTo(r,n);return i&&!a?-1:a&&!i?1:e.getName().length-t.getName().length||e.getName().localeCompare(t.getName())})[0].getName():s.typeToString(t,e)};l=r(t)}c.default.forEachChild(e,u)};return u(o),l},M=(e,t)=>{let n=`
|
|
28
|
+
${D(t)}
|
|
29
|
+
type Target = ${e};
|
|
30
|
+
`,r=`index.ts`,i=T(r,n),a=i.getSourceFile(r),o=i.languageService.getProgram().getTypeChecker(),s=a.statements.find(e=>c.default.isTypeAliasDeclaration(e)&&e.name.text===`Target`);if(!s)return{__typename:`LiteralValue`,value:null};let l=o.getTypeAtLocation(s.type),u=(e,t,n=new Set)=>{if(n.has(e))return null;n.add(e);let r=e.getFlags();if(e.isUnion()){if(t.type,c.default.isTypeAliasDeclaration(t)&&t.type&&c.default.isUnionTypeNode(t.type))return u(o.getTypeFromTypeNode(t.type.types[0]),t,n);let r=e.types.filter(e=>{let t=e.getFlags();return!(t&c.default.TypeFlags.Undefined)&&!(t&c.default.TypeFlags.Null)});return u(r.length>0?r[0]:e.types[0],t,n)}if(r&c.default.TypeFlags.StringLiteral)return e.value;if(r&c.default.TypeFlags.String)return``;if(r&c.default.TypeFlags.NumberLiteral)return e.value;if(r&c.default.TypeFlags.Number)return 0;if(r&c.default.TypeFlags.BooleanLiteral)return e.intrinsicName===`true`;if(r&c.default.TypeFlags.Boolean)return!1;if(o.isArrayType(e)){let r=u(e.typeArguments?.[0]||o.getAnyType(),t,n);return r===null?[]:[r]}if(e.isClassOrInterface()||r&c.default.TypeFlags.Object||e.getProperties().length>0){let r={};return e.getProperties().forEach(e=>{let i=o.getTypeOfSymbolAtLocation(e,t);i&&(r[e.getName()]=u(i,t,n))}),r}return null};return{__typename:`LiteralValue`,value:u(l,s)}},N=(e,t,n)=>{if(!e)return{parameters:[],returnType:`any`};let r=e.id||`temp_node_id`,i={...e,id:r,parameters:{...e.parameters,nodes:e.parameters?.nodes?.map(e=>e?.value?e:{...e,value:null})||[]}},a=r+`_params`,o=A({id:`gid://sagittarius/Flow/0`,nodes:{__typename:`NodeFunctionConnection`,nodes:[i,{...i,id:a,parameters:{...i.parameters,nodes:i.parameters.nodes.map(e=>e.value?.__typename===`LiteralValue`&&e.value.value!==null&&typeof e.value.value!=`object`?{...e,value:null}:e)}}]}},t,n),s=O(r),c=O(a),l=o.parameters.get(s)||[],u=o.parameters.get(c)||[];return{parameters:l.map((e,t)=>{let n=u[t];return n&&n!==`any`&&n!==`unknown`?n:e}),returnType:o.nodes.get(s)||`any`}},P=(e,t,n)=>{let r=t,i=e?S(e,n)[0].variant:null;if(e&&t&&i!==x.NODE){function i(e){let t=e.trim().match(/^<([^>]+)>/);return t?t[1].split(`,`).map(e=>e.trim()).filter(Boolean).length:0}let a=`
|
|
31
|
+
${D(n)}
|
|
32
|
+
type TargetType = ${e};
|
|
33
|
+
${t?.map((e,t)=>`
|
|
34
|
+
declare function Fu${t}${e.signature};
|
|
35
|
+
type F${t} = ReturnType<typeof Fu${t}${i(e.signature)>0?`<${Array(i(e.signature)).fill(`any`).join(`, `)}>`:``}>;
|
|
44
36
|
`).join(`
|
|
45
37
|
`)}
|
|
46
|
-
${
|
|
38
|
+
${t?.map((e,t)=>`const check${t}: TargetType = {} as F${t};`).join(`
|
|
47
39
|
`)}
|
|
48
|
-
`,
|
|
49
|
-
`).findIndex(
|
|
50
|
-
${
|
|
51
|
-
type VALUE = ${
|
|
52
|
-
`,
|
|
53
|
-
`)
|
|
54
|
-
${
|
|
55
|
-
const testValue: ${
|
|
56
|
-
`,
|
|
57
|
-
`),
|
|
40
|
+
`,o=`index.ts`,s=T(o,a),c=s.getSourceFile(o),l=s.languageService.getProgram().getSemanticDiagnostics(),u=new Set;l.forEach(e=>{e.file===c&&e.start!==void 0&&u.add(c.getLineAndCharacterOfPosition(e.start).line)}),r=t.filter((e,t)=>{let n=`const check${t}: TargetType = {} as F${t};`,r=a.split(`
|
|
41
|
+
`).findIndex(e=>e.includes(n));return r!==-1&&!u.has(r)})}return r?.map(e=>({__typename:`NodeFunction`,id:`gid://sagittarius/NodeFunction/1`,functionDefinition:{__typename:`FunctionDefinition`,id:e.id,identifier:e.identifier},parameters:{__typename:`NodeParameterConnection`,nodes:(e.parameterDefinitions?.nodes||[]).map(e=>({__typename:`NodeParameter`,parameterDefinition:{__typename:`ParameterDefinition`,id:e?.id,identifier:e?.identifier},value:null}))}})).filter(e=>e!==null)??[]},F=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},I=(e,t,n,r=[])=>{let i=[];if(t.isTypeAssignableTo(e,n)&&i.push({path:r,type:e}),F(e)){let a=e.getProperties();a&&a.length>0&&a.forEach(e=>{let a=t.getTypeOfSymbolAtLocation(e,e.valueDeclaration),o=e.getName(),s=[...r,o];i.push(...I(a,t,n,s))})}return i},L=(e,t,n,r,i)=>{let a=k(e,r,i,!0),o=`index.ts`,s=T(o,a),l=s.getSourceFile(o),u=s.languageService.getProgram().getTypeChecker(),d=l.getFullText(),f=`/* @pos ${t} ${n} */`,p=d.indexOf(f)+f.length;function m(e,t){let n=e;return c.default.forEachChild(e,e=>{e.getStart(l,!0)<=t&&e.getEnd()>=t&&(n=m(e,t))}),n}let h=m(l,p),g;if(c.default.isCallExpression(h)&&(g=h),!g)return[];let _=u.getResolvedSignature(g);if(!_)return[];let v=_.getParameters(),y=v[n]||v[v.length-1],b=u.getTypeOfSymbolAtLocation(y,h),x=u.getSymbolsInScope(h,c.default.SymbolFlags.Variable),S=[];return x.forEach(e=>{let t=e.getName();if(!t.startsWith(`node_`)&&!t.startsWith(`p_`))return;let n=e.valueDeclaration||e.declarations?.[0];if(!n||n.getEnd()>=p)return;let r=u.getTypeOfSymbolAtLocation(e,h);if(t.startsWith(`node_`)){if((r.flags&c.default.TypeFlags.Void)===0){let e=t.replace(`node_`,``).replace(/___/g,`://`).replace(/__/g,`/`).replace(/_/g,`/`);I(r,u,b).forEach(({path:t})=>{let n={__typename:`ReferenceValue`,nodeFunctionId:e};t.length>0&&(n.referencePath=t),S.push(n)})}}else if(t.startsWith(`p_`)){let e=t.replace(`p_`,``),n=e.lastIndexOf(`_`),i=e.substring(0,n),a=parseInt(e.substring(n+1),10),o=i.replace(`p_`,``).replace(/___/g,`://`).replace(/__/g,`/`).replace(/_/g,`/`);if(u.isTupleType(r)){let e=r;u.getTypeArguments(e).forEach((t,n)=>{I(t,u,b).forEach(({path:t})=>{let r={__typename:`ReferenceValue`,nodeFunctionId:o,parameterIndex:isNaN(a)?0:a,inputIndex:n,inputTypeIdentifier:e.target.labeledElementDeclarations?.[n].name.getText()};t.length>0&&(r.referencePath=t),S.push(r)})})}}}),S},R=(e,t)=>{if(!e)return[];let n=`
|
|
42
|
+
${D(t)}
|
|
43
|
+
type VALUE = ${e}; const val: VALUE = {} as any;
|
|
44
|
+
`,r=`index.ts`,i=T(r,n),a=i.getSourceFile(r),o=i.languageService.getProgram().getTypeChecker(),s=a.statements.find(e=>c.default.isTypeAliasDeclaration(e)&&e.name.text===`VALUE`);if(!s||!c.default.isTypeAliasDeclaration(s))return[];let l=o.getTypeAtLocation(s),u=e=>e.isUnion()?e.types.flatMap(u):e.isStringLiteral()?[e.value]:e.isNumberLiteral()?[e.value.toString()]:e.intrinsicName===`true`?[`true`]:e.intrinsicName===`false`?[`false`]:[];return Array.from(new Set(u(l))).map(e=>({__typename:`LiteralValue`,value:e}))},z=(e,t,n)=>{let r=k(e,t,n),i=`index.ts`,a=T(i,r),o=a.getSourceFile(i),s=a.languageService.getProgram().getSemanticDiagnostics(o).map(e=>{let t=(0,c.flattenDiagnosticMessageText)(e.messageText,`
|
|
45
|
+
`),n,r;if(e.start!==void 0){let t=o.getFullText(),i=Math.max(0,e.start-300),a=Math.min(t.length,e.start),s=t.substring(i,a),c=/\/\* @pos ([^ ]+) (\d+) \*\//g,l,u=null,d=-1;for(;(l=c.exec(s))!==null;){let t=i+l.index+l[0].length;t<=e.start&&t>d&&(d=t,u=l)}u&&(n=u[1],r=parseInt(u[2],10))}return{message:t,code:e.code,severity:`error`,nodeId:n,parameterIndex:r}}).filter(e=>e!==null);return{isValid:!s.some(e=>e?.severity===`error`),returnType:`void`,diagnostics:s}},B=(e,t,n)=>{let r=JSON.stringify(t?.value),i=`
|
|
46
|
+
${D(n)}
|
|
47
|
+
const testValue: ${e} = ${r};
|
|
48
|
+
`,a=`index.ts`,o=T(a,i).languageService.getSemanticDiagnostics(a).map(e=>{let t=c.default.flattenDiagnosticMessageText(e.messageText,`
|
|
49
|
+
`),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`);return{message:t,code:e.code,severity:n?`warning`:`error`}});return{isValid:!o.some(e=>e.severity===`error`),returnType:`void`,diagnostics:o}};exports.DataTypeVariant=x,exports.getFlowValidation=z,exports.getNodeSuggestions=P,exports.getReferenceSuggestions=L,exports.getTypeFromValue=j,exports.getTypeVariant=S,exports.getTypesFromFunction=C,exports.getTypesFromNode=N,exports.getValueFromType=M,exports.getValueSuggestions=R,exports.getValueValidation=B;
|