@docubook/core 1.6.2 → 1.7.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 (35) hide show
  1. package/README.md +157 -5
  2. package/dist/__tests__/extract.test.d.ts +2 -0
  3. package/dist/__tests__/extract.test.d.ts.map +1 -0
  4. package/dist/__tests__/extract.test.js +95 -0
  5. package/dist/__tests__/extract.test.js.map +1 -0
  6. package/dist/__tests__/plugins/handleCodeExpandable.test.d.ts +2 -0
  7. package/dist/__tests__/plugins/handleCodeExpandable.test.d.ts.map +1 -0
  8. package/dist/__tests__/plugins/handleCodeExpandable.test.js +191 -0
  9. package/dist/__tests__/plugins/handleCodeExpandable.test.js.map +1 -0
  10. package/dist/__tests__/plugins/handleCodeTitles.test.d.ts +2 -0
  11. package/dist/__tests__/plugins/handleCodeTitles.test.d.ts.map +1 -0
  12. package/dist/__tests__/plugins/handleCodeTitles.test.js +99 -0
  13. package/dist/__tests__/plugins/handleCodeTitles.test.js.map +1 -0
  14. package/dist/compile.d.ts +1 -0
  15. package/dist/compile.d.ts.map +1 -1
  16. package/dist/compile.js +2 -0
  17. package/dist/compile.js.map +1 -1
  18. package/dist/content.d.ts.map +1 -1
  19. package/dist/content.js +3 -4
  20. package/dist/content.js.map +1 -1
  21. package/dist/extract.d.ts.map +1 -1
  22. package/dist/extract.js +8 -2
  23. package/dist/extract.js.map +1 -1
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/plugins/handleCodeTitles.d.ts.map +1 -1
  29. package/dist/plugins/handleCodeTitles.js +7 -2
  30. package/dist/plugins/handleCodeTitles.js.map +1 -1
  31. package/dist/utils.d.ts +10 -0
  32. package/dist/utils.d.ts.map +1 -1
  33. package/dist/utils.js +38 -1
  34. package/dist/utils.js.map +1 -1
  35. package/package.json +8 -1
package/README.md CHANGED
@@ -79,6 +79,7 @@ const tocs = await docsService.getTocsForSlug("getting-started/introduction");
79
79
  | `parseMdxFile` | Convert raw file result into `frontmatter`, `tocs`, `content`, `filePath` | `ParsedMdxFile<Frontmatter, TocItem>` |
80
80
  | `compileParsedMdxFile` | Compile parsed MDX while preserving metadata and TOCs | `CompiledMdxFile<Frontmatter, TocItem>` |
81
81
  | `extractFrontmatter` | Parse frontmatter only from raw markdown/MDX | `Frontmatter` |
82
+ | `extractFrontmatterWithContent` | Extract frontmatter and stripped content in one pass (avoids double parsing) | `{ frontmatter, strippedContent }` |
82
83
  | `extractTocsFromRawMdx` | Extract headings for table of contents generation | `TocItem[]` |
83
84
  | `sluggify` | Convert heading text into URL-safe slug | `string` |
84
85
  | `createDefaultRehypePlugins` | Get default DocuBook rehype plugin stack | `unknown[]` |
@@ -86,6 +87,16 @@ const tocs = await docsService.getTocsForSlug("getting-started/introduction");
86
87
  | `preProcess` | Add pre-processing behavior for code blocks (advanced) | transformer function |
87
88
  | `postProcess` | Add post-processing behavior for code blocks (advanced) | transformer function |
88
89
  | `handleCodeTitles` | Move code title metadata to `<pre>` attributes (advanced) | transformer function |
90
+ | `handleCodeExpandableRemark` | Remark plugin that detects `Expandable` meta on code blocks and injects expandable data attributes | transformer function |
91
+ | `handleCodeExpandable` | Rehype plugin that propagates expandable metadata from `<code>` to `<pre>` elements | transformer function |
92
+ | `serialize` | Re-exported from `next-mdx-remote/serialize` for non-RSC MDX compilation workflows | `MDXRemoteSerializeResult` |
93
+ | `MDXRemote` | Re-exported from `next-mdx-remote` for client-side MDX hydration | React component |
94
+ | `cn` | Merge class names using `clsx` + `tailwind-merge` | `string` |
95
+ | `parseDate` | Parse `dd-MM-yyyy` or ISO 8601 date strings into a Date object | `Date` |
96
+ | `stringToDate` | Convert a string or Date value to a Date object | `Date` |
97
+ | `formatDate` | Format date to long format (e.g. "Thursday, April 5, 2026") | `string` |
98
+ | `formatDate2` | Format date to short format (e.g. "Apr 5, 2026") | `string` |
99
+ | `toIsoDateOnly` | Convert date to ISO date-only string (e.g. "2026-04-05") | `string` |
89
100
 
90
101
  #### Type Exports
91
102
 
@@ -97,7 +108,8 @@ const tocs = await docsService.getTocsForSlug("getting-started/introduction");
97
108
  | `ReadMdxFileResult` | Return type for `readMdxFileBySlug` |
98
109
  | `ParsedMdxFile` | Parsed file structure before compile |
99
110
  | `CompiledMdxFile` | Compiled file structure with metadata and TOC |
100
- | `CreateMdxContentServiceOptions` | Options for creating the content service, including `frontmatterEnricher` |
111
+ | `CreateMdxContentServiceOptions` | Options for creating the content service, including `frontmatterEnricher`, `tocsExtractor`, and `readOptions` |
112
+ | `ReadMdxBySlugOptions` | Options for `readMdxFileBySlug` — configure `rootDir` and `docsDir` |
101
113
 
102
114
  ### Quick Import Recipes
103
115
 
@@ -117,7 +129,17 @@ import { extractFrontmatter } from "@docubook/core";
117
129
 
118
130
  Use this for metadata pages where full MDX compilation is unnecessary.
119
131
 
