@growth-labs/seo 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -10
- package/dist/index.js.map +1 -1
- package/dist/middleware/seo.d.ts +1 -1
- package/dist/middleware/seo.d.ts.map +1 -1
- package/dist/middleware/seo.js +10 -1
- package/dist/middleware/seo.js.map +1 -1
- package/dist/routes/apple-news.d.ts +0 -1
- package/dist/routes/apple-news.d.ts.map +1 -1
- package/dist/routes/apple-news.js +0 -1
- package/dist/routes/apple-news.js.map +1 -1
- package/dist/routes/llms-full.d.ts +0 -1
- package/dist/routes/llms-full.d.ts.map +1 -1
- package/dist/routes/llms-full.js +0 -1
- package/dist/routes/llms-full.js.map +1 -1
- package/dist/routes/llms.d.ts +0 -1
- package/dist/routes/llms.d.ts.map +1 -1
- package/dist/routes/llms.js +0 -1
- package/dist/routes/llms.js.map +1 -1
- package/dist/routes/podcast-narration.d.ts +0 -1
- package/dist/routes/podcast-narration.d.ts.map +1 -1
- package/dist/routes/podcast-narration.js +0 -1
- package/dist/routes/podcast-narration.js.map +1 -1
- package/dist/routes/podcast.d.ts +0 -1
- package/dist/routes/podcast.d.ts.map +1 -1
- package/dist/routes/podcast.js +0 -1
- package/dist/routes/podcast.js.map +1 -1
- package/dist/routes/robots.d.ts +0 -1
- package/dist/routes/robots.d.ts.map +1 -1
- package/dist/routes/robots.js +0 -1
- package/dist/routes/robots.js.map +1 -1
- package/dist/routes/rss.d.ts +0 -1
- package/dist/routes/rss.d.ts.map +1 -1
- package/dist/routes/rss.js +0 -1
- package/dist/routes/rss.js.map +1 -1
- package/dist/routes/sitemap-articles.d.ts +0 -1
- package/dist/routes/sitemap-articles.d.ts.map +1 -1
- package/dist/routes/sitemap-articles.js +0 -1
- package/dist/routes/sitemap-articles.js.map +1 -1
- package/dist/routes/sitemap-index.d.ts +0 -1
- package/dist/routes/sitemap-index.d.ts.map +1 -1
- package/dist/routes/sitemap-index.js +0 -1
- package/dist/routes/sitemap-index.js.map +1 -1
- package/dist/routes/sitemap-markdown.d.ts +0 -1
- package/dist/routes/sitemap-markdown.d.ts.map +1 -1
- package/dist/routes/sitemap-markdown.js +0 -1
- package/dist/routes/sitemap-markdown.js.map +1 -1
- package/dist/routes/sitemap-pages.d.ts +0 -1
- package/dist/routes/sitemap-pages.d.ts.map +1 -1
- package/dist/routes/sitemap-pages.js +0 -1
- package/dist/routes/sitemap-pages.js.map +1 -1
- package/dist/routes/sitemap-products.d.ts +0 -1
- package/dist/routes/sitemap-products.d.ts.map +1 -1
- package/dist/routes/sitemap-products.js +0 -1
- package/dist/routes/sitemap-products.js.map +1 -1
- package/dist/routes/sitemap-videos.d.ts +0 -1
- package/dist/routes/sitemap-videos.d.ts.map +1 -1
- package/dist/routes/sitemap-videos.js +0 -1
- package/dist/routes/sitemap-videos.js.map +1 -1
- package/dist/utils/apple-news-rss.d.ts.map +1 -1
- package/dist/utils/apple-news-rss.js +10 -6
- package/dist/utils/apple-news-rss.js.map +1 -1
- package/dist/utils/rss.d.ts.map +1 -1
- package/dist/utils/rss.js +22 -1
- package/dist/utils/rss.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/vite-plugin.d.ts +1 -1
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +45 -7
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +2 -2
- package/src/components/AeoHead.astro +5 -2
- package/src/components/SeoHead.astro +5 -1
- package/src/index.ts +30 -10
- package/src/middleware/seo.ts +10 -1
- package/src/routes/apple-news.ts +0 -2
- package/src/routes/llms-full.ts +0 -2
- package/src/routes/llms.ts +0 -2
- package/src/routes/podcast-narration.ts +0 -2
- package/src/routes/podcast.ts +0 -2
- package/src/routes/robots.ts +0 -2
- package/src/routes/rss.ts +0 -2
- package/src/routes/sitemap-articles.ts +0 -2
- package/src/routes/sitemap-index.ts +0 -2
- package/src/routes/sitemap-markdown.ts +0 -2
- package/src/routes/sitemap-pages.ts +0 -2
- package/src/routes/sitemap-products.ts +0 -2
- package/src/routes/sitemap-videos.ts +0 -2
- package/src/utils/apple-news-rss.ts +9 -6
- package/src/utils/rss.ts +24 -1
- package/src/utils/validation.ts +25 -1
- package/src/virtual.d.ts +12 -0
- package/src/vite-plugin.ts +47 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-products.d.ts","sourceRoot":"","sources":["../../src/routes/sitemap-products.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAKrC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"sitemap-products.d.ts","sourceRoot":"","sources":["../../src/routes/sitemap-products.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAKrC,eAAO,MAAM,GAAG,EAAE,QAejB,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import 'virtual:growth-labs/seo/config';
|
|
2
2
|
import { getContentProvider } from '../_internal/state.js';
|
|
3
3
|
import { generateProductSitemap } from '../utils/sitemap.js';
|
|
4
|
-
export const prerender = false;
|
|
5
4
|
export const GET = async (context) => {
|
|
6
5
|
const contentProvider = getContentProvider();
|
|
7
6
|
let products = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-products.js","sourceRoot":"","sources":["../../src/routes/sitemap-products.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"sitemap-products.js","sourceRoot":"","sources":["../../src/routes/sitemap-products.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,MAAM,CAAC,MAAM,GAAG,GAAa,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAE5C,IAAI,QAAQ,GAAkB,EAAE,CAAA;IAChC,IAAI,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC;YACJ,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAc,CAAC,CAAA;QACvE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAE5C,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE;QACxB,OAAO,EAAE,EAAE,cAAc,EAAE,gCAAgC,EAAE;KAC7D,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-videos.d.ts","sourceRoot":"","sources":["../../src/routes/sitemap-videos.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAKrC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"sitemap-videos.d.ts","sourceRoot":"","sources":["../../src/routes/sitemap-videos.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAKrC,eAAO,MAAM,GAAG,EAAE,QAejB,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import 'virtual:growth-labs/seo/config';
|
|
2
2
|
import { getContentProvider } from '../_internal/state.js';
|
|
3
3
|
import { generateVideoSitemap } from '../utils/sitemap.js';
|
|
4
|
-
export const prerender = false;
|
|
5
4
|
export const GET = async (context) => {
|
|
6
5
|
const contentProvider = getContentProvider();
|
|
7
6
|
let videos = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-videos.js","sourceRoot":"","sources":["../../src/routes/sitemap-videos.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"sitemap-videos.js","sourceRoot":"","sources":["../../src/routes/sitemap-videos.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,CAAC,MAAM,GAAG,GAAa,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAE5C,IAAI,MAAM,GAAkB,EAAE,CAAA;IAC9B,IAAI,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAc,CAAC,CAAA;QACnE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAExC,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE;QACxB,OAAO,EAAE,EAAE,cAAc,EAAE,gCAAgC,EAAE;KAC7D,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-news-rss.d.ts","sourceRoot":"","sources":["../../src/utils/apple-news-rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAgB9C;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,OAAO,EAAE,0BAA0B,CAAA;IAInC,WAAW,CAAC,EAAE,mBAAmB,CAAA;CACjC;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,KAAK,EACL,OAAO,EACP,WAAW,GACX,EAAE,2BAA2B,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"apple-news-rss.d.ts","sourceRoot":"","sources":["../../src/utils/apple-news-rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAgB9C;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,OAAO,EAAE,0BAA0B,CAAA;IAInC,WAAW,CAAC,EAAE,mBAAmB,CAAA;CACjC;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,KAAK,EACL,OAAO,EACP,WAAW,GACX,EAAE,2BAA2B,GAAG,MAAM,CAmFtC"}
|
|
@@ -32,14 +32,18 @@ export function generateAppleNewsRss({ items, options, contentHtml, }) {
|
|
|
32
32
|
throw new Error('generateAppleNewsRss called without appleNews.enabled');
|
|
33
33
|
}
|
|
34
34
|
const filtered = forAppleNews(items, { publishable: appleNews.defaultPublishable });
|
|
35
|
-
// Newest-first ordering.
|
|
35
|
+
// Newest-first ordering. Coerce missing/unparseable dates to 0 (sort last) —
|
|
36
|
+
// a NaN comparator result makes Array.sort leave the element in place, which
|
|
37
|
+
// could park a junk-dated item at the front of the capped feed.
|
|
38
|
+
const publishTime = (value) => {
|
|
39
|
+
if (!value)
|
|
40
|
+
return 0;
|
|
41
|
+
const t = new Date(value).getTime();
|
|
42
|
+
return Number.isNaN(t) ? 0 : t;
|
|
43
|
+
};
|
|
36
44
|
const sorted = filtered
|
|
37
45
|
.slice()
|
|
38
|
-
.sort((a, b) =>
|
|
39
|
-
const at = a.datePublished ? new Date(a.datePublished).getTime() : 0;
|
|
40
|
-
const bt = b.datePublished ? new Date(b.datePublished).getTime() : 0;
|
|
41
|
-
return bt - at;
|
|
42
|
-
})
|
|
46
|
+
.sort((a, b) => publishTime(b.datePublished) - publishTime(a.datePublished))
|
|
43
47
|
.slice(0, MAX_ITEMS);
|
|
44
48
|
const selfLink = `${options.site.replace(/\/$/, '')}${appleNews.feedPath}`;
|
|
45
49
|
const channelImage = options.organization.logo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-news-rss.js","sourceRoot":"","sources":["../../src/utils/apple-news-rss.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACvC,CAAC;AAmBD,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACpC,KAAK,EACL,OAAO,EACP,WAAW,GACkB;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACnC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACnF,
|
|
1
|
+
{"version":3,"file":"apple-news-rss.js","sourceRoot":"","sources":["../../src/utils/apple-news-rss.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/rss.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rss.d.ts","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"rss.d.ts","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAiC9C,wBAAgB,eAAe,CAC9B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,0BAA0B,EACnC,WAAW,CAAC,EAAE,MAAM,GAClB,MAAM,CAgDR"}
|
package/dist/utils/rss.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
// RSS is a "recent updates" surface, not a full archive (that's the sitemap).
|
|
2
|
+
// Capping the item count keeps the feed lightweight for readers AND bounds the
|
|
3
|
+
// prerendered /feed.xml asset — an uncapped full-body feed on a large catalog
|
|
4
|
+
// would eventually breach Cloudflare's 25 MiB per-asset limit. Mirrors the
|
|
5
|
+
// Apple News feed cap.
|
|
6
|
+
const RSS_MAX_ITEMS = 50;
|
|
1
7
|
function escapeXml(str) {
|
|
2
8
|
return str
|
|
3
9
|
.replace(/&/g, '&')
|
|
@@ -9,12 +15,27 @@ function escapeXml(str) {
|
|
|
9
15
|
function toRfc822(dateStr) {
|
|
10
16
|
return new Date(dateStr).toUTCString();
|
|
11
17
|
}
|
|
18
|
+
// Parse to epoch ms, coercing missing/unparseable dates to 0 so they sort last.
|
|
19
|
+
// A raw `new Date(bad).getTime()` returns NaN, and a NaN comparator result makes
|
|
20
|
+
// Array.sort leave the element in place — which can park a junk-dated item at the
|
|
21
|
+
// front of the capped feed. Content dates come from hand/LLM-authored frontmatter,
|
|
22
|
+
// so malformed values are realistic.
|
|
23
|
+
function publishTime(value) {
|
|
24
|
+
if (!value)
|
|
25
|
+
return 0;
|
|
26
|
+
const t = new Date(value).getTime();
|
|
27
|
+
return Number.isNaN(t) ? 0 : t;
|
|
28
|
+
}
|
|
12
29
|
export function generateRssFeed(items, options, description) {
|
|
13
30
|
const { site, organization, defaults } = options;
|
|
14
31
|
const feedDescription = description ?? organization.name;
|
|
15
32
|
const language = defaults.locale.replace('_', '-').toLowerCase();
|
|
16
33
|
const lastBuildDate = new Date().toUTCString();
|
|
17
|
-
|
|
34
|
+
// Newest first, then cap. Missing/unparseable dates sort last (time 0).
|
|
35
|
+
const recentItems = [...items]
|
|
36
|
+
.sort((a, b) => publishTime(b.datePublished) - publishTime(a.datePublished))
|
|
37
|
+
.slice(0, RSS_MAX_ITEMS);
|
|
38
|
+
const itemsXml = recentItems
|
|
18
39
|
.map((item) => {
|
|
19
40
|
const pubDate = item.datePublished ? toRfc822(item.datePublished) : '';
|
|
20
41
|
const pubDateTag = pubDate ? `\n <pubDate>${escapeXml(pubDate)}</pubDate>` : '';
|
package/dist/utils/rss.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rss.js","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,KAAoB,EACpB,OAAmC,EACnC,WAAoB;IAEpB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,eAAe,GAAG,WAAW,IAAI,YAAY,CAAC,IAAI,CAAA;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAChE,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE9C,MAAM,
|
|
1
|
+
{"version":3,"file":"rss.js","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAqEhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAqEhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CAwH3F;AA2GD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,qBAAqB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAkC5F;AAID,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,EAC9C,eAAe,EACf,KAAK,GACL,EAAE;IACF,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAA;CACpB,GAAG,mBAAmB,EAAE,CAmBxB"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -150,7 +150,15 @@ export function validatePage(html, options) {
|
|
|
150
150
|
!hasArticleJsonLd(html)) {
|
|
151
151
|
errors.push('Missing valid Article JSON-LD for article route');
|
|
152
152
|
}
|
|
153
|
-
|
|
153
|
+
// max-image-preview:large tells search engines to show large image previews
|
|
154
|
+
// in Discover / News results — meaningful only for INDEXABLE pages. A noindex
|
|
155
|
+
// page (404, login, account, etc.) is excluded from search entirely, so the
|
|
156
|
+
// directive is moot there. Requiring it would force every consumer's noindex
|
|
157
|
+
// layout to carry a contradictory `noindex, ..., max-image-preview:large`
|
|
158
|
+
// robots string just to satisfy the linter. Skip the check on noindex pages.
|
|
159
|
+
if (options.requireMaxImagePreviewLarge &&
|
|
160
|
+
!isNoindexPage(html) &&
|
|
161
|
+
!hasMaxImagePreviewLarge(html)) {
|
|
154
162
|
errors.push('Missing robots max-image-preview:large directive');
|
|
155
163
|
}
|
|
156
164
|
return { errors, warnings };
|
|
@@ -212,6 +220,21 @@ function hasMaxImagePreviewLarge(html) {
|
|
|
212
220
|
}
|
|
213
221
|
return false;
|
|
214
222
|
}
|
|
223
|
+
function isNoindexPage(html) {
|
|
224
|
+
const metaTags = html.match(/<meta\s+[^>]*>/gi) ?? [];
|
|
225
|
+
for (const tag of metaTags) {
|
|
226
|
+
const name = getHtmlAttr(tag, 'name')?.toLowerCase();
|
|
227
|
+
// Per the robots spec a per-bot directive (e.g. name="googlebot") counts;
|
|
228
|
+
// `content="none"` is equivalent to `noindex, nofollow`.
|
|
229
|
+
if (name !== 'robots' && name !== 'googlebot')
|
|
230
|
+
continue;
|
|
231
|
+
const content = getHtmlAttr(tag, 'content')?.toLowerCase() ?? '';
|
|
232
|
+
const directives = content.split(',').map((part) => part.trim());
|
|
233
|
+
if (directives.includes('noindex') || directives.includes('none'))
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
215
238
|
function isRecord(value) {
|
|
216
239
|
return typeof value === 'object' && value !== null;
|
|
217
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,qBAAqB;IACrB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACxC,CAAC;IAED,kBAAkB;IAClB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IAElE,iBAAiB;IACjB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,+CAA+C,CAAC,CAAA;QACzE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,gDAAgD,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAChC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,+CAA+C,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QAC3F,CAAC;IACF,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;QACvE,CAAC;aAAM,CAAC;YACP,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAC5D,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG,SAAoC,CAAA;gBAC9C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;gBACxD,CAAC;gBACD,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;oBACrB,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;gBAC/D,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,IAAI,YAAY,GAAG,CAAC,CAAA;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAA4B,CAAA;gBAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACtC,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CACV,kCAAkC,CAAC,cAAc,QAAQ,4BAA4B,CACrF,CAAA;gBACF,CAAC;gBACD,YAAY,GAAG,QAAQ,CAAA;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAA8B;IACxE,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC5B,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAA;IAExD,eAAe;IACf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACjE,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACnC,CAAC;SAAM,CAAC;QACP,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,cAAc,gBAAgB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAChF,CAAC;IACF,CAAC;IAED,0BAA0B;IAC1B,MAAM,SAAS,GACd,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC1C,CAAC;SAAM,CAAC;QACP,MAAM,YAAY,GACjB,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAC5F,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACnC,IAAI,IAAI,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CACZ,4BAA4B,oBAAoB,gBAAgB,IAAI,CAAC,MAAM,GAAG,CAC9E,CAAA;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,kBAAkB;IAClB,MAAM,cAAc,GACnB,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACxC,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GACjB,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACnD,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,sCAAsC,CAAC,CAAA;IAC9F,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,YAAY,GACjB,IAAI,CAAC,KAAK,CAAC,oDAAoD,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;QACzD,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,iBAAiB,GACtB,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC;gBAClD,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;YAC5C,IAAI,iBAAiB,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;oBAC1D,SAAS,CACR,OAAO,CAAC,gBAAgB,EACxB,MAAM,EACN,QAAQ,EACR,oBAAoB,KAAK,uBAAuB,OAAO,CAAC,YAAY,IAAI,CACxE,CAAA;gBACF,CAAC;YACF,CAAC;iBAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,CAAC,YAAY,IAAI,CAAC,CAAA;YACjF,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,CAAC,gBAAgB,IAAI,YAAY,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,CAAC,YAAY,IAAI,CAAC,CAAA;QACjF,CAAC;IACF,CAAC;IAED,YAAY;IACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;IAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IACjE,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/F,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAA;IACzF,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IACjD,CAAC;IAED,IACC,OAAO,CAAC,oBAAoB;QAC5B,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACtB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,2BAA2B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5B,CAAC;AAED,SAAS,SAAS,CACjB,OAA4B,EAC5B,MAAgB,EAChB,QAAkB,EAClB,OAAe;IAEf,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;QAC5B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA4B;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3B,OAAO,4CAA4C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACrC,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;YAC7C,IAAI,cAAc,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACxC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,8EAA8E,CAAA;IAC9F,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC3D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAElC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAA;IACvF,IACC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,EAC1F,CAAC;QACF,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACrD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ;YAAE,SAAQ;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAAE,OAAO,IAAI,CAAA;IAChE,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAA;AACnD,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAY;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,SAAS,CACpE,CAAA;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QACxC,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QACtE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QAChE,OAAO,OAAO;aACZ,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,QAAQ,CAAC,SAAS,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,IAAI,UAAU,CAAA;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,IAAY;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CACtB,IAAI,MAAM,CAAC,MAAM,WAAW,6CAA6C,EAAE,GAAG,CAAC,CAC/E,CAAA;IACD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AAC9C,CAAC;AAeD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEnD,MAAM,MAAM,GAA+B,EAAE,CAAA;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,iBAAiB,EAAE;wBAClB,IAAI,EAAE,GAAG,CAAC,GAAG;wBACb,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,qBAAqB,EAAE,IAAI,CAAC,GAAG;qBAC/B;iBACD,CAAC,CAAA;gBACF,SAAQ;YACT,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;YAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,iBAAiB,EAAE;wBAClB,IAAI,EAAE,GAAG,CAAC,GAAG;wBACb,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,qBAAqB,EAAE,IAAI,CAAC,GAAG;qBAC/B;iBACD,CAAC,CAAA;YACH,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAUD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAC9C,eAAe,EACf,KAAK,GAIL;IACA,MAAM,MAAM,GAA0B,EAAE,CAAA;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,SAAQ;QACvC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;QACvC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,SAAS;gBACjB,OAAO,EACN,SAAS,IAAI,mDAAmD;oBAChE,uEAAuE;oBACvE,yEAAyE;oBACzE,0EAA0E;oBAC1E,oDAAoD;aACrD,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,qBAAqB;IACrB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACxC,CAAC;IAED,kBAAkB;IAClB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IAElE,iBAAiB;IACjB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,+CAA+C,CAAC,CAAA;QACzE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,gDAAgD,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAChC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,+CAA+C,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QAC3F,CAAC;IACF,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;QACvE,CAAC;aAAM,CAAC;YACP,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAC5D,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG,SAAoC,CAAA;gBAC9C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;gBACxD,CAAC;gBACD,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;oBACrB,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;gBAC/D,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,IAAI,YAAY,GAAG,CAAC,CAAA;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAA4B,CAAA;gBAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACtC,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CACV,kCAAkC,CAAC,cAAc,QAAQ,4BAA4B,CACrF,CAAA;gBACF,CAAC;gBACD,YAAY,GAAG,QAAQ,CAAA;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAA8B;IACxE,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAC5B,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAA;IAExD,eAAe;IACf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACjE,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACnC,CAAC;SAAM,CAAC;QACP,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,cAAc,gBAAgB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAChF,CAAC;IACF,CAAC;IAED,0BAA0B;IAC1B,MAAM,SAAS,GACd,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IAC1C,CAAC;SAAM,CAAC;QACP,MAAM,YAAY,GACjB,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAC5F,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACnC,IAAI,IAAI,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CACZ,4BAA4B,oBAAoB,gBAAgB,IAAI,CAAC,MAAM,GAAG,CAC9E,CAAA;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,kBAAkB;IAClB,MAAM,cAAc,GACnB,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACxC,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GACjB,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACnD,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,sCAAsC,CAAC,CAAA;IAC9F,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,YAAY,GACjB,IAAI,CAAC,KAAK,CAAC,oDAAoD,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;QACzD,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,iBAAiB,GACtB,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC;gBAClD,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;YAC5C,IAAI,iBAAiB,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;oBAC1D,SAAS,CACR,OAAO,CAAC,gBAAgB,EACxB,MAAM,EACN,QAAQ,EACR,oBAAoB,KAAK,uBAAuB,OAAO,CAAC,YAAY,IAAI,CACxE,CAAA;gBACF,CAAC;YACF,CAAC;iBAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,CAAC,YAAY,IAAI,CAAC,CAAA;YACjF,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,CAAC,gBAAgB,IAAI,YAAY,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,CAAC,YAAY,IAAI,CAAC,CAAA;QACjF,CAAC;IACF,CAAC;IAED,YAAY;IACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;IAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IACjE,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/F,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAA;IACzF,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IACjD,CAAC;IAED,IACC,OAAO,CAAC,oBAAoB;QAC5B,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACtB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC/D,CAAC;IAED,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,IACC,OAAO,CAAC,2BAA2B;QACnC,CAAC,aAAa,CAAC,IAAI,CAAC;QACpB,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAC7B,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5B,CAAC;AAED,SAAS,SAAS,CACjB,OAA4B,EAC5B,MAAgB,EAChB,QAAkB,EAClB,OAAe;IAEf,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;QAC5B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA4B;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3B,OAAO,4CAA4C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACrC,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;YAC7C,IAAI,cAAc,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACxC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,8EAA8E,CAAA;IAC9F,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC3D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAElC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAA;IACvF,IACC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,EAC1F,CAAC;QACF,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACrD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ;YAAE,SAAQ;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAAE,OAAO,IAAI,CAAA;IAChE,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACrD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;QACpD,0EAA0E;QAC1E,yDAAyD;QACzD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW;YAAE,SAAQ;QACvD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;IAC/E,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAA;AACnD,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAY;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,SAAS,CACpE,CAAA;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QACxC,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QACtE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QAChE,OAAO,OAAO;aACZ,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,QAAQ,CAAC,SAAS,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,IAAI,UAAU,CAAA;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,IAAY;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CACtB,IAAI,MAAM,CAAC,MAAM,WAAW,6CAA6C,EAAE,GAAG,CAAC,CAC/E,CAAA;IACD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AAC9C,CAAC;AAeD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEnD,MAAM,MAAM,GAA+B,EAAE,CAAA;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,iBAAiB,EAAE;wBAClB,IAAI,EAAE,GAAG,CAAC,GAAG;wBACb,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,qBAAqB,EAAE,IAAI,CAAC,GAAG;qBAC/B;iBACD,CAAC,CAAA;gBACF,SAAQ;YACT,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAA;YAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,iBAAiB,EAAE;wBAClB,IAAI,EAAE,GAAG,CAAC,GAAG;wBACb,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,qBAAqB,EAAE,IAAI,CAAC,GAAG;qBAC/B;iBACD,CAAC,CAAA;YACH,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAUD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAC9C,eAAe,EACf,KAAK,GAIL;IACA,MAAM,MAAM,GAA0B,EAAE,CAAA;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,SAAQ;QACvC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;QACvC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,SAAS;gBACjB,OAAO,EACN,SAAS,IAAI,mDAAmD;oBAChE,uEAAuE;oBACvE,yEAAyE;oBACzE,0EAA0E;oBAC1E,oDAAoD;aACrD,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC"}
|
package/dist/vite-plugin.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,cAAc,CAAA;AA8BvE,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,kBAAkB,CAAA;IAC1B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,MAAM,CA0D3F"}
|
package/dist/vite-plugin.js
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
|
+
import { resolveAeoTwins } from './options.js';
|
|
1
2
|
const VIRTUAL_MODULE_ID = 'virtual:growth-labs/seo/config';
|
|
2
3
|
const RESOLVED_VIRTUAL_MODULE_ID = `\0${VIRTUAL_MODULE_ID}`;
|
|
4
|
+
// Mode-aware twin of the virtual config module, imported by the always-runtime
|
|
5
|
+
// SEO middleware and the head components (SeoHead/AeoHead). It seeds `_setConfig`
|
|
6
|
+
// always, and seeds the contentProvider ONLY in non-static modes:
|
|
7
|
+
//
|
|
8
|
+
// - STATIC mode (aeoTwins false/'static', no flexibleSampling): provider-free.
|
|
9
|
+
// The middleware runs in the DEPLOYED Worker on every request; importing the
|
|
10
|
+
// provider-bearing `config` here would pull the consumer's contentProviderModule
|
|
11
|
+
// — and transitively `astro:content` plus the whole content store (tens of MB
|
|
12
|
+
// on a large catalog) — into the runtime Worker, blowing Cloudflare's 10 MB
|
|
13
|
+
// limit even though the middleware only needs metadata. In static mode the
|
|
14
|
+
// middleware needs no provider (AEO twins are prerendered, members-gating is
|
|
15
|
+
// unavailable), so it stays out.
|
|
16
|
+
//
|
|
17
|
+
// - NON-STATIC mode (aeoTwins 'middleware'/'both', or flexibleSampling): the
|
|
18
|
+
// middleware genuinely needs the provider at runtime (Accept: text/markdown
|
|
19
|
+
// negotiation, LLM-training-crawler 403 on members items). Route modules load
|
|
20
|
+
// lazily under the Cloudflare adapter, so we cannot rely on an SSR route's
|
|
21
|
+
// import to seed the provider before the middleware runs. Seeding it via THIS
|
|
22
|
+
// module — imported at the middleware's own module load — is deterministic.
|
|
23
|
+
// Bundling the store is acceptable here: non-static consumers serve dynamic
|
|
24
|
+
// content at runtime by design and are not the ones relying on prerender to
|
|
25
|
+
// stay under 10 MB.
|
|
26
|
+
const VIRTUAL_LITE_ID = 'virtual:growth-labs/seo/config-lite';
|
|
27
|
+
const RESOLVED_VIRTUAL_LITE_ID = `\0${VIRTUAL_LITE_ID}`;
|
|
3
28
|
export function growthLabsSeoPlugin(opts) {
|
|
4
29
|
// Back-compat: callers from 0.2.x passed ResolvedSeoOptions directly.
|
|
5
30
|
const normalized = 'config' in opts && 'site' in opts.config
|
|
@@ -15,23 +40,36 @@ export function growthLabsSeoPlugin(opts) {
|
|
|
15
40
|
if (id === VIRTUAL_MODULE_ID) {
|
|
16
41
|
return RESOLVED_VIRTUAL_MODULE_ID;
|
|
17
42
|
}
|
|
43
|
+
if (id === VIRTUAL_LITE_ID) {
|
|
44
|
+
return RESOLVED_VIRTUAL_LITE_ID;
|
|
45
|
+
}
|
|
18
46
|
},
|
|
19
47
|
load(id) {
|
|
20
|
-
if (id !== RESOLVED_VIRTUAL_MODULE_ID)
|
|
48
|
+
if (id !== RESOLVED_VIRTUAL_MODULE_ID && id !== RESOLVED_VIRTUAL_LITE_ID)
|
|
21
49
|
return;
|
|
50
|
+
// `config` always seeds the provider (when a module is wired). `config-lite`
|
|
51
|
+
// seeds the provider only in NON-static modes (see the module comment): in
|
|
52
|
+
// static mode it must stay provider-free so the always-runtime middleware
|
|
53
|
+
// doesn't drag the content store into the deployed Worker; in non-static
|
|
54
|
+
// modes the middleware needs the provider at runtime, so config-lite seeds
|
|
55
|
+
// it deterministically at the middleware's own load.
|
|
56
|
+
const aeo = resolveAeoTwins(config.aeoTwins);
|
|
57
|
+
const staticMode = (!aeo || aeo.mode === 'static') && !config.flexibleSampling.enabled;
|
|
58
|
+
const isLite = id === RESOLVED_VIRTUAL_LITE_ID;
|
|
59
|
+
const withProvider = Boolean(contentProviderModule) && (!isLite || !staticMode);
|
|
22
60
|
// The generated module seeds state via side-effect at import time.
|
|
23
|
-
// Routes/middleware that
|
|
24
|
-
//
|
|
25
|
-
//
|
|
61
|
+
// Routes/middleware that import it before calling getConfig() populate
|
|
62
|
+
// state in whatever environment they run — the main Worker AND the
|
|
63
|
+
// Cloudflare prerender worker.
|
|
26
64
|
const lines = [
|
|
27
|
-
`import { _setConfig, _setContentProvider } from '@growth-labs/seo/_internal/state';`,
|
|
65
|
+
`import { _setConfig${withProvider ? ', _setContentProvider' : ''} } from '@growth-labs/seo/_internal/state';`,
|
|
28
66
|
];
|
|
29
|
-
if (
|
|
67
|
+
if (withProvider) {
|
|
30
68
|
lines.push(`import _cp from ${JSON.stringify(contentProviderModule)};`);
|
|
31
69
|
}
|
|
32
70
|
lines.push(`const config = ${JSON.stringify(staticConfig)};`);
|
|
33
71
|
lines.push(`_setConfig(config);`);
|
|
34
|
-
if (
|
|
72
|
+
if (withProvider) {
|
|
35
73
|
lines.push(`_setContentProvider(_cp);`);
|
|
36
74
|
}
|
|
37
75
|
lines.push(`export { config };`);
|
package/dist/vite-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@growth-labs/seo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"astro": "^6.1.10",
|
|
74
74
|
"typescript": "^5.7.0",
|
|
75
75
|
"vite": "^7.3.2",
|
|
76
|
-
"vitest": "^
|
|
76
|
+
"vitest": "^4.1.8"
|
|
77
77
|
},
|
|
78
78
|
"scripts": {
|
|
79
79
|
"build": "tsc",
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
// Side-effect: seeds state in whatever environment Vite bundles for.
|
|
3
|
-
// Required so `getConfig()` works in the Cloudflare prerender Worker.
|
|
4
|
-
|
|
3
|
+
// Required so `getConfig()` works in the Cloudflare prerender Worker. Uses the
|
|
4
|
+
// provider-free (in static mode) `config-lite` twin — AeoHead only reads
|
|
5
|
+
// getConfig()/resolveAeoTwins(), never getContentProvider() — so it doesn't drag
|
|
6
|
+
// the content store into an SSR page that renders this head component.
|
|
7
|
+
import 'virtual:growth-labs/seo/config-lite'
|
|
5
8
|
|
|
6
9
|
// Use package self-imports (not relative ../options.js / ../state.js) because
|
|
7
10
|
// this component ships as source from src/components/ but options.ts and state.ts
|
|
@@ -20,7 +20,11 @@
|
|
|
20
20
|
// Centralizing here eliminates that class of bug across ~12 sites.
|
|
21
21
|
//
|
|
22
22
|
// Side-effect import seeds state in both main and Cloudflare prerender Workers.
|
|
23
|
-
|
|
23
|
+
// SeoHead only reads getConfig() — never getContentProvider() — so it imports the
|
|
24
|
+
// mode-aware `config-lite` twin. In static mode that keeps the contentProvider (and
|
|
25
|
+
// the content store) out of any SSR page that renders this layout; the feed/AEO
|
|
26
|
+
// routes that DO need the provider import the full `config` themselves.
|
|
27
|
+
import 'virtual:growth-labs/seo/config-lite'
|
|
24
28
|
|
|
25
29
|
import { getConfig, type ContentItem } from '@growth-labs/seo'
|
|
26
30
|
import { resolveSeoConfig } from '@growth-labs/seo/site-url'
|
package/src/index.ts
CHANGED
|
@@ -91,11 +91,29 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
91
91
|
const skipped: Array<{ pattern: string; reason: string }> = []
|
|
92
92
|
const injectedRoutes = options.injectedRoutes
|
|
93
93
|
|
|
94
|
+
// ─── Prerender content routes in static mode ───
|
|
95
|
+
// The injected feed/sitemap/llms routes call the contentProvider, which
|
|
96
|
+
// (for content-layer-backed providers) transitively imports `astro:content`
|
|
97
|
+
// and the entire content store. As SSR (`prerender: false`) routes, that
|
|
98
|
+
// store ships in the DEPLOYED Worker — on a large catalog this blows
|
|
99
|
+
// Cloudflare's 10 MB Worker size limit. In "static" mode the feeds carry
|
|
100
|
+
// no per-request variation, so we prerender them: the provider runs in the
|
|
101
|
+
// build-time prerender Worker and the feeds are emitted as static Assets
|
|
102
|
+
// (which are NOT counted against the Worker size limit). Non-static modes
|
|
103
|
+
// (aeo 'middleware'/'both', flexibleSampling) keep SSR behavior unchanged —
|
|
104
|
+
// they genuinely branch per request and the middleware needs the provider.
|
|
105
|
+
//
|
|
106
|
+
// NOTE: the route modules must NOT carry a literal `export const prerender`
|
|
107
|
+
// — Astro's regex scanner would override this injected value. They were
|
|
108
|
+
// stripped of that export so this flag is authoritative.
|
|
109
|
+
const prerenderContentRoutes =
|
|
110
|
+
(!aeo || aeo.mode === 'static') && !options.flexibleSampling.enabled
|
|
111
|
+
|
|
94
112
|
const injectSeoRoute = (pattern: string, entrypoint: string) => {
|
|
95
113
|
injectRoute({
|
|
96
114
|
pattern,
|
|
97
115
|
entrypoint: resolveEntrypoint(entrypoint),
|
|
98
|
-
prerender:
|
|
116
|
+
prerender: prerenderContentRoutes,
|
|
99
117
|
})
|
|
100
118
|
injected.push(pattern)
|
|
101
119
|
}
|
|
@@ -177,7 +195,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
177
195
|
injectRoute({
|
|
178
196
|
pattern: '/robots.txt',
|
|
179
197
|
entrypoint: resolveEntrypoint('./routes/robots'),
|
|
180
|
-
prerender:
|
|
198
|
+
prerender: prerenderContentRoutes,
|
|
181
199
|
})
|
|
182
200
|
injected.push('/robots.txt')
|
|
183
201
|
} else {
|
|
@@ -193,7 +211,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
193
211
|
injectRoute({
|
|
194
212
|
pattern: '/llms.txt',
|
|
195
213
|
entrypoint: resolveEntrypoint('./routes/llms'),
|
|
196
|
-
prerender:
|
|
214
|
+
prerender: prerenderContentRoutes,
|
|
197
215
|
})
|
|
198
216
|
injected.push('/llms.txt')
|
|
199
217
|
}
|
|
@@ -201,7 +219,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
201
219
|
injectRoute({
|
|
202
220
|
pattern: '/llms-full.txt',
|
|
203
221
|
entrypoint: resolveEntrypoint('./routes/llms-full'),
|
|
204
|
-
prerender:
|
|
222
|
+
prerender: prerenderContentRoutes,
|
|
205
223
|
})
|
|
206
224
|
injected.push('/llms-full.txt')
|
|
207
225
|
}
|
|
@@ -211,7 +229,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
211
229
|
injectRoute({
|
|
212
230
|
pattern: '/feed.xml',
|
|
213
231
|
entrypoint: resolveEntrypoint('./routes/rss'),
|
|
214
|
-
prerender:
|
|
232
|
+
prerender: prerenderContentRoutes,
|
|
215
233
|
})
|
|
216
234
|
injected.push('/feed.xml')
|
|
217
235
|
}
|
|
@@ -221,7 +239,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
221
239
|
injectRoute({
|
|
222
240
|
pattern: options.appleNews.feedPath,
|
|
223
241
|
entrypoint: resolveEntrypoint('./routes/apple-news'),
|
|
224
|
-
prerender:
|
|
242
|
+
prerender: prerenderContentRoutes,
|
|
225
243
|
})
|
|
226
244
|
injected.push(options.appleNews.feedPath)
|
|
227
245
|
}
|
|
@@ -231,7 +249,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
231
249
|
injectRoute({
|
|
232
250
|
pattern: options.podcast.feedPath,
|
|
233
251
|
entrypoint: resolveEntrypoint('./routes/podcast'),
|
|
234
|
-
prerender:
|
|
252
|
+
prerender: prerenderContentRoutes,
|
|
235
253
|
})
|
|
236
254
|
injected.push(options.podcast.feedPath)
|
|
237
255
|
}
|
|
@@ -241,7 +259,7 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
241
259
|
injectRoute({
|
|
242
260
|
pattern: options.audioNarration.podcastFeedPath,
|
|
243
261
|
entrypoint: resolveEntrypoint('./routes/podcast-narration'),
|
|
244
|
-
prerender:
|
|
262
|
+
prerender: prerenderContentRoutes,
|
|
245
263
|
})
|
|
246
264
|
injected.push(options.audioNarration.podcastFeedPath)
|
|
247
265
|
}
|
|
@@ -294,8 +312,10 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
|
|
|
294
312
|
// Note: we try to load items here to check the guard, but this is
|
|
295
313
|
// best-effort. If contentProvider uses astro:content or other Vite
|
|
296
314
|
// virtuals, it will fail at raw-Node import time and we skip silently.
|
|
297
|
-
// The guard is a defence-in-depth check
|
|
298
|
-
//
|
|
315
|
+
// The guard is a defence-in-depth check. Note flexibleSampling forces
|
|
316
|
+
// non-static mode, so `prerenderContentRoutes` is false here and the
|
|
317
|
+
// injected content routes stay SSR (their prerender is controlled by the
|
|
318
|
+
// injectRoute flag above, not a literal `export const prerender`).
|
|
299
319
|
if (contentProvider && options.flexibleSampling?.enabled) {
|
|
300
320
|
try {
|
|
301
321
|
const items = await contentProvider({ type: 'articles' }, {} as never)
|
package/src/middleware/seo.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
// Provider-free config import: the middleware runs in the deployed Worker on
|
|
2
|
+
// every request and only needs metadata-level lookups. Importing the
|
|
3
|
+
// provider-bearing 'config' module here would pull the consumer's
|
|
4
|
+
// contentProviderModule — and transitively `astro:content` plus the whole
|
|
5
|
+
// content-layer store — into the runtime Worker, blowing Cloudflare's 10 MB
|
|
6
|
+
// size limit on large catalogs. The provider is seeded separately by the
|
|
7
|
+
// injected content routes (prerendered in static mode). getContentProvider()
|
|
8
|
+
// returns undefined here in static mode, which the provider-gated branches
|
|
9
|
+
// below already tolerate.
|
|
10
|
+
import 'virtual:growth-labs/seo/config-lite'
|
|
2
11
|
import { getConfig, getContentProvider } from '../_internal/state.js'
|
|
3
12
|
import type { SeoEnv } from '../bindings.js'
|
|
4
13
|
import { type ResolvedSeoOptions, resolveAeoTwins } from '../options.js'
|
package/src/routes/apple-news.ts
CHANGED
|
@@ -5,8 +5,6 @@ import { resolveSeoConfig } from '../site-url.js'
|
|
|
5
5
|
import type { ContentItem } from '../types.js'
|
|
6
6
|
import { generateAppleNewsRss } from '../utils/apple-news-rss.js'
|
|
7
7
|
|
|
8
|
-
export const prerender = false
|
|
9
|
-
|
|
10
8
|
export const GET: APIRoute = async (context) => {
|
|
11
9
|
const config = resolveSeoConfig(getConfig())
|
|
12
10
|
const contentProvider = getContentProvider()
|
package/src/routes/llms-full.ts
CHANGED
|
@@ -4,8 +4,6 @@ import { getConfig, getContentProvider } from '../_internal/state.js'
|
|
|
4
4
|
import type { ContentItem } from '../types.js'
|
|
5
5
|
import { generateLlmsFull } from '../utils/llms-full.js'
|
|
6
6
|
|
|
7
|
-
export const prerender = false
|
|
8
|
-
|
|
9
7
|
export const GET: APIRoute = async (context) => {
|
|
10
8
|
const config = getConfig()
|
|
11
9
|
const contentProvider = getContentProvider()
|
package/src/routes/llms.ts
CHANGED
|
@@ -3,8 +3,6 @@ import type { APIRoute } from 'astro'
|
|
|
3
3
|
import { getConfig } from '../_internal/state.js'
|
|
4
4
|
import { generateLlmsTxt } from '../utils/llms.js'
|
|
5
5
|
|
|
6
|
-
export const prerender = false
|
|
7
|
-
|
|
8
6
|
export const GET: APIRoute = async () => {
|
|
9
7
|
const config = getConfig()
|
|
10
8
|
const txt = generateLlmsTxt(config)
|
|
@@ -5,8 +5,6 @@ import { resolveSeoConfig } from '../site-url.js'
|
|
|
5
5
|
import type { ContentItem } from '../types.js'
|
|
6
6
|
import { generatePodcastFeed } from '../utils/podcast.js'
|
|
7
7
|
|
|
8
|
-
export const prerender = false
|
|
9
|
-
|
|
10
8
|
export const GET: APIRoute = async (context) => {
|
|
11
9
|
const config = resolveSeoConfig(getConfig())
|
|
12
10
|
const contentProvider = getContentProvider()
|
package/src/routes/podcast.ts
CHANGED
|
@@ -5,8 +5,6 @@ import { resolveSeoConfig } from '../site-url.js'
|
|
|
5
5
|
import type { ContentItem } from '../types.js'
|
|
6
6
|
import { generatePodcastFeed } from '../utils/podcast.js'
|
|
7
7
|
|
|
8
|
-
export const prerender = false
|
|
9
|
-
|
|
10
8
|
export const GET: APIRoute = async (context) => {
|
|
11
9
|
const config = resolveSeoConfig(getConfig())
|
|
12
10
|
const contentProvider = getContentProvider()
|
package/src/routes/robots.ts
CHANGED
|
@@ -4,8 +4,6 @@ import { getConfig, getContentProvider } from '../_internal/state.js'
|
|
|
4
4
|
import { resolveSeoConfig } from '../site-url.js'
|
|
5
5
|
import { generateRobotsTxt } from '../utils/robots.js'
|
|
6
6
|
|
|
7
|
-
export const prerender = false
|
|
8
|
-
|
|
9
7
|
export const GET: APIRoute = async () => {
|
|
10
8
|
const config = resolveSeoConfig(getConfig())
|
|
11
9
|
// The sitemap-index route is only injected when a content provider is wired.
|
package/src/routes/rss.ts
CHANGED
|
@@ -6,8 +6,6 @@ import type { ContentItem } from '../types.js'
|
|
|
6
6
|
import { forRss } from '../utils/content-filter.js'
|
|
7
7
|
import { generateRssFeed } from '../utils/rss.js'
|
|
8
8
|
|
|
9
|
-
export const prerender = false
|
|
10
|
-
|
|
11
9
|
export const GET: APIRoute = async (context) => {
|
|
12
10
|
const config = resolveSeoConfig(getConfig())
|
|
13
11
|
const contentProvider = getContentProvider()
|