chore(doc-gen): clarify and improve matching of exports to ignore
Previously this was a bit cryptic as we just had a `hideSpecialExports` flag. Now it ignores exports that match an array of regexes, with the default case being those exports called `___esModule`.
This commit is contained in:
parent
a4693ef679
commit
9407c12923
|
@ -0,0 +1,4 @@
|
||||||
|
export var __esModule = true;
|
||||||
|
export class OKToExport() {}
|
||||||
|
export function _thisIsPrivate() {}
|
||||||
|
export var thisIsOK = '!';
|
|
@ -13,17 +13,23 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
|
||||||
sourceFiles: {presence: true},
|
sourceFiles: {presence: true},
|
||||||
basePath: {presence: true},
|
basePath: {presence: true},
|
||||||
hidePrivateMembers: { inclusion: [true, false] },
|
hidePrivateMembers: { inclusion: [true, false] },
|
||||||
hideSpecialExports: { inclusion: [true, false] }
|
ignoreExportsMatching: {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// A collection of globs that identify those modules for which we should create docs
|
||||||
sourceFiles: [],
|
sourceFiles: [],
|
||||||
|
// The base path from which to load the source files
|
||||||
basePath: '.',
|
basePath: '.',
|
||||||
|
// We can ignore members of classes that are private
|
||||||
hidePrivateMembers: false,
|
hidePrivateMembers: false,
|
||||||
hideSpecialExports: true,
|
// We can provide a collection of strings or regexes to ignore exports whose export names match
|
||||||
|
ignoreExportsMatching: ['___esModule'],
|
||||||
|
|
||||||
$process: function(docs) {
|
$process: function(docs) {
|
||||||
|
|
||||||
var hideSpecialExports = this.hideSpecialExports;
|
// Convert ignoreExportsMatching to an array of regexes
|
||||||
|
var ignoreExportsMatching = convertToRegexCollection(this.ignoreExportsMatching);
|
||||||
|
|
||||||
var hidePrivateMembers = this.hidePrivateMembers;
|
var hidePrivateMembers = this.hidePrivateMembers;
|
||||||
|
|
||||||
var basePath = path.resolve(readFilesProcessor.basePath, this.basePath);
|
var basePath = path.resolve(readFilesProcessor.basePath, this.basePath);
|
||||||
|
@ -45,7 +51,7 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
|
||||||
moduleSymbol.exportArray.forEach(function(exportSymbol) {
|
moduleSymbol.exportArray.forEach(function(exportSymbol) {
|
||||||
|
|
||||||
// Ignore exports starting with an underscore
|
// Ignore exports starting with an underscore
|
||||||
if (hideSpecialExports && exportSymbol.name.charAt(0) === '_') return;
|
if (anyMatches(ignoreExportsMatching, exportSymbol.name)) return;
|
||||||
|
|
||||||
// If the symbol is an Alias then for most things we want the original resolved symbol
|
// If the symbol is an Alias then for most things we want the original resolved symbol
|
||||||
var resolvedExport = exportSymbol.resolvedSymbol || exportSymbol;
|
var resolvedExport = exportSymbol.resolvedSymbol || exportSymbol;
|
||||||
|
@ -199,3 +205,24 @@ function insertSorted(collection, item, property) {
|
||||||
}
|
}
|
||||||
collection.splice(index, 0, item);
|
collection.splice(index, 0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function convertToRegexCollection(items) {
|
||||||
|
if (!items) return [];
|
||||||
|
|
||||||
|
// Must be an array
|
||||||
|
if (!_.isArray(items)) {
|
||||||
|
items = [items];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert string to exact matching regexes
|
||||||
|
return items.map(function(item) {
|
||||||
|
return _.isString(item) ? new RegExp('^' + item + '$') : item;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function anyMatches(regexes, item) {
|
||||||
|
for(var i=0; i<regexes.length; ++i) {
|
||||||
|
if ( item.match(regexes[i]) ) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
var mockPackage = require('../mocks/mockPackage');
|
||||||
|
var Dgeni = require('dgeni');
|
||||||
|
var path = require('canonical-path');
|
||||||
|
|
||||||
|
describe('readTypeScriptModules', function() {
|
||||||
|
var dgeni, injector, processor;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
dgeni = new Dgeni([mockPackage()]);
|
||||||
|
injector = dgeni.configureInjector();
|
||||||
|
processor = injector.get('readTypeScriptModules');
|
||||||
|
processor.basePath = path.resolve(__dirname, '../mocks/');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe('ignoreExportsMatching', function() {
|
||||||
|
it('should ignore exports that match items in the `ignoreExportsMatching` property', function() {
|
||||||
|
processor.sourceFiles = [ 'readTypeScriptModules/ignoreExportsMatching.ts'];
|
||||||
|
processor.ignoreExportsMatching = [/^_/];
|
||||||
|
var docs = [];
|
||||||
|
processor.$process(docs);
|
||||||
|
|
||||||
|
var moduleDoc = docs[0];
|
||||||
|
expect(moduleDoc.docType).toEqual('module');
|
||||||
|
expect(moduleDoc.exports).toEqual([
|
||||||
|
jasmine.objectContaining({ name: 'OKToExport' }),
|
||||||
|
jasmine.objectContaining({ name: 'thisIsOK' })
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should only ignore `___esModule` exports by default', function() {
|
||||||
|
processor.sourceFiles = [ 'readTypeScriptModules/ignoreExportsMatching.ts'];
|
||||||
|
var docs = [];
|
||||||
|
processor.$process(docs);
|
||||||
|
|
||||||
|
var moduleDoc = docs[0];
|
||||||
|
expect(moduleDoc.docType).toEqual('module');
|
||||||
|
expect(moduleDoc.exports).toEqual([
|
||||||
|
jasmine.objectContaining({ name: 'OKToExport' }),
|
||||||
|
jasmine.objectContaining({ name: '_thisIsPrivate' }),
|
||||||
|
jasmine.objectContaining({ name: 'thisIsOK' })
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue