@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
101 lines • 13.7 kB
JavaScript
/// <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=