barakopress 0.2.0 → 0.3.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 +59 -0
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/delivery.d.ts +14 -0
- package/dist/delivery.d.ts.map +1 -1
- package/dist/delivery.js +19 -0
- package/dist/delivery.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/reading-time.d.ts +10 -0
- package/dist/reading-time.d.ts.map +1 -0
- package/dist/reading-time.js +72 -0
- package/dist/reading-time.js.map +1 -0
- package/dist/related.d.ts +22 -0
- package/dist/related.d.ts.map +1 -0
- package/dist/related.js +47 -0
- package/dist/related.js.map +1 -0
- package/dist/screens/archive.js +2 -2
- package/dist/screens/archive.js.map +1 -1
- package/dist/screens/blog-index.d.ts.map +1 -1
- package/dist/screens/blog-index.js +6 -1
- package/dist/screens/blog-index.js.map +1 -1
- package/dist/screens/blog-post.d.ts.map +1 -1
- package/dist/screens/blog-post.js +7 -2
- package/dist/screens/blog-post.js.map +1 -1
- package/dist/screens/post-view.d.ts +9 -2
- package/dist/screens/post-view.d.ts.map +1 -1
- package/dist/screens/post-view.js +173 -6
- package/dist/screens/post-view.js.map +1 -1
- package/dist/theme.d.ts +68 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +128 -0
- package/dist/theme.js.map +1 -0
- package/package.json +3 -1
- package/src/config.ts +12 -1
- package/src/delivery.ts +53 -0
- package/src/index.ts +23 -2
- package/src/reading-time.ts +78 -0
- package/src/related.ts +81 -0
- package/src/screens/archive.tsx +2 -2
- package/src/screens/blog-index.tsx +7 -2
- package/src/screens/blog-post.tsx +9 -2
- package/src/screens/post-view.tsx +392 -53
- package/src/theme.ts +203 -0
package/README.md
CHANGED
|
@@ -137,6 +137,7 @@ for a post type with no such field.
|
|
|
137
137
|
| `locale` | `en-GB` | Passed to `toLocaleDateString` |
|
|
138
138
|
| `cmsUrl` | `CMS_URL`, or `http://localhost:5005` | Where the CMS is, from this server |
|
|
139
139
|
| `tenant` | `CMS_TENANT` | Tenant slug, for a multi-tenant deployment |
|
|
140
|
+
| `theme` | the barakoCMS palette | Colours, faces, radii and column widths. See below |
|
|
140
141
|
|
|
141
142
|
**Identity is build time.** The index, the feed, the sitemap and robots are prerendered, so anything
|
|
142
143
|
`press.config.ts` reads from `process.env` is baked when you build, not when the server starts. Write
|
|
@@ -144,6 +145,64 @@ per-site values as literals in that file. Only per-environment values (`CMS_URL`
|
|
|
144
145
|
`REVALIDATE_SECRET`) come from the environment, and neither of those is rendered. Getting this wrong
|
|
145
146
|
is how a client site ships with the vendor's name in its masthead.
|
|
146
147
|
|
|
148
|
+
### The look is configuration too
|
|
149
|
+
|
|
150
|
+
The post screen styles itself from `config.theme`, inline, so it renders correctly whether or not you
|
|
151
|
+
import `barakopress/styles.css`. That import is optional and a screen that needs it renders unstyled
|
|
152
|
+
for anyone who skips it, which is exactly what happened: barakocms.com never imported it, got an
|
|
153
|
+
article at x=0 on a blank page, and stopped using the screen at all.
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
export const config = defineConfig({
|
|
157
|
+
site: { name: "Client Three", url: "https://clientthree.example" },
|
|
158
|
+
theme: { colors: { accent: "#008060" }, layout: { prose: "68ch" } },
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Each group merges over the defaults on its own, so setting one colour keeps the other seventeen. The
|
|
163
|
+
groups are `colors` (18 values), `fonts` (`heading`, `body`, `mono`), `radii` (`panel`, `control`,
|
|
164
|
+
`pill`) and `layout` (`prose`, `wide`, `gutter`). `DEFAULT_THEME` is exported if you want to read the
|
|
165
|
+
values or build a palette from them.
|
|
166
|
+
|
|
167
|
+
Loading the faces is the site's job, not the engine's. The default theme names Sora, Manrope and
|
|
168
|
+
JetBrains Mono with real fallback stacks, and a `<link>` in your root layout is what makes them
|
|
169
|
+
arrive.
|
|
170
|
+
|
|
171
|
+
**Three slots**, for what belongs to the site rather than the engine:
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
<PostView
|
|
175
|
+
config={config}
|
|
176
|
+
post={post}
|
|
177
|
+
headerBackdrop={<Bean />} {/* decoration behind the header band */}
|
|
178
|
+
beforeBody={<RoleStrip />} {/* a wide band under the header */}
|
|
179
|
+
afterBody={<Newsletter />} {/* the foot of the reading column */}
|
|
180
|
+
/>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
They are not a way to compose a post out of arbitrary sections. Anything that has to sit between two
|
|
184
|
+
paragraphs belongs to the block model, which is issue #6, because only the body knows where it goes.
|
|
185
|
+
|
|
186
|
+
Read time is derived from the body at 200 words a minute, with fenced code blocks excluded, so there
|
|
187
|
+
is no field to fill in and nothing to keep in sync.
|
|
188
|
+
|
|
189
|
+
### Related posts, if the CMS has the AI module
|
|
190
|
+
|
|
191
|
+
`listRelated` asks `BarakoCMS.AI` for the posts closest to this one and hands them to `PostView`,
|
|
192
|
+
which renders a band of cards with the similarity score on each. `createBlogPost` already does the
|
|
193
|
+
call, so a site using the factory gets it for nothing.
|
|
194
|
+
|
|
195
|
+
Nothing about it is required. A CMS without the module answers 404, a type that is not publicly
|
|
196
|
+
deliverable answers 404, a module installed but not enabled answers an empty list, and an
|
|
197
|
+
unreachable CMS throws. All four end the same way: an empty array, no band, no heading, no empty
|
|
198
|
+
state. The reader of a site without the module never learns the feature exists.
|
|
199
|
+
|
|
200
|
+
The post being read is its own closest match, so the fetch asks for more than it renders and drops
|
|
201
|
+
itself. A hit with no slug is dropped too, because there is nothing to link it to.
|
|
202
|
+
|
|
203
|
+
Turning it on is the CMS's job, not this package's: `dotnet add package BarakoCMS.AI`, point
|
|
204
|
+
`Ai:EmbeddingBaseUrl` at an Ollama instance, set `Ai:Enabled`, and index the type.
|
|
205
|
+
|
|
147
206
|
## The caching design, which is the whole point
|
|
148
207
|
|
|
149
208
|
A static site reads content at build time, so an edit is invisible until someone rebuilds and
|
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type PressTheme, type PressThemeInput } from "./theme.js";
|
|
1
2
|
export interface TypeNames {
|
|
2
3
|
/** The content type holding posts. */
|
|
3
4
|
post: string;
|
|
@@ -63,6 +64,8 @@ export interface PressConfig {
|
|
|
63
64
|
cmsUrl: string;
|
|
64
65
|
/** Tenant slug, for a multi-tenant deployment. */
|
|
65
66
|
tenant?: string;
|
|
67
|
+
/** What the screens look like. See theme.ts for why appearance is config and not a stylesheet. */
|
|
68
|
+
theme: PressTheme;
|
|
66
69
|
}
|
|
67
70
|
export type PressConfigInput = {
|
|
68
71
|
types?: Partial<TypeNames>;
|
|
@@ -70,7 +73,8 @@ export type PressConfigInput = {
|
|
|
70
73
|
routes?: Partial<RouteMap>;
|
|
71
74
|
site?: Partial<SiteIdentity>;
|
|
72
75
|
pageSizes?: Partial<PageSizes>;
|
|
73
|
-
|
|
76
|
+
theme?: PressThemeInput;
|
|
77
|
+
} & Partial<Omit<PressConfig, "types" | "fields" | "routes" | "site" | "pageSizes" | "theme">>;
|
|
74
78
|
/**
|
|
75
79
|
* Builds a complete config from a partial one.
|
|
76
80
|
*
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,SAAS;IACtB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACrB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAgB,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjF,MAAM,WAAW,SAAS;IACtB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACrB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAM/B,KAAK,CAAC,EAAE,eAAe,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;AAwB/F;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG,WAAW,CAoB1F;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAMzD"}
|
package/dist/config.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* file and a package cannot write files into someone else's app. A consumer's route file calls
|
|
14
14
|
* `createBlogIndex(config)` and exports the result. One import, one call, full control.
|
|
15
15
|
*/
|
|
16
|
+
import { resolveTheme } from "./theme.js";
|
|
16
17
|
/** The `blog` blueprint, which is what `POST /api/content-types/blueprints/blog` creates. */
|
|
17
18
|
const BLOG_BLUEPRINT = {
|
|
18
19
|
types: { post: "post", author: "author", category: "category" },
|
|
@@ -56,6 +57,7 @@ export function defineConfig(input) {
|
|
|
56
57
|
locale: input.locale ?? "en-GB",
|
|
57
58
|
cmsUrl: trimSlash(input.cmsUrl ?? process.env.CMS_URL ?? "http://localhost:5005"),
|
|
58
59
|
tenant: input.tenant ?? process.env.CMS_TENANT ?? undefined,
|
|
60
|
+
theme: resolveTheme(input.theme),
|
|
59
61
|
};
|
|
60
62
|
}
|
|
61
63
|
/**
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/delivery.d.ts
CHANGED
|
@@ -42,4 +42,18 @@ export declare function bySlug(config: PressConfig, type: string, slug: string):
|
|
|
42
42
|
* returns whatever is public, or null. That is the safe direction to fail in.
|
|
43
43
|
*/
|
|
44
44
|
export declare function bySlugPreview(config: PressConfig, type: string, slug: string, token: string): Promise<PublicContent | null>;
|
|
45
|
+
export interface SemanticHit {
|
|
46
|
+
contentType: string;
|
|
47
|
+
/** Nullable in the API. A hit with no slug is not linkable, so callers drop it. */
|
|
48
|
+
slug?: string;
|
|
49
|
+
title: string;
|
|
50
|
+
/** Cosine similarity, rounded to 4 decimals by the API. Anything under 0.4 is already dropped. */
|
|
51
|
+
score: number;
|
|
52
|
+
}
|
|
53
|
+
export interface SemanticResponse {
|
|
54
|
+
results: SemanticHit[];
|
|
55
|
+
count: number;
|
|
56
|
+
query: string;
|
|
57
|
+
}
|
|
58
|
+
export declare function semantic(config: PressConfig, type: string, query: string, limit: number): Promise<SemanticHit[]>;
|
|
45
59
|
//# sourceMappingURL=delivery.d.ts.map
|
package/dist/delivery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../src/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmB/C,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,GAAG;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACxB;AA+BD,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yFAAyF;IACzF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACpC,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,IAAI,CACtB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,GACvB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAQ/B;AAED,wBAAsB,MAAM,CACxB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAW/B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAK/B"}
|
|
1
|
+
{"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../src/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmB/C,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,GAAG;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACxB;AA+BD,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yFAAyF;IACzF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACpC,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,IAAI,CACtB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,GACvB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAQ/B;AAED,wBAAsB,MAAM,CACxB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAW/B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAK/B;AAWD,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAsB,QAAQ,CAC1B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB"}
|
package/dist/delivery.js
CHANGED
|
@@ -59,4 +59,23 @@ export async function bySlug(config, type, slug) {
|
|
|
59
59
|
export async function bySlugPreview(config, type, slug, token) {
|
|
60
60
|
return getFresh(config, `/api/public/${encodeURIComponent(type)}/${encodeURIComponent(slug)}?preview=${encodeURIComponent(token)}`);
|
|
61
61
|
}
|
|
62
|
+
/** The API clamps this itself. It is repeated here so a caller asking for 50 sends a legal request. */
|
|
63
|
+
const MAX_SEMANTIC_LIMIT = 20;
|
|
64
|
+
export async function semantic(config, type, query, limit) {
|
|
65
|
+
const q = query.trim();
|
|
66
|
+
// The API answers empty under two characters. Not spending a request to be told that.
|
|
67
|
+
if (q.length < 2)
|
|
68
|
+
return [];
|
|
69
|
+
const params = new URLSearchParams({
|
|
70
|
+
q,
|
|
71
|
+
limit: String(Math.max(1, Math.min(limit, MAX_SEMANTIC_LIMIT))),
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
const res = await get(config, `/api/public/${encodeURIComponent(type)}/semantic?${params}`);
|
|
75
|
+
return Array.isArray(res.results) ? res.results : [];
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
62
81
|
//# sourceMappingURL=delivery.js.map
|
package/dist/delivery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../src/delivery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../src/delivery.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
export { defineConfig, includesFor } from "./config.js";
|
|
2
|
+
export { DEFAULT_THEME, resolveTheme, proseCss, relatedCss } from "./theme.js";
|
|
3
|
+
export type { PressTheme, PressThemeInput, ThemeColors, ThemeFonts, ThemeRadii, ThemeLayout, } from "./theme.js";
|
|
4
|
+
export { readingMinutes, initials } from "./reading-time.js";
|
|
2
5
|
export type { PressConfig, PressConfigInput, TypeNames, FieldMap, RouteMap, PageSizes, SiteIdentity, } from "./config.js";
|
|
3
|
-
export { list, bySlug, bySlugPreview } from "./delivery.js";
|
|
4
|
-
export type { PublicContent, Seo, ListOptions, Paged } from "./delivery.js";
|
|
6
|
+
export { list, bySlug, bySlugPreview, semantic } from "./delivery.js";
|
|
7
|
+
export type { PublicContent, Seo, ListOptions, Paged, SemanticHit, SemanticResponse, } from "./delivery.js";
|
|
8
|
+
export { listRelated, pickRelated } from "./related.js";
|
|
9
|
+
export type { RelatedPost } from "./related.js";
|
|
5
10
|
export { listPosts, getPost, getPostPreview, listPostsBy, getTerm, toPost, formatDate, } from "./cms.js";
|
|
6
11
|
export type { Post, Ref, Term } from "./cms.js";
|
|
7
12
|
export { renderMarkdown, isSafeHref, anchor } from "./markdown.js";
|
|
@@ -9,6 +14,7 @@ export { createBlogIndex, Card } from "./screens/blog-index.js";
|
|
|
9
14
|
export { createBlogPost, createBlogPostPreview, createPostMetadata, createPostStaticParams, } from "./screens/blog-post.js";
|
|
10
15
|
export { createArchive, createArchiveStaticParams } from "./screens/archive.js";
|
|
11
16
|
export { PostView } from "./screens/post-view.js";
|
|
17
|
+
export type { PostViewProps } from "./screens/post-view.js";
|
|
12
18
|
export { createRevalidateRoute } from "./routes/revalidate.js";
|
|
13
19
|
export type { RevalidateOptions } from "./routes/revalidate.js";
|
|
14
20
|
export { createFeed } from "./routes/feed.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EACR,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EACR,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACtE,YAAY,EACR,aAAa,EACb,GAAG,EACH,WAAW,EACX,KAAK,EACL,WAAW,EACX,gBAAgB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EACH,SAAS,EACT,OAAO,EACP,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,EACN,UAAU,GACb,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACH,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -25,7 +25,10 @@
|
|
|
25
25
|
* router.
|
|
26
26
|
*/
|
|
27
27
|
export { defineConfig, includesFor } from "./config.js";
|
|
28
|
-
export {
|
|
28
|
+
export { DEFAULT_THEME, resolveTheme, proseCss, relatedCss } from "./theme.js";
|
|
29
|
+
export { readingMinutes, initials } from "./reading-time.js";
|
|
30
|
+
export { list, bySlug, bySlugPreview, semantic } from "./delivery.js";
|
|
31
|
+
export { listRelated, pickRelated } from "./related.js";
|
|
29
32
|
export { listPosts, getPost, getPostPreview, listPostsBy, getTerm, toPost, formatDate, } from "./cms.js";
|
|
30
33
|
export { renderMarkdown, isSafeHref, anchor } from "./markdown.js";
|
|
31
34
|
export { createBlogIndex, Card } from "./screens/blog-index.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS/E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAW7D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAUtE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EACH,SAAS,EACT,OAAO,EACP,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,EACN,UAAU,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACH,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Whole minutes, never zero. A one-line post reads as "1 min read", not "0 min read". */
|
|
2
|
+
export declare function readingMinutes(body: string, wordsPerMinute?: number): number;
|
|
3
|
+
/**
|
|
4
|
+
* Initials for the byline chip, at most two.
|
|
5
|
+
*
|
|
6
|
+
* A single name gives one letter rather than two from the same word, because "AR" for "Arnel"
|
|
7
|
+
* would be inventing a surname.
|
|
8
|
+
*/
|
|
9
|
+
export declare function initials(name: string): string;
|
|
10
|
+
//# sourceMappingURL=reading-time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reading-time.d.ts","sourceRoot":"","sources":["../src/reading-time.ts"],"names":[],"mappings":"AA4DA,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,SAAmB,GAAG,MAAM,CAGtF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Read time, derived rather than typed.
|
|
3
|
+
*
|
|
4
|
+
* The design handoff carries "7 min read" and marks it invented, which is the right thing to do in
|
|
5
|
+
* a mock and the wrong thing to ship: a number an editor has to remember to update is a number
|
|
6
|
+
* that is wrong by the second edit. This computes it from the body, so there is no field to fill
|
|
7
|
+
* in and nothing to keep in sync.
|
|
8
|
+
*
|
|
9
|
+
* 200 words a minute is the low end of adult reading speed for unfamiliar prose. It is a
|
|
10
|
+
* convention rather than a measurement, and it is here as a named constant so a site that
|
|
11
|
+
* disagrees can see what it is disagreeing with.
|
|
12
|
+
*/
|
|
13
|
+
const WORDS_PER_MINUTE = 200;
|
|
14
|
+
/** A line that opens or could close a fence: three or more backticks or tildes, indented or not. */
|
|
15
|
+
const FENCE = /^[ \t]*(`{3,}|~{3,})([^\n]*)$/;
|
|
16
|
+
/*
|
|
17
|
+
* Fenced blocks come out before counting. A post with a forty-line config sample is not four
|
|
18
|
+
* minutes longer to read than the same post without it, and counting the fence would say it was.
|
|
19
|
+
*
|
|
20
|
+
* A line scanner rather than one regular expression, because the rule a closing fence follows
|
|
21
|
+
* cannot be written as a backreference. Checked against marked, which is the renderer this package
|
|
22
|
+
* actually uses, and it follows CommonMark:
|
|
23
|
+
*
|
|
24
|
+
* open ``` close ```` closed, because a closer may be longer than its opener
|
|
25
|
+
* open ```` close ``` not closed, and the rest of the document is inside the block
|
|
26
|
+
* open ````` close ```` not closed, same reason
|
|
27
|
+
*
|
|
28
|
+
* So a closer is the same character, at least as long, and carries nothing else on its line. An
|
|
29
|
+
* unterminated fence runs to the end, which is also what the renderer does, so the count and the
|
|
30
|
+
* page agree about where the code is.
|
|
31
|
+
*/
|
|
32
|
+
function withoutFencedBlocks(body) {
|
|
33
|
+
const kept = [];
|
|
34
|
+
let open = null;
|
|
35
|
+
for (const line of body.split("\n")) {
|
|
36
|
+
const match = FENCE.exec(line);
|
|
37
|
+
if (!open) {
|
|
38
|
+
if (match) {
|
|
39
|
+
open = { char: match[1][0], length: match[1].length };
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
kept.push(line);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const closes = match !== null &&
|
|
46
|
+
match[1][0] === open.char &&
|
|
47
|
+
match[1].length >= open.length &&
|
|
48
|
+
match[2].trim() === "";
|
|
49
|
+
if (closes)
|
|
50
|
+
open = null;
|
|
51
|
+
}
|
|
52
|
+
return kept.join("\n");
|
|
53
|
+
}
|
|
54
|
+
/** Whole minutes, never zero. A one-line post reads as "1 min read", not "0 min read". */
|
|
55
|
+
export function readingMinutes(body, wordsPerMinute = WORDS_PER_MINUTE) {
|
|
56
|
+
const words = withoutFencedBlocks(body).match(/\S+/g)?.length ?? 0;
|
|
57
|
+
return Math.max(1, Math.round(words / wordsPerMinute));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Initials for the byline chip, at most two.
|
|
61
|
+
*
|
|
62
|
+
* A single name gives one letter rather than two from the same word, because "AR" for "Arnel"
|
|
63
|
+
* would be inventing a surname.
|
|
64
|
+
*/
|
|
65
|
+
export function initials(name) {
|
|
66
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
67
|
+
if (parts.length === 0)
|
|
68
|
+
return "";
|
|
69
|
+
const letters = parts.length === 1 ? [parts[0]] : [parts[0], parts[parts.length - 1]];
|
|
70
|
+
return letters.map((p) => [...p][0]?.toUpperCase() ?? "").join("");
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=reading-time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reading-time.js","sourceRoot":"","sources":["../src/reading-time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,oGAAoG;AACpG,MAAM,KAAK,GAAG,+BAA+B,CAAC;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACrC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAA4C,IAAI,CAAC;IAEzD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACtD,SAAS;YACb,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,SAAS;QACb,CAAC;QAED,MAAM,MAAM,GACR,KAAK,KAAK,IAAI;YACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAC9B,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM;YAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,cAAc,GAAG,gBAAgB;IAC1E,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PressConfig } from "./config.js";
|
|
2
|
+
import { type SemanticHit } from "./delivery.js";
|
|
3
|
+
import { type Post } from "./cms.js";
|
|
4
|
+
export interface RelatedPost {
|
|
5
|
+
slug: string;
|
|
6
|
+
title: string;
|
|
7
|
+
/** Cosine similarity as the API rounded it. Shown, because a computed list should say so. */
|
|
8
|
+
score: number;
|
|
9
|
+
publishedAt?: string;
|
|
10
|
+
excerpt?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Which hits become cards. Separate from the fetch so the rules can be tested without a CMS, and
|
|
14
|
+
* because these three lines are the whole behaviour worth getting right.
|
|
15
|
+
*/
|
|
16
|
+
export declare function pickRelated(hits: SemanticHit[], currentSlug: string, limit: number): {
|
|
17
|
+
slug: string;
|
|
18
|
+
title: string;
|
|
19
|
+
score: number;
|
|
20
|
+
}[];
|
|
21
|
+
export declare function listRelated(config: PressConfig, post: Post, limit?: number): Promise<RelatedPost[]>;
|
|
22
|
+
//# sourceMappingURL=related.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"related.d.ts","sourceRoot":"","sources":["../src/related.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAe7C,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CACvB,IAAI,EAAE,WAAW,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAMlD;AAED,wBAAsB,WAAW,CAC7B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,IAAI,EACV,KAAK,SAAI,GACV,OAAO,CAAC,WAAW,EAAE,CAAC,CAyBxB"}
|
package/dist/related.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { bySlug, semantic } from "./delivery.js";
|
|
2
|
+
import { toPost } from "./cms.js";
|
|
3
|
+
/*
|
|
4
|
+
* Ask for more than we render.
|
|
5
|
+
*
|
|
6
|
+
* The post being read is its own closest match and comes back first almost every time, so asking
|
|
7
|
+
* for three and dropping one leaves two. A hit with no slug is dropped as well, since there is
|
|
8
|
+
* nothing to link it to, and a slug can go missing between the vector being stored and now.
|
|
9
|
+
*/
|
|
10
|
+
const OVERFETCH = 2;
|
|
11
|
+
/**
|
|
12
|
+
* Which hits become cards. Separate from the fetch so the rules can be tested without a CMS, and
|
|
13
|
+
* because these three lines are the whole behaviour worth getting right.
|
|
14
|
+
*/
|
|
15
|
+
export function pickRelated(hits, currentSlug, limit) {
|
|
16
|
+
return hits
|
|
17
|
+
.filter((h) => Boolean(h.slug))
|
|
18
|
+
.filter((h) => h.slug !== currentSlug)
|
|
19
|
+
.slice(0, limit)
|
|
20
|
+
.map((h) => ({ slug: h.slug, title: h.title, score: h.score }));
|
|
21
|
+
}
|
|
22
|
+
export async function listRelated(config, post, limit = 3) {
|
|
23
|
+
const hits = await semantic(config, config.types.post, post.title, limit + OVERFETCH);
|
|
24
|
+
const candidates = pickRelated(hits, post.slug, limit);
|
|
25
|
+
if (candidates.length === 0)
|
|
26
|
+
return [];
|
|
27
|
+
/*
|
|
28
|
+
* The endpoint returns a slug, a title and a score, so the date and the blurb are a second
|
|
29
|
+
* read each. They are cached and tagged like every other read, so this costs three reads once
|
|
30
|
+
* per publish rather than three per page view, and a read that fails leaves the card with the
|
|
31
|
+
* title and score it already had rather than dropping it.
|
|
32
|
+
*/
|
|
33
|
+
return Promise.all(candidates.map(async (h) => {
|
|
34
|
+
const base = h;
|
|
35
|
+
try {
|
|
36
|
+
const content = await bySlug(config, config.types.post, h.slug);
|
|
37
|
+
if (!content)
|
|
38
|
+
return base;
|
|
39
|
+
const full = toPost(config, content);
|
|
40
|
+
return { ...base, publishedAt: full.publishedAt, excerpt: full.excerpt };
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return base;
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=related.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"related.js","sourceRoot":"","sources":["../src/related.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAoB,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,MAAM,EAAa,MAAM,UAAU,CAAC;AAwB7C;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,IAAmB,EACnB,WAAmB,EACnB,KAAa;IAEb,OAAO,IAAI;SACN,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACnE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;SACrC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,MAAmB,EACnB,IAAU,EACV,KAAK,GAAG,CAAC;IAET,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC;;;;;OAKG;IACH,OAAO,OAAO,CAAC,GAAG,CACd,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAwB,EAAE;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC;QACf,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7E,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC,CAAC,CACL,CAAC;AACN,CAAC"}
|
package/dist/screens/archive.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import Link from "next/link";
|
|
3
3
|
import { notFound } from "next/navigation";
|
|
4
4
|
import { getTerm, listPostsBy } from "../cms.js";
|
|
@@ -22,7 +22,7 @@ export function createArchive(config, which) {
|
|
|
22
22
|
]);
|
|
23
23
|
if (!term || !posts)
|
|
24
24
|
notFound();
|
|
25
|
-
return (_jsxs(
|
|
25
|
+
return (_jsxs("div", { className: "shell", children: [_jsx("p", { className: "meta", children: _jsx(Link, { href: "/", children: "Back" }) }), _jsx("h1", { children: term.name }), term.description && (_jsx("div", { className: "prose", dangerouslySetInnerHTML: { __html: renderMarkdown(term.description) } })), which === "author" && term.website && (_jsx("p", { className: "meta", children: _jsx("a", { href: term.website, rel: "noopener noreferrer", children: term.website }) })), _jsxs("h2", { style: { marginTop: "2.5rem" }, children: [posts.length, " ", posts.length === 1 ? "post" : "posts"] }), posts.map((p) => (_jsx(Card, { config: config, post: p }, p.id)))] }));
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
/** Slugs for a static export of an archive route. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/screens/archive.tsx"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAa,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIvC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,KAA4B;IAC3E,OAAO,KAAK,UAAU,WAAW,CAAC,EAAE,MAAM,EAAc;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,QAAQ,EAAE,CAAC;QAErC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;QAC9B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;YAC5B,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,QAAQ,EAAE,CAAC;QAEhC,OAAO,CACH,
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/screens/archive.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-index.d.ts","sourceRoot":"","sources":["../../src/screens/blog-index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAyB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAiB7D,wBAAgB,IAAI,CAAC,EACjB,MAAM,EACN,IAAI,EACJ,QAAgB,GACnB,EAAE;IACC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,+BAwCA;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"blog-index.d.ts","sourceRoot":"","sources":["../../src/screens/blog-index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAyB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAiB7D,wBAAgB,IAAI,CAAC,EACjB,MAAM,EACN,IAAI,EACJ,QAAgB,GACnB,EAAE;IACC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,+BAwCA;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,8CAyDlD"}
|
|
@@ -32,7 +32,12 @@ export function createBlogIndex(config) {
|
|
|
32
32
|
}
|
|
33
33
|
const featured = posts.filter((p) => p.featured);
|
|
34
34
|
const rest = posts.filter((p) => !p.featured);
|
|
35
|
-
|
|
35
|
+
/*
|
|
36
|
+
* The screen carries its own reading column now. It used to come from a `.shell` class in
|
|
37
|
+
* the consumer's layout, which meant a screen could only be placed one way and the post
|
|
38
|
+
* screen, whose bands run edge to edge, could not be placed at all.
|
|
39
|
+
*/
|
|
40
|
+
return (_jsxs("div", { className: "shell", children: [_jsxs("header", { className: "masthead", children: [_jsx("h1", { children: config.site.name }), config.site.tagline && _jsx("p", { className: "tagline", children: config.site.tagline })] }), failure && (_jsxs("div", { className: "notice error", children: [_jsx("p", { children: _jsx("strong", { children: "This page could not be loaded." }) }), _jsx("p", { children: "Please try again shortly." })] })), !failure && posts.length === 0 && (_jsxs("div", { className: "notice", children: [_jsx("p", { children: _jsx("strong", { children: "Nothing published yet." }) }), _jsx("p", { children: "Only published entries of a type opted into public delivery appear here." })] })), featured.map((p) => (_jsx(Card, { config: config, post: p, featured: true }, p.id))), rest.map((p) => (_jsx(Card, { config: config, post: p }, p.id)))] }));
|
|
36
41
|
};
|
|
37
42
|
}
|
|
38
43
|
//# sourceMappingURL=blog-index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-index.js","sourceRoot":"","sources":["../../src/screens/blog-index.tsx"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AAEH,MAAM,UAAU,IAAI,CAAC,EACjB,MAAM,EACN,IAAI,EACJ,QAAQ,GAAG,KAAK,GAKnB;IACG,OAAO,CACH,mBAAS,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,aACvD,QAAQ,IAAI,eAAM,SAAS,EAAC,MAAM,yBAAgB,EACnD,uBACI,KAAC,IAAI,IAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,YAAG,IAAI,CAAC,KAAK,GAAQ,GACpE,EACL,aAAG,SAAS,EAAC,MAAM,aACd,IAAI,CAAC,WAAW,IAAI,CACjB,eAAM,QAAQ,EAAE,IAAI,CAAC,WAAW,YAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAQ,CAClF,EACA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CACpC,8BACK,MAAM,EACP,KAAC,IAAI,IAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YACpD,IAAI,CAAC,MAAM,CAAC,IAAI,GACd,IACR,CACN,EACA,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,CACxC,8BACK,MAAM,EACP,KAAC,IAAI,IAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAChB,IACR,CACN,IACD,EACH,IAAI,CAAC,OAAO,IAAI,YAAG,SAAS,EAAC,SAAS,YAAE,IAAI,CAAC,OAAO,GAAK,EACzD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,YAAG,SAAS,EAAC,MAAM,YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,eAAc,SAAS,EAAC,KAAK,YACxB,CAAC,IADK,CAAC,CAEL,CACV,CAAC,GACF,CACP,IACK,CACb,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAmB;IAC/C,OAAO,KAAK,UAAU,SAAS;QAC3B,IAAI,KAAK,GAAW,EAAE,CAAC;QACvB,IAAI,OAAO,GAAkB,IAAI,CAAC;QAElC,IAAI,CAAC;YACD,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,oFAAoF;YACpF,qFAAqF;YACrF,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE9C,OAAO,CACH,
|
|
1
|
+
{"version":3,"file":"blog-index.js","sourceRoot":"","sources":["../../src/screens/blog-index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post.d.ts","sourceRoot":"","sources":["../../src/screens/blog-post.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"blog-post.d.ts","sourceRoot":"","sources":["../../src/screens/blog-post.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AACxD,KAAK,aAAa,GAAG,UAAU,GAAG;IAAE,YAAY,EAAE,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAYlF,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,gBACH,UAAU,0CAOxD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,8BACW,aAAa,0CAehF;AASD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,gBACC,UAAU,KAAG,OAAO,CAAC,QAAQ,CAAC,CA8BpF;AASD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,SACR,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAoB5E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { notFound } from "next/navigation";
|
|
3
3
|
import { getPost, getPostPreview, listPosts } from "../cms.js";
|
|
4
|
+
import { listRelated } from "../related.js";
|
|
4
5
|
import { PostView } from "./post-view.js";
|
|
5
6
|
/*
|
|
6
7
|
* The post page, in two shapes.
|
|
@@ -17,7 +18,8 @@ export function createBlogPost(config) {
|
|
|
17
18
|
const post = await getPost(config, slug);
|
|
18
19
|
if (!post)
|
|
19
20
|
notFound();
|
|
20
|
-
|
|
21
|
+
const related = await listRelated(config, post);
|
|
22
|
+
return _jsx(PostView, { config: config, post: post, related: related });
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
25
|
export function createBlogPostPreview(config) {
|
|
@@ -28,7 +30,10 @@ export function createBlogPostPreview(config) {
|
|
|
28
30
|
const post = preview ? await getPostPreview(config, slug, preview) : await getPost(config, slug);
|
|
29
31
|
if (!post)
|
|
30
32
|
notFound();
|
|
31
|
-
|
|
33
|
+
// Related reads published content, so it is the same cached call here. A preview that
|
|
34
|
+
// hides the band would not be showing the editor the page they are about to publish.
|
|
35
|
+
const related = await listRelated(config, post);
|
|
36
|
+
return (_jsx(PostView, { config: config, post: post, preview: Boolean(preview), related: related }));
|
|
32
37
|
};
|
|
33
38
|
}
|
|
34
39
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post.js","sourceRoot":"","sources":["../../src/screens/blog-post.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK1C;;;;;;;;GAQG;AAEH,MAAM,UAAU,cAAc,CAAC,MAAmB;IAC9C,OAAO,KAAK,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAc;QACjD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,QAAQ,EAAE,CAAC;QACtB,OAAO,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"blog-post.js","sourceRoot":"","sources":["../../src/screens/blog-post.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
1
2
|
import type { PressConfig } from "../config.js";
|
|
2
3
|
import { type Post } from "../cms.js";
|
|
3
|
-
|
|
4
|
+
import type { RelatedPost } from "../related.js";
|
|
5
|
+
export interface PostViewProps {
|
|
4
6
|
config: PressConfig;
|
|
5
7
|
post: Post;
|
|
6
8
|
preview?: boolean;
|
|
7
|
-
|
|
9
|
+
headerBackdrop?: ReactNode;
|
|
10
|
+
beforeBody?: ReactNode;
|
|
11
|
+
afterBody?: ReactNode;
|
|
12
|
+
related?: RelatedPost[];
|
|
13
|
+
}
|
|
14
|
+
export declare function PostView({ config, post, preview, headerBackdrop, beforeBody, afterBody, related, }: PostViewProps): import("react").JSX.Element;
|
|
8
15
|
//# sourceMappingURL=post-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-view.d.ts","sourceRoot":"","sources":["../../src/screens/post-view.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"post-view.d.ts","sourceRoot":"","sources":["../../src/screens/post-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA4BjD,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAalB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IAOtB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,wBAAgB,QAAQ,CAAC,EACrB,MAAM,EACN,IAAI,EACJ,OAAe,EACf,cAAc,EACd,UAAU,EACV,SAAS,EACT,OAAY,GACf,EAAE,aAAa,+BAgWf"}
|