All files / src/Page PageConfig.ts

100% Statements 20/20
50% Branches 1/2
100% Functions 1/1
100% Lines 20/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128                                                                                                                                                                                                          10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x              
import type { Template } from 'nunjucks';
import type { SiteLinkManager } from '../html/SiteLinkManager.js';
import type { PluginManager } from '../plugins/PluginManager.js';
 
import { VariableProcessor } from '../variables/VariableProcessor.js';
import { LayoutManager } from '../Layout/index.js';
 
export interface PageAssets {
  bootstrap: string;
  externalScripts: string[];
  fontAwesome?: string;
  glyphicons?: string;
  octicons?: string;
  materialIcons?: string;
  bootstrapIcons?: string;
  highlightLight: string;
  highlightDark: string;
  markBindCss: string;
  markBindJs: string;
  pageNavCss: string;
  siteNavCss: string;
  bootstrapUtilityJs: string;
  themeManagerJs: string;
  codeThemeJs: string;
  polyfillJs: string;
  vue: string;
  pageVueRenderJs?: string;
  layoutUserScriptsAndStyles: string[];
  pluginScripts?: string[];
  pluginLinks?: string[];
  pagefindCss?: string;
  pagefindJs?: string;
  pagefindLazyLoaderJs?: string;
}
 
/**
 * A page configuration object used to construct a {@link Page}.
 * Its properties will never be modified by {@link Page} itself.
 */
export class PageConfig {
  /**
   * Object of asset names as keys to their corresponding destination file paths / links.
   */
  asset: PageAssets;
 
  /**
   * Set of urls of the root site and subsites' root directories.
   */
  baseUrlMap: Set<string>;
 
  dev: boolean;
  faviconUrl?: string;
  frontmatterOverride: { [frontmatterName: string]: string };
  layout?: string;
  layoutsAssetPath: string;
  pluginManager: PluginManager;
  /**
   * The output path of this page
   */
  resultPath: string;
  rootPath: string;
  searchable: boolean;
  siteLinkManager: SiteLinkManager;
  siteOutputPath: string;
  /**
   * The source file's (.md) file path for rendering this page
   */
  sourcePath: string;
  /**
   * The source file's (.md) posix relative file path for rendering this page
   */
  src: string;
  title?: string;
  /**
   * The compiled Nunjucks template for the page wrapper (page.njk).
   * This is used to generate the HTML version of the page, handling the global structure
   * (html, head, body, scripts) wrapping the processed content.
   */
  template: Template;
  variableProcessor: VariableProcessor;
  addressablePagesSource: string[];
  layoutManager: LayoutManager;
 
  constructor(args: {
    asset: PageAssets;
    baseUrlMap: Set<string>;
    dev: boolean;
    faviconUrl?: string;
    frontmatterOverride?: { [frontmatterName: string]: string },
    layout?: string,
    layoutsAssetPath: string;
    pluginManager: PluginManager,
    resultPath: string;
    rootPath: string;
    searchable: boolean;
    siteLinkManager: SiteLinkManager;
    siteOutputPath: string;
    sourcePath: string;
    src: string;
    title?: string;
    template: Template;
    variableProcessor: VariableProcessor;
    addressablePagesSource: string[];
    layoutManager: any;
  }) {
    this.asset = args.asset;
    this.baseUrlMap = args.baseUrlMap;
    this.dev = args.dev;
    this.faviconUrl = args.faviconUrl;
    this.frontmatterOverride = args.frontmatterOverride || {};
    this.layout = args.layout;
    this.layoutsAssetPath = args.layoutsAssetPath;
    this.pluginManager = args.pluginManager;
    this.resultPath = args.resultPath;
    this.rootPath = args.rootPath;
    this.searchable = args.searchable;
    this.siteLinkManager = args.siteLinkManager;
    this.siteOutputPath = args.siteOutputPath;
    this.sourcePath = args.sourcePath;
    this.src = args.src;
    this.title = args.title;
    this.template = args.template;
    this.variableProcessor = args.variableProcessor;
    this.addressablePagesSource = args.addressablePagesSource;
    this.layoutManager = args.layoutManager;
  }
}