@softure-ai/blog 0.1.8 → 0.1.10

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +34 -0
  3. package/dist/index.d.ts +21 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/messages/en.d.ts +2 -0
  8. package/dist/messages/en.d.ts.map +1 -1
  9. package/dist/messages/en.js +2 -0
  10. package/dist/messages/en.js.map +1 -1
  11. package/dist/messages/index.d.ts +2 -0
  12. package/dist/messages/index.d.ts.map +1 -1
  13. package/dist/messages/pl.d.ts +2 -0
  14. package/dist/messages/pl.d.ts.map +1 -1
  15. package/dist/messages/pl.js +2 -0
  16. package/dist/messages/pl.js.map +1 -1
  17. package/dist/next/body.d.ts +16 -0
  18. package/dist/next/body.d.ts.map +1 -0
  19. package/dist/next/body.js +22 -0
  20. package/dist/next/body.js.map +1 -0
  21. package/dist/next/context.d.ts.map +1 -1
  22. package/dist/next/context.js +1 -0
  23. package/dist/next/context.js.map +1 -1
  24. package/dist/next/discovery.js +2 -2
  25. package/dist/next/discovery.js.map +1 -1
  26. package/dist/next/index.d.ts +1 -0
  27. package/dist/next/index.d.ts.map +1 -1
  28. package/dist/next/index.js +1 -0
  29. package/dist/next/index.js.map +1 -1
  30. package/dist/next/json-ld.d.ts.map +1 -1
  31. package/dist/next/json-ld.js +11 -3
  32. package/dist/next/json-ld.js.map +1 -1
  33. package/dist/next/metadata.d.ts +1 -1
  34. package/dist/next/metadata.d.ts.map +1 -1
  35. package/dist/next/metadata.js +8 -6
  36. package/dist/next/metadata.js.map +1 -1
  37. package/dist/next/pages.d.ts.map +1 -1
  38. package/dist/next/pages.js +6 -11
  39. package/dist/next/pages.js.map +1 -1
  40. package/dist/options.d.ts +30 -0
  41. package/dist/options.d.ts.map +1 -1
  42. package/dist/options.js +35 -0
  43. package/dist/options.js.map +1 -1
  44. package/dist/pages/dates.d.ts +2 -2
  45. package/dist/pages/dates.d.ts.map +1 -1
  46. package/dist/pages/dates.js +5 -3
  47. package/dist/pages/dates.js.map +1 -1
  48. package/dist/pages/index.d.ts +2 -2
  49. package/dist/pages/index.d.ts.map +1 -1
  50. package/dist/pages/index.js +2 -2
  51. package/dist/pages/index.js.map +1 -1
  52. package/dist/pages/json-ld.d.ts +11 -0
  53. package/dist/pages/json-ld.d.ts.map +1 -1
  54. package/dist/pages/json-ld.js +14 -7
  55. package/dist/pages/json-ld.js.map +1 -1
  56. package/dist/pages/listing.d.ts +9 -3
  57. package/dist/pages/listing.d.ts.map +1 -1
  58. package/dist/pages/listing.js +7 -5
  59. package/dist/pages/listing.js.map +1 -1
  60. package/dist/quality/settings.d.ts +2 -2
  61. package/dist/quality/settings.d.ts.map +1 -1
  62. package/dist/quality/settings.js +5 -2
  63. package/dist/quality/settings.js.map +1 -1
  64. package/dist/server/index.d.ts +1 -1
  65. package/dist/server/index.d.ts.map +1 -1
  66. package/dist/server/index.js +1 -1
  67. package/dist/server/index.js.map +1 -1
  68. package/dist/server/options.d.ts +9 -1
  69. package/dist/server/options.d.ts.map +1 -1
  70. package/dist/server/options.js +6 -0
  71. package/dist/server/options.js.map +1 -1
  72. package/dist/ui/blog-listing.js +2 -2
  73. package/dist/ui/blog-listing.js.map +1 -1
  74. package/dist/ui/page-context.d.ts +2 -0
  75. package/dist/ui/page-context.d.ts.map +1 -1
  76. package/module.json +1 -1
  77. package/package.json +2 -2
  78. package/src/index.ts +1 -1
  79. package/src/messages/en.ts +2 -0
  80. package/src/messages/pl.ts +2 -0
  81. package/src/next/body.ts +33 -0
  82. package/src/next/context.ts +1 -0
  83. package/src/next/discovery.ts +2 -2
  84. package/src/next/index.ts +1 -0
  85. package/src/next/json-ld.ts +11 -3
  86. package/src/next/metadata.ts +9 -7
  87. package/src/next/pages.tsx +7 -14
  88. package/src/options.ts +42 -0
  89. package/src/pages/dates.ts +3 -4
  90. package/src/pages/index.ts +3 -1
  91. package/src/pages/json-ld.ts +29 -8
  92. package/src/pages/listing.ts +18 -5
  93. package/src/quality/settings.ts +3 -3
  94. package/src/server/index.ts +1 -1
  95. package/src/server/options.ts +14 -1
  96. package/src/ui/blog-listing.tsx +2 -2
  97. package/src/ui/page-context.ts +2 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,29 @@ Newest first. Each version lists what changed for an app that uses `@softure-ai/
4
4
  production, the version gets a line `verified in: <app>@<commit>` ([docs/05](../../docs/05-adoption-playbook.md),
5
5
  "Definition of done"). Versions before the first one below are described in their GitHub Releases (`blog@x.y.z`).
6
6
 
7
+ ## 0.1.10
8
+
9
+ - `/next` exports `getBodyOptions(config, terms)`, the `RenderPageBodyOptions` the ready-made pages render
10
+ bodies with, and `findArticlesLinkingTermFor(config, { articles, termSlug, terms })`, a glossary term page's
11
+ "explained in these texts" list. An app with its own page components no longer copies the binding, so its
12
+ list and body links follow the package's rule. The ready-made pages go through the same functions.
13
+ - `getDayInZone` (`/pages`) and `getLocalDate` (`/quality`) compute the day with `toCalendarDay` from
14
+ `@softure-ai/core` instead of a local `en-CA` formatter, whose date pattern has changed between ICU versions. Same
15
+ results; requires `@softure-ai/core` `^0.1.7` (#270).
16
+
17
+ ## 0.1.9
18
+
19
+ - `og:locale` of articles and terms is an Open Graph locale now: `en_US` / `pl_PL` by default, not the bare
20
+ `en` / `pl` (which Open Graph does not accept). `locales: { pl: { openGraph } }` sets another.
21
+ - `locales` (`blog({ ... })`): per locale, `bcp47` (JSON-LD `inLanguage` and the feed's `<language>`, default the
22
+ bare code as before) and `openGraph` (`og:locale`). `getBlogLocaleTags(config)` (`/server`) resolves them.
23
+ - `jsonLd: { ids: { article, term, glossary } }`: the JSON-LD `@id` fragments, default `article`, `term`,
24
+ `glossary` as before. `JsonLdContext` takes optional `ids` and `language`.
25
+ - `anchors: { cluster }`: the listing's cluster anchor prefix, default `cluster` as before; also the target of an
26
+ article's middle breadcrumb. `getClusterAnchor(cluster, prefix?)`, `getArticleCrumbs(…, { clusterAnchorPrefix })`
27
+ and the optional `BlogPageContext.clusterAnchorPrefix` carry it.
28
+ - Message `glossary.termTitleWithBrand` titles a glossary term's page (default `{title} | {brand}`, as before).
29
+
7
30
  ## 0.1.8
8
31
 
9
32
  - `externalLinkMarker` (`blog({ ... })`) and `renderArticle({ externalMarker })`: `"icon-and-text"`
package/README.md CHANGED
@@ -87,6 +87,15 @@ blog({
87
87
  // What follows an external link in a body: "icon-and-text" (a ↗ hidden from screen readers and a
88
88
  // visually hidden "opens in a new tab"), "text" (the hidden words only) or "none". Default: "icon-and-text".
89
89
  externalLinkMarker: "icon-and-text",
90
+ // The `@id` fragments of the JSON-LD nodes (no `#`): `<url>#article`, `<term url>#term`,
91
+ // `<glossary url>#glossary`. An app that already published other fragments keeps them here.
92
+ jsonLd: { ids: { article: "article", term: "term", glossary: "glossary" } },
93
+ // The listing's cluster sections are `<cluster>-<key>`; an article's middle breadcrumb points there.
94
+ // Default: { cluster: "cluster" }.
95
+ anchors: { cluster: "cluster" },
96
+ // The language tags per locale: `bcp47` for JSON-LD inLanguage and the feed's <language> (default:
97
+ // the bare code, "en" or "pl"), `openGraph` for og:locale (language_TERRITORY; default "en_US" / "pl_PL").
98
+ locales: { pl: { bcp47: "pl-PL", openGraph: "pl_PL" } },
90
99
  // The 410 page of a withdrawn text: extra links, or the app's own body (§4). Default: one link to the listing.
