Skip to content

Commit 4526283

Browse files
committed
added sort-by option, output sorted by default
1 parent e81c4a7 commit 4526283

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

es5/jsdoc-parse.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,16 @@ function parse(jsdocData, options) {
2121
}
2222
});
2323

24+
data = sort(data, options['sort-by']);
2425
return data;
26+
}
27+
28+
function sort(array, properties) {
29+
var sortBy = require('sort-array');
30+
var customOrder = {
31+
kind: ['class', 'constructor', 'mixin', 'member', 'namespace', 'enum', 'constant', 'function', 'event', 'typedef', 'external'],
32+
scope: ['global', 'instance', 'static', 'inner']
33+
};
34+
properties = properties || ['scope', 'category', 'kind', 'order'];
35+
return sortBy(array, properties, customOrder);
2536
}

lib/jsdoc-parse.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,25 @@ const transform = require('./transform')
44
/**
55
* @module jsdoc-parse
66
* @example
7-
* var jsdocParse = require('jsdoc-parse')
7+
* const jsdocParse = require('jsdoc-parse')
88
*/
99
module.exports = parse
1010

1111
/**
1212
* @param {object[]} - jsdoc output
1313
* @param [options] {object}
1414
* @param [options.private] {boolean} - Include identifier documentation marked as `@private` in the output
15+
* @param [options.sort-by] {string|string[]} - Sort by one of more properties, e.g. `[ 'kind', 'category' ]`. Defaults to `[ 'scope', 'category', 'kind', 'order' ]`.
1516
* @returns {object[]}
1617
* @alias module:jsdoc-parse
1718
*/
1819
function parse (jsdocData, options) {
1920
options = options || {}
2021
let data = transform(jsdocData)
2122

23+
/* filter out ignored or private doclets */
2224
data = data.filter(function (doclet) {
23-
var parent = data.find(d => d.id === doclet.memberof) || {}
25+
const parent = data.find(d => d.id === doclet.memberof) || {}
2426
if (doclet.ignore || parent.ignore) {
2527
return false
2628
} else if (!options.private && (doclet.access === 'private' || parent.access === 'private')) {
@@ -30,5 +32,17 @@ function parse (jsdocData, options) {
3032
}
3133
})
3234

35+
/* sort */
36+
data = sort(data, options['sort-by'])
3337
return data
3438
}
39+
40+
function sort (array, properties) {
41+
const sortBy = require('sort-array')
42+
const customOrder = {
43+
kind: [ 'class', 'constructor', 'mixin', 'member', 'namespace', 'enum', 'constant', 'function', 'event', 'typedef', 'external' ],
44+
scope: [ 'global', 'instance', 'static', 'inner' ]
45+
}
46+
properties = properties || [ 'scope', 'category', 'kind', 'order' ]
47+
return sortBy(array, properties, customOrder)
48+
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"lodash.omit": "^4.4.0",
2929
"lodash.pick": "^4.3.0",
3030
"reduce-extract": "^1.0.0",
31+
"sort-array": "^1.1.1",
3132
"test-value": "^2.0.0"
3233
},
3334
"devDependencies": {

0 commit comments

Comments
 (0)