internal: rolldown vite (#6584)

This commit is contained in:
Ruben Fiszel
2025-09-11 16:12:36 +00:00
committed by GitHub
parent 2740f4067f
commit 31b2dc295c
68 changed files with 767 additions and 1054 deletions
+5 -4
View File
@@ -16,11 +16,12 @@ jobs:
runs-on: ubicloud-standard-8
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v5
with:
node-version: 18
node-version: 24
cache: "npm"
cache-dependency-path: "frontend/package-lock.json"
- name: "npm check"
timeout-minutes: 5
run:
cd frontend && npm ci && npm run generate-backend-client && npm run
run: cd frontend && npm ci && npm run generate-backend-client && npm run
check
+506 -799
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -36,7 +36,6 @@
"@types/vscode": "^1.83.5",
"@typescript-eslint/eslint-plugin": "^5.59.8",
"@typescript-eslint/parser": "^5.60.0",
"@windmill-labs/esbuild-import-meta-url-plugin": "0.0.0-semantic-release",
"@zerodevx/svelte-toast": "^0.9.6",
"autoprefixer": "^10.4.13",
"cssnano": "^6.0.1",
@@ -65,7 +64,7 @@
"tar": "^7.4.3",
"tslib": "^2.6.1",
"typescript": "^5.5.0",
"vite": "^7.1.5",
"vite": "npm:rolldown-vite@latest",
"vite-plugin-mkcert": "^1.17.5",
"yootils": "^0.3.1"
},
+1 -1
View File
@@ -340,7 +340,7 @@
let setCodeDisabled = false
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function setNewValueFromCode(nvalue: any) {
if (!deepEqual(nvalue, value)) {
value = nvalue
@@ -30,8 +30,8 @@
}
let showTooltip = false
let timeout: NodeJS.Timeout | undefined = undefined
let inTimeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let inTimeout: number | undefined = undefined
function open() {
clearTimeout(timeout)
+1 -1
View File
@@ -139,7 +139,7 @@
let useLock = $state(false)
let lockChanges = false
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let loadingCodebaseButton = $state(false)
let lastCommandId = ''
@@ -123,7 +123,7 @@
let lastArgs = $state.snapshot(otherArgs)
let timeout: NodeJS.Timeout | undefined = $state()
let timeout: number | undefined = $state()
let nargs = $state($state.snapshot(otherArgs))
$effect(() => {
otherArgs
+7 -71
View File
@@ -1,72 +1,6 @@
<script module>
import '@codingame/monaco-vscode-standalone-languages'
import '@codingame/monaco-vscode-standalone-typescript-language-features'
import processStdContent from '$lib/process.d.ts.txt?raw'
languages.typescript.typescriptDefaults.addExtraLib(processStdContent, 'process.d.ts')
languages.typescript.typescriptDefaults.setModeConfiguration({
completionItems: true,
hovers: true,
documentSymbols: true,
definitions: true,
references: true,
documentHighlights: true,
rename: true,
diagnostics: true,
documentRangeFormattingEdits: true,
signatureHelp: true,
onTypeFormattingEdits: true,
codeActions: true,
inlayHints: true
})
// languages.typescript.javascriptDefaults.setEagerModelSync(true)
languages.typescript.typescriptDefaults.setEagerModelSync(true)
// languages.typescript.javascriptDefaults.setDiagnosticsOptions({
// noSemanticValidation: false,
// noSyntaxValidation: false,
// noSuggestionDiagnostics: false,
// diagnosticCodesToIgnore: [1108]
// })
languages.typescript.typescriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false,
noSuggestionDiagnostics: false,
diagnosticCodesToIgnore: [1108, 7006, 7034, 7019, 7005]
})
languages.typescript.typescriptDefaults.setCompilerOptions({
target: languages.typescript.ScriptTarget.Latest,
allowNonTsExtensions: true,
noSemanticValidation: false,
noSyntaxValidation: false,
completionItems: true,
hovers: true,
documentSymbols: true,
definitions: true,
references: true,
documentHighlights: true,
rename: true,
diagnostics: true,
documentRangeFormattingEdits: true,
signatureHelp: true,
onTypeFormattingEdits: true,
codeActions: true,
inlayHints: true,
checkJs: true,
allowJs: true,
noUnusedLocals: true,
strict: true,
noLib: false,
allowImportingTsExtensions: true,
allowSyntheticDefaultImports: true,
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs,
jsx: languages.typescript.JsxEmit.React
})
</script>
<script lang="ts">
@@ -156,6 +90,7 @@
import type { Selection } from 'monaco-editor'
import { getDbSchemas } from './apps/components/display/dbtable/utils'
import { PYTHON_PREPROCESSOR_MODULE_CODE, TS_PREPROCESSOR_MODULE_CODE } from '$lib/script_helpers'
import { setMonacoTypescriptOptions } from './monacoLanguagesOptions'
// import EditorTheme from './EditorTheme.svelte'
let divEl: HTMLDivElement | null = $state(null)
@@ -237,7 +172,7 @@
let websockets: WebSocket[] = []
let languageClients: MonacoLanguageClient[] = []
let websocketInterval: NodeJS.Timeout | undefined
let websocketInterval: number | undefined
let lastWsAttempt: Date = new Date()
let nbWsAttempt = 0
let disposeMethod: (() => void) | undefined
@@ -1128,7 +1063,7 @@
}
}
let pathTimeout: NodeJS.Timeout | undefined = undefined
let pathTimeout: number | undefined = undefined
function getHostname() {
return BROWSER ? window.location.protocol + '//' + window.location.host : 'SSR'
@@ -1255,8 +1190,9 @@
}
}
let timeoutModel: NodeJS.Timeout | undefined = undefined
let timeoutModel: number | undefined = undefined
async function loadMonaco() {
setMonacoTypescriptOptions()
console.log('path', uri)
try {
@@ -1328,7 +1264,7 @@
// updateEditorKeybindingsMode(editor, 'vim', undefined)
let ataModel: NodeJS.Timeout | undefined = undefined
let ataModel: number | undefined = undefined
editor?.onDidChangeModelContent((event) => {
timeoutModel && clearTimeout(timeoutModel)
@@ -1605,7 +1541,7 @@
let aiChatInlineWidget: AIChatInlineWidget | null = $state(null)
let loadTimeout: NodeJS.Timeout | undefined = undefined
let loadTimeout: number | undefined = undefined
onMount(async () => {
if (BROWSER) {
if (loadAsync) {
@@ -18,7 +18,7 @@
let startedAt: number | undefined = undefined
let busy: boolean = false
let interval: NodeJS.Timeout | undefined
let interval: number | undefined
// Detect when execution of job started
$: if (
!busy &&
@@ -526,7 +526,7 @@
}
}
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function saveSessionDraft() {
timeout && clearTimeout(timeout)
@@ -227,7 +227,7 @@
)
let retry_selected = $state('')
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let expandedSubflows: Record<string, FlowModule[]> = $state({})
@@ -40,7 +40,7 @@
}
let cachedArgs: Record<string, any> = {}
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function refreshInterval() {
timeout && clearTimeout(timeout)
timeout = setTimeout(async () => {
+1 -1
View File
@@ -92,7 +92,7 @@
let lastStartedAt: number = Date.now()
let currentId: string | undefined = $state(undefined)
let noPingTimeout: NodeJS.Timeout | undefined = undefined
let noPingTimeout: number | undefined = undefined
let lastNoLogs = $state(noLogs)
let lastCompletedJobId = $state<string | undefined>(undefined)
@@ -53,7 +53,7 @@
}
}
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function debouncedUpdate() {
timeout && clearTimeout(timeout)
timeout = setTimeout(updateValue, 500)
+1 -1
View File
@@ -210,7 +210,7 @@
validateName(meta) && validatePath(path, kind)
}
let validateTimeout: NodeJS.Timeout | undefined = undefined
let validateTimeout: number | undefined = undefined
async function validatePath(path: string, kind: PathKind): Promise<void> {
if (validateTimeout) {
+2 -2
View File
@@ -56,8 +56,8 @@
}
let showTooltip = $state(false)
let timeout: NodeJS.Timeout | undefined = undefined
let inTimeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let inTimeout: number | undefined = undefined
function open() {
clearTimeout(timeout)
@@ -8,7 +8,7 @@
minimal = false
}: { jobId: string; workspaceId?: string | undefined; minimal?: boolean } = $props()
let queuePositionInterval: NodeJS.Timeout | undefined
let queuePositionInterval: number | undefined
let queueState = $state(undefined) as undefined | { position?: number }
let fetchingQueuePosition = false
@@ -17,7 +17,7 @@
let scheduledFor = $state(undefined) as undefined | number
let scheduledForTimeout: NodeJS.Timeout | undefined
let scheduledForTimeout: number | undefined
$effect(() => {
if (jobId && workspace) {
clearTimeout(scheduledForTimeout)
+1 -1
View File
@@ -101,7 +101,7 @@
}
})
let debounced: NodeJS.Timeout | undefined = undefined
let debounced: number | undefined = undefined
function onArgsChange(args: any) {
try {
@@ -124,7 +124,7 @@
let filter = $state('')
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let firstLoad = true
let secondaryStorageNames = usePromise(
@@ -320,7 +320,7 @@
let loadingSave = $state(false)
let loadingDraft = $state(false)
let timeout2: NodeJS.Timeout | undefined = undefined
let timeout2: number | undefined = undefined
function encodeScriptState(script: NewScript) {
untrack(() => timeout2 && clearTimeout(timeout2))
timeout2 = setTimeout(() => {
@@ -334,7 +334,7 @@
}, 500)
}
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function saveSessionDraft() {
timeout && clearTimeout(timeout)
timeout = setTimeout(() => {
@@ -55,7 +55,7 @@
type ByWorkerGroup = Record<string, ByHostname>
type ByMode = Record<string, ByWorkerGroup>
let timeout: NodeJS.Timeout | undefined = $state(undefined)
let timeout: number | undefined = $state(undefined)
let allLogs: ByMode | undefined = $state(undefined)
let manualPicker: ManuelDatePicker | undefined = $state(undefined)
@@ -298,7 +298,7 @@
let logs: any = $state()
let debounceTimeout: NodeJS.Timeout | undefined = undefined
let debounceTimeout: number | undefined = undefined
const debouncePeriod: number = 400
let loadingLogs = $state(false)
let loadingLogCounts = $state(false)
+14 -68
View File
@@ -7,51 +7,6 @@
import '@codingame/monaco-vscode-standalone-css-language-features'
import '@codingame/monaco-vscode-standalone-typescript-language-features'
import '@codingame/monaco-vscode-standalone-html-language-features'
import {
editor as meditor,
KeyCode,
KeyMod,
Uri as mUri,
languages,
type IRange,
type IDisposable,
type IPosition
} from 'monaco-editor'
languages.typescript.javascriptDefaults.setCompilerOptions({
target: languages.typescript.ScriptTarget.Latest,
allowNonTsExtensions: true,
noSemanticValidation: false,
noLib: true,
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
})
function setDiagnosticsOptions() {
languages.typescript.javascriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false,
noSuggestionDiagnostics: false,
diagnosticCodesToIgnore: [1108]
})
}
setDiagnosticsOptions()
languages.json.jsonDefaults.setDiagnosticsOptions({
validate: true,
allowComments: false,
schemas: [],
enableSchemaRequest: true
})
languages.json.jsonDefaults.setModeConfiguration({
documentRangeFormattingEdits: false,
documentFormattingEdits: true,
hovers: true,
completionItems: true,
documentSymbols: true,
tokens: true,
colors: true,
foldingRanges: true,
selectionRanges: true,
diagnostics: true
})
</script>
<script lang="ts">
@@ -83,6 +38,17 @@
import FakeMonacoPlaceHolder from './FakeMonacoPlaceHolder.svelte'
import { editorPositionMap } from '$lib/utils'
import { langToExt } from '$lib/editorLangUtils'
import {
editor as meditor,
KeyCode,
KeyMod,
Uri as mUri,
languages,
type IRange,
type IDisposable,
type IPosition
} from 'monaco-editor'
import { setMonacoJavascriptOptions, setMonacoJsonOptions } from './monacoLanguagesOptions'
// import { createConfiguredEditor } from 'vscode/monaco'
// import type { IStandaloneCodeEditor } from 'vscode/vscode/vs/editor/standalone/browser/standaloneCodeEditor'
@@ -334,31 +300,11 @@
let fontSize = $derived(small ? 12 : 14)
async function loadMonaco() {
setMonacoJsonOptions()
setMonacoJavascriptOptions()
await initializeVscode()
initialized = true
// if (lang === 'javascript') {
// languages.typescript.javascriptDefaults.setCompilerOptions({
// target: languages.typescript.ScriptTarget.Latest,
// allowNonTsExtensions: true,
// noSemanticValidation: false,
// noLib: true,
// moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
// })
// languages.typescript.javascriptDefaults.setDiagnosticsOptions({
// noSemanticValidation: false,
// noSyntaxValidation: false,
// noSuggestionDiagnostics: false,
// diagnosticCodesToIgnore: [1108]
// })
// } else if (lang === 'json') {
// languages.json.jsonDefaults.setDiagnosticsOptions({
// validate: true,
// allowComments: false,
// schemas: [],
// enableSchemaRequest: true
// })
// }
try {
model = meditor.createModel(code ?? '', lang, mUri.parse(uri))
} catch (err) {
@@ -413,7 +359,7 @@
}
keepModelAroundToAvoidDisposalOfWorkers()
let timeoutModel: NodeJS.Timeout | undefined = undefined
let timeoutModel: number | undefined = undefined
editor.onDidChangeModelContent((event) => {
suggestion = ''
timeoutModel && clearTimeout(timeoutModel)
@@ -1,19 +1,5 @@
<script module>
import '@codingame/monaco-vscode-standalone-typescript-language-features'
languages.typescript.javascriptDefaults.setCompilerOptions({
target: languages.typescript.ScriptTarget.Latest,
allowNonTsExtensions: true,
noSemanticValidation: false,
noLib: true,
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
})
languages.typescript.javascriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false,
noSuggestionDiagnostics: false,
diagnosticCodesToIgnore: [1108]
})
</script>
<script lang="ts">
@@ -39,6 +25,7 @@
import { initializeVscode } from './vscode'
import EditorTheme from './EditorTheme.svelte'
import FakeMonacoPlaceHolder from './FakeMonacoPlaceHolder.svelte'
import { setMonacoJsonOptions } from './monacoLanguagesOptions'
export const conf = {
wordPattern:
@@ -433,12 +420,11 @@
let initialized = false
let jsLoader: NodeJS.Timeout | undefined = undefined
let timeoutModel: NodeJS.Timeout | undefined = undefined
let jsLoader: number | undefined = undefined
let timeoutModel: number | undefined = undefined
async function loadMonaco() {
console.log('init template')
setMonacoJsonOptions()
await initializeVscode('templateEditor')
console.log('initialized')
initialized = true
languages.register({ id: 'template' })
@@ -612,7 +598,7 @@
}
let mounted = false
let loadTimeout: NodeJS.Timeout | undefined = undefined
let loadTimeout: number | undefined = undefined
onMount(async () => {
try {
if (BROWSER) {
@@ -45,7 +45,7 @@
let loadingPendingJobs = $state(false)
let isCancelingJob = $state(false)
let prompt = $derived(
`$-${working_directory === '/' ? '/' : working_directory.split('/').at(-1)} `
`$-${working_directory === '/' ? '/' : working_directory.split('/').pop()} `
)
let codeObj: { language: SupportedLanguage; content: string } | undefined = $state(undefined)
function getNewWorkingDirectoryPath(currentDir: string, newPath: string): string {
@@ -30,7 +30,7 @@
let loading = $state(false)
let visible = $state(false)
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let tagsToWorkerExists = $state<Record<string, boolean> | undefined>(undefined)
onMount(() => {
@@ -13,6 +13,7 @@
import { twMerge } from 'tailwind-merge'
import type { Output } from '../../rx'
import ResolveNavbarItemPath from './ResolveNavbarItemPath.svelte'
import { urlParamsToObject } from '$lib/utils'
interface Props {
navbarItem: NavbarItem
@@ -83,7 +84,7 @@
const hash = url.hash
replaceStateFn?.(`${window.location.pathname}${queryParams}${hash}`)
$worldStore.outputsById['ctx'].query.set(
Object.fromEntries(new URLSearchParams(queryParams).entries())
urlParamsToObject(new URLSearchParams(queryParams))
)
$worldStore.outputsById['ctx'].hash.set(hash.substring(1))
@@ -94,7 +94,7 @@
initConfig(components['dbexplorercomponent'].initialData.configuration, configuration)
)
let timeoutInput: NodeJS.Timeout | undefined = undefined
let timeoutInput: number | undefined = undefined
function computeInput(columnDefs: any, whereClause: string | undefined, resource: any) {
if (timeoutInput) {
@@ -318,7 +318,7 @@
})
let lastTable: string | undefined = $state(undefined)
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function isSubset(subset: Record<string, any>, superset: Record<string, any>) {
return Object.keys(subset).every((key) => {
@@ -24,7 +24,7 @@
...rest
}: Props = $props()
let timer: NodeJS.Timeout
let timer: number
let inputElement: HTMLInputElement | null = $state(null)
function debounce(event: KeyboardEvent): void {
@@ -71,7 +71,7 @@
const { worldStore, state: stateStore, mode } = getContext<AppViewerContext>('AppViewerContext')
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let firstDebounce = true
const debounce_ms = 50
@@ -133,7 +133,7 @@
let args: Record<string, any> | undefined = $state(undefined)
let runnableInputValues: Record<string, any> = $state({})
let executeTimeout: NodeJS.Timeout | undefined = undefined
let executeTimeout: number | undefined = undefined
function setDebouncedExecute() {
executeTimeout && clearTimeout(executeTimeout)
@@ -27,7 +27,13 @@
import TabContent from '$lib/components/common/tabs/TabContent.svelte'
import Tabs from '$lib/components/common/tabs/TabsV2.svelte'
import { userStore, workspaceStore } from '$lib/stores'
import { classNames, encodeState, getModifierKey, sendUserToast } from '$lib/utils'
import {
classNames,
encodeState,
getModifierKey,
sendUserToast,
urlParamsToObject
} from '$lib/utils'
import AppPreview from './AppPreview.svelte'
import ComponentList from './componentsPanel/ComponentList.svelte'
import ContextPanel from './contextPanel/ContextPanel.svelte'
@@ -115,7 +121,7 @@
groups: $userStore?.groups,
username: $userStore?.username,
name: $userStore?.name,
query: Object.fromEntries(new URL(window.location.href).searchParams.entries()),
query: urlParamsToObject(new URL(window.location.href).searchParams),
hash: window.location.hash.substring(1),
workspace: $workspaceStore,
mode: 'editor',
@@ -212,7 +218,7 @@
stylePanel: () => StylePanel
})
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
function saveFrontendDraft() {
timeout && clearTimeout(timeout)
@@ -475,7 +481,7 @@
}
}
let runnableJobEnterTimeout: NodeJS.Timeout | undefined = $state(undefined)
let runnableJobEnterTimeout: number | undefined = $state(undefined)
let stillInJobEnter = $state(false)
let storedLeftPanelSize = 0
let storedRightPanelSize = 0
@@ -796,7 +802,7 @@
untrack(() => setGridPanelSize($componentActive))
})
$effect(() => {
$connectingInput.opened, untrack(() => updatePannelInConnecting())
;($connectingInput.opened, untrack(() => updatePannelInConnecting()))
})
$effect(() => {
forceDeactivatePanzoom = isModifierKeyPressed && handMode
@@ -946,7 +946,7 @@
customPath
})
}
let validateTimeout: NodeJS.Timeout | undefined = undefined
let validateTimeout: number | undefined = undefined
async function validateCustomPath(customPath: string): Promise<void> {
customPathError = ''
if (validateTimeout) {
@@ -8,10 +8,10 @@
getContext<AppViewerContext>('AppViewerContext')
const appEditorContext = getContext<AppEditorContext>('AppEditorContext')
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let shouldRefresh = false
let firstLoad = false
let progressTimer: NodeJS.Timeout | undefined = undefined
let progressTimer: number | undefined = undefined
$: !firstLoad &&
canInitializeAll($initialized?.initializedComponents, $app) &&
@@ -1,5 +1,5 @@
<script lang="ts" module>
let outTimeout: NodeJS.Timeout | undefined = undefined
let outTimeout: number | undefined = undefined
</script>
<script lang="ts">
@@ -189,7 +189,7 @@
}
})
let dndTimeout: NodeJS.Timeout | undefined = $state(undefined)
let dndTimeout: number | undefined = $state(undefined)
let ccDrawer: Drawer | undefined = $state()
</script>
@@ -177,7 +177,7 @@
}
}
let templateChangeTimeout: NodeJS.Timeout | undefined = undefined
let templateChangeTimeout: number | undefined = undefined
function onTemplateChange(e: CustomEvent<{ code: string }>) {
const currentItem = item
if (currentItem.data.componentInput?.type === 'templatev2') {
@@ -247,7 +247,7 @@
let sign = { x: 0, y: 0 }
let vel = { x: 0, y: 0 }
let intervalId: NodeJS.Timeout | undefined = undefined
let intervalId: number | undefined = undefined
const stopAutoscroll = () => {
intervalId && clearInterval(intervalId)
@@ -89,7 +89,7 @@
}
}
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
$effect(() => {
if (timeout) {
clearTimeout(timeout)
@@ -514,7 +514,7 @@
$selectedId !== 'triggers'
)
let debouncedWidth: number | undefined = $state(undefined)
let timeout: NodeJS.Timeout | undefined = $state(undefined)
let timeout: number | undefined = $state(undefined)
$effect(() => {
if (!debouncedWidth) {
return
@@ -27,7 +27,7 @@
let { id, children }: Props = $props()
let job: Job | undefined = $state(undefined)
let hovered = $state(false)
let timeout: NodeJS.Timeout | undefined
let timeout: number | undefined
let result: any = $state()
let jobLoader: JobLoader | undefined = $state()
let loaded = false
@@ -16,7 +16,7 @@
let { dropdownItems = [], fullMenu = false, noTrigger = false, close_button }: Props = $props()
let open = $state(false)
let timeout: NodeJS.Timeout | null = null
let timeout: number | null = null
function handleMouseEnter() {
if (!fullMenu) return
@@ -0,0 +1,118 @@
import { languages } from 'monaco-editor'
import processStdContent from '$lib/process.d.ts.txt?raw'
let jsonInitialized = false
export function setMonacoJsonOptions() {
if (jsonInitialized) return
jsonInitialized = true
languages.json.jsonDefaults.setDiagnosticsOptions({
validate: true,
allowComments: false,
schemas: [],
enableSchemaRequest: true
})
languages.json.jsonDefaults.setModeConfiguration({
documentRangeFormattingEdits: false,
documentFormattingEdits: true,
hovers: true,
completionItems: true,
documentSymbols: true,
tokens: true,
colors: true,
foldingRanges: true,
selectionRanges: true,
diagnostics: true
})
}
let typescriptInitialized = false
export function setMonacoTypescriptOptions() {
if (typescriptInitialized) return
typescriptInitialized = true
languages.typescript.typescriptDefaults.addExtraLib(processStdContent, 'process.d.ts')
languages.typescript.typescriptDefaults.setModeConfiguration({
completionItems: true,
hovers: true,
documentSymbols: true,
definitions: true,
references: true,
documentHighlights: true,
rename: true,
diagnostics: true,
documentRangeFormattingEdits: true,
signatureHelp: true,
onTypeFormattingEdits: true,
codeActions: true,
inlayHints: true
})
// languages.typescript.javascriptDefaults.setEagerModelSync(true)
languages.typescript.typescriptDefaults.setEagerModelSync(true)
// languages.typescript.javascriptDefaults.setDiagnosticsOptions({
// noSemanticValidation: false,
// noSyntaxValidation: false,
// noSuggestionDiagnostics: false,
// diagnosticCodesToIgnore: [1108]
// })
languages.typescript.typescriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false,
noSuggestionDiagnostics: false,
diagnosticCodesToIgnore: [1108, 7006, 7034, 7019, 7005]
})
languages.typescript.typescriptDefaults.setCompilerOptions({
target: languages.typescript.ScriptTarget.Latest,
allowNonTsExtensions: true,
noSemanticValidation: false,
noSyntaxValidation: false,
completionItems: true,
hovers: true,
documentSymbols: true,
definitions: true,
references: true,
documentHighlights: true,
rename: true,
diagnostics: true,
documentRangeFormattingEdits: true,
signatureHelp: true,
onTypeFormattingEdits: true,
codeActions: true,
inlayHints: true,
checkJs: true,
allowJs: true,
noUnusedLocals: true,
strict: true,
noLib: false,
allowImportingTsExtensions: true,
allowSyntheticDefaultImports: true,
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs,
jsx: languages.typescript.JsxEmit.React
})
}
let javascriptInitialized = false
export function setMonacoJavascriptOptions() {
if (javascriptInitialized) return
javascriptInitialized = true
languages.typescript.javascriptDefaults.setCompilerOptions({
target: languages.typescript.ScriptTarget.Latest,
allowNonTsExtensions: true,
noSemanticValidation: false,
noLib: true,
moduleResolution: languages.typescript.ModuleResolutionKind.NodeJs
})
languages.typescript.javascriptDefaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false,
noSuggestionDiagnostics: false,
diagnosticCodesToIgnore: [1108]
})
}
@@ -58,7 +58,7 @@
return searchOpen && search ? keepByKeyOrValue(json, search) : json
}
let searchTimeout: NodeJS.Timeout | undefined = undefined
let searchTimeout: number | undefined = undefined
function onSearch() {
if (searchTimeout) {
clearTimeout(searchTimeout)
@@ -48,7 +48,7 @@
let flowInputsFiltered: any = pickableProperties.flow_input
let resultByIdFiltered: any = pickableProperties.priorIds
let timeout: NodeJS.Timeout | undefined
let timeout: number | undefined
function onSearch(search: string) {
filterActive = false
if (timeout) {
@@ -193,7 +193,7 @@
await updateCollapsable()
}
$: search, $inputMatches, $propPickerConfig, pickableProperties, updateState()
$: (search, $inputMatches, $propPickerConfig, pickableProperties, updateState())
onDestroy(() => {
clearTimeout(timeout)
@@ -56,7 +56,7 @@
let files: Record<string, string> | undefined = $state(initFiles)
let draftTimeout: NodeJS.Timeout | undefined = undefined
let draftTimeout: number | undefined = undefined
function saveFrontendDraft() {
draftTimeout && clearTimeout(draftTimeout)
draftTimeout = setTimeout(() => {
@@ -621,7 +621,7 @@
customPath
})
}
let validateTimeout: NodeJS.Timeout | undefined = undefined
let validateTimeout: number | undefined = undefined
async function validateCustomPath(customPath: string): Promise<void> {
customPathError = ''
if (validateTimeout) {
@@ -90,7 +90,7 @@
perPage = undefined,
allowWildcards = false
}: Props = $props()
let intervalId: NodeJS.Timeout | undefined = $state()
let intervalId: number | undefined = $state()
let sync = true
function onParamChanges() {
@@ -12,7 +12,7 @@
let noWorkerWithTag = $state(false)
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let visible = true
async function lookForTag(): Promise<void> {
@@ -107,10 +107,10 @@
}
}
let labelTimeout: NodeJS.Timeout | undefined = $state(undefined)
let concurrencyKeyTimeout: NodeJS.Timeout | undefined = $state(undefined)
let tagTimeout: NodeJS.Timeout | undefined = $state(undefined)
let workerTimeout: NodeJS.Timeout | undefined = $state(undefined)
let labelTimeout: number | undefined = $state(undefined)
let concurrencyKeyTimeout: number | undefined = $state(undefined)
let tagTimeout: number | undefined = $state(undefined)
let workerTimeout: number | undefined = $state(undefined)
let allWorkspacesValue = $state(allWorkspaces ? 'all' : 'admins')
let displayedLabel = $derived(label)
@@ -148,7 +148,7 @@
)
let moreOpen = $state(false)
let moreOpenTimeout: NodeJS.Timeout | undefined = $state()
let moreOpenTimeout: number | undefined = $state()
function debouncedSetMoreOpen(value: boolean) {
if (moreOpenTimeout) {
@@ -35,7 +35,7 @@
showTestingBadge = false
}: Props = $props()
let validateTimeout: NodeJS.Timeout | undefined = undefined
let validateTimeout: number | undefined = undefined
let addressError: string = $state('')
async function validateEmailAddress(
@@ -41,7 +41,7 @@
showTestingBadge = false
}: Props = $props()
let validateTimeout: NodeJS.Timeout | undefined = undefined
let validateTimeout: number | undefined = undefined
let routeError: string = $state('')
async function validateRoute(
@@ -66,7 +66,7 @@
})
let urlError: string = $state('')
let validateTimeout: NodeJS.Timeout | undefined = undefined
let validateTimeout: number | undefined = undefined
function validateUrl(url: string | undefined) {
if (validateTimeout) {
clearTimeout(validateTimeout)
@@ -62,7 +62,9 @@
import Select from '../select/Select.svelte'
import ResourcePicker from '../ResourcePicker.svelte'
import { usePromise } from '$lib/svelte5Utils.svelte'
import { SettingService, WorkspaceService, type GetSettingsResponse } from '$lib/gen'
import { SettingService, WorkspaceService } from '$lib/gen'
import { type GetSettingsResponse } from '$lib/gen'
import { superadmin, workspaceStore } from '$lib/stores'
import { sendUserToast } from '$lib/toast'
import ExploreAssetButton from '../ExploreAssetButton.svelte'
+4 -7
View File
@@ -22,7 +22,7 @@ interface JobEntry {
export class JobManager {
private activeJobs = new Map<string, JobEntry>()
private cleanupInterval: NodeJS.Timeout | null = null
private cleanupInterval: number | null = null
private readonly STALE_TIMEOUT = 300000 // 5 minutes
private readonly CLEANUP_INTERVAL = 60000 // 1 minute
@@ -49,7 +49,7 @@ export class JobManager {
}
}
staleJobs.forEach(jobId => {
staleJobs.forEach((jobId) => {
this.activeJobs.delete(jobId)
})
@@ -58,10 +58,7 @@ export class JobManager {
}
}
async runWithProgress<T>(
jobRunner: () => Promise<string>,
options: JobOptions
): Promise<T> {
async runWithProgress<T>(jobRunner: () => Promise<string>, options: JobOptions): Promise<T> {
const {
onProgress,
timeout = 60000,
@@ -140,7 +137,7 @@ export class JobManager {
}
cancelAll() {
this.activeJobs.forEach(entry => entry.controller.abort())
this.activeJobs.forEach((entry) => entry.controller.abort())
this.activeJobs.clear()
}
+8
View File
@@ -1014,6 +1014,14 @@ export function isCodeInjection(expr: string | undefined): boolean {
return dynamicTemplateRegex.test(expr)
}
export function urlParamsToObject(params: URLSearchParams): Record<string, string> {
const result: Record<string, string> = {}
params.forEach((value, key) => {
result[key] = value
})
return result
}
export async function tryEvery({
tryCode,
timeoutCode,
@@ -265,7 +265,7 @@
$defaultScripts = await WorkspaceService.getDefaultScripts({ workspace })
}
}
let timeout: NodeJS.Timeout | undefined
let timeout: number | undefined
async function onUserStore(u: UserExt | undefined) {
if (u && timeout) {
clearTimeout(timeout)
@@ -7,7 +7,7 @@
import { Button, Skeleton } from '$lib/components/common'
import { AppService, type AppWithLastVersion } from '$lib/gen'
import { userStore, workspaceStore } from '$lib/stores'
import { canWrite } from '$lib/utils'
import { canWrite, urlParamsToObject } from '$lib/utils'
import { Pen } from 'lucide-svelte'
import { writable } from 'svelte/store'
import { twMerge } from 'tailwind-merge'
@@ -53,7 +53,7 @@
name: $userStore?.name,
username: $userStore?.username,
groups: $userStore?.groups,
query: Object.fromEntries(page.url.searchParams.entries()),
query: urlParamsToObject(page.url.searchParams),
hash: page.url.hash.substring(1)
}}
workspace={$workspaceStore ?? ''}
@@ -8,7 +8,7 @@
type TriggersCount,
type WorkspaceDeployUISettings
} from '$lib/gen'
import { canWrite, defaultIfEmptyString, emptyString } from '$lib/utils'
import { canWrite, defaultIfEmptyString, emptyString, urlParamsToObject } from '$lib/utils'
import { isDeployable, ALL_DEPLOYABLE } from '$lib/utils_deployable'
import DetailPageLayout from '$lib/components/details/DetailPageLayout.svelte'
@@ -75,7 +75,7 @@
let jsonView = $state(false)
let deploymentInProgress = $state(false)
let intervalId: NodeJS.Timeout | undefined = undefined
let intervalId: number | undefined = undefined
const triggersCount = writable<TriggersCount | undefined>(undefined)
@@ -203,7 +203,10 @@
if (hash.length > 1) {
try {
let searchParams = new URLSearchParams(hash.slice(1))
let params = [...searchParams.entries()].map(([k, v]) => [k, JSON.parse(v)])
let params = [...Object.entries(urlParamsToObject(searchParams))].map(([k, v]) => [
k,
JSON.parse(v)
])
args = Object.fromEntries(params)
} catch (e) {
console.error('Was not able to transform hash as args', e)
@@ -6,6 +6,7 @@
import { Loader2 } from 'lucide-svelte'
import { sendUserToast } from '$lib/toast'
import { page } from '$app/state'
import { urlParamsToObject } from '$lib/utils'
let client_name = page.params.client_name
let error = page.url.searchParams.get('error')
@@ -29,7 +30,7 @@
} else if (code && state) {
try {
const extraParams = Object.fromEntries(
Array.from(page.url.searchParams.entries()).filter(
Array.from(Object.entries(urlParamsToObject(page.url.searchParams))).filter(
([key]) => key !== 'code' && key !== 'state' && key !== 'error'
)
)
@@ -174,7 +174,7 @@
let extendedJobs: ExtendedJobs | undefined = $state(undefined)
let argError = $state('')
let resultError = $state('')
let filterTimeout: NodeJS.Timeout | undefined = undefined
let filterTimeout: number | undefined = undefined
let selectedManualDate = $state(0)
let autoRefresh: boolean = $state(getAutoRefresh())
let runDrawer: Drawer | undefined = $state(undefined)
@@ -470,7 +470,7 @@
allowWildcards = false
}
let calendarChangeTimeout: NodeJS.Timeout | undefined = $state(undefined)
let calendarChangeTimeout: number | undefined = $state(undefined)
function typeOfChart(s: string | null): 'RunChart' | 'ConcurrencyChart' {
switch (s) {
@@ -13,7 +13,8 @@
emptyString,
canWrite,
truncateHash,
copyToClipboard
copyToClipboard,
urlParamsToObject
} from '$lib/utils'
import Tooltip from '$lib/components/Tooltip.svelte'
import ShareModal from '$lib/components/ShareModal.svelte'
@@ -88,7 +89,7 @@
let topHash: string | undefined = $state()
let can_write = $state(false)
let deploymentInProgress = $state(false)
let intervalId: NodeJS.Timeout
let intervalId: number
let shareModal: ShareModal | undefined = $state()
let runForm: RunForm | undefined = $state()
@@ -260,7 +261,10 @@
if (hash.length > 1) {
try {
let searchParams = new URLSearchParams(hash.slice(1))
let params = [...searchParams.entries()].map(([k, v]) => [k, JSON.parse(v)])
let params = [...Object.entries(urlParamsToObject(searchParams))].map(([k, v]) => [
k,
JSON.parse(v)
])
args = Object.fromEntries(params)
} catch (e) {
console.error('Was not able to transform hash as args', e)
@@ -39,7 +39,7 @@
let workers: WorkerPing[] | undefined = undefined
let workerGroups: Record<string, any> | undefined = undefined
let groupedWorkers: [string, [string, WorkerPing[]][]][] = []
let intervalId: NodeJS.Timeout | undefined
let intervalId: number | undefined
const splitter = '_%%%_'
let customTags: string[] | undefined = undefined
$: groupedWorkers = groupWorkers(workers, workerGroups)
@@ -90,7 +90,7 @@
}
}
let secondInterval: NodeJS.Timeout | undefined = undefined
let secondInterval: number | undefined = undefined
async function loadCustomTags() {
try {
customTags = (await WorkerService.getCustomTags()) ?? []
+1 -1
View File
@@ -73,7 +73,7 @@
}
}
let interval: NodeJS.Timeout | undefined = undefined
let interval: number | undefined = undefined
onMount(() => {
window.onunhandledrejection = (event: PromiseRejectionEvent) => {
event.preventDefault()
+2 -1
View File
@@ -20,6 +20,7 @@
import { goto } from '$app/navigation'
import { sendUserToast } from '$lib/toast'
import { page } from '$app/state'
import { urlParamsToObject } from '$lib/utils'
let app: (AppWithLastVersion & { value: any }) | undefined = undefined
let notExists = false
@@ -163,7 +164,7 @@
name: $userStore?.name,
groups: $userStore?.groups,
username: $userStore?.username,
query: Object.fromEntries(page.url.searchParams.entries()),
query: urlParamsToObject(page.url.searchParams),
hash: page.url.hash.substring(1)
}}
workspace={page.params.workspace}
@@ -32,7 +32,7 @@
let dynamicSchema: any = $state({})
let timeout: NodeJS.Timeout | undefined = undefined
let timeout: number | undefined = undefined
let error: string | undefined = $state(undefined)
let default_payload: any = $state({})
let enum_payload: object = $state({})
@@ -21,6 +21,7 @@
import Alert from '$lib/components/common/alert/Alert.svelte'
import Skeleton from '$lib/components/common/skeleton/Skeleton.svelte'
import { page } from '$app/state'
import { urlParamsToObject } from '$lib/utils'
let app: (AppWithLastVersion & { value: any }) | undefined = undefined
let notExists = false
@@ -151,7 +152,7 @@
name: $userStore?.name,
groups: $userStore?.groups,
username: $userStore?.username,
query: Object.fromEntries(page.url.searchParams.entries()),
query: urlParamsToObject(page.url.searchParams),
hash: page.url.hash.substring(1)
}}
workspace={page.params.workspace}
-4
View File
@@ -2,7 +2,6 @@ import { sveltekit } from '@sveltejs/kit/vite'
import { readFileSync } from 'fs'
import { fileURLToPath } from 'url'
import mkcert from 'vite-plugin-mkcert'
import importMetaUrlPlugin from '@windmill-labs/esbuild-import-meta-url-plugin'
const file = fileURLToPath(new URL('package.json', import.meta.url))
const json = readFileSync(file, 'utf8')
@@ -66,9 +65,6 @@ const config = {
'@codingame/monaco-vscode-standalone-typescript-language-features',
'@codingame/monaco-vscode-standalone-languages'
],
esbuildOptions: {
plugins: [importMetaUrlPlugin]
}
},
worker: {
format: 'es'