UNPKG

@atlaskit/editor-wikimarkup-transformer

Version:

Wiki markup transformer for JIRA and Confluence

55 lines (52 loc) 2.25 kB
import { defaultSchema } from '@atlaskit/adf-schema/schema-default'; import { encode } from './encoder'; import AbstractTree from './parser/abstract-tree'; import { buildIssueKeyRegex } from './parser/tokenize/issue-key'; export class WikiMarkupTransformer { constructor(schema = defaultSchema) { this.schema = schema; } // [ADFS-725] Jira breaks if there are null chars it is easier to remove them here // The following has to be a regex to remove all instances of null instead of the first sanitizeWikiMarkup(wikiMarkup) { // Ignored via go/ees005 // eslint-disable-next-line require-unicode-regexp return wikiMarkup.replace(/\0/g, ''); } encode(node, context) { const wikiMarkup = encode(node, normalizeContextObject(context)); // [ADFS-725] Jira breaks if there are null chars it is easier to remove them here const sanitizedWikiMarkup = this.sanitizeWikiMarkup(wikiMarkup); return sanitizedWikiMarkup; } parse(wikiMarkup, context) { // [ADFS-725] Jira breaks if there are null chars it is easier to remove them here const sanitizedWikiMarkup = this.sanitizeWikiMarkup(wikiMarkup); const tree = new AbstractTree(this.schema, sanitizedWikiMarkup); return tree.getProseMirrorModel(this.buildContext(normalizeContextObject(context))); } buildContext(context) { return context ? { ...context, issueKeyRegex: context.conversion ? buildIssueKeyRegex(context.conversion.inlineCardConversion) : undefined } : {}; } } /** * Turns mentionConversion object keys to lowercase for case insensitivity matching * This is okay, because conversion context object contains mapping and that should be case insensitive */ const normalizeContextObject = context => { if (!context || !context.conversion || !context.conversion.mentionConversion) { // nothing to normalize, return original object return context; } const mentionConversion = {}; // eslint-disable-next-line guard-for-in for (const key in context.conversion.mentionConversion) { mentionConversion[key.toLowerCase()] = context.conversion.mentionConversion[key]; } context.conversion.mentionConversion = mentionConversion; return context; }; export default WikiMarkupTransformer;