@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.
- package/README.md +157 -5
- package/dist/__tests__/extract.test.d.ts +2 -0
- package/dist/__tests__/extract.test.d.ts.map +1 -0
- package/dist/__tests__/extract.test.js +95 -0
- package/dist/__tests__/extract.test.js.map +1 -0
- package/dist/__tests__/plugins/handleCodeExpandable.test.d.ts +2 -0
- package/dist/__tests__/plugins/handleCodeExpandable.test.d.ts.map +1 -0
- package/dist/__tests__/plugins/handleCodeExpandable.test.js +191 -0
- package/dist/__tests__/plugins/handleCodeExpandable.test.js.map +1 -0
- package/dist/__tests__/plugins/handleCodeTitles.test.d.ts +2 -0
- package/dist/__tests__/plugins/handleCodeTitles.test.d.ts.map +1 -0
- package/dist/__tests__/plugins/handleCodeTitles.test.js +99 -0
- package/dist/__tests__/plugins/handleCodeTitles.test.js.map +1 -0
- package/dist/compile.d.ts +1 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -0
- package/dist/compile.js.map +1 -1
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +3 -4
- package/dist/content.js.map +1 -1
- package/dist/extract.d.ts.map +1 -1
- package/dist/extract.js +8 -2
- package/dist/extract.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/handleCodeTitles.d.ts.map +1 -1
- package/dist/plugins/handleCodeTitles.js +7 -2
- package/dist/plugins/handleCodeTitles.js.map +1 -1
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +38 -1
- package/dist/utils.js.map +1 -1
- 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.
|
|
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
|
-
####
|
|
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
|
-
####
|
|
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
|
-
####
|
|
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 @@
|
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,GAAG,GAAG,gCAAgC,CAAC;QAC7C,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3C,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7C,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAG,qBAAqB,CAAC;QAClC,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,6CAA6C,CAAC;QAC1D,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,mCAAmC,CAAC;QAChD,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GAAG,gDAAgD,CAAC;QAC7D,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,GAAG,GAAG,eAAe,CAAC;QAC5B,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG,uDAAuD,CAAC;QACxE,MAAM,EAAE,GAAG,kBAAkB,CAAyC,OAAO,CAAC,CAAC;QAC/E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,kBAAkB,CAA0B,kBAAkB,CAAC,CAAC;QAC3E,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,OAAO,GAAG,oBAAoB,CAAC;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,iCAAiC,CAAC;QAClD,MAAM,MAAM,GAAG,6BAA6B,CAAoB,OAAO,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,iCAAiC,CAAC;QAClD,MAAM,MAAM,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,6BAA6B,CAA0B,kBAAkB,CAAC,CAAC;QAC1F,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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 @@
|
|
|
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":"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"}
|
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"]>;
|
package/dist/compile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,
|
|
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;
|
package/dist/compile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
package/dist/content.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,WAAW,
|
|
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
|
-
|
|
42
|
-
|
|
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.");
|
package/dist/content.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
|
package/dist/extract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,
|
|
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
|
-
|
|
88
|
-
|
|
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
|
package/dist/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,
|
|
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 {
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,
|
|
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
|
-
|
|
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.
|
|
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": {
|