diff --git a/lib/techs/jsdoc-json.js b/lib/techs/jsdoc-json.js index 6b3d482..79cc796 100644 --- a/lib/techs/jsdoc-json.js +++ b/lib/techs/jsdoc-json.js @@ -1,6 +1,7 @@ var vow = require('vow'), vfs = require('enb/lib/fs/async-fs'), - bemjsd = require('bem-jsd'); + bemjsd = require('bem-jsd'), + naming = require('bem-naming'); module.exports = require('enb/lib/build-flow').create() .name('jsdoc-json') @@ -11,22 +12,35 @@ module.exports = require('enb/lib/build-flow').create() target = this._target; return vow.all(files.map(function (file) { - return vfs.read(file.fullname, 'utf8'); - })) - .then(function (sources) { - if (!sources.length) { - return '{}'; - } + var basename = file.name.split('.')[0], + entity = naming.parse(basename); + + return vfs.read(file.fullname, 'utf8') + .then(function (src) { + var data = {}; - // 'jsd' which is used by 'bemjsd' does not handle Windows OS linebreaks - var json = bemjsd(sources.join('\n').replace(/\r/g, '')); + if (src.length) { + // 'jsd' which is used by 'bem-jsd' does not handle Windows OS linebreaks + data = bemjsd(src.replace(/\r/g, '')); - // 'bemjsd' returns { jsdocType: 'root' } for files without JSDoc - if (Object.keys(json).length < 2) { - return '{}'; - } + // 'bemjsd' returns { jsdocType: 'root' } for files without JSDoc + if (Object.keys(data).length < 2) { + data = {}; + } + } + + return { + entity: entity, + data: data + }; + }); + })) + .then(function (parts) { + var sortedParts = parts.sort(function (part1, part2) { + return Object.keys(part1.entity).length - Object.keys(part2.entity).length; + }); - return JSON.stringify(json); + return JSON.stringify(sortedParts); }) .fail(function (e) { logger.logWarningAction('js-doc', target, e.stack);