@cudoment/cudoc 0.1.0 → 0.2.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 (101) hide show
  1. package/README.md +20 -47
  2. package/dist/dataset.d.ts +10 -0
  3. package/dist/dataset.d.ts.map +1 -0
  4. package/dist/dataset.js +44 -0
  5. package/dist/dataset.js.map +1 -0
  6. package/dist/document.d.ts +74 -0
  7. package/dist/document.d.ts.map +1 -0
  8. package/dist/document.js +435 -0
  9. package/dist/document.js.map +1 -0
  10. package/dist/internal/core/ast/validate.d.ts.map +1 -1
  11. package/dist/internal/core/ast/validate.js +9 -2
  12. package/dist/internal/core/ast/validate.js.map +1 -1
  13. package/dist/internal/core/query/nodes.d.ts.map +1 -1
  14. package/dist/internal/core/query/nodes.js +3 -1
  15. package/dist/internal/core/query/nodes.js.map +1 -1
  16. package/dist/internal/core/query/sections.d.ts.map +1 -1
  17. package/dist/internal/core/query/sections.js +2 -1
  18. package/dist/internal/core/query/sections.js.map +1 -1
  19. package/dist/internal/core/syntax/heading-metadata.js +1 -1
  20. package/dist/internal/core/syntax/heading-metadata.js.map +1 -1
  21. package/dist/internal/transforms/table-cell-list/build-table-cell-children.d.ts +5 -0
  22. package/dist/internal/transforms/table-cell-list/build-table-cell-children.d.ts.map +1 -0
  23. package/dist/internal/transforms/table-cell-list/build-table-cell-children.js +169 -0
  24. package/dist/internal/transforms/table-cell-list/build-table-cell-children.js.map +1 -0
  25. package/dist/internal/transforms/table-cell-list/elements.d.ts +15 -0
  26. package/dist/internal/transforms/table-cell-list/elements.d.ts.map +1 -0
  27. package/dist/internal/transforms/table-cell-list/elements.js +16 -0
  28. package/dist/internal/transforms/table-cell-list/elements.js.map +1 -0
  29. package/dist/internal/transforms/table-cell-list/index.d.ts +18 -0
  30. package/dist/internal/transforms/table-cell-list/index.d.ts.map +1 -0
  31. package/dist/internal/transforms/table-cell-list/index.js +45 -0
  32. package/dist/internal/transforms/table-cell-list/index.js.map +1 -0
  33. package/dist/internal/transforms/table-cell-list/nodes.d.ts +9 -0
  34. package/dist/internal/transforms/table-cell-list/nodes.d.ts.map +1 -0
  35. package/dist/internal/transforms/table-cell-list/nodes.js +24 -0
  36. package/dist/internal/transforms/table-cell-list/nodes.js.map +1 -0
  37. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.d.ts +6 -0
  38. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.d.ts.map +1 -0
  39. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.js +101 -0
  40. package/dist/internal/transforms/table-cell-list/parse-inline-markdown.js.map +1 -0
  41. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.d.ts +22 -0
  42. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.d.ts.map +1 -0
  43. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.js +315 -0
  44. package/dist/internal/transforms/table-cell-list/parse-table-cell-list.js.map +1 -0
  45. package/dist/internal/transforms/table-column-layout/create-table.d.ts +45 -0
  46. package/dist/internal/transforms/table-column-layout/create-table.d.ts.map +1 -0
  47. package/dist/internal/transforms/table-column-layout/create-table.js +121 -0
  48. package/dist/internal/transforms/table-column-layout/create-table.js.map +1 -0
  49. package/dist/internal/transforms/table-column-layout/index.d.ts +51 -0
  50. package/dist/internal/transforms/table-column-layout/index.d.ts.map +1 -0
  51. package/dist/internal/transforms/table-column-layout/index.js +96 -0
  52. package/dist/internal/transforms/table-column-layout/index.js.map +1 -0
  53. package/dist/internal/transforms/table-column-layout/split-cell.d.ts +24 -0
  54. package/dist/internal/transforms/table-column-layout/split-cell.d.ts.map +1 -0
  55. package/dist/internal/transforms/table-column-layout/split-cell.js +219 -0
  56. package/dist/internal/transforms/table-column-layout/split-cell.js.map +1 -0
  57. package/dist/markdown.d.ts +10 -0
  58. package/dist/markdown.d.ts.map +1 -0
  59. package/dist/markdown.js +47 -0
  60. package/dist/markdown.js.map +1 -0
  61. package/dist/node/cli.d.ts +3 -0
  62. package/dist/node/cli.d.ts.map +1 -0
  63. package/dist/node/cli.js +37 -0
  64. package/dist/node/cli.js.map +1 -0
  65. package/dist/node/dataset.d.ts +19 -0
  66. package/dist/node/dataset.d.ts.map +1 -0
  67. package/dist/node/dataset.js +51 -0
  68. package/dist/node/dataset.js.map +1 -0
  69. package/dist/node/library.d.ts +56 -0
  70. package/dist/node/library.d.ts.map +1 -0
  71. package/dist/node/library.js +163 -0
  72. package/dist/node/library.js.map +1 -0
  73. package/dist/node/paths.d.ts.map +1 -1
  74. package/dist/node/paths.js +1 -1
  75. package/dist/node/paths.js.map +1 -1
  76. package/dist/node/prepare-embeds.d.ts +13 -0
  77. package/dist/node/prepare-embeds.d.ts.map +1 -0
  78. package/dist/node/prepare-embeds.js +54 -0
  79. package/dist/node/prepare-embeds.js.map +1 -0
  80. package/dist/node/resolve-embed.d.ts +33 -0
  81. package/dist/node/resolve-embed.d.ts.map +1 -0
  82. package/dist/node/resolve-embed.js +386 -0
  83. package/dist/node/resolve-embed.js.map +1 -0
  84. package/dist/node/storage.d.ts +10 -0
  85. package/dist/node/storage.d.ts.map +1 -0
  86. package/dist/node/storage.js +85 -0
  87. package/dist/node/storage.js.map +1 -0
  88. package/dist/query.d.ts +1 -0
  89. package/dist/query.d.ts.map +1 -1
  90. package/dist/query.js +1 -0
  91. package/dist/query.js.map +1 -1
  92. package/dist/render.d.ts +11 -0
  93. package/dist/render.d.ts.map +1 -0
  94. package/dist/render.js +63 -0
  95. package/dist/render.js.map +1 -0
  96. package/dist/sections.d.ts +15 -0
  97. package/dist/sections.d.ts.map +1 -0
  98. package/dist/sections.js +40 -0
  99. package/dist/sections.js.map +1 -0
  100. package/package.json +66 -5
  101. package/styles.css +34 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Lays out a table's column as host components, optionally splitting one column
