@se-studio/site-check 1.5.2 → 2.0.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 +8 -0
- package/README.md +5 -4
- package/dist/smoke-test/index.d.ts +3 -3
- package/dist/smoke-test/index.d.ts.map +1 -1
- package/dist/smoke-test/index.js +2 -2
- package/dist/smoke-test/index.js.map +1 -1
- package/dist/smoke-test/runner.d.ts +0 -5
- package/dist/smoke-test/runner.d.ts.map +1 -1
- package/dist/smoke-test/runner.js +1 -22
- package/dist/smoke-test/runner.js.map +1 -1
- package/dist/smoke-test/static.d.ts +5 -0
- package/dist/smoke-test/static.d.ts.map +1 -0
- package/dist/smoke-test/static.js +49 -0
- package/dist/smoke-test/static.js.map +1 -0
- package/dist/smoke-test/types.d.ts +19 -89
- package/dist/smoke-test/types.d.ts.map +1 -1
- package/package.json +2 -3
- package/smoke-test-one.mjs +2 -7
- package/dist/smoke-test/planner.d.ts +0 -14
- package/dist/smoke-test/planner.d.ts.map +0 -1
- package/dist/smoke-test/planner.js +0 -214
- package/dist/smoke-test/planner.js.map +0 -1
- package/smoke-test-preload.cjs +0 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- **Smoke tests are static and HTTP-only.** Apps commit `smoke.cases.json` (curated URLs from sitemap setup). Removed CMS-driven planner (`planSmokeTestUrls`, `buildSmokeConfig`, `resolveSmokeConfig`, `runFullSmokeTest`), link getters, and `smoke-test-preload.cjs`.
|
|
8
|
+
- Added `loadStaticSmokeConfig`, `runStaticSmokeTest`, and `joinSmokeBaseUrl` on `@se-studio/site-check/smoke-test`.
|
|
9
|
+
- `smoke-test-one` no longer injects a Node preload; `smoke-test:run` only needs a running server and `smoke.cases.json`.
|
|
10
|
+
|
|
3
11
|
## 1.5.2
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -94,11 +94,11 @@ Programmatic module for live production SEO audits (used by per-app `pnpm seo:au
|
|
|
94
94
|
|
|
95
95
|
## Smoke tests (`@se-studio/site-check/smoke-test`)
|
|
96
96
|
|
|
97
|
-
Curated local smoke tests for marketing sites:
|
|
97
|
+
Curated local smoke tests for marketing sites: verify HTML and `.md` for URLs listed in **`smoke.cases.json`** (generated once from a live sitemap — see skill `se-marketing-sites-smoke-test-setup`).
|
|
98
98
|
|
|
99
99
|
Import from `@se-studio/site-check/smoke-test`:
|
|
100
100
|
|
|
101
|
-
- `
|
|
101
|
+
- `loadStaticSmokeConfig`, `runStaticSmokeTest`, `runSmokeTest`
|
|
102
102
|
- `formatSmokeTestReport`, `getSmokeTestExitCode`
|
|
103
103
|
|
|
104
104
|
**Per-app usage** (see `apps/example-empty`):
|
|
@@ -106,10 +106,11 @@ Import from `@se-studio/site-check/smoke-test`:
|
|
|
106
106
|
```bash
|
|
107
107
|
pnpm build --filter @se-studio/site-check # once, or after package changes
|
|
108
108
|
cd apps/example-empty
|
|
109
|
-
pnpm smoke-test
|
|
109
|
+
pnpm smoke-test:run # dev server must be running on app port
|
|
110
|
+
pnpm smoke-test # or: build + start + smoke + stop
|
|
110
111
|
```
|
|
111
112
|
|
|
112
|
-
Add `smoke.
|
|
113
|
+
Add `smoke.cases.json` and `scripts/smoke-test-run.ts`. No Contentful or `cms-server` imports required. Set `SMOKE_TEST_IGNORE=true` in `.env.local` to skip the full `smoke-test` CI script.
|
|
113
114
|
|
|
114
115
|
## Exit codes
|
|
115
116
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
1
|
+
export { formatSmokeTestReport, getSmokeTestExitCode, runSmokeTest, } from './runner.js';
|
|
2
|
+
export { joinSmokeBaseUrl, loadStaticSmokeConfig, runStaticSmokeTest } from './static.js';
|
|
3
|
+
export type { LoadStaticSmokeConfigOptions, RunStaticSmokeTestOptions, SmokeFailureReason, SmokeTestCase, SmokeTestCaseResult, SmokeTestCategory, SmokeTestResult, SmokeTestRunnerConfig, StaticSmokeCaseDefinition, StaticSmokeConfigFile, } from './types.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/smoke-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/smoke-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1F,YAAY,EACV,4BAA4B,EAC5B,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
package/dist/smoke-test/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { formatSmokeTestReport, getSmokeTestExitCode, runSmokeTest, } from './runner.js';
|
|
2
|
+
export { joinSmokeBaseUrl, loadStaticSmokeConfig, runStaticSmokeTest } from './static.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/smoke-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/smoke-test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -3,9 +3,4 @@ import type { SmokeTestResult, SmokeTestRunnerConfig } from './types.js';
|
|
|
3
3
|
export declare function runSmokeTest(config: SmokeTestRunnerConfig): Promise<SmokeTestResult>;
|
|
4
4
|
export declare function getSmokeTestExitCode(result: SmokeTestResult): number;
|
|
5
5
|
export declare function formatSmokeTestReport(result: SmokeTestResult): string;
|
|
6
|
-
export declare function runFullSmokeTest(plannerConfig: import('./types.js').SmokeTestPlannerConfig & {
|
|
7
|
-
minMarkdownLength?: number;
|
|
8
|
-
requestDelayMs?: number;
|
|
9
|
-
fetch?: typeof fetch;
|
|
10
|
-
}): Promise<SmokeTestResult>;
|
|
11
6
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/smoke-test/runner.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,KAAK,EAIV,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAuEpB,wBAAsB,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC1F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/smoke-test/runner.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,KAAK,EAIV,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAuEpB,wBAAsB,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC1F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAGpE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA6CrE"}
|
|
@@ -88,8 +88,7 @@ export async function runSmokeTest(config) {
|
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
90
|
export function getSmokeTestExitCode(result) {
|
|
91
|
-
|
|
92
|
-
if (result.errorCount > 0 || insufficientErrors > 0)
|
|
91
|
+
if (result.errorCount > 0)
|
|
93
92
|
return 1;
|
|
94
93
|
return 0;
|
|
95
94
|
}
|
|
@@ -130,24 +129,4 @@ export function formatSmokeTestReport(result) {
|
|
|
130
129
|
lines.push(`Summary: ${result.cases.length} cases, ${result.errorCount} failed, ${result.warnings.length} warnings`);
|
|
131
130
|
return lines.join('\n');
|
|
132
131
|
}
|
|
133
|
-
export async function runFullSmokeTest(plannerConfig) {
|
|
134
|
-
const { planSmokeTestUrls } = await import('./planner.js');
|
|
135
|
-
const { cases, warnings: plannerWarnings } = await planSmokeTestUrls(plannerConfig);
|
|
136
|
-
const result = await runSmokeTest({
|
|
137
|
-
baseUrl: plannerConfig.baseUrl,
|
|
138
|
-
siteName: plannerConfig.siteName,
|
|
139
|
-
cases,
|
|
140
|
-
minMarkdownLength: plannerConfig.minMarkdownLength,
|
|
141
|
-
requestDelayMs: plannerConfig.requestDelayMs,
|
|
142
|
-
fetch: plannerConfig.fetch,
|
|
143
|
-
});
|
|
144
|
-
result.warnings = [...plannerWarnings, ...result.warnings];
|
|
145
|
-
if (plannerWarnings.some((w) => w.startsWith('ERROR:'))) {
|
|
146
|
-
result.warnCount += plannerWarnings.filter((w) => w.startsWith('ERROR:')).length;
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
result.warnCount += plannerWarnings.length;
|
|
150
|
-
}
|
|
151
|
-
return result;
|
|
152
|
-
}
|
|
153
132
|
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/smoke-test/runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/smoke-test/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LoadStaticSmokeConfigOptions, RunStaticSmokeTestOptions, SmokeTestResult, SmokeTestRunnerConfig } from './types.js';
|
|
2
|
+
export declare function joinSmokeBaseUrl(baseUrl: string, path: string): string;
|
|
3
|
+
export declare function loadStaticSmokeConfig(filePath: string, options?: LoadStaticSmokeConfigOptions): SmokeTestRunnerConfig;
|
|
4
|
+
export declare function runStaticSmokeTest(filePath: string, options?: RunStaticSmokeTestOptions): Promise<SmokeTestResult>;
|
|
5
|
+
//# sourceMappingURL=static.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/smoke-test/static.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,4BAA4B,EAC5B,yBAAyB,EAEzB,eAAe,EACf,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAItE;AAaD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,qBAAqB,CA0BvB;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,eAAe,CAAC,CAM1B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { runSmokeTest } from './runner.js';
|
|
4
|
+
export function joinSmokeBaseUrl(baseUrl, path) {
|
|
5
|
+
const normalizedBase = baseUrl.replace(/\/$/, '');
|
|
6
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
7
|
+
return `${normalizedBase}${normalizedPath}`;
|
|
8
|
+
}
|
|
9
|
+
function resolvePort(config, portOverride) {
|
|
10
|
+
const fromEnv = process.env.SMOKE_TEST_PORT;
|
|
11
|
+
if (portOverride !== undefined) {
|
|
12
|
+
return portOverride;
|
|
13
|
+
}
|
|
14
|
+
if (fromEnv && /^\d+$/.test(fromEnv)) {
|
|
15
|
+
return Number(fromEnv);
|
|
16
|
+
}
|
|
17
|
+
return config.port;
|
|
18
|
+
}
|
|
19
|
+
export function loadStaticSmokeConfig(filePath, options) {
|
|
20
|
+
const cwd = options?.cwd ?? process.cwd();
|
|
21
|
+
const absolutePath = resolve(cwd, filePath);
|
|
22
|
+
const raw = JSON.parse(readFileSync(absolutePath, 'utf8'));
|
|
23
|
+
if (!raw.siteName || !raw.port || !Array.isArray(raw.cases)) {
|
|
24
|
+
throw new Error(`Invalid smoke config: ${absolutePath}`);
|
|
25
|
+
}
|
|
26
|
+
const port = resolvePort(raw, options?.portOverride);
|
|
27
|
+
const baseUrl = `http://localhost:${port}`;
|
|
28
|
+
const cases = raw.cases.map((entry) => ({
|
|
29
|
+
category: entry.category,
|
|
30
|
+
label: entry.label,
|
|
31
|
+
pageUrl: joinSmokeBaseUrl(baseUrl, entry.path),
|
|
32
|
+
expectMarkdown: entry.expectMarkdown,
|
|
33
|
+
}));
|
|
34
|
+
return {
|
|
35
|
+
siteName: raw.siteName,
|
|
36
|
+
baseUrl,
|
|
37
|
+
cases,
|
|
38
|
+
minMarkdownLength: raw.minMarkdownLength,
|
|
39
|
+
requestDelayMs: raw.requestDelayMs,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function runStaticSmokeTest(filePath, options) {
|
|
43
|
+
const config = loadStaticSmokeConfig(filePath, options);
|
|
44
|
+
return runSmokeTest({
|
|
45
|
+
...config,
|
|
46
|
+
fetch: options?.fetch,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=static.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/smoke-test/static.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,IAAY;IAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChE,OAAO,GAAG,cAAc,GAAG,cAAc,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,MAA6B,EAAE,YAAqB;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,OAAsC;IAEtC,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAA0B,CAAC;IAEpF,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAE3C,MAAM,KAAK,GAAoB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;QAC9C,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO;QACP,KAAK;QACL,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,cAAc,EAAE,GAAG,CAAC,cAAc;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAAmC;IAEnC,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,YAAY,CAAC;QAClB,GAAG,MAAM;QACT,KAAK,EAAE,OAAO,EAAE,KAAK;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -5,95 +5,22 @@ export interface SmokeTestCase {
|
|
|
5
5
|
pageUrl: string;
|
|
6
6
|
expectMarkdown: boolean;
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
person: (slug: string) => string;
|
|
15
|
-
team: () => string;
|
|
16
|
-
customType: (slug: string) => string;
|
|
17
|
-
}
|
|
18
|
-
export interface SmokeLinkWithHref {
|
|
19
|
-
href?: string | null;
|
|
20
|
-
slug?: string | null;
|
|
21
|
-
indexed?: boolean | null;
|
|
22
|
-
hidden?: boolean | null;
|
|
23
|
-
}
|
|
24
|
-
export interface SmokeArticleTypeRef {
|
|
25
|
-
slug?: string;
|
|
26
|
-
indexed?: boolean | null;
|
|
27
|
-
hidden?: boolean | null;
|
|
28
|
-
}
|
|
29
|
-
export interface SmokeTagRef {
|
|
30
|
-
slug?: string;
|
|
31
|
-
indexed?: boolean | null;
|
|
32
|
-
hidden?: boolean | null;
|
|
33
|
-
}
|
|
34
|
-
export interface SmokeArticleLink extends SmokeLinkWithHref {
|
|
35
|
-
slug?: string | null;
|
|
36
|
-
articleType?: SmokeArticleTypeRef | null;
|
|
37
|
-
tags?: SmokeTagRef[] | null;
|
|
38
|
-
primaryTag?: SmokeTagRef | null;
|
|
39
|
-
hasBodyContent?: boolean;
|
|
40
|
-
download?: unknown;
|
|
41
|
-
}
|
|
42
|
-
export interface SmokeArticleTypeLink extends SmokeLinkWithHref {
|
|
43
|
-
slug: string;
|
|
44
|
-
}
|
|
45
|
-
export interface SmokePersonLink extends SmokeLinkWithHref {
|
|
46
|
-
slug: string;
|
|
47
|
-
}
|
|
48
|
-
export interface SmokeLinkGetters {
|
|
49
|
-
getAllPageLinks: () => Promise<{
|
|
50
|
-
data: SmokeLinkWithHref[];
|
|
51
|
-
}>;
|
|
52
|
-
getAllArticleLinks: () => Promise<{
|
|
53
|
-
data: SmokeArticleLink[];
|
|
54
|
-
}>;
|
|
55
|
-
getAllArticleTypeLinks: () => Promise<{
|
|
56
|
-
data: SmokeArticleTypeLink[];
|
|
57
|
-
}>;
|
|
58
|
-
getAllTagLinks: () => Promise<{
|
|
59
|
-
data: SmokeLinkWithHref[];
|
|
60
|
-
}>;
|
|
61
|
-
getAllPersonLinks: () => Promise<{
|
|
62
|
-
data: SmokePersonLink[];
|
|
63
|
-
}>;
|
|
64
|
-
}
|
|
65
|
-
export interface SmokeFeatureFlags {
|
|
66
|
-
articlesSlug?: string;
|
|
67
|
-
tagsSlug: string;
|
|
68
|
-
peopleSlug?: string;
|
|
69
|
-
enableArticleTypeIndex: boolean;
|
|
70
|
-
enableArticleTypeTagIndex: boolean;
|
|
71
|
-
enablePeopleIndex: boolean;
|
|
72
|
-
enablePerson: boolean;
|
|
73
|
-
enableTag: boolean;
|
|
74
|
-
enableTagsIndex: boolean;
|
|
75
|
-
}
|
|
76
|
-
export interface SmokeTestOverrides {
|
|
77
|
-
pages?: string[];
|
|
78
|
-
articleTypeTags?: Array<{
|
|
79
|
-
articleType: string;
|
|
80
|
-
tag: string;
|
|
81
|
-
}>;
|
|
82
|
-
customTypeListings?: string[];
|
|
83
|
-
skipCategories?: SmokeTestCategory[];
|
|
84
|
-
skipMarkdownPaths?: string[];
|
|
8
|
+
/** One row in app-level smoke.cases.json (path is site-relative). */
|
|
9
|
+
export interface StaticSmokeCaseDefinition {
|
|
10
|
+
category: SmokeTestCategory;
|
|
11
|
+
label: string;
|
|
12
|
+
path: string;
|
|
13
|
+
expectMarkdown: boolean;
|
|
85
14
|
}
|
|
86
|
-
|
|
15
|
+
/** Committed per app; regenerate via se-marketing-sites-smoke-test-setup skill. */
|
|
16
|
+
export interface StaticSmokeConfigFile {
|
|
87
17
|
siteName: string;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
overrides?: SmokeTestOverrides;
|
|
93
|
-
samplesPerCategory?: number;
|
|
94
|
-
insufficientSamples?: 'warn' | 'fail';
|
|
18
|
+
port: number;
|
|
19
|
+
cases: StaticSmokeCaseDefinition[];
|
|
20
|
+
minMarkdownLength?: number;
|
|
21
|
+
requestDelayMs?: number;
|
|
95
22
|
}
|
|
96
|
-
export type SmokeFailureReason = 'html_non_2xx' | 'markdown_missing' | 'markdown_wrong_content_type' | 'markdown_too_short'
|
|
23
|
+
export type SmokeFailureReason = 'html_non_2xx' | 'markdown_missing' | 'markdown_wrong_content_type' | 'markdown_too_short';
|
|
97
24
|
export interface SmokeTestCaseResult {
|
|
98
25
|
case: SmokeTestCase;
|
|
99
26
|
htmlStatus: number;
|
|
@@ -119,8 +46,11 @@ export interface SmokeTestRunnerConfig {
|
|
|
119
46
|
requestDelayMs?: number;
|
|
120
47
|
fetch?: typeof fetch;
|
|
121
48
|
}
|
|
122
|
-
export interface
|
|
123
|
-
|
|
124
|
-
|
|
49
|
+
export interface LoadStaticSmokeConfigOptions {
|
|
50
|
+
cwd?: string;
|
|
51
|
+
portOverride?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface RunStaticSmokeTestOptions extends LoadStaticSmokeConfigOptions {
|
|
54
|
+
fetch?: typeof fetch;
|
|
125
55
|
}
|
|
126
56
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/smoke-test/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,MAAM,GACN,oBAAoB,GACpB,SAAS,GACT,QAAQ,GACR,gBAAgB,GAChB,KAAK,GACL,0BAA0B,GAC1B,YAAY,GACZ,gBAAgB,GAChB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/smoke-test/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,MAAM,GACN,oBAAoB,GACpB,SAAS,GACT,QAAQ,GACR,gBAAgB,GAChB,KAAK,GACL,0BAA0B,GAC1B,YAAY,GACZ,gBAAgB,GAChB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,qEAAqE;AACrE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,yBAAyB,EAAE,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,kBAAkB,GAClB,6BAA6B,GAC7B,oBAAoB,CAAC;AAEzB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAA0B,SAAQ,4BAA4B;IAC7E,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@se-studio/site-check",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Validate SE marketing sites (sitemap, llms.txt) and download markdown files preserving structure",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,8 +41,7 @@
|
|
|
41
41
|
"files": [
|
|
42
42
|
"dist",
|
|
43
43
|
"*.md",
|
|
44
|
-
"smoke-test-one.mjs"
|
|
45
|
-
"smoke-test-preload.cjs"
|
|
44
|
+
"smoke-test-one.mjs"
|
|
46
45
|
],
|
|
47
46
|
"keywords": [
|
|
48
47
|
"sitemap",
|
package/smoke-test-one.mjs
CHANGED
|
@@ -9,9 +9,6 @@
|
|
|
9
9
|
import fs from 'node:fs';
|
|
10
10
|
import path from 'node:path';
|
|
11
11
|
import { spawn, spawnSync } from 'node:child_process';
|
|
12
|
-
import { fileURLToPath } from 'node:url';
|
|
13
|
-
|
|
14
|
-
const smokeTestPreload = fileURLToPath(new URL('./smoke-test-preload.cjs', import.meta.url));
|
|
15
12
|
|
|
16
13
|
const port = process.argv[2];
|
|
17
14
|
if (!port || !/^\d+$/.test(port)) {
|
|
@@ -44,8 +41,7 @@ function parseEnvFile(filePath) {
|
|
|
44
41
|
|
|
45
42
|
function loadEnv() {
|
|
46
43
|
const envLocal = parseEnvFile(path.join(appDir, '.env.local'));
|
|
47
|
-
|
|
48
|
-
return { ...process.env, ...envExample, ...envLocal, PORT: port };
|
|
44
|
+
return { ...process.env, ...envLocal, PORT: port };
|
|
49
45
|
}
|
|
50
46
|
|
|
51
47
|
async function waitForServer(url) {
|
|
@@ -108,11 +104,10 @@ try {
|
|
|
108
104
|
await waitForServer(baseUrl);
|
|
109
105
|
console.log('Server ready. Running smoke tests...');
|
|
110
106
|
|
|
111
|
-
const nodeOptions = [env.NODE_OPTIONS, `--require ${smokeTestPreload}`].filter(Boolean).join(' ');
|
|
112
107
|
const runResult = spawnSync('pnpm', ['smoke-test:run'], {
|
|
113
108
|
cwd: appDir,
|
|
114
109
|
stdio: 'inherit',
|
|
115
|
-
env: { ...env, SMOKE_TEST_PORT: port
|
|
110
|
+
env: { ...env, SMOKE_TEST_PORT: port },
|
|
116
111
|
});
|
|
117
112
|
exitCode = runResult.status ?? 1;
|
|
118
113
|
} catch (error) {
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { SmokeTestCase, SmokeTestPlannerConfig } from './types.js';
|
|
2
|
-
export declare function planSmokeTestUrls(config: SmokeTestPlannerConfig): Promise<{
|
|
3
|
-
cases: SmokeTestCase[];
|
|
4
|
-
warnings: string[];
|
|
5
|
-
}>;
|
|
6
|
-
/** Assembles a planner config from app-specific deps (convenience for smoke.config.ts). */
|
|
7
|
-
export declare function buildSmokeConfig(config: Omit<SmokeTestPlannerConfig, 'baseUrl'> & {
|
|
8
|
-
port: number;
|
|
9
|
-
}): SmokeTestPlannerConfig;
|
|
10
|
-
/** Unwrap default export when tsx/CJS loads smoke.config.ts as `{ default: config }`. */
|
|
11
|
-
export declare function resolveSmokeConfig(moduleExport: SmokeTestPlannerConfig | {
|
|
12
|
-
default: SmokeTestPlannerConfig;
|
|
13
|
-
}): SmokeTestPlannerConfig;
|
|
14
|
-
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/smoke-test/planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EAEb,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAyGpB,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAC/E,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CA2ND;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE,sBAAsB,CAMxB;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,sBAAsB,GAAG;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,GACzE,sBAAsB,CAUxB"}
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
const DEFAULT_SAMPLES = 2;
|
|
2
|
-
function isIndexedLink(link) {
|
|
3
|
-
return link.indexed !== false && link.hidden !== true;
|
|
4
|
-
}
|
|
5
|
-
function isExternalUrl(href) {
|
|
6
|
-
if (!href)
|
|
7
|
-
return false;
|
|
8
|
-
return href.startsWith('http://') || href.startsWith('https://');
|
|
9
|
-
}
|
|
10
|
-
function shouldIncludeArticle(link) {
|
|
11
|
-
if (!isIndexedLink(link))
|
|
12
|
-
return false;
|
|
13
|
-
if (link.articleType?.indexed === false || link.articleType?.hidden === true)
|
|
14
|
-
return false;
|
|
15
|
-
if (link.hasBodyContent)
|
|
16
|
-
return true;
|
|
17
|
-
if (link.href && isExternalUrl(link.href))
|
|
18
|
-
return false;
|
|
19
|
-
if (link.download)
|
|
20
|
-
return false;
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
function resolveArticlePageUrl(link, urlCalculators) {
|
|
24
|
-
if (link.href && !isExternalUrl(link.href))
|
|
25
|
-
return link.href;
|
|
26
|
-
const articleTypeSlug = link.articleType?.slug;
|
|
27
|
-
if (!articleTypeSlug || !link.slug)
|
|
28
|
-
return null;
|
|
29
|
-
const primaryTagSlug = link.primaryTag?.slug ?? link.tags?.[0]?.slug;
|
|
30
|
-
return urlCalculators.article(articleTypeSlug, link.slug, primaryTagSlug);
|
|
31
|
-
}
|
|
32
|
-
function joinBaseUrl(baseUrl, path) {
|
|
33
|
-
const normalizedBase = baseUrl.replace(/\/$/, '');
|
|
34
|
-
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
35
|
-
return `${normalizedBase}${normalizedPath}`;
|
|
36
|
-
}
|
|
37
|
-
function pickSamples(items, count, pick) {
|
|
38
|
-
return pick(items, count);
|
|
39
|
-
}
|
|
40
|
-
function pickFirst(items, count) {
|
|
41
|
-
return items.slice(0, count);
|
|
42
|
-
}
|
|
43
|
-
function pickPinnedOrFirst(items, count, pinnedSlugs, getSlug) {
|
|
44
|
-
if (!pinnedSlugs?.length)
|
|
45
|
-
return pickFirst(items, count);
|
|
46
|
-
const pinned = pinnedSlugs
|
|
47
|
-
.map((slug) => items.find((item) => getSlug(item) === slug))
|
|
48
|
-
.filter((item) => item != null);
|
|
49
|
-
const remaining = items.filter((item) => !pinnedSlugs.includes(getSlug(item) ?? ''));
|
|
50
|
-
return [...pinned, ...remaining].slice(0, count);
|
|
51
|
-
}
|
|
52
|
-
function addCase(cases, category, label, pageUrl, expectMarkdown, skipMarkdownPaths) {
|
|
53
|
-
const pathname = new URL(pageUrl).pathname;
|
|
54
|
-
const skipMarkdown = skipMarkdownPaths.some((prefix) => pathname.startsWith(prefix.startsWith('/') ? prefix : `/${prefix}`));
|
|
55
|
-
cases.push({
|
|
56
|
-
category,
|
|
57
|
-
label,
|
|
58
|
-
pageUrl,
|
|
59
|
-
expectMarkdown: expectMarkdown && !skipMarkdown,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function collectArticleTypeTagPairs(articleLinks) {
|
|
63
|
-
const pairs = [];
|
|
64
|
-
const seen = new Set();
|
|
65
|
-
for (const link of articleLinks) {
|
|
66
|
-
if (!shouldIncludeArticle(link))
|
|
67
|
-
continue;
|
|
68
|
-
const typeSlug = link.articleType?.slug;
|
|
69
|
-
if (!typeSlug || isExternalUrl(link.href))
|
|
70
|
-
continue;
|
|
71
|
-
for (const tag of link.tags ?? []) {
|
|
72
|
-
const tagSlug = tag.slug;
|
|
73
|
-
if (!tagSlug || tag.indexed === false || tag.hidden === true)
|
|
74
|
-
continue;
|
|
75
|
-
const key = `${typeSlug}\0${tagSlug}`;
|
|
76
|
-
if (seen.has(key))
|
|
77
|
-
continue;
|
|
78
|
-
seen.add(key);
|
|
79
|
-
pairs.push({ articleType: typeSlug, tag: tagSlug });
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return pairs;
|
|
83
|
-
}
|
|
84
|
-
export async function planSmokeTestUrls(config) {
|
|
85
|
-
const { baseUrl, urlCalculators, linkGetters, flags, overrides = {}, samplesPerCategory = DEFAULT_SAMPLES, insufficientSamples = 'warn', } = config;
|
|
86
|
-
const skipCategories = new Set(overrides.skipCategories ?? []);
|
|
87
|
-
const skipMarkdownPaths = overrides.skipMarkdownPaths ?? [];
|
|
88
|
-
const cases = [];
|
|
89
|
-
const warnings = [];
|
|
90
|
-
const [pageRes, articleRes, articleTypeRes, tagRes, personRes] = await Promise.all([
|
|
91
|
-
linkGetters.getAllPageLinks(),
|
|
92
|
-
linkGetters.getAllArticleLinks(),
|
|
93
|
-
linkGetters.getAllArticleTypeLinks(),
|
|
94
|
-
linkGetters.getAllTagLinks(),
|
|
95
|
-
linkGetters.getAllPersonLinks(),
|
|
96
|
-
]);
|
|
97
|
-
const warnInsufficient = (category, needed, found) => {
|
|
98
|
-
const message = `${category}: need ${needed} sample(s), found ${found}`;
|
|
99
|
-
if (insufficientSamples === 'fail') {
|
|
100
|
-
warnings.push(`ERROR: ${message}`);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
warnings.push(message);
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
if (!skipCategories.has('home')) {
|
|
107
|
-
addCase(cases, 'home', 'Home', joinBaseUrl(baseUrl, '/'), true, skipMarkdownPaths);
|
|
108
|
-
}
|
|
109
|
-
if (!skipCategories.has('page')) {
|
|
110
|
-
const pageLinks = pageRes.data.filter((link) => isIndexedLink(link) && !!link.href && link.href !== '/' && link.href !== '/index/');
|
|
111
|
-
const homeSlugCandidates = new Set(['', 'index', 'home']);
|
|
112
|
-
const nonHomePages = pageLinks.filter((link) => {
|
|
113
|
-
const slug = link.slug ?? link.href.replace(/^\/|\/$/g, '');
|
|
114
|
-
return !homeSlugCandidates.has(slug);
|
|
115
|
-
});
|
|
116
|
-
const selectedPages = pickSamples(nonHomePages, samplesPerCategory, (items, count) => pickPinnedOrFirst(items, count, overrides.pages, (link) => link.slug ?? link.href?.replace(/^\/|\/$/g, '')));
|
|
117
|
-
if (selectedPages.length < samplesPerCategory) {
|
|
118
|
-
warnInsufficient('page', samplesPerCategory, selectedPages.length);
|
|
119
|
-
}
|
|
120
|
-
for (const [index, link] of selectedPages.entries()) {
|
|
121
|
-
addCase(cases, 'page', `Page ${index + 1}`, joinBaseUrl(baseUrl, link.href), true, skipMarkdownPaths);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (!skipCategories.has('articles-index') && flags.enableArticleTypeIndex && flags.articlesSlug) {
|
|
125
|
-
addCase(cases, 'articles-index', 'Articles index', joinBaseUrl(baseUrl, urlCalculators.customType(flags.articlesSlug)), true, skipMarkdownPaths);
|
|
126
|
-
}
|
|
127
|
-
const articleTypeLinks = articleTypeRes.data.filter((type) => isIndexedLink(type) && !!type.slug);
|
|
128
|
-
for (const articleType of articleTypeLinks) {
|
|
129
|
-
const typeSlug = articleType.slug;
|
|
130
|
-
const typeLabel = articleType.slug;
|
|
131
|
-
if (!skipCategories.has('article-type-index')) {
|
|
132
|
-
const indexUrl = articleType.href ?? urlCalculators.articleType(typeSlug);
|
|
133
|
-
addCase(cases, 'article-type-index', `Article type index: ${typeLabel}`, joinBaseUrl(baseUrl, indexUrl), true, skipMarkdownPaths);
|
|
134
|
-
}
|
|
135
|
-
if (!skipCategories.has('article')) {
|
|
136
|
-
const articlesForType = articleRes.data.filter((link) => link.articleType?.slug === typeSlug && shouldIncludeArticle(link));
|
|
137
|
-
const articleUrls = articlesForType
|
|
138
|
-
.map((link) => resolveArticlePageUrl(link, urlCalculators))
|
|
139
|
-
.filter((url) => !!url);
|
|
140
|
-
const uniqueUrls = [...new Set(articleUrls)];
|
|
141
|
-
const selectedArticles = uniqueUrls.slice(0, samplesPerCategory);
|
|
142
|
-
if (selectedArticles.length < samplesPerCategory) {
|
|
143
|
-
warnInsufficient(`article (${typeLabel})`, samplesPerCategory, selectedArticles.length);
|
|
144
|
-
}
|
|
145
|
-
for (const [index, url] of selectedArticles.entries()) {
|
|
146
|
-
addCase(cases, 'article', `Article ${index + 1} (${typeLabel})`, joinBaseUrl(baseUrl, url), true, skipMarkdownPaths);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (!skipCategories.has('tags-index') && flags.enableTagsIndex) {
|
|
151
|
-
addCase(cases, 'tags-index', 'Tags index', joinBaseUrl(baseUrl, urlCalculators.customType(flags.tagsSlug)), true, skipMarkdownPaths);
|
|
152
|
-
}
|
|
153
|
-
if (!skipCategories.has('tag') && flags.enableTag) {
|
|
154
|
-
const tagLinks = tagRes.data.filter((link) => isIndexedLink(link) && !!link.href);
|
|
155
|
-
const selectedTags = pickFirst(tagLinks, samplesPerCategory);
|
|
156
|
-
if (selectedTags.length < samplesPerCategory) {
|
|
157
|
-
warnInsufficient('tag', samplesPerCategory, selectedTags.length);
|
|
158
|
-
}
|
|
159
|
-
for (const [index, link] of selectedTags.entries()) {
|
|
160
|
-
addCase(cases, 'tag', `Tag ${index + 1}`, joinBaseUrl(baseUrl, link.href), true, skipMarkdownPaths);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (!skipCategories.has('article-type-tag-listing') && flags.enableArticleTypeTagIndex) {
|
|
164
|
-
const pairs = collectArticleTypeTagPairs(articleRes.data);
|
|
165
|
-
const selectedPairs = overrides.articleTypeTags?.length
|
|
166
|
-
? overrides.articleTypeTags
|
|
167
|
-
: pairs.slice(0, samplesPerCategory);
|
|
168
|
-
if (selectedPairs.length < samplesPerCategory) {
|
|
169
|
-
warnInsufficient('article-type-tag-listing', samplesPerCategory, selectedPairs.length);
|
|
170
|
-
}
|
|
171
|
-
for (const [index, pair] of selectedPairs.entries()) {
|
|
172
|
-
const url = urlCalculators.articleTypeTag(pair.articleType, pair.tag);
|
|
173
|
-
addCase(cases, 'article-type-tag-listing', `Article-type tag listing ${index + 1} (${pair.articleType}/${pair.tag})`, joinBaseUrl(baseUrl, url), true, skipMarkdownPaths);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
if (!skipCategories.has('people-listing') && flags.enablePeopleIndex) {
|
|
177
|
-
addCase(cases, 'people-listing', 'People listing', joinBaseUrl(baseUrl, urlCalculators.team()), true, skipMarkdownPaths);
|
|
178
|
-
}
|
|
179
|
-
if (!skipCategories.has('person') && flags.enablePerson) {
|
|
180
|
-
const people = personRes.data.filter((person) => isIndexedLink(person) && !!person.slug);
|
|
181
|
-
const selectedPeople = pickFirst(people, samplesPerCategory);
|
|
182
|
-
if (selectedPeople.length < samplesPerCategory) {
|
|
183
|
-
warnInsufficient('person', samplesPerCategory, selectedPeople.length);
|
|
184
|
-
}
|
|
185
|
-
for (const [index, person] of selectedPeople.entries()) {
|
|
186
|
-
addCase(cases, 'person', `Person ${index + 1}`, joinBaseUrl(baseUrl, urlCalculators.person(person.slug)), true, skipMarkdownPaths);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
if (!skipCategories.has('custom-type-listing') && overrides.customTypeListings?.length) {
|
|
190
|
-
for (const slug of overrides.customTypeListings) {
|
|
191
|
-
addCase(cases, 'custom-type-listing', `Custom type listing: ${slug}`, joinBaseUrl(baseUrl, urlCalculators.customType(slug)), true, skipMarkdownPaths);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return { cases, warnings };
|
|
195
|
-
}
|
|
196
|
-
/** Assembles a planner config from app-specific deps (convenience for smoke.config.ts). */
|
|
197
|
-
export function buildSmokeConfig(config) {
|
|
198
|
-
const { port, ...rest } = config;
|
|
199
|
-
return {
|
|
200
|
-
...rest,
|
|
201
|
-
baseUrl: `http://localhost:${port}`,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
/** Unwrap default export when tsx/CJS loads smoke.config.ts as `{ default: config }`. */
|
|
205
|
-
export function resolveSmokeConfig(moduleExport) {
|
|
206
|
-
if (moduleExport &&
|
|
207
|
-
typeof moduleExport === 'object' &&
|
|
208
|
-
'default' in moduleExport &&
|
|
209
|
-
moduleExport.default) {
|
|
210
|
-
return moduleExport.default;
|
|
211
|
-
}
|
|
212
|
-
return moduleExport;
|
|
213
|
-
}
|
|
214
|
-
//# sourceMappingURL=planner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/smoke-test/planner.ts"],"names":[],"mappings":"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"}
|
package/smoke-test-preload.cjs
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stub server-only so smoke-test:run (tsx CLI) can import cms-server.
|
|
3
|
-
*/
|
|
4
|
-
const Module = require('node:module');
|
|
5
|
-
|
|
6
|
-
const originalLoad = Module._load;
|
|
7
|
-
Module._load = function smokeTestLoad(request, parent, isMain) {
|
|
8
|
-
if (request === 'server-only') {
|
|
9
|
-
return {};
|
|
10
|
-
}
|
|
11
|
-
return originalLoad.call(this, request, parent, isMain);
|
|
12
|
-
};
|