UNPKG

use-monaco

Version:

[![npm](https://img.shields.io/npm/v/use-monaco)](https://npm.im/use-monaco)

152 lines 5.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const worker_client_1 = require("./worker-client"); const utils_1 = require("../utils"); const utils_2 = require("../utils"); const plugin_api_1 = require("../plugin-api"); exports.default = plugin_api_1.createPlugin({ name: 'core.workers', dependencies: ['core.editors', 'core.loader'] }, (monaco) => { console.log('[monaco] base worker path:', monaco.loader.workersPath); const javascriptClient = { getSyncedWorker: async (...resources) => { const getWorker = await monaco.languages.typescript?.getJavaScriptWorker(); return await getWorker(...resources); }, src: monaco.loader.workersPath + 'ts.monaco.worker.js', // @ts-ignore config: monaco.languages.typescript?.javascriptDefaults ?? {}, }; const typescriptClient = { getSyncedWorker: async (...resources) => { const getWorker = await monaco.languages.typescript?.getTypeScriptWorker(); return await getWorker(...resources); }, src: monaco.loader.workersPath + 'ts.monaco.worker.js', // @ts-ignore config: monaco.languages.typescript?.typescriptDefaults ?? {}, }; const defaultClients = (basePath) => ({ typescript: { ...typescriptClient, src: basePath + 'ts.monaco.worker.js', }, javascript: { ...javascriptClient, src: basePath + 'ts.monaco.worker.js', }, editorWorkerService: { src: basePath + 'editor.monaco.worker.js', }, html: { src: basePath + 'html.monaco.worker.js', }, css: { src: basePath + 'css.monaco.worker.js', }, json: { src: basePath + 'json.monaco.worker.js', }, }); class MonacoWorkerApi { constructor() { this.workerClients = defaultClients; this._workers = {}; this.workerClients = { ...this.workerClients, ...defaultClients(utils_2.endingSlash(monaco.loader.workersPath)), }; this.setEnvironment({ getWorker: (label) => { const workerSrc = this.workerClients[label].src; console.log(`[monaco] loading worker: ${label}`); if (typeof workerSrc === 'string') { var workerBlobURL = createBlobURL(`importScripts("${workerSrc}")`); return new Worker(workerBlobURL, { name: label, }); } else { return workerSrc(); } }, }); } _registerWorker({ onRegister, ...config }) { ``; console.log(`[monaco] registering worker: ${config.label}`, config); const client = new worker_client_1.WorkerClient(config, monaco); this.workerClients[config.label ?? ''] = client; if (onRegister) { onRegister(client, monaco); } return client; } register(config) { // if (config.languageId) { // return monaco.languages.onLanguage(config.languageId, () => { // return this._registerWorker(config); // }); // } else { return this._registerWorker(config); // } } getClient(label) { if (!this.workerClients[label]) { throw new Error(`Worker ${label} not registered!`); } return this.workerClients[label]; } async getWorker(label, ...uri) { if (uri.length === 0) { const editorUri = monaco.editor.getFocusedEditor()?.getModel()?.uri; editorUri && uri.push(editorUri); } return this.getClient(label).getSyncedWorker(...uri); } setConfig(label, config) { this.getClient(label).config.setConfig(config); } updateOptions(label, options) { this.getClient(label).config.setOptions(options); } setEnvironment({ getWorkerUrl = utils_1.noop, getWorker = utils_1.noop, baseUrl = undefined, }) { if (baseUrl || getWorker || getWorkerUrl) { const getWorkerPath = (_moduleId, label) => { const url = getWorkerUrl?.(label); if (url) return url; return undefined; }; // @ts-ignore window.MonacoEnvironment = { // baseUrl: baseUrl, getWorker: (_moduleId, label) => { const worker = getWorker?.(label); if (worker) { return worker; } const url = getWorkerPath(_moduleId, label); if (url) { return new Worker(url, { name: label, }); } return null; }, }; } this.environment = { baseUrl, getWorker, getWorkerUrl }; } } Object.assign(monaco, { worker: new MonacoWorkerApi(), }); }); function createBlobURL(workerSrc) { var workerSrcBlob, workerBlobURL; workerSrcBlob = new Blob([workerSrc], { type: 'text/javascript', }); workerBlobURL = window.URL.createObjectURL(workerSrcBlob); return workerBlobURL; } //# sourceMappingURL=index.js.map