From ae047381f17203b9da17bb9e9ab8e9d5031ae566 Mon Sep 17 00:00:00 2001 From: HaseenaSainul Date: Fri, 29 Sep 2023 01:54:07 -0400 Subject: [PATCH 1/5] CPPSDK: 1. parameter and result handling changes 2. anyOf type handling 3. reference schema handling --- languages/cpp/templates/json-types/anyOf.c | 2 +- .../cpp/templates/json-types/anyOfSchema.h | 1 + .../parameter-serialization/generic.cpp | 2 + .../parameters/{object.h => nonprimitive.h} | 0 .../cpp/templates/parameters/result-null.h | 0 languages/cpp/templates/parameters/result.h | 1 - languages/cpp/templates/types/anyOf.c | 2 +- languages/cpp/templates/types/anyOfSchema.h | 1 + languages/cpp/templates/types/tuple.h | 2 +- src/macrofier/engine.mjs | 6 +- src/macrofier/types.mjs | 90 ++++++++++++++----- 11 files changed, 81 insertions(+), 26 deletions(-) create mode 100644 languages/cpp/templates/json-types/anyOfSchema.h create mode 100644 languages/cpp/templates/parameter-serialization/generic.cpp rename languages/cpp/templates/parameters/{object.h => nonprimitive.h} (100%) delete mode 100644 languages/cpp/templates/parameters/result-null.h delete mode 100644 languages/cpp/templates/parameters/result.h create mode 100644 languages/cpp/templates/types/anyOfSchema.h diff --git a/languages/cpp/templates/json-types/anyOf.c b/languages/cpp/templates/json-types/anyOf.c index a2682179..fc121f63 100644 --- a/languages/cpp/templates/json-types/anyOf.c +++ b/languages/cpp/templates/json-types/anyOf.c @@ -1 +1 @@ -/* AnyOf is not supported in C: ${title} */ \ No newline at end of file +WPEFramework::Core::JSON::VariantContainer \ No newline at end of file diff --git a/languages/cpp/templates/json-types/anyOfSchema.h b/languages/cpp/templates/json-types/anyOfSchema.h new file mode 100644 index 00000000..cc2ecb63 --- /dev/null +++ b/languages/cpp/templates/json-types/anyOfSchema.h @@ -0,0 +1 @@ +SKIP diff --git a/languages/cpp/templates/parameter-serialization/generic.cpp b/languages/cpp/templates/parameter-serialization/generic.cpp new file mode 100644 index 00000000..8ccb8295 --- /dev/null +++ b/languages/cpp/templates/parameter-serialization/generic.cpp @@ -0,0 +1,2 @@ + WPEFramework::Core::JSON::Variant ${Property} = ${property}; + jsonParameters.Set(_T("${property}"), ${Property}); \ No newline at end of file diff --git a/languages/cpp/templates/parameters/object.h b/languages/cpp/templates/parameters/nonprimitive.h similarity index 100% rename from languages/cpp/templates/parameters/object.h rename to languages/cpp/templates/parameters/nonprimitive.h diff --git a/languages/cpp/templates/parameters/result-null.h b/languages/cpp/templates/parameters/result-null.h deleted file mode 100644 index e69de29b..00000000 diff --git a/languages/cpp/templates/parameters/result.h b/languages/cpp/templates/parameters/result.h deleted file mode 100644 index 3c96807b..00000000 --- a/languages/cpp/templates/parameters/result.h +++ /dev/null @@ -1 +0,0 @@ -${method.param.type}& ${method.param.name} \ No newline at end of file diff --git a/languages/cpp/templates/types/anyOf.c b/languages/cpp/templates/types/anyOf.c index bd2ba3e5..ee8a39c3 100644 --- a/languages/cpp/templates/types/anyOf.c +++ b/languages/cpp/templates/types/anyOf.c @@ -1 +1 @@ -/* AnyOf is not supported in CPP: ${title} */ \ No newline at end of file +string diff --git a/languages/cpp/templates/types/anyOfSchema.h b/languages/cpp/templates/types/anyOfSchema.h new file mode 100644 index 00000000..cc2ecb63 --- /dev/null +++ b/languages/cpp/templates/types/anyOfSchema.h @@ -0,0 +1 @@ +SKIP diff --git a/languages/cpp/templates/types/tuple.h b/languages/cpp/templates/types/tuple.h index ce217a83..b00d2610 100644 --- a/languages/cpp/templates/types/tuple.h +++ b/languages/cpp/templates/types/tuple.h @@ -1,2 +1,2 @@ /* ${title} */ -std::pair<${type},${type}> ${title}; +std::pair<${items}> ${title}; diff --git a/src/macrofier/engine.mjs b/src/macrofier/engine.mjs index 500bc3b1..7c9e6ba9 100644 --- a/src/macrofier/engine.mjs +++ b/src/macrofier/engine.mjs @@ -844,7 +844,7 @@ function generateSchemas(json, templates, options) { else { content = content.replace(/.*\$\{schema.seeAlso\}/, '') } -// content = content.trim().length ? content.trimEnd() : content.trim() + content = content.trim().length ? content : content.trim() const isEnum = x => x.type === 'string' && Array.isArray(x.enum) && x.title @@ -1245,6 +1245,7 @@ function insertMethodMacros(template, methodObj, json, templates, examples = {}) .replace(/\$\{method\.params\.count}/g, methodObj.params ? methodObj.params.length : 0) .replace(/\$\{if\.params\}(.*?)\$\{end\.if\.params\}/gms, method.params.length ? '$1' : '') .replace(/\$\{if\.result\}(.*?)\$\{end\.if\.result\}/gms, resultType ? '$1' : '') + .replace(/\$\{if\.result.nonvoid\}(.*?)\$\{end\.if\.result.nonvoid\}/gms, resultType && resultType !== 'void' ? '$1' : '') .replace(/\$\{if\.result\.properties\}(.*?)\$\{end\.if\.result\.properties\}/gms, resultParams ? '$1' : '') .replace(/\$\{if\.params\.empty\}(.*?)\$\{end\.if\.params\.empty\}/gms, method.params.length === 0 ? '$1' : '') .replace(/\$\{if\.signature\.empty\}(.*?)\$\{end\.if\.signature\.empty\}/gms, (method.params.length === 0 && resultType === '') ? '$1' : '') @@ -1253,6 +1254,7 @@ function insertMethodMacros(template, methodObj, json, templates, examples = {}) .replace(/\$\{method\.params\.serialization\.with\.indent\}/g, indent(serializedParams, ' ')) // Typed signature stuff .replace(/\$\{method\.signature\.params\}/g, types.getMethodSignatureParams(methodObj, json, { destination: state.destination, section: state.section })) + .replace(/\$\{method\.signature\.result\}/g, types.getMethodSignatureResult(methodObj, json, { destination: state.destination, section: state.section })) .replace(/\$\{method\.context\}/g, method.context.join(', ')) .replace(/\$\{method\.context\.array\}/g, JSON.stringify(method.context)) .replace(/\$\{method\.context\.count}/g, method.context ? method.context.length : 0) @@ -1287,7 +1289,7 @@ function insertMethodMacros(template, methodObj, json, templates, examples = {}) .replace(/\$\{method\.result\.type\}/g, types.getSchemaType(result.schema, json, { name: result.name, templateDir: state.typeTemplateDir, title: true, asPath: false, destination: state.destination, result: true })) //, baseUrl: options.baseUrl .replace(/\$\{method\.result\.json\}/, types.getSchemaType(result.schema, json, { name: result.name, templateDir: 'json-types', destination: state.destination, section: state.section, title: true, code: false, link: false, asPath: false, expandEnums: false, namespace: true })) // todo: what does prefix do? - .replace(/\$\{event\.result\.type\}/, isEventMethod(methodObj) ? types.getSchemaType(result.schema, json, { name: result.name, prefix: method.alternative, templateDir: state.typeTemplateDir, destination: state.destination, event: true, description: methodObj.result.summary, asPath: false }) : '') + .replace(/\$\{event\.result\.type\}/g, isEventMethod(methodObj) ? types.getMethodSignatureResult(event, json, { destination: state.destination, section: state.section }) : '') .replace(/\$\{event\.result\.json\.type\}/g, resultJsonType) .replace(/\$\{event\.result\.json\.type\}/g, callbackResultJsonType) .replace(/\$\{event\.pulls\.param\.name\}/g, pullsEventParamName) diff --git a/src/macrofier/types.mjs b/src/macrofier/types.mjs index 8506161e..d12cc940 100644 --- a/src/macrofier/types.mjs +++ b/src/macrofier/types.mjs @@ -30,6 +30,8 @@ const primitives = { "string": "string" } +const isVoid = type => (type === 'void') ? true : false +const isPrimitiveType = type => primitives[type] ? true : false const allocatedPrimitiveProxies = {} function setTemplates(t) { @@ -53,17 +55,48 @@ const safeName = value => value.split(':').pop().replace(/[\.\-]/g, '_').replace // TODO: This is what's left of getMethodSignatureParams. We need to figure out / handle C's `FireboltTypes_StringHandle` function getMethodSignatureParams(method, module, { destination, callback }) { - const paramRequired = getTemplate('/parameters/default') const paramOptional = getTemplate('/parameters/optional') return method.params.map(param => { - let type = getSchemaType(param.schema, module, { destination }) + let type = getSchemaType(param.schema, module, { destination, namespace : true }) if (callback && allocatedPrimitiveProxies[type]) { type = allocatedPrimitiveProxies[type] } + + let paramRequired = '' + let jsonType = getJsonType(param.schema, module, { destination }) + if (!isPrimitiveType(jsonType) && getTemplate('/parameters/nonprimitive')) { + paramRequired = getTemplate('/parameters/nonprimitive') + } + else if ((jsonType === 'string') && getTemplate('/parameters/string')) { + paramRequired = getTemplate('/parameters/string') + } + else { + paramRequired = getTemplate('/parameters/default') + } + return (param.required ? paramRequired : paramOptional).replace(/\$\{method\.param\.name\}/g, param.name).replace(/\$\{method\.param\.type\}/g, type) }).join(', ') } +function getMethodSignatureResult(method, module, { destination, callback }) { + let type = getSchemaType(method.result.schema, module, { destination, namespace : true }) + + let result = '' + let jsonType = getJsonType(method.result.schema, module, { destination }) + + if (!isVoid(type) && !isPrimitiveType(jsonType) && getTemplate('/result/nonprimitive')) { + result = getTemplate('/result/nonprimitive') + } + else if ((jsonType === 'string') && getTemplate('/result/string')) { + result = getTemplate('/result/string') + } + else { + result = getTemplate('/result/default') + } + + return result.replace(/\$\{method\.result\.type\}/g, type) +} + const getTemplate = (name) => { if (name[0] !== '/') { name = '/' + name @@ -120,8 +153,6 @@ const insertConstMacros = (content, schema, module, name) => { return content } - - const insertEnumMacros = (content, schema, module, name) => { const template = content.split('\n') @@ -251,6 +282,7 @@ const insertTupleMacros = (content, schema, module, title, options) => { const itemsTemplate = getTemplate(path.join(options.templateDir, 'items')) const propIndent = (content.split('\n').find(line => line.includes("${properties}")) || '').match(/^\s+/) || [''][0] const itemsIndent = (content.split('\n').find(line => line.includes("${items}")) || '').match(/^\s+/) || [''][0] + const delimiter = getTemplate(path.join(options.templateDir, 'delimiter')) const doMacroWork = (str, prop, i, indent) => { const schemaShape = getSchemaShape(prop, module, options) @@ -267,8 +299,8 @@ const insertTupleMacros = (content, schema, module, title, options) => { .replace(/\$\{if\.optional\}(.*?)\$\{end\.if\.optional\}/gms, '') } - content = content.replace(/\$\{properties\}/g, schema.items.map((prop, i) => doMacroWork(propTemplate, prop, i, propIndent)).join('\n')) - content = content.replace(/\$\{items\}/g, schema.items.map((prop, i) => doMacroWork(itemsTemplate, prop, i, itemsIndent)).join('\n')) + content = content.replace(/\$\{properties\}/g, schema.items.map((prop, i) => doMacroWork(propTemplate, prop, i, propIndent)).join(delimiter)) + content = content.replace(/\$\{items\}/g, schema.items.map((prop, i) => doMacroWork(itemsTemplate, prop, i, itemsIndent)).join(delimiter)) return content } @@ -287,10 +319,13 @@ const insertPrimitiveMacros = (content, schema, module, name, templateDir) => { const insertAnyOfMacros = (content, schema, module, name) => { const itemTemplate = content - content = schema.anyOf.map((item, i) => itemTemplate - .replace(/\$\{type\}/g, getSchemaType(item, module)) - .replace(/\$\{delimiter\}(.*?)\$\{end.delimiter\}/g, i === schema.anyOf.length - 1 ? '' : '$1') - ).join('') + if (content.split('\n').find(line => line.includes("${type}"))) { + content = schema.anyOf.map((item, i) => itemTemplate + .replace(/\$\{type\}/g, getSchemaType(item, module)) + .replace(/\$\{delimiter\}(.*?)\$\{end.delimiter\}/g, i === schema.anyOf.length - 1 ? '' : '$1') + ).join('') + } + return content } @@ -359,14 +394,27 @@ function getSchemaShape(schema = {}, module = {}, { templateDir = 'types', name return insertSchemaMacros(result, schema, module, theTitle, parent, property) } else if (schema.anyOf || schema.oneOf) { - // borrow anyOf logic, note that schema is a copy, so we're not breaking it. - if (!schema.anyOf) { - schema.anyOf = schema.oneOf + const template = getTemplate(path.join(templateDir, 'anyOfSchema' + suffix)) + let shape + if (template) { + if (!template.includes('SKIP')) { + shape = insertAnyOfMacros(template, schema, module, theTitle) + } + } + else { + // borrow anyOf logic, note that schema is a copy, so we're not breaking it. + if (!schema.anyOf) { + schema.anyOf = schema.oneOf + } + shape = insertAnyOfMacros(getTemplate(path.join(templateDir, 'anyOf' + suffix)), schema, module, theTitle) + } + if (shape) { + result = result.replace(/\$\{shape\}/g, shape) + return insertSchemaMacros(result, schema, module, theTitle, parent, property) + } + else { + return '' } - const shape = insertAnyOfMacros(getTemplate(path.join(templateDir, 'anyOf' + suffix)), schema, module, theTitle) - - result = result.replace(/\$\{shape\}/g, shape) - return insertSchemaMacros(result, schema, module, theTitle, parent, property) } else if (schema.allOf) { const merger = (key) => function (a, b) { @@ -464,7 +512,7 @@ const isSupportedTuple = schema => { } } -function getSchemaType(schema, module, { destination, templateDir = 'types', link = false, code = false, asPath = false, event = false, result = false, expandEnums = true, baseUrl = '', namespace = false } = {}) { +function getSchemaType(schema, module, { destination, templateDir = 'types', link = false, code = false, asPath = false, event = false, result = false, expandEnums = true, baseUrl = '', namespace = false, name = '' } = {}) { const wrap = (str, wrapper) => wrapper + str + wrapper schema = sanitize(schema) @@ -479,8 +527,9 @@ function getSchemaType(schema, module, { destination, templateDir = 'types', lin if (schema['$ref']) { if (schema['$ref'][0] === '#') { const refSchema = getPath(schema['$ref'], module) + const refName = refSchema.title || schema['$ref'].split('/').pop() const includeNamespace = (module.info.title !== getXSchemaGroup(refSchema, module)) - return getSchemaType(refSchema, module, {destination, templateDir, link, title, code, asPath, event, result, expandEnums, baseUrl, namespace:includeNamespace })// { link: link, code: code, destination }) + return getSchemaType(refSchema, module, {destination, templateDir, link, title, code, asPath, event, result, expandEnums, baseUrl, namespace:includeNamespace, name:refName })// { link: link, code: code, destination }) } else { // TODO: This never happens... but might be worth keeping in case we link to an opaque external schema at some point? @@ -640,8 +689,9 @@ export default { setConvertTuples, setAllocatedPrimitiveProxies, getMethodSignatureParams, + getMethodSignatureResult, getSchemaShape, getSchemaType, getJsonType, getSchemaInstantiation -} \ No newline at end of file +} From 058c9713a8e398148d280859e42c4d8b1c47560c Mon Sep 17 00:00:00 2001 From: HaseenaSainul Date: Tue, 10 Oct 2023 00:46:57 -0400 Subject: [PATCH 2/5] CPPSDK: review comments updated --- .../cpp/templates/json-types/anyOfSchema.h | 1 - .../cpp/templates/json-types/anyOfSchemaShape.h | 1 + languages/cpp/templates/types/anyOfSchema.h | 1 - .../cpp/templates/types/anyOfSchemaShape.h | 1 + .../templates/types/tuple-delimiter.mjs | 1 + src/macrofier/engine.mjs | 2 +- src/macrofier/types.mjs | 17 +++++++---------- 7 files changed, 11 insertions(+), 13 deletions(-) delete mode 100644 languages/cpp/templates/json-types/anyOfSchema.h create mode 100644 languages/cpp/templates/json-types/anyOfSchemaShape.h delete mode 100644 languages/cpp/templates/types/anyOfSchema.h create mode 100644 languages/cpp/templates/types/anyOfSchemaShape.h create mode 100644 languages/javascript/templates/types/tuple-delimiter.mjs diff --git a/languages/cpp/templates/json-types/anyOfSchema.h b/languages/cpp/templates/json-types/anyOfSchema.h deleted file mode 100644 index cc2ecb63..00000000 --- a/languages/cpp/templates/json-types/anyOfSchema.h +++ /dev/null @@ -1 +0,0 @@ -SKIP diff --git a/languages/cpp/templates/json-types/anyOfSchemaShape.h b/languages/cpp/templates/json-types/anyOfSchemaShape.h new file mode 100644 index 00000000..9a53ff94 --- /dev/null +++ b/languages/cpp/templates/json-types/anyOfSchemaShape.h @@ -0,0 +1 @@ + /* anyOf schema shape is supported right now */ diff --git a/languages/cpp/templates/types/anyOfSchema.h b/languages/cpp/templates/types/anyOfSchema.h deleted file mode 100644 index cc2ecb63..00000000 --- a/languages/cpp/templates/types/anyOfSchema.h +++ /dev/null @@ -1 +0,0 @@ -SKIP diff --git a/languages/cpp/templates/types/anyOfSchemaShape.h b/languages/cpp/templates/types/anyOfSchemaShape.h new file mode 100644 index 00000000..9a53ff94 --- /dev/null +++ b/languages/cpp/templates/types/anyOfSchemaShape.h @@ -0,0 +1 @@ + /* anyOf schema shape is supported right now */ diff --git a/languages/javascript/templates/types/tuple-delimiter.mjs b/languages/javascript/templates/types/tuple-delimiter.mjs new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/languages/javascript/templates/types/tuple-delimiter.mjs @@ -0,0 +1 @@ + diff --git a/src/macrofier/engine.mjs b/src/macrofier/engine.mjs index 7c9e6ba9..80173a48 100644 --- a/src/macrofier/engine.mjs +++ b/src/macrofier/engine.mjs @@ -120,7 +120,7 @@ const getLinkForSchema = (schema, json, { name = '' } = {}) => { const dirs = config.createModuleDirectories const copySchemasIntoModules = config.copySchemasIntoModules - const type = types.getSchemaType(schema, json, { name: name, templateDir: state.typeTemplateDir, destination: state.destination, section: state.section }) + const type = types.getSchemaType(schema, json, { templateDir: state.typeTemplateDir, destination: state.destination, section: state.section }) // local - insert a bogus link, that we'll update later based on final table-of-contents if (json.components.schemas[type]) { diff --git a/src/macrofier/types.mjs b/src/macrofier/types.mjs index d12cc940..9035ddd0 100644 --- a/src/macrofier/types.mjs +++ b/src/macrofier/types.mjs @@ -142,7 +142,7 @@ function insertSchemaMacros(content, schema, module, name, parent, property, rec // .replace(/\$\{type.link\}/g, getLinkForSchema(schema, module, { name: title })) if (recursive) { - content = content.replace(/\$\{type\}/g, getSchemaType(schema, module, { name: title, destination: state.destination, section: state.section, code: false })) + content = content.replace(/\$\{type\}/g, getSchemaType(schema, module, { destination: state.destination, section: state.section, code: false })) } return content } @@ -282,7 +282,7 @@ const insertTupleMacros = (content, schema, module, title, options) => { const itemsTemplate = getTemplate(path.join(options.templateDir, 'items')) const propIndent = (content.split('\n').find(line => line.includes("${properties}")) || '').match(/^\s+/) || [''][0] const itemsIndent = (content.split('\n').find(line => line.includes("${items}")) || '').match(/^\s+/) || [''][0] - const delimiter = getTemplate(path.join(options.templateDir, 'delimiter')) + const tupleDelimiter = getTemplate(path.join(options.templateDir, 'tuple-delimiter')) const doMacroWork = (str, prop, i, indent) => { const schemaShape = getSchemaShape(prop, module, options) @@ -299,8 +299,8 @@ const insertTupleMacros = (content, schema, module, title, options) => { .replace(/\$\{if\.optional\}(.*?)\$\{end\.if\.optional\}/gms, '') } - content = content.replace(/\$\{properties\}/g, schema.items.map((prop, i) => doMacroWork(propTemplate, prop, i, propIndent)).join(delimiter)) - content = content.replace(/\$\{items\}/g, schema.items.map((prop, i) => doMacroWork(itemsTemplate, prop, i, itemsIndent)).join(delimiter)) + content = content.replace(/\$\{properties\}/g, schema.items.map((prop, i) => doMacroWork(propTemplate, prop, i, propIndent)).join(tupleDelimiter)) + content = content.replace(/\$\{items\}/g, schema.items.map((prop, i) => doMacroWork(itemsTemplate, prop, i, itemsIndent)).join(tupleDelimiter)) return content } @@ -394,12 +394,10 @@ function getSchemaShape(schema = {}, module = {}, { templateDir = 'types', name return insertSchemaMacros(result, schema, module, theTitle, parent, property) } else if (schema.anyOf || schema.oneOf) { - const template = getTemplate(path.join(templateDir, 'anyOfSchema' + suffix)) + const template = getTemplate(path.join(templateDir, 'anyOfSchemaShape' + suffix)) let shape if (template) { - if (!template.includes('SKIP')) { shape = insertAnyOfMacros(template, schema, module, theTitle) - } } else { // borrow anyOf logic, note that schema is a copy, so we're not breaking it. @@ -512,7 +510,7 @@ const isSupportedTuple = schema => { } } -function getSchemaType(schema, module, { destination, templateDir = 'types', link = false, code = false, asPath = false, event = false, result = false, expandEnums = true, baseUrl = '', namespace = false, name = '' } = {}) { +function getSchemaType(schema, module, { destination, templateDir = 'types', link = false, code = false, asPath = false, event = false, result = false, expandEnums = true, baseUrl = '', namespace = false } = {}) { const wrap = (str, wrapper) => wrapper + str + wrapper schema = sanitize(schema) @@ -527,9 +525,8 @@ function getSchemaType(schema, module, { destination, templateDir = 'types', lin if (schema['$ref']) { if (schema['$ref'][0] === '#') { const refSchema = getPath(schema['$ref'], module) - const refName = refSchema.title || schema['$ref'].split('/').pop() const includeNamespace = (module.info.title !== getXSchemaGroup(refSchema, module)) - return getSchemaType(refSchema, module, {destination, templateDir, link, title, code, asPath, event, result, expandEnums, baseUrl, namespace:includeNamespace, name:refName })// { link: link, code: code, destination }) + return getSchemaType(refSchema, module, {destination, templateDir, link, code, asPath, event, result, expandEnums, baseUrl, namespace:includeNamespace })// { link: link, code: code, destination }) } else { // TODO: This never happens... but might be worth keeping in case we link to an opaque external schema at some point? From 399d97e6d09f628317f7bafecffe054b777734f2 Mon Sep 17 00:00:00 2001 From: HaseenaSainul Date: Tue, 10 Oct 2023 06:05:08 -0400 Subject: [PATCH 3/5] CPPSDK: any of type updated with cpp type --- languages/cpp/templates/types/anyOf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/cpp/templates/types/anyOf.c b/languages/cpp/templates/types/anyOf.c index ee8a39c3..c6d1c815 100644 --- a/languages/cpp/templates/types/anyOf.c +++ b/languages/cpp/templates/types/anyOf.c @@ -1 +1 @@ -string +std::string \ No newline at end of file From 12c05621be07f5785215480aee465656c9401424 Mon Sep 17 00:00:00 2001 From: HaseenaSainul Date: Tue, 10 Oct 2023 06:28:07 -0400 Subject: [PATCH 4/5] CPPSDK: getMethodSignatureResult updates based on latest changes --- .../cpp/templates/result-callback/default.h | 1 + .../templates/result-callback/nonprimitive.h | 1 + .../cpp/templates/result-callback/string.h | 1 + languages/cpp/templates/result/default.h | 1 + src/macrofier/engine.mjs | 4 +-- src/macrofier/types.mjs | 28 +++++++++++-------- 6 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 languages/cpp/templates/result-callback/default.h create mode 100644 languages/cpp/templates/result-callback/nonprimitive.h create mode 100644 languages/cpp/templates/result-callback/string.h create mode 100644 languages/cpp/templates/result/default.h diff --git a/languages/cpp/templates/result-callback/default.h b/languages/cpp/templates/result-callback/default.h new file mode 100644 index 00000000..d66fdb8a --- /dev/null +++ b/languages/cpp/templates/result-callback/default.h @@ -0,0 +1 @@ +const ${method.result.type} \ No newline at end of file diff --git a/languages/cpp/templates/result-callback/nonprimitive.h b/languages/cpp/templates/result-callback/nonprimitive.h new file mode 100644 index 00000000..84b86816 --- /dev/null +++ b/languages/cpp/templates/result-callback/nonprimitive.h @@ -0,0 +1 @@ +const ${method.result.type}& \ No newline at end of file diff --git a/languages/cpp/templates/result-callback/string.h b/languages/cpp/templates/result-callback/string.h new file mode 100644 index 00000000..84b86816 --- /dev/null +++ b/languages/cpp/templates/result-callback/string.h @@ -0,0 +1 @@ +const ${method.result.type}& \ No newline at end of file diff --git a/languages/cpp/templates/result/default.h b/languages/cpp/templates/result/default.h new file mode 100644 index 00000000..d66fdb8a --- /dev/null +++ b/languages/cpp/templates/result/default.h @@ -0,0 +1 @@ +const ${method.result.type} \ No newline at end of file diff --git a/src/macrofier/engine.mjs b/src/macrofier/engine.mjs index 80173a48..b5527ac6 100644 --- a/src/macrofier/engine.mjs +++ b/src/macrofier/engine.mjs @@ -1207,7 +1207,7 @@ function insertMethodMacros(template, methodObj, json, templates, examples = {}) // todo: what does prefix do in Types.mjs? need to account for it somehow const callbackResultJsonType = event && result.schema ? types.getSchemaType(result.schema, json, { name: result.name, prefix: method.alternative, templateDir: 'json-types' }) : '' - const pullsForParamType = pullsParams ? types.getSchemaType(pullsParams, json, { destination: state.destination, section: state.section }) : '' + const pullsForParamType = pullsParams ? types.getSchemaType(pullsParams, json, { destination: state.destination, section: state.section }) : '' const pullsForJsonType = pullsResult ? types.getSchemaType(pullsResult, json, { name: result.name, templateDir: 'json-types' }) : '' const pullsForParamJsonType = pullsParams ? types.getSchemaType(pullsParams, json, { name: pullsParams.title , templateDir: 'json-types' }) : '' @@ -1289,7 +1289,7 @@ function insertMethodMacros(template, methodObj, json, templates, examples = {}) .replace(/\$\{method\.result\.type\}/g, types.getSchemaType(result.schema, json, { name: result.name, templateDir: state.typeTemplateDir, title: true, asPath: false, destination: state.destination, result: true })) //, baseUrl: options.baseUrl .replace(/\$\{method\.result\.json\}/, types.getSchemaType(result.schema, json, { name: result.name, templateDir: 'json-types', destination: state.destination, section: state.section, title: true, code: false, link: false, asPath: false, expandEnums: false, namespace: true })) // todo: what does prefix do? - .replace(/\$\{event\.result\.type\}/g, isEventMethod(methodObj) ? types.getMethodSignatureResult(event, json, { destination: state.destination, section: state.section }) : '') + .replace(/\$\{event\.result\.type\}/g, isEventMethod(methodObj) ? types.getMethodSignatureResult(event, json, { destination: state.destination, section: state.section, callback: true }) : '') .replace(/\$\{event\.result\.json\.type\}/g, resultJsonType) .replace(/\$\{event\.result\.json\.type\}/g, callbackResultJsonType) .replace(/\$\{event\.pulls\.param\.name\}/g, pullsEventParamName) diff --git a/src/macrofier/types.mjs b/src/macrofier/types.mjs index 4ac00b73..996d8a7d 100644 --- a/src/macrofier/types.mjs +++ b/src/macrofier/types.mjs @@ -78,22 +78,26 @@ function getMethodSignatureParams(method, module, { destination, callback }) { }).join(', ') } -function getMethodSignatureResult(method, module, { destination, callback }) { +function getMethodSignatureResult(method, module, { destination, callback, overrideRule = false }) { let type = getSchemaType(method.result.schema, module, { destination, namespace : true }) - let result = '' - let jsonType = getJsonType(method.result.schema, module, { destination }) - if (!isVoid(type) && !isPrimitiveType(jsonType) && getTemplate('/result/nonprimitive')) { - result = getTemplate('/result/nonprimitive') - } - else if ((jsonType === 'string') && getTemplate('/result/string')) { - result = getTemplate('/result/string') + if (callback) { + let jsonType = getJsonType(method.result.schema, module, { destination }) + + if (!isVoid(type) && !isPrimitiveType(jsonType) && getTemplate('/result-callback/nonprimitive')) { + result = getTemplate('/result-callback/nonprimitive') + } + else if ((jsonType === 'string') && getTemplate('/result-callback/string')) { + result = getTemplate('/result-callback/string') + } + else { + result = getTemplate('/result-callback/default') + } } else { result = getTemplate('/result/default') } - return result.replace(/\$\{method\.result\.type\}/g, type) } @@ -230,7 +234,7 @@ const insertObjectMacros = (content, schema, module, title, property, options) = } // TODO: add language config feature for 'unknown' type let type; // = { type: "null" } - + if (schema.additionalProperties && (typeof schema.additionalProperties === 'object')) { type = schema.additionalProperties } @@ -243,7 +247,7 @@ const insertObjectMacros = (content, schema, module, title, property, options) = } }) } - + if (type) { options2.property = prop const schemaShape = getSchemaShape(type, module, options2) @@ -354,7 +358,7 @@ function getSchemaShape(schema = {}, module = {}, { templateDir = 'types', name if (level === 0 && !schema.title) { return '' } - + const suffix = destination && ('.' + destination.split('.').pop()) || '' const theTitle = insertSchemaMacros(getTemplate(path.join(templateDir, 'title' + suffix)), schema, module, schema.title || name, parent, property, false) From ce2008aadfc716a1a9a8d9ac6bbdd2dd78f13a8e Mon Sep 17 00:00:00 2001 From: HaseenaSainul Date: Fri, 13 Oct 2023 01:49:20 -0400 Subject: [PATCH 5/5] CPPSDK: template extension changed --- languages/cpp/templates/json-types/{anyOf.c => anyOf.h} | 0 languages/cpp/templates/types/{anyOf.c => anyOf.h} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename languages/cpp/templates/json-types/{anyOf.c => anyOf.h} (100%) rename languages/cpp/templates/types/{anyOf.c => anyOf.h} (100%) diff --git a/languages/cpp/templates/json-types/anyOf.c b/languages/cpp/templates/json-types/anyOf.h similarity index 100% rename from languages/cpp/templates/json-types/anyOf.c rename to languages/cpp/templates/json-types/anyOf.h diff --git a/languages/cpp/templates/types/anyOf.c b/languages/cpp/templates/types/anyOf.h similarity index 100% rename from languages/cpp/templates/types/anyOf.c rename to languages/cpp/templates/types/anyOf.h