120
- #### 3. Build TOC from raw content
132
+ #### 3. Extract frontmatter and content in one pass
133
+
134
+ ```ts
135
+ import { extractFrontmatterWithContent } from "@docubook/core";
136
+
137
+ const { frontmatter, strippedContent } = extractFrontmatterWithContent<{ title: string }>(raw);
138
+ ```
139
+
140
+ Use this when you need both frontmatter and the content body without the frontmatter block — avoids parsing the file twice compared to calling `extractFrontmatter` and manually stripping.
141
+
142
+ #### 4. Build TOC from raw content
121
143
 
122
144
  ```ts
123
145
  import { extractTocsFromRawMdx } from "@docubook/core";
@@ -125,7 +147,7 @@ import { extractTocsFromRawMdx } from "@docubook/core";
125
147
 
126
148
  Use this when you need heading navigation from markdown/MDX text.
127
149
 
128
- #### 4. Slug-based docs service (recommended for app integration)
150
+ #### 5. Slug-based docs service (recommended for app integration)
129
151
 
130
152
  ```ts
131
153
  import { createMdxContentService } from "@docubook/core";
@@ -133,7 +155,7 @@ import { createMdxContentService } from "@docubook/core";
133
155
 
134
156
  Use this as the default app-level integration for frontmatter, TOC, and compiled docs in one service.
135
157
 
136
- #### 5. Frontmatter enrichment (date fallback, computed fields)
158
+ #### 6. Frontmatter enrichment (date fallback, computed fields)
137
159
 
