@juangadm/pre-post 0.3.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/README.md +174 -233
- package/dist/baseline.d.ts +119 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +316 -0
- package/dist/baseline.js.map +1 -0
- package/dist/bin/cli.js +243 -458
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +68 -25
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +500 -105
- package/dist/browser.js.map +1 -1
- package/dist/capture.d.ts +1 -6
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +12 -36
- package/dist/capture.js.map +1 -1
- package/dist/commands/compare.d.ts +18 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +82 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/detect.d.ts +25 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +22 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.d.ts +42 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +119 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +34 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/pr.d.ts +32 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +259 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/prune.d.ts +10 -0
- package/dist/commands/prune.d.ts.map +1 -0
- package/dist/commands/prune.js +13 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/comparison.d.ts +104 -0
- package/dist/comparison.d.ts.map +1 -0
- package/dist/comparison.js +236 -0
- package/dist/comparison.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +82 -0
- package/dist/config.js.map +1 -0
- package/dist/deployments.d.ts +71 -0
- package/dist/deployments.d.ts.map +1 -0
- package/dist/deployments.js +204 -0
- package/dist/deployments.js.map +1 -0
- package/dist/diff-pool.d.ts +17 -0
- package/dist/diff-pool.d.ts.map +1 -0
- package/dist/diff-pool.js +92 -0
- package/dist/diff-pool.js.map +1 -0
- package/dist/diff-worker.d.ts +32 -0
- package/dist/diff-worker.d.ts.map +1 -0
- package/dist/diff-worker.js +39 -0
- package/dist/diff-worker.js.map +1 -0
- package/dist/diff.d.ts +47 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +281 -0
- package/dist/diff.js.map +1 -0
- package/dist/doctor.d.ts +79 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +138 -0
- package/dist/doctor.js.map +1 -0
- package/dist/errors.d.ts +38 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/git.d.ts +61 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +182 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +163 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +411 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +22 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -67
- package/dist/index.js.map +1 -1
- package/dist/landing.d.ts +48 -0
- package/dist/landing.d.ts.map +1 -0
- package/dist/landing.js +93 -0
- package/dist/landing.js.map +1 -0
- package/dist/pkg.d.ts +17 -0
- package/dist/pkg.d.ts.map +1 -0
- package/dist/pkg.js +49 -0
- package/dist/pkg.js.map +1 -0
- package/dist/report.d.ts +20 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +130 -0
- package/dist/report.js.map +1 -0
- package/dist/routes/imports.d.ts +46 -0
- package/dist/routes/imports.d.ts.map +1 -0
- package/dist/routes/imports.js +208 -0
- package/dist/routes/imports.js.map +1 -0
- package/dist/routes/vite.d.ts +15 -0
- package/dist/routes/vite.d.ts.map +1 -0
- package/dist/routes/vite.js +130 -0
- package/dist/routes/vite.js.map +1 -0
- package/dist/routes.d.ts +65 -11
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +346 -141
- package/dist/routes.js.map +1 -1
- package/dist/run.d.ts +116 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +316 -0
- package/dist/run.js.map +1 -0
- package/dist/sameness.d.ts +91 -0
- package/dist/sameness.d.ts.map +1 -0
- package/dist/sameness.js +157 -0
- package/dist/sameness.js.map +1 -0
- package/dist/sessions.d.ts +50 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +80 -0
- package/dist/sessions.js.map +1 -0
- package/dist/shift.d.ts +67 -0
- package/dist/shift.d.ts.map +1 -0
- package/dist/shift.js +184 -0
- package/dist/shift.js.map +1 -0
- package/dist/types.d.ts +179 -68
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/url.d.ts +12 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +30 -0
- package/dist/url.js.map +1 -0
- package/dist/viewport.d.ts +6 -1
- package/dist/viewport.d.ts.map +1 -1
- package/dist/viewport.js +13 -7
- package/dist/viewport.js.map +1 -1
- package/package.json +21 -14
- package/skill/SKILL.md +56 -221
- package/dist/clipboard.d.ts +0 -9
- package/dist/clipboard.d.ts.map +0 -1
- package/dist/clipboard.js +0 -26
- package/dist/clipboard.js.map +0 -1
- package/dist/upload.d.ts +0 -39
- package/dist/upload.d.ts.map +0 -1
- package/dist/upload.js +0 -159
- package/dist/upload.js.map +0 -1
- package/dist/video.d.ts +0 -19
- package/dist/video.d.ts.map +0 -1
- package/dist/video.js +0 -263
- package/dist/video.js.map +0 -1
- package/skill/scripts/adapters/0x0st.sh +0 -36
- package/skill/scripts/adapters/blob.sh +0 -55
- package/skill/scripts/adapters/git-native.sh +0 -51
- package/skill/scripts/upload-and-copy.sh +0 -230
package/dist/routes.js
CHANGED
|
@@ -1,174 +1,379 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Route detection
|
|
3
|
-
*
|
|
2
|
+
* Route detection: which pages does this branch visually affect?
|
|
3
|
+
*
|
|
4
|
+
* 1. Changed files = diff against the merge base with the default branch,
|
|
5
|
+
* plus staged, unstaged, and untracked files.
|
|
6
|
+
* 2. Pick the app root that owns most of those files (monorepo aware).
|
|
7
|
+
* 3. Framework adapter: direct file → route rules, plus the route entry files.
|
|
8
|
+
* 4. Import graph: any changed file that a page imports, directly or
|
|
9
|
+
* transitively, marks that page.
|
|
10
|
+
* 5. Dedupe, rank by confidence, cap, and substitute samples for dynamic routes.
|
|
4
11
|
*/
|
|
5
|
-
import { execSync } from 'child_process';
|
|
6
12
|
import fs from 'fs';
|
|
7
13
|
import path from 'path';
|
|
8
14
|
import { detectAppRouterRoutes, detectPagesRouterRoutes } from './routes/nextjs.js';
|
|
9
15
|
import { detectGenericRoutes } from './routes/generic.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* Get changed files from git diff.
|
|
22
|
-
* Returns paths relative to the repo root.
|
|
23
|
-
*/
|
|
24
|
-
export function getChangedFiles(diffTarget, cwd = process.cwd()) {
|
|
25
|
-
const target = diffTarget || 'HEAD';
|
|
26
|
-
const files = new Set();
|
|
27
|
-
runGitNameOnly(`diff --name-only ${target}`, cwd).forEach((file) => files.add(file));
|
|
28
|
-
runGitNameOnly('diff --name-only --cached', cwd).forEach((file) => files.add(file));
|
|
29
|
-
runGitNameOnly('diff --name-only', cwd).forEach((file) => files.add(file));
|
|
30
|
-
runGitNameOnly('ls-files --others --exclude-standard', cwd).forEach((file) => files.add(file));
|
|
31
|
-
return Array.from(files);
|
|
16
|
+
import { buildImportGraph, findAffectedEntries, readAliases, walkSourceFiles, toPosix, SKIP_DIRS } from './routes/imports.js';
|
|
17
|
+
import { viteRouteEntries, isViteApp } from './routes/vite.js';
|
|
18
|
+
import { changedFiles as gitChangedFiles, repoRoot as gitRepoRoot, requireBase } from './git.js';
|
|
19
|
+
import { devScript, hasDependency, readPackage } from './pkg.js';
|
|
20
|
+
import { CONFIG_DEFAULTS, CONFIG_FILENAME } from './config.js';
|
|
21
|
+
const NEXT_APP_PAGE = /^app\/(.+\/)?page\.(tsx|ts|jsx|js|mdx|md)$/;
|
|
22
|
+
const NEXT_PAGES_HIGH = /^pages\/(?!api\/|_)(.+)\.(tsx|ts|jsx|js|mdx|md)$/;
|
|
23
|
+
const NEXT_PAGE_FILE = /^(page|layout)\.(tsx|ts|jsx|js|mdx)$/;
|
|
24
|
+
const PAGES_INDEX_FILE = /^(index|_app|_document)\.(tsx|ts|jsx|js|mdx)$/;
|
|
25
|
+
function stripSrc(rel) {
|
|
26
|
+
return rel.replace(/^src\//, '');
|
|
32
27
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return 'nextjs-app';
|
|
28
|
+
function hasNextConfig(root) {
|
|
29
|
+
return ['next.config.js', 'next.config.mjs', 'next.config.ts', 'next-env.d.ts'].some(f => fs.existsSync(path.join(root, f)));
|
|
30
|
+
}
|
|
31
|
+
/** Does `dir` contain a file matching `pattern` within `depth` levels? */
|
|
32
|
+
function containsFile(dir, pattern, depth) {
|
|
33
|
+
let entries;
|
|
34
|
+
try {
|
|
35
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
42
36
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (entries.some(e => e.isFile() && pattern.test(e.name)))
|
|
41
|
+
return true;
|
|
42
|
+
if (depth === 0)
|
|
43
|
+
return false;
|
|
44
|
+
return entries.some(e => e.isDirectory() && !SKIP_DIRS.has(e.name) && containsFile(path.join(dir, e.name), pattern, depth - 1));
|
|
45
|
+
}
|
|
46
|
+
function appDir(root) {
|
|
47
|
+
for (const d of [path.join(root, 'app'), path.join(root, 'src', 'app')])
|
|
48
|
+
if (fs.existsSync(d))
|
|
49
|
+
return d;
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function pagesDir(root) {
|
|
53
|
+
for (const d of [path.join(root, 'pages'), path.join(root, 'src', 'pages')])
|
|
54
|
+
if (fs.existsSync(d))
|
|
55
|
+
return d;
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
/** Entry files under a Next.js router directory, mapped by a regex-first filter. */
|
|
59
|
+
function nextEntries(appRoot, files, dirName, pattern, rule) {
|
|
60
|
+
const entries = new Map();
|
|
61
|
+
const base = fs.existsSync(path.join(appRoot, 'src', dirName)) ? path.join(appRoot, 'src') : appRoot;
|
|
62
|
+
const prefix = path.join(base, dirName) + path.sep;
|
|
63
|
+
for (const file of files) {
|
|
64
|
+
if (!file.startsWith(prefix))
|
|
65
|
+
continue;
|
|
66
|
+
const rel = toPosix(path.relative(base, file));
|
|
67
|
+
if (!pattern.test(rel))
|
|
68
|
+
continue;
|
|
69
|
+
const route = rule([rel])[0];
|
|
70
|
+
if (route)
|
|
71
|
+
entries.set(file, route.path);
|
|
46
72
|
}
|
|
47
|
-
return
|
|
73
|
+
return entries;
|
|
74
|
+
}
|
|
75
|
+
const FRAMEWORKS = [
|
|
76
|
+
{
|
|
77
|
+
name: 'nextjs-app',
|
|
78
|
+
matches: root => {
|
|
79
|
+
const dir = appDir(root);
|
|
80
|
+
if (!dir)
|
|
81
|
+
return false;
|
|
82
|
+
return hasDependency(root, 'next') || hasNextConfig(root) || containsFile(dir, NEXT_PAGE_FILE, 4);
|
|
83
|
+
},
|
|
84
|
+
normalize: stripSrc,
|
|
85
|
+
directRoutes: detectAppRouterRoutes,
|
|
86
|
+
routeEntries: (appRoot, files) => nextEntries(appRoot, files, 'app', NEXT_APP_PAGE, detectAppRouterRoutes),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'nextjs-pages',
|
|
90
|
+
matches: root => {
|
|
91
|
+
const dir = pagesDir(root);
|
|
92
|
+
if (!dir || hasDependency(root, 'vite'))
|
|
93
|
+
return false;
|
|
94
|
+
return hasDependency(root, 'next') || hasNextConfig(root) || containsFile(dir, PAGES_INDEX_FILE, 1);
|
|
95
|
+
},
|
|
96
|
+
normalize: stripSrc,
|
|
97
|
+
directRoutes: detectPagesRouterRoutes,
|
|
98
|
+
routeEntries: (appRoot, files) => nextEntries(appRoot, files, 'pages', NEXT_PAGES_HIGH, detectPagesRouterRoutes),
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'vite',
|
|
102
|
+
matches: isViteApp,
|
|
103
|
+
normalize: rel => rel,
|
|
104
|
+
directRoutes: detectGenericRoutes,
|
|
105
|
+
routeEntries: viteRouteEntries,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'generic',
|
|
109
|
+
matches: () => true,
|
|
110
|
+
normalize: rel => rel,
|
|
111
|
+
directRoutes: detectGenericRoutes,
|
|
112
|
+
routeEntries: () => new Map(),
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
function adapterFor(name) {
|
|
116
|
+
return FRAMEWORKS.find(f => f.name === name) ?? FRAMEWORKS[FRAMEWORKS.length - 1];
|
|
48
117
|
}
|
|
49
118
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
119
|
+
* Does this directory hold an app whose routes are worth detecting?
|
|
120
|
+
*
|
|
121
|
+
* A dev script is the test baseline.ts applies before serving a base commit; a
|
|
122
|
+
* recognised framework counts too, since an app can be captured from a
|
|
123
|
+
* deployment without ever being served here. Both are stricter than "owns some
|
|
124
|
+
* changed files", which is the point: counting alone once picked this repo's
|
|
125
|
+
* tests/fixtures over its marketing site by a single file and then reported
|
|
126
|
+
* routes for a directory nothing can serve.
|
|
52
127
|
*/
|
|
53
|
-
export function
|
|
54
|
-
|
|
55
|
-
return [];
|
|
56
|
-
const framework = options.framework || detectFramework();
|
|
57
|
-
let routes;
|
|
58
|
-
switch (framework) {
|
|
59
|
-
case 'nextjs-app':
|
|
60
|
-
routes = detectAppRouterRoutes(changedFiles);
|
|
61
|
-
break;
|
|
62
|
-
case 'nextjs-pages':
|
|
63
|
-
routes = detectPagesRouterRoutes(changedFiles);
|
|
64
|
-
break;
|
|
65
|
-
case 'generic':
|
|
66
|
-
default:
|
|
67
|
-
routes = detectGenericRoutes(changedFiles);
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
// Deduplicate by path — keep highest confidence
|
|
71
|
-
routes = deduplicateRoutes(routes);
|
|
72
|
-
// Sort by confidence (high → medium → low)
|
|
73
|
-
const confidenceOrder = { high: 0, medium: 1, low: 2 };
|
|
74
|
-
routes.sort((a, b) => confidenceOrder[a.confidence] - confidenceOrder[b.confidence]);
|
|
75
|
-
// Cap at maxRoutes
|
|
76
|
-
const maxRoutes = options.maxRoutes ?? 5;
|
|
77
|
-
if (routes.length > maxRoutes) {
|
|
78
|
-
const originalCount = routes.length;
|
|
79
|
-
routes = routes.slice(0, maxRoutes);
|
|
80
|
-
// Add a note about truncation by keeping only the top N
|
|
81
|
-
console.warn(`Detected ${originalCount} routes, capping at ${maxRoutes}. Use --max-routes to increase.`);
|
|
82
|
-
}
|
|
83
|
-
return routes;
|
|
128
|
+
export function isServableApp(root) {
|
|
129
|
+
return devScript(root) !== null || frameworkForRoot(root) !== 'generic';
|
|
84
130
|
}
|
|
85
131
|
/**
|
|
86
|
-
*
|
|
132
|
+
* Is this directory a package at all, rather than a folder that merely looks
|
|
133
|
+
* like one?
|
|
134
|
+
*
|
|
135
|
+
* findAppRoots accepts any directory holding `app/` or `pages/`, which is how
|
|
136
|
+
* this repo's own tests/fixtures — a pile of static HTML under pages/ with no
|
|
137
|
+
* package.json — became a candidate and, on a diff dominated by fixture files,
|
|
138
|
+
* the winner. Declaring a package (or matching a real framework) is the line
|
|
139
|
+
* between an app and a directory shaped like one.
|
|
87
140
|
*/
|
|
88
|
-
function
|
|
141
|
+
export function isAppLike(root) {
|
|
142
|
+
return readPackage(root) !== null || frameworkForRoot(root) !== 'generic';
|
|
143
|
+
}
|
|
144
|
+
export function frameworkForRoot(root) {
|
|
145
|
+
return FRAMEWORKS.find(f => f.matches(root)).name;
|
|
146
|
+
}
|
|
147
|
+
// ============================================================
|
|
148
|
+
// App roots
|
|
149
|
+
// ============================================================
|
|
150
|
+
const APP_SCAN_DEPTH = 3;
|
|
151
|
+
/** Directories (depth ≤ 3) that look like an app: package.json, or app/ pages/ route folders. */
|
|
152
|
+
export function findAppRoots(baseDir) {
|
|
153
|
+
const roots = [];
|
|
154
|
+
const walk = (dir, depth) => {
|
|
155
|
+
// A package.json marks an app; so do app/ or pages/ route folders, except inside src/
|
|
156
|
+
// (src/app belongs to the package one level up).
|
|
157
|
+
const isSrc = path.basename(dir) === 'src';
|
|
158
|
+
if (fs.existsSync(path.join(dir, 'package.json')) || (!isSrc && (appDir(dir) || pagesDir(dir))))
|
|
159
|
+
roots.push(dir);
|
|
160
|
+
if (depth === 0)
|
|
161
|
+
return;
|
|
162
|
+
let entries;
|
|
163
|
+
try {
|
|
164
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
for (const entry of entries) {
|
|
170
|
+
if (entry.isDirectory() && !SKIP_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
|
|
171
|
+
walk(path.join(dir, entry.name), depth - 1);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
walk(baseDir, APP_SCAN_DEPTH);
|
|
176
|
+
return roots;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Auto-detect the framework used in the project: the most specific framework
|
|
180
|
+
* any app root matches, in adapter order.
|
|
181
|
+
*/
|
|
182
|
+
export function detectFramework(rootDir) {
|
|
183
|
+
const found = findAppRoots(rootDir || process.cwd()).map(frameworkForRoot);
|
|
184
|
+
return FRAMEWORKS.find(f => found.includes(f.name))?.name ?? 'generic';
|
|
185
|
+
}
|
|
186
|
+
// ============================================================
|
|
187
|
+
// Ranking
|
|
188
|
+
// ============================================================
|
|
189
|
+
const CONFIDENCE_ORDER = { high: 0, medium: 1, low: 2 };
|
|
190
|
+
export function deduplicateRoutes(routes) {
|
|
89
191
|
const byPath = new Map();
|
|
90
|
-
const confidenceOrder = { high: 0, medium: 1, low: 2 };
|
|
91
192
|
for (const route of routes) {
|
|
92
193
|
const existing = byPath.get(route.path);
|
|
93
|
-
if (!existing ||
|
|
194
|
+
if (!existing || CONFIDENCE_ORDER[route.confidence] < CONFIDENCE_ORDER[existing.confidence]) {
|
|
94
195
|
byPath.set(route.path, route);
|
|
95
196
|
}
|
|
96
197
|
}
|
|
97
198
|
return Array.from(byPath.values());
|
|
98
199
|
}
|
|
99
|
-
function
|
|
200
|
+
function rankAndCap(routes, maxRoutes, warn) {
|
|
201
|
+
let out = deduplicateRoutes(routes);
|
|
202
|
+
out.sort((a, b) => CONFIDENCE_ORDER[a.confidence] - CONFIDENCE_ORDER[b.confidence] || a.path.localeCompare(b.path));
|
|
203
|
+
if (out.length > maxRoutes) {
|
|
204
|
+
const original = out.length;
|
|
205
|
+
out = out.slice(0, maxRoutes);
|
|
206
|
+
warn?.(`Detected ${original} routes, capping at ${maxRoutes}. Use --max-routes to increase.`);
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
export function isDynamicRoute(route) {
|
|
211
|
+
return /[[\]:*]/.test(route);
|
|
212
|
+
}
|
|
213
|
+
/** Apply a sample URL for a dynamic route; returns the route unchanged when static. */
|
|
214
|
+
export function resolveSample(route, samples = {}) {
|
|
215
|
+
return samples[route] ?? route;
|
|
216
|
+
}
|
|
217
|
+
// ============================================================
|
|
218
|
+
// File-list API (framework rules only, no import graph)
|
|
219
|
+
// ============================================================
|
|
220
|
+
export function getChangedFiles(diffTarget, cwd = process.cwd()) {
|
|
221
|
+
// requireBase throws NeedsHumanError when the base cannot be established;
|
|
222
|
+
// that has to travel, because the alternative is an empty list that reads
|
|
223
|
+
// as "nothing changed".
|
|
224
|
+
const target = diffTarget ?? requireBase(cwd).sha;
|
|
100
225
|
try {
|
|
101
|
-
|
|
102
|
-
encoding: 'utf-8',
|
|
103
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
104
|
-
cwd,
|
|
105
|
-
}).trim();
|
|
106
|
-
return output ? output.split('\n').filter(Boolean) : [];
|
|
226
|
+
return gitChangedFiles(cwd, target);
|
|
107
227
|
}
|
|
108
228
|
catch {
|
|
109
229
|
return [];
|
|
110
230
|
}
|
|
111
231
|
}
|
|
112
|
-
function
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
232
|
+
export function detectRoutes(changedFiles, options = {}) {
|
|
233
|
+
if (changedFiles.length === 0)
|
|
234
|
+
return [];
|
|
235
|
+
const adapter = adapterFor(options.framework || detectFramework());
|
|
236
|
+
return rankAndCap(adapter.directRoutes(changedFiles.map(adapter.normalize)), options.maxRoutes ?? CONFIG_DEFAULTS.maxRoutes, options.log);
|
|
237
|
+
}
|
|
238
|
+
/** For a layout-only route (no page of its own), the closest static page beneath it. */
|
|
239
|
+
function nearestPageRoute(route, knownRoutes) {
|
|
240
|
+
if (knownRoutes.includes(route))
|
|
241
|
+
return route;
|
|
242
|
+
const prefix = route === '/' ? '/' : route + '/';
|
|
243
|
+
return knownRoutes.find(r => r.startsWith(prefix) && !isDynamicRoute(r)) ?? null;
|
|
244
|
+
}
|
|
245
|
+
export function detectRoutesForRepo(options = {}) {
|
|
246
|
+
const started = Date.now();
|
|
247
|
+
const root = gitRepoRoot(options.cwd || process.cwd());
|
|
248
|
+
const config = options.config || {};
|
|
249
|
+
const maxRoutes = options.maxRoutes ?? config.maxRoutes ?? CONFIG_DEFAULTS.maxRoutes;
|
|
250
|
+
const ignore = (config.ignore || []).map(p => p.replace(/^\.?\//, ''));
|
|
251
|
+
// Establish the base before reading the diff. Getting this wrong is silent:
|
|
252
|
+
// diffing HEAD reports only uncommitted work, so a branch whose changes are
|
|
253
|
+
// committed — every branch in a shallow CI or sandbox checkout — comes back
|
|
254
|
+
// empty and the run reports no visual changes.
|
|
255
|
+
const base = options.changedFiles
|
|
256
|
+
? null
|
|
257
|
+
: requireBase(root, { explicit: options.diffTarget, log: options.log });
|
|
258
|
+
const allChanged = (options.changedFiles ?? gitChangedFiles(root, base.sha))
|
|
259
|
+
// Our own config file is written mid-run; it never affects which routes changed.
|
|
260
|
+
.filter(f => f !== CONFIG_FILENAME)
|
|
261
|
+
.filter(f => !ignore.some(prefix => f === prefix || f.startsWith(prefix.replace(/\/?$/, '/'))));
|
|
262
|
+
// Choose the app root the PR is about. The repo root contains every changed
|
|
263
|
+
// file, so it would always match at least as many as any app nested inside
|
|
264
|
+
// it; score the nested app roots only, and fall back to the repo root when
|
|
265
|
+
// none of them owns a changed file.
|
|
266
|
+
//
|
|
267
|
+
// Servability outranks file count. Counting alone once picked this repo's
|
|
268
|
+
// own tests/fixtures over its marketing site by a single file, and then
|
|
269
|
+
// reported routes for a directory nothing can serve. A directory that cannot
|
|
270
|
+
// be served is not the app a branch changed, however much of the diff lands
|
|
271
|
+
// in it; among candidates that can be served, the diff decides, deepest
|
|
272
|
+
// first on a tie.
|
|
273
|
+
const owners = findAppRoots(root)
|
|
274
|
+
.map(dir => {
|
|
275
|
+
const rel = toPosix(path.relative(root, dir));
|
|
276
|
+
return { dir, count: rel ? allChanged.filter(f => f.startsWith(rel + '/')).length : 0 };
|
|
277
|
+
})
|
|
278
|
+
// Probing the filesystem is the expensive part, so only candidates that own
|
|
279
|
+
// some of the diff pay for it.
|
|
280
|
+
.filter(c => c.count > 0)
|
|
281
|
+
.map(c => {
|
|
282
|
+
const framework = frameworkForRoot(c.dir);
|
|
283
|
+
return {
|
|
284
|
+
...c,
|
|
285
|
+
framework,
|
|
286
|
+
appLike: readPackage(c.dir) !== null || framework !== 'generic',
|
|
287
|
+
servable: devScript(c.dir) !== null || framework !== 'generic',
|
|
288
|
+
};
|
|
289
|
+
})
|
|
290
|
+
// A folder shaped like an app is not one; see isAppLike.
|
|
291
|
+
.filter(c => c.appLike)
|
|
292
|
+
.sort((a, b) => b.count - a.count || b.dir.length - a.dir.length);
|
|
293
|
+
// Among roots that own a comparable share of the diff, prefer one that can be
|
|
294
|
+
// served; outside that band the diff wins outright.
|
|
295
|
+
//
|
|
296
|
+
// Servability breaks near-ties, which is the case it was added for: this
|
|
297
|
+
// repo's tests/fixtures beat site/ by a single file and produced routes for a
|
|
298
|
+
// directory nothing can serve. It must not override a clear majority, though
|
|
299
|
+
// — a deployed or --before/--after comparison never serves anything locally,
|
|
300
|
+
// so a static app owning most of the diff still has the routes that changed,
|
|
301
|
+
// and handing detection to an incidental package with a start script would
|
|
302
|
+
// discard them.
|
|
303
|
+
const CONTENDER_SHARE = 0.5;
|
|
304
|
+
const leader = owners[0]?.count ?? 0;
|
|
305
|
+
const contenders = owners.filter(c => c.count >= leader * CONTENDER_SHARE);
|
|
306
|
+
const winner = contenders.find(c => c.servable) ?? owners[0];
|
|
307
|
+
const appRoot = winner?.dir ?? root;
|
|
308
|
+
// The winner's framework was already resolved while scoring; frameworkForRoot
|
|
309
|
+
// walks directories, so don't ask twice.
|
|
310
|
+
const adapter = adapterFor(options.framework || winner?.framework || frameworkForRoot(appRoot));
|
|
311
|
+
const appPrefix = toPosix(path.relative(root, appRoot));
|
|
312
|
+
const appRel = allChanged
|
|
313
|
+
.filter(f => !appPrefix || f.startsWith(appPrefix + '/'))
|
|
314
|
+
.map(f => (appPrefix ? f.slice(appPrefix.length + 1) : f));
|
|
315
|
+
const routes = [];
|
|
316
|
+
// Always-on routes from config.
|
|
317
|
+
for (const r of config.routes || []) {
|
|
318
|
+
routes.push({ path: r, sourceFile: '.pre-post.json', confidence: 'high', reason: 'Configured route' });
|
|
319
|
+
}
|
|
320
|
+
// Direct framework rules.
|
|
321
|
+
routes.push(...adapter.directRoutes(appRel.map(adapter.normalize)));
|
|
322
|
+
// Import graph: changed files → pages that import them. One walk serves both.
|
|
323
|
+
if (appRel.length) {
|
|
324
|
+
const files = walkSourceFiles(appRoot);
|
|
325
|
+
const aliases = readAliases(appRoot);
|
|
326
|
+
const entries = adapter.routeEntries(appRoot, files, aliases);
|
|
327
|
+
if (entries.size) {
|
|
328
|
+
const graph = buildImportGraph(appRoot, { files, aliases });
|
|
329
|
+
const changedAbs = appRel.map(f => path.join(appRoot, f)).filter(f => graph.files.has(f));
|
|
330
|
+
const affected = findAffectedEntries(graph, changedAbs, f => entries.has(f));
|
|
331
|
+
for (const [entry, { via, depth }] of affected) {
|
|
332
|
+
const viaRel = toPosix(path.relative(appRoot, via));
|
|
333
|
+
const entryRel = toPosix(path.relative(appRoot, entry));
|
|
334
|
+
routes.push({
|
|
335
|
+
path: entries.get(entry),
|
|
336
|
+
sourceFile: viaRel,
|
|
337
|
+
confidence: depth === 0 ? 'high' : depth <= 2 ? 'medium' : 'low',
|
|
338
|
+
reason: depth === 0 ? 'Page file changed' : `${entryRel} imports ${viaRel}${depth > 1 ? ` (${depth} hops)` : ''}`,
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
// Layout/special-file routes may not have a page of their own; snap them to the nearest page.
|
|
342
|
+
const known = Array.from(new Set(entries.values())).sort((a, b) => a.length - b.length);
|
|
343
|
+
const knownSet = new Set(known);
|
|
344
|
+
for (const r of routes) {
|
|
345
|
+
if (!knownSet.has(r.path)) {
|
|
346
|
+
const snapped = nearestPageRoute(r.path, known);
|
|
347
|
+
if (snapped)
|
|
348
|
+
r.path = snapped;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
132
351
|
}
|
|
133
352
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
'index.jsx',
|
|
160
|
-
'index.js',
|
|
161
|
-
'_app.tsx',
|
|
162
|
-
'_app.ts',
|
|
163
|
-
'_app.jsx',
|
|
164
|
-
'_app.js',
|
|
165
|
-
'_document.tsx',
|
|
166
|
-
'_document.ts',
|
|
167
|
-
'_document.jsx',
|
|
168
|
-
'_document.js',
|
|
169
|
-
]);
|
|
170
|
-
}
|
|
171
|
-
function hasAnyFile(dir, filenames) {
|
|
172
|
-
return filenames.some((filename) => fs.existsSync(path.join(dir, filename)));
|
|
353
|
+
// Fallback: something changed in the app but nothing mapped → home page, low confidence.
|
|
354
|
+
if (routes.length === 0 && appRel.length > 0) {
|
|
355
|
+
routes.push({ path: '/', sourceFile: appRel[0], confidence: 'low', reason: 'No route mapping found; defaulting to /' });
|
|
356
|
+
}
|
|
357
|
+
// Dynamic routes: use samples or skip.
|
|
358
|
+
const samples = config.samples || {};
|
|
359
|
+
const skippedDynamic = new Set();
|
|
360
|
+
const resolved = [];
|
|
361
|
+
for (const r of deduplicateRoutes(routes)) {
|
|
362
|
+
if (!isDynamicRoute(r.path))
|
|
363
|
+
resolved.push(r);
|
|
364
|
+
else if (samples[r.path])
|
|
365
|
+
resolved.push({ ...r, reason: `${r.reason} (sample: ${samples[r.path]})` });
|
|
366
|
+
else
|
|
367
|
+
skippedDynamic.add(r.path);
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
framework: adapter.name,
|
|
371
|
+
appRoot,
|
|
372
|
+
changedFiles: allChanged,
|
|
373
|
+
routes: rankAndCap(resolved, maxRoutes, options.log),
|
|
374
|
+
skippedDynamic: Array.from(skippedDynamic),
|
|
375
|
+
base,
|
|
376
|
+
durationMs: Date.now() - started,
|
|
377
|
+
};
|
|
173
378
|
}
|
|
174
379
|
//# sourceMappingURL=routes.js.map
|
package/dist/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|