formatPagesConfig.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const merge = require('lodash.merge');
  2. import { ConfigHtml, ConfigPages, ConfigWindow } from '../config';
  3. function validateBoolean(value?: boolean | 0 | 1, defaultValue = false): boolean {
  4. if (true === value || false === value) {
  5. return value;
  6. }
  7. if (0 === value || 1 === value) {
  8. return !!value;
  9. }
  10. return defaultValue;
  11. }
  12. function validateString(value?: string, defaultValue = ''): string {
  13. return value ? value : defaultValue;
  14. }
  15. function getArrayType(sourcesArr?: Array<{ [key: string]: string }>, pageArr: Array<{ [key: string]: string }> = []): Array<{ [key: string]: string }> {
  16. if ((!sourcesArr || !sourcesArr.length) && (!pageArr || !pageArr.length)) {
  17. return [];
  18. }
  19. if (sourcesArr && sourcesArr.length && pageArr && pageArr.length) {
  20. return sourcesArr.concat(pageArr);
  21. }
  22. if (sourcesArr && sourcesArr.length) {
  23. return sourcesArr;
  24. }
  25. return pageArr;
  26. }
  27. function formatPagesConfig(sources: { title: string, filename: string, render: string, html: ConfigHtml, window: ConfigWindow }, pages: ConfigPages): ConfigPages {
  28. const ret: ConfigPages = {};
  29. for (const pk in pages) {
  30. ret[pk] = {
  31. staticPage: validateBoolean(pages[pk].staticPage, false),
  32. buildExclude: validateBoolean(pages[pk].buildExclude, false),
  33. title: validateString(pages[pk].title, sources.title),
  34. filename: validateString(pages[pk].filename, sources.filename),
  35. html: {
  36. head: {
  37. meta: getArrayType(sources.html.head.meta, pages[pk].html.head.meta),
  38. links: getArrayType(sources.html.head.links, pages[pk].html.head.links),
  39. scripts: getArrayType(sources.html.head.scripts, pages[pk].html.head.scripts),
  40. },
  41. body: {
  42. scripts: getArrayType(sources.html.body.scripts, pages[pk].html.body.scripts),
  43. snippet: validateString(pages[pk].html.body.snippet, sources.html.body.snippet),
  44. },
  45. },
  46. window: merge({}, sources.window, pages[pk].window),
  47. render: validateString(sources.render, pages[pk].render),
  48. };
  49. }
  50. return ret;
  51. }
  52. export default formatPagesConfig;