138
160
  ```ts
139
161
  import { createMdxContentService } from "@docubook/core";
@@ -154,7 +176,61 @@ const docsService = createMdxContentService<Frontmatter, TocItem>({
154
176
 
155
177
  Use this to inject computed or fallback values into frontmatter after parsing — such as a last-modified date from the filesystem or a git commit timestamp. The enricher receives the already-parsed frontmatter and the absolute path of the MDX file on disk, and runs once per slug before caching.
156
178
 
157
- #### 6. Low-level file pipeline (advanced)
179
+ #### 7. Custom TOC extraction (`tocsExtractor`)
180
+
181
+ ```ts
182
+ import { createMdxContentService } from "@docubook/core";
183
+
184
+ const docsService = createMdxContentService<Frontmatter, TocItem>({
185
+ parseOptions: { components },
186
+ cacheFn: cache,
187
+ tocsExtractor: (rawMdx) => {
188
+ // Custom logic to extract headings — e.g. only h2 and h3
189
+ return rawMdx
190
+ .split("\n")
191
+ .filter((line) => /^#{2,3}\s/.test(line))
192
+ .map((line) => {
193
+ const level = line.startsWith("###") ? 3 : 2;
194
+ const text = line.replace(/^#{2,3}\s+/, "");
195
+ return { level, text, href: `#${text.toLowerCase().replace(/\s+/g, "-")}` };
196
+ });
197
+ },
198
+ });
199
+ ```
200
+
201
+ Use this when the default TOC extraction doesn't match your heading structure or you need to filter/transform headings before rendering.
202
+
203
+ #### 8. Custom docs directory (`readOptions`)
204
+
205
+ ```ts
206
+ import { createMdxContentService } from "@docubook/core";
207
+
208
+ const docsService = createMdxContentService<Frontmatter, TocItem>({
209
+ parseOptions: { components },
210
+ cacheFn: cache,
211
+ readOptions: {
212
+ rootDir: "/absolute/path/to/project", // defaults to process.cwd()
213
+ docsDir: "content", // defaults to "docs"
214
+ },
215
+ });
216
+ ```
217
+
218
+ Use this when your MDX files live in a non-standard directory (e.g. `content/` instead of `docs/`) or when the working directory differs from the project root.
219
+
220
+ #### 9. Root slug behavior
221
+
222
+ When an empty or blank slug is passed to `readMdxFileBySlug` or the content service, it resolves to `"index"` — meaning it reads `docs/index.mdx`:
223
+
224
+ ```ts
225
+ // These are equivalent:
226
+ const doc = await docsService.getCompiledForSlug("");
227
+ const doc = await docsService.getCompiledForSlug("index");
228
+ // Both read from: docs/index.mdx
229
+ ```
230
+
231
+ For nested slugs, the resolver tries `docs/{slug}.mdx` first, then falls back to `docs/{slug}/index.mdx`.
232
+
233
+ #### 10. Low-level file pipeline (advanced)
158
234
 
159
235
  ```ts
160
236
  import {
@@ -166,6 +242,57 @@ import {
166
242
 
167
243
  Use this when you need full control over each pipeline step.
168
244
 
245
+ #### 11. Non-RSC MDX compilation (`serialize` + `MDXRemote`)
246
+
247
+ ```ts
248
+ import { serialize, MDXRemote } from "@docubook/core";
249
+
250
+ const mdxSource = await serialize(rawMdx, { parseFrontmatter: true });
251
+ // Then in your component:
252
+ <MDXRemote {...mdxSource} components={components} />;
253
+ ```
254
+
255
+ Use this for Pages Router or non-RSC environments where `compileMDX` (used internally by `parseMdx`) is not available. `serialize` compiles MDX on the server and `MDXRemote` hydrates it on the client.
256
+
257
+ #### 12. Expandable code blocks (code plugins)
258
+
259
+ ```ts
260
+ import {
261
+ handleCodeExpandableRemark,
262
+ handleCodeExpandable,
263
+ } from "@docubook/core";
264
+ ```
265
+
266
+ These plugins enable collapsible/expandable code blocks in MDX. Add `Expandable` to the code block meta:
267
+
268
+ ````md
269
+ ```ts Expandable
270
+ // long code block that will be collapsible
271
+ ```
272
+ ````
273
+
274
+ `handleCodeExpandableRemark` runs during remark phase to inject `data-expandable` attributes. `handleCodeExpandable` runs during rehype phase to propagate those attributes to the rendered `<pre>` element. Both are included in `createDefaultRehypePlugins()` and `createDefaultRemarkPlugins()` by default.
275
+
276
+ #### 13. Utility functions (`cn`, date helpers)
277
+
278
+ ```ts
279
+ import { cn, parseDate, formatDate, formatDate2, toIsoDateOnly } from "@docubook/core";
280
+
281
+ // Merge Tailwind classes
282
+ const className = cn("px-4 py-2", isActive && "bg-blue-500");
283
+
284
+ // Parse dates
285
+ const date = parseDate("05-04-2026"); // dd-MM-yyyy
286
+ const isoDate = parseDate("2026-04-05"); // ISO 8601
287
+
288
+ // Format dates
289
+ formatDate("2026-04-05"); // "Saturday, April 5, 2026"
290
+ formatDate2("2026-04-05"); // "Apr 5, 2026"
291
+ toIsoDateOnly("2026-04-05"); // "2026-04-05"
292
+ ```
293
+
294
+ These utilities are also available via the subpath export `@docubook/core/utils`.
295
+
169
296
  ### Basic Compile Helpers
170
297
 
171
298
  ```ts
@@ -218,6 +345,25 @@ const docsService = createMdxContentService<Frontmatter>({
218
345
  const doc = await docsService.getCompiledForSlug("getting-started/introduction");
219
346
  ```
220
347
 
348
+ ## Subpath Exports
349
+
350
+ ### `@docubook/core/utils`
351
+
352
+ A lightweight subpath export containing only the utility functions — no MDX compilation dependencies. Use this when you only need class merging or date helpers without pulling in the full compile pipeline.
353
+
354
+ ```ts
355
+ import { cn, parseDate, stringToDate, formatDate, formatDate2, toIsoDateOnly } from "@docubook/core/utils";
356
+ ```
357
+
358
+ | Function | Description |
359
+ | --------------- | ----------------------------------------------------------- |
360
+ | `cn` | Merge class names using `clsx` + `tailwind-merge` |
361
+ | `parseDate` | Parse `dd-MM-yyyy` or ISO 8601 date strings into a Date |
362
+ | `stringToDate` | Convert a string or Date value to a Date object |
363
+ | `formatDate` | Format date to long format (e.g. "Thursday, April 5, 2026") |
364
+ | `formatDate2` | Format date to short format (e.g. "Apr 5, 2026") |
365
+ | `toIsoDateOnly` | Convert date to ISO date-only string (e.g. "2026-04-05") |
366
+
221
367
  ## Dependency Management Policy
222
368
 
223
369
  Dependencies required for markdown processing are managed in this package and updated by the DocuBook author.
@@ -234,6 +380,12 @@ This means app-level users should focus on content and integration. Plugin upgra
234
380
  - remark-gfm
235
381
  - unist-util-visit
236
382
 
383
+ ### Managed Utility Dependencies
384
+
385
+ - clsx — class name composition for the `cn()` utility
386
+ - tailwind-merge — intelligent Tailwind class merging for the `cn()` utility
387
+ - next-mdx-remote — MDX runtime/compile engine (`serialize`, `MDXRemote`)
388
+
237
389
  The `remark` and `rehype` plugin stack is intentionally owned by this package to avoid dependency drift across apps.
238
390
 
239
391
  ## Why This Matters
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/extract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { sluggify, extractTocsFromRawMdx, extractFrontmatter, extractFrontmatterWithContent, } from "../extract";
3
+ describe("sluggify", () => {
4
+ it("converts text to lowercase kebab-case", () => {
5
+ expect(sluggify("Hello World")).toBe("hello-world");
6
+ });
7
+ it("removes special characters", () => {
8
+ expect(sluggify("What's New?")).toBe("whats-new");
9
+ });
10
+ it("removes accents", () => {
11
+ expect(sluggify("Café Résumé")).toBe("cafe-resume");
12
+ });
13
+ it("handles multiple spaces", () => {
14
+ expect(sluggify("a b c")).toBe("a-b-c");
15
+ });
16
+ });
17
+ describe("extractTocsFromRawMdx", () => {
18
+ it("extracts h2 and h3 headings", () => {
19
+ const mdx = `## First\n### Second\n## Third`;
20
+ const tocs = extractTocsFromRawMdx(mdx);
21
+ expect(tocs).toEqual([
22
+ { level: 2, text: "First", href: "#first" },
23
+ { level: 3, text: "Second", href: "#second" },
24
+ { level: 2, text: "Third", href: "#third" },
25
+ ]);
26
+ });
27
+ it("ignores h1 headings", () => {
28
+ const mdx = `# Title\n## Section`;
29
+ const tocs = extractTocsFromRawMdx(mdx);
30
+ expect(tocs).toHaveLength(1);
31
+ expect(tocs[0].text).toBe("Section");
32
+ });
33
+ it("ignores headings inside fenced code blocks", () => {
34
+ const mdx = "```\n## Not a heading\n```\n## Real heading";
35
+ const tocs = extractTocsFromRawMdx(mdx);
36
+ expect(tocs).toHaveLength(1);
37
+ expect(tocs[0].text).toBe("Real heading");
38
+ });
39
+ it("handles 4-backtick fences", () => {
40
+ const mdx = "````\n## Inside\n````\n## Outside";
41
+ const tocs = extractTocsFromRawMdx(mdx);
42
+ expect(tocs).toHaveLength(1);
43
+ expect(tocs[0].text).toBe("Outside");
44
+ });
45
+ it("extracts Release component versions", () => {
46
+ const mdx = `<Release version="1.2.0">\nContent\n</Release>`;
47
+ const tocs = extractTocsFromRawMdx(mdx);
48
+ expect(tocs).toEqual([{ level: 2, text: "v1.2.0", href: "#1.2.0" }]);
49
+ });
50
+ it("returns empty array for content without headings", () => {
51
+ const tocs = extractTocsFromRawMdx("Just some text");
52
+ expect(tocs).toEqual([]);
53
+ });
54
+ it("strips trailing hashes from headings", () => {
55
+ const mdx = `## Heading ##`;
56
+ const tocs = extractTocsFromRawMdx(mdx);
57
+ expect(tocs[0].text).toBe("Heading");
58
+ });
59
+ });
60
+ describe("extractFrontmatter", () => {
61
+ it("extracts YAML frontmatter", () => {
62
+ const content = `---\ntitle: Hello\ndescription: World\n---\n# Content`;
63
+ const fm = extractFrontmatter(content);
64
+ expect(fm.title).toBe("Hello");
65
+ expect(fm.description).toBe("World");
66
+ });
67
+ it("returns empty object for content without frontmatter", () => {
68
+ const fm = extractFrontmatter("# No frontmatter");
69
+ expect(fm).toEqual({});
70
+ });
71
+ it("throws on malformed YAML", () => {
72
+ const content = `---\ntitle: [\n---`;
73
+ expect(() => extractFrontmatter(content)).toThrow("Failed to extract frontmatter");
74
+ });
75
+ });
76
+ describe("extractFrontmatterWithContent", () => {
77
+ it("returns frontmatter and stripped content", () => {
78
+ const content = `---\ntitle: Test\n---\n## Hello`;
79
+ const result = extractFrontmatterWithContent(content);
80
+ expect(result.frontmatter.title).toBe("Test");
81
+ expect(result.strippedContent.trim()).toBe("## Hello");
82
+ });
83
+ it("strips frontmatter block from content", () => {
84
+ const content = `---\nkey: value\n---\nBody text`;
85
+ const result = extractFrontmatterWithContent(content);
86
+ expect(result.strippedContent).not.toContain("---");
87
+ expect(result.strippedContent.trim()).toBe("Body text");
88
+ });
89
+ it("handles content without frontmatter", () => {
90
+ const result = extractFrontmatterWithContent("# No frontmatter");
91
+ expect(result.frontmatter).toEqual({});
92
+ expect(result.strippedContent.trim()).toBe("# No frontmatter");
93
+ });
94
+ });
95
+ //# sourceMappingURL=extract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.test.js","sourceRoot":"","sources":["../../src/__tests__/extract.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handleCodeExpandable.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCodeExpandable.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/plugins/handleCodeExpandable.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,191 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { handleCodeExpandableRemark, handleCodeExpandable, } from "../../plugins/handleCodeExpandable";
3
+ function codeNode(overrides = {}) {
4
+ return {
5
+ type: "code",
6
+ value: "line1\nline2\nline3",
7
+ ...overrides,
8
+ };
9
+ }
10
+ function remarkTree(nodes) {
11
+ return { type: "root", children: nodes };
12
+ }
13
+ describe("handleCodeExpandableRemark", () => {
14
+ it("sets data-expandable and line count when meta includes Expandable", () => {
15
+ const node = codeNode({ meta: "Expandable", lang: "ts" });
16
+ handleCodeExpandableRemark()(remarkTree([node]));
17
+ expect(node.data?.hProperties?.["data-expandable"]).toBe("true");
18
+ expect(node.data?.hProperties?.["data-expandable-lines"]).toBe("3");
19
+ });
20
+ it("appends dbLang and dbTitle from lang:title format", () => {
21
+ const node = codeNode({ meta: "Expandable", lang: "typescript:app.ts" });
22
+ handleCodeExpandableRemark()(remarkTree([node]));
23
+ expect(node.data?.hProperties?.["data-language"]).toBe("typescript");
24
+ expect(node.data?.hProperties?.["data-title"]).toBe("app.ts");
25
+ expect(node.meta).toContain("dbLang(typescript)");
26
+ expect(node.meta).toContain("dbTitle(app.ts)");
27
+ });
28
+ it("does not duplicate dbLang/dbTitle if already present", () => {
29
+ const node = codeNode({
30
+ meta: "Expandable dbLang(ts) dbTitle(x.ts)",
31
+ lang: "ts:x.ts",
32
+ });
33
+ handleCodeExpandableRemark()(remarkTree([node]));
34
+ const matches = node.meta.match(/dbLang/g);
35
+ expect(matches?.length).toBe(1);
36
+ });
37
+ it("skips nodes without Expandable in meta", () => {
38
+ const node = codeNode({ meta: "highlight", lang: "js" });
39
+ handleCodeExpandableRemark()(remarkTree([node]));
40
+ expect(node.data).toBeUndefined();
41
+ });
42
+ it("skips nodes without meta", () => {
43
+ const node = codeNode({ lang: "js" });
44
+ handleCodeExpandableRemark()(remarkTree([node]));
45
+ expect(node.data).toBeUndefined();
46
+ });
47
+ it("adds mdx-expandable-meta class", () => {
48
+ const node = codeNode({ meta: "Expandable", lang: "py" });
49
+ handleCodeExpandableRemark()(remarkTree([node]));
50
+ const classes = node.data?.hProperties?.className;
51
+ expect(classes).toContain("mdx-expandable-meta");
52
+ });
53
+ it("counts lines correctly with leading/trailing newlines", () => {
54
+ const node = codeNode({ meta: "Expandable", lang: "ts", value: "\na\nb\n" });
55
+ handleCodeExpandableRemark()(remarkTree([node]));
56
+ expect(node.data?.hProperties?.["data-expandable-lines"]).toBe("2");
57
+ });
58
+ it("handles empty code value", () => {
59
+ const node = codeNode({ meta: "Expandable", lang: "ts", value: "" });
60
+ handleCodeExpandableRemark()(remarkTree([node]));
61
+ expect(node.data?.hProperties?.["data-expandable-lines"]).toBe("0");
62
+ });
63
+ });
64
+ // --- Rehype plugin tests ---
65
+ function preNode(codeProps = {}, preProps = {}) {
66
+ return {
67
+ type: "element",
68
+ tagName: "pre",
69
+ properties: { ...preProps },
70
+ children: [
71
+ {
72
+ type: "element",
73
+ tagName: "code",
74
+ properties: {
75
+ className: ["language-ts", "mdx-expandable-meta"],
76
+ "data-expandable": "true",
77
+ "data-expandable-lines": "5",
78
+ ...codeProps,
79
+ },
80
+ children: [{ type: "text", value: "code" }],
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ function rehypeTree(nodes) {
86
+ return { type: "root", children: nodes };
87
+ }
88
+ describe("handleCodeExpandable (rehype)", () => {
89
+ it("copies expandable metadata from code to pre", () => {
90
+ const pre = preNode();
91
+ handleCodeExpandable()(rehypeTree([pre]));
92
+ expect(pre.properties?.["data-expandable"]).toBe("true");
93
+ expect(pre.properties?.["data-expandable-lines"]).toBe("5");
94
+ });
95
+ it("adds mdx-expandable-code class to pre", () => {
96
+ const pre = preNode();
97
+ handleCodeExpandable()(rehypeTree([pre]));
98
+ const classes = pre.properties?.className;
99
+ expect(classes).toContain("mdx-expandable-code");
100
+ });
101
+ it("removes mdx-expandable-meta class from code element", () => {
102
+ const pre = preNode();
103
+ handleCodeExpandable()(rehypeTree([pre]));
104
+ const code = pre.children[0];
105
+ const classes = code.properties?.className;
106
+ expect(classes).not.toContain("mdx-expandable-meta");
107
+ });
108
+ it("resolves language from code data-language property", () => {
109
+ const pre = preNode({ "data-language": "python" });
110
+ handleCodeExpandable()(rehypeTree([pre]));
111
+ expect(pre.properties?.["data-language"]).toBe("python");
112
+ });
113
+ it("resolves language from code className language- prefix", () => {
114
+ const pre = preNode({ "data-language": undefined });
115
+ handleCodeExpandable()(rehypeTree([pre]));
116
+ expect(pre.properties?.["data-language"]).toBe("ts");
117
+ });
118
+ it("resolves title from code data-title property", () => {
119
+ const pre = preNode({ "data-title": "myfile.ts" });
120
+ handleCodeExpandable()(rehypeTree([pre]));
121
+ expect(pre.properties?.["data-title"]).toBe("myfile.ts");
122
+ });
123
+ it("resolves language from dbLang in code data.meta", () => {
124
+ const pre = {
125
+ type: "element",
126
+ tagName: "pre",
127
+ properties: {},
128
+ children: [
129
+ {
130
+ type: "element",
131
+ tagName: "code",
132
+ properties: {
133
+ className: ["mdx-expandable-meta"],
134
+ "data-expandable": "true",
135
+ "data-expandable-lines": "3",
136
+ },
137
+ data: { meta: "Expandable dbLang(rust) dbTitle(main.rs)" },
138
+ children: [],
139
+ },
140
+ ],
141
+ };
142
+ handleCodeExpandable()(rehypeTree([pre]));
143
+ expect(pre.properties?.["data-language"]).toBe("rust");
144
+ expect(pre.properties?.["data-title"]).toBe("main.rs");
145
+ });
146
+ it("skips non-pre elements", () => {
147
+ const div = {
148
+ type: "element",
149
+ tagName: "div",
150
+ properties: {},
151
+ children: [],
152
+ };
153
+ handleCodeExpandable()(rehypeTree([div]));
154
+ expect(div.properties?.["data-expandable"]).toBeUndefined();
155
+ });
156
+ it("skips pre without expandable code child", () => {
157
+ const pre = {
158
+ type: "element",
159
+ tagName: "pre",
160
+ properties: {},
161
+ children: [
162
+ {
163
+ type: "element",
164
+ tagName: "code",
165
+ properties: { className: ["language-js"] },
166
+ children: [],
167
+ },
168
+ ],
169
+ };
170
+ handleCodeExpandable()(rehypeTree([pre]));
171
+ expect(pre.properties?.["data-expandable"]).toBeUndefined();
172
+ });
173
+ it("handles pre with no children gracefully", () => {
174
+ const pre = {
175
+ type: "element",
176
+ tagName: "pre",
177
+ properties: {},
178
+ children: [],
179
+ };
180
+ handleCodeExpandable()(rehypeTree([pre]));
181
+ expect(pre.properties?.["data-expandable"]).toBeUndefined();
182
+ });
183
+ it("handles className as string on pre", () => {
184
+ const pre = preNode({}, { className: "existing-class" });
185
+ handleCodeExpandable()(rehypeTree([pre]));
186
+ const classes = pre.properties?.className;
187
+ expect(classes).toContain("mdx-expandable-code");
188
+ expect(classes).toContain("existing-class");
189
+ });
190
+ });
191
+ //# sourceMappingURL=handleCodeExpandable.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCodeExpandable.test.js","sourceRoot":"","sources":["../../../src/__tests__/plugins/handleCodeExpandable.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handleCodeTitles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCodeTitles.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/plugins/handleCodeTitles.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { handleCodeTitles } from "../../plugins/handleCodeTitles";
3
+ function buildTree(children) {
4
+ return { type: "root", children };
5
+ }
6
+ function titleDiv(text) {
7
+ return {
8
+ type: "element",
9
+ tagName: "div",
10
+ properties: { className: ["rehype-code-title"] },
11
+ children: [{ type: "text", value: text }],
12
+ };
13
+ }
14
+ function preElement(props = {}) {
15
+ return {
16
+ type: "element",
17
+ tagName: "pre",
18
+ properties: { ...props },
19
+ children: [
20
+ {
21
+ type: "element",
22
+ tagName: "code",
23
+ properties: { className: ["language-ts"] },
24
+ children: [{ type: "text", value: "const x = 1" }],
25
+ },
26
+ ],
27
+ };
28
+ }
29
+ describe("handleCodeTitles", () => {
30
+ it("transfers title from div to next pre element", () => {
31
+ const pre = preElement();
32
+ const tree = buildTree([titleDiv("example.ts"), pre]);
33
+ handleCodeTitles()(tree);
34
+ const el = pre;
35
+ expect(el.properties?.["data-title"]).toBe("example.ts");
36
+ expect(el.codeTitle).toBe("example.ts");
37
+ });
38
+ it("removes the title div from the tree", () => {
39
+ const tree = buildTree([titleDiv("app.js"), preElement()]);
40
+ handleCodeTitles()(tree);
41
+ expect(tree.children.length).toBe(1);
42
+ expect(tree.children[0].tagName).toBe("pre");
43
+ });
44
+ it("skips div without rehype-code-title class", () => {
45
+ const div = {
46
+ type: "element",
47
+ tagName: "div",
48
+ properties: { className: ["other"] },
49
+ children: [{ type: "text", value: "not a title" }],
50
+ };
51
+ const pre = preElement();
52
+ const tree = buildTree([div, pre]);
53
+ handleCodeTitles()(tree);
54
+ expect(tree.children.length).toBe(2);
55
+ expect(pre.properties?.["data-title"]).toBeUndefined();
56
+ });
57
+ it("skips when next sibling is not a pre element", () => {
58
+ const div = {
59
+ type: "element",
60
+ tagName: "div",
61
+ properties: {},
62
+ children: [],
63
+ };
64
+ const tree = buildTree([titleDiv("title.ts"), div]);
65
+ handleCodeTitles()(tree);
66
+ expect(tree.children.length).toBe(2);
67
+ });
68
+ it("skips text nodes between title div and pre", () => {
69
+ const textNode = { type: "text", value: "\n" };
70
+ const pre = preElement();
71
+ const tree = buildTree([titleDiv("file.ts"), textNode, pre]);
72
+ handleCodeTitles()(tree);
73
+ const el = pre;
74
+ expect(el.properties?.["data-title"]).toBe("file.ts");
75
+ });
76
+ it("handles title div with non-text child gracefully", () => {
77
+ const badTitleDiv = {
78
+ type: "element",
79
+ tagName: "div",
80
+ properties: { className: ["rehype-code-title"] },
81
+ children: [{ type: "element", tagName: "span", properties: {}, children: [] }],
82
+ };
83
+ const tree = buildTree([badTitleDiv, preElement()]);
84
+ handleCodeTitles()(tree);
85
+ // Should not remove the div since child is not text
86
+ expect(tree.children.length).toBe(2);
87
+ });
88
+ it("initializes properties on pre if missing", () => {
89
+ const pre = {
90
+ type: "element",
91
+ tagName: "pre",
92
+ children: [],
93
+ };
94
+ const tree = buildTree([titleDiv("test.js"), pre]);
95
+ handleCodeTitles()(tree);
96
+ expect(pre.properties?.["data-title"]).toBe("test.js");
97
+ });
98
+ });
99
+ //# sourceMappingURL=handleCodeTitles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleCodeTitles.test.js","sourceRoot":"","sources":["../../../src/__tests__/plugins/handleCodeTitles.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,SAAS,SAAS,CAAC,QAAgB;IACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAY,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,mBAAmB,CAAC,EAAE;QAChD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACvB,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,QAAiC,EAAE;IACrD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,EAAE,GAAG,KAAK,EAAE;QACxB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;gBAC1C,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;aACnD;SACF;KACiB,CAAC;AACvB,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtD,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,GAAkB,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3D,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,GAAG,GAAS;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;YACpC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SAChC,CAAC;QACrB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAE,GAAmB,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAS;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACM,CAAC;QACrB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAqB,CAAC;QACxE,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7D,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,GAAkB,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,WAAW,GAAS;YACxB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,mBAAmB,CAAC,EAAE;YAChD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;SAC5D,CAAC;QACrB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACpD,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,oDAAoD;QACpD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAS;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE;SACM,CAAC;QACrB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAE,GAAmB,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/compile.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { Node } from "unist";
4
4
  import type { MdxCompileResult } from "./types";
5
5
  import type { Pluggable } from "unified";
6
6
  export { serialize };
7
+ export { MDXRemote } from "next-mdx-remote";
7
8
  type CompileMdxInput = Parameters<typeof compileMDX<Record<string, unknown>>>[0];
8
9
  type CompileMdxOptions = NonNullable<CompileMdxInput["options"]>;
9
10
  type CompilerMdxOptions = NonNullable<CompileMdxOptions["mdxOptions"]>;
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AASjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,CAAC;AAOrB,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAChF,KAAK,iBAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAA;AAChE,KAAK,kBAAkB,GAAG,WAAW,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;AAEtE,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IAC1C,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAA;IACnD,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAA;IACnD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,UAAU,SAAU,MAAM,IAAI,SA0B1C,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,MAAM,IAAI,SAiB3C,CAAA;AAED,wBAAgB,0BAA0B,IAAI,SAAS,EAAE,CAYxD;AAED,wBAAgB,0BAA0B,IAAI,SAAS,EAAE,CAExD;AAED,wBAAsB,QAAQ,CAAC,WAAW,EACxC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAiBxC"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AASlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,CAAC;AAGrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,KAAK,iBAAiB,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AACjE,KAAK,kBAAkB,GAAG,WAAW,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,MAAM,IAAI,SA0B1C,CAAC;AAEF,eAAO,MAAM,WAAW,SAAU,MAAM,IAAI,SAiB3C,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,SAAS,EAAE,CAYxD;AAED,wBAAgB,0BAA0B,IAAI,SAAS,EAAE,CAExD;AAED,wBAAsB,QAAQ,CAAC,WAAW,EACxC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAiBxC"}
package/dist/compile.js CHANGED
@@ -10,6 +10,8 @@ import { handleCodeTitles } from "./plugins/handleCodeTitles";
10
10
  import { handleCodeExpandableRemark, handleCodeExpandable } from "./plugins/handleCodeExpandable";
11
11
  // Re-export serialize for non-RSC usage
12
12
  export { serialize };
13
+ // Re-export MDXRemote for client-side hydration
14
+ export { MDXRemote } from "next-mdx-remote";
13
15
  export const preProcess = () => (tree) => {
14
16
  visit(tree, (node) => {
15
17
  const element = node;
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
package/dist/content.js CHANGED
@@ -21,9 +21,7 @@ export async function readMdxFileBySlug(slug, options = {}) {
21
21
  path.join(/*turbopackIgnore: true*/ docsRoot, slug, "index.mdx"),
22
22
  ];
23
23
  // console.log(`Attempting to read slug: "${slug}", paths:`, paths); // Debug log
24
- const attempted = [];
25
24
  for (const p of paths) {
26
- attempted.push(p);
27
25
  // Guard: reject any path that escapes the docs root.
28
26
  const resolvedP = path.resolve(/*turbopackIgnore: true*/ p);
29
27
  if (!resolvedP.startsWith(resolvedRoot + path.sep) && resolvedP !== resolvedRoot) {
@@ -38,8 +36,9 @@ export async function readMdxFileBySlug(slug, options = {}) {
38
36
  };
39
37
  }
40
38
  catch (error) {
41
- // Continue to next path if this one fails
42
- continue;
39
+ if (error.code === "ENOENT")
40
+ continue;
41
+ throw error;
43
42
  }
44
43
  }
45
44
  throw new Error("Could not find mdx file for the requested slug.");
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7C;AAyBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAmD/D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAO5E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG;IAC3E,WAAW,EAAE,WAAW,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;CACxB,CAGA"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMvC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7C;AAyBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAmD/D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAO5E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG;IAC3E,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB,CAQA"}
package/dist/extract.js CHANGED
@@ -84,7 +84,13 @@ export function extractFrontmatter(content) {
84
84
  * with the frontmatter block stripped. Avoids a second parse by compileMDX.
85
85
  */
86
86
  export function extractFrontmatterWithContent(content) {
87
- const { data, content: strippedContent } = matter(content);
88
- return { frontmatter: data, strippedContent };
87
+ try {
88
+ const { data, content: strippedContent } = matter(content);
89
+ return { frontmatter: data, strippedContent };
90
+ }
91
+ catch (error) {
92
+ const reason = error instanceof Error ? error.message : String(error);
93
+ throw new Error(`Failed to extract frontmatter: ${reason}`);
94
+ }
89
95
  }
90
96
  //# sourceMappingURL=extract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export type { TocItem, MdxCompileResult } from "./types";
2
- export { parseMdx, serialize, preProcess, postProcess, createDefaultRehypePlugins, createDefaultRemarkPlugins, } from "./compile";
2
+ export { cn, parseDate, stringToDate, formatDate, formatDate2, toIsoDateOnly } from "./utils";
3
+ export { parseMdx, serialize, MDXRemote, preProcess, postProcess, createDefaultRehypePlugins, createDefaultRemarkPlugins, } from "./compile";
3
4
  export { handleCodeTitles } from "./plugins/handleCodeTitles";
4
5
  export { handleCodeExpandableRemark, handleCodeExpandable } from "./plugins/handleCodeExpandable";
5
6
  export { extractFrontmatter, extractFrontmatterWithContent, extractTocsFromRawMdx, sluggify, } from "./extract";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACjG,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,8BAA8B,GAC/B,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,8BAA8B,GAC/B,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
- export { parseMdx, serialize, preProcess, postProcess, createDefaultRehypePlugins, createDefaultRemarkPlugins, } from "./compile";
1
+ export { cn, parseDate, stringToDate, formatDate, formatDate2, toIsoDateOnly } from "./utils";
2
+ export { parseMdx, serialize, MDXRemote, preProcess, postProcess, createDefaultRehypePlugins, createDefaultRemarkPlugins, } from "./compile";
2
3
  export { handleCodeTitles } from "./plugins/handleCodeTitles";
3
4
  export { handleCodeExpandableRemark, handleCodeExpandable } from "./plugins/handleCodeExpandable";
4
5
  export { extractFrontmatter, extractFrontmatterWithContent, extractTocsFromRawMdx, sluggify, } from "./extract";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACjG,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,QAAQ,GACT,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,QAAQ,GACT,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"handleCodeTitles.d.ts","sourceRoot":"","sources":["../../src/plugins/handleCodeTitles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,OAAO,CAAA;AASzC,eAAO,MAAM,gBAAgB,SAAU,MAAM,IAAI,SAiChD,CAAA"}
1
+ {"version":3,"file":"handleCodeTitles.d.ts","sourceRoot":"","sources":["../../src/plugins/handleCodeTitles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,OAAO,CAAA;AASzC,eAAO,MAAM,gBAAgB,SAAU,MAAM,IAAI,SAwChD,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { visit } from "unist-util-visit";
2
2
  export const handleCodeTitles = () => (tree) => {
3
+ const toRemove = [];
3
4
  visit(tree, "element", (node, index, parent) => {
4
5
  if (!parent || index === null || node.tagName !== "div") {
5
6
  return;
@@ -24,10 +25,14 @@ export const handleCodeTitles = () => (tree) => {
24
25
  }
25
26
  nextElement.properties["data-title"] = titleNode.value;
26
27
  nextElement.codeTitle = titleNode.value;
27
- parent.children.splice(index, 1);
28
- return index;
28
+ toRemove.push({ parent, index });
29
29
  }
30
30
  }
31
31
  });
32
+ // Remove title divs in reverse order to preserve indices
33
+ for (let i = toRemove.length - 1; i >= 0; i--) {
34
+ const { parent, index } = toRemove[i];
35
+ parent.children.splice(index, 1);
36
+ }
32
37
  };
33
38
  //# sourceMappingURL=handleCodeTitles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleCodeTitles.js","sourceRoot":"","sources":["../../src/plugins/handleCodeTitles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAQxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,IAAU,EAAE,EAAE;IACnD,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAiB,EAAE,KAAoB,EAAE,MAAqB,EAAE,EAAE;QACxF,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;QAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QAED,IAAI,WAAW,GAAuB,IAAI,CAAA;QAC1C,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,WAAW,GAAG,OAAsB,CAAA;gBACpC,MAAK;YACP,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAa,CAAA;YAChD,IAAI,SAAS,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/B,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;oBAC5B,WAAW,CAAC,UAAU,GAAG,EAAE,CAAA;gBAC7B,CAAC;gBACD,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,KAAK,CAAA;gBACtD,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAA;gBACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAChC,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"handleCodeTitles.js","sourceRoot":"","sources":["../../src/plugins/handleCodeTitles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAQxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,IAAU,EAAE,EAAE;IACnD,MAAM,QAAQ,GAAwC,EAAE,CAAA;IAExD,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAiB,EAAE,KAAoB,EAAE,MAAqB,EAAE,EAAE;QACxF,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;QAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QAED,IAAI,WAAW,GAAuB,IAAI,CAAA;QAC1C,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,WAAW,GAAG,OAAsB,CAAA;gBACpC,MAAK;YACP,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAa,CAAA;YAChD,IAAI,SAAS,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/B,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;oBAC5B,WAAW,CAAC,UAAU,GAAG,EAAE,CAAA;gBAC7B,CAAC;gBACD,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,KAAK,CAAA;gBACtD,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAA;gBACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,yDAAyD;IACzD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC;AACH,CAAC,CAAA"}
package/dist/utils.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type ClassValue } from "clsx";
1
2
  import type { Node } from "unist";
2
3
  export interface ElementNode extends Node {
3
4
  type: string;
@@ -12,4 +13,13 @@ export interface ElementNode extends Node {
12
13
  language?: string;
13
14
  codeTitle?: string;
14
15
  }
16
+ export declare function cn(...inputs: ClassValue[]): string;
17
+ /** Parse both `dd-MM-yyyy` and ISO 8601 date strings into a Date object. */
18
+ export declare function parseDate(dateStr: string): Date;
19
+ export declare function stringToDate(date: string | Date): Date;
20
+ /** Format date to long format (e.g. "Thursday, April 5, 2026") */
21
+ export declare function formatDate(dateStrOrDate: string | Date): string;
22
+ /** Format date to short format (e.g. "Apr 5, 2026") */
23
+ export declare function formatDate2(dateStrOrDate: string | Date): string;
24
+ export declare function toIsoDateOnly(dateStrOrDate: string | Date): string;
15
25
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,WAAW,WAAY,SAAQ,IAAI;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACrC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;IACD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAE7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,WAAW,WAAY,SAAQ,IAAI;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACrC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,QAE/C;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQ/D;AAED,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOhE;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGlE"}
package/dist/utils.js CHANGED
@@ -1,2 +1,39 @@
1
- export {};
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ /** Parse both `dd-MM-yyyy` and ISO 8601 date strings into a Date object. */
7
+ export function parseDate(dateStr) {
8
+ if (/^\d{4}-/.test(dateStr))
9
+ return new Date(dateStr);
10
+ const [day, month, year] = dateStr.split("-").map(Number);
11
+ return new Date(year, month - 1, day);
12
+ }
13
+ export function stringToDate(date) {
14
+ return date instanceof Date ? date : parseDate(date);
15
+ }
16
+ /** Format date to long format (e.g. "Thursday, April 5, 2026") */
17
+ export function formatDate(dateStrOrDate) {
18
+ const date = stringToDate(dateStrOrDate);
19
+ return date.toLocaleDateString("en-US", {
20
+ weekday: "long",
21
+ year: "numeric",
22
+ month: "long",
23
+ day: "numeric",
24
+ });
25
+ }
26
+ /** Format date to short format (e.g. "Apr 5, 2026") */
27
+ export function formatDate2(dateStrOrDate) {
28
+ const date = stringToDate(dateStrOrDate);
29
+ return date.toLocaleDateString("en-US", {
30
+ month: "short",
31
+ day: "numeric",
32
+ year: "numeric",
33
+ });
34
+ }
35
+ export function toIsoDateOnly(dateStrOrDate) {
36
+ const date = stringToDate(dateStrOrDate);
37
+ return date.toISOString().slice(0, 10);
38
+ }
2
39
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAiBzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,OAAO,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,UAAU,CAAC,aAA4B;IACrD,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtC,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;KACf,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,aAA4B;IACtD,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtC,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAA4B;IACxD,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docubook/core",
3
- "version": "1.6.2",
3
+ "version": "1.7.0",
4
4
  "description": "Shared MDX compile pipeline and markdown utilities for DocuBook",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -10,6 +10,11 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js",
12
12
  "default": "./dist/index.js"
13
+ },
14
+ "./utils": {
15
+ "types": "./dist/utils.d.ts",
16
+ "import": "./dist/utils.js",
17
+ "default": "./dist/utils.js"
13
18
  }
14
19
  },
15
20
  "files": [
@@ -41,12 +46,14 @@
41
46
  "license": "MIT",
42
47
  "dependencies": {
43
48
  "@11ty/gray-matter": "^2.0.2",
49
+ "clsx": "^2.1.1",
44
50
  "next-mdx-remote": "^6.0.0",
45
51
  "rehype-autolink-headings": "^7.1.0",
46
52
  "rehype-code-titles": "^1.2.1",
47
53
  "rehype-prism-plus": "^2.0.2",
48
54
  "rehype-slug": "^6.0.0",
49
55
  "remark-gfm": "^4.0.1",
56
+ "tailwind-merge": "^2.6.1",
50
57
  "unist-util-visit": "^5.1.0"
51
58
  },
52
59
  "devDependencies": {