@monaco-editor/react
Version:
Monaco editor wrapper for easy/one-line integration with React applications (e.g. powered by create-react-app) without need of webpack configuration files
116 lines (90 loc) • 3.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _config2 = _interopRequireDefault(require("../config"));
var _utils = require("../utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var Monaco =
/*#__PURE__*/
function () {
function Monaco() {
var _this = this;
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Monaco);
_defineProperty(this, "handleMainScriptLoad", function (_) {
document.removeEventListener('monaco_init', _this.handleMainScriptLoad);
_this.resolve(window.monaco);
});
_defineProperty(this, "isInitialized", false);
_defineProperty(this, "wrapperPromise", new Promise(function (res, rej) {
_this.resolve = res;
_this.reject = rej;
}));
this.__config = config;
}
_createClass(Monaco, [{
key: "config",
value: function config(_config) {
if (_config) {
this.__config = (0, _utils.deepMerge)(this.__config, _config);
}
return this;
}
}, {
key: "injectScripts",
value: function injectScripts(script) {
document.body.appendChild(script);
}
}, {
key: "createScript",
value: function createScript(src) {
var script = document.createElement('script');
return src && (script.src = src), script;
}
}, {
key: "createMonacoLoaderScript",
value: function createMonacoLoaderScript(mainScript) {
var _this2 = this;
var loaderScript = this.createScript(this.__config.urls.monacoLoader);
loaderScript.onload = function (_) {
return _this2.injectScripts(mainScript);
};
loaderScript.onerror = this.reject;
return loaderScript;
}
}, {
key: "createMainScript",
value: function createMainScript() {
var mainScript = this.createScript();
mainScript.innerHTML = "\n require.config({ paths: { 'vs': '".concat(this.__config.urls.monacoBase, "' } });\n require(['vs/editor/editor.main'], function() {\n document.dispatchEvent(new Event('monaco_init'));\n });\n ");
mainScript.onerror = this.reject;
return mainScript;
}
}, {
key: "init",
value: function init() {
if (!this.isInitialized) {
if (window.monaco && window.monaco.editor) {
return new Promise(function (res, rej) {
return res(window.monaco);
});
}
document.addEventListener('monaco_init', this.handleMainScriptLoad);
var mainScript = this.createMainScript();
var loaderScript = this.createMonacoLoaderScript(mainScript);
this.injectScripts(loaderScript);
}
this.isInitialized = true;
return this.wrapperPromise;
}
}]);
return Monaco;
}();
var _default = new Monaco(_config2.default);
exports.default = _default;