diff --git a/backend/parsers/windmill-parser-ts/src/lib.rs b/backend/parsers/windmill-parser-ts/src/lib.rs index 2f0177d710..e958da8dd9 100644 --- a/backend/parsers/windmill-parser-ts/src/lib.rs +++ b/backend/parsers/windmill-parser-ts/src/lib.rs @@ -14,8 +14,9 @@ use swc_common::{sync::Lrc, FileName, SourceMap, SourceMapper, Span, Spanned}; use swc_ecma_ast::{ ArrayLit, AssignPat, BigInt, BindingIdent, Bool, Decl, ExportDecl, Expr, FnDecl, Ident, Lit, ModuleDecl, ModuleItem, Number, ObjectLit, Param, Pat, Str, TsArrayType, TsEntityName, - TsKeywordType, TsKeywordTypeKind, TsLit, TsLitType, TsOptionalType, TsPropertySignature, - TsType, TsTypeElement, TsTypeLit, TsTypeRef, TsUnionOrIntersectionType, TsUnionType, + TsKeywordType, TsKeywordTypeKind, TsLit, TsLitType, TsOptionalType, TsParenthesizedType, + TsPropertySignature, TsType, TsTypeElement, TsTypeLit, TsTypeRef, TsUnionOrIntersectionType, + TsUnionType, }; use swc_ecma_parser::{lexer::Lexer, Parser, StringInput, Syntax, TsConfig}; @@ -151,7 +152,7 @@ fn binding_ident_to_arg(BindingIdent { id, type_ann }: &BindingIdent) -> (String } fn tstype_to_typ(ts_type: &TsType) -> (Typ, bool) { - //println!("{:?}", ts_type); + // log(&format!("{:?}", ts_type)); match ts_type { TsType::TsKeywordType(t) => ( match t.kind { @@ -187,6 +188,9 @@ fn tstype_to_typ(ts_type: &TsType) -> (Typ, bool) { .collect(); (Typ::Object(properties), false) } + TsType::TsParenthesizedType(TsParenthesizedType { type_ann, .. }) => { + tstype_to_typ(type_ann) + } // TODO: we can do better here and extract the inner type of array TsType::TsArrayType(TsArrayType { elem_type, .. }) => { (Typ::List(Box::new(tstype_to_typ(&**elem_type).0)), false) diff --git a/backend/parsers/windmill-parser-wasm/pkg/package.json b/backend/parsers/windmill-parser-wasm/pkg/package.json index 107a1a1854..c50ca1612d 100644 --- a/backend/parsers/windmill-parser-wasm/pkg/package.json +++ b/backend/parsers/windmill-parser-wasm/pkg/package.json @@ -3,7 +3,7 @@ "collaborators": [ "Ruben Fiszel " ], - "version": "1.114.2", + "version": "1.115.0", "files": [ "windmill_parser_wasm_bg.wasm", "windmill_parser_wasm.js", diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js index b13f54b0bb..77461ca6a7 100644 --- a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js +++ b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js @@ -342,7 +342,7 @@ function __wbg_get_imports() { getInt32Memory0()[arg0 / 4 + 1] = len1; getInt32Memory0()[arg0 / 4 + 0] = ptr1; }; - imports.wbg.__wbg_eval_d9c460c7b796e0b4 = function(arg0, arg1) { + imports.wbg.__wbg_eval_1acc8bc05c9160ad = function(arg0, arg1) { const ret = eval(getStringFromWasm0(arg0, arg1)); return addHeapObject(ret); }; diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm index dc1dbbd940..1710e8f8a5 100644 Binary files a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm and b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm differ diff --git a/backend/parsers/windmill-parser-wasm/tests/wasm.rs b/backend/parsers/windmill-parser-wasm/tests/wasm.rs index 9d207b1e00..787e586da7 100644 --- a/backend/parsers/windmill-parser-wasm/tests/wasm.rs +++ b/backend/parsers/windmill-parser-wasm/tests/wasm.rs @@ -211,3 +211,31 @@ export function main(foo: FooBar) { Ok(()) } + +#[wasm_bindgen_test] +fn test_parse_enum_list() -> anyhow::Result<()> { + let code = " +export function main(foo: (\"foo\" | \"bar\")[]) { + +} +"; + assert_eq!( + parse_deno_signature(code, false)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![Arg { + name: "foo".to_string(), + otyp: None, + typ: Typ::List(Box::new(Typ::Str(Some(vec![ + "foo".to_string(), + "bar".to_string() + ])))), + default: None, + has_default: false + }] + } + ); + + Ok(()) +} diff --git a/frontend/src/lib/common.ts b/frontend/src/lib/common.ts index 6521b83713..b3376b306b 100644 --- a/frontend/src/lib/common.ts +++ b/frontend/src/lib/common.ts @@ -23,7 +23,11 @@ export interface SchemaProperty { enum?: string[] contentEncoding?: 'base64' | 'binary' format?: string - items?: { type?: 'string' | 'number' | 'bytes' | 'object'; contentEncoding?: 'base64' } + items?: { + type?: 'string' | 'number' | 'bytes' | 'object' + contentEncoding?: 'base64' + enum?: string[] + } properties?: { [name: string]: SchemaProperty } required?: string[] } diff --git a/frontend/src/lib/components/ArgEnum.svelte b/frontend/src/lib/components/ArgEnum.svelte new file mode 100644 index 0000000000..5f2ad49728 --- /dev/null +++ b/frontend/src/lib/components/ArgEnum.svelte @@ -0,0 +1,56 @@ + + +{#if !customValue} + +{:else} + +{/if} + +{#if !disabled} + +{/if} diff --git a/frontend/src/lib/components/ArgInput.svelte b/frontend/src/lib/components/ArgInput.svelte index dafbbb4895..4bba2e1e74 100644 --- a/frontend/src/lib/components/ArgInput.svelte +++ b/frontend/src/lib/components/ArgInput.svelte @@ -3,7 +3,7 @@ import type { SchemaProperty } from '$lib/common' import { setInputCat as computeInputCat } from '$lib/utils' - import { DollarSign, Pen, X } from 'lucide-svelte' + import { DollarSign, X } from 'lucide-svelte' import { createEventDispatcher } from 'svelte' import autosize from 'svelte-autosize' import Icon from 'svelte-awesome' @@ -24,6 +24,8 @@ import Toggle from './Toggle.svelte' import type VariableEditor from './VariableEditor.svelte' import { twMerge } from 'tailwind-merge' + import ArgEnum from './ArgEnum.svelte' + import ArrayTypeNarrowing from './ArrayTypeNarrowing.svelte' export let label: string = '' export let value: any @@ -41,7 +43,11 @@ export let disabled = false export let editableSchema = false export let itemsType: - | { type?: 'string' | 'number' | 'bytes' | 'object'; contentEncoding?: 'base64' } + | { + type?: 'string' | 'number' | 'bytes' | 'object' + contentEncoding?: 'base64' + enum?: string[] + } | undefined = undefined export let displayHeader = true export let properties: { [name: string]: SchemaProperty } | undefined = undefined @@ -178,52 +184,47 @@ {/if} {#if editableSchema} -
- - { - seeEditable = !seeEditable - }} - > - Customize property - - +