@cudoment/cudoc 0.4.0 → 0.6.0

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.
Files changed (102) hide show
  1. package/README.md +4 -3
  2. package/dist/document.d.ts +36 -1
  3. package/dist/document.d.ts.map +1 -1
  4. package/dist/document.js +54 -3
  5. package/dist/document.js.map +1 -1
  6. package/dist/internal/core/mdx/imports.d.ts +21 -0
  7. package/dist/internal/core/mdx/imports.d.ts.map +1 -0
  8. package/dist/internal/core/mdx/imports.js +80 -0
  9. package/dist/internal/core/mdx/imports.js.map +1 -0
  10. package/dist/internal/core/mdx/index.d.ts +1 -0
  11. package/dist/internal/core/mdx/index.d.ts.map +1 -1
  12. package/dist/internal/core/mdx/index.js +1 -0
  13. package/dist/internal/core/mdx/index.js.map +1 -1
  14. package/dist/internal/core/query/sections.d.ts +6 -0
  15. package/dist/internal/core/query/sections.d.ts.map +1 -1
  16. package/dist/internal/core/query/sections.js +8 -2
  17. package/dist/internal/core/query/sections.js.map +1 -1
  18. package/dist/internal/transforms/table-column-layout/create-table.d.ts.map +1 -1
  19. package/dist/internal/transforms/table-column-layout/create-table.js +40 -17
  20. package/dist/internal/transforms/table-column-layout/create-table.js.map +1 -1
  21. package/dist/internal/transforms/table-column-layout/index.d.ts +32 -0
  22. package/dist/internal/transforms/table-column-layout/index.d.ts.map +1 -1
  23. package/dist/internal/transforms/table-column-layout/index.js +66 -0
  24. package/dist/internal/transforms/table-column-layout/index.js.map +1 -1
  25. package/dist/markdown.d.ts +8 -0
  26. package/dist/markdown.d.ts.map +1 -1
  27. package/dist/markdown.js +9 -1
  28. package/dist/markdown.js.map +1 -1
  29. package/dist/node/check.d.ts +12 -6
  30. package/dist/node/check.d.ts.map +1 -1
  31. package/dist/node/check.js +460 -79
  32. package/dist/node/check.js.map +1 -1
  33. package/dist/node/cli.js +2 -56
  34. package/dist/node/cli.js.map +1 -1
  35. package/dist/node/collect.d.ts +41 -0
  36. package/dist/node/collect.d.ts.map +1 -0
  37. package/dist/node/collect.js +351 -0
  38. package/dist/node/collect.js.map +1 -0
  39. package/dist/node/command.d.ts +23 -0
  40. package/dist/node/command.d.ts.map +1 -0
  41. package/dist/node/command.js +116 -0
  42. package/dist/node/command.js.map +1 -0
  43. package/dist/node/dataset.d.ts +14 -1
  44. package/dist/node/dataset.d.ts.map +1 -1
  45. package/dist/node/dataset.js +44 -5
  46. package/dist/node/dataset.js.map +1 -1
  47. package/dist/node/glob.d.ts +21 -0
  48. package/dist/node/glob.d.ts.map +1 -0
  49. package/dist/node/glob.js +61 -0
  50. package/dist/node/glob.js.map +1 -0
  51. package/dist/node/library.d.ts +76 -6
  52. package/dist/node/library.d.ts.map +1 -1
  53. package/dist/node/library.js +63 -137
  54. package/dist/node/library.js.map +1 -1
  55. package/dist/node/load-ast.d.ts.map +1 -1
  56. package/dist/node/load-ast.js +4 -1
  57. package/dist/node/load-ast.js.map +1 -1
  58. package/dist/node/local-target.d.ts +39 -8
  59. package/dist/node/local-target.d.ts.map +1 -1
  60. package/dist/node/local-target.js +94 -13
  61. package/dist/node/local-target.js.map +1 -1
  62. package/dist/node/prepare-embeds.d.ts +52 -3
  63. package/dist/node/prepare-embeds.d.ts.map +1 -1
  64. package/dist/node/prepare-embeds.js +134 -8
  65. package/dist/node/prepare-embeds.js.map +1 -1
  66. package/dist/node/references.d.ts +39 -0
  67. package/dist/node/references.d.ts.map +1 -0
  68. package/dist/node/references.js +101 -0
  69. package/dist/node/references.js.map +1 -0
  70. package/dist/node/replace.d.ts +65 -0
  71. package/dist/node/replace.d.ts.map +1 -0
  72. package/dist/node/replace.js +285 -0
  73. package/dist/node/replace.js.map +1 -0
  74. package/dist/node/resolve-embed.d.ts +79 -1
  75. package/dist/node/resolve-embed.d.ts.map +1 -1
  76. package/dist/node/resolve-embed.js +480 -143
  77. package/dist/node/resolve-embed.js.map +1 -1
  78. package/dist/node/roots.d.ts +78 -0
  79. package/dist/node/roots.d.ts.map +1 -0
  80. package/dist/node/roots.js +170 -0
  81. package/dist/node/roots.js.map +1 -0
  82. package/dist/node/storage.d.ts +21 -3
  83. package/dist/node/storage.d.ts.map +1 -1
  84. package/dist/node/storage.js +242 -20
  85. package/dist/node/storage.js.map +1 -1
  86. package/dist/node/watch.d.ts +86 -0
  87. package/dist/node/watch.d.ts.map +1 -0
  88. package/dist/node/watch.js +174 -0
  89. package/dist/node/watch.js.map +1 -0
  90. package/dist/paged.d.ts +34 -0
  91. package/dist/paged.d.ts.map +1 -0
  92. package/dist/paged.js +44 -0
  93. package/dist/paged.js.map +1 -0
  94. package/dist/render.d.ts +1 -1
  95. package/dist/render.d.ts.map +1 -1
  96. package/dist/render.js +14 -0
  97. package/dist/render.js.map +1 -1
  98. package/dist/sections.d.ts.map +1 -1
  99. package/dist/sections.js +7 -3
  100. package/dist/sections.js.map +1 -1
  101. package/package.json +29 -16
  102. package/styles.css +5 -2
