phaser/resources/jsdoc Export JSON/template/publish.js
vulvulune df6b946ceb Add grunt task to generate d.ts with comments
Add "tsdocs" grunt task to generate d.ts files with comments.
2015-01-20 17:18:56 +01:00

113 lines
4.5 KiB
JavaScript

/**
@overview Export the jsdoc comments in a json file
@version 1.0
*/
'use strict';
function findClass(parentNode, className)
{
var elements =
parentNode.classes
.filter(function (element) {
return (element.name === className);
});
return elements[0];
}
function graft2(parentNode, childNodes) {
if (!parentNode.classes) {
parentNode.classes = [];
}
childNodes.forEach(function (element, index) {
if (element.kind === 'class') {
var thisClass = {
'name': element.longname,
'description': element.classdesc || element.description || '',
'constructor': {
'name': element.name,
'description': element.description || '',
'parameters': []
},
'functions': [],
'members': []
};
if (element.params) {
for (i = 0, len = element.params.length; i < len; i++) {
thisClass.constructor.parameters.push({
'name': element.params[i].name,
'type': element.params[i].type ? (element.params[i].type.names.length === 1 ? element.params[i].type.names[0] : element.params[i].type.names) : '',
'description': element.params[i].description || '',
'default': element.params[i].defaultvalue || '',
'optional': typeof element.params[i].optional === 'boolean' ? element.params[i].optional : '',
'nullable': typeof element.params[i].nullable === 'boolean' ? element.params[i].nullable : ''
});
}
}
parentNode.classes.push(thisClass);
}
else if (element.kind === 'function')
{
var parentClass = findClass(parentNode, element.memberof);
var thisFunction = {
'name': element.name,
'description': element.description || '',
'parameters': []
};
if (parentClass != null) {
parentClass.functions.push(thisFunction);
if (element.returns) {
thisFunction.returns = {
'type': element.returns[0].type ? (element.returns[0].type.names.length === 1 ? element.returns[0].type.names[0] : element.returns[0].type.names) : '',
'description': element.returns[0].description || ''
};
}
if (element.params) {
for (i = 0, len = element.params.length; i < len; i++) {
thisFunction.parameters.push({
'name': element.params[i].name,
'type': element.params[i].type ? (element.params[i].type.names.length === 1 ? element.params[i].type.names[0] : element.params[i].type.names) : '',
'description': element.params[i].description || '',
'default': element.params[i].defaultvalue || '',
'optional': typeof element.params[i].optional === 'boolean' ? element.params[i].optional : '',
'nullable': typeof element.params[i].nullable === 'boolean' ? element.params[i].nullable : ''
});
}
}
}
}
else if ((element.kind === 'member') || (element.kind == 'constant')) {
var parentClass = findClass(parentNode, element.memberof);
if (parentClass != null) {
parentClass.members.push({
'name': element.name,
'access': element.access || '',
'virtual': !!element.virtual,
'description': element.description || (((element.properties !== undefined) && (element.properties.length === 1)) ? (element.properties[0].description || '') : ''), //properties
'type': element.type ? (element.type.length === 1 ? element.type[0] : element.type) : '',
'default': element.defaultvalue || '',
});
}
}
});
}
/**
@param {TAFFY} data
@param {object} opts
*/
exports.publish = function (data, opts) {
var root = {};
data({undocumented: true}).remove();
graft2(root, data().get());
var fs = require('fs');
fs.writeFileSync(opts.destination, JSON.stringify(root), 'utf8');
};