91
100
  gonePage: { links: [] },
92
101
  // Which images bodies may show: site paths and https images on these hosts (subdomains included),
@@ -337,6 +346,31 @@ The builders: `buildBlogIndexMetadata(config, { isEmpty })`, `buildArticleMetada
337
346
  `<script>`. `getCrumbLabels(config)` gives the breadcrumb names for `getArticleCrumbs`/`getTermCrumbs`
338
347
  (`/server`); `getPageContext`, `renderPageBody` and `getRelatedArticles` render the rest.
339
348
 
349
+ A body and a term's "explained in these texts" list take the input the ready-made pages build, so an own page
350
+ links and lists exactly as they do:
351
+
352
+ ```tsx
353
+ const [articles, terms] = await Promise.all([getPublishedArticles(config), getPublishedTerms(config)]);
354
+ const body = renderPageBody(term, getBodyOptions(config, terms)); // renderPageBody from /server
355
+ const explainedIn = findArticlesLinkingTermFor(config, { articles, termSlug: term.slug, terms });
356
+ ```
357
+
358
+ `getBodyOptions(config, terms)` is the `RenderPageBodyOptions` of the pages (the glossary, routes, blog options,
359
+ `appOrigin` and the canonical site origin, the copy); `findArticlesLinkingTermFor` is `findArticlesLinkingTerm`
360
+ (`/server`) over it.
361
+
362
+ What the builders write, so an app moving published pages onto them can match its old output:
363
+
364
+ - the JSON-LD `@id` fragments, the cluster anchor and the language tags come from `jsonLd`, `anchors` and
365
+ `locales` (above);
366
+ - a page title is `pages.titleWithBrand` (`{title} | {brand}`), a glossary term's
367
+ `glossary.termTitleWithBrand`; override either message per locale;
368
+ - canonical, Open Graph and JSON-LD URLs are absolute on the site origin (`@softure-ai/seo`'s when listed);
369
+ - articles and terms carry `og:published_time` and `og:modified_time`, the days the page shows;
370
+ - `buildGlossaryJsonLd` gives `null` without terms (an empty `DefinedTermSet` says nothing).
371
+
372
+ Any field can still be replaced by spreading the result: `{ ...buildTermMetadata(config, term), title }`.
373
+
340
374
  The commands:
341
375
 
342
376
  ```bash
package/dist/index.d.ts CHANGED
@@ -68,6 +68,7 @@ export declare const blog: import("@softure-ai/core").ModuleFactory<{
68
68
  };
