chore(doc-gen): allow class member sorting to be configured
This commit is contained in:
parent
9407c12923
commit
398e70ad39
|
@ -0,0 +1,12 @@
|
||||||
|
export class Test {
|
||||||
|
firstItem;
|
||||||
|
constructor() {
|
||||||
|
this.doStuff();
|
||||||
|
}
|
||||||
|
otherMethod() {
|
||||||
|
|
||||||
|
}
|
||||||
|
doStuff() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,6 +13,7 @@ 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] },
|
||||||
|
sortClassMembers: { inclusion: [true, false] },
|
||||||
ignoreExportsMatching: {}
|
ignoreExportsMatching: {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -22,6 +23,8 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
|
||||||
basePath: '.',
|
basePath: '.',
|
||||||
// We can ignore members of classes that are private
|
// We can ignore members of classes that are private
|
||||||
hidePrivateMembers: false,
|
hidePrivateMembers: false,
|
||||||
|
// We can sort class members alphabetically
|
||||||
|
sortClassMembers: true,
|
||||||
// We can provide a collection of strings or regexes to ignore exports whose export names match
|
// We can provide a collection of strings or regexes to ignore exports whose export names match
|
||||||
ignoreExportsMatching: ['___esModule'],
|
ignoreExportsMatching: ['___esModule'],
|
||||||
|
|
||||||
|
@ -31,6 +34,9 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
|
||||||
var ignoreExportsMatching = convertToRegexCollection(this.ignoreExportsMatching);
|
var ignoreExportsMatching = convertToRegexCollection(this.ignoreExportsMatching);
|
||||||
|
|
||||||
var hidePrivateMembers = this.hidePrivateMembers;
|
var hidePrivateMembers = this.hidePrivateMembers;
|
||||||
|
var addMember = this.sortClassMembers ? insertSorted : function(collection, item) {
|
||||||
|
collection.push(item);
|
||||||
|
};
|
||||||
|
|
||||||
var basePath = path.resolve(readFilesProcessor.basePath, this.basePath);
|
var basePath = path.resolve(readFilesProcessor.basePath, this.basePath);
|
||||||
var filesPaths = expandSourceFiles(this.sourceFiles, basePath);
|
var filesPaths = expandSourceFiles(this.sourceFiles, basePath);
|
||||||
|
@ -73,7 +79,7 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
|
||||||
docs.push(memberDoc);
|
docs.push(memberDoc);
|
||||||
} else if (!hidePrivateMembers || memberSymbol.name.charAt(0) !== '_') {
|
} else if (!hidePrivateMembers || memberSymbol.name.charAt(0) !== '_') {
|
||||||
docs.push(memberDoc);
|
docs.push(memberDoc);
|
||||||
insertSorted(exportDoc.members, memberDoc, 'name');
|
addMember(exportDoc.members, memberDoc, 'name');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
var mockPackage = require('../mocks/mockPackage');
|
var mockPackage = require('../mocks/mockPackage');
|
||||||
var Dgeni = require('dgeni');
|
var Dgeni = require('dgeni');
|
||||||
var path = require('canonical-path');
|
var path = require('canonical-path');
|
||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
describe('readTypeScriptModules', function() {
|
describe('readTypeScriptModules', function() {
|
||||||
var dgeni, injector, processor;
|
var dgeni, injector, processor;
|
||||||
|
@ -9,13 +10,13 @@ describe('readTypeScriptModules', function() {
|
||||||
dgeni = new Dgeni([mockPackage()]);
|
dgeni = new Dgeni([mockPackage()]);
|
||||||
injector = dgeni.configureInjector();
|
injector = dgeni.configureInjector();
|
||||||
processor = injector.get('readTypeScriptModules');
|
processor = injector.get('readTypeScriptModules');
|
||||||
processor.basePath = path.resolve(__dirname, '../mocks/');
|
processor.basePath = path.resolve(__dirname, '../mocks/readTypeScriptModules');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
describe('ignoreExportsMatching', function() {
|
describe('ignoreExportsMatching', function() {
|
||||||
it('should ignore exports that match items in the `ignoreExportsMatching` property', function() {
|
it('should ignore exports that match items in the `ignoreExportsMatching` property', function() {
|
||||||
processor.sourceFiles = [ 'readTypeScriptModules/ignoreExportsMatching.ts'];
|
processor.sourceFiles = [ 'ignoreExportsMatching.ts'];
|
||||||
processor.ignoreExportsMatching = [/^_/];
|
processor.ignoreExportsMatching = [/^_/];
|
||||||
var docs = [];
|
var docs = [];
|
||||||
processor.$process(docs);
|
processor.$process(docs);
|
||||||
|
@ -29,17 +30,52 @@ describe('readTypeScriptModules', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should only ignore `___esModule` exports by default', function() {
|
it('should only ignore `___esModule` exports by default', function() {
|
||||||
processor.sourceFiles = [ 'readTypeScriptModules/ignoreExportsMatching.ts'];
|
processor.sourceFiles = [ 'ignoreExportsMatching.ts'];
|
||||||
var docs = [];
|
var docs = [];
|
||||||
processor.$process(docs);
|
processor.$process(docs);
|
||||||
|
|
||||||
var moduleDoc = docs[0];
|
var moduleDoc = docs[0];
|
||||||
expect(moduleDoc.docType).toEqual('module');
|
expect(moduleDoc.docType).toEqual('module');
|
||||||
expect(moduleDoc.exports).toEqual([
|
expect(getNames(moduleDoc.exports)).toEqual([
|
||||||
jasmine.objectContaining({ name: 'OKToExport' }),
|
'OKToExport',
|
||||||
jasmine.objectContaining({ name: '_thisIsPrivate' }),
|
'_thisIsPrivate',
|
||||||
jasmine.objectContaining({ name: 'thisIsOK' })
|
'thisIsOK'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe('ordering of members', function() {
|
||||||
|
it('should order class members alphabetically (by default)', function() {
|
||||||
|
processor.sourceFiles = ['orderingOfMembers.ts'];
|
||||||
|
var docs = [];
|
||||||
|
processor.$process(docs);
|
||||||
|
var classDoc = _.find(docs, { docType: 'class' });
|
||||||
|
expect(classDoc.docType).toEqual('class');
|
||||||
|
expect(getNames(classDoc.members)).toEqual([
|
||||||
|
'doStuff',
|
||||||
|
'firstItem',
|
||||||
|
'otherMethod'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should not order class members if not sortClassMembers is false', function() {
|
||||||
|
processor.sourceFiles = ['orderingOfMembers.ts'];
|
||||||
|
processor.sortClassMembers = false;
|
||||||
|
var docs = [];
|
||||||
|
processor.$process(docs);
|
||||||
|
var classDoc = _.find(docs, { docType: 'class' });
|
||||||
|
expect(classDoc.docType).toEqual('class');
|
||||||
|
expect(getNames(classDoc.members)).toEqual([
|
||||||
|
'firstItem',
|
||||||
|
'otherMethod',
|
||||||
|
'doStuff'
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function getNames(collection) {
|
||||||
|
return collection.map(function(item) { return item.name; });
|
||||||
|
}
|
Loading…
Reference in New Issue