Skip to content

Commit 7fdcf19

Browse files
committed
use filter-where, remove deps, remove getStats
1 parent 00ddf40 commit 7fdcf19

6 files changed

Lines changed: 30 additions & 143 deletions

File tree

es5/jsdoc-parse.js

Lines changed: 2 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
'use strict';
22

3-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4-
5-
var sortArray = require('sort-array');
63
var transform = require('./transform');
7-
var a = require('array-tools');
8-
var t = require('typical');
94

105
exports.parse = parse;
11-
exports.getStats = getStats;
126

137
function parse(jsdocExplainOutput, options) {
14-
options = new ParseOptions(options);
8+
options = options || {};
159
var data = transform(jsdocExplainOutput);
1610

1711
data = data.filter(function (doclet) {
@@ -27,52 +21,5 @@ function parse(jsdocExplainOutput, options) {
2721
}
2822
});
2923

30-
if (options['sort-by'] && !a(options['sort-by']).contains('none')) {
31-
data = sort(data, options['sort-by']);
32-
} else if (!options['sort-by']) {
33-
data = sort(data, ['scope', 'category', 'kind', 'order']);
34-
}
35-
3624
return data;
37-
}
38-
39-
function getStats(jsdocExplainOutput) {
40-
var data = parse(jsdocExplainOutput);
41-
var stats = {
42-
identifiers: {}
43-
};
44-
var kinds = ['module', 'class', 'constructor', 'mixin', 'member', 'namespace', 'constant', 'function', 'event', 'typedef', 'external'];
45-
kinds.forEach(function (kind) {
46-
stats.identifiers[kind] = a(data).where({ kind: kind }).pluck('longname').val();
47-
});
48-
return stats;
49-
}
50-
51-
function sort(array, sortBy) {
52-
var customOrder = {
53-
kind: ['class', 'constructor', 'mixin', 'member', 'namespace', 'enum', 'constant', 'function', 'event', 'typedef', 'external'],
54-
scope: ['global', 'instance', 'static', 'inner']
55-
};
56-
57-
if (!sortBy) {
58-
return array;
59-
} else {
60-
return sortArray(array, sortBy, customOrder);
61-
}
62-
}
63-
64-
function deepEqual(a, b) {
65-
return JSON.stringify(a) === JSON.stringify(b);
66-
}
67-
68-
var ParseOptions = function ParseOptions(options) {
69-
_classCallCheck(this, ParseOptions);
70-
71-
options = options || {};
72-
73-
this['group-by'] = null;
74-
75-
this['sort-by'] = ['scope', 'category', 'kind', 'order'];
76-
77-
Object.assign(this, options);
78-
};
25+
}

es5/transform.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
var o = require('object-tools');
44
var a = require('array-tools');
55
var testValue = require('test-value');
6+
var where = require('filter-where');
7+
var arrayify = require('array-back');
68

79
module.exports = transform;
810

@@ -34,8 +36,10 @@ function transform(data) {
3436
return doclet;
3537
});
3638

37-
var exported = a.where(json, { isExported: true });
38-
var newIDs = a.pluck(exported, 'id');
39+
var exported = json.filter(where({ isExported: true }));
40+
var newIDs = exported.map(function (d) {
41+
return d.id;
42+
});
3943