69
69
  glossary: {
70
70
  title: string;
71
+ termTitleWithBrand: string;
71
72
  description: string;
72
73
  empty: string;
73
74
  explainedIn: string;
@@ -140,6 +141,26 @@ export declare const blog: import("@softure-ai/core").ModuleFactory<{
140
141
  hosts: import("zod").ZodDefault<import("zod").ZodReadonly<import("zod").ZodArray<import("zod").ZodString>>>;
141
142
  dimensions: import("zod").ZodCustom<(src: string) => import("./render/images.js").ImageDimensions | null, (src: string) => import("./render/images.js").ImageDimensions | null>;
142
143
  }, import("zod/v4/core").$strict>>;
144
+ jsonLd: import("zod").ZodDefault<import("zod").ZodObject<{
145
+ ids: import("zod").ZodDefault<import("zod").ZodObject<{
146
+ article: import("zod").ZodDefault<import("zod").ZodString>;
147
+ term: import("zod").ZodDefault<import("zod").ZodString>;
148
+ glossary: import("zod").ZodDefault<import("zod").ZodString>;
149
+ }, import("zod/v4/core").$strict>>;
150
+ }, import("zod/v4/core").$strict>>;
151
+ anchors: import("zod").ZodDefault<import("zod").ZodObject<{
152
+ cluster: import("zod").ZodDefault<import("zod").ZodString>;
153
+ }, import("zod/v4/core").$strict>>;
154
+ locales: import("zod").ZodDefault<import("zod").ZodObject<{
155
+ en: import("zod").ZodOptional<import("zod").ZodObject<{
156
+ bcp47: import("zod").ZodOptional<import("zod").ZodString>;
157
+ openGraph: import("zod").ZodOptional<import("zod").ZodString>;
158
+ }, import("zod/v4/core").$strict>>;
159
+ pl: import("zod").ZodOptional<import("zod").ZodObject<{
160
+ bcp47: import("zod").ZodOptional<import("zod").ZodString>;
161
+ openGraph: import("zod").ZodOptional<import("zod").ZodString>;
162
+ }, import("zod/v4/core").$strict>>;
163
+ }, import("zod/v4/core").$strict>>;
143
164
  gonePage: import("zod").ZodDefault<import("zod").ZodObject<{
144
165
  links: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
145
166
  href: import("zod").ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,SAAS,SAAS,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;CAE1B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoCf,CAAC;AAEH,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,2FAA2F;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,SAAS,SAAS,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;CAE1B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoCf,CAAC;AAEH,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,2FAA2F;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ export const BLOG_RATE_LIMIT_BUCKETS = {
26
26
  export const blog = defineModule({
27
27
  manifest: {
28
28
  id: MODULE_ID,
29
- version: "0.1.8",
29
+ version: "0.1.10",
30
30
  // seo is optional: with it the sitemap lists the texts and a publish pings IndexNow. security is
31
31
  // optional too: only the cache refresh route needs it, for its rate limit.
32
32
  dependsOn: { seo: "^0.1.0?", security: "^0.1.0?" },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,8 @@ export declare const en: {
47
47
  };
48
48
  glossary: {
49
49
  title: string;
50
+ /** A glossary term's page title with the brand: `{title}` the term, `{brand}` the site. */
51
+ termTitleWithBrand: string;
50
52
  description: string;
51
53
  empty: string;
52
54
  explainedIn: string;
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;QAYX,uCAAuC;;;;;;;;;QASvC,2EAA2E;;;;;QAK3E,2FAA2F;;QAE3F,uDAAuD;;;;;;;;;;;QAWvD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoCxE,kEAAkE;;;;;;CAMrE,CAAC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;QAYX,uCAAuC;;;;;;;;;QASvC,2EAA2E;;;;;QAK3E,2FAA2F;;QAE3F,uDAAuD;;;;;;;;;;;QAWvD,wEAAwE;;;;;;;;;;QAUxE,2FAA2F;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4B3F,kEAAkE;;;;;;CAMrE,CAAC"}
@@ -47,6 +47,8 @@ export const en = {
47
47
  },
48
48
  glossary: {
49
49
  title: "Glossary",
50
+ /** A glossary term's page title with the brand: `{title}` the term, `{brand}` the site. */
51
+ termTitleWithBrand: "{title} | {brand}",
50
52
  description: "Short definitions of the terms the texts use, each with the day it was checked and its sources.",
51
53
  empty: "The first definitions are on their way.",
52
54
  explainedIn: "Explained in these texts",
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,eAAe;KACtB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW;KACvB;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,OAAO;QACzB,uCAAuC;QACvC,aAAa,EAAE,mBAAmB;QAClC,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,sBAAsB;QACrC,eAAe,EAAE,UAAU;KAC5B;IACD,KAAK,EAAE;QACL,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,gGAAgG;QACjH,2EAA2E;QAC3E,cAAc,EAAE,mBAAmB;QACnC,KAAK,EAAE,mCAAmC;QAC1C,YAAY,EAAE,aAAa;QAC3B,SAAS,EAAE,YAAY;QACvB,2FAA2F;QAC3F,WAAW,EAAE,oBAAoB;QACjC,uDAAuD;QACvD,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,eAAe;QAC5B,gBAAgB,EAAE,cAAc;QAChC,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,uBAAuB;QAC5B,OAAO,EAAE,SAAS;QAClB,wEAAwE;QACxE,SAAS,EAAE,wBAAwB;QACnC,UAAU,EAAE,wBAAwB;QACpC,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,+CAA+C;QAC/D,QAAQ,EAAE,WAAW;KACtB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,iGAAiG;QAC9G,KAAK,EAAE,yCAAyC;QAChD,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,WAAW;KACtB;IACD,MAAM,EAAE;QACN,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,iGAAiG;QAC9G,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,mFAAmF;QAC5F,UAAU,EAAE,2BAA2B;QACvC,SAAS,EAAE,kJAAkJ;QAC7J,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,oHAAoH;QACjI,WAAW,EAAE,0BAA0B;QACvC,UAAU,EAAE,sIAAsI;QAClJ,gBAAgB,EAAE,aAAa;QAC/B,eAAe,EAAE,4GAA4G;KAC9H;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,8BAA8B;QACvC,IAAI,EAAE,8DAA8D;QACpE,IAAI,EAAE,iCAAiC;KACxC;IACD,IAAI,EAAE;QACJ,kEAAkE;QAClE,WAAW,EAAE,mEAAmE;KACjF;IACD,EAAE,EAAE;QACF,GAAG,EAAE,0BAA0B;KAChC;CACF,CAAC"}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,eAAe;KACtB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW;KACvB;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,OAAO;QACzB,uCAAuC;QACvC,aAAa,EAAE,mBAAmB;QAClC,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,sBAAsB;QACrC,eAAe,EAAE,UAAU;KAC5B;IACD,KAAK,EAAE;QACL,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,gGAAgG;QACjH,2EAA2E;QAC3E,cAAc,EAAE,mBAAmB;QACnC,KAAK,EAAE,mCAAmC;QAC1C,YAAY,EAAE,aAAa;QAC3B,SAAS,EAAE,YAAY;QACvB,2FAA2F;QAC3F,WAAW,EAAE,oBAAoB;QACjC,uDAAuD;QACvD,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,eAAe;QAC5B,gBAAgB,EAAE,cAAc;QAChC,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,uBAAuB;QAC5B,OAAO,EAAE,SAAS;QAClB,wEAAwE;QACxE,SAAS,EAAE,wBAAwB;QACnC,UAAU,EAAE,wBAAwB;QACpC,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,+CAA+C;QAC/D,QAAQ,EAAE,WAAW;KACtB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU;QACjB,2FAA2F;QAC3F,kBAAkB,EAAE,mBAAmB;QACvC,WAAW,EAAE,iGAAiG;QAC9G,KAAK,EAAE,yCAAyC;QAChD,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,WAAW;KACtB;IACD,MAAM,EAAE;QACN,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,iGAAiG;QAC9G,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,mFAAmF;QAC5F,UAAU,EAAE,2BAA2B;QACvC,SAAS,EAAE,kJAAkJ;QAC7J,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,oHAAoH;QACjI,WAAW,EAAE,0BAA0B;QACvC,UAAU,EAAE,sIAAsI;QAClJ,gBAAgB,EAAE,aAAa;QAC/B,eAAe,EAAE,4GAA4G;KAC9H;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,8BAA8B;QACvC,IAAI,EAAE,8DAA8D;QACpE,IAAI,EAAE,iCAAiC;KACxC;IACD,IAAI,EAAE;QACJ,kEAAkE;QAClE,WAAW,EAAE,mEAAmE;KACjF;IACD,EAAE,EAAE;QACF,GAAG,EAAE,0BAA0B;KAChC;CACF,CAAC"}
@@ -46,6 +46,7 @@ export declare const blogMessages: {
46
46
  };
47
47
  glossary: {
48
48
  title: string;
49
+ termTitleWithBrand: string;
49
50
  description: string;
50
51
  empty: string;
51
52
  explainedIn: string;
@@ -122,6 +123,7 @@ export declare const blogMessages: {
122
123
  };
123
124
  glossary: {
124
125
  title: string;
126
+ termTitleWithBrand: string;
125
127
  description: string;
126
128
  empty: string;
127
129
  explainedIn: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,MAAM,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC;AAErC,6EAA6E;AAC7E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,MAAM,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC;AAErC,6EAA6E;AAC7E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC"}
@@ -42,6 +42,8 @@ export declare const pl: {
42
42
  };
43
43
  glossary: {
44
44
  title: string;
45
+ /** A glossary term's page title with the brand: `{title}` the term, `{brand}` the site. */
46
+ termTitleWithBrand: string;
45
47
  description: string;
46
48
  empty: string;
47
49
  explainedIn: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsEX,kEAAkE;;;;;;CAMrE,CAAC"}
1
+ {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4CX,2FAA2F;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4B3F,kEAAkE;;;;;;CAMrE,CAAC"}
@@ -42,6 +42,8 @@ export const pl = {
42
42
  },
43
43
  glossary: {
44
44
  title: "Słownik pojęć",
45
+ /** A glossary term's page title with the brand: `{title}` the term, `{brand}` the site. */
46
+ termTitleWithBrand: "{title} | {brand}",
45
47
  description: "Krótkie definicje pojęć, których używają teksty, każda z datą sprawdzenia i źródłami.",
46
48
  empty: "Pierwsze definicje są w drodze.",
47
49
  explainedIn: "Rozwijamy w tekstach",
@@ -1 +1 @@
1
- {"version":3,"file":"pl.js","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,oBAAoB;KAC3B;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,UAAU;KACtB;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,UAAU;QAC5B,aAAa,EAAE,kBAAkB;QACjC,UAAU,EAAE,gBAAgB;QAC5B,aAAa,EAAE,8BAA8B;QAC7C,eAAe,EAAE,aAAa;KAC/B;IACD,KAAK,EAAE;QACL,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,sFAAsF;QACvG,cAAc,EAAE,mBAAmB;QACnC,KAAK,EAAE,8BAA8B;QACrC,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,iBAAiB;QAC5B,WAAW,EAAE,wBAAwB;QACrC,SAAS,EAAE,uBAAuB;QAClC,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,aAAa;QAC1B,gBAAgB,EAAE,eAAe;QACjC,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,WAAW;QACpB,GAAG,EAAE,sBAAsB;QAC3B,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,qBAAqB;QACjC,eAAe,EAAE,cAAc;QAC/B,YAAY,EAAE,eAAe;QAC7B,cAAc,EAAE,kDAAkD;QAClE,QAAQ,EAAE,gBAAgB;KAC3B;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,uFAAuF;QACpG,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,sBAAsB;QACnC,QAAQ,EAAE,mBAAmB;KAC9B;IACD,MAAM,EAAE;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,4FAA4F;QACzG,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,qEAAqE;QAC9E,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,uJAAuJ;QAClK,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,+HAA+H;QAC5I,WAAW,EAAE,8BAA8B;QAC3C,UAAU,EAAE,uJAAuJ;QACnK,gBAAgB,EAAE,UAAU;QAC5B,eAAe,EAAE,4GAA4G;KAC9H;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,2BAA2B;QACpC,IAAI,EAAE,uDAAuD;QAC7D,IAAI,EAAE,kCAAkC;KACzC;IACD,IAAI,EAAE;QACJ,kEAAkE;QAClE,WAAW,EAAE,mEAAmE;KACjF;IACD,EAAE,EAAE;QACF,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC"}
1
+ {"version":3,"file":"pl.js","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,oBAAoB;KAC3B;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,UAAU;KACtB;IACD,MAAM,EAAE;QACN,gBAAgB,EAAE,UAAU;QAC5B,aAAa,EAAE,kBAAkB;QACjC,UAAU,EAAE,gBAAgB;QAC5B,aAAa,EAAE,8BAA8B;QAC7C,eAAe,EAAE,aAAa;KAC/B;IACD,KAAK,EAAE;QACL,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,sFAAsF;QACvG,cAAc,EAAE,mBAAmB;QACnC,KAAK,EAAE,8BAA8B;QACrC,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,iBAAiB;QAC5B,WAAW,EAAE,wBAAwB;QACrC,SAAS,EAAE,uBAAuB;QAClC,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,aAAa;QAC1B,gBAAgB,EAAE,eAAe;QACjC,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,WAAW;QACpB,GAAG,EAAE,sBAAsB;QAC3B,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,qBAAqB;QACjC,eAAe,EAAE,cAAc;QAC/B,YAAY,EAAE,eAAe;QAC7B,cAAc,EAAE,kDAAkD;QAClE,QAAQ,EAAE,gBAAgB;KAC3B;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,eAAe;QACtB,2FAA2F;QAC3F,kBAAkB,EAAE,mBAAmB;QACvC,WAAW,EAAE,uFAAuF;QACpG,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,sBAAsB;QACnC,QAAQ,EAAE,mBAAmB;KAC9B;IACD,MAAM,EAAE;QACN,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,4FAA4F;QACzG,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,qEAAqE;QAC9E,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,uJAAuJ;QAClK,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,+HAA+H;QAC5I,WAAW,EAAE,8BAA8B;QAC3C,UAAU,EAAE,uJAAuJ;QACnK,gBAAgB,EAAE,UAAU;QAC5B,eAAe,EAAE,4GAA4G;KAC9H;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,2BAA2B;QACpC,IAAI,EAAE,uDAAuD;QAC7D,IAAI,EAAE,kCAAkC;KACzC;IACD,IAAI,EAAE;QACJ,kEAAkE;QAClE,WAAW,EAAE,mEAAmE;KACjF;IACD,EAAE,EAAE;QACF,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type SoftureConfig } from "@softure-ai/core";
2
+ import type { BlogArticle } from "../contract.js";
3
+ import { type RenderPageBodyOptions } from "../pages/body.js";
4
+ import type { BlogPageContext } from "../ui/page-context.js";
5
+ /** What `renderPageBody` and `findArticlesLinkingTerm` (`/server`) take, as the ready-made pages build it. */
6
+ export declare function getBodyOptions(config: SoftureConfig, terms: readonly BlogArticle[], context?: BlogPageContext): RenderPageBodyOptions;
7
+ export interface ArticlesLinkingTermInput {
8
+ /** The published articles to look through, e.g. `getPublishedArticles(config)`. */
9
+ readonly articles: readonly BlogArticle[];
10
+ readonly termSlug: string;
11
+ /** The published terms, e.g. `getPublishedTerms(config)`: the glossary the bodies link. */
12
+ readonly terms: readonly BlogArticle[];
13
+ }
14
+ /** The published articles whose body links the term: the list under a glossary term's page. */
15
+ export declare function findArticlesLinkingTermFor(config: SoftureConfig, input: ArticlesLinkingTermInput): BlogArticle[];
16
+ //# sourceMappingURL=body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../src/next/body.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,8GAA8G;AAC9G,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,GAAE,eAAwC,GAAG,qBAAqB,CAG7J;AAED,MAAM,WAAW,wBAAwB;IACvC,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,+FAA+F;AAC/F,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,wBAAwB,GAAG,WAAW,EAAE,CAEhH"}
@@ -0,0 +1,22 @@
1
+ // The body input of the blog's pages, bound to the config: the glossary from the published terms, the
2
+ // routes, the blog options, the site's own origins and the copy. The ready-made pages render with it,
3
+ // and an app with its own page components uses the same function, so its "explained in these texts"
4
+ // list and its body links follow the same rule as the package's pages:
5
+ //
6
+ // const articles = findArticlesLinkingTermFor(config, { articles: published, termSlug: term.slug, terms });
7
+ // const body = renderPageBody(term, getBodyOptions(config, terms));
8
+ import { getSiteUrls } from "@softure-ai/core";
9
+ import { findArticlesLinkingTerm } from "../pages/body.js";
10
+ import { toGlossary } from "../render/glossary.js";
11
+ import { getBlogOptions } from "../server/options.js";
12
+ import { getPageContext } from "./context.js";
13
+ /** What `renderPageBody` and `findArticlesLinkingTerm` (`/server`) take, as the ready-made pages build it. */
14
+ export function getBodyOptions(config, terms, context = getPageContext(config)) {
15
+ const origins = [config.appOrigin, getSiteUrls(config).origin];
16
+ return { glossary: toGlossary(terms), routes: context.routes, options: getBlogOptions(config), origins, messages: context.messages };
17
+ }
18
+ /** The published articles whose body links the term: the list under a glossary term's page. */
19
+ export function findArticlesLinkingTermFor(config, input) {
20
+ return findArticlesLinkingTerm(input.articles, input.termSlug, getBodyOptions(config, input.terms));
21
+ }
22
+ //# sourceMappingURL=body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body.js","sourceRoot":"","sources":["../../src/next/body.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,sGAAsG;AACtG,oGAAoG;AACpG,uEAAuE;AACvE,EAAE;AACF,8GAA8G;AAC9G,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAA8B,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,8GAA8G;AAC9G,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,KAA6B,EAAE,UAA2B,cAAc,CAAC,MAAM,CAAC;IACpI,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvI,CAAC;AAUD,+FAA+F;AAC/F,MAAM,UAAU,0BAA0B,CAAC,MAAqB,EAAE,KAA+B;IAC/F,OAAO,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACtG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/next/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAsB,cAAc,CAAC,MAAM,GAAE,aAAkC,GAAG,OAAO,CAAC,WAAW,CAAC,CAOrG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,CAWrE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/next/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wBAAsB,cAAc,CAAC,MAAM,GAAE,aAAkC,GAAG,OAAO,CAAC,WAAW,CAAC,CAOrG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,CAYrE"}
@@ -22,6 +22,7 @@ export function getPageContext(config) {
22
22
  methodPath: options.methodPage ? routes.method : null,
23
23
  brand: options.brand?.name ?? null,
24
24
  disclaimer: options.disclaimer === undefined ? null : (options.disclaimer[config.locale] ?? options.disclaimer.en),
25
+ clusterAnchorPrefix: options.anchors.cluster,
25
26
  };
26
27
  }
27
28
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/next/context.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,uFAAuF;AACvF,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGtF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAwB,gBAAgB,EAAE;IAC7E,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,wEAAwE;QACxE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO;QACL,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM;QACN,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACrD,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;KACnH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/next/context.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,uFAAuF;AACvF,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGtF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAwB,gBAAgB,EAAE;IAC7E,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,wEAAwE;QACxE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO;QACL,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM;QACN,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACrD,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAClH,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;KAC7C,CAAC;AACJ,CAAC"}
@@ -7,7 +7,7 @@ import { errorLogLabel, formatMessage, getSiteUrls } from "@softure-ai/core";
7
7
  import { getSoftureConfig } from "@softure-ai/core/next";
8
8
  import { buildBlogRss } from "../discovery/rss.js";
9
9
  import { getClusterLabel } from "../pages/listing.js";
10
- import { getBlogOptions } from "../server/options.js";
10
+ import { getBlogLocaleTags, getBlogOptions } from "../server/options.js";
11
11
  import { getPageContext } from "./context.js";
12
12
  import { getPublishedArticles, getPublishedTerms } from "./data.js";
13
13
  /** Seconds a feed reader should wait after a 503: the cache's own lifetime is a fair guess. */
@@ -32,7 +32,7 @@ export async function serveBlogRss() {
32
32
  channel: {
33
33
  title: context.brand === null ? copy.pages.blogTitle : formatMessage(copy.pages.titleWithBrand, { title: copy.pages.blogTitle, brand: context.brand }),
34
34
  description: copy.pages.blogDescription,
35
- language: config.locale,
35
+ language: getBlogLocaleTags(config).bcp47,
36
36
  },
37
37
  getCategory: (text) => (text.kind === "term" ? copy.glossary.title : text.cluster === null ? null : getClusterLabel(text.cluster, clusters, config.locale)),
38
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/next/discovery.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,wGAAwG;AACxG,EAAE;AACF,6FAA6F;AAC7F,wEAAwE;AACxE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEpE,+FAA+F;AAC/F,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvG,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,MAAM,GAAG,GAAG,YAAY,CAAC;YACvB,QAAQ;YACR,KAAK;YACL,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;YAC5B,OAAO,EAAE;gBACP,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtJ,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;gBACvC,QAAQ,EAAE,MAAM,CAAC,MAAM;aACxB;YACD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC5J,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,oCAAoC,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;YACrD,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,CAAC,mBAAmB,CAAC,EAAE;SACrG,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/next/discovery.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,wGAAwG;AACxG,EAAE;AACF,6FAA6F;AAC7F,wEAAwE;AACxE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEpE,+FAA+F;AAC/F,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvG,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,MAAM,GAAG,GAAG,YAAY,CAAC;YACvB,QAAQ;YACR,KAAK;YACL,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;YAC5B,OAAO,EAAE;gBACP,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtJ,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;gBACvC,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK;aAC1C;YACD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC5J,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,oCAAoC,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;YACrD,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,CAAC,mBAAmB,CAAC,EAAE;SACrG,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { findArticlesLinkingTermFor, getBodyOptions, type ArticlesLinkingTermInput } from "./body.js";
1
2
  export { getBlogContext, getPageContext } from "./context.js";
2
3
  export { serveBlogRss } from "./discovery.js";
3
4
  export { buildArticleJsonLd, buildGlossaryJsonLd, buildTermJsonLd, getCrumbLabels } from "./json-ld.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,MAAM,EAAE,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnK,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,MAAM,EAAE,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnK,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC"}
@@ -1,5 +1,6 @@
1
1
  // The Next.js adapter of @softure-ai/blog: the pages, their metadata, the article's OG image, the RSS
2
2
  // feed, the cache refresh route and the cached reads (docs/02-module-standard.md §8).
3
+ export { findArticlesLinkingTermFor, getBodyOptions } from "./body.js";
3
4
  export { getBlogContext, getPageContext } from "./context.js";
4
5
  export { serveBlogRss } from "./discovery.js";
5
6
  export { buildArticleJsonLd, buildGlossaryJsonLd, buildTermJsonLd, getCrumbLabels } from "./json-ld.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,sFAAsF;AACtF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAgD,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAA+C,MAAM,eAAe,CAAC;AAEnK,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,sFAAsF;AACtF,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAiC,MAAM,WAAW,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAgD,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAA+C,MAAM,eAAe,CAAC;AAEnK,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"json-ld.d.ts","sourceRoot":"","sources":["../../src/next/json-ld.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,eAAwC,GAAG,WAAW,CAOpH;AAMD,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAItF;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAIhF;AAED,wHAAwH;AACxH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAIvG"}
1
+ {"version":3,"file":"json-ld.d.ts","sourceRoot":"","sources":["../../src/next/json-ld.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,eAAwC,GAAG,WAAW,CAOpH;AAcD,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAItF;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAIhF;AAED,wHAAwH;AACxH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAIvG"}
@@ -6,7 +6,7 @@
6
6
  import { getSiteUrls } from "@softure-ai/core";
7
7
  import { getArticleJsonLd, getGlossaryJsonLd, getTermJsonLd, serializeJsonLd } from "../pages/json-ld.js";
8
8
  import { getArticleCrumbs, getClusterLabel, getTermCrumbs, sortTerms } from "../pages/listing.js";
9
- import { getBlogOptions } from "../server/options.js";
9
+ import { getBlogLocaleTags, getBlogOptions } from "../server/options.js";
10
10
  import { getPageContext } from "./context.js";
11
11
  /** The breadcrumb names the pages show: the blog, the glossary and the clusters' display names. */
12
12
  export function getCrumbLabels(config, context = getPageContext(config)) {
@@ -18,12 +18,20 @@ export function getCrumbLabels(config, context = getPageContext(config)) {
18
18
  };
19
19
  }
20
20
  function getJsonLdContext(config, context) {
21
- return { urls: getSiteUrls(config), routes: context.routes, locale: config.locale, timezone: config.timezone, brand: context.brand };
21
+ return {
22
+ urls: getSiteUrls(config),
23
+ routes: context.routes,
24
+ locale: config.locale,
25
+ language: getBlogLocaleTags(config).bcp47,
26
+ ids: getBlogOptions(config).jsonLd.ids,
27
+ timezone: config.timezone,
28
+ brand: context.brand,
29
+ };
22
30
  }
23
31
  /** An article's `BlogPosting`, breadcrumbs and FAQ, serialized. */
24
32
  export function buildArticleJsonLd(config, article) {
25
33
  const context = getPageContext(config);
26
- const crumbs = getArticleCrumbs(article, context.routes, getCrumbLabels(config, context));
34
+ const crumbs = getArticleCrumbs(article, context.routes, getCrumbLabels(config, context), { clusterAnchorPrefix: context.clusterAnchorPrefix });
27
35
  return serializeJsonLd(getArticleJsonLd(article, crumbs, getJsonLdContext(config, context)));
28
36
  }
29
37
  /** A glossary term's `DefinedTerm` and breadcrumbs, serialized. */
@@ -1 +1 @@
1
- {"version":3,"file":"json-ld.js","sourceRoot":"","sources":["../../src/next/json-ld.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,mGAAmG;AACnG,oGAAoG;AACpG,EAAE;AACF,oHAAoH;AACpH,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAC9H,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAoB,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,UAA2B,cAAc,CAAC,MAAM,CAAC;IACrG,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACjD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QACzC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAqB,EAAE,OAAwB;IACvE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AACvI,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,MAAqB,EAAE,OAAoB;IAC5E,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1F,OAAO,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,MAAqB,EAAE,IAAiB;IACtE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpF,OAAO,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,mBAAmB,CAAC,MAAqB,EAAE,KAA6B;IACtF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACjJ,CAAC"}
1
+ {"version":3,"file":"json-ld.js","sourceRoot":"","sources":["../../src/next/json-ld.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export declare function buildBlogIndexMetadata(config: SoftureConfig, { isEmpty
11
11
  export declare function buildArticleMetadata(config: SoftureConfig, article: BlogArticle): Metadata;
12
12
  /** The glossary index's metadata. */
13
13
  export declare function buildGlossaryIndexMetadata(config: SoftureConfig, { isEmpty }: ListingMetadataInput): Metadata;
14
- /** A glossary term's metadata. The caller checks the text is a published term. */
14
+ /** A glossary term's metadata, titled by `glossary.termTitleWithBrand`. The caller checks the text is a published term. */
15
15
  export declare function buildTermMetadata(config: SoftureConfig, term: BlogArticle): Metadata;
16
16
  /** The method page's metadata. */
17
17
  export declare function buildMethodMetadata(config: SoftureConfig): Metadata;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/next/metadata.ts"],"names":[],"mappings":"AAWA,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AA+CD,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,oBAAoB,GAAG,QAAQ,CAIzG;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,CAG1F;AAED,qCAAqC;AACrC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,oBAAoB,GAAG,QAAQ,CAI7G;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,CAGpF;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAInE"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/next/metadata.ts"],"names":[],"mappings":"AAWA,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAOlD,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAgDD,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,oBAAoB,GAAG,QAAQ,CAIzG;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,CAG1F;AAED,qCAAqC;AACrC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,oBAAoB,GAAG,QAAQ,CAI7G;AAED,2HAA2H;AAC3H,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,CAGpF;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAInE"}
@@ -12,9 +12,11 @@
12
12
  import { formatMessage, getSiteUrls } from "@softure-ai/core";
13
13
  import { getArticleDates } from "../pages/dates.js";
14
14
  import { getArticlePath, getTermPath } from "../pages/paths.js";
15
+ import { getBlogLocaleTags } from "../server/options.js";
15
16
  import { getPageContext } from "./context.js";
16
- function withBrand(title, context) {
17
- return context.brand === null ? title : formatMessage(context.messages.pages.titleWithBrand, { title, brand: context.brand });
17
+ /** `pattern`: the page kind's title message (`pages.titleWithBrand`, or `glossary.termTitleWithBrand` for a term). */
18
+ function withBrand(title, context, pattern = context.messages.pages.titleWithBrand) {
19
+ return context.brand === null ? title : formatMessage(pattern, { title, brand: context.brand });
18
20
  }
19
21
  /** A page's canonical URL: seo's host and trailing-slash rule when the app lists seo, else on `appOrigin`. */
20
22
  function getCanonicalUrl(config, path) {
@@ -37,7 +39,7 @@ function getTextMetadata(config, context, text, path, options = {}) {
37
39
  const dates = getArticleDates(text, config.timezone);
38
40
  const url = getCanonicalUrl(config, path);
39
41
  return {
40
- title: withBrand(text.title, context),
42
+ title: withBrand(text.title, context, options.titlePattern),
41
43
  description: text.description,
42
44
  robots: { index: true, follow: true },
43
45
  alternates: { canonical: url, ...(options.hasFeed === true ? { types: getFeedAlternates(config, context) } : {}) },
@@ -46,7 +48,7 @@ function getTextMetadata(config, context, text, path, options = {}) {
46
48
  title: text.title,
47
49
  description: text.description,
48
50
  url,
49
- locale: config.locale,
51
+ locale: getBlogLocaleTags(config).openGraph,
50
52
  publishedTime: dates.published,
51
53
  modifiedTime: dates.updated ?? dates.published,
52
54
  ...(context.brand === null ? {} : { siteName: context.brand }),
@@ -70,10 +72,10 @@ export function buildGlossaryIndexMetadata(config, { isEmpty }) {
70
72
  const copy = context.messages.glossary;
71
73
  return getStaticMetadata(config, context, { title: copy.title, description: copy.description, path: context.routes.glossary, isEmpty });
72
74
  }
73
- /** A glossary term's metadata. The caller checks the text is a published term. */
75
+ /** A glossary term's metadata, titled by `glossary.termTitleWithBrand`. The caller checks the text is a published term. */
74
76
  export function buildTermMetadata(config, term) {
75
77
  const context = getPageContext(config);
76
- return getTextMetadata(config, context, term, getTermPath(context.routes, term.slug));
78
+ return getTextMetadata(config, context, term, getTermPath(context.routes, term.slug), { titlePattern: context.messages.glossary.termTitleWithBrand });
77
79
  }
78
80
  /** The method page's metadata. */
79
81
  export function buildMethodMetadata(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/next/metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/next/metadata.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBvC,KAAK,UAAU,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,2FAA2F;AAC3F,wBAAgB,wBAAwB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAE7D;AAWD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAInE;AAED,uGAAuG;AACvG,wBAAsB,aAAa,CAAC,EAAE,GAAG,EAAE,GAAE,kBAAuB,wCAOnE;AAED,wBAAsB,uBAAuB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAK5G;AAED,oGAAoG;AACpG,wBAAsB,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,oBAAoB,wCAuBxF;AAED,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,QAAQ,CAAC,CAIvE;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,yCAMtC;AAED,wBAAsB,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKzG;AAED,mHAAmH;AACnH,wBAAsB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,qBAAqB,wCAsB5E;AAED,wBAAgB,sBAAsB,IAAI,QAAQ,CAEjD;AAED,sGAAsG;AACtG,wBAAgB,cAAc,gCAK7B"}
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBvC,KAAK,UAAU,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,2FAA2F;AAC3F,wBAAgB,wBAAwB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAE7D;AAMD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAInE;AAED,uGAAuG;AACvG,wBAAsB,aAAa,CAAC,EAAE,GAAG,EAAE,GAAE,kBAAuB,wCAOnE;AAED,wBAAsB,uBAAuB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAK5G;AAED,oGAAoG;AACpG,wBAAsB,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,oBAAoB,wCAuBxF;AAED,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,QAAQ,CAAC,CAIvE;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,yCAMtC;AAED,wBAAsB,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKzG;AAED,mHAAmH;AACnH,wBAAsB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,qBAAqB,wCAsB5E;AAED,wBAAgB,sBAAsB,IAAI,QAAQ,CAEjD;AAED,sGAAsG;AACtG,wBAAgB,cAAc,gCAK7B"}
@@ -18,20 +18,19 @@ import { jsx as _jsx } from "react/jsx-runtime";
18
18
  //
19
19
  // An app with its own page components keeps the rest: `generate*Metadata` and `BlogArticleOgImage`
20
20
  // mount next to its own page, and `build*Metadata` (metadata.ts) and `build*JsonLd` (json-ld.ts) take
21
- // a text it already read.
22
- import { getSiteUrls } from "@softure-ai/core";
21
+ // a text it already read; `getBodyOptions` and `findArticlesLinkingTermFor` (body.ts) give the body
22
+ // input and a term's "explained in these texts" list.
23
23
  import { getSoftureConfig } from "@softure-ai/core/next";
24
24
  import { notFound } from "next/navigation";
25
25
  import { getRelatedArticles } from "../discovery/related.js";
26
26
  import { findArticlesLinkingTerm, renderPageBody } from "../pages/body.js";
27
27
  import { getArticleDates } from "../pages/dates.js";
28
28
  import { getArticleCrumbs, groupByCluster, getTermCrumbs, sortTerms } from "../pages/listing.js";
29
- import { toGlossary } from "../render/glossary.js";
30
- import { getBlogOptions } from "../server/options.js";
31
29
  import { BlogArticleView } from "../ui/blog-article.js";
32
30
  import { GlossaryIndexView, GlossaryTermView } from "../ui/blog-glossary.js";
33
31
  import { BlogListingView } from "../ui/blog-listing.js";
34
32
  import { BlogMethodView } from "../ui/blog-method.js";
33
+ import { getBodyOptions } from "./body.js";
35
34
  import { getPageContext } from "./context.js";
36
35
  import { getPublishedArticles, getPublishedTerms, getTextBySlug } from "./data.js";
37
36
  import { buildArticleJsonLd, buildGlossaryJsonLd, buildTermJsonLd, getCrumbLabels } from "./json-ld.js";
@@ -43,10 +42,6 @@ export function generateBlogStaticParams() {
43
42
  function isPublished(text, kind) {
44
43
  return text !== null && text.status === "published" && text.kind === kind;
45
44
  }
46
- function getBodyOptions(config, context, terms) {
47
- const origins = [config.appOrigin, getSiteUrls(config).origin];
48
- return { glossary: toGlossary(terms), routes: context.routes, options: getBlogOptions(config), origins, messages: context.messages };
49
- }
50
45
  export async function generateBlogIndexMetadata() {
51
46
  const config = getSoftureConfig();
52
47
  const articles = await getPublishedArticles(config);
@@ -76,8 +71,8 @@ export async function BlogArticlePage({ params, cta, afterArticle }) {
76
71
  notFound();
77
72
  const context = getPageContext(config);
78
73
  const [terms, published] = await Promise.all([getPublishedTerms(config), getPublishedArticles(config)]);
79
- const body = renderPageBody(article, getBodyOptions(config, context, terms));
80
- const crumbs = getArticleCrumbs(article, context.routes, getCrumbLabels(config, context));
74
+ const body = renderPageBody(article, getBodyOptions(config, terms, context));
75
+ const crumbs = getArticleCrumbs(article, context.routes, getCrumbLabels(config, context), { clusterAnchorPrefix: context.clusterAnchorPrefix });
81
76
  const jsonLd = buildArticleJsonLd(config, article);
82
77
  return (_jsx(BlogArticleView, { context: context, article: article, dates: getArticleDates(article, config.timezone), body: body, crumbs: crumbs, jsonLd: jsonLd, cta: cta, afterArticle: afterArticle, related: getRelatedArticles(article, published) }));
83
78
  }
@@ -109,7 +104,7 @@ export async function GlossaryTermPage({ params, cta }) {
109
104
  notFound();
110
105
  const context = getPageContext(config);
111
106
  const [terms, articles] = await Promise.all([getPublishedTerms(config), getPublishedArticles(config)]);
112
- const bodyOptions = getBodyOptions(config, context, terms);
107
+ const bodyOptions = getBodyOptions(config, terms, context);
113
108
  const crumbs = getTermCrumbs(term, context.routes, getCrumbLabels(config, context));
114
109
  const jsonLd = buildTermJsonLd(config, term);
115
110
  return (_jsx(GlossaryTermView, { context: context, term: term, dates: getArticleDates(term, config.timezone), body: renderPageBody(term, bodyOptions), crumbs: crumbs, jsonLd: jsonLd, articles: findArticlesLinkingTerm(articles, term.slug, bodyOptions), cta: cta }));