summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-03-24 21:20:02 +0000
committerJoe Carstairs <me@joeac.net>2026-03-24 21:20:02 +0000
commitf909e1adc934b26dd02009e8d075f5c7e201b2cc (patch)
tree4704525205e580e31112f35071209423d767517a
parent1248542cc6b509a1b070ed5812ca5c327823a018 (diff)
try to extract title, pubDate, updatedDate automagically
-rw-r--r--src/index.ts31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/index.ts b/src/index.ts
index 86ef18a..7a7eb96 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -52,12 +52,23 @@ export default function gemtext(config: GemtextConfig = {}): AstroIntegration {
const body = lines.slice(bodyStartLineIndex).join("\n")
- const slug =
- typeof data["slug"] === "string" ?
- data["slug"]
- : fileURLToPath(fileUrl).slice(
- fileURLToPath(fileUrl).lastIndexOf("/") + 1,
- )
+ const filepath = fileURLToPath(fileUrl);
+ const filename = filepath.slice(filepath.lastIndexOf("/") + 1);
+ const slug =
+ typeof data["slug"] === "string" ?
+ data["slug"]
+ : filename;
+
+ data['title'] = data['title']
+ ?? lines.slice(bodyStartLineIndex).find(line => line.startsWith('# '))?.slice(2);
+ data['pubDate'] = data['pubDate']
+ ?? validDateOrUndefined(lines.slice(bodyStartLineIndex).find(line => line.startsWith('Published on: '))?.slice(14))
+ ?? validDateOrUndefined(filename.replace(/\.[^.]\+$/, ''))
+ ?? validDateOrUndefined(slug.replace(/\.[^.]\+$/, ''));
+ data['updatedDate'] = data['updatedDate']
+ ?? validDateOrUndefined(lines.slice(bodyStartLineIndex).find(line => line.startsWith('Updated on: '))?.slice(14))
+ ?? validDateOrUndefined(filename.replace(/\.[^.]\+$/, ''))
+ ?? validDateOrUndefined(slug.replace(/\.[^.]\+$/, ''));
return {
data,
@@ -71,3 +82,11 @@ export default function gemtext(config: GemtextConfig = {}): AstroIntegration {
},
}
}
+
+const validDateOrUndefined = (x: unknown) => {
+ const d = new Date(x as string);
+ if (isNaN(d.valueOf())) {
+ return undefined;
+ }
+ return d;
+};