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 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
- Three layers, from broadest to most specific:
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) (most specific)
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
@@ -0,0 +1,6 @@
1
+ export declare function stripH1Html(html: string): string;
2
+ export declare function extractH1(markdown: string): {
3
+ title: string;
4
+ body: string;
5
+ } | null;
6
+ //# sourceMappingURL=h1.d.ts.map
@@ -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"}
@@ -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;AAM3C,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,CA4CpE;AAED,YAAY,EAAE,sBAAsB,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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astro-loader-glob-frontmatter",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "Astro content loader that injects frontmatter from external YAML/JSON files",
6
6
  "license": "MIT",