@bagelink/blox 1.18.6 → 1.18.7
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 +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/{shard-runner-DF3K3Ze_.cjs → shard-runner-Bz46UqN8.cjs} +4 -2
- package/dist/{shard-runner-DFrc8d4O.js → shard-runner-CoFcUVGe.js} +4 -2
- package/dist/ssg/cli.cjs +3 -2
- package/dist/ssg/cli.mjs +3 -2
- package/dist/ssg/index.cjs +1 -1
- package/dist/ssg/index.mjs +16 -16
- package/dist/ssg/prerender.d.ts +2 -0
- package/dist/ssg/prerender.d.ts.map +1 -1
- package/dist/ssg/shard-runner.d.ts.map +1 -1
- package/dist/ssg/validate-output.d.ts +9 -0
- package/dist/ssg/validate-output.d.ts.map +1 -1
- package/dist/{validate-output-yDJYYYzK.js → validate-output-B8pmE7hf.js} +79 -24
- package/dist/{validate-output-BymMbrA5.cjs → validate-output-CbIQrCwa.cjs} +59 -4
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -31,7 +31,8 @@ export { defineBloxSite } from './siteConfig';
|
|
|
31
31
|
export type { BloxSiteConfig } from './siteConfig';
|
|
32
32
|
export { defineBlock } from './defineBlock';
|
|
33
33
|
export type { BlockMeta, BlockModule, BlockDataSource, BlockDataSourceConfig } from './defineBlock';
|
|
34
|
-
export type { LocaleStrategy } from './localeStrategy';
|
|
34
|
+
export type { LocaleStrategy, PageSlugMap } from './localeStrategy';
|
|
35
|
+
export { getPageSlugMap, localizePageSlug, setPageSlugMap } from './localeStrategy';
|
|
35
36
|
export { withLocaleRoutes } from './localeRoutes';
|
|
36
37
|
export { defineContent, contentRoutes, getContentRoute, getContentRouteByCollection, generateContentRoutes, installContentFallback, provideContentItem, useContentItem, useContentSeo, getItemBySlug, getItemById, ContentHost, ContentDetailView, } from './content';
|
|
37
38
|
export type { ContentItem, ContentRoute, ContentRouteInput, ContentViewSchema } from './content';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACzL,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAKlF,YAAY,EACX,cAAc,EACd,KAAK,EAEL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAK3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACjH,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAK7D,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC5F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAKlD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEnG,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ const node_child_process = require("node:child_process");
|
|
|
26
26
|
const os = require("node:os");
|
|
27
27
|
const path = require("node:path");
|
|
28
28
|
const process = require("node:process");
|
|
29
|
-
const llmArtifacts = require("./validate-output-
|
|
29
|
+
const llmArtifacts = require("./validate-output-CbIQrCwa.cjs");
|
|
30
30
|
const AUTO_SHARD_CAP = Number(process.env.BLOX_SSG_SHARD_CAP) || 6;
|
|
31
31
|
const PREFETCH_BUDGET = Number(process.env.BLOX_SSG_PREFETCH_BUDGET) || 24;
|
|
32
32
|
const SEQUENTIAL_SHARDS = process.env.BLOX_SSG_SEQUENTIAL === "1";
|
|
@@ -169,7 +169,7 @@ async function runSharded(opts) {
|
|
|
169
169
|
}
|
|
170
170
|
if (process.env.BLOX_SSG_LLM !== "0" && !((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.noindex)) {
|
|
171
171
|
try {
|
|
172
|
-
const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-
|
|
172
|
+
const { mergeLlmParts } = await Promise.resolve().then(() => require("./validate-output-CbIQrCwa.cjs")).then((n) => n.llmArtifacts);
|
|
173
173
|
const mergeWebsite = website;
|
|
174
174
|
const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
|
|
175
175
|
const { pages } = await mergeLlmParts({
|
|
@@ -215,6 +215,8 @@ async function runSharded(opts) {
|
|
|
215
215
|
await fs.rm(routePartsDir, { recursive: true, force: true });
|
|
216
216
|
await fs.rm(siteDataFile, { force: true }).catch(() => {
|
|
217
217
|
});
|
|
218
|
+
await llmArtifacts.validateNoRedirectingLinks(path.resolve("dist"));
|
|
219
|
+
console.log("[blox-ssg] validated internal links (no redirecting URLs)");
|
|
218
220
|
console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
|
|
219
221
|
return 0;
|
|
220
222
|
}
|
|
@@ -2,7 +2,7 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import process from "node:process";
|
|
5
|
-
import { f as fetchCmsSiteData, g as generateSitemapArtifacts } from "./validate-output-
|
|
5
|
+
import { f as fetchCmsSiteData, g as generateSitemapArtifacts, d as validateNoRedirectingLinks } from "./validate-output-B8pmE7hf.js";
|
|
6
6
|
const AUTO_SHARD_CAP = Number(process.env.BLOX_SSG_SHARD_CAP) || 6;
|
|
7
7
|
const PREFETCH_BUDGET = Number(process.env.BLOX_SSG_PREFETCH_BUDGET) || 24;
|
|
8
8
|
const SEQUENTIAL_SHARDS = process.env.BLOX_SSG_SEQUENTIAL === "1";
|
|
@@ -145,7 +145,7 @@ async function runSharded(opts) {
|
|
|
145
145
|
}
|
|
146
146
|
if (process.env.BLOX_SSG_LLM !== "0" && !((_a = website == null ? void 0 : website.seo) == null ? void 0 : _a.noindex)) {
|
|
147
147
|
try {
|
|
148
|
-
const { mergeLlmParts } = await import("./validate-output-
|
|
148
|
+
const { mergeLlmParts } = await import("./validate-output-B8pmE7hf.js").then((n) => n.D);
|
|
149
149
|
const mergeWebsite = website;
|
|
150
150
|
const partFiles = Array.from({ length: total }, (_, i) => path.join(llmPartsDir, `part.${i}.json`));
|
|
151
151
|
const { pages } = await mergeLlmParts({
|
|
@@ -191,6 +191,8 @@ async function runSharded(opts) {
|
|
|
191
191
|
await fs.rm(routePartsDir, { recursive: true, force: true });
|
|
192
192
|
await fs.rm(siteDataFile, { force: true }).catch(() => {
|
|
193
193
|
});
|
|
194
|
+
await validateNoRedirectingLinks(path.resolve("dist"));
|
|
195
|
+
console.log("[blox-ssg] validated internal links (no redirecting URLs)");
|
|
194
196
|
console.log(`[blox-ssg] sharded run done in ${((Date.now() - start) / 1e3).toFixed(1)}s`);
|
|
195
197
|
return 0;
|
|
196
198
|
}
|
package/dist/ssg/cli.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const process = require("node:process");
|
|
4
4
|
const fs = require("node:fs/promises");
|
|
5
5
|
const ssg_buildGrant = require("./build-grant.cjs");
|
|
6
|
-
const llmArtifacts = require("../validate-output-
|
|
6
|
+
const llmArtifacts = require("../validate-output-CbIQrCwa.cjs");
|
|
7
7
|
const localeStrategy = require("../localeStrategy-OwRIn35C.cjs");
|
|
8
8
|
function installFetchTimeout() {
|
|
9
9
|
const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
|
|
@@ -148,7 +148,7 @@ Environment:
|
|
|
148
148
|
if (shardsOpt !== null || routesCmd) {
|
|
149
149
|
const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
|
|
150
150
|
const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
|
|
151
|
-
const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-
|
|
151
|
+
const { runSharded } = await Promise.resolve().then(() => require("../shard-runner-Bz46UqN8.cjs"));
|
|
152
152
|
const code = await runSharded({
|
|
153
153
|
shards: shardsOpt ?? "auto",
|
|
154
154
|
mode,
|
|
@@ -295,6 +295,7 @@ ${"=".repeat(60)}`);
|
|
|
295
295
|
}
|
|
296
296
|
if (validateOutput && shardTotal === 1) {
|
|
297
297
|
await llmArtifacts.validateInternalLinks("dist");
|
|
298
|
+
await llmArtifacts.validateNoRedirectingLinks("dist");
|
|
298
299
|
console.log("[blox-ssg] validated internal links");
|
|
299
300
|
}
|
|
300
301
|
if (productionBuild && shardTotal === 1) {
|
package/dist/ssg/cli.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import process from "node:process";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import { resolveBloxBuildGrant } from "./build-grant.mjs";
|
|
5
|
-
import { v as validateSsgOutput, u as uploadBloxManifest, p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, b as buildCollectionResolver, a as prerender, c as validateInternalLinks } from "../validate-output-
|
|
5
|
+
import { v as validateSsgOutput, u as uploadBloxManifest, p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, b as buildCollectionResolver, a as prerender, c as validateInternalLinks, d as validateNoRedirectingLinks } from "../validate-output-B8pmE7hf.js";
|
|
6
6
|
import { s as setPageSlugMap } from "../localeStrategy-hXlNof1E.js";
|
|
7
7
|
function installFetchTimeout() {
|
|
8
8
|
const ms = Number(process.env.BLOX_SSG_FETCH_TIMEOUT_MS) || 2e4;
|
|
@@ -147,7 +147,7 @@ Environment:
|
|
|
147
147
|
if (shardsOpt !== null || routesCmd) {
|
|
148
148
|
const { apiBase: apiBase2, websiteName: configWebsiteName2 } = await resolveApiBase(mode);
|
|
149
149
|
const websiteName2 = process.env.WEBSITE_NAME ?? configWebsiteName2 ?? "default";
|
|
150
|
-
const { runSharded } = await import("../shard-runner-
|
|
150
|
+
const { runSharded } = await import("../shard-runner-CoFcUVGe.js");
|
|
151
151
|
const code = await runSharded({
|
|
152
152
|
shards: shardsOpt ?? "auto",
|
|
153
153
|
mode,
|
|
@@ -294,6 +294,7 @@ ${"=".repeat(60)}`);
|
|
|
294
294
|
}
|
|
295
295
|
if (validateOutput && shardTotal === 1) {
|
|
296
296
|
await validateInternalLinks("dist");
|
|
297
|
+
await validateNoRedirectingLinks("dist");
|
|
297
298
|
console.log("[blox-ssg] validated internal links");
|
|
298
299
|
}
|
|
299
300
|
if (productionBuild && shardTotal === 1) {
|
package/dist/ssg/index.cjs
CHANGED
|
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
mod
|
|
23
23
|
));
|
|
24
24
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
25
|
-
const llmArtifacts = require("../validate-output-
|
|
25
|
+
const llmArtifacts = require("../validate-output-CbIQrCwa.cjs");
|
|
26
26
|
const ssg_buildGrant = require("./build-grant.cjs");
|
|
27
27
|
const ssg_client = require("../client-AoDTJJXJ.cjs");
|
|
28
28
|
const vue = require("vue");
|
package/dist/ssg/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { e as buildPageHead, h as primaryContextEntry, i as buildJsonLd, j as extractPageText, B as BloxBuildResponseError, k as bloxBuildJson } from "../validate-output-B8pmE7hf.js";
|
|
2
|
+
import { l, m, f, n, o, q, r, g, s, t, w, x, y, z, p, a, A, C, u, c, v } from "../validate-output-B8pmE7hf.js";
|
|
3
3
|
import { parseBloxBuildGrantBody, resolveBloxBuildGrant } from "./build-grant.mjs";
|
|
4
4
|
import { a as BLOX_HYDRATION_WINDOW_KEY } from "../client-Ce9fRCGH.js";
|
|
5
5
|
import { createSSRApp, h, Suspense } from "vue";
|
|
@@ -416,34 +416,34 @@ export {
|
|
|
416
416
|
BLOX_HYDRATION_WINDOW_KEY,
|
|
417
417
|
BloxBuildResponseError,
|
|
418
418
|
bloxBuildJson,
|
|
419
|
-
|
|
419
|
+
l as bloxBuildRequest,
|
|
420
420
|
buildJsonLd,
|
|
421
421
|
buildPageHead,
|
|
422
|
-
|
|
422
|
+
m as buildSiteHead,
|
|
423
423
|
createBloxSSREntry,
|
|
424
424
|
extractPageText,
|
|
425
425
|
f as fetchCmsSiteData,
|
|
426
426
|
fetchDatastoreSnapshot,
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
427
|
+
n as generateLlmsFullTxt,
|
|
428
|
+
o as generateLlmsTxt,
|
|
429
|
+
q as generateNetlifyRedirects,
|
|
430
|
+
r as generateRobotsTxt,
|
|
431
431
|
g as generateSitemapArtifacts,
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
432
|
+
s as generateSitemapIndexXml,
|
|
433
|
+
t as generateSitemapXml,
|
|
434
|
+
w as getBloxBuildRequestOptions,
|
|
435
|
+
x as getSiteIconFlags,
|
|
436
|
+
y as localeSitemapPath,
|
|
437
|
+
z as mergeLlmParts,
|
|
438
438
|
parseBloxBuildGrantBody,
|
|
439
439
|
p as polyfillBloxSsgGlobals,
|
|
440
440
|
a as prerender,
|
|
441
441
|
querySnapshotRows,
|
|
442
442
|
renderBloxSsgPage,
|
|
443
443
|
resolveBloxBuildGrant,
|
|
444
|
-
|
|
444
|
+
A as resolveManifestProvenance,
|
|
445
445
|
snapshotRows,
|
|
446
|
-
|
|
446
|
+
C as splitSitemapPathsByLocale,
|
|
447
447
|
u as uploadBloxManifest,
|
|
448
448
|
c as validateInternalLinks,
|
|
449
449
|
v as validateSsgOutput
|
package/dist/ssg/prerender.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export interface RenderContext {
|
|
|
46
46
|
website?: WebsiteRead | null;
|
|
47
47
|
/** Resolved website ID for client embedding. */
|
|
48
48
|
websiteId?: string;
|
|
49
|
+
/** Canonical localized page paths, embedded in the hydration payload. */
|
|
50
|
+
pageSlugMap?: Record<string, Record<string, string>>;
|
|
49
51
|
/**
|
|
50
52
|
* Pre-resolved page data keyed by render URL. When the prerender producer has
|
|
51
53
|
* already fetched a URL's `/resolve-path` result, the SSR entry reads it from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../src/ssg/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAK9D,MAAM,WAAW,kBAAkB;IAClC,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,uBAAuB,CAAA;IACtC,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAQ/E;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EACrE,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,OAAO,GAAG,SAAS,GAC9B,CAAC,EAAE,CAIL;AAsED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgK1E"}
|
|
@@ -26,5 +26,14 @@ export interface ValidateSsgOutputOptions {
|
|
|
26
26
|
*/
|
|
27
27
|
checkInternalLinks?: boolean;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Fail when a prerendered page links to a URL that Netlify will redirect.
|
|
31
|
+
*
|
|
32
|
+
* Links must point at canonical URLs: a link to a redirect source (e.g.
|
|
33
|
+
* `/es/get-the-best-offer` → `/es/consigue-la-mejor-oferta`) costs a hop on
|
|
34
|
+
* every click and shows up as an internal redirect chain in crawlers. Redirects
|
|
35
|
+
* remain for external/legacy URLs only.
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateNoRedirectingLinks(outDir: string): Promise<void>;
|
|
29
38
|
export declare function validateSsgOutput(options: ValidateSsgOutputOptions): Promise<void>;
|
|
30
39
|
//# sourceMappingURL=validate-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-output.d.ts","sourceRoot":"","sources":["../../src/ssg/validate-output.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC5B;
|
|
1
|
+
{"version":3,"file":"validate-output.d.ts","sourceRoot":"","sources":["../../src/ssg/validate-output.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9E;AAqED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ExF"}
|
|
@@ -1274,7 +1274,7 @@ ${existing}`,
|
|
|
1274
1274
|
totalDiscovered: seen.size
|
|
1275
1275
|
};
|
|
1276
1276
|
}
|
|
1277
|
-
function normalizePath(p) {
|
|
1277
|
+
function normalizePath$1(p) {
|
|
1278
1278
|
if (!p) return "/";
|
|
1279
1279
|
try {
|
|
1280
1280
|
if (p.startsWith("http://") || p.startsWith("https://")) {
|
|
@@ -1291,7 +1291,7 @@ function normalizePath(p) {
|
|
|
1291
1291
|
return p || "/";
|
|
1292
1292
|
}
|
|
1293
1293
|
function enqueue(p, queue, seen, isExcluded) {
|
|
1294
|
-
const np = normalizePath(p);
|
|
1294
|
+
const np = normalizePath$1(p);
|
|
1295
1295
|
if (seen.has(np)) return;
|
|
1296
1296
|
if (isExcluded(np)) return;
|
|
1297
1297
|
seen.add(np);
|
|
@@ -1300,7 +1300,7 @@ function enqueue(p, queue, seen, isExcluded) {
|
|
|
1300
1300
|
function makeExcludeChecker(excludePaths) {
|
|
1301
1301
|
const rules = Array.isArray(excludePaths) ? excludePaths : [excludePaths];
|
|
1302
1302
|
return (p) => {
|
|
1303
|
-
const np = normalizePath(p);
|
|
1303
|
+
const np = normalizePath$1(p);
|
|
1304
1304
|
for (const r of rules) {
|
|
1305
1305
|
if (typeof r === "string" && r === "") continue;
|
|
1306
1306
|
if (typeof r === "function") {
|
|
@@ -1308,7 +1308,7 @@ function makeExcludeChecker(excludePaths) {
|
|
|
1308
1308
|
} else if (r instanceof RegExp) {
|
|
1309
1309
|
if (r.test(np)) return true;
|
|
1310
1310
|
} else if (typeof r === "string") {
|
|
1311
|
-
const prefix = normalizePath(r);
|
|
1311
|
+
const prefix = normalizePath$1(r);
|
|
1312
1312
|
if (np === prefix || np.startsWith(`${prefix}/`)) return true;
|
|
1313
1313
|
}
|
|
1314
1314
|
}
|
|
@@ -1546,6 +1546,60 @@ async function validateInternalLinks(outDir) {
|
|
|
1546
1546
|
${failures.map((item) => ` - ${item}`).join("\n")}`);
|
|
1547
1547
|
}
|
|
1548
1548
|
}
|
|
1549
|
+
async function validateNoRedirectingLinks(outDir) {
|
|
1550
|
+
const root = path.resolve(outDir);
|
|
1551
|
+
const redirectSources = await readRedirectSources(root, "301", "302", "307", "308");
|
|
1552
|
+
if (!redirectSources.size) return;
|
|
1553
|
+
const failures = [];
|
|
1554
|
+
for (const file of await collectHtmlFiles(root)) {
|
|
1555
|
+
const name = path.relative(root, file);
|
|
1556
|
+
const html = await fs.readFile(file, "utf8");
|
|
1557
|
+
for (const href of internalHrefs(html)) {
|
|
1558
|
+
const [withoutSuffix] = href.split(/[?#]/);
|
|
1559
|
+
const normalized = normalizePath(withoutSuffix || "/");
|
|
1560
|
+
if (redirectSources.has(normalized)) {
|
|
1561
|
+
failures.push(`${name}: links to redirecting URL "${href}"`);
|
|
1562
|
+
}
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
if (failures.length) {
|
|
1566
|
+
throw new Error(
|
|
1567
|
+
`Invalid Blox SSG output:
|
|
1568
|
+
${failures.slice(0, 25).map((item) => ` - ${item}`).join("\n")}`
|
|
1569
|
+
);
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
async function readRedirectSources(root, ...statuses) {
|
|
1573
|
+
const sources = /* @__PURE__ */ new Set();
|
|
1574
|
+
let content = "";
|
|
1575
|
+
try {
|
|
1576
|
+
content = await fs.readFile(path.join(root, "_redirects"), "utf8");
|
|
1577
|
+
} catch {
|
|
1578
|
+
return sources;
|
|
1579
|
+
}
|
|
1580
|
+
for (const line of content.split("\n")) {
|
|
1581
|
+
const trimmed = line.trim();
|
|
1582
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
1583
|
+
const parts = trimmed.split(/\s+/);
|
|
1584
|
+
if (parts.length < 3) continue;
|
|
1585
|
+
const status = parts[2];
|
|
1586
|
+
if (!statuses.includes(status)) continue;
|
|
1587
|
+
sources.add(normalizePath(parts[0]));
|
|
1588
|
+
}
|
|
1589
|
+
return sources;
|
|
1590
|
+
}
|
|
1591
|
+
function normalizePath(value) {
|
|
1592
|
+
const clean = value.split(/[?#]/)[0] || "/";
|
|
1593
|
+
return clean !== "/" ? clean.replace(/\/+$/, "") : "/";
|
|
1594
|
+
}
|
|
1595
|
+
function* internalHrefs(html) {
|
|
1596
|
+
const attr = /(?:<a\b[^>]*\shref=["']([^"']+)["'])|(?:data-to=["']([^"']+)["'])/gi;
|
|
1597
|
+
let match;
|
|
1598
|
+
while (match = attr.exec(html)) {
|
|
1599
|
+
const value = match[1] ?? match[2] ?? "";
|
|
1600
|
+
if (value.startsWith("/") && !value.startsWith("//")) yield value;
|
|
1601
|
+
}
|
|
1602
|
+
}
|
|
1549
1603
|
const anchorHref = /<a\b[^>]*\shref=["']([^"']*)["']/gi;
|
|
1550
1604
|
const ABSOLUTE_OR_SPECIAL = /^(?:[a-z][a-z0-9+.-]*:|\/\/|\/|#|\?|$)/i;
|
|
1551
1605
|
async function readSiteNoindex(outDir) {
|
|
@@ -1686,33 +1740,34 @@ async function validateSitemap(outDir, content) {
|
|
|
1686
1740
|
return failures;
|
|
1687
1741
|
}
|
|
1688
1742
|
export {
|
|
1689
|
-
|
|
1743
|
+
resolveManifestProvenance as A,
|
|
1690
1744
|
BloxBuildResponseError as B,
|
|
1691
|
-
|
|
1745
|
+
splitSitemapPathsByLocale as C,
|
|
1746
|
+
llmArtifacts as D,
|
|
1692
1747
|
prerender as a,
|
|
1693
1748
|
buildCollectionResolver as b,
|
|
1694
1749
|
validateInternalLinks as c,
|
|
1695
|
-
|
|
1696
|
-
|
|
1750
|
+
validateNoRedirectingLinks as d,
|
|
1751
|
+
buildPageHead as e,
|
|
1697
1752
|
fetchCmsSiteData as f,
|
|
1698
1753
|
generateSitemapArtifacts as g,
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1754
|
+
primaryContextEntry as h,
|
|
1755
|
+
buildJsonLd as i,
|
|
1756
|
+
extractPageText as j,
|
|
1757
|
+
bloxBuildJson as k,
|
|
1758
|
+
bloxBuildRequest as l,
|
|
1759
|
+
buildSiteHead as m,
|
|
1760
|
+
generateLlmsFullTxt as n,
|
|
1761
|
+
generateLlmsTxt as o,
|
|
1707
1762
|
polyfillBloxSsgGlobals as p,
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1763
|
+
generateNetlifyRedirects as q,
|
|
1764
|
+
generateRobotsTxt as r,
|
|
1765
|
+
generateSitemapIndexXml as s,
|
|
1766
|
+
generateSitemapXml as t,
|
|
1712
1767
|
uploadBloxManifest as u,
|
|
1713
1768
|
validateSsgOutput as v,
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1769
|
+
getBloxBuildRequestOptions as w,
|
|
1770
|
+
getSiteIconFlags as x,
|
|
1771
|
+
localeSitemapPath as y,
|
|
1772
|
+
mergeLlmParts as z
|
|
1718
1773
|
};
|
|
@@ -1297,7 +1297,7 @@ ${existing}`,
|
|
|
1297
1297
|
totalDiscovered: seen.size
|
|
1298
1298
|
};
|
|
1299
1299
|
}
|
|
1300
|
-
function normalizePath(p) {
|
|
1300
|
+
function normalizePath$1(p) {
|
|
1301
1301
|
if (!p) return "/";
|
|
1302
1302
|
try {
|
|
1303
1303
|
if (p.startsWith("http://") || p.startsWith("https://")) {
|
|
@@ -1314,7 +1314,7 @@ function normalizePath(p) {
|
|
|
1314
1314
|
return p || "/";
|
|
1315
1315
|
}
|
|
1316
1316
|
function enqueue(p, queue, seen, isExcluded) {
|
|
1317
|
-
const np = normalizePath(p);
|
|
1317
|
+
const np = normalizePath$1(p);
|
|
1318
1318
|
if (seen.has(np)) return;
|
|
1319
1319
|
if (isExcluded(np)) return;
|
|
1320
1320
|
seen.add(np);
|
|
@@ -1323,7 +1323,7 @@ function enqueue(p, queue, seen, isExcluded) {
|
|
|
1323
1323
|
function makeExcludeChecker(excludePaths) {
|
|
1324
1324
|
const rules = Array.isArray(excludePaths) ? excludePaths : [excludePaths];
|
|
1325
1325
|
return (p) => {
|
|
1326
|
-
const np = normalizePath(p);
|
|
1326
|
+
const np = normalizePath$1(p);
|
|
1327
1327
|
for (const r of rules) {
|
|
1328
1328
|
if (typeof r === "string" && r === "") continue;
|
|
1329
1329
|
if (typeof r === "function") {
|
|
@@ -1331,7 +1331,7 @@ function makeExcludeChecker(excludePaths) {
|
|
|
1331
1331
|
} else if (r instanceof RegExp) {
|
|
1332
1332
|
if (r.test(np)) return true;
|
|
1333
1333
|
} else if (typeof r === "string") {
|
|
1334
|
-
const prefix = normalizePath(r);
|
|
1334
|
+
const prefix = normalizePath$1(r);
|
|
1335
1335
|
if (np === prefix || np.startsWith(`${prefix}/`)) return true;
|
|
1336
1336
|
}
|
|
1337
1337
|
}
|
|
@@ -1569,6 +1569,60 @@ async function validateInternalLinks(outDir) {
|
|
|
1569
1569
|
${failures.map((item) => ` - ${item}`).join("\n")}`);
|
|
1570
1570
|
}
|
|
1571
1571
|
}
|
|
1572
|
+
async function validateNoRedirectingLinks(outDir) {
|
|
1573
|
+
const root = path.resolve(outDir);
|
|
1574
|
+
const redirectSources = await readRedirectSources(root, "301", "302", "307", "308");
|
|
1575
|
+
if (!redirectSources.size) return;
|
|
1576
|
+
const failures = [];
|
|
1577
|
+
for (const file of await collectHtmlFiles(root)) {
|
|
1578
|
+
const name = path.relative(root, file);
|
|
1579
|
+
const html = await fs.readFile(file, "utf8");
|
|
1580
|
+
for (const href of internalHrefs(html)) {
|
|
1581
|
+
const [withoutSuffix] = href.split(/[?#]/);
|
|
1582
|
+
const normalized = normalizePath(withoutSuffix || "/");
|
|
1583
|
+
if (redirectSources.has(normalized)) {
|
|
1584
|
+
failures.push(`${name}: links to redirecting URL "${href}"`);
|
|
1585
|
+
}
|
|
1586
|
+
}
|
|
1587
|
+
}
|
|
1588
|
+
if (failures.length) {
|
|
1589
|
+
throw new Error(
|
|
1590
|
+
`Invalid Blox SSG output:
|
|
1591
|
+
${failures.slice(0, 25).map((item) => ` - ${item}`).join("\n")}`
|
|
1592
|
+
);
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
async function readRedirectSources(root, ...statuses) {
|
|
1596
|
+
const sources = /* @__PURE__ */ new Set();
|
|
1597
|
+
let content = "";
|
|
1598
|
+
try {
|
|
1599
|
+
content = await fs.readFile(path.join(root, "_redirects"), "utf8");
|
|
1600
|
+
} catch {
|
|
1601
|
+
return sources;
|
|
1602
|
+
}
|
|
1603
|
+
for (const line of content.split("\n")) {
|
|
1604
|
+
const trimmed = line.trim();
|
|
1605
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
1606
|
+
const parts = trimmed.split(/\s+/);
|
|
1607
|
+
if (parts.length < 3) continue;
|
|
1608
|
+
const status = parts[2];
|
|
1609
|
+
if (!statuses.includes(status)) continue;
|
|
1610
|
+
sources.add(normalizePath(parts[0]));
|
|
1611
|
+
}
|
|
1612
|
+
return sources;
|
|
1613
|
+
}
|
|
1614
|
+
function normalizePath(value) {
|
|
1615
|
+
const clean = value.split(/[?#]/)[0] || "/";
|
|
1616
|
+
return clean !== "/" ? clean.replace(/\/+$/, "") : "/";
|
|
1617
|
+
}
|
|
1618
|
+
function* internalHrefs(html) {
|
|
1619
|
+
const attr = /(?:<a\b[^>]*\shref=["']([^"']+)["'])|(?:data-to=["']([^"']+)["'])/gi;
|
|
1620
|
+
let match;
|
|
1621
|
+
while (match = attr.exec(html)) {
|
|
1622
|
+
const value = match[1] ?? match[2] ?? "";
|
|
1623
|
+
if (value.startsWith("/") && !value.startsWith("//")) yield value;
|
|
1624
|
+
}
|
|
1625
|
+
}
|
|
1572
1626
|
const anchorHref = /<a\b[^>]*\shref=["']([^"']*)["']/gi;
|
|
1573
1627
|
const ABSOLUTE_OR_SPECIAL = /^(?:[a-z][a-z0-9+.-]*:|\/\/|\/|#|\?|$)/i;
|
|
1574
1628
|
async function readSiteNoindex(outDir) {
|
|
@@ -1736,4 +1790,5 @@ exports.resolveManifestProvenance = resolveManifestProvenance;
|
|
|
1736
1790
|
exports.splitSitemapPathsByLocale = splitSitemapPathsByLocale;
|
|
1737
1791
|
exports.uploadBloxManifest = uploadBloxManifest;
|
|
1738
1792
|
exports.validateInternalLinks = validateInternalLinks;
|
|
1793
|
+
exports.validateNoRedirectingLinks = validateNoRedirectingLinks;
|
|
1739
1794
|
exports.validateSsgOutput = validateSsgOutput;
|
package/package.json
CHANGED