remark-docx 0.3.19 → 0.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,15 +6,16 @@
6
6
 
7
7
  - Uses [docx](https://github.com/dolanmiu/docx) for compilation.
8
8
  - Works in any environment (e.g. browser, Node.js).
9
- - You can customize [mdast](https://github.com/syntax-tree/mdast) to Word transformation with plugin system.
9
+ - Provides reasonable default style and also tunable enough (WIP).
10
+ - Has own plugin system. You can fully customize markdown to Word transformation.
10
11
 
11
- ### Supported mdast nodes
12
+ ### Supported [mdast](https://github.com/syntax-tree/mdast) nodes
12
13
 
13
14
  Currently, some of the default styles may not be nice. If you have feature requests or improvements, please create a [issue](https://github.com/inokawa/remark-docx/issues) or [PR](https://github.com/inokawa/remark-docx/pulls).
14
15
 
15
16
  - [x] paragraph
16
17
  - [x] heading
17
- - [x] thematicBreak (rendered as Page Break/Section Break)
18
+ - [x] thematicBreak (rendered as Page Break / Section Break / Vertical line)
18
19
  - [x] blockquote
19
20
  - [x] list / listItem
20
21
  - [x] table / tableRow / tableCell
@@ -99,15 +100,26 @@ const processor = unified()
99
100
  .use(docx, { plugins: [imagePlugin()] });
100
101
  ```
101
102
 
102
- When we embed `svg` to docx, it also requires `png` image for compatibility reason. On browser, this plugin generate it automatically. On other enviroment like Node.js, please implement `fallbackSvg` prop.
103
+ URLs are resolved with [fetch API](https://developer.mozilla.org/docs/Web/API/Fetch_API) by default. You can use other methods such as file system.
104
+
105
+ ```javascript
106
+ import * as fs from "fs/promises";
107
+
108
+ imagePlugin({
109
+ load: async (url) => {
110
+ return (await fs.readFile(url)).buffer;
111
+ },
112
+ });
113
+ ```
114
+
115
+ When we embed `svg` to docx, it also requires `png` image since legacy Word can't render `svg`. On browser, this plugin generate it automatically. On other enviroment like Node.js, please implement `fallbackSvg` prop.
103
116
 
104
117
  ```javascript
105
118
  import sharp from "sharp";
106
119
 
107
120
  imagePlugin({
108
121
  fallbackSvg: async ({ buffer }) => {
109
- const png = await sharp(buffer).png().toBuffer();
110
- return png.buffer;
122
+ return (await sharp(buffer).png().toBuffer()).buffer;
111
123
  },
112
124
  });
113
125
  ```
package/lib/index.cjs CHANGED
@@ -1,38 +1,28 @@
1
1
  'use strict';
2
2
 
3
3
  var docx = require('docx');
4
+ var utils = require('./utils-19qN-XsS.js');
4
5
  var mdastUtilDefinitions = require('mdast-util-definitions');
5
6
 
6
- const alreadyWarned = {};
7
- /**
8
- * @internal
9
- */
10
- function warnOnce(message, cond = false) {
11
- if (!cond && !alreadyWarned[message]) {
12
- alreadyWarned[message] = true;
13
- console.warn(message);
14
- }
15
- }
16
-
17
7
  const BULLET_LIST_REF = "bullet";
18
8
  const ORDERED_LIST_REF = "ordered";
19
9
  const COMPLETE_TASK_LIST_REF = "task-complete";
20
10
  const INCOMPLETE_TASK_LIST_REF = "task-incomplete";
21
11
  const HYPERLINK_STYLE_ID = "Hyperlink";
22
- const INDENT = 0.5;
12
+ const calcIndent = (i) => {
13
+ const INDENT_UNIT = 10 * 40;
14
+ return { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) };
15
+ };
23
16
  const createFootnoteRegistry = () => {
24
17
  const idToInternalId = new Map();
25
18
  const defs = new Map();
26
- const getId = (id) => {
27
- let internalId = idToInternalId.get(id);
28
- if (internalId == null) {
29
- idToInternalId.set(id, (internalId = idToInternalId.size + 1));
30
- }
31
- return internalId;
32
- };
33
19
  return {
34
20
  id: (id) => {
35
- return getId(id);
21
+ let internalId = idToInternalId.get(id);
22
+ if (internalId == null) {
23
+ idToInternalId.set(id, (internalId = idToInternalId.size + 1));
24
+ }
25
+ return internalId;
36
26
  },
37
27
  set: (id, def) => {
38
28
  defs.set(id, def);
@@ -45,7 +35,7 @@ const createFootnoteRegistry = () => {
45
35
  },
46
36
  };
47
37
  };
48
- const createNumberingRegistry = () => {
38
+ const createOrderedListRegistry = () => {
49
39
  let counter = 1;
50
40
  const ids = [];
51
41
  return {
@@ -77,7 +67,6 @@ const composeBuilders = (pluginsBuilders, defaultBuilders) => {
77
67
  }, defaultBuilders);
78
68
  };
79
69
  const buildLevels = (formats) => {
80
- const INDENT_UNIT = 10 * 40;
81
70
  return formats.map(({ format, text }, i) => {
82
71
  return {
83
72
  level: i,
@@ -86,7 +75,7 @@ const buildLevels = (formats) => {
86
75
  alignment: docx.AlignmentType.LEFT,
87
76
  style: {
88
77
  paragraph: {
89
- indent: { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) },
78
+ indent: calcIndent(i),
90
79
  },
91
80
  },
92
81
  };
@@ -94,7 +83,7 @@ const buildLevels = (formats) => {
94
83
  };
95
84
  const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywords, description, styles, size, margin, background, thematicBreak = "page", orderedListFormat, } = {}) => {
96
85
  const definition = mdastUtilDefinitions.definitions(node);
97
- const numbering = createNumberingRegistry();
86
+ const ordered = createOrderedListRegistry();
98
87
  const footnote = createFootnoteRegistry();
99
88
  const pluginCtx = { root: node, definition };
100
89
  const builders = composeBuilders(await Promise.all(plugins.map((p) => p(pluginCtx))), {
@@ -128,7 +117,7 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
128
117
  const renderNode = (node, c) => {
129
118
  const builder = builders[node.type];
130
119
  if (!builder) {
131
- warnOnce(`${node.type} node is not supported without plugins.`);
120
+ utils.warnOnce(`${node.type} node is not supported without plugins.`);
132
121
  return null;
133
122
  }
134
123
  const r = builder(node, c);
@@ -179,11 +168,10 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
179
168
  },
180
169
  width: pageWidth - marginLeft - marginRight,
181
170
  deco: {},
182
- indent: 0,
183
171
  thematicBreak,
184
172
  definition: definition,
185
173
  footnote,
186
- orderedId: numbering.createId,
174
+ orderedId: ordered.createId,
187
175
  };
188
176
  const sections = [[]];
189
177
  for (const n of node.children) {
@@ -246,7 +234,7 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
246
234
  { text: "\u25A0", format: "BULLET" },
247
235
  ]),
248
236
  },
249
- ...numbering.getIds().map((ref) => ({
237
+ ...ordered.getIds().map((ref) => ({
250
238
  reference: ref,
251
239
  levels: orderedLevels,
252
240
  })),
@@ -275,7 +263,7 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
275
263
  ],
276
264
  },
277
265
  });
278
- // HACK: docx.js has no way to remove default numberings styles from .docx. So do it here for now.
266
+ // HACK: docx.js has no option to remove default numbering definitions from .docx. So do it here for now.
279
267
  // https://github.com/dolanmiu/docx/blob/master/src/file/numbering/numbering.ts
280
268
  const defaultBulletKey = "default-bullet-numbering";
281
269
  const _numbering = doc.numbering;
@@ -289,10 +277,8 @@ const buildParagraph = ({ children }, ctx) => {
289
277
  const options = {
290
278
  children: nodes,
291
279
  };
292
- if (ctx.indent > 0) {
293
- options.indent = {
294
- start: docx.convertInchesToTwip(INDENT * ctx.indent),
295
- };
280
+ if (ctx.quote != null) {
281
+ options.indent = calcIndent(ctx.quote + 1);
296
282
  }
297
283
  if (list) {
298
284
  const { level, meta } = list;
@@ -347,16 +333,23 @@ const buildHeading = ({ children, depth }, ctx) => {
347
333
  });
348
334
  };
349
335
  const buildThematicBreak = (_, ctx) => {
350
- if (ctx.thematicBreak === "section") {
351
- // Returning empty array at toplevel means section insertion.
352
- return [];
336
+ switch (ctx.thematicBreak) {
337
+ case "page": {
338
+ return new docx.Paragraph({ children: [new docx.PageBreak()] });
339
+ }
340
+ case "section": {
341
+ // Returning empty array at toplevel means section insertion.
342
+ return [];
343
+ }
344
+ case "line": {
345
+ return new docx.Paragraph({ thematicBreak: true });
346
+ }
353
347
  }
354
- return new docx.Paragraph({ children: [new docx.PageBreak()] });
355
348
  };
356
349
  const buildBlockquote = ({ children }, ctx) => {
357
350
  return ctx.render(children, {
358
351
  ...ctx,
359
- indent: ctx.indent + 1,
352
+ quote: ctx.quote == null ? 0 : ctx.quote + 1,
360
353
  });
361
354
  };
362
355
  const buildList = ({ children, ordered }, ctx) => {
@@ -510,7 +503,7 @@ const noop = () => {
510
503
  return null;
511
504
  };
512
505
  const fallbackText = (node, ctx) => {
513
- warnOnce(`${node.type} node is not supported without plugins, falling back to text.`);
506
+ utils.warnOnce(`${node.type} node is not supported without plugins, falling back to text.`);
514
507
  return buildText({ value: node.value }, ctx);
515
508
  };
516
509
 
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/src/utils.ts","../src/src/mdast-util-to-docx.ts","../src/src/plugin.ts"],"sourcesContent":["const alreadyWarned: { [message: string]: boolean } = {};\n\n/**\n * @internal\n */\nexport function warnOnce(message: string, cond: boolean = false): void {\n if (!cond && !alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\n","import {\n convertInchesToTwip,\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} from \"docx\";\nimport type * as mdast from \"mdast\";\nimport { warnOnce } from \"./utils\";\nimport { definitions } from \"mdast-util-definitions\";\nimport type {\n Context,\n DocxChild,\n DocxContent,\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\";\nconst INDENT = 0.5;\n\nconst createFootnoteRegistry = (): FootnoteRegistry => {\n const idToInternalId = new Map<string, number>();\n const defs = new Map<number, Paragraph[]>();\n\n const getId = (id: string): number => {\n let internalId = idToInternalId.get(id);\n if (internalId == null) {\n idToInternalId.set(id, (internalId = idToInternalId.size + 1));\n }\n return internalId;\n };\n\n return {\n id: (id) => {\n return getId(id);\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 NumberingRegistry = {\n createId: () => string;\n getIds: () => string[];\n};\nconst createNumberingRegistry = (): NumberingRegistry => {\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 const INDENT_UNIT = 10 * 40;\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: { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) },\n },\n },\n };\n });\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 * 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. \"page\" is Page Break. \"section\" is Section Break.\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 background,\n thematicBreak = \"page\",\n orderedListFormat,\n }: DocxOptions = {},\n): Promise<ArrayBuffer> => {\n const definition = definitions(node);\n\n const numbering = createNumberingRegistry();\n const footnote = createFootnoteRegistry();\n\n const pluginCtx = { root: node, 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: warnImage,\n // imageReference: warnImage,\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 deco: {},\n indent: 0,\n thematicBreak,\n definition: definition,\n footnote,\n orderedId: numbering.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 page: {\n size: { width: pageWidth, height: pageHeight },\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: styles,\n background,\n sections: sections\n .filter((s) => s.length)\n .map((s) => ({\n properties: sectionProperties,\n children: s as DocxChild[],\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 ...numbering.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 way to remove default numberings styles 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 const list = ctx.list;\n const nodes = ctx.render(children);\n\n const options: Writeable<IParagraphOptions> = {\n children: nodes,\n };\n\n if (ctx.indent > 0) {\n options.indent = {\n start: convertInchesToTwip(INDENT * ctx.indent),\n };\n }\n\n if (list) {\n const { level, meta } = 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 return new Paragraph(options);\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 new Paragraph({\n heading: HeadingLevel[level],\n children: ctx.render(children),\n });\n};\n\nconst buildThematicBreak: NodeBuilder<\"thematicBreak\"> = (_, ctx) => {\n if (ctx.thematicBreak === \"section\") {\n // Returning empty array at toplevel means section insertion.\n return [];\n }\n return new Paragraph({ children: [new PageBreak()] });\n};\n\nconst buildBlockquote: NodeBuilder<\"blockquote\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n indent: ctx.indent + 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 return new Table({\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 }),\n ],\n });\n }),\n });\n }),\n });\n};\n\nconst buildText: NodeBuilder<\"text\"> = ({ value }, { deco }) => {\n const options: Writeable<IRunOptions> = {\n text: value,\n bold: deco.bold,\n italics: deco.italic,\n strike: deco.strike,\n };\n if (deco.inlineCode) {\n options.highlight = \"lightGray\";\n }\n if (deco.link) {\n // https://docx.js.org/#/usage/hyperlinks?id=styling-hyperlinks\n options.style = HYPERLINK_STYLE_ID;\n }\n return new TextRun(options);\n};\n\nconst buildEmphasis: NodeBuilder<\"emphasis\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, italic: true },\n });\n};\n\nconst buildStrong: NodeBuilder<\"strong\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, bold: true },\n });\n};\n\nconst buildDelete: NodeBuilder<\"delete\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, strike: true },\n });\n};\n\nconst buildInlineCode: NodeBuilder<\"inlineCode\"> = ({ value }, ctx) => {\n return buildText(\n { type: \"text\", value },\n {\n ...ctx,\n deco: { ...ctx.deco, 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 deco: { ...ctx.deco, 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 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","definitions","sectionPageSizeDefaults","sectionMarginDefaults","Document","Packer","convertInchesToTwip","Paragraph","HeadingLevel","PageBreak","Table","TableRow","TableCell","TextRun","ExternalHyperlink","FootnoteReferenceRun"],"mappings":"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"}
1
+ {"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} from \"docx\";\nimport type * as mdast from \"mdast\";\nimport { warnOnce } from \"./utils\";\nimport { definitions } from \"mdast-util-definitions\";\nimport type {\n Context,\n DocxChild,\n DocxContent,\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\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 * 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\": Vertical 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 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 pluginCtx = { root: node, 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: warnImage,\n // imageReference: warnImage,\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 deco: {},\n thematicBreak,\n definition: definition,\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 page: {\n size: { width: pageWidth, height: pageHeight },\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: styles,\n background,\n sections: sections\n .filter((s) => s.length)\n .map((s) => ({\n properties: sectionProperties,\n children: s as DocxChild[],\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 const list = ctx.list;\n const nodes = ctx.render(children);\n\n const options: Writeable<IParagraphOptions> = {\n children: nodes,\n };\n\n if (ctx.quote != null) {\n options.indent = calcIndent(ctx.quote + 1);\n }\n\n if (list) {\n const { level, meta } = 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 return new Paragraph(options);\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 new Paragraph({\n heading: HeadingLevel[level],\n children: ctx.render(children),\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 return new Table({\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 }),\n ],\n });\n }),\n });\n }),\n });\n};\n\nconst buildText: NodeBuilder<\"text\"> = ({ value }, { deco }) => {\n const options: Writeable<IRunOptions> = {\n text: value,\n bold: deco.bold,\n italics: deco.italic,\n strike: deco.strike,\n };\n if (deco.inlineCode) {\n options.highlight = \"lightGray\";\n }\n if (deco.link) {\n // https://docx.js.org/#/usage/hyperlinks?id=styling-hyperlinks\n options.style = HYPERLINK_STYLE_ID;\n }\n return new TextRun(options);\n};\n\nconst buildEmphasis: NodeBuilder<\"emphasis\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, italic: true },\n });\n};\n\nconst buildStrong: NodeBuilder<\"strong\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, bold: true },\n });\n};\n\nconst buildDelete: NodeBuilder<\"delete\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, strike: true },\n });\n};\n\nconst buildInlineCode: NodeBuilder<\"inlineCode\"> = ({ value }, ctx) => {\n return buildText(\n { type: \"text\", value },\n {\n ...ctx,\n deco: { ...ctx.deco, 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 deco: { ...ctx.deco, 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 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","definitions","warnOnce","sectionPageSizeDefaults","sectionMarginDefaults","Document","Packer","Paragraph","HeadingLevel","PageBreak","Table","TableRow","TableCell","TextRun","ExternalHyperlink","FootnoteReferenceRun"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -1,36 +1,26 @@
1
- import { sectionPageSizeDefaults, sectionMarginDefaults, Document, Packer, AlignmentType, LevelFormat, FootnoteReferenceRun, ExternalHyperlink, TextRun, Paragraph, Table, TableRow, TableCell, PageBreak, HeadingLevel, convertInchesToTwip } from 'docx';
1
+ import { sectionPageSizeDefaults, sectionMarginDefaults, Document, Packer, AlignmentType, LevelFormat, FootnoteReferenceRun, ExternalHyperlink, TextRun, Paragraph, Table, TableRow, TableCell, PageBreak, HeadingLevel } from 'docx';
2
+ import { w as warnOnce } from './utils-BWBt3EKb.js';
2
3
  import { definitions } from 'mdast-util-definitions';
3
4
 
4
- const alreadyWarned = {};
5
- /**
6
- * @internal
7
- */
8
- function warnOnce(message, cond = false) {
9
- if (!cond && !alreadyWarned[message]) {
10
- alreadyWarned[message] = true;
11
- console.warn(message);
12
- }
13
- }
14
-
15
5
  const BULLET_LIST_REF = "bullet";
16
6
  const ORDERED_LIST_REF = "ordered";
17
7
  const COMPLETE_TASK_LIST_REF = "task-complete";
18
8
  const INCOMPLETE_TASK_LIST_REF = "task-incomplete";
19
9
  const HYPERLINK_STYLE_ID = "Hyperlink";
20
- const INDENT = 0.5;
10
+ const calcIndent = (i) => {
11
+ const INDENT_UNIT = 10 * 40;
12
+ return { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) };
13
+ };
21
14
  const createFootnoteRegistry = () => {
22
15
  const idToInternalId = new Map();
23
16
  const defs = new Map();
24
- const getId = (id) => {
25
- let internalId = idToInternalId.get(id);
26
- if (internalId == null) {
27
- idToInternalId.set(id, (internalId = idToInternalId.size + 1));
28
- }
29
- return internalId;
30
- };
31
17
  return {
32
18
  id: (id) => {
33
- return getId(id);
19
+ let internalId = idToInternalId.get(id);
20
+ if (internalId == null) {
21
+ idToInternalId.set(id, (internalId = idToInternalId.size + 1));
22
+ }
23
+ return internalId;
34
24
  },
35
25
  set: (id, def) => {
36
26
  defs.set(id, def);
@@ -43,7 +33,7 @@ const createFootnoteRegistry = () => {
43
33
  },
44
34
  };
45
35
  };
46
- const createNumberingRegistry = () => {
36
+ const createOrderedListRegistry = () => {
47
37
  let counter = 1;
48
38
  const ids = [];
49
39
  return {
@@ -75,7 +65,6 @@ const composeBuilders = (pluginsBuilders, defaultBuilders) => {
75
65
  }, defaultBuilders);
76
66
  };
77
67
  const buildLevels = (formats) => {
78
- const INDENT_UNIT = 10 * 40;
79
68
  return formats.map(({ format, text }, i) => {
80
69
  return {
81
70
  level: i,
@@ -84,7 +73,7 @@ const buildLevels = (formats) => {
84
73
  alignment: AlignmentType.LEFT,
85
74
  style: {
86
75
  paragraph: {
87
- indent: { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) },
76
+ indent: calcIndent(i),
88
77
  },
89
78
  },
90
79
  };
@@ -92,7 +81,7 @@ const buildLevels = (formats) => {
92
81
  };
93
82
  const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywords, description, styles, size, margin, background, thematicBreak = "page", orderedListFormat, } = {}) => {
94
83
  const definition = definitions(node);
95
- const numbering = createNumberingRegistry();
84
+ const ordered = createOrderedListRegistry();
96
85
  const footnote = createFootnoteRegistry();
97
86
  const pluginCtx = { root: node, definition };
98
87
  const builders = composeBuilders(await Promise.all(plugins.map((p) => p(pluginCtx))), {
@@ -177,11 +166,10 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
177
166
  },
178
167
  width: pageWidth - marginLeft - marginRight,
179
168
  deco: {},
180
- indent: 0,
181
169
  thematicBreak,
182
170
  definition: definition,
183
171
  footnote,
184
- orderedId: numbering.createId,
172
+ orderedId: ordered.createId,
185
173
  };
186
174
  const sections = [[]];
187
175
  for (const n of node.children) {
@@ -244,7 +232,7 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
244
232
  { text: "\u25A0", format: "BULLET" },
245
233
  ]),
246
234
  },
247
- ...numbering.getIds().map((ref) => ({
235
+ ...ordered.getIds().map((ref) => ({
248
236
  reference: ref,
249
237
  levels: orderedLevels,
250
238
  })),
@@ -273,7 +261,7 @@ const mdastToDocx = async (node, { plugins = [], title, subject, creator, keywor
273
261
  ],
274
262
  },
275
263
  });
276
- // HACK: docx.js has no way to remove default numberings styles from .docx. So do it here for now.
264
+ // HACK: docx.js has no option to remove default numbering definitions from .docx. So do it here for now.
277
265
  // https://github.com/dolanmiu/docx/blob/master/src/file/numbering/numbering.ts
278
266
  const defaultBulletKey = "default-bullet-numbering";
279
267
  const _numbering = doc.numbering;
@@ -287,10 +275,8 @@ const buildParagraph = ({ children }, ctx) => {
287
275
  const options = {
288
276
  children: nodes,
289
277
  };
290
- if (ctx.indent > 0) {
291
- options.indent = {
292
- start: convertInchesToTwip(INDENT * ctx.indent),
293
- };
278
+ if (ctx.quote != null) {
279
+ options.indent = calcIndent(ctx.quote + 1);
294
280
  }
295
281
  if (list) {
296
282
  const { level, meta } = list;
@@ -345,16 +331,23 @@ const buildHeading = ({ children, depth }, ctx) => {
345
331
  });
346
332
  };
347
333
  const buildThematicBreak = (_, ctx) => {
348
- if (ctx.thematicBreak === "section") {
349
- // Returning empty array at toplevel means section insertion.
350
- return [];
334
+ switch (ctx.thematicBreak) {
335
+ case "page": {
336
+ return new Paragraph({ children: [new PageBreak()] });
337
+ }
338
+ case "section": {
339
+ // Returning empty array at toplevel means section insertion.
340
+ return [];
341
+ }
342
+ case "line": {
343
+ return new Paragraph({ thematicBreak: true });
344
+ }
351
345
  }
352
- return new Paragraph({ children: [new PageBreak()] });
353
346
  };
354
347
  const buildBlockquote = ({ children }, ctx) => {
355
348
  return ctx.render(children, {
356
349
  ...ctx,
357
- indent: ctx.indent + 1,
350
+ quote: ctx.quote == null ? 0 : ctx.quote + 1,
358
351
  });
359
352
  };
360
353
  const buildList = ({ children, ordered }, ctx) => {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/src/utils.ts","../src/src/mdast-util-to-docx.ts","../src/src/plugin.ts"],"sourcesContent":["const alreadyWarned: { [message: string]: boolean } = {};\n\n/**\n * @internal\n */\nexport function warnOnce(message: string, cond: boolean = false): void {\n if (!cond && !alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\n","import {\n convertInchesToTwip,\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} from \"docx\";\nimport type * as mdast from \"mdast\";\nimport { warnOnce } from \"./utils\";\nimport { definitions } from \"mdast-util-definitions\";\nimport type {\n Context,\n DocxChild,\n DocxContent,\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\";\nconst INDENT = 0.5;\n\nconst createFootnoteRegistry = (): FootnoteRegistry => {\n const idToInternalId = new Map<string, number>();\n const defs = new Map<number, Paragraph[]>();\n\n const getId = (id: string): number => {\n let internalId = idToInternalId.get(id);\n if (internalId == null) {\n idToInternalId.set(id, (internalId = idToInternalId.size + 1));\n }\n return internalId;\n };\n\n return {\n id: (id) => {\n return getId(id);\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 NumberingRegistry = {\n createId: () => string;\n getIds: () => string[];\n};\nconst createNumberingRegistry = (): NumberingRegistry => {\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 const INDENT_UNIT = 10 * 40;\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: { hanging: INDENT_UNIT, left: INDENT_UNIT * (i + 1) },\n },\n },\n };\n });\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 * 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. \"page\" is Page Break. \"section\" is Section Break.\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 background,\n thematicBreak = \"page\",\n orderedListFormat,\n }: DocxOptions = {},\n): Promise<ArrayBuffer> => {\n const definition = definitions(node);\n\n const numbering = createNumberingRegistry();\n const footnote = createFootnoteRegistry();\n\n const pluginCtx = { root: node, 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: warnImage,\n // imageReference: warnImage,\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 deco: {},\n indent: 0,\n thematicBreak,\n definition: definition,\n footnote,\n orderedId: numbering.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 page: {\n size: { width: pageWidth, height: pageHeight },\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: styles,\n background,\n sections: sections\n .filter((s) => s.length)\n .map((s) => ({\n properties: sectionProperties,\n children: s as DocxChild[],\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 ...numbering.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 way to remove default numberings styles 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 const list = ctx.list;\n const nodes = ctx.render(children);\n\n const options: Writeable<IParagraphOptions> = {\n children: nodes,\n };\n\n if (ctx.indent > 0) {\n options.indent = {\n start: convertInchesToTwip(INDENT * ctx.indent),\n };\n }\n\n if (list) {\n const { level, meta } = 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 return new Paragraph(options);\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 new Paragraph({\n heading: HeadingLevel[level],\n children: ctx.render(children),\n });\n};\n\nconst buildThematicBreak: NodeBuilder<\"thematicBreak\"> = (_, ctx) => {\n if (ctx.thematicBreak === \"section\") {\n // Returning empty array at toplevel means section insertion.\n return [];\n }\n return new Paragraph({ children: [new PageBreak()] });\n};\n\nconst buildBlockquote: NodeBuilder<\"blockquote\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n indent: ctx.indent + 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 return new Table({\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 }),\n ],\n });\n }),\n });\n }),\n });\n};\n\nconst buildText: NodeBuilder<\"text\"> = ({ value }, { deco }) => {\n const options: Writeable<IRunOptions> = {\n text: value,\n bold: deco.bold,\n italics: deco.italic,\n strike: deco.strike,\n };\n if (deco.inlineCode) {\n options.highlight = \"lightGray\";\n }\n if (deco.link) {\n // https://docx.js.org/#/usage/hyperlinks?id=styling-hyperlinks\n options.style = HYPERLINK_STYLE_ID;\n }\n return new TextRun(options);\n};\n\nconst buildEmphasis: NodeBuilder<\"emphasis\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, italic: true },\n });\n};\n\nconst buildStrong: NodeBuilder<\"strong\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, bold: true },\n });\n};\n\nconst buildDelete: NodeBuilder<\"delete\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, strike: true },\n });\n};\n\nconst buildInlineCode: NodeBuilder<\"inlineCode\"> = ({ value }, ctx) => {\n return buildText(\n { type: \"text\", value },\n {\n ...ctx,\n deco: { ...ctx.deco, 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 deco: { ...ctx.deco, 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 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":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","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} from \"docx\";\nimport type * as mdast from \"mdast\";\nimport { warnOnce } from \"./utils\";\nimport { definitions } from \"mdast-util-definitions\";\nimport type {\n Context,\n DocxChild,\n DocxContent,\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\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 * 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\": Vertical 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 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 pluginCtx = { root: node, 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: warnImage,\n // imageReference: warnImage,\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 deco: {},\n thematicBreak,\n definition: definition,\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 page: {\n size: { width: pageWidth, height: pageHeight },\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: styles,\n background,\n sections: sections\n .filter((s) => s.length)\n .map((s) => ({\n properties: sectionProperties,\n children: s as DocxChild[],\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 const list = ctx.list;\n const nodes = ctx.render(children);\n\n const options: Writeable<IParagraphOptions> = {\n children: nodes,\n };\n\n if (ctx.quote != null) {\n options.indent = calcIndent(ctx.quote + 1);\n }\n\n if (list) {\n const { level, meta } = 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 return new Paragraph(options);\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 new Paragraph({\n heading: HeadingLevel[level],\n children: ctx.render(children),\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 return new Table({\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 }),\n ],\n });\n }),\n });\n }),\n });\n};\n\nconst buildText: NodeBuilder<\"text\"> = ({ value }, { deco }) => {\n const options: Writeable<IRunOptions> = {\n text: value,\n bold: deco.bold,\n italics: deco.italic,\n strike: deco.strike,\n };\n if (deco.inlineCode) {\n options.highlight = \"lightGray\";\n }\n if (deco.link) {\n // https://docx.js.org/#/usage/hyperlinks?id=styling-hyperlinks\n options.style = HYPERLINK_STYLE_ID;\n }\n return new TextRun(options);\n};\n\nconst buildEmphasis: NodeBuilder<\"emphasis\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, italic: true },\n });\n};\n\nconst buildStrong: NodeBuilder<\"strong\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, bold: true },\n });\n};\n\nconst buildDelete: NodeBuilder<\"delete\"> = ({ children }, ctx) => {\n return ctx.render(children, {\n ...ctx,\n deco: { ...ctx.deco, strike: true },\n });\n};\n\nconst buildInlineCode: NodeBuilder<\"inlineCode\"> = ({ value }, ctx) => {\n return buildText(\n { type: \"text\", value },\n {\n ...ctx,\n deco: { ...ctx.deco, 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 deco: { ...ctx.deco, 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 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":[],"mappings":"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"}
@@ -30,7 +30,11 @@ export interface DocxOptions extends Pick<IPropertiesOptions, "title" | "subject
30
30
  */
31
31
  orderedListFormat?: ListFormat[];
32
32
  /**
33
- * An option to select how thematicBreak works. "page" is Page Break. "section" is Section Break.
33
+ * An option to select how thematicBreak works.
34
+ *
35
+ * - "page": Page Break
36
+ * - "section": Section Break
37
+ * - "line": Vertical line
34
38
  * @default "page"
35
39
  */
36
40
  thematicBreak?: ThematicBreakType;
@@ -100,7 +100,7 @@ const imagePlugin = ({ load = loadWithFetch, fallbackSvg = browserSvgToPng, } =
100
100
  promises.set(url, (async () => {
101
101
  let data;
102
102
  try {
103
- data = await load(url);
103
+ data = (await load(url));
104
104
  }
105
105
  catch (e) {
106
106
  utils.warnOnce(`Failed to load image: ${url} ${e}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/plugins/image/index.ts"],"sourcesContent":["import { warnOnce } from \"../../utils\";\nimport type { RemarkDocxPlugin } from \"../../types\";\nimport type * as mdast from \"mdast\";\nimport { ImageRun } from \"docx\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\n\nconst supportedTypes = [\"png\", \"jpg\", \"gif\", \"bmp\", \"svg\"] as const;\n\ntype SupportedImageType = (typeof supportedTypes)[number];\n\ntype ImageData = Readonly<\n {\n data: ArrayBuffer;\n width: number;\n height: number;\n } & (\n | { type: Exclude<SupportedImageType, \"svg\"> }\n | {\n type: Extract<SupportedImageType, \"svg\">;\n fallback: ArrayBuffer;\n }\n )\n>;\n\nconst buildImage = (\n image: ImageData,\n node: { alt?: string | null; title?: string | null },\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, width, height, 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, width, height } = image;\n return new ImageRun({\n type: type,\n data: data,\n transformation: {\n width,\n height,\n },\n altText,\n });\n};\n\nconst isSupportedType = (\n type: string | undefined,\n): type is SupportedImageType => {\n if (!type) return false;\n if ((supportedTypes as readonly string[]).includes(type)) {\n return true;\n }\n return false;\n};\n\ntype LoadFn = (url: string) => Promise<ArrayBuffer>;\n\ntype SvgToPngFn = (options: {\n buffer: ArrayBuffer;\n width: number;\n height: number;\n}) => Promise<ArrayBufferLike>;\n\nconst loadWithFetch: LoadFn = async (url) => {\n const res = await fetch(url);\n return res.arrayBuffer();\n};\n\nconst browserSvgToPng: SvgToPngFn = async ({ buffer, width, height }) => {\n const svgBlob = new Blob([buffer], { type: \"image/svg+xml\" });\n const url = URL.createObjectURL(svgBlob);\n\n try {\n const img = new Image();\n img.src = url;\n await img.decode();\n\n const dpr = window.devicePixelRatio;\n\n const canvas = document.createElement(\"canvas\");\n const scaledWidth = width * dpr;\n const scaledHeight = height * dpr;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext(\"2d\")!;\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n\n return new Promise<ArrayBuffer>((resolve) => {\n canvas.toBlob((blob) => {\n blob!.arrayBuffer().then(resolve);\n }, \"image/png\");\n });\n } finally {\n URL.revokeObjectURL(url);\n }\n};\n\nexport interface ImagePluginOptions {\n /**\n * A function to resolve image data from url.\n * @default {@link loadWithFetch}\n */\n load?: LoadFn;\n /**\n * A function to convert SVG to PNG. According to the docx specifications, embedding SVG images also requires including PNG.\n * @default {@link browserSvgToPng}, which handles conversion only on browser\n */\n fallbackSvg?: SvgToPngFn;\n}\n\n/**\n * A plugin to render \"image\" nodes\n */\nexport const imagePlugin = ({\n load = loadWithFetch,\n fallbackSvg = browserSvgToPng,\n}: ImagePluginOptions = {}): RemarkDocxPlugin => {\n const images = new Map<string, ImageData>();\n\n return async ({ root, definition }) => {\n const imageList: (mdast.Image | mdast.Definition)[] = [];\n visit(root, \"image\", (node) => {\n imageList.push(node);\n });\n visit(root, \"imageReference\", (node) => {\n const maybeImage = definition(node.identifier)!;\n if (maybeImage) {\n imageList.push(maybeImage);\n }\n });\n\n if (imageList.length !== 0) {\n const promises = new Map<string, Promise<void>>();\n imageList.forEach(({ url }) => {\n if (!images.has(url) && !promises.has(url)) {\n promises.set(\n url,\n (async () => {\n let data: ArrayBuffer;\n try {\n data = await load(url);\n } catch (e) {\n warnOnce(`Failed to load image: ${url} ${e}`);\n return;\n }\n\n const { width, height, type } = imageSize(new Uint8Array(data));\n if (!isSupportedType(type)) {\n warnOnce(`Not supported image type: ${type}`);\n return;\n }\n\n if (type === \"svg\") {\n try {\n const fallback = await fallbackSvg({\n buffer: data,\n width,\n height,\n });\n images.set(url, {\n type,\n width,\n height,\n data,\n fallback: fallback as ArrayBuffer,\n });\n } catch (e) {\n warnOnce(`Failed to create fallback image: ${url} ${e}`);\n return;\n }\n } else {\n images.set(url, { type, width, height, data });\n }\n })(),\n );\n }\n });\n\n await Promise.all(promises.values());\n }\n\n return {\n image: (node) => {\n const data = images.get(node.url);\n if (!data) {\n return null;\n }\n return buildImage(data, node);\n },\n imageReference: (node) => {\n const def = definition(node.identifier);\n if (def == null) {\n return null;\n }\n const data = images.get(def.url);\n if (!data) {\n return null;\n }\n return buildImage(data, { alt: node.alt, title: def.title });\n },\n };\n };\n};\n"],"names":["ImageRun","visit","warnOnce","imageSize"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/plugins/image/index.ts"],"sourcesContent":["import { warnOnce } from \"../../utils\";\nimport type { RemarkDocxPlugin } from \"../../types\";\nimport type * as mdast from \"mdast\";\nimport { ImageRun } from \"docx\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\n\nconst supportedTypes = [\"png\", \"jpg\", \"gif\", \"bmp\", \"svg\"] as const;\n\ntype SupportedImageType = (typeof supportedTypes)[number];\n\ntype ImageData = Readonly<\n {\n data: ArrayBuffer;\n width: number;\n height: number;\n } & (\n | { type: Exclude<SupportedImageType, \"svg\"> }\n | {\n type: Extract<SupportedImageType, \"svg\">;\n fallback: ArrayBuffer;\n }\n )\n>;\n\nconst buildImage = (\n image: ImageData,\n node: { alt?: string | null; title?: string | null },\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, width, height, 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, width, height } = image;\n return new ImageRun({\n type: type,\n data: data,\n transformation: {\n width,\n height,\n },\n altText,\n });\n};\n\nconst isSupportedType = (\n type: string | undefined,\n): type is SupportedImageType => {\n if (!type) return false;\n if ((supportedTypes as readonly string[]).includes(type)) {\n return true;\n }\n return false;\n};\n\ntype LoadFn = (url: string) => Promise<ArrayBufferLike>;\n\ntype SvgToPngFn = (options: {\n buffer: ArrayBuffer;\n width: number;\n height: number;\n}) => Promise<ArrayBufferLike>;\n\nconst loadWithFetch: LoadFn = async (url) => {\n const res = await fetch(url);\n return res.arrayBuffer();\n};\n\nconst browserSvgToPng: SvgToPngFn = async ({ buffer, width, height }) => {\n const svgBlob = new Blob([buffer], { type: \"image/svg+xml\" });\n const url = URL.createObjectURL(svgBlob);\n\n try {\n const img = new Image();\n img.src = url;\n await img.decode();\n\n const dpr = window.devicePixelRatio;\n\n const canvas = document.createElement(\"canvas\");\n const scaledWidth = width * dpr;\n const scaledHeight = height * dpr;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext(\"2d\")!;\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n\n return new Promise<ArrayBuffer>((resolve) => {\n canvas.toBlob((blob) => {\n blob!.arrayBuffer().then(resolve);\n }, \"image/png\");\n });\n } finally {\n URL.revokeObjectURL(url);\n }\n};\n\nexport interface ImagePluginOptions {\n /**\n * A function to resolve image data from url.\n * @default {@link loadWithFetch}\n */\n load?: LoadFn;\n /**\n * A function to convert SVG to PNG. According to the docx specifications, embedding SVG images also requires including PNG.\n * @default {@link browserSvgToPng}, which handles conversion only on browser\n */\n fallbackSvg?: SvgToPngFn;\n}\n\n/**\n * A plugin to render \"image\" nodes\n */\nexport const imagePlugin = ({\n load = loadWithFetch,\n fallbackSvg = browserSvgToPng,\n}: ImagePluginOptions = {}): RemarkDocxPlugin => {\n const images = new Map<string, ImageData>();\n\n return async ({ root, definition }) => {\n const imageList: (mdast.Image | mdast.Definition)[] = [];\n visit(root, \"image\", (node) => {\n imageList.push(node);\n });\n visit(root, \"imageReference\", (node) => {\n const maybeImage = definition(node.identifier)!;\n if (maybeImage) {\n imageList.push(maybeImage);\n }\n });\n\n if (imageList.length !== 0) {\n const promises = new Map<string, Promise<void>>();\n imageList.forEach(({ url }) => {\n if (!images.has(url) && !promises.has(url)) {\n promises.set(\n url,\n (async () => {\n let data: ArrayBuffer;\n try {\n data = (await load(url)) as ArrayBuffer;\n } catch (e) {\n warnOnce(`Failed to load image: ${url} ${e}`);\n return;\n }\n\n const { width, height, type } = imageSize(new Uint8Array(data));\n if (!isSupportedType(type)) {\n warnOnce(`Not supported image type: ${type}`);\n return;\n }\n\n if (type === \"svg\") {\n try {\n const fallback = await fallbackSvg({\n buffer: data,\n width,\n height,\n });\n images.set(url, {\n type,\n width,\n height,\n data,\n fallback: fallback as ArrayBuffer,\n });\n } catch (e) {\n warnOnce(`Failed to create fallback image: ${url} ${e}`);\n return;\n }\n } else {\n images.set(url, { type, width, height, data });\n }\n })(),\n );\n }\n });\n\n await Promise.all(promises.values());\n }\n\n return {\n image: (node) => {\n const data = images.get(node.url);\n if (!data) {\n return null;\n }\n return buildImage(data, node);\n },\n imageReference: (node) => {\n const def = definition(node.identifier);\n if (def == null) {\n return null;\n }\n const data = images.get(def.url);\n if (!data) {\n return null;\n }\n return buildImage(data, { alt: node.alt, title: def.title });\n },\n };\n };\n};\n"],"names":["ImageRun","visit","warnOnce","imageSize"],"mappings":";;;;;;;AAOA,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU;AAkBnE,MAAM,UAAU,GAAG,CACjB,KAAgB,EAChB,IAAoD,KAClD;;IACF,MAAM,OAAO,GACX,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AACf,UAAE;AACE,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,mCAAI,SAAS;AAClC,YAAA,KAAK,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,mCAAI,SAAS;AAC/B;UACD,SAAS;AAEf,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;AACxB,QAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK;QACrD,OAAO,IAAIA,aAAQ,CAAC;AAClB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,cAAc,EAAE;gBACd,KAAK;gBACL,MAAM;AACP,aAAA;;YAED,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzC,OAAO;AACR,SAAA,CAAC;IACJ;IAEA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK;IAC3C,OAAO,IAAIA,aAAQ,CAAC;AAClB,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,cAAc,EAAE;YACd,KAAK;YACL,MAAM;AACP,SAAA;QACD,OAAO;AACR,KAAA,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,CACtB,IAAwB,KACM;AAC9B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,KAAK;AACvB,IAAA,IAAK,cAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxD,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd,CAAC;AAUD,MAAM,aAAa,GAAW,OAAO,GAAG,KAAI;AAC1C,IAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAC5B,IAAA,OAAO,GAAG,CAAC,WAAW,EAAE;AAC1B,CAAC;AAED,MAAM,eAAe,GAAe,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAI;AACtE,IAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;AAExC,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACb,QAAA,MAAM,GAAG,CAAC,MAAM,EAAE;AAElB,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB;QAEnC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,WAAW,GAAG,KAAK,GAAG,GAAG;AAC/B,QAAA,MAAM,YAAY,GAAG,MAAM,GAAG,GAAG;AACjC,QAAA,MAAM,CAAC,KAAK,GAAG,WAAW;AAC1B,QAAA,MAAM,CAAC,MAAM,GAAG,YAAY;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE;AACpC,QAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC;AAEnD,QAAA,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,KAAI;AAC1C,YAAA,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBACrB,IAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,CAAC,EAAE,WAAW,CAAC;AACjB,QAAA,CAAC,CAAC;IACJ;YAAU;AACR,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;IAC1B;AACF,CAAC;AAeD;;AAEG;AACI,MAAM,WAAW,GAAG,CAAC,EAC1B,IAAI,GAAG,aAAa,EACpB,WAAW,GAAG,eAAe,GAAA,GACP,EAAE,KAAsB;AAC9C,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB;IAE3C,OAAO,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAI;QACpC,MAAM,SAAS,GAAuC,EAAE;QACxDC,oBAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,KAAI;AAC5B,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,QAAA,CAAC,CAAC;QACFA,oBAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,IAAI,KAAI;YACrC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAE;YAC/C,IAAI,UAAU,EAAE;AACd,gBAAA,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB;YACjD,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAI;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAC1C,QAAQ,CAAC,GAAG,CACV,GAAG,EACH,CAAC,YAAW;AACV,wBAAA,IAAI,IAAiB;AACrB,wBAAA,IAAI;4BACF,IAAI,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAgB;wBACzC;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAAC,cAAQ,CAAC,CAAA,sBAAA,EAAyB,GAAG,IAAI,CAAC,CAAA,CAAE,CAAC;4BAC7C;wBACF;AAEA,wBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAGC,mBAAS,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/D,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC1B,4BAAAD,cAAQ,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAE,CAAC;4BAC7C;wBACF;AAEA,wBAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,4BAAA,IAAI;AACF,gCAAA,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;AACjC,oCAAA,MAAM,EAAE,IAAI;oCACZ,KAAK;oCACL,MAAM;AACP,iCAAA,CAAC;AACF,gCAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;oCACd,IAAI;oCACJ,KAAK;oCACL,MAAM;oCACN,IAAI;AACJ,oCAAA,QAAQ,EAAE,QAAuB;AAClC,iCAAA,CAAC;4BACJ;4BAAE,OAAO,CAAC,EAAE;AACV,gCAAAA,cAAQ,CAAC,CAAA,iCAAA,EAAoC,GAAG,IAAI,CAAC,CAAA,CAAE,CAAC;gCACxD;4BACF;wBACF;6BAAO;AACL,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;wBAChD;oBACF,CAAC,GAAG,CACL;gBACH;AACF,YAAA,CAAC,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC;QAEA,OAAO;AACL,YAAA,KAAK,EAAE,CAAC,IAAI,KAAI;gBACd,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;gBACjC,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAC/B,CAAC;AACD,YAAA,cAAc,EAAE,CAAC,IAAI,KAAI;gBACvB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC,gBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAChC,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9D,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1,5 +1,5 @@
1
1
  import type { RemarkDocxPlugin } from "../../types";
2
- type LoadFn = (url: string) => Promise<ArrayBuffer>;
2
+ type LoadFn = (url: string) => Promise<ArrayBufferLike>;
3
3
  type SvgToPngFn = (options: {
4
4
  buffer: ArrayBuffer;
5
5
  width: number;
@@ -98,7 +98,7 @@ const imagePlugin = ({ load = loadWithFetch, fallbackSvg = browserSvgToPng, } =
98
98
  promises.set(url, (async () => {
99
99
  let data;
100
100
  try {
101
- data = await load(url);
101
+ data = (await load(url));
102
102
  }
103
103
  catch (e) {
104
104
  warnOnce(`Failed to load image: ${url} ${e}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/plugins/image/index.ts"],"sourcesContent":["import { warnOnce } from \"../../utils\";\nimport type { RemarkDocxPlugin } from \"../../types\";\nimport type * as mdast from \"mdast\";\nimport { ImageRun } from \"docx\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\n\nconst supportedTypes = [\"png\", \"jpg\", \"gif\", \"bmp\", \"svg\"] as const;\n\ntype SupportedImageType = (typeof supportedTypes)[number];\n\ntype ImageData = Readonly<\n {\n data: ArrayBuffer;\n width: number;\n height: number;\n } & (\n | { type: Exclude<SupportedImageType, \"svg\"> }\n | {\n type: Extract<SupportedImageType, \"svg\">;\n fallback: ArrayBuffer;\n }\n )\n>;\n\nconst buildImage = (\n image: ImageData,\n node: { alt?: string | null; title?: string | null },\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, width, height, 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, width, height } = image;\n return new ImageRun({\n type: type,\n data: data,\n transformation: {\n width,\n height,\n },\n altText,\n });\n};\n\nconst isSupportedType = (\n type: string | undefined,\n): type is SupportedImageType => {\n if (!type) return false;\n if ((supportedTypes as readonly string[]).includes(type)) {\n return true;\n }\n return false;\n};\n\ntype LoadFn = (url: string) => Promise<ArrayBuffer>;\n\ntype SvgToPngFn = (options: {\n buffer: ArrayBuffer;\n width: number;\n height: number;\n}) => Promise<ArrayBufferLike>;\n\nconst loadWithFetch: LoadFn = async (url) => {\n const res = await fetch(url);\n return res.arrayBuffer();\n};\n\nconst browserSvgToPng: SvgToPngFn = async ({ buffer, width, height }) => {\n const svgBlob = new Blob([buffer], { type: \"image/svg+xml\" });\n const url = URL.createObjectURL(svgBlob);\n\n try {\n const img = new Image();\n img.src = url;\n await img.decode();\n\n const dpr = window.devicePixelRatio;\n\n const canvas = document.createElement(\"canvas\");\n const scaledWidth = width * dpr;\n const scaledHeight = height * dpr;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext(\"2d\")!;\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n\n return new Promise<ArrayBuffer>((resolve) => {\n canvas.toBlob((blob) => {\n blob!.arrayBuffer().then(resolve);\n }, \"image/png\");\n });\n } finally {\n URL.revokeObjectURL(url);\n }\n};\n\nexport interface ImagePluginOptions {\n /**\n * A function to resolve image data from url.\n * @default {@link loadWithFetch}\n */\n load?: LoadFn;\n /**\n * A function to convert SVG to PNG. According to the docx specifications, embedding SVG images also requires including PNG.\n * @default {@link browserSvgToPng}, which handles conversion only on browser\n */\n fallbackSvg?: SvgToPngFn;\n}\n\n/**\n * A plugin to render \"image\" nodes\n */\nexport const imagePlugin = ({\n load = loadWithFetch,\n fallbackSvg = browserSvgToPng,\n}: ImagePluginOptions = {}): RemarkDocxPlugin => {\n const images = new Map<string, ImageData>();\n\n return async ({ root, definition }) => {\n const imageList: (mdast.Image | mdast.Definition)[] = [];\n visit(root, \"image\", (node) => {\n imageList.push(node);\n });\n visit(root, \"imageReference\", (node) => {\n const maybeImage = definition(node.identifier)!;\n if (maybeImage) {\n imageList.push(maybeImage);\n }\n });\n\n if (imageList.length !== 0) {\n const promises = new Map<string, Promise<void>>();\n imageList.forEach(({ url }) => {\n if (!images.has(url) && !promises.has(url)) {\n promises.set(\n url,\n (async () => {\n let data: ArrayBuffer;\n try {\n data = await load(url);\n } catch (e) {\n warnOnce(`Failed to load image: ${url} ${e}`);\n return;\n }\n\n const { width, height, type } = imageSize(new Uint8Array(data));\n if (!isSupportedType(type)) {\n warnOnce(`Not supported image type: ${type}`);\n return;\n }\n\n if (type === \"svg\") {\n try {\n const fallback = await fallbackSvg({\n buffer: data,\n width,\n height,\n });\n images.set(url, {\n type,\n width,\n height,\n data,\n fallback: fallback as ArrayBuffer,\n });\n } catch (e) {\n warnOnce(`Failed to create fallback image: ${url} ${e}`);\n return;\n }\n } else {\n images.set(url, { type, width, height, data });\n }\n })(),\n );\n }\n });\n\n await Promise.all(promises.values());\n }\n\n return {\n image: (node) => {\n const data = images.get(node.url);\n if (!data) {\n return null;\n }\n return buildImage(data, node);\n },\n imageReference: (node) => {\n const def = definition(node.identifier);\n if (def == null) {\n return null;\n }\n const data = images.get(def.url);\n if (!data) {\n return null;\n }\n return buildImage(data, { alt: node.alt, title: def.title });\n },\n };\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/plugins/image/index.ts"],"sourcesContent":["import { warnOnce } from \"../../utils\";\nimport type { RemarkDocxPlugin } from \"../../types\";\nimport type * as mdast from \"mdast\";\nimport { ImageRun } from \"docx\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\n\nconst supportedTypes = [\"png\", \"jpg\", \"gif\", \"bmp\", \"svg\"] as const;\n\ntype SupportedImageType = (typeof supportedTypes)[number];\n\ntype ImageData = Readonly<\n {\n data: ArrayBuffer;\n width: number;\n height: number;\n } & (\n | { type: Exclude<SupportedImageType, \"svg\"> }\n | {\n type: Extract<SupportedImageType, \"svg\">;\n fallback: ArrayBuffer;\n }\n )\n>;\n\nconst buildImage = (\n image: ImageData,\n node: { alt?: string | null; title?: string | null },\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, width, height, 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, width, height } = image;\n return new ImageRun({\n type: type,\n data: data,\n transformation: {\n width,\n height,\n },\n altText,\n });\n};\n\nconst isSupportedType = (\n type: string | undefined,\n): type is SupportedImageType => {\n if (!type) return false;\n if ((supportedTypes as readonly string[]).includes(type)) {\n return true;\n }\n return false;\n};\n\ntype LoadFn = (url: string) => Promise<ArrayBufferLike>;\n\ntype SvgToPngFn = (options: {\n buffer: ArrayBuffer;\n width: number;\n height: number;\n}) => Promise<ArrayBufferLike>;\n\nconst loadWithFetch: LoadFn = async (url) => {\n const res = await fetch(url);\n return res.arrayBuffer();\n};\n\nconst browserSvgToPng: SvgToPngFn = async ({ buffer, width, height }) => {\n const svgBlob = new Blob([buffer], { type: \"image/svg+xml\" });\n const url = URL.createObjectURL(svgBlob);\n\n try {\n const img = new Image();\n img.src = url;\n await img.decode();\n\n const dpr = window.devicePixelRatio;\n\n const canvas = document.createElement(\"canvas\");\n const scaledWidth = width * dpr;\n const scaledHeight = height * dpr;\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n const ctx = canvas.getContext(\"2d\")!;\n ctx.drawImage(img, 0, 0, scaledWidth, scaledHeight);\n\n return new Promise<ArrayBuffer>((resolve) => {\n canvas.toBlob((blob) => {\n blob!.arrayBuffer().then(resolve);\n }, \"image/png\");\n });\n } finally {\n URL.revokeObjectURL(url);\n }\n};\n\nexport interface ImagePluginOptions {\n /**\n * A function to resolve image data from url.\n * @default {@link loadWithFetch}\n */\n load?: LoadFn;\n /**\n * A function to convert SVG to PNG. According to the docx specifications, embedding SVG images also requires including PNG.\n * @default {@link browserSvgToPng}, which handles conversion only on browser\n */\n fallbackSvg?: SvgToPngFn;\n}\n\n/**\n * A plugin to render \"image\" nodes\n */\nexport const imagePlugin = ({\n load = loadWithFetch,\n fallbackSvg = browserSvgToPng,\n}: ImagePluginOptions = {}): RemarkDocxPlugin => {\n const images = new Map<string, ImageData>();\n\n return async ({ root, definition }) => {\n const imageList: (mdast.Image | mdast.Definition)[] = [];\n visit(root, \"image\", (node) => {\n imageList.push(node);\n });\n visit(root, \"imageReference\", (node) => {\n const maybeImage = definition(node.identifier)!;\n if (maybeImage) {\n imageList.push(maybeImage);\n }\n });\n\n if (imageList.length !== 0) {\n const promises = new Map<string, Promise<void>>();\n imageList.forEach(({ url }) => {\n if (!images.has(url) && !promises.has(url)) {\n promises.set(\n url,\n (async () => {\n let data: ArrayBuffer;\n try {\n data = (await load(url)) as ArrayBuffer;\n } catch (e) {\n warnOnce(`Failed to load image: ${url} ${e}`);\n return;\n }\n\n const { width, height, type } = imageSize(new Uint8Array(data));\n if (!isSupportedType(type)) {\n warnOnce(`Not supported image type: ${type}`);\n return;\n }\n\n if (type === \"svg\") {\n try {\n const fallback = await fallbackSvg({\n buffer: data,\n width,\n height,\n });\n images.set(url, {\n type,\n width,\n height,\n data,\n fallback: fallback as ArrayBuffer,\n });\n } catch (e) {\n warnOnce(`Failed to create fallback image: ${url} ${e}`);\n return;\n }\n } else {\n images.set(url, { type, width, height, data });\n }\n })(),\n );\n }\n });\n\n await Promise.all(promises.values());\n }\n\n return {\n image: (node) => {\n const data = images.get(node.url);\n if (!data) {\n return null;\n }\n return buildImage(data, node);\n },\n imageReference: (node) => {\n const def = definition(node.identifier);\n if (def == null) {\n return null;\n }\n const data = images.get(def.url);\n if (!data) {\n return null;\n }\n return buildImage(data, { alt: node.alt, title: def.title });\n },\n };\n };\n};\n"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -28,7 +28,7 @@ export type FootnoteRegistry = {
28
28
  };
29
29
  };
30
30
  };
31
- export type ThematicBreakType = "page" | "section";
31
+ export type ThematicBreakType = "page" | "section" | "line";
32
32
  export type Context = Readonly<{
33
33
  render: (node: readonly mdast.RootContent[], ctx?: Context) => DocxContent[];
34
34
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remark-docx",
3
- "version": "0.3.19",
3
+ "version": "0.3.20",
4
4
  "description": "remark plugin to compile markdown to docx (Microsoft Word, Office Open XML).",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "lib/index.js",