1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /**
- * @module jsdoc/config
- */
- const stripBom = require('jsdoc/util/stripbom');
- const stripJsonComments = require('strip-json-comments');
- function mergeRecurse(target, source) {
- Object.keys(source).forEach(p => {
- if ( source[p].constructor === Object ) {
- if ( !target[p] ) {
- target[p] = {};
- }
- mergeRecurse(target[p], source[p]);
- }
- else {
- target[p] = source[p];
- }
- });
- return target;
- }
- // required config values, override these defaults in your config.json if necessary
- const defaults = {
- plugins: [],
- recurseDepth: 10,
- source: {
- includePattern: '.+\\.js(doc|x)?$',
- excludePattern: ''
- },
- sourceType: 'module',
- tags: {
- allowUnknownTags: true,
- dictionaries: ['jsdoc', 'closure']
- },
- templates: {
- monospaceLinks: false,
- cleverLinks: false
- }
- };
- /**
- * Represents a JSDoc application configuration.
- */
- class Config {
- /**
- * @param {(string|object)} [jsonOrObject] - The contents of config.json, or a JavaScript object
- * exported from a .js config file.
- */
- constructor(jsonOrObject) {
- if (typeof jsonOrObject === 'undefined') {
- jsonOrObject = {};
- }
- if (typeof jsonOrObject === 'string') {
- jsonOrObject = JSON.parse( (stripJsonComments(stripBom.strip(jsonOrObject)) || '{}') );
- }
- if (typeof jsonOrObject !== 'object') {
- jsonOrObject = {};
- }
- this._config = mergeRecurse(defaults, jsonOrObject);
- }
- /**
- * Get the merged configuration values.
- */
- get() {
- return this._config;
- }
- }
- module.exports = Config;
|