From 768e66338556ef589966941f83d490795fda406e Mon Sep 17 00:00:00 2001 From: Pattra Audcharevorakul Date: Tue, 27 Aug 2024 16:51:38 -0400 Subject: [PATCH] Component manifests - Escape input strings --- .../generators/componentManifest/createActions.ts | 2 +- .../src/generators/componentManifest/docBlock.ts | 9 ++++++--- .../src/generators/componentManifest/getInputs.ts | 6 ++++-- .../src/generators/utils/escapeSpecialCharacters.ts | 12 ++++++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 packages/spectral/src/generators/utils/escapeSpecialCharacters.ts diff --git a/packages/spectral/src/generators/componentManifest/createActions.ts b/packages/spectral/src/generators/componentManifest/createActions.ts index d5c71e97..a0e75054 100644 --- a/packages/spectral/src/generators/componentManifest/createActions.ts +++ b/packages/spectral/src/generators/componentManifest/createActions.ts @@ -52,7 +52,7 @@ export const createActions = async ({ typeInterface: createTypeInterface(action.key ?? actionKey), import: createImport(action.key ?? actionKey), key: action.key || actionKey, - label: action.display.description, + label: action.display.label, description: action.display.description, inputs, }, diff --git a/packages/spectral/src/generators/componentManifest/docBlock.ts b/packages/spectral/src/generators/componentManifest/docBlock.ts index fbdba45f..3efe56b9 100644 --- a/packages/spectral/src/generators/componentManifest/docBlock.ts +++ b/packages/spectral/src/generators/componentManifest/docBlock.ts @@ -1,3 +1,4 @@ +import { escapeSpecialCharacters } from "../utils/escapeSpecialCharacters"; import { ServerTypeInput } from "./getInputs"; export const DOC_BLOCK_DEFAULT = (input: ServerTypeInput): string => { @@ -34,9 +35,11 @@ export const addLine = ({ key, value, raw }: AddLineProps) => { return ""; } - const sanitizedValue = JSON.stringify(value) - .replace(/(^"|"$)|(^'|'$)/g, "") - .trim(); + const sanitizedValue = escapeSpecialCharacters( + JSON.stringify(value) + .replace(/(^"|"$)|(^'|'$)/g, "") + .trim(), + ); return ` * ${key ? `@${key} ${sanitizedValue}` : sanitizedValue}\n`; }; diff --git a/packages/spectral/src/generators/componentManifest/getInputs.ts b/packages/spectral/src/generators/componentManifest/getInputs.ts index 040916cc..2670a682 100644 --- a/packages/spectral/src/generators/componentManifest/getInputs.ts +++ b/packages/spectral/src/generators/componentManifest/getInputs.ts @@ -1,5 +1,6 @@ import type { Input as InputBase } from "../../serverTypes"; import type { InputFieldDefinition } from "../../types/Inputs"; +import { escapeSpecialCharacters } from "../utils/escapeSpecialCharacters"; import { DOC_BLOCK_DEFAULT } from "./docBlock"; export type ServerTypeInput = InputBase & { @@ -25,11 +26,12 @@ interface GetInputsProps { } const getDefaultValue = (value: ServerTypeInput["default"]) => { - if (value === undefined || value === "" || typeof value === "string") { + if (value === undefined || value === "") { return value; } - return JSON.stringify(value); + const stringValue = typeof value === "string" ? value : JSON.stringify(value); + return escapeSpecialCharacters(stringValue); }; export const getInputs = ({ inputs, docBlock = DOC_BLOCK_DEFAULT }: GetInputsProps): Input[] => { diff --git a/packages/spectral/src/generators/utils/escapeSpecialCharacters.ts b/packages/spectral/src/generators/utils/escapeSpecialCharacters.ts new file mode 100644 index 00000000..edd0d2dc --- /dev/null +++ b/packages/spectral/src/generators/utils/escapeSpecialCharacters.ts @@ -0,0 +1,12 @@ +/** + * This regex targets common characters that may be included in default + * input values (code comment blocks, backticks, etc) and would cause + * component-manifest build issues. More characters may be added + * as discovered. + */ + +const escapeRegEx = /(\/|\\|\`|\$)/g; + +export const escapeSpecialCharacters = (value = ""): string => { + return value.replace(escapeRegEx, "\\$&"); +};