UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

101 lines 13.7 kB
/// <reference types='monaco-editor/monaco' /> import { fromEventPattern, Observable, of } from 'rxjs'; import { mergeMap, shareReplay, tap } from 'rxjs/operators'; export class Monaco { static get isLoaded() { return !!window['monaco']; } static get isEditorModuleLoaded() { return this.isLoaded && !!monaco.editor; } static get amdRequire() { return window['require']; } /** * Gets the bse url for the monaco editor */ static get baseUrl() { return MsftSme.self().Resources.lib.monaco[Monaco.version]; } /** * Gets the Monaco namespace, loading it if it hasn't been already */ static loadMonacoEditor() { if (this.isEditorModuleLoaded) { return of(null); } if (!this.editorLibraryLoaded) { this.editorLibraryLoaded = this.configureMonacoImports().pipe(mergeMap(() => this.loadAmdModule('vs/editor/editor.main')), shareReplay(1)); } return this.editorLibraryLoaded; } /** * Loads a AMD module */ static loadAmdModule(path) { return new Observable(observer => { this.amdRequire([path], () => { observer.next(); observer.complete(); }, () => { observer.error(new Error(`Failed to load amd module at path: ${path}`)); observer.complete(); }); }); } /** * Gets the configure monaco for amd imports */ static configureMonacoImports() { if (this.isLoaded) { return of(null); } if (!this.importsConfigured) { this.importsConfigured = this.loadRequire().pipe(tap(() => { this.amdRequire.config({ paths: { vs: `${this.baseUrl}` } }); }), shareReplay(1)); } return this.importsConfigured; } /** * Gets the AMD loader, loading it if it hasn't been already */ static loadRequire() { if (this.amdRequire) { return of(null); } if (!this.requireLoaded) { this.requireLoaded = new Observable(observer => { const script = document.createElement('script'); script.type = 'text/javascript'; script.src = `${this.baseUrl}/loader.js`; script.crossOrigin = 'cors'; script.onload = () => { observer.next(); observer.complete(); }; script.onerror = () => { observer.error(new Error('Failed to load AMD Loader for monaco')); script.remove(); observer.complete(); }; document.body.appendChild(script); }).pipe(shareReplay(1)); } return this.requireLoaded; } } /** * The current version of monaco. This version is used to look up the monaco library path from the shell environment. * WHen this changes, a new version must be added to @see MsftSmeExternalLibraries with the new version. * Currently, we need to support the versions release with at least 2 of the last major SDK release. */ Monaco.version = '0.36.1'; /** * Observable wrapper for monaco editors eventing system */ export function fromMonacoEvent(emitter) { return fromEventPattern((handler) => emitter((result) => handler(result)), (handler, listener) => { listener.dispose(); handler(); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uYWNvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2NvZGUvbW9uYWNvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUE4QztBQUU5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxNQUFNLE9BQU8sTUFBTTtJQUVSLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sTUFBTSxLQUFLLG9CQUFvQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQUVPLE1BQU0sS0FBSyxVQUFVO1FBQ3pCLE9BQVksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFhRDs7T0FFRztJQUNLLE1BQU0sS0FBSyxPQUFPO1FBQ3RCLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCO1FBQzFCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFB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YSxDQUFDO0lBQzlCLENBQUM7O0FBL0ZEOzs7O0dBSUc7QUFDWSxjQUFPLEdBQUcsUUFBUSxDQUFDO0FBNkZ0Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUksT0FBeUI7SUFDeEQsT0FBTyxnQkFBZ0IsQ0FDbkIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ2pELENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQ2xCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHR5cGVzPSdtb25hY28tZWRpdG9yL21vbmFjbycgLz5cclxuXHJcbmltcG9ydCB7IGZyb21FdmVudFBhdHRlcm4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1lcmdlTWFwLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vbmFjbyB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgaXNMb2FkZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhd2luZG93Wydtb25hY28nXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc0VkaXRvck1vZHVsZUxvYWRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0xvYWRlZCAmJiAhIW1vbmFjby5lZGl0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGFtZFJlcXVpcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxhbnk+d2luZG93WydyZXF1aXJlJ107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZWRpdG9yTGlicmFyeUxvYWRlZDogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgIHByaXZhdGUgc3RhdGljIGltcG9ydHNDb25maWd1cmVkOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVxdWlyZUxvYWRlZDogT2JzZXJ2YWJsZTx2b2lkPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgbW9uYWNvLiBUaGlzIHZlcnNpb24gaXMgdXNlZCB0byBsb29rIHVwIHRoZSBtb25hY28gbGlicmFyeSBwYXRoIGZyb20gdGhlIHNoZWxsIGVudmlyb25tZW50LlxyXG4gICAgICogV0hlbiB0aGlzIGNoYW5nZXMsIGEgbmV3IHZlcnNpb24gbXVzdCBiZSBhZGRlZCB0byBAc2VlIE1zZnRTbWVFeHRlcm5hbExpYnJhcmllcyB3aXRoIHRoZSBuZXcgdmVyc2lvbi5cclxuICAgICAqIEN1cnJlbnRseSwgd2UgbmVlZCB0byBzdXBwb3J0IHRoZSB2ZXJzaW9ucyByZWxlYXNlIHdpdGggYXQgbGVhc3QgMiBvZiB0aGUgbGFzdCBtYWpvciBTREsgcmVsZWFzZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmVyc2lvbiA9ICcwLjM2LjEnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYnNlIHVybCBmb3IgdGhlIG1vbmFjbyBlZGl0b3JcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLmxpYi5tb25hY29bTW9uYWNvLnZlcnNpb25dO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgTW9uYWNvIG5hbWVzcGFjZSwgbG9hZGluZyBpdCBpZiBpdCBoYXNuJ3QgYmVlbiBhbHJlYWR5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgbG9hZE1vbmFjb0VkaXRvcigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRvck1vZHVsZUxvYWRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yTGlicmFyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvckxpYnJhcnlMb2FkZWQgPSB0aGlzLmNvbmZpZ3VyZU1vbmFjb0ltcG9ydHMoKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5sb2FkQW1kTW9kdWxlKCd2cy9lZGl0b3IvZWRpdG9yLm1haW4nKSksXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JMaWJyYXJ5TG9hZGVkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWRzIGEgQU1EIG1vZHVsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBsb2FkQW1kTW9kdWxlKHBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYW1kUmVxdWlyZShcclxuICAgICAgICAgICAgICAgIFtwYXRoXSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBhbWQgbW9kdWxlIGF0IHBhdGg6ICR7cGF0aH1gKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGNvbmZpZ3VyZSBtb25hY28gZm9yIGFtZCBpbXBvcnRzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIGNvbmZpZ3VyZU1vbmFjb0ltcG9ydHMoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaW1wb3J0c0NvbmZpZ3VyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbXBvcnRzQ29uZmlndXJlZCA9IHRoaXMubG9hZFJlcXVpcmUoKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHsgdGhpcy5hbWRSZXF1aXJlLmNvbmZpZyh7IHBhdGhzOiB7IHZzOiBgJHt0aGlzLmJhc2VVcmx9YCB9IH0pOyB9KSxcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydHNDb25maWd1cmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgQU1EIGxvYWRlciwgbG9hZGluZyBpdCBpZiBpdCBoYXNuJ3QgYmVlbiBhbHJlYWR5XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIGxvYWRSZXF1aXJlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFtZFJlcXVpcmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMucmVxdWlyZUxvYWRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVMb2FkZWQgPSBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmVyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gYCR7dGhpcy5iYXNlVXJsfS9sb2FkZXIuanNgO1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0LmNyb3NzT3JpZ2luID0gJ2NvcnMnO1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIEFNRCBMb2FkZXIgZm9yIG1vbmFjbycpKTtcclxuICAgICAgICAgICAgICAgICAgICBzY3JpcHQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgICAgICB9KS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVMb2FkZWQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPYnNlcnZhYmxlIHdyYXBwZXIgZm9yIG1vbmFjbyBlZGl0b3JzIGV2ZW50aW5nIHN5c3RlbVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Nb25hY29FdmVudDxUPihlbWl0dGVyOiBtb25hY28uSUV2ZW50PFQ+KTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybihcclxuICAgICAgICAoaGFuZGxlcikgPT4gZW1pdHRlcigocmVzdWx0KSA9PiBoYW5kbGVyKHJlc3VsdCkpLFxyXG4gICAgICAgIChoYW5kbGVyLCBsaXN0ZW5lcikgPT4ge1xyXG4gICAgICAgICAgICBsaXN0ZW5lci5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIGhhbmRsZXIoKTtcclxuICAgICAgICB9KTtcclxufVxyXG4iXX0=