From ecc5d56232c7467c11027da6854bc3501e3c0f7d Mon Sep 17 00:00:00 2001 From: centdix Date: Tue, 6 May 2025 17:09:52 +0200 Subject: [PATCH] working package --- frontend/windmill-infer-args/src/index.ts | 265 +++++++++--------- frontend/windmill-infer-args/src/types.ts | 7 +- .../src/wasm-declarations.d.ts | 2 +- frontend/windmill-infer-args/tsup.config.ts | 1 - 4 files changed, 135 insertions(+), 140 deletions(-) diff --git a/frontend/windmill-infer-args/src/index.ts b/frontend/windmill-infer-args/src/index.ts index a71b85188d..132cbc1eb3 100644 --- a/frontend/windmill-infer-args/src/index.ts +++ b/frontend/windmill-infer-args/src/index.ts @@ -27,20 +27,23 @@ import initNuParser, { parse_nu } from 'windmill-parser-wasm-nu' import initJavaParser, { parse_java } from 'windmill-parser-wasm-java' // Import WASM URLs -import wasmUrlTs from 'windmill-parser-wasm-ts/windmill_parser_wasm_bg.wasm' -import wasmUrlRegex from 'windmill-parser-wasm-regex/windmill_parser_wasm_bg.wasm' -import wasmUrlPy from 'windmill-parser-wasm-py/windmill_parser_wasm_bg.wasm' -import wasmUrlGo from 'windmill-parser-wasm-go/windmill_parser_wasm_bg.wasm' -import wasmUrlPhp from 'windmill-parser-wasm-php/windmill_parser_wasm_bg.wasm' -import wasmUrlRust from 'windmill-parser-wasm-rust/windmill_parser_wasm_bg.wasm' -import wasmUrlYaml from 'windmill-parser-wasm-yaml/windmill_parser_wasm_bg.wasm' -import wasmUrlCSharp from 'windmill-parser-wasm-csharp/windmill_parser_wasm_bg.wasm' -import wasmUrlNu from 'windmill-parser-wasm-nu/windmill_parser_wasm_bg.wasm' -import wasmUrlJava from 'windmill-parser-wasm-java/windmill_parser_wasm_bg.wasm' +import wasmUrlTs from 'windmill-parser-wasm-ts/windmill_parser_wasm_bg.wasm?url' +import wasmUrlRegex from 'windmill-parser-wasm-regex/windmill_parser_wasm_bg.wasm?url' +import wasmUrlPy from 'windmill-parser-wasm-py/windmill_parser_wasm_bg.wasm?url' +import wasmUrlGo from 'windmill-parser-wasm-go/windmill_parser_wasm_bg.wasm?url' +import wasmUrlPhp from 'windmill-parser-wasm-php/windmill_parser_wasm_bg.wasm?url' +import wasmUrlRust from 'windmill-parser-wasm-rust/windmill_parser_wasm_bg.wasm?url' +import wasmUrlYaml from 'windmill-parser-wasm-yaml/windmill_parser_wasm_bg.wasm?url' +import wasmUrlCSharp from 'windmill-parser-wasm-csharp/windmill_parser_wasm_bg.wasm?url' +import wasmUrlNu from 'windmill-parser-wasm-nu/windmill_parser_wasm_bg.wasm?url' +import wasmUrlJava from 'windmill-parser-wasm-java/windmill_parser_wasm_bg.wasm?url' -// Helper initialization functions -async function initWasmTs(): Promise { - await initTsParser(wasmUrlTs) +let initializeTsPromise: Promise | undefined = undefined +export async function initWasmTs() { + if (initializeTsPromise == undefined) { + initializeTsPromise = initTsParser(wasmUrlTs) + } + await initializeTsPromise } async function initWasmRegex(): Promise { @@ -267,138 +270,128 @@ export async function inferArgs( no_main_func: boolean | null has_preprocessor: boolean | null } | null> { - console.log('inferArgs', language, code, schema, mainOverride) - let inferedSchema: MainArgSignature | undefined = undefined + let inferedSchema: MainArgSignature if (code == '') { - if (code == '') { - code = ' ' - } + code = ' ' + } - let inlineDBResource: string | undefined = undefined - if ( - ['postgresql', 'mysql', 'bigquery', 'snowflake', 'mssql', 'oracledb'].includes(language ?? '') - ) { - await initWasmRegex() - inlineDBResource = parse_db_resource(code) - } - if (language == 'python3') { - await initWasmPython() - inferedSchema = JSON.parse(parse_python(code, mainOverride)) - } else if (language == 'deno') { - await initWasmTs() - inferedSchema = JSON.parse(parse_deno(code, mainOverride)) - } else if (language == 'nativets') { - await initWasmTs() - inferedSchema = JSON.parse(parse_deno(code, mainOverride)) - } else if (language == 'bun' || language == 'bunnative') { - await initWasmTs() - inferedSchema = JSON.parse(parse_deno(code, mainOverride)) - } else if (language == 'postgresql') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_sql(code)) - if (inlineDBResource === undefined && inferedSchema) { - inferedSchema.args = [ - { - name: 'database', - typ: { resource: 'postgresql' }, - has_default: false - }, - ...inferedSchema.args - ] - } - } else if (language == 'mysql') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_mysql(code)) as MainArgSignature - if (inlineDBResource === undefined && inferedSchema) { - inferedSchema.args = [ - { name: 'database', typ: { resource: 'mysql' }, has_default: false }, - ...inferedSchema.args - ] - } - } else if (language == 'bigquery') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_bigquery(code)) as MainArgSignature - if (inlineDBResource === undefined && inferedSchema) { - inferedSchema.args = [ - { name: 'database', typ: { resource: 'bigquery' }, has_default: false }, - ...inferedSchema.args - ] - } - } else if (language == 'oracledb') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_oracledb(code)) as MainArgSignature - if (inlineDBResource === undefined && inferedSchema) { - inferedSchema.args = [ - { name: 'database', typ: { resource: 'oracledb' }, has_default: false }, - ...inferedSchema.args - ] - } - } else if (language == 'snowflake') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_snowflake(code)) as MainArgSignature - if (inlineDBResource === undefined && inferedSchema) { - inferedSchema.args = [ - { name: 'database', typ: { resource: 'snowflake' }, has_default: false }, - ...inferedSchema.args - ] - } - } else if (language == 'mssql') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_mssql(code)) as MainArgSignature - if (inlineDBResource === undefined && inferedSchema) { - inferedSchema.args = [ - { name: 'database', typ: { resource: 'ms_sql_server' }, has_default: false }, - ...inferedSchema.args - ] - } - } else if (language == 'graphql') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_graphql(code)) as MainArgSignature + let inlineDBResource: string | undefined = undefined + if ( + ['postgresql', 'mysql', 'bigquery', 'snowflake', 'mssql', 'oracledb'].includes(language ?? '') + ) { + await initWasmRegex() + inlineDBResource = parse_db_resource(code) + } + if (language == 'python3') { + await initWasmPython() + inferedSchema = JSON.parse(parse_python(code, mainOverride)) + } else if (language == 'deno') { + await initWasmTs() + inferedSchema = JSON.parse(parse_deno(code, mainOverride)) + } else if (language == 'nativets') { + await initWasmTs() + inferedSchema = JSON.parse(parse_deno(code, mainOverride)) + } else if (language == 'bun' || language == 'bunnative') { + await initWasmTs() + inferedSchema = JSON.parse(parse_deno(code, mainOverride)) + } else if (language == 'postgresql') { + inferedSchema = JSON.parse(parse_sql(code)) + if (inlineDBResource === undefined) { inferedSchema.args = [ - { name: 'api', typ: { resource: 'graphql' }, has_default: false }, + { + name: 'database', + typ: { resource: 'postgresql' }, + has_default: false + }, ...inferedSchema.args ] - } else if (language == 'go') { - await initWasmGo() - inferedSchema = JSON.parse(parse_go(code)) - } else if (language == 'bash') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_bash(code)) - } else if (language == 'powershell') { - await initWasmRegex() - inferedSchema = JSON.parse(parse_powershell(code)) - } else if (language == 'php') { - await initWasmPhp() - inferedSchema = JSON.parse(parse_php(code)) - } else if (language == 'rust') { - await initWasmRust() - inferedSchema = JSON.parse(parse_rust(code)) - } else if (language == 'ansible') { - await initWasmYaml() - inferedSchema = JSON.parse(parse_ansible(code)) - } else if (language == 'csharp') { - await initWasmCSharp() - inferedSchema = JSON.parse(parse_csharp(code)) - } else if (language == 'nu') { - await initWasmNu() - inferedSchema = JSON.parse(parse_nu(code)) - } else if (language == 'java') { - await initWasmJava() - inferedSchema = JSON.parse(parse_java(code)) - // for related places search: ADD_NEW_LANG - } else { - return null } - if (inferedSchema && inferedSchema.type == 'Invalid') { - throw new Error(inferedSchema.error) + } else if (language == 'mysql') { + inferedSchema = JSON.parse(parse_mysql(code)) + if (inlineDBResource === undefined) { + inferedSchema.args = [ + { name: 'database', typ: { resource: 'mysql' }, has_default: false }, + ...inferedSchema.args + ] } + } else if (language == 'bigquery') { + inferedSchema = JSON.parse(parse_bigquery(code)) + if (inlineDBResource === undefined) { + inferedSchema.args = [ + { name: 'database', typ: { resource: 'bigquery' }, has_default: false }, + ...inferedSchema.args + ] + } + } else if (language == 'oracledb') { + inferedSchema = JSON.parse(parse_oracledb(code)) + if (inlineDBResource === undefined) { + inferedSchema.args = [ + { name: 'database', typ: { resource: 'oracledb' }, has_default: false }, + ...inferedSchema.args + ] + } + } else if (language == 'snowflake') { + inferedSchema = JSON.parse(parse_snowflake(code)) + if (inlineDBResource === undefined) { + inferedSchema.args = [ + { name: 'database', typ: { resource: 'snowflake' }, has_default: false }, + ...inferedSchema.args + ] + } + } else if (language == 'mssql') { + inferedSchema = JSON.parse(parse_mssql(code)) + if (inlineDBResource === undefined) { + inferedSchema.args = [ + { name: 'database', typ: { resource: 'ms_sql_server' }, has_default: false }, + ...inferedSchema.args + ] + } + } else if (language == 'graphql') { + await initWasmRegex() + inferedSchema = JSON.parse(parse_graphql(code)) + inferedSchema.args = [ + { name: 'api', typ: { resource: 'graphql' }, has_default: false }, + ...inferedSchema.args + ] + } else if (language == 'go') { + await initWasmGo() + inferedSchema = JSON.parse(parse_go(code)) + } else if (language == 'bash') { + await initWasmRegex() + inferedSchema = JSON.parse(parse_bash(code)) + } else if (language == 'powershell') { + await initWasmRegex() + inferedSchema = JSON.parse(parse_powershell(code)) + } else if (language == 'php') { + await initWasmPhp() + inferedSchema = JSON.parse(parse_php(code)) + } else if (language == 'rust') { + await initWasmRust() + inferedSchema = JSON.parse(parse_rust(code)) + } else if (language == 'ansible') { + await initWasmYaml() + inferedSchema = JSON.parse(parse_ansible(code)) + } else if (language == 'csharp') { + await initWasmCSharp() + inferedSchema = JSON.parse(parse_csharp(code)) + } else if (language == 'nu') { + await initWasmNu() + inferedSchema = JSON.parse(parse_nu(code)) + } else if (language == 'java') { + await initWasmJava() + inferedSchema = JSON.parse(parse_java(code)) + // for related places search: ADD_NEW_LANG + } else { + return null + } + if (inferedSchema.type == 'Invalid') { + throw new Error(inferedSchema.error) } schema.required = [] const oldProperties = JSON.parse(JSON.stringify(schema.properties)) schema.properties = {} - console.log('schema', schema.properties) - for (const arg of inferedSchema?.args ?? []) { + for (const arg of inferedSchema.args) { if (!(arg.name in oldProperties)) { schema.properties[arg.name] = { description: '', type: '' } } else { @@ -414,10 +407,8 @@ export async function inferArgs( schema.required.push(arg.name) } } - console.log('schema', schema.properties) - return { - no_main_func: inferedSchema?.no_main_func ?? false, - has_preprocessor: inferedSchema?.has_preprocessor ?? false + no_main_func: inferedSchema.no_main_func, + has_preprocessor: inferedSchema.has_preprocessor } } diff --git a/frontend/windmill-infer-args/src/types.ts b/frontend/windmill-infer-args/src/types.ts index afd0c21b09..e189a40159 100644 --- a/frontend/windmill-infer-args/src/types.ts +++ b/frontend/windmill-infer-args/src/types.ts @@ -41,7 +41,12 @@ export type SchemaOneOf = { } export type Schema = { - properties: Record + $schema: string | undefined + type: string + properties: { + [name: string]: SchemaProperty + } + order?: string[] required: string[] } diff --git a/frontend/windmill-infer-args/src/wasm-declarations.d.ts b/frontend/windmill-infer-args/src/wasm-declarations.d.ts index aa8a2a4aea..0fc50aec23 100644 --- a/frontend/windmill-infer-args/src/wasm-declarations.d.ts +++ b/frontend/windmill-infer-args/src/wasm-declarations.d.ts @@ -1,5 +1,5 @@ // Declaration for wasm imports -declare module '*.wasm' { +declare module '*.wasm?url' { const content: string export default content } diff --git a/frontend/windmill-infer-args/tsup.config.ts b/frontend/windmill-infer-args/tsup.config.ts index 0877580d03..6a271b5a7a 100644 --- a/frontend/windmill-infer-args/tsup.config.ts +++ b/frontend/windmill-infer-args/tsup.config.ts @@ -5,7 +5,6 @@ export default defineConfig({ format: ['cjs', 'esm'], dts: true, clean: true, - treeshake: false, outExtension({ format }) { return { js: format === 'cjs' ? '.js' : '.mjs'