From fc04071fb0376fc593b29c311d94649fb1709d63 Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 6 Jul 2016 23:12:54 -0600 Subject: [PATCH] [generate] support extending the rest-api specs via merge+concat --- scripts/generate/js_api.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/generate/js_api.js b/scripts/generate/js_api.js index 8fb40e0fe..5ac3f90da 100644 --- a/scripts/generate/js_api.js +++ b/scripts/generate/js_api.js @@ -24,6 +24,7 @@ module.exports = function (branch, done) { var version = Version.fromBranch(branch); var overrides = version.mergeOpts(require('./overrides'), { aliases: {}, + mergeConcatParams: {}, paramAsBody: {}, clientActionModifier: false }); @@ -195,13 +196,23 @@ module.exports = function (branch, done) { def.url.params = _.transform(def.url.params, transformParamKeys, {}); def.url.parts = _.transform(def.url.parts, transformParamKeys, {}); - _.values(def.url.params).concat(_.values(def.url.parts)).forEach(param => { - if (param.options && param.options.some(opt => typeof opt !== 'string')) { - throw new Error(`${def.name} has options that are not strings...`) + var allParams = _.extend({}, def.url.params, def.url.parts); + _.forOwn(allParams, (paramSpec, paramName) => { + const toMerge = _.get(overrides, ['mergeConcatParams', name, paramName]) + if (toMerge) { + _.mergeWith(paramSpec, toMerge, (dest, src) => { + if (_.isArray(dest) && _.isArray(src)) { + return dest.concat(src) + } + }) + } + + if (paramSpec.options) { + const invalidOpts = paramSpec.options.some(opt => typeof opt !== 'string') + if (invalidOpts) throw new Error(`${name} has options that are not strings...`) } }) - var allParams = _.extend({}, def.url.params, def.url.parts); var spec = { name: name, methods: _.map(def.methods, function (m) { return m.toUpperCase(); }),