{"version":3,"file":"index.cjs","sources":["../src/mdast-util-to-docx.ts","../src/plugin.ts"],"sourcesContent":["import {\n  Packer,\n  Document,\n  Paragraph,\n  Table,\n  TableRow,\n  TableCell,\n  TextRun,\n  ExternalHyperlink,\n  HeadingLevel,\n  LevelFormat,\n  AlignmentType,\n  type ILevelsOptions,\n  FootnoteReferenceRun,\n  type IPropertiesOptions,\n  sectionPageSizeDefaults,\n  sectionMarginDefaults,\n  type IRunOptions,\n  type IParagraphOptions,\n  PageBreak,\n  type ISectionPropertiesOptions,\n  type IIndentAttributesProperties,\n  type IStylesOptions,\n  type ITableOptions,\n  ImageRun,\n  type FileChild,\n} from \"docx\";\nimport type * as mdast from \"mdast\";\nimport { warnOnce } from \"./utils\";\nimport { definitions } from \"mdast-util-definitions\";\nimport deepmerge from \"deepmerge\";\nimport type {\n  Context,\n  DocxContent,\n  DocxImageData,\n  FootnoteRegistry,\n  ListContext,\n  NodeBuilder,\n  NodeBuilders,\n  RemarkDocxPlugin,\n  ThematicBreakType,\n  Writeable,\n} from \"./types\";\n\nconst BULLET_LIST_REF = \"bullet\";\nconst ORDERED_LIST_REF = \"ordered\";\nconst COMPLETE_TASK_LIST_REF = \"task-complete\";\nconst INCOMPLETE_TASK_LIST_REF = \"task-incomplete\";\nconst HYPERLINK_STYLE_ID = \"Hyperlink\";\n\nconst calcIndent = (i: number): IIndentAttributesProperties => {\n  const INDENT_UNIT = 10 * 40;\n  return { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) };\n};\n\nconst createFootnoteRegistry = (): FootnoteRegistry => {\n  const idToInternalId = new Map<string, number>();\n  const defs = new Map<number, Paragraph[]>();\n\n  return {\n    id: (id) => {\n      let internalId = idToInternalId.get(id);\n      if (internalId == null) {\n        idToInternalId.set(id, (internalId = idToInternalId.size + 1));\n      }\n      return internalId;\n    },\n    set: (id, def) => {\n      defs.set(id, def);\n    },\n    toConfig: () => {\n      return defs.entries().reduce(\n        (acc, [key, def]) => {\n          acc[key] = { children: def };\n          return acc;\n        },\n        {} as {\n          [key: string]: { children: Paragraph[] };\n        },\n      );\n    },\n  };\n};\n\ntype ListFormat = {\n  format: keyof typeof LevelFormat;\n  text: string;\n};\n\ntype OrderedListRegistry = {\n  createId: () => string;\n  getIds: () => string[];\n};\nconst createOrderedListRegistry = (): OrderedListRegistry => {\n  let counter = 1;\n\n  const ids: string[] = [];\n\n  return {\n    createId: () => {\n      const id = `${ORDERED_LIST_REF}-${counter++}`;\n      ids.push(id);\n      return id;\n    },\n    getIds: () => {\n      return ids;\n    },\n  };\n};\n\nconst composeBuilders = (\n  pluginsBuilders: readonly NodeBuilders[],\n  defaultBuilders: NodeBuilders,\n): NodeBuilders => {\n  return pluginsBuilders.reduceRight<NodeBuilders>((acc, p) => {\n    type Key = keyof typeof p;\n    for (const [k, cur] of Object.entries(p)) {\n      const prev = acc[k as Key];\n      acc[k as Key] = (\n        prev\n          ? (n, c) => {\n            const r = cur(n as any, c);\n            if (r) {\n              return r;\n            }\n            return prev(n as any, c);\n          }\n          : cur\n      ) as NodeBuilder<any>;\n    }\n    return acc;\n  }, defaultBuilders);\n};\n\nconst buildLevels = (formats: readonly ListFormat[]): ILevelsOptions[] => {\n  return formats.map(({ format, text }, i) => {\n    return {\n      level: i,\n      format: LevelFormat[format],\n      text: text,\n      alignment: AlignmentType.LEFT,\n      style: {\n        paragraph: {\n          indent: calcIndent(i),\n        },\n      },\n    };\n  });\n};\n\nconst docxParagraph = (\n  options: Writeable<IParagraphOptions>,\n  ctx: Context,\n): Paragraph => {\n  if (ctx.quote != null) {\n    options.indent = calcIndent(ctx.quote + 1);\n  }\n\n  if (ctx.list) {\n    const { level, meta } = ctx.list;\n    if (meta.type === \"task\") {\n      options.numbering = {\n        reference: meta.checked\n          ? COMPLETE_TASK_LIST_REF\n          : INCOMPLETE_TASK_LIST_REF,\n        level,\n      };\n    } else if (meta.type === \"ordered\") {\n      options.numbering = {\n        reference: meta.reference,\n        level,\n      };\n    } else {\n      options.numbering = {\n        reference: BULLET_LIST_REF,\n        level,\n      };\n    }\n  }\n\n  if (ctx.rtl) {\n    options.bidirectional = true;\n  }\n\n  return new Paragraph(options);\n};\n\nexport interface DocxOptions extends Pick<\n  IPropertiesOptions,\n  | \"title\"\n  | \"subject\"\n  | \"creator\"\n  | \"keywords\"\n  | \"description\"\n  | \"styles\"\n  | \"background\"\n> {\n  /**\n   * Page size defined in twip (1 twip == 1/1440 inch).\n   * @default A4 ({@link sectionPageSizeDefaults})\n   */\n  size?: { width?: number; height?: number };\n  /**\n   * Page margin defined in twip (1 twip == 1/1440 inch).\n   * @default 1 inch ({@link sectionMarginDefaults})\n   */\n  margin?: { top?: number; left?: number; bottom?: number; right?: number };\n  /**\n   * Page orientation.\n   * @default \"portrait\"\n   */\n  orientation?: \"portrait\" | \"landscape\";\n  /**\n   * Number of page columns.\n   * @default 1\n   */\n  columns?: number;\n  /**\n   * Spacing after Paragraphs in twip (1 twip == 1/1440 inch).\n   * @default 0\n   */\n  spacing?: number;\n  /**\n   * Direction of texts.\n   * @default \"ltr\"\n   */\n  direction?: \"ltr\" | \"rtl\" | \"vertical\";\n  /**\n   * An option to override the text format of ordered list.\n   * See https://docx.js.org/#/usage/numbering?id=level-options for more details.\n   */\n  orderedListFormat?: ListFormat[];\n  /**\n   * An option to select how thematicBreak works.\n   *\n   * - \"page\": Page Break\n   * - \"section\": Section Break\n   * - \"line\": Horizontal line\n   * @default \"page\"\n   */\n  thematicBreak?: ThematicBreakType;\n  /**\n   * Plugins to customize how mdast nodes are compiled.\n   */\n  plugins?: RemarkDocxPlugin[];\n}\n\nexport const mdastToDocx = async (\n  node: mdast.Root,\n  {\n    plugins = [],\n    title,\n    subject,\n    creator,\n    keywords,\n    description,\n    styles,\n    size,\n    margin,\n    orientation,\n    columns,\n    spacing,\n    direction,\n    background,\n    thematicBreak = \"page\",\n    orderedListFormat,\n  }: DocxOptions = {},\n): Promise<ArrayBuffer> => {\n  const definition = definitions(node);\n\n  const ordered = createOrderedListRegistry();\n  const footnote = createFootnoteRegistry();\n\n  const images = new Map<string, DocxImageData>();\n  const pluginCtx = { root: node, images, definition };\n\n  const builders = composeBuilders(\n    await Promise.all(plugins.map((p) => p(pluginCtx))),\n    {\n      paragraph: buildParagraph,\n      heading: buildHeading,\n      thematicBreak: buildThematicBreak,\n      blockquote: buildBlockquote,\n      list: buildList,\n      listItem: buildListItem,\n      table: buildTable,\n      tableRow: noop,\n      tableCell: noop,\n      html: fallbackText,\n      code: fallbackText,\n      definition: noop,\n      footnoteDefinition: buildFootnoteDefinition,\n      text: buildText,\n      emphasis: buildEmphasis,\n      strong: buildStrong,\n      delete: buildDelete,\n      inlineCode: buildInlineCode,\n      break: buildBreak,\n      link: buildLink,\n      linkReference: buildLinkReference,\n      image: buildImage,\n      imageReference: buildImageReference,\n      footnoteReference: buildFootnoteReference,\n      math: fallbackText,\n      inlineMath: fallbackText,\n    },\n  );\n\n  const renderNode = (\n    node: mdast.RootContent,\n    c: Context,\n  ): DocxContent[] | null => {\n    const builder = builders[node.type];\n    if (!builder) {\n      warnOnce(`${node.type} node is not supported without plugins.`);\n      return null;\n    }\n    const r = builder(node as any, c);\n    if (r) {\n      if (Array.isArray(r)) {\n        return r;\n      } else {\n        return [r];\n      }\n    }\n    return null;\n  };\n\n  let { WIDTH: pageWidth, HEIGHT: pageHeight } = sectionPageSizeDefaults;\n  if (size) {\n    if (size.width != null) {\n      pageWidth = size.width;\n    }\n    if (size.height != null) {\n      pageHeight = size.height;\n    }\n  }\n  let {\n    TOP: marginTop,\n    LEFT: marginLeft,\n    BOTTOM: marginBottom,\n    RIGHT: marginRight,\n  } = sectionMarginDefaults;\n  if (margin) {\n    if (margin.top != null) {\n      marginTop = margin.top;\n    }\n    if (margin.left != null) {\n      marginLeft = margin.left;\n    }\n    if (margin.bottom != null) {\n      marginBottom = margin.bottom;\n    }\n    if (margin.right != null) {\n      marginRight = margin.right;\n    }\n  }\n\n  const ctx: Context = {\n    render(nodes, c) {\n      const results: DocxContent[] = [];\n      for (const node of nodes) {\n        const r = renderNode(node, c ?? this);\n        if (r) {\n          results.push(...r);\n        }\n      }\n      return results;\n    },\n    width: pageWidth - marginLeft - marginRight,\n    style: {},\n    thematicBreak,\n    rtl: direction === \"rtl\",\n    definition: definition,\n    images,\n    footnote,\n    orderedId: ordered.createId,\n  };\n\n  const sections: DocxContent[][] = [[]];\n  for (const n of node.children) {\n    const r = renderNode(n, ctx);\n    if (r) {\n      if (!r.length) {\n        // thematicBreak\n        sections.push([]);\n      } else {\n        const lastSection = sections[sections.length - 1]!;\n        lastSection.push(...r);\n      }\n    }\n  }\n\n  const orderedLevels = buildLevels(\n    orderedListFormat ?? [\n      { text: \"%1.\", format: \"DECIMAL\" },\n      { text: \"%2.\", format: \"DECIMAL\" },\n      { text: \"%3.\", format: \"DECIMAL\" },\n      { text: \"%4.\", format: \"DECIMAL\" },\n      { text: \"%5.\", format: \"DECIMAL\" },\n      { text: \"%6.\", format: \"DECIMAL\" },\n    ],\n  );\n\n  const sectionProperties: ISectionPropertiesOptions = {\n    column: columns ? { count: columns } : undefined,\n    page: {\n      textDirection: direction === \"vertical\" ? \"tbRl\" : undefined,\n      size: { width: pageWidth, height: pageHeight, orientation },\n      margin: {\n        top: marginTop,\n        left: marginLeft,\n        bottom: marginBottom,\n        right: marginRight,\n      },\n    },\n  };\n\n  const doc = new Document({\n    title,\n    subject,\n    creator,\n    keywords,\n    description,\n    styles: deepmerge<IStylesOptions>(\n      {\n        default: {\n          document: {\n            paragraph: {\n              spacing: spacing ? { after: spacing } : undefined,\n            },\n          },\n        },\n      },\n      styles || {},\n    ),\n    background,\n    sections: sections\n      .filter((s) => s.length)\n      .map((s) => ({\n        properties: sectionProperties,\n        children: s as FileChild[],\n      })),\n    footnotes: footnote.toConfig(),\n    numbering: {\n      config: [\n        {\n          reference: BULLET_LIST_REF,\n          levels: buildLevels([\n            { text: \"\\u25CF\", format: \"BULLET\" },\n            { text: \"\\u25CB\", format: \"BULLET\" },\n            { text: \"\\u25A0\", format: \"BULLET\" },\n            { text: \"\\u25CF\", format: \"BULLET\" },\n            { text: \"\\u25CB\", format: \"BULLET\" },\n            { text: \"\\u25A0\", format: \"BULLET\" },\n          ]),\n        },\n        ...ordered.getIds().map((ref) => ({\n          reference: ref,\n          levels: orderedLevels,\n        })),\n        {\n          reference: COMPLETE_TASK_LIST_REF,\n          levels: buildLevels([\n            { text: \"\\u2611\", format: \"BULLET\" },\n            { text: \"\\u2611\", format: \"BULLET\" },\n            { text: \"\\u2611\", format: \"BULLET\" },\n            { text: \"\\u2611\", format: \"BULLET\" },\n            { text: \"\\u2611\", format: \"BULLET\" },\n            { text: \"\\u2611\", format: \"BULLET\" },\n          ]),\n        },\n        {\n          reference: INCOMPLETE_TASK_LIST_REF,\n          levels: buildLevels([\n            { text: \"\\u2610\", format: \"BULLET\" },\n            { text: \"\\u2610\", format: \"BULLET\" },\n            { text: \"\\u2610\", format: \"BULLET\" },\n            { text: \"\\u2610\", format: \"BULLET\" },\n            { text: \"\\u2610\", format: \"BULLET\" },\n            { text: \"\\u2610\", format: \"BULLET\" },\n          ]),\n        },\n      ],\n    },\n  });\n\n  // HACK: docx.js has no option to remove default numbering definitions from .docx. So do it here for now.\n  // https://github.com/dolanmiu/docx/blob/master/src/file/numbering/numbering.ts\n  const defaultBulletKey = \"default-bullet-numbering\";\n  const _numbering = (doc as any).numbering;\n  _numbering.abstractNumberingMap.delete(defaultBulletKey);\n  _numbering.concreteNumberingMap.delete(defaultBulletKey);\n\n  return Packer.toArrayBuffer(doc);\n};\n\nconst buildParagraph: NodeBuilder<\"paragraph\"> = ({ children }, ctx) => {\n  return docxParagraph(\n    {\n      children: ctx.render(children),\n    },\n    ctx,\n  );\n};\n\nconst buildHeading: NodeBuilder<\"heading\"> = ({ children, depth }, ctx) => {\n  let level: keyof typeof HeadingLevel;\n  switch (depth) {\n    case 1:\n      level = \"TITLE\";\n      break;\n    case 2:\n      level = \"HEADING_1\";\n      break;\n    case 3:\n      level = \"HEADING_2\";\n      break;\n    case 4:\n      level = \"HEADING_3\";\n      break;\n    case 5:\n      level = \"HEADING_4\";\n      break;\n    case 6:\n      level = \"HEADING_5\";\n      break;\n  }\n  return docxParagraph(\n    {\n      heading: HeadingLevel[level],\n      outlineLevel: depth - 1,\n      children: ctx.render(children),\n    },\n    ctx,\n  );\n};\n\nconst buildThematicBreak: NodeBuilder<\"thematicBreak\"> = (_, ctx) => {\n  switch (ctx.thematicBreak) {\n    case \"page\": {\n      return new Paragraph({ children: [new PageBreak()] });\n    }\n    case \"section\": {\n      // Returning empty array at toplevel means section insertion.\n      return [];\n    }\n    case \"line\": {\n      return new Paragraph({ thematicBreak: true });\n    }\n  }\n};\n\nconst buildBlockquote: NodeBuilder<\"blockquote\"> = ({ children }, ctx) => {\n  return ctx.render(children, {\n    ...ctx,\n    quote: ctx.quote == null ? 0 : ctx.quote + 1,\n  });\n};\n\nconst buildList: NodeBuilder<\"list\"> = ({ children, ordered }, ctx) => {\n  const parentList = ctx.list;\n\n  let meta: ListContext[\"meta\"];\n  if (ordered) {\n    meta = {\n      type: \"ordered\",\n      reference:\n        parentList && parentList.meta.type === \"ordered\"\n          ? parentList.meta.reference\n          : ctx.orderedId(),\n    };\n  } else {\n    meta = { type: \"bullet\" };\n  }\n\n  return ctx.render(children, {\n    ...ctx,\n    list: {\n      level: !parentList ? 0 : parentList.level + 1,\n      meta,\n    },\n  });\n};\n\nconst buildListItem: NodeBuilder<\"listItem\"> = ({ children, checked }, ctx) => {\n  let list = ctx.list;\n  if (list) {\n    // listItem must be the child of list\n    if (checked != null) {\n      list = {\n        level: list.level,\n        meta: {\n          type: \"task\",\n          checked,\n        },\n      };\n    }\n  }\n  return ctx.render(children, {\n    ...ctx,\n    list,\n  });\n};\n\nconst buildTable: NodeBuilder<\"table\"> = ({ children, align }, ctx) => {\n  const textAlign = align?.map((a): keyof typeof AlignmentType => {\n    switch (a) {\n      case \"left\":\n        return \"LEFT\";\n      case \"right\":\n        return \"RIGHT\";\n      case \"center\":\n        return \"CENTER\";\n      default:\n        return \"LEFT\";\n    }\n  });\n\n  const columnLength = children[0]!.children.length;\n  const columnWidth = ctx.width / columnLength;\n\n  const options: Writeable<ITableOptions> = {\n    columnWidths: Array.from({ length: columnLength }).map(() => columnWidth),\n    rows: children.map((r) => {\n      return new TableRow({\n        children: r.children.map((c, i) => {\n          return new TableCell({\n            width: { size: columnWidth, type: \"dxa\" },\n            children: [\n              new Paragraph({\n                alignment: AlignmentType[textAlign?.[i] ?? \"LEFT\"],\n                children: ctx.render(c.children, {\n                  ...ctx,\n                  // https://github.com/dolanmiu/docx/blob/master/demo/22-right-to-left-text.ts\n                  rtl: undefined,\n                }),\n              }),\n            ],\n          });\n        }),\n      });\n    }),\n  };\n\n  if (ctx.rtl) {\n    options.visuallyRightToLeft = true;\n  }\n\n  return new Table(options);\n};\n\nconst buildText: NodeBuilder<\"text\"> = ({ value }, { style, rtl }) => {\n  const options: Writeable<IRunOptions> = {\n    text: value,\n    bold: style.bold,\n    italics: style.italic,\n    strike: style.strike,\n  };\n  if (style.inlineCode) {\n    options.highlight = \"lightGray\";\n  }\n  if (style.link) {\n    // https://docx.js.org/#/usage/hyperlinks?id=styling-hyperlinks\n    options.style = HYPERLINK_STYLE_ID;\n  }\n  if (rtl) {\n    options.rightToLeft = true;\n  }\n\n  return new TextRun(options);\n};\n\nconst buildEmphasis: NodeBuilder<\"emphasis\"> = ({ children }, ctx) => {\n  return ctx.render(children, {\n    ...ctx,\n    style: { ...ctx.style, italic: true },\n  });\n};\n\nconst buildStrong: NodeBuilder<\"strong\"> = ({ children }, ctx) => {\n  return ctx.render(children, {\n    ...ctx,\n    style: { ...ctx.style, bold: true },\n  });\n};\n\nconst buildDelete: NodeBuilder<\"delete\"> = ({ children }, ctx) => {\n  return ctx.render(children, {\n    ...ctx,\n    style: { ...ctx.style, strike: true },\n  });\n};\n\nconst buildInlineCode: NodeBuilder<\"inlineCode\"> = ({ value }, ctx) => {\n  return buildText(\n    { type: \"text\", value },\n    {\n      ...ctx,\n      style: { ...ctx.style, inlineCode: true },\n    },\n  );\n};\n\nconst buildBreak: NodeBuilder<\"break\"> = () => {\n  return new TextRun({ text: \"\", break: 1 });\n};\n\nconst buildLink: NodeBuilder<\"link\"> = ({ children, url }, ctx) => {\n  if (url.startsWith(\"#\")) {\n    // TODO support anchor link\n    return ctx.render(children);\n  }\n  return new ExternalHyperlink({\n    link: url,\n    children: ctx.render(children, {\n      ...ctx,\n      style: { ...ctx.style, link: true },\n    }),\n  });\n};\n\nconst buildLinkReference: NodeBuilder<\"linkReference\"> = (\n  { children, identifier },\n  ctx,\n) => {\n  const def = ctx.definition(identifier);\n  if (def == null) {\n    return ctx.render(children);\n  }\n  return buildLink({ type: \"link\", children, url: def.url }, ctx);\n};\n\nconst buildImage: NodeBuilder<\"image\"> = (node, ctx) => {\n  const image = ctx.images.get(node.url);\n  if (!image) {\n    return null;\n  }\n\n  let { width, height } = image;\n  const pageWidthInch = ctx.width / 1440;\n  const DPI = 96;\n  const pageWidthPx = pageWidthInch * DPI;\n  if (width > pageWidthPx) {\n    const scale = pageWidthPx / width;\n    width *= scale;\n    height *= scale;\n  }\n\n  const altText =\n    node.alt || node.title\n      ? {\n        name: \"\",\n        description: node.alt ?? undefined,\n        title: node.title ?? undefined,\n      }\n      : undefined;\n\n  if (image.type === \"svg\") {\n    const { type, data, fallback } = image;\n    return new ImageRun({\n      type: type,\n      data: data,\n      transformation: {\n        width,\n        height,\n      },\n      // https://github.com/dolanmiu/docx/issues/1162#issuecomment-3228368003\n      fallback: { type: \"png\", data: fallback },\n      altText,\n    });\n  }\n\n  const { type, data } = image;\n  return new ImageRun({\n    type: type,\n    data: data,\n    transformation: {\n      width,\n      height,\n    },\n    altText,\n  });\n};\n\nconst buildImageReference: NodeBuilder<\"imageReference\"> = (node, ctx) => {\n  const def = ctx.definition(node.identifier);\n  if (def == null) {\n    return null;\n  }\n  return buildImage(\n    { type: \"image\", url: def.url, alt: node.alt, title: def.title },\n    ctx,\n  );\n};\n\nconst buildFootnoteDefinition: NodeBuilder<\"footnoteDefinition\"> = (\n  { children, identifier },\n  ctx,\n) => {\n  const contents = ctx.render(children).filter((c) => c instanceof Paragraph);\n  ctx.footnote.set(ctx.footnote.id(identifier), contents);\n  return null;\n};\n\nconst buildFootnoteReference: NodeBuilder<\"footnoteReference\"> = (\n  { identifier },\n  ctx,\n) => {\n  return new FootnoteReferenceRun(ctx.footnote.id(identifier));\n};\n\nconst noop = () => {\n  return null;\n};\n\nconst fallbackText = (node: { type: string; value: string }, ctx: Context) => {\n  warnOnce(\n    `${node.type} node is not supported without plugins, falling back to text.`,\n  );\n  return buildText({ type: \"text\", value: node.value }, ctx);\n};\n","import type { Plugin } from \"unified\";\nimport type { Root } from \"mdast\";\nimport { mdastToDocx, type DocxOptions } from \"./mdast-util-to-docx\";\n\nexport type { DocxOptions };\n\ndeclare module \"unified\" {\n  interface CompileResultMap {\n    docx: Promise<ArrayBuffer>;\n  }\n}\n\nconst plugin: Plugin<[DocxOptions?], Root, Promise<ArrayBuffer>> = function (\n  opts,\n) {\n  this.compiler = (node) => {\n    return mdastToDocx(node as Root, opts);\n  };\n};\nexport default plugin;\n"],"names":["LevelFormat","AlignmentType","Paragraph","definitions","warnOnce","sectionPageSizeDefaults","sectionMarginDefaults","Document","Packer","HeadingLevel","PageBreak","TableRow","TableCell","Table","TextRun","ExternalHyperlink","ImageRun","FootnoteReferenceRun"],"mappings":"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"}