package/dist/paged.js ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * What the paginated output formats have to agree on.
3
+ *
4
+ * A PDF is printed by a browser and a `.docx` is assembled by a writer that
5
+ * never sees CSS, so the only thing keeping the two in step is a shared
6
+ * definition rather than two implementations that happen to match. This module
7
+ * is browser-safe and holds no I/O.
8
+ */
9
+ /** The info string an author writes on a fence to force a page break. */
10
+ export const PAGE_BREAK_FENCE = "cudoc-pagebreak";
11
+ /** `data.cudoc.kind` on the node the fence normalizes to. */
12
+ export const PAGE_BREAK_KIND = "pageBreak";
13
+ /** The class the printed stylesheets key their `break-after` rule off. */
14
+ export const PAGE_BREAK_CLASS = "cudoc-page-break";
15
+ /**
16
+ * Whether a node is an authored page break.
17
+ *
18
+ * A writer must test this **before** any generic `thematicBreak` handling: the
19
+ * break is carried on a `thematicBreak` because that is a childless flow node
20
+ * which can never swallow content, so a handler that dispatches on `type` alone
21
+ * turns an authored page break into a horizontal rule.
22
+ */
23
+ export const isPageBreak = (node) => node.data?.cudoc?.kind === PAGE_BREAK_KIND;
24
+ /**
25
+ * The node an authored break becomes.
26
+ *
27
+ * `hidden` gives it the user agent's `display: none`, so a host stylesheet
28
+ * cudoc does not own cannot give the empty element a margin on the primary
29
+ * site. The printed stylesheet turns it back on and breaks after it.
30
+ */
31
+ export const pageBreakNode = (position) => ({
32
+ type: "thematicBreak",
33
+ ...(position ? { position } : {}),
34
+ data: {
35
+ hName: "div",
36
+ hProperties: {
37
+ className: [PAGE_BREAK_CLASS],
38
+ "data-cudoc-break": "page",
39
+ hidden: true,
40
+ },
41
+ cudoc: { kind: PAGE_BREAK_KIND },
42
+ },
43
+ });
44
+ //# sourceMappingURL=paged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paged.js","sourceRoot":"","sources":["../src/paged.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAA;AAEjD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAA;AAE1C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAkB,EAAW,EAAE,CACzD,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,eAAe,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAgB,EAAE,CAAC,CAAC;IACnE,IAAI,EAAE,eAAe;IACrB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,IAAI,EAAE;QACJ,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,gBAAgB,CAAC;YAC7B,kBAAkB,EAAE,MAAM;YAC1B,MAAM,EAAE,IAAI;SACb;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;KACjC;CACF,CAAC,CAAA"}
package/dist/render.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Root } from "mdast";
2
2
  import type { Root as HastRoot } from "hast";