3
+ * across several cells.
4
+ *
5
+ * Which table this applies to is described declaratively — the heading above it
6
+ * and the header text of the column — because options have to survive JSON
7
+ * serialization on their way through a bundler config.
8
+ */
9
+ import type { SectionSelector, TransformContext } from "../../core/index.js";
10
+ import { type DelimiterPair } from "../../core/index.js";
11
+ import { type ResolvedTableComponents, type TableComponents } from "./create-table.js";
12
+ import { resolveSplitOptions, type SplitOptions } from "./split-cell.js";
13
+ export declare const DEFAULT_SPAN_ATTRIBUTE = "colSpan";
14
+ export type TableColumnLayoutOptions = {
15
+ /** The heading that introduces the table this rule applies to. */
16
+ section: SectionSelector;
17
+ /** Header text of the column to lay out. Compared after collapsing spaces. */
18
+ columnHeaders: string[];
19
+ split?: SplitOptions;
20
+ components?: TableComponents;
21
+ /** Attribute used to widen a cell. Defaults to `colSpan`. */
22
+ spanAttribute?: string;
23
+ /**
24
+ * Delimiter pairs stripped from a header cell before comparison, so a column
25
+ * header carrying badge or id syntax still matches.
26
+ */
27
+ metadataDelimiters?: DelimiterPair[];
28
+ /** Element names ignored when reading header text, such as a badge. */
29
+ ignoreElements?: string[];
30
+ };
31
+ export type ResolvedTableColumnLayoutOptions = {
32
+ section: SectionSelector;
33
+ columnHeaders: string[];
34
+ split: ReturnType<typeof resolveSplitOptions>;
35
+ components: ResolvedTableComponents;
36
+ spanAttribute: string;
37
+ metadataDelimiters: DelimiterPair[];
38
+ ignoreElements: string[];
39
+ };
40
+ export declare const resolveTableColumnLayoutOptions: (options: TableColumnLayoutOptions, optionPath?: string) => ResolvedTableColumnLayoutOptions;
41
+ /**
42
+ * Runs as a post transform: the cells it reads must already be normalized by
43
+ * the transforms that run on the way down, and any transform that needs to see
44
+ * the generated subtree has to run after this one.
45
+ */
46
+ export declare const createTableColumnLayoutTransform: (options: ResolvedTableColumnLayoutOptions) => ({ ancestors, index, node, parent }: TransformContext) => void;
47
+ export { createLayoutTable, resolveTableComponents } from "./create-table.js";
48
+ export { resolveSplitOptions, splitCell } from "./split-cell.js";
49
+ export type { TableComponents } from "./create-table.js";
50
+ export type { SplitOptions } from "./split-cell.js";
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/internal/transforms/table-column-layout/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAUL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAExE,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C,MAAM,MAAM,wBAAwB,GAAG;IACrC,kEAAkE;IAClE,OAAO,EAAE,eAAe,CAAA;IACxB,8EAA8E;IAC9E,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAA;IACpC,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,eAAe,CAAA;IACxB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA;IAC7C,UAAU,EAAE,uBAAuB,CAAA;IACnC,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,aAAa,EAAE,CAAA;IACnC,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,+BAA+B,GAC1C,SAAS,wBAAwB,EACjC,mBAAgC,KAC/B,gCA8BF,CAAA;AA6DD;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,GAC1C,SAAS,gCAAgC,MACzC,oCAAoC,gBAAgB,KAAG,IAyBvD,CAAA;AAEH,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Lays out a table's column as host components, optionally splitting one column
3
+ * across several cells.
4
+ *
5
+ * Which table this applies to is described declaratively — the heading above it
6
+ * and the header text of the column — because options have to survive JSON
7
+ * serialization on their way through a bundler config.
8
+ */
9
+ import { assertSectionSelector, findPreviousHeading, getInlineText, isMdxTextElementNamed, matchesSectionHeading, normalizeHeaderText, stripDelimited, DEFAULT_BADGE_DELIMITERS, DEFAULT_ID_DELIMITERS, } from "../../core/index.js";
10
+ import { createLayoutTable, resolveTableComponents, } from "./create-table.js";
11
+ import { resolveSplitOptions } from "./split-cell.js";
12
+ export const DEFAULT_SPAN_ATTRIBUTE = "colSpan";
13
+ export const resolveTableColumnLayoutOptions = (options, optionPath = "tableColumnLayout") => {
14
+ if (!options || typeof options !== "object") {
15
+ throw new TypeError(`${optionPath} must be an object`);
16
+ }
17
+ const { columnHeaders } = options;
18
+ if (!Array.isArray(columnHeaders) ||
19
+ columnHeaders.length === 0 ||
20
+ !columnHeaders.every((header) => typeof header === "string" && header.trim())) {
21
+ throw new TypeError(`${optionPath}.columnHeaders must be a non-empty string array`);
22
+ }
23
+ return {
24
+ section: assertSectionSelector(options.section, `${optionPath}.section`),
25
+ columnHeaders: [...columnHeaders],
26
+ split: resolveSplitOptions(options.split),
27
+ components: resolveTableComponents(options.components),
28
+ spanAttribute: options.spanAttribute ?? DEFAULT_SPAN_ATTRIBUTE,
29
+ metadataDelimiters: options.metadataDelimiters ?? [
30
+ DEFAULT_BADGE_DELIMITERS,
31
+ DEFAULT_ID_DELIMITERS,
32
+ ],
33
+ ignoreElements: options.ignoreElements ?? ["Badge"],
34
+ };
35
+ };
36
+ /**
37
+ * Reads a header cell's text, dropping generated elements and leftover metadata
38
+ * syntax so the comparison sees what the author wrote.
39
+ */
40
+ const readHeaderText = (cell, options) => {
41
+ const fromNode = (node) => {
42
+ if (node.data?.cudoc?.kind ===
43
+ "badge")
44
+ return "";
45
+ if (options.ignoreElements.some((name) => isMdxTextElementNamed(node, name))) {
46
+ return "";
47
+ }
48
+ if (node.type === "text") {
49
+ return stripDelimited(node.value, options.metadataDelimiters);
50
+ }
51
+ if ("value" in node && typeof node.value === "string")
52
+ return node.value;
53
+ if ("children" in node && Array.isArray(node.children)) {
54
+ return node.children.map(fromNode).join("");
55
+ }
56
+ return "";
57
+ };
58
+ return normalizeHeaderText(cell.children.map(fromNode).join(""));
59
+ };
60
+ const findColumnIndex = (table, options) => {
61
+ const headerRow = table.children[0];
62
+ if (!headerRow)
63
+ return -1;
64
+ return headerRow.children.findIndex((cell) => options.columnHeaders.includes(readHeaderText(cell, options)));
65
+ };
66
+ const readHeadingText = (heading, options) => stripDelimited(getInlineText(heading.children.filter((node) => node.data?.cudoc
67
+ ?.kind !== "badge")), options.metadataDelimiters);
68
+ /**
69
+ * Runs as a post transform: the cells it reads must already be normalized by
70
+ * the transforms that run on the way down, and any transform that needs to see
71
+ * the generated subtree has to run after this one.
72
+ */
73
+ export const createTableColumnLayoutTransform = (options) => ({ ancestors, index, node, parent }) => {
74
+ if (node.type !== "table" || !parent || typeof index !== "number")
75
+ return;
76
+ const previousHeading = findPreviousHeading(parent, index, ancestors);
77
+ if (!previousHeading ||
78
+ !matchesSectionHeading(previousHeading, options.section, (heading) => readHeadingText(heading, options))) {
79
+ return;
80
+ }
81
+ const table = node;
82
+ const columnIndex = findColumnIndex(table, options);
83
+ if (columnIndex === -1)
84
+ return;
85
+ parent.children[index] = createLayoutTable({
86
+ columnIndex,
87
+ components: options.components,
88
+ split: options.split,
89
+ spanAttribute: options.spanAttribute,
90
+ table,
91
+ });
92
+ parent.children[index].position = table.position;
93
+ };
94
+ export { createLayoutTable, resolveTableComponents } from "./create-table.js";
95
+ export { resolveSplitOptions, splitCell } from "./split-cell.js";
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/internal/transforms/table-column-layout/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CudocTableCellContent } from "../../core/index.js";
2
+ export declare const DEFAULT_SPLIT_MIN_ITEMS = 4;
3
+ export declare const DEFAULT_SPLIT_COLUMNS = 2;
4
+ export type SplitOptions = {
5
+ /** Split only once the cell holds at least this many items. */
6
+ minItems?: number;
7
+ /** How many columns the cell becomes when it is split. */
8
+ columns?: number;
9
+ };
10
+ export type ResolvedSplitOptions = {
11
+ minItems: number;
12
+ columns: number;
13
+ };
14
+ export declare const resolveSplitOptions: (options?: SplitOptions) => ResolvedSplitOptions;
15
+ /**
16
+ * Splits a cell's items across columns, or returns it unchanged when there are
17
+ * too few to be worth splitting.
18
+ *
19
+ * Items are spread evenly and any remainder goes to the leading columns, so no
20
+ * column ends up empty. For two columns this is the same boundary as taking the
21
+ * ceiling of half the items.
22
+ */
23
+ export declare const splitCell: (children: CudocTableCellContent[], options: ResolvedSplitOptions) => CudocTableCellContent[][];
24
+ //# sourceMappingURL=split-cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-cell.d.ts","sourceRoot":"","sources":["../../../../src/internal/transforms/table-column-layout/split-cell.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AA0ShE,eAAO,MAAM,uBAAuB,IAAI,CAAA;AACxC,eAAO,MAAM,qBAAqB,IAAI,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,UAAS,YAAiB,KACzB,oBAcF,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,qBAAqB,EAAE,EACjC,SAAS,oBAAoB,KAC5B,qBAAqB,EAAE,EAgBzB,CAAA"}
@@ -0,0 +1,219 @@
1
+ import { createMdxAttribute, isMdxTextElementNamed } from "../../core/index.js";
2
+ import { createBreak, isBreak } from "../table-cell-list/elements.js";
3
+ const hasVisibleCellContent = (children) => children.some((child) => {
4
+ if (child.type === "text")
5
+ return child.value.trim().length > 0;
6
+ return !isBreak(child);
7
+ });
8
+ const isMdxListElement = (node) => isMdxTextElementNamed(node, "ul") || isMdxTextElementNamed(node, "ol");
9
+ const isMdxListItemElement = (node) => isMdxTextElementNamed(node, "li");
10
+ const isSemanticList = (node) => node.type === "list";
11
+ const isNamedMdxAttribute = (attribute, name) => attribute.type === "mdxJsxAttribute" && attribute.name === name;
12
+ const hasNamedMdxAttribute = (node, name) => node.attributes.some((attribute) => isNamedMdxAttribute(attribute, name));
13
+ const readOlStartValue = (list) => {
14
+ const startAttribute = list.attributes.find((attribute) => isNamedMdxAttribute(attribute, "start"));
15
+ if (!startAttribute)
16
+ return 1;
17
+ if (typeof startAttribute.value !== "string")
18
+ return null;
19
+ const normalizedStart = startAttribute.value.trim();
20
+ if (!/^[+-]?\d+$/.test(normalizedStart))
21
+ return null;
22
+ const startValue = Number(normalizedStart);
23
+ return Number.isSafeInteger(startValue) ? startValue : null;
24
+ };
25
+ const isUnsupportedListElement = (node) => node.name === "ol" &&
26
+ (hasNamedMdxAttribute(node, "reversed") || readOlStartValue(node) === null);
27
+ const cloneListAttributes = (list, startOffset) => {
28
+ const attributes = list.attributes.map((attribute) => structuredClone(attribute));
29
+ if (list.name !== "ol" || startOffset === 0)
30
+ return attributes;
31
+ const authoredStart = readOlStartValue(list);
32
+ if (authoredStart === null)
33
+ return attributes;
34
+ const startValue = String(authoredStart + startOffset);
35
+ const startAttributeIndex = attributes.findIndex((attribute) => isNamedMdxAttribute(attribute, "start"));
36
+ if (startAttributeIndex === -1) {
37
+ return [...attributes, createMdxAttribute("start", startValue)];
38
+ }
39
+ attributes[startAttributeIndex] = createMdxAttribute("start", startValue);
40
+ return attributes;
41
+ };
42
+ const cloneListElement = (list, children, startOffset = 0) => {
43
+ return {
44
+ ...list,
45
+ attributes: cloneListAttributes(list, startOffset),
46
+ children: children.map((child) => structuredClone(child)),
47
+ };
48
+ };
49
+ const cloneSemanticList = (list, children, startOffset = 0) => {
50
+ const start = list.ordered
51
+ ? (typeof list.start === "number" ? list.start : 1) + startOffset
52
+ : null;
53
+ return {
54
+ ...list,
55
+ start,
56
+ children: children.map((child) => structuredClone(child)),
57
+ };
58
+ };
59
+ const collectCellItems = (children) => {
60
+ const items = [];
61
+ let line = [];
62
+ let pendingBreakCount = 0;
63
+ const flushLine = () => {
64
+ if (hasVisibleCellContent(line)) {
65
+ items.push({
66
+ preservedBreaksBefore: pendingBreakCount,
67
+ children: line,
68
+ type: "line",
69
+ });
70
+ pendingBreakCount = 0;
71
+ }
72
+ line = [];
73
+ };
74
+ for (const child of children) {
75
+ if (isBreak(child)) {
76
+ flushLine();
77
+ pendingBreakCount++;
78
+ continue;
79
+ }
80
+ if (isSemanticList(child)) {
81
+ flushLine();
82
+ if (child.children.length > 0) {
83
+ items.push(...child.children.map((item, itemIndex) => ({
84
+ kind: "mdast",
85
+ listItemIndex: itemIndex,
86
+ preservedBreaksBefore: itemIndex === 0 ? pendingBreakCount : 0,
87
+ item,
88
+ list: child,
89
+ type: "listItem",
90
+ })));
91
+ pendingBreakCount = 0;
92
+ }
93
+ else {
94
+ line.push(child);
95
+ }
96
+ continue;
97
+ }
98
+ if (isMdxListElement(child)) {
99
+ flushLine();
100
+ if (isUnsupportedListElement(child)) {
101
+ line.push(child);
102
+ continue;
103
+ }
104
+ const listItems = child.children.filter(isMdxListItemElement);
105
+ if (listItems.length > 0) {
106
+ items.push(...listItems.map((item, itemIndex) => ({
107
+ kind: "mdx",
108
+ listItemIndex: itemIndex,
109
+ preservedBreaksBefore: itemIndex === 0 ? pendingBreakCount : 0,
110
+ item,
111
+ list: child,
112
+ type: "listItem",
113
+ })));
114
+ pendingBreakCount = 0;
115
+ }
116
+ else {
117
+ line.push(child);
118
+ }
119
+ continue;
120
+ }
121
+ line.push(child);
122
+ }
123
+ flushLine();
124
+ return items;
125
+ };
126
+ const renderCellItems = (items) => {
127
+ const children = [];
128
+ let pendingList;
129
+ const appendBreaks = (count) => {
130
+ if (!hasVisibleCellContent(children))
131
+ return;
132
+ for (let i = 0; i < count; i++)
133
+ children.push(createBreak());
134
+ };
135
+ const flushList = () => {
136
+ if (!pendingList || pendingList.items.length === 0)
137
+ return;
138
+ children.push(pendingList.kind === "mdast"
139
+ ? cloneSemanticList(pendingList.list, pendingList.items, pendingList.startOffset)
140
+ : cloneListElement(pendingList.list, pendingList.items, pendingList.startOffset));
141
+ pendingList = undefined;
142
+ };
143
+ for (const item of items) {
144
+ if (item.type === "listItem") {
145
+ if (pendingList &&
146
+ (pendingList.kind !== item.kind ||
147
+ pendingList.list !== item.list ||
148
+ item.preservedBreaksBefore > 0)) {
149
+ flushList();
150
+ }
151
+ if (!pendingList) {
152
+ appendBreaks(item.preservedBreaksBefore);
153
+ pendingList =
154
+ item.kind === "mdast"
155
+ ? {
156
+ kind: "mdast",
157
+ list: item.list,
158
+ items: [],
159
+ startOffset: item.listItemIndex,
160
+ }
161
+ : {
162
+ kind: "mdx",
163
+ list: item.list,
164
+ items: [],
165
+ startOffset: item.listItemIndex,
166
+ };
167
+ }
168
+ if (pendingList.kind === "mdast" && item.kind === "mdast") {
169
+ pendingList.items.push(item.item);
170
+ }
171
+ else if (pendingList.kind === "mdx" && item.kind === "mdx") {
172
+ pendingList.items.push(item.item);
173
+ }
174
+ continue;
175
+ }
176
+ flushList();
177
+ appendBreaks(item.preservedBreaksBefore);
178
+ children.push(...item.children.map((child) => structuredClone(child)));
179
+ }
180
+ flushList();
181
+ return children;
182
+ };
183
+ export const DEFAULT_SPLIT_MIN_ITEMS = 4;
184
+ export const DEFAULT_SPLIT_COLUMNS = 2;
185
+ export const resolveSplitOptions = (options = {}) => {
186
+ const columns = options.columns ?? DEFAULT_SPLIT_COLUMNS;
187
+ const minItems = options.minItems ?? DEFAULT_SPLIT_MIN_ITEMS;
188
+ if (!Number.isInteger(columns) || columns < 2) {
189
+ throw new TypeError("split.columns must be an integer of 2 or more");
190
+ }
191
+ if (!Number.isInteger(minItems) || minItems < columns) {
192
+ throw new TypeError(`split.minItems must be an integer of at least split.columns (${columns})`);
193
+ }
194
+ return { columns, minItems };
195
+ };
196
+ /**
197
+ * Splits a cell's items across columns, or returns it unchanged when there are
198
+ * too few to be worth splitting.
199
+ *
200
+ * Items are spread evenly and any remainder goes to the leading columns, so no
201
+ * column ends up empty. For two columns this is the same boundary as taking the
202
+ * ceiling of half the items.
203
+ */
204
+ export const splitCell = (children, options) => {
205
+ const items = collectCellItems(children);
206
+ if (items.length < options.minItems)
207
+ return [children];
208
+ const perColumn = Math.floor(items.length / options.columns);
209
+ const remainder = items.length % options.columns;
210
+ const layout = [];
211
+ let offset = 0;
212
+ for (let column = 0; column < options.columns; column += 1) {
213
+ const size = perColumn + (column < remainder ? 1 : 0);
214
+ layout.push(renderCellItems(items.slice(offset, offset + size)));
215
+ offset += size;
216
+ }
217
+ return layout;
218
+ };
219
+ //# sourceMappingURL=split-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-cell.js","sourceRoot":"","sources":["../../../../src/internal/transforms/table-column-layout/split-cell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Root } from "mdast";
2
+ import { normalizeDocument, type DocumentOptions } from "./document.js";
3
+ export type CompiledDocument = {
4
+ tree: Root;
5
+ frontmatter: Record<string, unknown>;
6
+ diagnostics: ReturnType<typeof normalizeDocument>;
7
+ };
8
+ /** Standalone Markdown/MDX compiler. Host adapters supply their actual compiler instead. */
9
+ export declare function compileDocument(source: string, options?: DocumentOptions): CompiledDocument;
10
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAQjC,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EAErB,MAAM,eAAe,CAAA;AAEtB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAA;CAClD,CAAA;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,gBAAgB,CAwClB"}
@@ -0,0 +1,47 @@
1
+ import { unified } from "unified";
2
+ import remarkParse from "remark-parse";
3
+ import remarkGfm from "remark-gfm";
4
+ import remarkDirective from "remark-directive";
5
+ import remarkFrontmatter from "remark-frontmatter";
6
+ import { compileSync } from "@mdx-js/mdx";
7
+ import { parse as parseYaml } from "yaml";
8
+ import { normalizeDocument, } from "./document.js";
9
+ /** Standalone Markdown/MDX compiler. Host adapters supply their actual compiler instead. */
10
+ export function compileDocument(source, options = {}) {
11
+ let tree;
12
+ if (options.format === "mdx") {
13
+ let captured;
14
+ const capture = () => (value) => {
15
+ captured = structuredClone(value);
16
+ };
17
+ compileSync(source, {
18
+ remarkPlugins: [
19
+ remarkGfm,
20
+ remarkFrontmatter,
21
+ ...(options.host === "docusaurus" ? [remarkDirective] : []),
22
+ capture,
23
+ ],
24
+ });
25
+ tree = captured;
26
+ }
27
+ else {
28
+ const processor = unified()
29
+ .use(remarkParse)
30
+ .use(remarkGfm)
31
+ .use(remarkFrontmatter);
32
+ if (options.host === "docusaurus")
33
+ processor.use(remarkDirective);
34
+ tree = processor.runSync(processor.parse(source));
35
+ }
36
+ const frontmatterNode = tree.children.find((n) => n.type === "yaml");
37
+ const frontmatter = frontmatterNode
38
+ ? parseYaml(frontmatterNode.value, { maxAliasCount: 100 })
39
+ : {};
40
+ if (frontmatter !== null &&
41
+ (typeof frontmatter !== "object" || Array.isArray(frontmatter)))
42
+ throw new Error("cudoc: frontmatter must be a mapping");
43
+ tree.children = tree.children.filter((n) => !["yaml", "mdxjsEsm"].includes(n.type));
44
+ const diagnostics = normalizeDocument(tree, source, options);
45
+ return { tree, frontmatter: frontmatter ?? {}, diagnostics };
46
+ }
47
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,eAAe,MAAM,kBAAkB,CAAA;AAC9C,OAAO,iBAAiB,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EACL,iBAAiB,GAGlB,MAAM,eAAe,CAAA;AAQtB,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,UAA2B,EAAE;IAE7B,IAAI,IAAU,CAAA;IACd,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,QAA0B,CAAA;QAC9B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,KAAW,EAAE,EAAE;YACpC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QACnC,CAAC,CAAA;QACD,WAAW,CAAC,MAAM,EAAE;YAClB,aAAa,EAAE;gBACb,SAAS;gBACT,iBAAiB;gBACjB,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,OAAO;aACR;SACF,CAAC,CAAA;QACF,IAAI,GAAG,QAAS,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,OAAO,EAAE;aACxB,GAAG,CAAC,WAAW,CAAC;aAChB,GAAG,CAAC,SAAS,CAAC;aACd,GAAG,CAAC,iBAAiB,CAAC,CAAA;QACzB,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QACjE,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,CAAA;IAC3D,CAAC;IACD,MAAM,eAAe,GAAI,IAAI,CAAC,QAAsC,CAAC,IAAI,CACvE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CACzB,CAAA;IACD,MAAM,WAAW,GAAG,eAAe;QACjC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,KAAM,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAA;IACN,IACE,WAAW,KAAK,IAAI;QACpB,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/D,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAA;IACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE,EAAE,WAAW,EAAE,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { buildDocuments, buildDocumentsAsync } from "./library.js";
6
+ import { prepareEmbeds } from "./prepare-embeds.js";
7
+ import { generateDataset } from "./dataset.js";
8
+ try {
9
+ const [command, ...args] = process.argv.slice(2);
10
+ if (!["collect", "dataset"].includes(command) ||
11
+ args.length !== 2 ||
12
+ args[0] !== "--config")
13
+ throw new Error("Usage: cudoc <collect|dataset> --config config.mjs");
14
+ const config = args[1].endsWith(".json")
15
+ ? JSON.parse(fs.readFileSync(args[1], "utf8"))
16
+ : (await import(pathToFileURL(path.resolve(args[1])).href)).default;
17
+ if (command === "dataset")
18
+ console.log(JSON.stringify(generateDataset(config)));
19
+ else {
20
+ const library = config.compiler
21
+ ? await buildDocumentsAsync({
22
+ ...config,
23
+ compiler: async (...parameters) => config.compiler(...parameters),
24
+ })
25
+ : buildDocuments(config);
26
+ await prepareEmbeds(library, config.outDir);
27
+ console.log(JSON.stringify({
28
+ documentCount: library.documents.length,
29
+ outDir: config.outDir ?? ".cudoc/documents",
30
+ }));
31
+ }
32
+ }
33
+ catch (error) {
34
+ console.error(error);
35
+ process.exitCode = 1;
36
+ }
37
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/node/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,IAAI,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChD,IACE,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU;QAEtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IACrE,IAAI,OAAO,KAAK,SAAS;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;SACjD,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ;YAC7B,CAAC,CAAC,MAAM,mBAAmB,CAAC;gBACxB,GAAG,MAAM;gBACT,QAAQ,EAAE,KAAK,EACb,GAAG,UAA2D,EAC9D,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;aACpC,CAAC;YACJ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC1B,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;YACb,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;YACvC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,kBAAkB;SAC5C,CAAC,CACH,CAAA;IACH,CAAC;AACH,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACpB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;AACtB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type ProjectionOptions } from "../dataset.js";
2
+ export type DatasetOptions = ProjectionOptions & {
3
+ inputDir: string;
4
+ outDir: string;
5
+ documents?: string[];
6
+ scopes?: string[];
7
+ projectionId?: string;
8
+ requireVersion?: boolean;
9
+ };
10
+ export declare function generateDataset({ inputDir, outDir, documents, scopes, projectionId, requireVersion, ...projection }: DatasetOptions): {
11
+ schemaVersion: string;
12
+ documentCount: number;
13
+ documents: {
14
+ id: string;
15
+ hash: string;
16
+ outputHash: string;
17
+ }[];
18
+ };
19
+ //# sourceMappingURL=dataset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/node/dataset.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAUlE,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AACD,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,MAAM,EACN,SAAS,EACT,MAAM,EACN,YAAuB,EACvB,cAAqB,EACrB,GAAG,UAAU,EACd,EAAE,cAAc;;;;YAiBK,MAAM;cAAQ,MAAM;oBAAc,MAAM;;EA+B7D"}
@@ -0,0 +1,51 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { validateAstContract } from "../internal/core/ast/validate.js";
4
+ import { projectAst } from "../dataset.js";
5
+ import { hash, sourceFiles, publishDirectory, safePath, posix, writeJson, } from "./storage.js";
6
+ export function generateDataset({ inputDir, outDir, documents, scopes, projectionId = "custom", requireVersion = true, ...projection }) {
7
+ const entries = sourceFiles(inputDir, [".json"])
8
+ .filter((file) => !["manifest.json", "meta.json"].includes(path.basename(file)))
9
+ .map((file) => ({
10
+ file,
11
+ id: posix(path.relative(inputDir, file)).replace(/\.json$/, ""),
12
+ }))
13
+ .filter((entry) => (!documents || documents.includes(entry.id)) &&
14
+ (!scopes || scopes.includes(entry.id.split("/")[0])));
15
+ for (const id of documents ?? [])
16
+ if (!entries.some((e) => e.id === id))
17
+ throw new Error(`cudoc: dataset document missing: ${id}`);
18
+ const inputs = [];
19
+ publishDirectory(inputDir, outDir, (staging) => {
20
+ for (const { file, id } of entries) {
21
+ try {
22
+ const source = fs.readFileSync(file, "utf8");
23
+ const input = JSON.parse(source);
24
+ validateAstContract(input, { requireVersion });
25
+ const tree = projectAst(input, projection);
26
+ const serialized = JSON.stringify(tree);
27
+ writeJson(safePath(staging, `documents/${id}.json`), tree);
28
+ inputs.push({ id, hash: hash(source), outputHash: hash(serialized) });
29
+ }
30
+ catch (cause) {
31
+ throw new Error(`cudoc: dataset projection failed for ${file}`, {
32
+ cause,
33
+ });
34
+ }
35
+ }
36
+ writeJson(path.join(staging, "manifest.json"), {
37
+ schemaVersion: "1.0.0",
38
+ projectionId,
39
+ projection,
40
+ documentCount: inputs.length,
41
+ scopes: scopes ?? [...new Set(entries.map((e) => e.id.split("/")[0]))],
42
+ documents: inputs,
43
+ });
44
+ });
45
+ return {
46
+ schemaVersion: "1.0.0",
47
+ documentCount: inputs.length,
48
+ documents: inputs,
49
+ };
50
+ }
51
+ //# sourceMappingURL=dataset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset.js","sourceRoot":"","sources":["../../src/node/dataset.ts"],"names":[],"mappings":"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"}