docs: function StaticBuild(pathOrOpt, opt) {
    // #region Non-Constructor Call Handling
    if (!(this instanceof StaticBuild))
      return new StaticBuild(pathOrOpt, opt);
    // #endregion
    
    opt = normalizeOptions(pathOrOpt, opt);
    
    // #region Base
    /** True or a Number to set the verbosity level.
     * @type {(boolean|number)}
     * @configurable Can only be set to true or a positive integer from a 
     * configuration file. */
    this.verbose = opt.verbose || false;
    // #endregion
    
    // #region Dev Server
    // TODO: Create a cli option for host_AND_port; use it to override config.
    /** True if dev mode is active.
     * @type {boolean} */
    this.dev = opt.dev || false;
    /** The dev server configuration.
     * @configurable The `host` and `port` properties may be configured.
     */
    this.devServer = {
      /** Host name or ip address. */
      host: undefined,
      /** Port number. */
      port: 8080,
      /** True if restart is enabled. */
      restart: istype('Boolean', opt.restart) ? opt.restart : false,
      /** Number of milliseconds delay on file-watch triggered restarts. */
      restartDelay: istype('Number', opt.restartDelay) ? opt.restartDelay : 0
    };
    // #endregion
    
    // #region Paths
    /** Path to the directory containing the build config file.
     * @type {string} */
    this.baseDir = opt.baseDir || process.cwd();
    /** Path to the destination directory.
     * @type {string}
     * @default
     * @configurable */
    this.destDir = 'dist';
    /** Name of the build config file.
     * @type {string} */
    this.fileName = opt.fileName || 'staticbuild.json';
    /** Path to the build config file (includes fileName).
     * @type {string} */
    this.filePath = opt.filePath || '';
    /** Globs of file paths to ignore.
     * @type {string[]} */
    this.ignore = [
      '.gitignore',
      '*.layout.htm',
      '*.part.htm',
      '*.map'
    ];
    /** Contains paths that are mapped to the source directory.
     * @default
     * @configurable */
    this.pathMap = {
      // For example, to map fs `./bower_components` to url `/bower_components`.
      // "/bower_components": { "fs": "bower_components" }
    };
    /** Sets of tokens for replacing different items in file or url paths.
     * @default
     * @configurable Items from the configuration file are merged into the 
     * default set.
     */
    this.pathTokens = {
      bundleName: [
        /\$\(bundle\)/g
      ],
      bundleVer: [
        /\$\(bundleVer\)/g
      ],
      bundlePath: [
        /\$\(bundlePath\)/g
      ],
      packageVersionDefault: [
        /\$\(pkgVer\)/g
      ],
      packageVersionHashid: [
        /\$\(pkgVerHash\)/g
      ],
      packageVersionNumber: [
        /\$\(pkgVerNum\)/g
      ]
    };
    /** Contains url paths to map via an http proxy.
     * @default
     * @configurable */
    this.proxyMap = {
      // "/api": { "target": "http://localhost:4321/api", "changeOrigin": true }
    };
    /** Path to the source directory.
     * @type {string}
     * @default
     * @configurable */
    this.sourceDir = 'src';
    // #endregion
    
    // #region Package
    /** Path to the package file.
     * @type {string}
     * @default
     * @configurable */
    this.packageFile = 'package.json';
    /** Data from package.json */
    this.pkg = {};
    /** Package Version
     * @type {string} */
    this.pkgVer = '';
    /** Package Version Hashid
     * @type {string} */
    this.pkgVerHash = '';
    /** True if pkgVerHash should be used when replacing 
     * pathTokens.packageVersionDefault.
     * @type {boolean}
     * @default
     * @configurable */
    this.usePkgVerHashDefault = true;
    // #endregion
    
    // #region Version Hashing
    /** Configuration for hashing version strings.
     * @configurable The `salt`, `alphabet` and `minLength` fields are configurable.
     */
    this.versionHash = {
      alphabet: '0123456789abcdefghijklmnopqrstuvwxyz',
      minLength: 4,
      salt: 'BpoIsQlrssEz56uUbfgLu5KNBkoCJiyY'
    };
    /** An instance of hashids or compatible: `{String encode(Number)}`. */
    this.versionHasher = null;
    /** Cache of hashed version strings. */
    this.versionHashIds = {};
    // #endregion
    
    // #region Locales
    /** Id of the default locale.
     * @type {string}
     * @default
     * @configurable */
    this.defaultLocale = 'en';
    /** The i18n module used to provide translate and other functions. */
    this.i18n = i18n;
    /** Id of the current locale.
     * @type {string} */
    this.locale = 'en';
    /** Array of available locale ids.
     * @type {string[]}
     * @configurable */
    this.locales = ['en'];
    /** True if locales have been supplied from the config file.
     * @type {boolean} */
    this.localesConfigured = false;
    /** Path to the locales directory containing translations.
     * @type {string}
     * @default
     * @configurable */
    this.localesDir = 'locales';
    // #endregion
    
    // #region Engine
    /** Name of the default view engine.
     * @type {string}
     * @default
     * @configurable */
    this.defaultEngineName = 'jade';
    /** Contains view engine configurations.
     * @configurable The jade, less, nunjucks and sass engines are all configurable here.
     */
    this.engine = {
      jade: {
        extension: 'jade',
        options: { pretty: true, cache: false }
      },
      less: {
        extension: 'less',
        map: { enabled: true, inline: false }
      },
      nunjucks: {
        extension: 'htm',
        extensions: undefined,
        extensionsFile: '',
        filters: undefined,
        filtersFile: '',
        functions: undefined,
        options: { autoescape: true }
      },
      sass: {
        extension: 'sass',
        map: { enabled: true, inline: false }
      }
    };
    // #endregion
    
    // #region Views
    /** True if a view context should be created automatically.
     * @type {boolean}
     * @default
     * @configurable */
    this.autoContext = true;
    /** Name of the variable to expose StaticBuild in the view context.
     * @type {string}
     * @default
     * @configurable */
    this.contextBuildVar = 'build';
    /** The view context. */
    this.context = {};
    /** Path to a separate file containing the view context.
     * @type {string}
     * @default
     * @configurable */
    this.contextFile = '';
    /** Name of the default view file (without file extension).
     * @type {string}
     * @default
     * @configurable */
    this.defaultView = 'index';
    /** Path to a favicon.
     * @type {string}
     * @default
     * @configurable */
    this.favicon = 'favicon.ico';
    // #endregion
    
    // #region Status
    /** Array of errors or error messages.
     * @type {string[]} */
    this.errors = [];
    /** Array of information messages.
     * @type {string[]} */
    this.info = [];
    /** Array of warning messages.
     * @type {string[]} */
    this.warnings = [];
    // #endregion
    
    // #region Bundling
    /** True if pre-minified sources should be located by default.
     * @type {boolean} */
    this.autoMinSrc = true;
    /** Collection of bundles.
     * @configurable
     */
    this.bundle = {};
    /** Relative path where bundled files should be placed by default.
     * @type {string}
     * @default
     * @configurable */
    this.bundlePath = '/lib/$(bundle)';
    /** True if the bundle should be rendered instead of the source paths.
     * @type {boolean}
     * @configurable */
    this.bundling = !this.dev || opt.bundling === true;
    // #endregion
    
    configure(this);
    /** The current (most recently created) instance of StaticBuild.
     * @type {StaticBuild} */
    StaticBuild.current = this;
    load(this);
  }