astro-loader-glob-frontmatter 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -4
- package/dist/h1.d.ts +6 -0
- package/dist/h1.d.ts.map +1 -0
- package/dist/h1.js +33 -0
- package/dist/h1.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -111,14 +111,14 @@ No config flag needed. If the file exists, it's used. If you don't want per-dire
|
|
|
111
111
|
|
|
112
112
|
## Merge Cascade
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
Four layers, from broadest to most specific:
|
|
115
115
|
|
|
116
116
|
```
|
|
117
|
-
centralized file → per-directory file → in-file frontmatter
|
|
118
|
-
(broadest) (directory-scoped)
|
|
117
|
+
centralized file → per-directory file → H1 title → in-file frontmatter
|
|
118
|
+
(broadest) (directory-scoped) (from body) (most specific)
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
**In-file frontmatter always wins.** If a key exists in the markdown file's frontmatter, that value is used. Per-directory files fill in gaps and override the centralized file. The centralized file provides defaults for everything else.
|
|
121
|
+
**In-file frontmatter always wins.** If a key exists in the markdown file's frontmatter, that value is used. The H1 title sits between external frontmatter and in-file frontmatter—it fills in the `title` field when external files don't provide one, but in-file `title` still takes precedence. Per-directory files fill in gaps and override the centralized file. The centralized file provides defaults for everything else.
|
|
122
122
|
|
|
123
123
|
For nested objects, merging is deep. If your centralized file sets `sidebar.badge: new` and the per-directory file sets `sidebar.order: 2`, the result is `sidebar: { order: 2, badge: new }`—not a wholesale replacement.
|
|
124
124
|
|
|
@@ -166,6 +166,29 @@ sidebar:
|
|
|
166
166
|
badge: new # central, inherited via deep merge
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
+
## Title from H1
|
|
170
|
+
|
|
171
|
+
The loader automatically extracts the first `# Heading` from your markdown content and uses it as the `title` field. This means you can write natural markdown that looks good on GitHub:
|
|
172
|
+
|
|
173
|
+
```markdown
|
|
174
|
+
---
|
|
175
|
+
sidebar:
|
|
176
|
+
order: 3
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
# Accordion
|
|
180
|
+
|
|
181
|
+
The accordion component expands and collapses content.
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
The `# Accordion` heading becomes `title: "Accordion"` in your frontmatter data, and is stripped from the rendered body to prevent duplication.
|
|
185
|
+
|
|
186
|
+
**Rules:**
|
|
187
|
+
- The H1 must be the first non-blank content after frontmatter
|
|
188
|
+
- If frontmatter already has a `title` field, the in-file title wins (H1 is still stripped from the body)
|
|
189
|
+
- Inline markdown in the heading (`# My **Bold** Title`) is flattened to plain text
|
|
190
|
+
- Only the first H1 is extracted — subsequent H1s are left in the body
|
|
191
|
+
|
|
169
192
|
## Dev Mode
|
|
170
193
|
|
|
171
194
|
The loader automatically watches all frontmatter files for changes during `astro dev`. Edit a `frontmatter.yml` and the collection reloads—no restart needed.
|
package/dist/h1.d.ts
ADDED
package/dist/h1.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h1.d.ts","sourceRoot":"","sources":["../src/h1.ts"],"names":[],"mappings":"AAsBA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUlF"}
|
package/dist/h1.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Match a leading `# Title` line. The H1 must appear before any
|
|
3
|
+
* non-blank content. Leading blank lines are allowed.
|
|
4
|
+
*
|
|
5
|
+
* Capture group 1 = raw heading text (may contain inline markdown).
|
|
6
|
+
*/
|
|
7
|
+
const H1_RE = /^(?:[^\S\n]*\n)*# (.+)\n?/;
|
|
8
|
+
/** Strip bold, italic, code, images, and links down to plain text. */
|
|
9
|
+
function flattenInlineMarkdown(text) {
|
|
10
|
+
return text
|
|
11
|
+
.replace(/!\[([^\]]*)\]\([^)]*\)/g, '$1') // images
|
|
12
|
+
.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1') // links
|
|
13
|
+
.replace(/(\*\*|__)(.*?)\1/g, '$2') // bold
|
|
14
|
+
.replace(/(\*|_)(.*?)\1/g, '$2') // italic
|
|
15
|
+
.replace(/~~(.*?)~~/g, '$1') // strikethrough
|
|
16
|
+
.replace(/`([^`]+)`/g, '$1') // inline code
|
|
17
|
+
.trim();
|
|
18
|
+
}
|
|
19
|
+
const H1_HTML_RE = /<h1[^>]*>[\s\S]*?<\/h1>\n*/;
|
|
20
|
+
export function stripH1Html(html) {
|
|
21
|
+
return html.replace(H1_HTML_RE, '');
|
|
22
|
+
}
|
|
23
|
+
export function extractH1(markdown) {
|
|
24
|
+
const match = H1_RE.exec(markdown);
|
|
25
|
+
if (!match)
|
|
26
|
+
return null;
|
|
27
|
+
const rawTitle = match[1];
|
|
28
|
+
const title = flattenInlineMarkdown(rawTitle);
|
|
29
|
+
// Remove the H1 line and at most one trailing blank line
|
|
30
|
+
const body = markdown.slice(match[0].length).replace(/^\n/, '');
|
|
31
|
+
return { title, body };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=h1.js.map
|
package/dist/h1.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h1.js","sourceRoot":"","sources":["../src/h1.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,KAAK,GAAG,2BAA2B,CAAA;AAEzC,sEAAsE;AACtE,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI;SACR,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAG,SAAS;SACpD,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAK,QAAQ;SACpD,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAU,OAAO;SACnD,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAa,SAAS;SACrD,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAiB,gBAAgB;SAC5D,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAiB,cAAc;SAC1D,IAAI,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,GAAG,4BAA4B,CAAA;AAE/C,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAC7C,yDAAyD;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE/D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAQ3C,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1C,UAAU,sBAAuB,SAAQ,QAAQ;IAC/C,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAiGpE;AAED,YAAY,EAAE,sBAAsB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { glob } from 'astro/loaders';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
2
3
|
import { normalize, resolve, relative } from 'node:path';
|
|
3
4
|
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import { loadFrontmatterMap, collectFrontmatterFilePaths } from './frontmatter-map.js';
|
|
6
|
+
import { extractH1, stripH1Html } from './h1.js';
|
|
5
7
|
import { deepMerge } from './merge.js';
|
|
6
8
|
export function globFrontmatter(opts) {
|
|
7
9
|
return {
|
|
@@ -31,10 +33,50 @@ export function globFrontmatter(opts) {
|
|
|
31
33
|
const relPath = relative(normalizedBase, props.filePath);
|
|
32
34
|
const externalData = fmMap.get(relPath) ?? {};
|
|
33
35
|
const merged = deepMerge(externalData, props.data);
|
|
36
|
+
// Extract H1 from file body as title if not already set
|
|
37
|
+
if (!merged.title) {
|
|
38
|
+
try {
|
|
39
|
+
const raw = readFileSync(resolve(rootDir, props.filePath), 'utf-8');
|
|
40
|
+
// Skip frontmatter fences to get body
|
|
41
|
+
const fmMatch = /^---\n[\s\S]*?\n---\n?/.exec(raw);
|
|
42
|
+
const body = fmMatch ? raw.slice(fmMatch[0].length) : raw;
|
|
43
|
+
const h1 = extractH1(body);
|
|
44
|
+
if (h1) {
|
|
45
|
+
merged.title = h1.title;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// File read failed — skip H1 extraction
|
|
50
|
+
}
|
|
51
|
+
}
|
|
34
52
|
return originalParseData({ ...props, data: merged });
|
|
35
53
|
},
|
|
36
54
|
},
|
|
37
55
|
});
|
|
56
|
+
// Wrap store.set to strip H1 from body and rendered HTML
|
|
57
|
+
const originalSet = context.store.set.bind(context.store);
|
|
58
|
+
wrappedContext.store = Object.create(context.store, {
|
|
59
|
+
set: {
|
|
60
|
+
value: (entry) => {
|
|
61
|
+
if (entry.body) {
|
|
62
|
+
const h1 = extractH1(entry.body);
|
|
63
|
+
if (h1) {
|
|
64
|
+
entry.body = h1.body;
|
|
65
|
+
if (entry.rendered) {
|
|
66
|
+
entry.rendered.html = stripH1Html(entry.rendered.html);
|
|
67
|
+
if (entry.rendered.metadata?.headings) {
|
|
68
|
+
const headings = entry.rendered.metadata.headings;
|
|
69
|
+
if (headings.length > 0 && headings[0].depth === 1) {
|
|
70
|
+
entry.rendered.metadata.headings = headings.slice(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return originalSet(entry);
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
38
80
|
const { frontmatter: _frontmatter, ...globOpts } = opts;
|
|
39
81
|
await glob(globOpts).load(wrappedContext);
|
|
40
82
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAStC,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC1D,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAA;YACzC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;YAEjD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;gBAClC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAA;YACb,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAA;YAE3D,kDAAkD;YAClD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,YAAY,GAAG,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;gBACvE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;YAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACzD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;gBAC5C,SAAS,EAAE;oBACT,KAAK,EAAE,KAAK,EACV,KAAqD,EACrD,EAAE;wBACF,IAAI,CAAC,KAAK,CAAC,QAAQ;4BAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAA;wBAEpD,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;wBACxD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;wBAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,IAA+B,CAAC,CAAA;wBAE7E,OAAO,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC,CAAA;oBAC/D,CAAC;iBACF;aACF,CAAC,CAAA;YAEF,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAA;YACvD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3C,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|