* Copyright (c) 2023 - present TinyEngine Authors.
* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.
*
* Use of this source code is governed by an MIT-style license.
*
* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
*
*/
import eslintWorkerUrl from './worker-files/eslint.worker?worker&url'
export const initLinter = (editor, monacoInstance, state) => {
let workerUrl = new URL(eslintWorkerUrl, import.meta.url)
if (workerUrl.origin !== location.origin) {
const workerBlob = new Blob([`import('${workerUrl}');`], {
type: 'application/javascript'
})
workerUrl = window.URL.createObjectURL(workerBlob)
}
const worker = new Worker(workerUrl, { type: 'module' })
worker.onmessage = function (event) {
const { markers, version } = event.data
const model = editor.getModel()
state.hasError = markers.filter(({ severity }) => severity === 'Error').length > 0
if (model && model.getVersionId() === version) {
monacoInstance.editor.setModelMarkers(model, 'ESLint', markers)
}
}
return worker
}
let timer = null
export const lint = (model, worker) => {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
timer = null
worker.postMessage({
code: model.getValue(),
version: model.getVersionId()
})
}, 500)
}