diff options
Diffstat (limited to 'node_modules/prismjs/components/index.js')
| -rw-r--r-- | node_modules/prismjs/components/index.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/node_modules/prismjs/components/index.js b/node_modules/prismjs/components/index.js new file mode 100644 index 00000000..fe5940ae --- /dev/null +++ b/node_modules/prismjs/components/index.js @@ -0,0 +1,82 @@ +var components = require('../components.js'); +var peerDependentsMap = null; + +function getPeerDependentsMap() { + var peerDependentsMap = {}; + Object.keys(components.languages).forEach(function (language) { + if (language === 'meta') { + return false; + } + if (components.languages[language].peerDependencies) { + var peerDependencies = components.languages[language].peerDependencies; + if (!Array.isArray(peerDependencies)) { + peerDependencies = [peerDependencies]; + } + peerDependencies.forEach(function (peerDependency) { + if (!peerDependentsMap[peerDependency]) { + peerDependentsMap[peerDependency] = []; + } + peerDependentsMap[peerDependency].push(language); + }); + } + }); + return peerDependentsMap; +} + +function getPeerDependents(mainLanguage) { + if (!peerDependentsMap) { + peerDependentsMap = getPeerDependentsMap(); + } + return peerDependentsMap[mainLanguage] || []; +} + +function loadLanguages(arr, withoutDependencies) { + // If no argument is passed, load all components + if (!arr) { + arr = Object.keys(components.languages).filter(function (language) { + return language !== 'meta'; + }); + } + if (arr && !arr.length) { + return; + } + + if (!Array.isArray(arr)) { + arr = [arr]; + } + + arr.forEach(function (language) { + if (!components.languages[language]) { + console.warn('Language does not exist ' + language); + return; + } + // Load dependencies first + if (!withoutDependencies && components.languages[language].require) { + loadLanguages(components.languages[language].require); + } + + var pathToLanguage = './prism-' + language; + delete require.cache[require.resolve(pathToLanguage)]; + delete Prism.languages[language]; + require(pathToLanguage); + + // Reload dependents + var dependents = getPeerDependents(language).filter(function (dependent) { + // If dependent language was already loaded, + // we want to reload it. + if (Prism.languages[dependent]) { + delete Prism.languages[dependent]; + return true; + } + return false; + }); + if (dependents.length) { + loadLanguages(dependents, true); + } + }); +} + +module.exports = function (arr) { + // Don't expose withoutDependencies + loadLanguages(arr); +};
\ No newline at end of file |