3
- import type { DocumentNode } from "./document.js";
3
+ import { type DocumentNode } from "./document.js";
4
4
  export type RenderOptions = {
5
5
  highlight?: (code: string, language?: string) => string;
6
6
  /** Explicit renderer for authored custom components. The callback returns HTML. */
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAkB,MAAM,MAAM,CAAA;AAI5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IACvD,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC,CAAA;CAC5D,CAAA;AACD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,aAAkB,GAC1B,QAAQ,CA8DV;AACD,eAAO,MAAM,cAAc,GACzB,MAAM,IAAI,EACV,UAAS,aAAkB,KAC1B,MAA6E,CAAA"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAkB,MAAM,MAAM,CAAA;AAI5D,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAEhE,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IACvD,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC,CAAA;CAC5D,CAAA;AACD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,aAAkB,GAC1B,QAAQ,CA2EV;AACD,eAAO,MAAM,cAAc,GACzB,MAAM,IAAI,EACV,UAAS,aAAkB,KAC1B,MAA6E,CAAA"}
package/dist/render.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { toHast } from "mdast-util-to-hast";
2
2
  import { toHtml } from "hast-util-to-html";
3
3
  import { fromHtml } from "hast-util-from-html";
4
+ import { capturedImage } from "./document.js";
4
5
  export function documentToHast(tree, options = {}) {
5
6
  const result = toHast(tree, {
6
7
  allowDangerousHtml: true,
@@ -32,6 +33,19 @@ export function documentToHast(tree, options = {}) {
32
33
  const node = value;
33
34
  if (node.type === "mdxjsEsm" || node.type === "yaml")
34
35
  return { type: "text", value: "" };
36
+ // A host's own component for a Markdown image renders as that image.
37
+ const image = capturedImage(node);
38
+ if (image)
39
+ return {
40
+ type: "element",
41
+ tagName: "img",
42
+ properties: {
43
+ src: image.url,
44
+ alt: image.alt ?? "",
45
+ ...(image.title ? { title: image.title } : {}),
46
+ },
47
+ children: [],
48
+ };
35
49
  const renderer = node.name && options.components?.[node.name];
36
50
  if (renderer)
37
51
  return fromHtml(renderer(node), { fragment: true })
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAqB,MAAM,eAAe,CAAA;AAOhE,MAAM,UAAU,cAAc,CAC5B,IAAU,EACV,UAAyB,EAAE;IAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE;QAC1B,kBAAkB,EAAE,IAAI;QACxB,GAAG,CAAC,OAAO,CAAC,SAAS;YACnB,CAAC,CAAC;gBACE,QAAQ,EAAE;oBACR,IAAI,CAAC,MAAM,EAAE,IAAI;wBACf,MAAM,IAAI,GAAG,OAAO,CAAC,SAAU,CAC7B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,IAAI,SAAS,CACvB,CAAA;wBACD,IAAI,IAAI;4BAAE,OAAO,EAAE,IAAI,EAAE,KAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;wBACtD,OAAO;4BACL,IAAI,EAAE,SAAkB;4BACxB,OAAO,EAAE,KAAK;4BACd,UAAU,EAAE,EAAE;4BACd,QAAQ,EAAE;gCACR;oCACE,IAAI,EAAE,SAAkB;oCACxB,OAAO,EAAE,MAAM;oCACf,UAAU,EAAE,EAAE;oCACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;iCACzD;6BACF;yBACF,CAAA;oBACH,CAAC;iBACF;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,cAAc,CAAC,KAAK,EAAE,KAAK;YACzB,MAAM,IAAI,GAAG,KAAgC,CAAA;YAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAClD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;YACpC,qEAAqE;YACrE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,KAAK;gBACP,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;wBACpB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC/C;oBACD,QAAQ,EAAE,EAAE;iBACb,CAAA;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7D,IAAI,QAAQ;gBACV,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;qBAChD,QAA4B,CAAA;YACjC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChE,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CACxG,CAAA;YACH,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACzD,CAAC;KACF,CAAa,CAAA;IACd,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,IAA6C,EAAE,EAAE;YACpE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,gBAAgB;oBACzC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,MAAM,gBAAgB,CAAA;gBAChD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;oBAChD,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CACnE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CACnE,CAAA;qBACE,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,gBAAgB;oBAC3D,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,GAAG,MAAM,gBAAgB,CAAC,CAAA;YACjE,CAAC;YACD,IAAI,UAAU,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5D,CAAC,CAAA;QACD,WAAW,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAU,EACV,UAAyB,EAAE,EACnB,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../src/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAS1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,gBAAqB,GAC5B,gBAAgB,EAAE,CA8CpB"}
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../src/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,MAAM,OAAO,CAAA;AASlD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,gBAAqB,GAC5B,gBAAgB,EAAE,CAoDpB"}
package/dist/sections.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { visit } from "unist-util-visit";
2
- import { getHeadingAnchorId, sliceSectionByAnchorId, } from "./internal/core/query/sections.js";
2
+ import { getHeadingAnchorId, sliceSectionAt, } from "./internal/core/query/sections.js";
3
3
  import { getNodeText } from "./internal/core/query/nodes.js";
4
4
  export function collectSections(tree, select = {}) {
5
5
  const result = [];
@@ -10,16 +10,20 @@ export function collectSections(tree, select = {}) {
10
10
  : [select.depth];
11
11
  if (depths?.some((d) => !Number.isInteger(d) || d < 1 || d > 6))
12
12
  throw new TypeError("cudoc: section depth must be 1-6");
13
- visit(tree, "heading", (heading) => {
13
+ visit(tree, "heading", (heading, index, parent) => {
14
14
  const anchorId = getHeadingAnchorId(heading);
15
15
  const title = getNodeText(heading.children.filter((n) => !["badge", "permalink"].includes(n.data?.cudoc?.kind ?? ""))).trim();
16
16
  if (!anchorId ||
17
+ typeof index !== "number" ||
18
+ !parent ||
17
19
  (select.anchors &&
18
20
  !select.anchors.map((id) => id.replace(/^#/, "")).includes(anchorId)) ||
19
21
  (select.titles && !select.titles.includes(title)) ||
20
22
  (depths && !depths.includes(heading.depth)))
21
23
  return;
22
- const section = structuredClone(sliceSectionByAnchorId(tree, anchorId));
24
+ // Sliced where the heading stands: a repeated id still yields this
25
+ // heading's own section, not the first one carrying the id.
26
+ const section = structuredClone(sliceSectionAt(tree, { heading, index, parent: parent }));
23
27
  if (select.includeChildren === false) {
24
28
  const end = section.children.findIndex((n, i) => i > 0 && n.type === "heading");
25
29
  if (end >= 0)
@@ -1 +1 @@
1
- {"version":3,"file":"sections.js","sourceRoot":"","sources":["../src/sections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../src/sections.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cudoment/cudoc",
3
- "version": "0.4.0",
4
- "description": "Reusable document ASTs: validation, queries, export and loading for cross-document embedding.",
3
+ "version": "0.6.0",
4
+ "description": "Document ASTs for documentation sites: Markdown compilation and syntax normalization, cross-document embedding, reference checking, datasets and the cudoc CLI.",
5
5
  "keywords": [
6
6
  "cudoc",
7
7
  "mdast",
@@ -10,7 +10,7 @@
10
10
  "ast",
11
11
  "documentation"
12
12
  ],
13
- "homepage": "https://github.com/cudoment/cudoc/tree/main/packages/cudoc#readme",
13
+ "homepage": "https://github.com/cudoment/cudoc#readme",
14
14
  "bugs": {
15
15
  "url": "https://github.com/cudoment/cudoc/issues"
16
16
  },
@@ -36,6 +36,10 @@
36
36
  "types": "./dist/ast.d.ts",
37
37
  "default": "./dist/ast.js"
38
38
  },
39
+ "./paged": {
40
+ "types": "./dist/paged.d.ts",
41
+ "default": "./dist/paged.js"
42
+ },
39
43
  "./syntax": {
40
44
  "types": "./dist/syntax.d.ts",
41
45
  "default": "./dist/syntax.js"
@@ -64,9 +68,17 @@
64
68
  "types": "./dist/node/paths.d.ts",
65
69
  "default": "./dist/node/paths.js"
66
70
  },
67
- "./transforms/*": {
68
- "types": "./dist/internal/transforms/*.d.ts",
69
- "default": "./dist/internal/transforms/*.js"
71
+ "./node/roots": {
72
+ "types": "./dist/node/roots.d.ts",
73
+ "default": "./dist/node/roots.js"
74
+ },
75
+ "./transforms/table-cell-list": {
76
+ "types": "./dist/internal/transforms/table-cell-list/index.d.ts",
77
+ "default": "./dist/internal/transforms/table-cell-list/index.js"
78
+ },
79
+ "./transforms/table-column-layout": {
80
+ "types": "./dist/internal/transforms/table-column-layout/index.d.ts",
81
+ "default": "./dist/internal/transforms/table-column-layout/index.js"
70
82
  },
71
83
  "./document": {
72
84
  "types": "./dist/document.d.ts",
@@ -120,7 +132,12 @@
120
132
  "types": "./dist/node/prepare-embeds.d.ts",
121
133
  "default": "./dist/node/prepare-embeds.js"
122
134
  },
123
- "./styles.css": "./styles.css"
135
+ "./node/watch": {
136
+ "types": "./dist/node/watch.d.ts",
137
+ "default": "./dist/node/watch.js"
138
+ },
139
+ "./styles.css": "./styles.css",
140
+ "./package.json": "./package.json"
124
141
  },
125
142
  "files": [
126
143
  "dist",
@@ -136,9 +153,13 @@
136
153
  "clean": "rm -rf dist *.tsbuildinfo"
137
154
  },
138
155
  "dependencies": {
156
+ "@types/hast": "^3.0.4",
157
+ "@types/mdast": "^4.0.4",
158
+ "@types/unist": "^3.0.3",
139
159
  "@mdx-js/mdx": "^3.1.1",
140
160
  "estree-util-value-to-estree": "^3.5.0",
141
161
  "github-slugger": "^2.0.0",
162
+ "acorn": "^8.15.0",
142
163
  "hast-util-from-html": "^2.0.3",
143
164
  "hast-util-to-html": "^9.0.5",
144
165
  "mdast-util-mdx-jsx": "^3.2.0",
@@ -153,15 +174,7 @@
153
174
  "vfile": "^6.0.3",
154
175
  "yaml": "^2.9.0"
155
176
  },
156
- "peerDependencies": {
157
- "@types/mdast": "^4.0.4"
158
- },
159
- "peerDependenciesMeta": {
160
- "@types/mdast": {
161
- "optional": true
162
- }
163
- },
164
177
  "bin": {
165
- "cudoc": "./dist/node/cli.js"
178
+ "cudoc": "dist/node/cli.js"
166
179
  }
167
180
  }
package/styles.css CHANGED
@@ -85,6 +85,9 @@
85
85
  border-left-color: var(--cudoc-danger);
86
86
  background: var(--cudoc-danger-wash);
87
87
  }
88
- .cudoc-embed {
89
- min-width: 0;
88
+ /* An authored page break is invisible on a screen; the paginated exports
89
+ turn it back on and break after it. The `hidden` attribute already does
90
+ this, but a host reset that styles `[hidden]` would otherwise show a gap. */
91
+ .cudoc-page-break {
92
+ display: none;
90
93
  }