Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
172 lines
4.3 KiB
Plaintext
172 lines
4.3 KiB
Plaintext
import { slicedToArray as _slicedToArray, objectWithoutProperties as _objectWithoutProperties } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
import state from 'state-local';
|
|
import config$1 from '../config/index.js';
|
|
import validators from '../validators/index.js';
|
|
import compose from '../utils/compose.js';
|
|
import merge from '../utils/deepMerge.js';
|
|
import makeCancelable from '../utils/makeCancelable.js';
|
|
|
|
var _excluded = ["monaco"];
|
|
|
|
/** the local state of the module */
|
|
var _state$create = state.create({
|
|
config: config$1,
|
|
isInitialized: false,
|
|
resolve: null,
|
|
reject: null,
|
|
monaco: null
|
|
}),
|
|
_state$create2 = _slicedToArray(_state$create, 2),
|
|
getState = _state$create2[0],
|
|
setState = _state$create2[1];
|
|
|
|
/**
|
|
* set the loader configuration
|
|
* @param {Object} config - the configuration object
|
|
*/
|
|
function config(globalConfig) {
|
|
var _validators$config = validators.config(globalConfig),
|
|
monaco = _validators$config.monaco,
|
|
config = _objectWithoutProperties(_validators$config, _excluded);
|
|
setState(function (state) {
|
|
return {
|
|
config: merge(state.config, config),
|
|
monaco: monaco
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* handles the initialization of the monaco-editor
|
|
* @return {Promise} - returns an instance of monaco (with a cancelable promise)
|
|
*/
|
|
function init() {
|
|
var state = getState(function (_ref) {
|
|
var monaco = _ref.monaco,
|
|
isInitialized = _ref.isInitialized,
|
|
resolve = _ref.resolve;
|
|
return {
|
|
monaco: monaco,
|
|
isInitialized: isInitialized,
|
|
resolve: resolve
|
|
};
|
|
});
|
|
if (!state.isInitialized) {
|
|
setState({
|
|
isInitialized: true
|
|
});
|
|
if (state.monaco) {
|
|
state.resolve(state.monaco);
|
|
return makeCancelable(wrapperPromise);
|
|
}
|
|
if (window.monaco && window.monaco.editor) {
|
|
storeMonacoInstance(window.monaco);
|
|
state.resolve(window.monaco);
|
|
return makeCancelable(wrapperPromise);
|
|
}
|
|
compose(injectScripts, getMonacoLoaderScript)(configureLoader);
|
|
}
|
|
return makeCancelable(wrapperPromise);
|
|
}
|
|
|
|
/**
|
|
* injects provided scripts into the document.body
|
|
* @param {Object} script - an HTML script element
|
|
* @return {Object} - the injected HTML script element
|
|
*/
|
|
function injectScripts(script) {
|
|
return document.body.appendChild(script);
|
|
}
|
|
|
|
/**
|
|
* creates an HTML script element with/without provided src
|
|
* @param {string} [src] - the source path of the script
|
|
* @return {Object} - the created HTML script element
|
|
*/
|
|
function createScript(src) {
|
|
var script = document.createElement('script');
|
|
return src && (script.src = src), script;
|
|
}
|
|
|
|
/**
|
|
* creates an HTML script element with the monaco loader src
|
|
* @return {Object} - the created HTML script element
|
|
*/
|
|
function getMonacoLoaderScript(configureLoader) {
|
|
var state = getState(function (_ref2) {
|
|
var config = _ref2.config,
|
|
reject = _ref2.reject;
|
|
return {
|
|
config: config,
|
|
reject: reject
|
|
};
|
|
});
|
|
var loaderScript = createScript("".concat(state.config.paths.vs, "/loader.js"));
|
|
loaderScript.onload = function () {
|
|
return configureLoader();
|
|
};
|
|
loaderScript.onerror = state.reject;
|
|
return loaderScript;
|
|
}
|
|
|
|
/**
|
|
* configures the monaco loader
|
|
*/
|
|
function configureLoader() {
|
|
var state = getState(function (_ref3) {
|
|
var config = _ref3.config,
|
|
resolve = _ref3.resolve,
|
|
reject = _ref3.reject;
|
|
return {
|
|
config: config,
|
|
resolve: resolve,
|
|
reject: reject
|
|
};
|
|
});
|
|
var require = window.require;
|
|
require.config(state.config);
|
|
require(['vs/editor/editor.main'], function (loaded) {
|
|
var monaco = loaded.m /* for 0.53 & 0.54 */ || loaded /* for other versions */;
|
|
storeMonacoInstance(monaco);
|
|
state.resolve(monaco);
|
|
}, function (error) {
|
|
state.reject(error);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* store monaco instance in local state
|
|
*/
|
|
function storeMonacoInstance(monaco) {
|
|
if (!getState().monaco) {
|
|
setState({
|
|
monaco: monaco
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* internal helper function
|
|
* extracts stored monaco instance
|
|
* @return {Object|null} - the monaco instance
|
|
*/
|
|
function __getMonacoInstance() {
|
|
return getState(function (_ref4) {
|
|
var monaco = _ref4.monaco;
|
|
return monaco;
|
|
});
|
|
}
|
|
var wrapperPromise = new Promise(function (resolve, reject) {
|
|
return setState({
|
|
resolve: resolve,
|
|
reject: reject
|
|
});
|
|
});
|
|
var loader = {
|
|
config: config,
|
|
init: init,
|
|
__getMonacoInstance: __getMonacoInstance
|
|
};
|
|
|
|
export { loader as default };
|