diff --git a/packages/core/src/utils/fromString.ts b/packages/core/src/utils/fromString.ts new file mode 100644 index 00000000..5371abcc --- /dev/null +++ b/packages/core/src/utils/fromString.ts @@ -0,0 +1,15 @@ +export default function fromString(value: any) { + if (value.match(/^\d*(\.\d+)?$/)) { + return Number(value) + } + + if (value === 'true') { + return true + } + + if (value === 'false') { + return false + } + + return value +} diff --git a/packages/core/src/utils/injectExtensionAttributesToParseRule.ts b/packages/core/src/utils/injectExtensionAttributesToParseRule.ts index 0cd42dd6..185d7098 100644 --- a/packages/core/src/utils/injectExtensionAttributesToParseRule.ts +++ b/packages/core/src/utils/injectExtensionAttributesToParseRule.ts @@ -1,5 +1,6 @@ import { ParseRule } from 'prosemirror-model' import { ExtensionAttribute } from '../types' +import fromString from './fromString' /** * This function merges extension attributes into parserule attributes (`attrs` or `getAttrs`). @@ -29,7 +30,7 @@ export default function injectExtensionAttributesToParseRule(parseRule: ParseRul const attributes = item.attribute.parseHTML ? item.attribute.parseHTML(node as HTMLElement) || {} : { - [item.name]: (node as HTMLElement).getAttribute(item.name), + [item.name]: fromString((node as HTMLElement).getAttribute(item.name)), } const filteredAttributes = Object.fromEntries(Object.entries(attributes)