diff --git a/languages/cpp/templates/callback-initialization/tuple.cpp b/languages/cpp/templates/callback-initialization/tuple.cpp new file mode 100644 index 00000000..5cc23aca --- /dev/null +++ b/languages/cpp/templates/callback-initialization/tuple.cpp @@ -0,0 +1 @@ +${if.namespace.notsame}${parent.Title}::${end.if.namespace.notsame}${title} ${property}; \ No newline at end of file diff --git a/languages/cpp/templates/callback-result-instantiation/sub-property/array.cpp b/languages/cpp/templates/callback-result-instantiation/sub-property/array.cpp index c9775b99..bb379cb8 100644 --- a/languages/cpp/templates/callback-result-instantiation/sub-property/array.cpp +++ b/languages/cpp/templates/callback-result-instantiation/sub-property/array.cpp @@ -6,5 +6,5 @@ } }${end.if.optional}${if.non.optional}auto index((*proxyResponse)${Property.dependency}.${Property}.Elements()); while (index.Next() == true) { -${if.object}${items.with.indent}${end.if.object}${if.non.object} ${base.title}${property.dependency}${if.impl.optional}.value()${end.if.impl.optional}.${property}.value().push_back(index.Current().Value());${end.if.non.object} +${if.object}${items.with.indent}${end.if.object}${if.non.object} ${base.title}${property.dependency}${if.impl.optional}.value()${end.if.impl.optional}.${property}.push_back(index.Current().Value());${end.if.non.object} }${end.if.non.optional} diff --git a/languages/cpp/templates/sdk/scripts/install.sh b/languages/cpp/templates/sdk/scripts/install.sh index b31556a2..0f944aa8 100755 --- a/languages/cpp/templates/sdk/scripts/install.sh +++ b/languages/cpp/templates/sdk/scripts/install.sh @@ -5,20 +5,23 @@ usage() echo " -i install path" echo " -s sdk path" echo " -m module name. i.e, core/manage" + echo " -v sdk version" echo echo "usage: " - echo " ./install.sh -i path -s sdk path -m core" + echo " ./install.sh -i path -s sdk path -m core -v 1.2.0-next.2" } SdkPath=".." InstallPath=".." ModuleName="core" -while getopts i:s:m:h flag +Version=1.3.0-next.1 +while getopts i:s:m:v:h flag do case "${flag}" in i) InstallPath="${OPTARG}";; s) SdkPath="${OPTARG}";; m) ModuleName="${OPTARG}";; + v) Version="${OPTARG}";; h) usage && exit 1;; esac done @@ -40,8 +43,8 @@ GetVersion() Version=${array[2]} } -Version=0.0 -GetVersion + +# GetVersion ReleaseName=firebolt-${ModuleName}-native-sdk-${Version} ReleasePath=${InstallPath}/${ReleaseName} diff --git a/src/macrofier/types.mjs b/src/macrofier/types.mjs index 55ef7b7e..79613862 100644 --- a/src/macrofier/types.mjs +++ b/src/macrofier/types.mjs @@ -227,7 +227,7 @@ const insertEnumMacros = (content, schema, module, name, suffix, templateDir = " if (!value) { value = getTemplate(path.join(templateDir, 'unset' + suffix)) } - value ? values.push(template[i].replace(/\$\{key\}/g, getSafeEnumKeyName(value)) + value ? values.push(template[i].replace(/\$\{key\}/g, getSafeEnumKeyName(value, schema.enumKeyPrefix)) .replace(/\$\{value\}/g, value)) : '' }) template[i] = values.map((value, id) => { @@ -360,7 +360,7 @@ const insertObjectMacros = (content, schema, module, title, property, options) = .replace(/\$\{if\.base\.optional\}(.*?)\$\{end\.if\.base\.optional\}/gms, options.required ? '' : '$1') .replace(/\$\{if\.non\.object\}(.*?)\$\{end\.if\.non\.object\}/gms, isObject(localizedProp) ? '' : '$1') .replace(/\$\{if\.non\.array\}(.*?)\$\{end\.if\.non\.array\}/gms, (localizedProp.type === 'array') ? '' : '$1') - .replace(/\$\{if\.non\.anyOf\}(.*?)\$\{end\.if\.non\.anyOf\}/gms, (localizedProp.anyOf || localizedProp.anyOneOf) ? '' : '$1') + .replace(/\$\{if\.non\.anyOf\}(.*?)\$\{end\.if\.non\.anyOf\}/gms, (localizedProp.anyOf || localizedProp.oneOf) ? '' : '$1') .replace(/\$\{if\.non\.const\}(.*?)\$\{end\.if\.non\.const\}/gms, (typeof localizedProp.const === 'string') ? '' : '$1') let baseTitle = options.property diff --git a/src/shared/json-schema.mjs b/src/shared/json-schema.mjs index 5d1d3a27..b8c28fef 100644 --- a/src/shared/json-schema.mjs +++ b/src/shared/json-schema.mjs @@ -426,12 +426,19 @@ function mergeOneOf(schema) { return union(schema.oneOf) } -const getSafeEnumKeyName = (value) => value.split(':').pop() // use last portion of urn:style:values - .replace(/[\.\-]/g, '_') // replace dots and dashes - .replace(/\+/g, '_plus') // change + to _plus - .replace(/([a-z])([A-Z0-9])/g, '$1_$2') // camel -> snake case - .replace(/^([0-9]+(\.[0-9]+)?)/, 'v$1') // insert `v` in front of things that look like version numbers - .toUpperCase() +const getSafeEnumKeyName = function(value, keyPrefix = '') { + if (keyPrefix != '') { + value = keyPrefix + '_' + value + } + + let key = value.split(':').pop() // use last portion of urn:style:values + .replace(/\+/g, '_plus') // change + to _plus + .replace(/[\.\-\/\;]/g, '_') // replace special characters + .replace(/([a-z])([A-Z0-9])/g, '$1_$2') // camel -> snake case + .replace(/^([0-9]+\_([0-9]+)?)/, 'v$1') // insert `v` in front of things that look like version numbers + + return key.toUpperCase() +} export { getSchemaConstraints, diff --git a/src/validate/index.mjs b/src/validate/index.mjs index f9002554..94e127a2 100644 --- a/src/validate/index.mjs +++ b/src/validate/index.mjs @@ -108,7 +108,7 @@ const run = async ({ addFormats(ajv) // explicitly add our custom extensions so we can keep strict mode on (TODO: put these in a JSON config?) - ajv.addVocabulary(['x-method', 'x-this-param', 'x-additional-params', 'x-schemas', 'components', 'x-property']) + ajv.addVocabulary(['x-method', 'x-this-param', 'x-additional-params', 'x-schemas', 'components', 'x-property', 'enumKeyPrefix']) const firebolt = ajv.compile(fireboltOpenRpcSpec) const jsonschema = ajv.compile(jsonSchemaSpec)