mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 09:20:10 +01:00
Uses rollup for ESM build and d.ts bundling. (#5048)
* Uses rollup for ESM build and d.ts bundling.
Moves monaco.languages.{typescript, json, html, css} to monaco.*.
Moves monaco.editor.createWebWorker to monaco.createWebWorker.
* Adds excluded files from dist, as they needed to be patched.
This commit is contained in:
parent
0fd6f29a23
commit
5a7e917587
39 changed files with 1795 additions and 712 deletions
|
|
@ -6,9 +6,9 @@ function createTrustedTypesPolicy<Options extends TrustedTypePolicyOptions>(
|
|||
):
|
||||
| undefined
|
||||
| Pick<
|
||||
TrustedTypePolicy<Options>,
|
||||
'name' | Extract<keyof Options, keyof TrustedTypePolicyOptions>
|
||||
> {
|
||||
TrustedTypePolicy<Options>,
|
||||
'name' | Extract<keyof Options, keyof TrustedTypePolicyOptions>
|
||||
> {
|
||||
interface IMonacoEnvironment {
|
||||
createTrustedTypesPolicy<Options extends TrustedTypePolicyOptions>(
|
||||
policyName: string,
|
||||
|
|
@ -16,9 +16,9 @@ function createTrustedTypesPolicy<Options extends TrustedTypePolicyOptions>(
|
|||
):
|
||||
| undefined
|
||||
| Pick<
|
||||
TrustedTypePolicy<Options>,
|
||||
'name' | Extract<keyof Options, keyof TrustedTypePolicyOptions>
|
||||
>;
|
||||
TrustedTypePolicy<Options>,
|
||||
'name' | Extract<keyof Options, keyof TrustedTypePolicyOptions>
|
||||
>;
|
||||
}
|
||||
const monacoEnvironment: IMonacoEnvironment | undefined = (globalThis as any).MonacoEnvironment;
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ if (
|
|||
});
|
||||
}
|
||||
|
||||
function getWorker(descriptor: { label: string; moduleId: string }): Worker | Promise<Worker> {
|
||||
function getWorker(descriptor: { label: string; moduleId: string; createWorker?: () => Worker }): Worker | Promise<Worker> {
|
||||
const label = descriptor.label;
|
||||
// Option for hosts to overwrite the worker script (used in the standalone editor)
|
||||
interface IMonacoEnvironment {
|
||||
|
|
@ -73,6 +73,10 @@ function getWorker(descriptor: { label: string; moduleId: string }): Worker | Pr
|
|||
}
|
||||
}
|
||||
|
||||
if (descriptor.createWorker) {
|
||||
return descriptor.createWorker();
|
||||
}
|
||||
|
||||
// const esmWorkerLocation = descriptor.esmModuleLocation;
|
||||
// if (esmWorkerLocation) {
|
||||
// const workerUrl = getWorkerBootstrapUrl(label, esmWorkerLocation.toString(true));
|
||||
|
|
@ -91,7 +95,8 @@ export function createWebWorker<T extends object>(
|
|||
const worker = Promise.resolve(
|
||||
getWorker({
|
||||
label: opts.label ?? 'monaco-editor-worker',
|
||||
moduleId: opts.moduleId
|
||||
moduleId: opts.moduleId,
|
||||
createWorker: opts.createWorker,
|
||||
})
|
||||
).then((w) => {
|
||||
w.postMessage('ignore');
|
||||
|
|
@ -111,6 +116,7 @@ export interface IWebWorkerOptions {
|
|||
* It should export a function `create` that should return the exported proxy.
|
||||
*/
|
||||
moduleId: string;
|
||||
createWorker?: () => Worker,
|
||||
/**
|
||||
* The data to send over when calling create on the module.
|
||||
*/
|
||||
|
|
|
|||
2
src/editor/edcore.main.ts
Normal file
2
src/editor/edcore.main.ts
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
import './internal/initialize';
|
||||
export * from 'monaco-editor-core';
|
||||
3
src/editor/editor.all.ts
Normal file
3
src/editor/editor.all.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
import './internal/initialize';
|
||||
/// @ts-ignore
|
||||
export * from 'monaco-editor-core/esm/vs/editor/editor.all';
|
||||
3
src/editor/editor.api.ts
Normal file
3
src/editor/editor.api.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
import './internal/initialize';
|
||||
/// @ts-ignore
|
||||
export * from 'monaco-editor-core/esm/vs/editor/editor.api';
|
||||
|
|
@ -1,18 +1,14 @@
|
|||
import { createWebWorker } from '../common/workers.js';
|
||||
import '../basic-languages/monaco.contribution.js';
|
||||
import * as css from '../language/css/monaco.contribution.js';
|
||||
import * as html from '../language/html/monaco.contribution.js';
|
||||
import * as json from '../language/json/monaco.contribution.js';
|
||||
import * as typescript from '../language/typescript/monaco.contribution.js';
|
||||
import * as monaco from 'monaco-editor-core';
|
||||
export * from 'monaco-editor-core';
|
||||
import * as monaco from './internal/editorWithLanguages';
|
||||
import './internal/initialize';
|
||||
import { getGlobalMonaco } from './internal/initialize';
|
||||
|
||||
export { css, html, json, typescript };
|
||||
export * from './internal/editorWithLanguages';
|
||||
|
||||
const existingCreateWebWorker = monaco.editor.createWebWorker;
|
||||
monaco.editor.createWebWorker = function (options: any) {
|
||||
if (options.worker === undefined) {
|
||||
return createWebWorker(options);
|
||||
}
|
||||
return existingCreateWebWorker(options);
|
||||
} as any;
|
||||
// export to the global based API (for backwards compatibility only).
|
||||
// Warning: We can only write to objects, not modules / namespaces!
|
||||
// Writing to modules/namespace would confuse bundlers.
|
||||
const monacoApi = getGlobalMonaco();
|
||||
monacoApi.languages.css = monaco.css;
|
||||
monacoApi.languages.html = monaco.html;
|
||||
monacoApi.languages.typescript = monaco.typescript;
|
||||
monacoApi.languages.json = monaco.json;
|
||||
|
|
|
|||
10
src/editor/internal/editorWithLanguages.ts
Normal file
10
src/editor/internal/editorWithLanguages.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import * as css from '../../language/css/monaco.contribution.js';
|
||||
import * as html from '../../language/html/monaco.contribution.js';
|
||||
import * as json from '../../language/json/monaco.contribution.js';
|
||||
import * as typescript from '../../language/typescript/monaco.contribution.js';
|
||||
import '../../basic-languages/monaco.contribution.js';
|
||||
import * as lsp from '@vscode/monaco-lsp-client';
|
||||
|
||||
export * from 'monaco-editor-core';
|
||||
export { createWebWorker, type IWebWorkerOptions } from '../../common/workers.js';
|
||||
export { css, html, json, typescript, lsp };
|
||||
12
src/editor/internal/initialize.ts
Normal file
12
src/editor/internal/initialize.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import * as monaco from 'monaco-editor-core/esm/vs/editor/editor.api.js';
|
||||
|
||||
export function getGlobalMonaco(): any {
|
||||
return monaco;
|
||||
}
|
||||
|
||||
// TODO@hediet get rid of the monaco global
|
||||
|
||||
const monacoEnvironment: monaco.Environment | undefined = (globalThis as any).MonacoEnvironment;
|
||||
if (monacoEnvironment?.globalAPI) {
|
||||
(globalThis as any).monaco = getGlobalMonaco();
|
||||
}
|
||||
|
|
@ -253,9 +253,6 @@ export const lessDefaults: LanguageServiceDefaults = new LanguageServiceDefaults
|
|||
modeConfigurationDefault
|
||||
);
|
||||
|
||||
// export to the global based API
|
||||
(<any>languages).css = { cssDefaults, lessDefaults, scssDefaults };
|
||||
|
||||
// --- Registration to monaco editor ---
|
||||
|
||||
function getMode(): Promise<typeof mode> {
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ export class WorkerManager {
|
|||
this._worker = createWebWorker<CSSWorker>({
|
||||
// module that exports the create() method and returns a `CSSWorker` instance
|
||||
moduleId: 'vs/language/css/cssWorker',
|
||||
|
||||
createWorker: () => new Worker(new URL('./css.worker', import.meta.url), { type: 'module' }),
|
||||
label: this._defaults.languageId,
|
||||
|
||||
// passed in to the create() method
|
||||
|
|
|
|||
|
|
@ -215,17 +215,6 @@ export const razorLanguageService = registerHTMLLanguageService(
|
|||
);
|
||||
export const razorDefaults = razorLanguageService.defaults;
|
||||
|
||||
// export to the global based API
|
||||
(<any>languages).html = {
|
||||
htmlDefaults,
|
||||
razorDefaults,
|
||||
handlebarDefaults,
|
||||
htmlLanguageService,
|
||||
handlebarLanguageService,
|
||||
razorLanguageService,
|
||||
registerHTMLLanguageService
|
||||
};
|
||||
|
||||
// --- Registration to monaco editor ---
|
||||
|
||||
function getMode(): Promise<typeof mode> {
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ export class WorkerManager {
|
|||
this._worker = createWebWorker<HTMLWorker>({
|
||||
// module that exports the create() method and returns a `HTMLWorker` instance
|
||||
moduleId: 'vs/language/html/htmlWorker',
|
||||
createWorker: () => new Worker(new URL('./html.worker', import.meta.url), { type: 'module' }),
|
||||
|
||||
// passed in to the create() method
|
||||
createData: {
|
||||
|
|
|
|||
|
|
@ -87,10 +87,10 @@ export interface JSONSchema {
|
|||
minProperties?: number;
|
||||
maxProperties?: number;
|
||||
dependencies?:
|
||||
| JSONSchemaMap
|
||||
| {
|
||||
[prop: string]: string[];
|
||||
};
|
||||
| JSONSchemaMap
|
||||
| {
|
||||
[prop: string]: string[];
|
||||
};
|
||||
items?: JSONSchemaRef | JSONSchemaRef[];
|
||||
minItems?: number;
|
||||
maxItems?: number;
|
||||
|
|
@ -342,9 +342,6 @@ export interface IJSONWorker {
|
|||
export const getWorker = (): Promise<(...uris: Uri[]) => Promise<IJSONWorker>> =>
|
||||
getMode().then((mode) => mode.getWorker());
|
||||
|
||||
// export to the global based API
|
||||
(<any>languages).json = { jsonDefaults, getWorker };
|
||||
|
||||
// --- Registration to monaco editor ---
|
||||
|
||||
function getMode(): Promise<typeof mode> {
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ export class WorkerManager {
|
|||
this._worker = createWebWorker<JSONWorker>({
|
||||
// module that exports the create() method and returns a `JSONWorker` instance
|
||||
moduleId: 'vs/language/json/jsonWorker',
|
||||
createWorker: () => new Worker(new URL('./json.worker', import.meta.url), { type: 'module' }),
|
||||
|
||||
label: this._defaults.languageId,
|
||||
|
||||
|
|
|
|||
|
|
@ -618,7 +618,7 @@ class LanguageServiceDefaultsImpl implements LanguageServiceDefaults {
|
|||
if (this._extraLibs[filePath] && this._extraLibs[filePath].content === content) {
|
||||
// no-op, there already exists an extra lib with this content
|
||||
return {
|
||||
dispose: () => {}
|
||||
dispose: () => { }
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -718,7 +718,7 @@ class LanguageServiceDefaultsImpl implements LanguageServiceDefaults {
|
|||
this._onDidChange.fire(undefined);
|
||||
}
|
||||
|
||||
setMaximumWorkerIdleTime(value: number): void {}
|
||||
setMaximumWorkerIdleTime(value: number): void { }
|
||||
|
||||
setEagerModelSync(value: boolean) {
|
||||
// doesn't fire an event since no
|
||||
|
|
@ -778,20 +778,6 @@ export const getJavaScriptWorker = (): Promise<(...uris: Uri[]) => Promise<TypeS
|
|||
return getMode().then((mode) => mode.getJavaScriptWorker());
|
||||
};
|
||||
|
||||
// export to the global based API
|
||||
(<any>languages).typescript = {
|
||||
ModuleKind,
|
||||
JsxEmit,
|
||||
NewLineKind,
|
||||
ScriptTarget,
|
||||
ModuleResolutionKind,
|
||||
typescriptVersion,
|
||||
typescriptDefaults,
|
||||
javascriptDefaults,
|
||||
getTypeScriptWorker,
|
||||
getJavaScriptWorker
|
||||
};
|
||||
|
||||
// --- Registration to monaco editor ---
|
||||
|
||||
function getMode(): Promise<typeof mode> {
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ export class WorkerManager {
|
|||
this._worker = createWebWorker<TypeScriptWorker>({
|
||||
// module that exports the create() method and returns a `TypeScriptWorker` instance
|
||||
moduleId: 'vs/language/typescript/tsWorker',
|
||||
createWorker: () => new Worker(new URL('./ts.worker', import.meta.url), { type: 'module' }),
|
||||
|
||||
label: this._modeId,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue