@ngstack/code-editor
Version:
Code editor component for Angular applications.
79 lines • 9.37 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "./code-editor.service";
export class JavascriptDefaultsService {
constructor(codeEditorService) {
codeEditorService.loaded.subscribe(event => {
this.setup(event.monaco);
});
codeEditorService.typingsLoaded.subscribe(typings => {
this.updateTypings(typings);
});
}
setup(monaco) {
if (!monaco) {
return;
}
this.monaco = monaco;
const defaults = monaco.languages.typescript.javascriptDefaults;
defaults.setCompilerOptions({
target: monaco.languages.typescript.ScriptTarget.ES6,
module: 'commonjs',
allowNonTsExtensions: true,
baseUrl: '.',
paths: {}
});
defaults.setMaximumWorkerIdleTime(-1);
defaults.setEagerModelSync(true);
/*
defaults.setDiagnosticsOptions({
noSemanticValidation: false,
noSyntaxValidation: false
});
*/
}
updateTypings(typings) {
if (typings) {
this.addExtraLibs(typings.files);
this.addLibraryPaths(typings.entryPoints);
}
}
addExtraLibs(libs = []) {
if (!this.monaco || !libs || libs.length === 0) {
return;
}
const defaults = this.monaco.languages.typescript.javascriptDefaults;
// undocumented API
const registeredLibs = defaults.getExtraLibs();
libs.forEach(lib => {
if (!registeredLibs[lib.path]) {
// needs performance improvements, recreates its worker each time
// defaults.addExtraLib(lib.content, lib.path);
// undocumented API
defaults._extraLibs[lib.path] = lib.content;
}
});
// undocumented API
defaults._onDidChange.fire(defaults);
}
addLibraryPaths(paths = {}) {
if (!this.monaco) {
return;
}
const defaults = this.monaco.languages.typescript.javascriptDefaults;
const compilerOptions = defaults.getCompilerOptions();
compilerOptions.paths = compilerOptions.paths || {};
Object.keys(paths).forEach(key => {
compilerOptions.paths[key] = [paths[key]];
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: JavascriptDefaultsService, deps: [{ token: i1.CodeEditorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: JavascriptDefaultsService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: JavascriptDefaultsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.CodeEditorService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1kZWZhdWx0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kZS1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9qYXZhc2NyaXB0LWRlZmF1bHRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTTNDLE1BQU0sT0FBTyx5QkFBeUI7SUFHcEMsWUFBWSxpQkFBb0M7UUFDOUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBVztRQUNmLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFFaEUsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1lBQzFCLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRztZQUNwRCxNQUFNLEVBQUUsVUFBVTtZQUNsQixvQkFBb0IsRUFBRSxJQUFJO1lBQzFCLE9BQU8sRUFBRSxHQUFHO1lBQ1osS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakM7Ozs7O1VBS0U7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQW9CO1FBQ2hDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFpRCxFQUFFO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFFckUsbUJBQW1CO1FBQ25CLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGlFQUFpRTtnQkFDakUsK0NBQStDO2dCQUMvQyxtQkFBbUI7Z0JBQ25CLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CO1FBQ25CLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBbUMsRUFBRTtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDO1FBQ3JFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RELGVBQWUsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0IsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FsRlUseUJBQXlCO21IQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs7NEZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvZGVFZGl0b3JTZXJ2aWNlLCBUeXBpbmdzSW5mbyB9IGZyb20gJy4vY29kZS1lZGl0b3Iuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEphdmFzY3JpcHREZWZhdWx0c1NlcnZpY2Uge1xuICBwcml2YXRlIG1vbmFjbzogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGNvZGVFZGl0b3JTZXJ2aWNlOiBDb2RlRWRpdG9yU2VydmljZSkge1xuICAgIGNvZGVFZGl0b3JTZXJ2aWNlLmxvYWRlZC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgdGhpcy5zZXR1cChldmVudC5tb25hY28pO1xuICAgIH0pO1xuICAgIGNvZGVFZGl0b3JTZXJ2aWNlLnR5cGluZ3NMb2FkZWQuc3Vic2NyaWJlKHR5cGluZ3MgPT4ge1xuICAgICAgdGhpcy51cGRhdGVUeXBpbmdzKHR5cGluZ3MpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0dXAobW9uYWNvOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW1vbmFjbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubW9uYWNvID0gbW9uYWNvO1xuXG4gICAgY29uc3QgZGVmYXVsdHMgPSBtb25hY28ubGFuZ3VhZ2VzLnR5cGVzY3JpcHQuamF2YXNjcmlwdERlZmF1bHRzO1xuXG4gICAgZGVmYXVsdHMuc2V0Q29tcGlsZXJPcHRpb25zKHtcbiAgICAgIHRhcmdldDogbW9uYWNvLmxhbmd1YWdlcy50eXBlc2NyaXB0LlNjcmlwdFRhcmdldC5FUzYsXG4gICAgICBtb2R1bGU6ICdjb21tb25qcycsXG4gICAgICBhbGxvd05vblRzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICAgIGJhc2VVcmw6ICcuJyxcbiAgICAgIHBhdGhzOiB7fVxuICAgIH0pO1xuXG4gICAgZGVmYXVsdHMuc2V0TWF4aW11bVdvcmtlcklkbGVUaW1lKC0xKTtcbiAgICBkZWZhdWx0cy5zZXRFYWdlck1vZGVsU3luYyh0cnVlKTtcblxuICAgIC8qXG4gICAgZGVmYXVsdHMuc2V0RGlhZ25vc3RpY3NPcHRpb25zKHtcbiAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogZmFsc2VcbiAgICB9KTtcbiAgICAqL1xuICB9XG5cbiAgdXBkYXRlVHlwaW5ncyh0eXBpbmdzOiBUeXBpbmdzSW5mbykge1xuICAgIGlmICh0eXBpbmdzKSB7XG4gICAgICB0aGlzLmFkZEV4dHJhTGlicyh0eXBpbmdzLmZpbGVzKTtcbiAgICAgIHRoaXMuYWRkTGlicmFyeVBhdGhzKHR5cGluZ3MuZW50cnlQb2ludHMpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEV4dHJhTGlicyhsaWJzOiBBcnJheTx7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubW9uYWNvIHx8ICFsaWJzIHx8IGxpYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLm1vbmFjby5sYW5ndWFnZXMudHlwZXNjcmlwdC5qYXZhc2NyaXB0RGVmYXVsdHM7XG5cbiAgICAvLyB1bmRvY3VtZW50ZWQgQVBJXG4gICAgY29uc3QgcmVnaXN0ZXJlZExpYnMgPSBkZWZhdWx0cy5nZXRFeHRyYUxpYnMoKTtcblxuICAgIGxpYnMuZm9yRWFjaChsaWIgPT4ge1xuICAgICAgaWYgKCFyZWdpc3RlcmVkTGlic1tsaWIucGF0aF0pIHtcbiAgICAgICAgLy8gbmVlZHMgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCByZWNyZWF0ZXMgaXRzIHdvcmtlciBlYWNoIHRpbWVcbiAgICAgICAgLy8gZGVmYXVsdHMuYWRkRXh0cmFMaWIobGliLmNvbnRlbnQsIGxpYi5wYXRoKTtcbiAgICAgICAgLy8gdW5kb2N1bWVudGVkIEFQSVxuICAgICAgICBkZWZhdWx0cy5fZXh0cmFMaWJzW2xpYi5wYXRoXSA9IGxpYi5jb250ZW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gdW5kb2N1bWVudGVkIEFQSVxuICAgIGRlZmF1bHRzLl9vbkRpZENoYW5nZS5maXJlKGRlZmF1bHRzKTtcbiAgfVxuXG4gIGFkZExpYnJhcnlQYXRocyhwYXRoczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1vbmFjbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5tb25hY28ubGFuZ3VhZ2VzLnR5cGVzY3JpcHQuamF2YXNjcmlwdERlZmF1bHRzO1xuICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IGRlZmF1bHRzLmdldENvbXBpbGVyT3B0aW9ucygpO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5wYXRocyA9IGNvbXBpbGVyT3B0aW9ucy5wYXRocyB8fCB7fTtcblxuICAgIE9iamVjdC5rZXlzKHBhdGhzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb21waWxlck9wdGlvbnMucGF0aHNba2V5XSA9IFtwYXRoc1trZXldXTtcbiAgICB9KTtcbiAgfVxufVxuIl19