4044
newIDs.forEach(function (newID) {
4145
update(json, { isExported: undefined, '!kind': 'module' }, function (doclet) {
@@ -137,7 +141,7 @@ function insertConstructors(data) {
137141
}
138142

139143
function getEs6Constructor(data, parent) {
140-
return a.findWhere(data, function (i) {
144+
return data.find(function (i) {
141145
return isES6Constructor(i) && i.memberof === parent.longname;
142146
});
143147
}
@@ -236,7 +240,7 @@ function wantedProperties(input) {
236240
function buildTodoList(doclet) {
237241
var todoList = [];
238242
if (doclet.todo) {
239-
var todo = a.arrayify(doclet.todo);
243+
var todo = arrayify(doclet.todo);
240244
todoList = todoList.concat(todo.map(function (task) {
241245
return { done: false, task: task };
242246
}));
@@ -349,7 +353,7 @@ function fixES6ConstructorMemberLongnames(data) {
349353
if (isES6Class(i)) {
350354
var es6constructor = getEs6Constructor(data, i);
351355
if (es6constructor) {
352-
var constructorChildren = a.where(data, { memberof: es6constructor.longname });
356+
var constructorChildren = data.filter(where({ memberof: es6constructor.longname }));
353357
constructorChildren.forEach(function (child) {
354358
return child.memberof = i.longname;
355359
});
@@ -369,7 +373,7 @@ function convertIsEnumFlagToKind(doclet) {
369373

370374
function removeEnumChildren(json) {
371375
return json.filter(function (doclet) {
372-
var parent = a.findWhere(json, { id: doclet.memberof });
376+
var parent = json.find(where({ id: doclet.memberof }));
373377
if (parent && parent.kind === 'enum') {
374378
return false;
375379
} else {

index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
var detect = require('feature-detect-es6')
22

3-
if (detect.all('class', 'arrowFunction', 'let', 'const', 'newArrayFeatures')) {
3+
if (!detect.newArrayFeatures()) {
4+
require('core-js/es6/array')
5+
}
6+
7+
if (detect.all('class', 'arrowFunction', 'let', 'const')) {
48
module.exports = require('./lib/jsdoc-parse')
59
} else {
610
require('core-js/es6/object')
7-
require('core-js/es6/array')
811
module.exports = require('./es5/jsdoc-parse')
912
}

lib/jsdoc-parse.js

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
'use strict'
2-
const sortArray = require('sort-array')
32
const transform = require('./transform')
4-
const a = require('array-tools')
5-
const t = require('typical')
63

74
/**
85
*
@@ -12,17 +9,14 @@ const t = require('typical')
129
*/
1310

1411
exports.parse = parse
15-
exports.getStats = getStats
1612

1713
/**
1814
* @param {object[]} - jsdoc output
1915
* @param [options] {object}
2016
* @param [options.private] {boolean} - Include identifier documentation marked as `@private` in the output
21-
* @param [options.html] {boolean} - Enable experimental parsing of .html files.
22-
* @param [options.sort-by=[ 'scope', 'category', 'kind', 'order' ]] {string[]} - Sort by one of more fields, e.g. `--sort-by kind category`. Pass the special value `none` to remove the default sort order.
2317
*/
2418
function parse (jsdocExplainOutput, options) {
25-
options = new ParseOptions(options)
19+
options = options || {}
2620
let data = transform(jsdocExplainOutput)
2721

2822
data = data.filter(function (doclet) {
@@ -36,65 +30,5 @@ function parse (jsdocExplainOutput, options) {
3630
}
3731
})
3832

39-
if (options['sort-by'] && !a(options['sort-by']).contains('none')) {
40-
data = sort(data, options['sort-by'])
41-
} else if (!options['sort-by']) {
42-
data = sort(data, [ 'scope', 'category', 'kind', 'order' ])
43-
}
44-
4533
return data
4634
}
47-
48-
/**
49-
* return some stats about the parsed data
50-
* @param {object} - jsdoc-parse data
51-
* @returns {object}
52-
* @private
53-
*/
54-
function getStats (jsdocExplainOutput) {
55-
const data = parse(jsdocExplainOutput)
56-
var stats = {
57-
identifiers: {}
58-
}
59-
var kinds = [
60-
'module', 'class', 'constructor', 'mixin', 'member',
61-
'namespace', 'constant', 'function', 'event', 'typedef', 'external'
62-
]
63-
kinds.forEach(function (kind) {
64-
stats.identifiers[kind] = a(data).where({ kind: kind }).pluck('longname').val()
65-
})
66-
return stats
67-
}
68-
69-
function sort (array, sortBy) {
70-
var customOrder = {
71-
kind: [ 'class', 'constructor', 'mixin', 'member', 'namespace', 'enum',
72-
'constant', 'function', 'event', 'typedef', 'external' ],
73-
scope: [ 'global', 'instance', 'static', 'inner' ]
74-
}
75-
76-
if (!sortBy) {
77-
return array
78-
} else {
79-
return sortArray(array, sortBy, customOrder)
80-
}
81-
}
82-
83-
function deepEqual (a, b) {
84-
return JSON.stringify(a) === JSON.stringify(b)
85-
}
86-
87-
/**
88-
* Common jsdoc2md options
89-
*/
90-
class ParseOptions {
91-
constructor (options) {
92-
options = options || {}
93-
94-
this['group-by'] = null
95-
96-
this['sort-by'] = [ 'scope', 'category', 'kind', 'order' ]
97-
98-
Object.assign(this, options)
99-
}
100-
}

lib/transform.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
const o = require('object-tools')
33
const a = require('array-tools')
44
const testValue = require('test-value')
5+
const where = require('filter-where')
6+
const arrayify = require('array-back')
57

68
/**
79
* @module transform
@@ -41,8 +43,8 @@ function transform (data) {
4143
return doclet
4244
})
4345

44-
var exported = a.where(json, { isExported: true })
45-
var newIDs = a.pluck(exported, 'id')
46+
const exported = json.filter(where({ isExported: true }))
47+
const newIDs = exported.map(d => d.id)
4648

4749
newIDs.forEach(function (newID) {
4850
update(json, { isExported: undefined, '!kind': 'module' }, function (doclet) {
@@ -164,9 +166,7 @@ function insertConstructors (data) {
164166

165167
/* unfortunately the jsdoc data structure differs between es5 and es6 classes, hence the need for these four functions */
166168
function getEs6Constructor (data, parent) {
167-
return a.findWhere(data, i => {
168-
return isES6Constructor(i) && i.memberof === parent.longname
169-
})
169+
return data.find(i => isES6Constructor(i) && i.memberof === parent.longname)
170170
}
171171
function isES5Class (doclet) {
172172
return testValue(doclet, {
@@ -266,7 +266,7 @@ function wantedProperties (input) {
266266
function buildTodoList (doclet) {
267267
var todoList = []
268268
if (doclet.todo) {
269-
var todo = a.arrayify(doclet.todo)
269+
var todo = arrayify(doclet.todo)
270270
todoList = todoList.concat(todo.map(function (task) {
271271
return { done: false, task: task }
272272
}))
@@ -386,7 +386,7 @@ function fixES6ConstructorMemberLongnames (data) {
386386
if (isES6Class(i)) {
387387
const es6constructor = getEs6Constructor(data, i)
388388
if (es6constructor) {
389-
const constructorChildren = a.where(data, { memberof: es6constructor.longname })
389+
const constructorChildren = data.filter(where({ memberof: es6constructor.longname }))
390390
constructorChildren.forEach(child => child.memberof = i.longname)
391391
}
392392
}
@@ -405,7 +405,7 @@ function convertIsEnumFlagToKind (doclet) {
405405
/* remove properties which have enum parents.. depends on convertIsEnumFlagToKind */
406406
function removeEnumChildren (json) {
407407
return json.filter(function (doclet) {
408-
var parent = a.findWhere(json, { id: doclet.memberof })
408+
var parent = json.find(where({ id: doclet.memberof }))
409409
if (parent && parent.kind === 'enum') {
410410
return false
411411
} else {

package.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,17 @@
1818
},
1919
"scripts": {
2020
"test": "tape test/*.js",
21-
"docs": "jsdoc2md -t jsdoc2md/README.md -p list --skip-heading lib/jsdoc-parse.js > README.md; echo",
21+
"docs": "jsdoc2md2 -t jsdoc2md/README.md -p list --skip-heading lib/jsdoc-parse.js > README.md; echo",
2222
"es5": "babel --presets babel-preset-es2015 --no-comments lib --out-dir es5"
2323
},
2424
"dependencies": {
25+
"array-back": "^1.0.2",
2526
"array-tools": "^2",
26-
"common-sequence": "^1.0.2",
2727
"core-js": "^2.1.0",
2828
"feature-detect-es6": "^1.2.0",
29+
"filter-where": "^1.0.1",
2930
"object-tools": "^2",
30-
"sort-array": "^1.0.0",
31-
"test-value": "^1.0.1",
32-
"typical": "^2.4.2"
31+
"test-value": "^1.0.1"
3332
},
3433
"devDependencies": {
3534
"babel-preset-es2015": "^6.5.0",

0 commit comments

Comments
 (0)