UNPKG

2.16 kBJavaScriptView Raw
1var components = require('../components.js');
2var peerDependentsMap = null;
3
4function getPeerDependentsMap() {
5 var peerDependentsMap = {};
6 Object.keys(components.languages).forEach(function (language) {
7 if (language === 'meta') {
8 return false;
9 }
10 if (components.languages[language].peerDependencies) {
11 var peerDependencies = components.languages[language].peerDependencies;
12 if (!Array.isArray(peerDependencies)) {
13 peerDependencies = [peerDependencies];
14 }
15 peerDependencies.forEach(function (peerDependency) {
16 if (!peerDependentsMap[peerDependency]) {
17 peerDependentsMap[peerDependency] = [];
18 }
19 peerDependentsMap[peerDependency].push(language);
20 });
21 }
22 });
23 return peerDependentsMap;
24}
25
26function getPeerDependents(mainLanguage) {
27 if (!peerDependentsMap) {
28 peerDependentsMap = getPeerDependentsMap();
29 }
30 return peerDependentsMap[mainLanguage] || [];
31}
32
33function loadLanguages(arr, withoutDependencies) {
34 // If no argument is passed, load all components
35 if (!arr) {
36 arr = Object.keys(components.languages).filter(function (language) {
37 return language !== 'meta';
38 });
39 }
40 if (arr && !arr.length) {
41 return;
42 }
43
44 if (!Array.isArray(arr)) {
45 arr = [arr];
46 }
47
48 arr.forEach(function (language) {
49 if (!components.languages[language]) {
50 console.warn('Language does not exist ' + language);
51 return;
52 }
53 // Load dependencies first
54 if (!withoutDependencies && components.languages[language].require) {
55 loadLanguages(components.languages[language].require);
56 }
57
58 var pathToLanguage = './prism-' + language;
59 delete require.cache[require.resolve(pathToLanguage)];
60 delete Prism.languages[language];
61 require(pathToLanguage);
62
63 // Reload dependents
64 var dependents = getPeerDependents(language).filter(function (dependent) {
65 // If dependent language was already loaded,
66 // we want to reload it.
67 if (Prism.languages[dependent]) {
68 delete Prism.languages[dependent];
69 return true;
70 }
71 return false;
72 });
73 if (dependents.length) {
74 loadLanguages(dependents, true);
75 }
76 });
77}
78
79module.exports = function (arr) {
80 // Don't expose withoutDependencies
81 loadLanguages(arr);
82};
\No newline at end of file