@softure-ai/blog 0.1.7 → 0.1.9
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/CHANGELOG.md +31 -0
- package/README.md +98 -17
- package/dist/cli/run.js +1 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/skill.d.ts.map +1 -1
- package/dist/cli/skill.js +2 -1
- package/dist/cli/skill.js.map +1 -1
- package/dist/db/articles.d.ts.map +1 -1
- package/dist/db/articles.js +7 -3
- package/dist/db/articles.js.map +1 -1
- package/dist/db/history.d.ts +7 -4
- package/dist/db/history.d.ts.map +1 -1
- package/dist/db/history.js +8 -4
- package/dist/db/history.js.map +1 -1
- package/dist/index.d.ts +41 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/messages/en.d.ts +2 -0
- package/dist/messages/en.d.ts.map +1 -1
- package/dist/messages/en.js +2 -0
- package/dist/messages/en.js.map +1 -1
- package/dist/messages/index.d.ts +2 -0
- package/dist/messages/index.d.ts.map +1 -1
- package/dist/messages/pl.d.ts +2 -0
- package/dist/messages/pl.d.ts.map +1 -1
- package/dist/messages/pl.js +2 -0
- package/dist/messages/pl.js.map +1 -1
- package/dist/next/context.d.ts.map +1 -1
- package/dist/next/context.js +1 -0
- package/dist/next/context.js.map +1 -1
- package/dist/next/discovery.js +2 -2
- package/dist/next/discovery.js.map +1 -1
- package/dist/next/index.d.ts +2 -0
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +2 -0
- package/dist/next/index.js.map +1 -1
- package/dist/next/json-ld.d.ts +13 -0
- package/dist/next/json-ld.d.ts.map +1 -0
- package/dist/next/json-ld.js +50 -0
- package/dist/next/json-ld.js.map +1 -0
- package/dist/next/metadata.d.ts +18 -0
- package/dist/next/metadata.d.ts.map +1 -0
- package/dist/next/metadata.js +86 -0
- package/dist/next/metadata.js.map +1 -0
- package/dist/next/pages.d.ts.map +1 -1
- package/dist/next/pages.js +17 -78
- package/dist/next/pages.js.map +1 -1
- package/dist/options.d.ts +53 -7
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +58 -0
- package/dist/options.js.map +1 -1
- package/dist/pages/body.d.ts +1 -1
- package/dist/pages/body.d.ts.map +1 -1
- package/dist/pages/body.js +1 -0
- package/dist/pages/body.js.map +1 -1
- package/dist/pages/index.d.ts +3 -3
- package/dist/pages/index.d.ts.map +1 -1
- package/dist/pages/index.js +2 -2
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/json-ld.d.ts +11 -0
- package/dist/pages/json-ld.d.ts.map +1 -1
- package/dist/pages/json-ld.js +14 -7
- package/dist/pages/json-ld.js.map +1 -1
- package/dist/pages/listing.d.ts +9 -3
- package/dist/pages/listing.d.ts.map +1 -1
- package/dist/pages/listing.js +7 -5
- package/dist/pages/listing.js.map +1 -1
- package/dist/pages/redirects.d.ts +22 -6
- package/dist/pages/redirects.d.ts.map +1 -1
- package/dist/pages/redirects.js +5 -2
- package/dist/pages/redirects.js.map +1 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +8 -1
- package/dist/proxy/index.js.map +1 -1
- package/dist/quality/index.d.ts +1 -1
- package/dist/quality/index.d.ts.map +1 -1
- package/dist/quality/index.js.map +1 -1
- package/dist/quality/link-targets.d.ts.map +1 -1
- package/dist/quality/link-targets.js +6 -5
- package/dist/quality/link-targets.js.map +1 -1
- package/dist/quality/options.d.ts +3 -3
- package/dist/quality/options.d.ts.map +1 -1
- package/dist/quality/options.js +6 -3
- package/dist/quality/options.js.map +1 -1
- package/dist/quality/settings.d.ts +11 -0
- package/dist/quality/settings.d.ts.map +1 -1
- package/dist/quality/settings.js +7 -1
- package/dist/quality/settings.js.map +1 -1
- package/dist/render/index.d.ts +1 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/render-article.d.ts +8 -0
- package/dist/render/render-article.d.ts.map +1 -1
- package/dist/render/render-article.js +14 -7
- package/dist/render/render-article.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/options.d.ts +9 -1
- package/dist/server/options.d.ts.map +1 -1
- package/dist/server/options.js +7 -1
- package/dist/server/options.js.map +1 -1
- package/dist/ui/blog-listing.js +2 -2
- package/dist/ui/blog-listing.js.map +1 -1
- package/dist/ui/page-context.d.ts +2 -0
- package/dist/ui/page-context.d.ts.map +1 -1
- package/module.json +1 -1
- package/package.json +1 -1
- package/src/cli/run.ts +1 -1
- package/src/cli/skill.ts +2 -1
- package/src/db/articles.ts +11 -6
- package/src/db/history.ts +15 -8
- package/src/index.ts +1 -1
- package/src/messages/en.ts +2 -0
- package/src/messages/pl.ts +2 -0
- package/src/next/context.ts +1 -0
- package/src/next/discovery.ts +2 -2
- package/src/next/index.ts +9 -0
- package/src/next/json-ld.ts +55 -0
- package/src/next/metadata.ts +105 -0
- package/src/next/pages.tsx +17 -83
- package/src/options.ts +68 -1
- package/src/pages/body.ts +2 -1
- package/src/pages/index.ts +6 -1
- package/src/pages/json-ld.ts +29 -8
- package/src/pages/listing.ts +18 -5
- package/src/pages/redirects.ts +27 -3
- package/src/proxy/index.ts +9 -1
- package/src/quality/index.ts +1 -1
- package/src/quality/link-targets.ts +6 -5
- package/src/quality/options.ts +6 -3
- package/src/quality/settings.ts +17 -1
- package/src/render/index.ts +2 -0
- package/src/render/render-article.ts +22 -7
- package/src/server/index.ts +1 -1
- package/src/server/options.ts +15 -2
- package/src/ui/blog-listing.tsx +2 -2
- package/src/ui/page-context.ts +2 -0
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;
|
|
@@ -112,7 +113,7 @@ export declare const blog: import("@softure-ai/core").ModuleFactory<{
|
|
|
112
113
|
}, import("zod/v4/core").$strict>>;
|
|
113
114
|
fonts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
114
115
|
name: import("zod").ZodString;
|
|
115
|
-
weight: import("zod").ZodDefault<import("zod").ZodCustom<200 | 600 | 700 |
|
|
116
|
+
weight: import("zod").ZodDefault<import("zod").ZodCustom<200 | 600 | 700 | 100 | 500 | 300 | 400 | 800 | 900, 200 | 600 | 700 | 100 | 500 | 300 | 400 | 800 | 900>>;
|
|
116
117
|
style: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
117
118
|
normal: "normal";
|
|
118
119
|
italic: "italic";
|
|
@@ -131,10 +132,45 @@ export declare const blog: import("@softure-ai/core").ModuleFactory<{
|
|
|
131
132
|
}, import("zod/v4/core").$strict>>>;
|
|
132
133
|
blocks: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodCustom<import("./render/render-article.js").BlockPlugin<unknown>, import("./render/render-article.js").BlockPlugin<unknown>>>>;
|
|
133
134
|
siteHosts: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
135
|
+
externalLinkMarker: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
136
|
+
"icon-and-text": "icon-and-text";
|
|
137
|
+
text: "text";
|
|
138
|
+
none: "none";
|
|
139
|
+
}>>;
|
|
134
140
|
images: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
135
141
|
hosts: import("zod").ZodDefault<import("zod").ZodReadonly<import("zod").ZodArray<import("zod").ZodString>>>;
|
|
136
142
|
dimensions: import("zod").ZodCustom<(src: string) => import("./render/images.js").ImageDimensions | null, (src: string) => import("./render/images.js").ImageDimensions | null>;
|
|
137
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>>;
|
|
164
|
+
gonePage: import("zod").ZodDefault<import("zod").ZodObject<{
|
|
165
|
+
links: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
|
|
166
|
+
href: import("zod").ZodString;
|
|
167
|
+
label: import("zod").ZodObject<{
|
|
168
|
+
en: import("zod").ZodString;
|
|
169
|
+
pl: import("zod").ZodOptional<import("zod").ZodString>;
|
|
170
|
+
}, import("zod/v4/core").$strict>;
|
|
171
|
+
}, import("zod/v4/core").$strict>>>;
|
|
172
|
+
render: import("zod").ZodOptional<import("zod").ZodCustom<(input: import("./pages/redirects.js").GonePageRenderInput) => string, (input: import("./pages/redirects.js").GonePageRenderInput) => string>>;
|
|
173
|
+
}, import("zod/v4/core").$strict>>;
|
|
138
174
|
revalidateSeconds: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
139
175
|
quality: import("zod").ZodDefault<import("zod").ZodType<false | {
|
|
140
176
|
language: "en" | "pl";
|
|
@@ -182,8 +218,8 @@ export declare const blog: import("@softure-ai/core").ModuleFactory<{
|
|
|
182
218
|
};
|
|
183
219
|
severity: Record<string, "error" | "warning" | "off">;
|
|
184
220
|
paths: {
|
|
185
|
-
articles
|
|
186
|
-
terms
|
|
221
|
+
articles?: string | undefined;
|
|
222
|
+
terms?: string | undefined;
|
|
187
223
|
};
|
|
188
224
|
ownOrigins: string[];
|
|
189
225
|
privateRouteSegments: string[];
|
|
@@ -290,8 +326,8 @@ export declare const blog: import("@softure-ai/core").ModuleFactory<{
|
|
|
290
326
|
};
|
|
291
327
|
severity: Record<string, "error" | "warning" | "off">;
|
|
292
328
|
paths: {
|
|
293
|
-
articles
|
|
294
|
-
terms
|
|
329
|
+
articles?: string | undefined;
|
|
330
|
+
terms?: string | undefined;
|
|
295
331
|
};
|
|
296
332
|
ownOrigins: string[];
|
|
297
333
|
privateRouteSegments: string[];
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
|
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.
|
|
29
|
+
version: "0.1.9",
|
|
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/messages/en.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/messages/en.js
CHANGED
|
@@ -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",
|
package/dist/messages/en.js.map
CHANGED
|
@@ -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"}
|
package/dist/messages/index.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/messages/pl.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE
|
|
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"}
|
package/dist/messages/pl.js
CHANGED
|
@@ -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",
|
package/dist/messages/pl.js.map
CHANGED
|
@@ -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"}
|
|
@@ -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,
|
|
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"}
|
package/dist/next/context.js
CHANGED
|
@@ -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
|
package/dist/next/context.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/next/discovery.js
CHANGED
|
@@ -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.
|
|
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;
|
|
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"}
|
package/dist/next/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { getBlogContext, getPageContext } from "./context.js";
|
|
2
2
|
export { serveBlogRss } from "./discovery.js";
|
|
3
|
+
export { buildArticleJsonLd, buildGlossaryJsonLd, buildTermJsonLd, getCrumbLabels } from "./json-ld.js";
|
|
4
|
+
export { buildArticleMetadata, buildBlogIndexMetadata, buildGlossaryIndexMetadata, buildMethodMetadata, buildTermMetadata, type ListingMetadataInput, } from "./metadata.js";
|
|
3
5
|
export { refreshBlogCache } from "./refresh.js";
|
|
4
6
|
export { BLOG_CACHE_TAG, getPublishedArticles, getPublishedTerms, getTextBySlug } from "./data.js";
|
|
5
7
|
export { createOgFontLoader, loadBrandOgFonts, type OgFontLoaderOptions, type OgFontsResult } from "./og-fonts.js";
|
package/dist/next/index.d.ts.map
CHANGED
|
@@ -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,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,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"}
|
package/dist/next/index.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// feed, the cache refresh route and the cached reads (docs/02-module-standard.md §8).
|
|
3
3
|
export { getBlogContext, getPageContext } from "./context.js";
|
|
4
4
|
export { serveBlogRss } from "./discovery.js";
|
|
5
|
+
export { buildArticleJsonLd, buildGlossaryJsonLd, buildTermJsonLd, getCrumbLabels } from "./json-ld.js";
|
|
6
|
+
export { buildArticleMetadata, buildBlogIndexMetadata, buildGlossaryIndexMetadata, buildMethodMetadata, buildTermMetadata, } from "./metadata.js";
|
|
5
7
|
export { refreshBlogCache } from "./refresh.js";
|
|
6
8
|
export { BLOG_CACHE_TAG, getPublishedArticles, getPublishedTerms, getTextBySlug } from "./data.js";
|
|
7
9
|
export { createOgFontLoader, loadBrandOgFonts } from "./og-fonts.js";
|
package/dist/next/index.js.map
CHANGED
|
@@ -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,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,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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type SoftureConfig } from "@softure-ai/core";
|
|
2
|
+
import type { BlogArticle } from "../contract.js";
|
|
3
|
+
import { type CrumbLabels } from "../pages/listing.js";
|
|
4
|
+
import type { BlogPageContext } from "../ui/page-context.js";
|
|
5
|
+
/** The breadcrumb names the pages show: the blog, the glossary and the clusters' display names. */
|
|
6
|
+
export declare function getCrumbLabels(config: SoftureConfig, context?: BlogPageContext): CrumbLabels;
|
|
7
|
+
/** An article's `BlogPosting`, breadcrumbs and FAQ, serialized. */
|
|
8
|
+
export declare function buildArticleJsonLd(config: SoftureConfig, article: BlogArticle): string;
|
|
9
|
+
/** A glossary term's `DefinedTerm` and breadcrumbs, serialized. */
|
|
10
|
+
export declare function buildTermJsonLd(config: SoftureConfig, term: BlogArticle): string;
|
|
11
|
+
/** The glossary's `DefinedTermSet` over the published terms, in the index's order, serialized; `null` without terms. */
|
|
12
|
+
export declare function buildGlossaryJsonLd(config: SoftureConfig, terms: readonly BlogArticle[]): string | null;
|
|
13
|
+
//# sourceMappingURL=json-ld.d.ts.map
|
|
@@ -0,0 +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;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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// The structured data of the blog's pages, ready for `<script type="application/ld+json">`: built from
|
|
2
|
+
// what the caller already holds (no database read, no request scope) and serialized so no text can
|
|
3
|
+
// close the tag. The ready-made pages use these; an app with its own page components mounts them as
|
|
4
|
+
//
|
|
5
|
+
// <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: buildArticleJsonLd(config, article) }} />
|
|
6
|
+
import { getSiteUrls } from "@softure-ai/core";
|
|
7
|
+
import { getArticleJsonLd, getGlossaryJsonLd, getTermJsonLd, serializeJsonLd } from "../pages/json-ld.js";
|
|
8
|
+
import { getArticleCrumbs, getClusterLabel, getTermCrumbs, sortTerms } from "../pages/listing.js";
|
|
9
|
+
import { getBlogLocaleTags, getBlogOptions } from "../server/options.js";
|
|
10
|
+
import { getPageContext } from "./context.js";
|
|
11
|
+
/** The breadcrumb names the pages show: the blog, the glossary and the clusters' display names. */
|
|
12
|
+
export function getCrumbLabels(config, context = getPageContext(config)) {
|
|
13
|
+
const clusters = getBlogOptions(config).clusters;
|
|
14
|
+
return {
|
|
15
|
+
blog: context.messages.pages.blogTitle,
|
|
16
|
+
glossary: context.messages.glossary.title,
|
|
17
|
+
cluster: (cluster) => getClusterLabel(cluster, clusters, config.locale),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function getJsonLdContext(config, context) {
|
|
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
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** An article's `BlogPosting`, breadcrumbs and FAQ, serialized. */
|
|
32
|
+
export function buildArticleJsonLd(config, article) {
|
|
33
|
+
const context = getPageContext(config);
|
|
34
|
+
const crumbs = getArticleCrumbs(article, context.routes, getCrumbLabels(config, context), { clusterAnchorPrefix: context.clusterAnchorPrefix });
|
|
35
|
+
return serializeJsonLd(getArticleJsonLd(article, crumbs, getJsonLdContext(config, context)));
|
|
36
|
+
}
|
|
37
|
+
/** A glossary term's `DefinedTerm` and breadcrumbs, serialized. */
|
|
38
|
+
export function buildTermJsonLd(config, term) {
|
|
39
|
+
const context = getPageContext(config);
|
|
40
|
+
const crumbs = getTermCrumbs(term, context.routes, getCrumbLabels(config, context));
|
|
41
|
+
return serializeJsonLd(getTermJsonLd(term, crumbs, getJsonLdContext(config, context), context.messages.glossary.title));
|
|
42
|
+
}
|
|
43
|
+
/** The glossary's `DefinedTermSet` over the published terms, in the index's order, serialized; `null` without terms. */
|
|
44
|
+
export function buildGlossaryJsonLd(config, terms) {
|
|
45
|
+
if (terms.length === 0)
|
|
46
|
+
return null;
|
|
47
|
+
const context = getPageContext(config);
|
|
48
|
+
return serializeJsonLd(getGlossaryJsonLd(sortTerms(terms, config.locale), getJsonLdContext(config, context), context.messages.glossary.title));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=json-ld.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-ld.js","sourceRoot":"","sources":["../../src/next/json-ld.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SoftureConfig } from "@softure-ai/core";
|
|
2
|
+
import type { Metadata } from "next/types.js";
|
|
3
|
+
import type { BlogArticle } from "../contract.js";
|
|
4
|
+
/** Whether a listing has no entry: an empty listing stays out of the index (thin content). */
|
|
5
|
+
export interface ListingMetadataInput {
|
|
6
|
+
readonly isEmpty: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** The listing's metadata, with the feed link. */
|
|
9
|
+
export declare function buildBlogIndexMetadata(config: SoftureConfig, { isEmpty }: ListingMetadataInput): Metadata;
|
|
10
|
+
/** An article's metadata, with the feed link. The caller checks the text is a published article. */
|
|
11
|
+
export declare function buildArticleMetadata(config: SoftureConfig, article: BlogArticle): Metadata;
|
|
12
|
+
/** The glossary index's metadata. */
|
|
13
|
+
export declare function buildGlossaryIndexMetadata(config: SoftureConfig, { isEmpty }: ListingMetadataInput): Metadata;
|
|
14
|
+
/** A glossary term's metadata, titled by `glossary.termTitleWithBrand`. The caller checks the text is a published term. */
|
|
15
|
+
export declare function buildTermMetadata(config: SoftureConfig, term: BlogArticle): Metadata;
|
|
16
|
+
/** The method page's metadata. */
|
|
17
|
+
export declare function buildMethodMetadata(config: SoftureConfig): Metadata;
|
|
18
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +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;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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// The metadata of the blog's pages (`<title>`, description, robots, canonical, feed link, Open Graph),
|
|
2
|
+
// built from what the caller already holds: no database read, no request scope. The ready-made pages'
|
|
3
|
+
// `generate*Metadata` read the text and call these; an app with its own page components calls them
|
|
4
|
+
// with the text it read, and can extend the result:
|
|
5
|
+
//
|
|
6
|
+
// export async function generateMetadata({ params }) {
|
|
7
|
+
// const config = getSoftureConfig();
|
|
8
|
+
// const article = await getTextBySlug(config, (await params).slug);
|
|
9
|
+
// if (article?.status !== "published" || article.kind !== "article") return {};
|
|
10
|
+
// return { ...buildArticleMetadata(config, article), keywords: [...] };
|
|
11
|
+
// }
|
|
12
|
+
import { formatMessage, getSiteUrls } from "@softure-ai/core";
|
|
13
|
+
import { getArticleDates } from "../pages/dates.js";
|
|
14
|
+
import { getArticlePath, getTermPath } from "../pages/paths.js";
|
|
15
|
+
import { getBlogLocaleTags } from "../server/options.js";
|
|
16
|
+
import { getPageContext } from "./context.js";
|
|
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 });
|
|
20
|
+
}
|
|
21
|
+
/** A page's canonical URL: seo's host and trailing-slash rule when the app lists seo, else on `appOrigin`. */
|
|
22
|
+
function getCanonicalUrl(config, path) {
|
|
23
|
+
return getSiteUrls(config).getCanonicalUrl(path);
|
|
24
|
+
}
|
|
25
|
+
/** The feed link a reader finds in `<head>` (`<link rel="alternate" type="application/rss+xml">`); a file, so no trailing-slash rule. */
|
|
26
|
+
function getFeedAlternates(config, context) {
|
|
27
|
+
return { "application/rss+xml": [{ url: `${getSiteUrls(config).origin}${context.routes.rss}`, title: withBrand(context.messages.pages.blogTitle, context) }] };
|
|
28
|
+
}
|
|
29
|
+
function getStaticMetadata(config, context, page) {
|
|
30
|
+
return {
|
|
31
|
+
title: withBrand(page.title, context),
|
|
32
|
+
description: page.description,
|
|
33
|
+
robots: { index: page.isEmpty !== true, follow: true },
|
|
34
|
+
alternates: { canonical: getCanonicalUrl(config, page.path), ...(page.hasFeed === true ? { types: getFeedAlternates(config, context) } : {}) },
|
|
35
|
+
openGraph: { type: "website", title: page.title, description: page.description, url: getCanonicalUrl(config, page.path), ...(context.brand === null ? {} : { siteName: context.brand }) },
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function getTextMetadata(config, context, text, path, options = {}) {
|
|
39
|
+
const dates = getArticleDates(text, config.timezone);
|
|
40
|
+
const url = getCanonicalUrl(config, path);
|
|
41
|
+
return {
|
|
42
|
+
title: withBrand(text.title, context, options.titlePattern),
|
|
43
|
+
description: text.description,
|
|
44
|
+
robots: { index: true, follow: true },
|
|
45
|
+
alternates: { canonical: url, ...(options.hasFeed === true ? { types: getFeedAlternates(config, context) } : {}) },
|
|
46
|
+
openGraph: {
|
|
47
|
+
type: "article",
|
|
48
|
+
title: text.title,
|
|
49
|
+
description: text.description,
|
|
50
|
+
url,
|
|
51
|
+
locale: getBlogLocaleTags(config).openGraph,
|
|
52
|
+
publishedTime: dates.published,
|
|
53
|
+
modifiedTime: dates.updated ?? dates.published,
|
|
54
|
+
...(context.brand === null ? {} : { siteName: context.brand }),
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** The listing's metadata, with the feed link. */
|
|
59
|
+
export function buildBlogIndexMetadata(config, { isEmpty }) {
|
|
60
|
+
const context = getPageContext(config);
|
|
61
|
+
const copy = context.messages.pages;
|
|
62
|
+
return getStaticMetadata(config, context, { title: copy.blogTitle, description: copy.blogDescription, path: context.routes.index, isEmpty, hasFeed: true });
|
|
63
|
+
}
|
|
64
|
+
/** An article's metadata, with the feed link. The caller checks the text is a published article. */
|
|
65
|
+
export function buildArticleMetadata(config, article) {
|
|
66
|
+
const context = getPageContext(config);
|
|
67
|
+
return getTextMetadata(config, context, article, getArticlePath(context.routes, article.slug), { hasFeed: true });
|
|
68
|
+
}
|
|
69
|
+
/** The glossary index's metadata. */
|
|
70
|
+
export function buildGlossaryIndexMetadata(config, { isEmpty }) {
|
|
71
|
+
const context = getPageContext(config);
|
|
72
|
+
const copy = context.messages.glossary;
|
|
73
|
+
return getStaticMetadata(config, context, { title: copy.title, description: copy.description, path: context.routes.glossary, isEmpty });
|
|
74
|
+
}
|
|
75
|
+
/** A glossary term's metadata, titled by `glossary.termTitleWithBrand`. The caller checks the text is a published term. */
|
|
76
|
+
export function buildTermMetadata(config, term) {
|
|
77
|
+
const context = getPageContext(config);
|
|
78
|
+
return getTextMetadata(config, context, term, getTermPath(context.routes, term.slug), { titlePattern: context.messages.glossary.termTitleWithBrand });
|
|
79
|
+
}
|
|
80
|
+
/** The method page's metadata. */
|
|
81
|
+
export function buildMethodMetadata(config) {
|
|
82
|
+
const context = getPageContext(config);
|
|
83
|
+
const copy = context.messages.method;
|
|
84
|
+
return getStaticMetadata(config, context, { title: copy.title, description: copy.description, path: context.routes.method });
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/next/metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/next/pages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"
|
|
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"}
|