Files
elasticsearch-js/scripts/generate/js_api/index.js

60 lines
1.8 KiB
JavaScript

var _ = require('../../../src/lib/utils')
, asset = require('assert')
, path = require('path')
, fs = require('fs')
, mkdirp = require('mkdirp')
, docs = _.requireDir(module, '../../../es_api_spec/api')
, outputDir = _.joinPath(__dirname, '../../../src/api/')
, templates = require('./templates')
, notes = require('./notes')
, aliases = require('./aliases');
// completely delete the output directory
(function clean(path) {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach(function (file, index) {
var curPath = path + '/' + file;
if (fs.statSync(curPath).isDirectory()) { // recurse
clean(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
})(outputDir);
// itterate all of the found docs
_.each(docs, function (doc) {
// and each definition within each doc (should only be one)
_.each(doc, function (def, name) {
var steps = name.split('.')
, fileName = steps.pop() + '.js'
, dirName = _.joinPath(outputDir, steps.join('/') || './');
var spec = {
name: name,
methods: _.map(def.methods, function (m) { return m.toUpperCase(); }),
docUrl: def.documentation,
urlParts: def.url.parts,
params: def.url.params,
urls: _.difference(def.url.paths, aliases[name]),
body: def.body || null,
path2lib: _.repeat('../', steps.length + 1) + 'lib/',
notes: notes[name]
};
spec.enumOptions = _.object(_.filter(_.map(_.pairs(_.extend({}, spec.params, spec.urlParts)), function (pair) {
// pair = [name, param];
if (pair[1].type === 'enum') {
return [_.camelCase(pair[0]), pair[1].options];
}
})));
mkdirp.sync(dirName);
fs.writeFileSync(_.joinPath(dirName, fileName), templates.action(spec));
});
});