From f05d891b6a2ca2b2243869e34ee2611c7639454a Mon Sep 17 00:00:00 2001 From: Stanley Pinchak Date: Wed, 15 Jul 2020 01:43:50 -0500 Subject: [PATCH] Initial attempt to parse default values for arrays --- lib/jsdoc-to-json-schema.js | 15 ++++++++++++++- test/data/test-singleton.js | 13 ++++++++++++- test/jsdoctojsonschema.spec.js | 10 ++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/jsdoc-to-json-schema.js b/lib/jsdoc-to-json-schema.js index 33166ef..eb99192 100755 --- a/lib/jsdoc-to-json-schema.js +++ b/lib/jsdoc-to-json-schema.js @@ -163,6 +163,20 @@ function buildJsonSchema(comments) { schema.properties[block.name].uniqueItems = (value === 'true'); } break; + /* customize on default */ + + case 'default': { + var blocktype = block.customTags.find(t => t.tag === 'schema.type').value || 'unknown'; + switch (blocktype) { + case 'array': { + schema.properties[block.name][tag] = (JSON.parse(value.replace('\\"', '""'))); + } break; + default: { + schema.properties[block.name][tag] = value; + } break; + } + } break; + /* strings */ case 'extends': @@ -176,7 +190,6 @@ function buildJsonSchema(comments) { case 'enum': case 'description': case 'name': - case 'default': default: { schema.properties[block.name][tag] = value; } break; diff --git a/test/data/test-singleton.js b/test/data/test-singleton.js index f4f8cdd..3002d90 100644 --- a/test/data/test-singleton.js +++ b/test/data/test-singleton.js @@ -31,5 +31,16 @@ var product = { * @schema.minimum 0 * @schema.required true */ - price: '' + price: '', + + /** + * @schema.title SKUs + * @schema.description SKUs of the product + * @schema.type array + * @schema.minItems 1 + * @schema.items [integer] + * @schema.default [42, "anothersku"] + * @schema.required true + */ + skus: [] }; diff --git a/test/jsdoctojsonschema.spec.js b/test/jsdoctojsonschema.spec.js index 616640a..c5a9a62 100644 --- a/test/jsdoctojsonschema.spec.js +++ b/test/jsdoctojsonschema.spec.js @@ -48,6 +48,16 @@ describe('jsdoc-to-json-schema', function () { expect(schema.properties.price.minimum).toEqual(0); expect(schema.properties.price.required).toEqual(true); + // .skus property + expect(schema.properties.skus).toBeDefined(); + expect(schema.properties.skus.type).toEqual('array'); + expect(schema.properties.skus.title).toEqual('SKUs'); + expect(schema.properties.skus.description).toEqual('SKUs of the product'); + expect(schema.properties.skus.minItems).toEqual(1); + expect(schema.properties.skus.items).toEqual('[integer]'); + expect(schema.properties.skus.default).toEqual([42, 'anothersku']); + expect(schema.properties.skus.required).toEqual(true); + done(); }) .catch(function(err){