@lownoise-studio/rendershield 1.0.0 → 1.1.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/CHANGELOG.md +15 -0
- package/README.md +32 -14
- package/dist/cli.js +28 -23
- package/dist/cli.js.map +1 -1
- package/dist/cliArgs.d.ts +8 -0
- package/dist/cliArgs.d.ts.map +1 -0
- package/dist/cliArgs.js +56 -0
- package/dist/cliArgs.js.map +1 -0
- package/dist/commands/build.d.ts +2 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +2 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/init.d.ts +2 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/verify.d.ts +22 -8
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +158 -66
- package/dist/commands/verify.js.map +1 -1
- package/dist/configPath.d.ts +7 -0
- package/dist/configPath.d.ts.map +1 -0
- package/dist/configPath.js +8 -0
- package/dist/configPath.js.map +1 -0
- package/dist/core/generateWorker.js +1 -1
- package/dist/core/generateWorker.js.map +1 -1
- package/dist/core/listOutputRoutes.d.ts +4 -0
- package/dist/core/listOutputRoutes.d.ts.map +1 -0
- package/dist/core/listOutputRoutes.js +40 -0
- package/dist/core/listOutputRoutes.js.map +1 -0
- package/dist/core/loadConfig.d.ts +3 -1
- package/dist/core/loadConfig.d.ts.map +1 -1
- package/dist/core/loadConfig.js +45 -38
- package/dist/core/loadConfig.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/CONFIG.md +70 -0
- package/package.json +2 -1
- package/rendershield.config.schema.json +100 -0
- package/src/cli.ts +36 -26
- package/src/cliArgs.ts +71 -0
- package/src/commands/build.ts +3 -2
- package/src/commands/init.ts +8 -8
- package/src/commands/verify.ts +264 -79
- package/src/configPath.ts +17 -0
- package/src/core/generateWorker.ts +1 -1
- package/src/core/listOutputRoutes.ts +51 -0
- package/src/core/loadConfig.ts +59 -38
- package/src/index.ts +4 -1
- package/src/types.ts +1 -1
package/dist/commands/verify.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "fs-extra";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { loadConfig } from "../core/loadConfig.js";
|
|
4
|
+
import { listPrerenderIndexFiles, indexHtmlPathToRoute, } from "../core/listOutputRoutes.js";
|
|
4
5
|
import { checkPrerenderContract, } from "../core/validateOutput.js";
|
|
5
6
|
import { renderShieldError } from "../errors.js";
|
|
6
7
|
function joinUrl(base, routePath) {
|
|
@@ -8,46 +9,8 @@ function joinUrl(base, routePath) {
|
|
|
8
9
|
const p = routePath.startsWith("/") ? routePath : `/${routePath}`;
|
|
9
10
|
return b + p;
|
|
10
11
|
}
|
|
11
|
-
async function findFirstIndexHtml(outDirAbs) {
|
|
12
|
-
const stack = [outDirAbs];
|
|
13
|
-
while (stack.length > 0) {
|
|
14
|
-
const current = stack.pop();
|
|
15
|
-
let entries;
|
|
16
|
-
try {
|
|
17
|
-
entries = await fs.readdir(current, { withFileTypes: true });
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
23
|
-
for (const entry of entries) {
|
|
24
|
-
const full = path.join(current, entry.name);
|
|
25
|
-
if (entry.isDirectory()) {
|
|
26
|
-
stack.push(full);
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
if (entry.isFile() && entry.name.toLowerCase() === "index.html") {
|
|
30
|
-
// Ignore index.html at the output root; prefer a routed page like
|
|
31
|
-
// <section>/<slug>/index.html (or deeper).
|
|
32
|
-
const rel = path.relative(outDirAbs, full);
|
|
33
|
-
const parts = rel.split(path.sep).filter(Boolean);
|
|
34
|
-
if (parts.length >= 2)
|
|
35
|
-
return full;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
function indexHtmlPathToRoute(outDirAbs, indexPathAbs) {
|
|
42
|
-
const rel = path.relative(outDirAbs, indexPathAbs);
|
|
43
|
-
// rel: <section>/<slug>/index.html
|
|
44
|
-
const noFile = rel.replace(/index\.html$/i, "");
|
|
45
|
-
const normalized = noFile.split(path.sep).join("/").replace(/\/+$/, "");
|
|
46
|
-
return "/" + normalized.replace(/^\/+/, "");
|
|
47
|
-
}
|
|
48
12
|
const BOT_UA = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
|
|
49
13
|
const HUMAN_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
50
|
-
/** Heuristic: likely SPA shell if body has almost no visible content and no article. */
|
|
51
14
|
function looksLikeSpaShell(html) {
|
|
52
15
|
const bodyMatch = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
|
|
53
16
|
const bodyHtml = bodyMatch ? bodyMatch[1] : html;
|
|
@@ -68,20 +31,62 @@ function looksLikeSpaShell(html) {
|
|
|
68
31
|
}
|
|
69
32
|
return { likely: false };
|
|
70
33
|
}
|
|
71
|
-
export async function cmdVerify(cwd = process.cwd(), options) {
|
|
72
|
-
if (options
|
|
73
|
-
return
|
|
34
|
+
export async function cmdVerify(cwd = process.cwd(), options = {}) {
|
|
35
|
+
if (options.prod || options.prodUrl) {
|
|
36
|
+
return runVerifyProdMode(cwd, options);
|
|
74
37
|
}
|
|
75
|
-
|
|
38
|
+
if (options.check) {
|
|
39
|
+
return runLocalCheckMode(cwd, options);
|
|
40
|
+
}
|
|
41
|
+
if (options.all) {
|
|
42
|
+
throw renderShieldError("CLI_INVALID_ARGS", "verify --all requires --check (local) or --prod (production). Example: rendershield verify --all --check");
|
|
43
|
+
}
|
|
44
|
+
return runLocalSmoke(cwd, options);
|
|
45
|
+
}
|
|
46
|
+
async function runVerifyProdMode(cwd, options) {
|
|
47
|
+
const cfg = await loadConfig(cwd, options);
|
|
76
48
|
const outDirAbs = path.join(cwd, cfg.output.outDir);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
49
|
+
if (options.all) {
|
|
50
|
+
await assertOutputExists(outDirAbs, cfg.output.outDir);
|
|
51
|
+
const indexFiles = await listPrerenderIndexFiles(outDirAbs);
|
|
52
|
+
if (indexFiles.length === 0) {
|
|
53
|
+
throw renderShieldError("VERIFY_FAILED", `No prerendered pages found inside: ${cfg.output.outDir}/. Run: rendershield build`, { outDir: cfg.output.outDir });
|
|
54
|
+
}
|
|
55
|
+
return runVerifyProdAll(cfg, cwd, outDirAbs, indexFiles);
|
|
80
56
|
}
|
|
81
|
-
|
|
82
|
-
|
|
57
|
+
if (!options.prodUrl) {
|
|
58
|
+
throw renderShieldError("CLI_INVALID_ARGS", "verify --prod requires a URL, or use --prod --all to check every route from build output.");
|
|
59
|
+
}
|
|
60
|
+
const single = await fetchAndVerifyProd(options.prodUrl.startsWith("http") ? options.prodUrl : `https://${options.prodUrl}`);
|
|
61
|
+
return { mode: "prod", ok: true, pages: [single] };
|
|
62
|
+
}
|
|
63
|
+
async function runLocalCheckMode(cwd, options) {
|
|
64
|
+
const cfg = await loadConfig(cwd, options);
|
|
65
|
+
const outDirAbs = path.join(cwd, cfg.output.outDir);
|
|
66
|
+
await assertOutputExists(outDirAbs, cfg.output.outDir);
|
|
67
|
+
const indexFiles = await listPrerenderIndexFiles(outDirAbs);
|
|
68
|
+
if (indexFiles.length === 0) {
|
|
83
69
|
throw renderShieldError("VERIFY_FAILED", `No prerendered pages found inside: ${cfg.output.outDir}/. Run: rendershield build`, { outDir: cfg.output.outDir });
|
|
84
70
|
}
|
|
71
|
+
if (options.all) {
|
|
72
|
+
return runLocalCheckAll(cwd, cfg, outDirAbs, indexFiles);
|
|
73
|
+
}
|
|
74
|
+
return runLocalCheckOne(cwd, cfg, outDirAbs, indexFiles[0]);
|
|
75
|
+
}
|
|
76
|
+
async function assertOutputExists(outDirAbs, outDir) {
|
|
77
|
+
if (!(await fs.pathExists(outDirAbs))) {
|
|
78
|
+
throw renderShieldError("VERIFY_FAILED", `No prerender output directory found: ${outDir}/. Run: rendershield build`, { outDir });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function runLocalSmoke(cwd, options) {
|
|
82
|
+
const cfg = await loadConfig(cwd, options);
|
|
83
|
+
const outDirAbs = path.join(cwd, cfg.output.outDir);
|
|
84
|
+
await assertOutputExists(outDirAbs, cfg.output.outDir);
|
|
85
|
+
const indexFiles = await listPrerenderIndexFiles(outDirAbs);
|
|
86
|
+
if (indexFiles.length === 0) {
|
|
87
|
+
throw renderShieldError("VERIFY_FAILED", `No prerendered pages found inside: ${cfg.output.outDir}/. Run: rendershield build`, { outDir: cfg.output.outDir });
|
|
88
|
+
}
|
|
89
|
+
const firstIndex = indexFiles[0];
|
|
85
90
|
const routePath = indexHtmlPathToRoute(outDirAbs, firstIndex);
|
|
86
91
|
const url = joinUrl(cfg.site.canonicalBase, routePath);
|
|
87
92
|
const outputFile = path.relative(cwd, firstIndex);
|
|
@@ -92,6 +97,7 @@ Using:
|
|
|
92
97
|
canonicalBase: ${cfg.site.canonicalBase}
|
|
93
98
|
routePath: ${routePath}
|
|
94
99
|
output file: ${outputFile}
|
|
100
|
+
pages in output: ${indexFiles.length} (showing first; use --all --check to validate all)
|
|
95
101
|
|
|
96
102
|
Smoke tests:
|
|
97
103
|
|
|
@@ -106,17 +112,106 @@ Smoke tests:
|
|
|
106
112
|
|
|
107
113
|
Expected: x-rendershield: bot-hit (proves Worker served prerender to bot).
|
|
108
114
|
If debugHeaders enabled: X-Bot-Detected, X-Prerender, X-Final-Path.
|
|
115
|
+
|
|
116
|
+
Tip: rendershield verify --check validates built HTML without fetching production.
|
|
109
117
|
`);
|
|
110
118
|
return {
|
|
111
119
|
mode: "local",
|
|
112
120
|
canonicalBase: cfg.site.canonicalBase,
|
|
121
|
+
checked: false,
|
|
122
|
+
ok: true,
|
|
123
|
+
pages: [{ routePath, outputFile, url }],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async function runLocalCheckOne(cwd, cfg, outDirAbs, indexPath) {
|
|
127
|
+
const page = await checkLocalPage(cwd, outDirAbs, indexPath, cfg.site.canonicalBase);
|
|
128
|
+
const ok = page.contract?.ok ?? false;
|
|
129
|
+
console.log(`
|
|
130
|
+
RenderShield verify --check
|
|
131
|
+
Route: ${page.routePath}
|
|
132
|
+
File: ${page.outputFile}
|
|
133
|
+
Contract: ${ok ? "PASS" : "FAIL"}
|
|
134
|
+
${!ok && page.contract ? page.contract.missing.map((m) => ` - ${m}`).join("\n") : ""}
|
|
135
|
+
`);
|
|
136
|
+
if (!ok) {
|
|
137
|
+
throw renderShieldError("VERIFY_FAILED", `Built HTML failed contract for ${page.routePath}. Missing: ${page.contract?.missing.join("; ")}`, { routePath: page.routePath, missing: page.contract?.missing });
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
mode: "local",
|
|
141
|
+
canonicalBase: cfg.site.canonicalBase,
|
|
142
|
+
checked: true,
|
|
143
|
+
ok: true,
|
|
144
|
+
pages: [page],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async function runLocalCheckAll(cwd, cfg, outDirAbs, indexFiles) {
|
|
148
|
+
const pages = [];
|
|
149
|
+
const failures = [];
|
|
150
|
+
for (const indexPath of indexFiles) {
|
|
151
|
+
const page = await checkLocalPage(cwd, outDirAbs, indexPath, cfg.site.canonicalBase);
|
|
152
|
+
pages.push(page);
|
|
153
|
+
if (!page.contract?.ok) {
|
|
154
|
+
failures.push(`${page.routePath}: ${page.contract?.missing.join("; ") ?? "contract failed"}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
console.log(`
|
|
158
|
+
RenderShield verify --all --check
|
|
159
|
+
Pages: ${pages.length}
|
|
160
|
+
${pages
|
|
161
|
+
.map((p) => ` ${p.contract?.ok ? "PASS" : "FAIL"} ${p.routePath}`)
|
|
162
|
+
.join("\n")}
|
|
163
|
+
`);
|
|
164
|
+
if (failures.length > 0) {
|
|
165
|
+
throw renderShieldError("VERIFY_FAILED", `Built HTML failed contract on ${failures.length} page(s). ${failures.join(" | ")}`, { failures });
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
mode: "local",
|
|
169
|
+
canonicalBase: cfg.site.canonicalBase,
|
|
170
|
+
checked: true,
|
|
171
|
+
ok: true,
|
|
172
|
+
pages,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async function checkLocalPage(cwd, outDirAbs, indexPath, canonicalBase) {
|
|
176
|
+
const html = await fs.readFile(indexPath, "utf8");
|
|
177
|
+
const routePath = indexHtmlPathToRoute(outDirAbs, indexPath);
|
|
178
|
+
const outputFile = path.relative(cwd, indexPath);
|
|
179
|
+
const contract = checkPrerenderContract(html, {
|
|
180
|
+
routePath,
|
|
181
|
+
outFile: outputFile,
|
|
182
|
+
});
|
|
183
|
+
return {
|
|
113
184
|
routePath,
|
|
114
185
|
outputFile,
|
|
115
|
-
url,
|
|
186
|
+
url: joinUrl(canonicalBase, routePath),
|
|
187
|
+
contract,
|
|
116
188
|
};
|
|
117
189
|
}
|
|
118
|
-
async function
|
|
119
|
-
const
|
|
190
|
+
async function runVerifyProdAll(cfg, _cwd, outDirAbs, indexFiles) {
|
|
191
|
+
const pages = [];
|
|
192
|
+
const failures = [];
|
|
193
|
+
for (const indexPath of indexFiles) {
|
|
194
|
+
const routePath = indexHtmlPathToRoute(outDirAbs, indexPath);
|
|
195
|
+
const prodUrl = joinUrl(cfg.site.canonicalBase, routePath);
|
|
196
|
+
try {
|
|
197
|
+
const result = await fetchAndVerifyProd(prodUrl);
|
|
198
|
+
pages.push(result);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
202
|
+
failures.push(`${routePath}: ${msg}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
console.log(`
|
|
206
|
+
RenderShield verify --prod --all
|
|
207
|
+
Checked ${pages.length} URL(s) from build output.
|
|
208
|
+
`);
|
|
209
|
+
if (failures.length > 0) {
|
|
210
|
+
throw renderShieldError("VERIFY_FAILED", `Production verify failed for ${failures.length} route(s). ${failures.join(" | ")}`, { failures });
|
|
211
|
+
}
|
|
212
|
+
return { mode: "prod", ok: true, pages };
|
|
213
|
+
}
|
|
214
|
+
async function fetchAndVerifyProd(normalizedUrl) {
|
|
120
215
|
let botHtml;
|
|
121
216
|
let humanHtml;
|
|
122
217
|
let botStatus;
|
|
@@ -143,45 +238,42 @@ async function runVerifyProd(url) {
|
|
|
143
238
|
const msg = err instanceof Error ? err.message : String(err);
|
|
144
239
|
throw renderShieldError("VERIFY_FAILED", `verify --prod: failed to fetch ${normalizedUrl}. ${msg}`, { url: normalizedUrl });
|
|
145
240
|
}
|
|
146
|
-
// Prove routing: Worker must set x-rendershield: bot-hit for bot requests. No inference.
|
|
147
|
-
const routingOk = xRenderShield === "bot-hit";
|
|
148
241
|
if (xRenderShield === "bot-fallback") {
|
|
149
|
-
throw renderShieldError("VERIFY_FAILED", `verify --prod: bot request received x-rendershield: bot-fallback. ` +
|
|
150
|
-
`Prerender origin returned non-200; Worker fell back to SPA
|
|
242
|
+
throw renderShieldError("VERIFY_FAILED", `verify --prod: bot request received x-rendershield: bot-fallback for ${normalizedUrl}. ` +
|
|
243
|
+
`Prerender origin returned non-200; Worker fell back to SPA.`, { url: normalizedUrl, xRenderShield });
|
|
151
244
|
}
|
|
152
|
-
if (
|
|
245
|
+
if (xRenderShield !== "bot-hit") {
|
|
153
246
|
const hint = xRenderShield == null
|
|
154
|
-
? " If no Worker is deployed, use verify
|
|
247
|
+
? " If no Worker is deployed, use verify --check for local/build output."
|
|
155
248
|
: "";
|
|
156
|
-
throw renderShieldError("VERIFY_FAILED", `verify --prod: expected x-rendershield: bot-hit
|
|
157
|
-
`Got: ${xRenderShield ?? "(missing)"}
|
|
249
|
+
throw renderShieldError("VERIFY_FAILED", `verify --prod: expected x-rendershield: bot-hit for ${normalizedUrl}. ` +
|
|
250
|
+
`Got: ${xRenderShield ?? "(missing)"}.${hint}`, { url: normalizedUrl, xRenderShield });
|
|
158
251
|
}
|
|
159
252
|
const contract = checkPrerenderContract(botHtml, {
|
|
160
253
|
routePath: normalizedUrl,
|
|
161
254
|
outFile: normalizedUrl,
|
|
162
255
|
});
|
|
163
256
|
const humanSpa = looksLikeSpaShell(humanHtml);
|
|
164
|
-
// Report
|
|
165
257
|
console.log(`
|
|
166
258
|
RenderShield verify --prod
|
|
167
259
|
URL: ${normalizedUrl}
|
|
168
260
|
|
|
169
261
|
Fetch:
|
|
170
|
-
Bot (Googlebot): ${botStatus} (${botHtml.length} bytes) x-rendershield: ${xRenderShield
|
|
262
|
+
Bot (Googlebot): ${botStatus} (${botHtml.length} bytes) x-rendershield: ${xRenderShield}
|
|
171
263
|
Human (Chrome): ${humanStatus} (${humanHtml.length} bytes)
|
|
172
264
|
|
|
173
|
-
Routing: x-rendershield: bot-hit
|
|
265
|
+
Routing: x-rendershield: bot-hit
|
|
174
266
|
|
|
175
|
-
Bot contract
|
|
176
|
-
${contract.ok ? "PASS
|
|
267
|
+
Bot contract:
|
|
268
|
+
${contract.ok ? "PASS" : "FAIL"}
|
|
177
269
|
${contract.missing.length > 0 ? contract.missing.map((m) => ` - ${m}`).join("\n") : ""}
|
|
178
270
|
|
|
179
271
|
Human response:
|
|
180
|
-
${humanSpa.likely ? `Likely SPA shell: ${humanSpa.reason ?? "unknown"}` : "Has substantial content
|
|
272
|
+
${humanSpa.likely ? `Likely SPA shell: ${humanSpa.reason ?? "unknown"}` : "Has substantial content."}
|
|
181
273
|
`);
|
|
182
274
|
if (!contract.ok) {
|
|
183
|
-
throw renderShieldError("VERIFY_FAILED", `Production URL did not satisfy bot contract. Missing: ${contract.missing.join("; ")}`, { url: normalizedUrl, missing: contract.missing });
|
|
275
|
+
throw renderShieldError("VERIFY_FAILED", `Production URL did not satisfy bot contract: ${normalizedUrl}. Missing: ${contract.missing.join("; ")}`, { url: normalizedUrl, missing: contract.missing });
|
|
184
276
|
}
|
|
185
|
-
return {
|
|
277
|
+
return { url: normalizedUrl, contract };
|
|
186
278
|
}
|
|
187
279
|
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const DEFAULT_CONFIG_NAME = "rendershield.config.json";
|
|
2
|
+
export type CommandOptions = {
|
|
3
|
+
/** Relative to cwd, or absolute. Defaults to rendershield.config.json in cwd. */
|
|
4
|
+
configPath?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function resolveConfigFile(cwd: string, configPath?: string): string;
|
|
7
|
+
//# sourceMappingURL=configPath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configPath.d.ts","sourceRoot":"","sources":["../src/configPath.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,UAAU,SAAsB,GAC/B,MAAM,CAIR"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export const DEFAULT_CONFIG_NAME = "rendershield.config.json";
|
|
3
|
+
export function resolveConfigFile(cwd, configPath = DEFAULT_CONFIG_NAME) {
|
|
4
|
+
return path.isAbsolute(configPath)
|
|
5
|
+
? configPath
|
|
6
|
+
: path.join(cwd, configPath);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=configPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configPath.js","sourceRoot":"","sources":["../src/configPath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAO9D,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,UAAU,GAAG,mBAAmB;IAEhC,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAChC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -54,7 +54,7 @@ export default {
|
|
|
54
54
|
return out;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
const origin = ${JSON.stringify(cfg.worker.
|
|
57
|
+
const origin = ${JSON.stringify(cfg.worker.spaOrigin)};
|
|
58
58
|
const finalPath = toIndexHtml(url.pathname);
|
|
59
59
|
const originUrl = origin + finalPath + url.search;
|
|
60
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateWorker.js","sourceRoot":"","sources":["../../src/core/generateWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;IAClE,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,GAAa;IAClC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAuB;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAElD,OAAO;sCAC6B,OAAO;;;;yBAIpB,aAAa,CAAC,QAAQ,CAAC;wBACxB,aAAa,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAkC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"generateWorker.js","sourceRoot":"","sources":["../../src/core/generateWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;IAClE,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,GAAa;IAClC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAuB;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAElD,OAAO;sCAC6B,OAAO;;;;yBAIpB,aAAa,CAAC,QAAQ,CAAC;wBACxB,aAAa,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAkC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;UAejD,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;2DAEuB,CAAC,CAAC,CAAC,EAAE;;;;;;QAMxD,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;kDAEgB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;CAUtD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** All routed index.html files under outDir (excludes bare outDir/index.html). */
|
|
2
|
+
export declare function listPrerenderIndexFiles(outDirAbs: string): Promise<string[]>;
|
|
3
|
+
export declare function indexHtmlPathToRoute(outDirAbs: string, indexPathAbs: string): string;
|
|
4
|
+
//# sourceMappingURL=listOutputRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listOutputRoutes.d.ts","sourceRoot":"","sources":["../../src/core/listOutputRoutes.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCnB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,MAAM,CAKR"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/** All routed index.html files under outDir (excludes bare outDir/index.html). */
|
|
4
|
+
export async function listPrerenderIndexFiles(outDirAbs) {
|
|
5
|
+
const results = [];
|
|
6
|
+
const stack = [outDirAbs];
|
|
7
|
+
while (stack.length > 0) {
|
|
8
|
+
const current = stack.pop();
|
|
9
|
+
let entries;
|
|
10
|
+
try {
|
|
11
|
+
entries = await fs.readdir(current, { withFileTypes: true });
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const full = path.join(current, entry.name);
|
|
19
|
+
if (entry.isDirectory()) {
|
|
20
|
+
stack.push(full);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (entry.isFile() && entry.name.toLowerCase() === "index.html") {
|
|
24
|
+
const rel = path.relative(outDirAbs, full);
|
|
25
|
+
const parts = rel.split(path.sep).filter(Boolean);
|
|
26
|
+
if (parts.length >= 2)
|
|
27
|
+
results.push(full);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
results.sort((a, b) => a.localeCompare(b));
|
|
32
|
+
return results;
|
|
33
|
+
}
|
|
34
|
+
export function indexHtmlPathToRoute(outDirAbs, indexPathAbs) {
|
|
35
|
+
const rel = path.relative(outDirAbs, indexPathAbs);
|
|
36
|
+
const noFile = rel.replace(/index\.html$/i, "");
|
|
37
|
+
const normalized = noFile.split(path.sep).join("/").replace(/\/+$/, "");
|
|
38
|
+
return "/" + normalized.replace(/^\/+/, "");
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=listOutputRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listOutputRoutes.js","sourceRoot":"","sources":["../../src/core/listOutputRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAiB;IAEjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,CAAC,SAAS,CAAC,CAAC;IAEpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAY,CAAC;QAEtC,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;gBAChE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,YAAoB;IAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { RenderShieldConfig } from "../types.js";
|
|
2
|
-
|
|
2
|
+
import { DEFAULT_CONFIG_NAME, type CommandOptions } from "../configPath.js";
|
|
3
|
+
export declare function loadConfig(cwd?: string, options?: CommandOptions): Promise<RenderShieldConfig>;
|
|
4
|
+
export { DEFAULT_CONFIG_NAME };
|
|
3
5
|
//# sourceMappingURL=loadConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/core/loadConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/core/loadConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAiC,MAAM,aAAa,CAAC;AAEhF,OAAO,EAEL,mBAAmB,EACnB,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAyI1B,wBAAsB,UAAU,CAC9B,GAAG,SAAgB,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA4E7B;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/core/loadConfig.js
CHANGED
|
@@ -2,17 +2,15 @@ import fs from "fs-extra";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { SCHEMA_TYPES } from "../types.js";
|
|
4
4
|
import { renderShieldError } from "../errors.js";
|
|
5
|
-
|
|
5
|
+
import { resolveConfigFile, DEFAULT_CONFIG_NAME, } from "../configPath.js";
|
|
6
6
|
const DEFAULT_SITEMAP_PATH = "/sitemap.xml";
|
|
7
7
|
const DEFAULT_ROBOTS_PATH = "/robots.txt";
|
|
8
8
|
function isObject(v) {
|
|
9
9
|
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
10
10
|
}
|
|
11
11
|
function coerceBoolFlag(parsed, key, defaultEnabled) {
|
|
12
|
-
// If missing, provide defaults (keeps older configs from exploding)
|
|
13
12
|
if (parsed?.[key] == null)
|
|
14
13
|
return { enabled: defaultEnabled };
|
|
15
|
-
// If present, validate shape
|
|
16
14
|
const v = parsed[key];
|
|
17
15
|
if (!isObject(v)) {
|
|
18
16
|
throw renderShieldError("CONFIG_INVALID", `${key} must be an object like { "enabled": true }`);
|
|
@@ -23,39 +21,39 @@ function coerceBoolFlag(parsed, key, defaultEnabled) {
|
|
|
23
21
|
}
|
|
24
22
|
return { enabled };
|
|
25
23
|
}
|
|
24
|
+
function readSpaOrigin(worker) {
|
|
25
|
+
const spa = worker.spaOrigin ?? worker.lovableOrigin;
|
|
26
|
+
return typeof spa === "string" && spa.trim() !== "" ? spa.trim() : undefined;
|
|
27
|
+
}
|
|
26
28
|
/**
|
|
27
|
-
* Worker config policy: strict mode.
|
|
28
|
-
*
|
|
29
|
-
* botUserAgentPatterns are required and must be non-empty. No defaults are
|
|
30
|
-
* supplied — build fails with a crisp error.
|
|
31
|
-
* lovableOrigin: must be http: or https: only (no file:, javascript:, protocol-relative).
|
|
32
|
-
* botUserAgentPatterns: substring match only (not regex); empty strings rejected to avoid overmatching.
|
|
29
|
+
* Worker config policy: strict mode when enabled.
|
|
30
|
+
* spaOrigin (or deprecated lovableOrigin) must be http(s).
|
|
33
31
|
*/
|
|
34
32
|
function validateWorkerWhenEnabled(parsed) {
|
|
35
33
|
const worker = parsed.worker;
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const spaOrigin = worker ? readSpaOrigin(worker) : undefined;
|
|
35
|
+
if (!spaOrigin) {
|
|
36
|
+
throw renderShieldError("CONFIG_INVALID", `worker.spaOrigin is required when worker.enabled is true. Example: "https://app.example.com" (lovableOrigin is accepted as a deprecated alias).`);
|
|
38
37
|
}
|
|
39
38
|
let url;
|
|
40
39
|
try {
|
|
41
|
-
url = new URL(
|
|
40
|
+
url = new URL(spaOrigin);
|
|
42
41
|
}
|
|
43
42
|
catch {
|
|
44
|
-
throw renderShieldError("CONFIG_INVALID", `worker.
|
|
43
|
+
throw renderShieldError("CONFIG_INVALID", `worker.spaOrigin must be a valid URL. Got: "${spaOrigin}"`);
|
|
45
44
|
}
|
|
46
45
|
const scheme = url.protocol.toLowerCase();
|
|
47
46
|
if (scheme !== "http:" && scheme !== "https:") {
|
|
48
|
-
throw renderShieldError("CONFIG_INVALID", `worker.
|
|
47
|
+
throw renderShieldError("CONFIG_INVALID", `worker.spaOrigin must use http or https. Got: "${url.protocol}"`);
|
|
49
48
|
}
|
|
50
|
-
if (!Array.isArray(worker
|
|
49
|
+
if (!Array.isArray(worker?.rewriteRouteBases) ||
|
|
51
50
|
worker.rewriteRouteBases.length === 0) {
|
|
52
51
|
throw renderShieldError("CONFIG_INVALID", `worker.rewriteRouteBases must be a non-empty array when worker.enabled is true. Example: ["/blog/"]`);
|
|
53
52
|
}
|
|
54
|
-
if (!Array.isArray(worker
|
|
53
|
+
if (!Array.isArray(worker?.botUserAgentPatterns) ||
|
|
55
54
|
worker.botUserAgentPatterns.length === 0) {
|
|
56
55
|
throw renderShieldError("CONFIG_INVALID", `worker.botUserAgentPatterns must be a non-empty array when worker.enabled is true. Example: ["googlebot", "bingbot"]`);
|
|
57
56
|
}
|
|
58
|
-
// Substring match only; empty string would match every User-Agent
|
|
59
57
|
for (let i = 0; i < worker.botUserAgentPatterns.length; i++) {
|
|
60
58
|
const p = worker.botUserAgentPatterns[i];
|
|
61
59
|
if (typeof p !== "string" || p.trim() === "") {
|
|
@@ -63,21 +61,42 @@ function validateWorkerWhenEnabled(parsed) {
|
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
function normalizeWorker(parsed, enabled) {
|
|
65
|
+
if (!enabled) {
|
|
66
|
+
parsed.worker = {
|
|
67
|
+
enabled: false,
|
|
68
|
+
spaOrigin: "",
|
|
69
|
+
rewriteRouteBases: [],
|
|
70
|
+
botUserAgentPatterns: [],
|
|
71
|
+
debugHeaders: false,
|
|
72
|
+
};
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
validateWorkerWhenEnabled(parsed);
|
|
76
|
+
const worker = parsed.worker;
|
|
77
|
+
parsed.worker = {
|
|
78
|
+
enabled: true,
|
|
79
|
+
spaOrigin: readSpaOrigin(worker),
|
|
80
|
+
rewriteRouteBases: worker.rewriteRouteBases,
|
|
81
|
+
botUserAgentPatterns: worker.botUserAgentPatterns,
|
|
82
|
+
debugHeaders: worker.debugHeaders === true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export async function loadConfig(cwd = process.cwd(), options) {
|
|
86
|
+
const configFile = resolveConfigFile(cwd, options?.configPath);
|
|
87
|
+
const configName = path.basename(configFile);
|
|
88
|
+
const exists = await fs.pathExists(configFile);
|
|
69
89
|
if (!exists) {
|
|
70
|
-
throw renderShieldError("CONFIG_MISSING", `Missing ${
|
|
90
|
+
throw renderShieldError("CONFIG_MISSING", `Missing ${configName}. Run: rendershield init`);
|
|
71
91
|
}
|
|
72
|
-
const raw = await fs.readFile(
|
|
92
|
+
const raw = await fs.readFile(configFile, "utf8");
|
|
73
93
|
let parsed;
|
|
74
94
|
try {
|
|
75
95
|
parsed = JSON.parse(raw);
|
|
76
96
|
}
|
|
77
97
|
catch {
|
|
78
|
-
throw renderShieldError("CONFIG_INVALID", `${
|
|
98
|
+
throw renderShieldError("CONFIG_INVALID", `${configName} is not valid JSON`);
|
|
79
99
|
}
|
|
80
|
-
// Minimal validation (v0)
|
|
81
100
|
if (parsed?.version !== 1) {
|
|
82
101
|
throw renderShieldError("CONFIG_INVALID", "Config version must be 1");
|
|
83
102
|
}
|
|
@@ -104,7 +123,6 @@ export async function loadConfig(cwd = process.cwd()) {
|
|
|
104
123
|
throw renderShieldError("CONFIG_INVALID", "output.outDir is required");
|
|
105
124
|
}
|
|
106
125
|
parsed.content.markdown.collections = normalizeCollections(parsed.content.markdown.collections);
|
|
107
|
-
// Validate + default these optional sections (preserve path so it is not lost)
|
|
108
126
|
const sitemapFlag = coerceBoolFlag(parsed, "sitemap", true);
|
|
109
127
|
const sitemapObj = parsed.sitemap;
|
|
110
128
|
const sitemapPathVal = sitemapObj?.path;
|
|
@@ -120,21 +138,10 @@ export async function loadConfig(cwd = process.cwd()) {
|
|
|
120
138
|
: DEFAULT_ROBOTS_PATH;
|
|
121
139
|
parsed.robots = { enabled: robotsFlag.enabled, path: robotsPath };
|
|
122
140
|
const workerFlag = coerceBoolFlag(parsed, "worker", true);
|
|
123
|
-
|
|
124
|
-
validateWorkerWhenEnabled(parsed);
|
|
125
|
-
// Keep parsed.worker as the full object from JSON (already validated)
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
parsed.worker = {
|
|
129
|
-
enabled: false,
|
|
130
|
-
lovableOrigin: "",
|
|
131
|
-
rewriteRouteBases: [],
|
|
132
|
-
botUserAgentPatterns: [],
|
|
133
|
-
debugHeaders: false,
|
|
134
|
-
};
|
|
135
|
-
}
|
|
141
|
+
normalizeWorker(parsed, workerFlag.enabled);
|
|
136
142
|
return parsed;
|
|
137
143
|
}
|
|
144
|
+
export { DEFAULT_CONFIG_NAME };
|
|
138
145
|
function normalizeCollections(collections) {
|
|
139
146
|
return collections.map((raw, index) => {
|
|
140
147
|
if (!isObject(raw)) {
|