@atlaskit/editor-wikimarkup-transformer
Version:
Wiki markup transformer for JIRA and Confluence
55 lines (52 loc) • 2.25 kB
JavaScript
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;