import { expect, test } from './fixtures.js' test('docs Monaco CSS, HTML and JSON workers validate, complete and format real models', async ({ page }, testInfo) => { const startedWorkers = [] page.on('worker', worker => startedWorkers.push(worker.url())) await page.goto('/test/player.html?core=candidate&chapter=published') await page.addScriptTag({ url: '/assets/js/vs/loader.js' }) const result = await page.evaluate(async () => { window.require.config({ paths: { vs: '/assets/js/vs' } }) await new Promise((resolve, reject) => window.require(['vs/editor/editor.main'], resolve, reject)) const api = window.monaco const models = [] const workers = [] const model = (text, language, name) => { const value = api.editor.createModel(text, language, api.Uri.parse(`file:///${name}`)) models.push(value) return value } const connect = async (language, createData, resources) => { // Monaco 0.30.1 exposes getTypeScriptWorker but no CSS/HTML/JSON accessor. // Use the same public worker constructor and createData as its mode managers. const worker = api.editor.createWebWorker({ moduleId: `vs/language/${language}/${language}Worker`, label: language, createData }) workers.push(worker) await worker.withSyncedResources(resources.map(model => model.uri)) return worker.getProxy() } try { const css = model('a { color: red; }', 'css', 'valid.css') const badCss = model('a { color: ; }', 'css', 'invalid.css') const json = model('{"value":1}', 'json', 'valid.json') const badJson = model('{"value":}', 'json', 'invalid.json') const html = model('
hello
world