1
0

build-index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. const glob = require('glob');
  3. function parsePlatform(pagefile) {
  4. return pagefile.split(/\//)[1];
  5. }
  6. function parsePagename(pagefile) {
  7. return pagefile.split(/\//)[2].replace(/\.md$/, '');
  8. }
  9. function parseLanguage(pagefile) {
  10. let pagesFolder = pagefile.split(/\//)[0];
  11. return pagesFolder == 'pages' ? 'en' : pagesFolder.replace(/^pages\./, '');
  12. }
  13. function buildPagesIndex(files) {
  14. let reducer = function (index, file) {
  15. let os = parsePlatform(file);
  16. let page = parsePagename(file);
  17. let language = parseLanguage(file);
  18. if (index[page]) {
  19. if (!index[page].platform.includes(os)) {
  20. index[page].platform.push(os);
  21. }
  22. if (!index[page].language.includes(language)) {
  23. index[page].language.push(language);
  24. }
  25. const targets = index[page].targets;
  26. const exists = targets.some((t) => {return t.platform === os && t.language === language});
  27. if (!exists) {
  28. targets.push({os, language})
  29. }
  30. } else {
  31. index[page] = {
  32. name: page,
  33. platform: [os],
  34. language: [language],
  35. targets: [{os, language}]
  36. };
  37. }
  38. return index;
  39. };
  40. let obj = files.reduce(reducer, {});
  41. return Object.keys(obj)
  42. .sort()
  43. .map(function(page) {
  44. return {
  45. name: page,
  46. platform: obj[page].platform,
  47. language: obj[page].language,
  48. targets: obj[page].targets
  49. };
  50. });
  51. }
  52. function saveIndex(index) {
  53. let indexFile = {
  54. commands: index
  55. };
  56. console.log(JSON.stringify(indexFile));
  57. }
  58. glob('pages*/**/*.md', function (er, files) {
  59. if (er !== null) {
  60. console.error('ERROR finding pages!');
  61. console.error(er);
  62. return;
  63. }
  64. let index = buildPagesIndex(files);
  65. saveIndex(index);
  66. });