From 647043d59ea0399b725d32e4a2e48ee017965288 Mon Sep 17 00:00:00 2001 From: Jeremy LaCivita Date: Wed, 21 Aug 2024 13:28:10 -0400 Subject: [PATCH] fix: Quote unsafe property names in languages that support it --- languages/javascript/language.config.json | 1 + src/macrofier/types.mjs | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/languages/javascript/language.config.json b/languages/javascript/language.config.json index 19b4659d..6c5452f5 100644 --- a/languages/javascript/language.config.json +++ b/languages/javascript/language.config.json @@ -5,6 +5,7 @@ "/index.mjs", "/defaults.mjs" ], + "enableStringPropertyKeys": true, "createModuleDirectories": true, "copySchemasIntoModules": true, "aggregateFiles": [ diff --git a/src/macrofier/types.mjs b/src/macrofier/types.mjs index acfb0d9b..cba78534 100644 --- a/src/macrofier/types.mjs +++ b/src/macrofier/types.mjs @@ -317,6 +317,8 @@ const insertObjectPatternPropertiesMacros = (content, schema, module, title, opt } const getIndents = level => level ? ' ' : '' +const wrapProp = name => name.match(/[/\.\+]/) ? `"${name}"` : name +const safePropName = name => config.enableStringPropertyKeys ? wrapProp(name) : getSafeEnumKeyName(name) const insertObjectMacros = (content, schema, module, title, property, options) => { const options2 = options ? JSON.parse(JSON.stringify(options)) : {} options2.parent = title @@ -348,8 +350,8 @@ const insertObjectMacros = (content, schema, module, title, property, options) = const description = getSchemaDescription(prop, module) let replacedTemplate = template .replace(/(^\s+)/g, '$1'.repeat(options2.level)) - .replace(/\$\{property\}/g, name) - .replace(/\$\{Property\}/g, capitalize(name)) + .replace(/\$\{property\}/g, safePropName(name)) + .replace(/\$\{Property\}/g, capitalize(safePropName(name))) .replace(/\$\{parent\.title\}/g, title) .replace(/\$\{title\}/g, type) .replace(/\$\{shape\}/g, schemaShape)