mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
f1a0070b71
* feat: add graphql support * fix: use custom editor for viewing graphql schema * fix: graphql parser cargo version * fix: add graphql where missing
116 lines
3.0 KiB
TypeScript
116 lines
3.0 KiB
TypeScript
import { get } from 'svelte/store'
|
|
import type { Schema, SupportedLanguage } from './common'
|
|
import { FlowService, Script, ScriptService } from './gen'
|
|
import { workspaceStore, hubScripts } from './stores'
|
|
|
|
export function scriptLangToEditorLang(lang: Script.language) {
|
|
if (lang == 'deno') {
|
|
return 'typescript'
|
|
} else if (lang == 'bun') {
|
|
return 'typescript'
|
|
} else if (lang == 'nativets') {
|
|
return 'typescript'
|
|
// } else if (lang == 'graphql') {
|
|
// return 'typescript'
|
|
} else if (lang == 'postgresql') {
|
|
return 'sql'
|
|
} else if (lang == 'mysql') {
|
|
return 'sql'
|
|
} else if (lang == 'bigquery') {
|
|
return 'sql'
|
|
} else if (lang == 'snowflake') {
|
|
return 'sql'
|
|
} else if (lang == 'python3') {
|
|
return 'python'
|
|
} else if (lang == 'bash') {
|
|
return 'shell'
|
|
} else if (lang == 'graphql') {
|
|
return 'graphql'
|
|
} else {
|
|
return lang
|
|
}
|
|
}
|
|
|
|
export async function loadSchemaFlow(path: string): Promise<Schema> {
|
|
const flow = await FlowService.getFlowByPath({
|
|
workspace: get(workspaceStore)!,
|
|
path: path ?? ''
|
|
})
|
|
return flow.schema as any
|
|
}
|
|
|
|
export function scriptPathToHref(path: string): string {
|
|
if (path.startsWith('hub/')) {
|
|
return 'https://hub.windmill.dev/from_version/' + path.substring(4)
|
|
} else {
|
|
return `/scripts/get/${path}?workspace=${get(workspaceStore)}`
|
|
}
|
|
}
|
|
|
|
export async function getScriptByPath(path: string): Promise<{
|
|
content: string
|
|
language: SupportedLanguage
|
|
schema: any
|
|
description: string
|
|
tag: string | undefined
|
|
concurrent_limit: number[] | undefined
|
|
concurrency_time_window_s: number[] | undefined
|
|
}> {
|
|
if (path.startsWith('hub/')) {
|
|
const { content, language, schema } = await ScriptService.getHubScriptByPath({ path })
|
|
|
|
return {
|
|
content,
|
|
language: language as SupportedLanguage,
|
|
schema,
|
|
description: '',
|
|
tag: undefined,
|
|
concurrent_limit: undefined,
|
|
concurrency_time_window_s: undefined
|
|
}
|
|
} else {
|
|
const script = await ScriptService.getScriptByPath({
|
|
workspace: get(workspaceStore)!,
|
|
path: path ?? ''
|
|
})
|
|
return {
|
|
content: script.content,
|
|
language: script.language,
|
|
schema: script.schema,
|
|
description: script.description,
|
|
tag: script.tag,
|
|
concurrent_limit: script.concurrent_limit,
|
|
concurrency_time_window_s: script.concurrency_time_window_s
|
|
}
|
|
}
|
|
}
|
|
|
|
export async function getLatestHashForScript(path: string): Promise<string> {
|
|
const script = await ScriptService.getScriptByPath({
|
|
workspace: get(workspaceStore)!,
|
|
path: path ?? ''
|
|
})
|
|
return script.hash
|
|
}
|
|
|
|
export async function loadHubScripts() {
|
|
try {
|
|
const scripts = (await ScriptService.listHubScripts()).asks ?? []
|
|
const processed = scripts
|
|
.map((x) => ({
|
|
path: `hub/${x.id}/${x.app}/${x.summary.toLowerCase().replaceAll(/\s+/g, '_')}`,
|
|
summary: `${x.summary} (${x.app})`,
|
|
approved: x.approved,
|
|
kind: x.kind,
|
|
app: x.app,
|
|
views: x.views,
|
|
votes: x.votes,
|
|
ask_id: x.ask_id
|
|
}))
|
|
.sort((a, b) => b.views - a.views)
|
|
hubScripts.set(processed)
|
|
} catch {
|
|
console.error('Hub is not available')
|
|
}
|
|
}
|