{"version":3,"sources":["../src/text.ts"],"sourcesContent":["import escapeHtml from 'escape-html'\nimport { Editor, Text, Node } from '@editablejs/models'\n\nexport type TextSerializerTransform = typeof TextSerializer.transform\n\nexport interface TextSerializerOptions {}\n\nexport type TextSerializerWithTransform<T = TextSerializerOptions> = (\n  next: TextSerializerTransform,\n  serializer: typeof TextSerializer,\n  options: T,\n) => TextSerializerTransform\n\nexport interface EditorTextSerializerWithTransform<T = TextSerializerOptions> {\n  transform: TextSerializerWithTransform<T>\n  options: T\n}\n\nconst TEXT_SERIALIZER_TRANSFORMS: WeakMap<Editor, EditorTextSerializerWithTransform[]> =\n  new WeakMap()\n\nexport const TextSerializer = {\n  transform(node: Node): string {\n    if (Text.isText(node)) return escapeHtml(node.text)\n    const { children } = node\n    return children\n      .map(children => {\n        const text = this.transform(children)\n        return Editor.isEditor(node) ? text + '\\n' : text\n      })\n      .join('')\n  },\n\n  with<T = TextSerializerOptions>(transform: TextSerializerWithTransform<T>, options: T) {\n    const { transform: t } = this\n    this.transform = transform(t.bind(this), this, options)\n  },\n\n  withEditor<T = TextSerializerOptions>(\n    editor: Editor,\n    transform: TextSerializerWithTransform<T>,\n    options: T,\n  ) {\n    const fns = TEXT_SERIALIZER_TRANSFORMS.get(editor) ?? []\n    if (fns.find(fn => fn.transform === transform)) return\n    fns.push({\n      transform: transform as TextSerializerWithTransform,\n      options: options as TextSerializerOptions,\n    })\n    TEXT_SERIALIZER_TRANSFORMS.set(editor, fns)\n  },\n\n  transformWithEditor(editor: Editor, node: Node = editor): string {\n    const TextSerializerEditor = Object.assign({}, TextSerializer)\n    const transforms = TEXT_SERIALIZER_TRANSFORMS.get(editor) ?? []\n\n    for (const { transform, options } of transforms) {\n      TextSerializerEditor.with(transform, options)\n    }\n\n    return TextSerializerEditor.transform(node)\n  },\n}\n"],"mappings":";AAAA,OAAO,gBAAgB;AACvB,SAAS,QAAQ,YAAkB;AAiBnC,IAAM,6BACJ,oBAAI,QAAQ;AAEP,IAAM,iBAAiB;AAAA,EAC5B,UAAU,MAAoB;AAC5B,QAAI,KAAK,OAAO,IAAI;AAAG,aAAO,WAAW,KAAK,IAAI;AAClD,UAAM,EAAE,SAAS,IAAI;AACrB,WAAO,SACJ,IAAI,CAAAA,cAAY;AACf,YAAM,OAAO,KAAK,UAAUA,SAAQ;AACpC,aAAO,OAAO,SAAS,IAAI,IAAI,OAAO,OAAO;AAAA,IAC/C,CAAC,EACA,KAAK,EAAE;AAAA,EACZ;AAAA,EAEA,KAAgC,WAA2C,SAAY;AACrF,UAAM,EAAE,WAAW,EAAE,IAAI;AACzB,SAAK,YAAY,UAAU,EAAE,KAAK,IAAI,GAAG,MAAM,OAAO;AAAA,EACxD;AAAA,EAEA,WACE,QACA,WACA,SACA;AACA,UAAM,MAAM,2BAA2B,IAAI,MAAM,KAAK,CAAC;AACvD,QAAI,IAAI,KAAK,QAAM,GAAG,cAAc,SAAS;AAAG;AAChD,QAAI,KAAK;AAAA,MACP;AAAA,MACA;AAAA,IACF,CAAC;AACD,+BAA2B,IAAI,QAAQ,GAAG;AAAA,EAC5C;AAAA,EAEA,oBAAoB,QAAgB,OAAa,QAAgB;AAC/D,UAAM,uBAAuB,OAAO,OAAO,CAAC,GAAG,cAAc;AAC7D,UAAM,aAAa,2BAA2B,IAAI,MAAM,KAAK,CAAC;AAE9D,eAAW,EAAE,WAAW,QAAQ,KAAK,YAAY;AAC/C,2BAAqB,KAAK,WAAW,OAAO;AAAA,IAC9C;AAEA,WAAO,qBAAqB,UAAU,IAAI;AAAA,EAC5C;AACF;","names":["children"]}