12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- 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);
- };
|