@juangadm/pre-post 0.2.0 → 1.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/README.md +102 -222
- package/dist/bin/cli.js +199 -347
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +42 -11
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +371 -94
- 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 -35
- 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 +64 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/detect.d.ts +20 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +19 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +38 -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 +28 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +159 -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/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +60 -0
- package/dist/config.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 +89 -0
- package/dist/diff-pool.js.map +1 -0
- package/dist/diff-worker.d.ts +29 -0
- package/dist/diff-worker.d.ts.map +1 -0
- package/dist/diff-worker.js +38 -0
- package/dist/diff-worker.js.map +1 -0
- package/dist/diff.d.ts +37 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +171 -0
- package/dist/diff.js.map +1 -0
- package/dist/doctor.d.ts +38 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +72 -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/filename.d.ts +2 -0
- package/dist/filename.d.ts.map +1 -1
- package/dist/filename.js +2 -1
- package/dist/filename.js.map +1 -1
- package/dist/git.d.ts +23 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +86 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +73 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +240 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +22 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -66
- package/dist/index.js.map +1 -1
- package/dist/pkg.d.ts +8 -0
- package/dist/pkg.d.ts.map +1 -0
- package/dist/pkg.js +35 -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 +107 -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 +41 -14
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +271 -141
- package/dist/routes.js.map +1 -1
- package/dist/run.d.ts +36 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +128 -0
- package/dist/run.js.map +1 -0
- package/dist/sessions.d.ts +50 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +74 -0
- package/dist/sessions.js.map +1 -0
- package/dist/types.d.ts +118 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- 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 -13
- package/skill/SKILL.md +31 -229
- 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 -149
- package/dist/upload.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
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route entry discovery for Vite apps.
|
|
3
|
+
*
|
|
4
|
+
* Vite has no routing convention of its own, so we look for the common ones:
|
|
5
|
+
* 1. File-based pages: src/pages/** (vite-plugin-pages, Nuxt-style)
|
|
6
|
+
* 2. File-based routes: src/routes/** (TanStack Router file routes)
|
|
7
|
+
* 3. React Router declarations: <Route path="/x" element={<X/>}>,
|
|
8
|
+
* { path: '/x', element: <X/> }, { path: '/x', Component: X },
|
|
9
|
+
* resolved to the component's source file.
|
|
10
|
+
*/
|
|
11
|
+
import { Alias } from './imports.js';
|
|
12
|
+
/** absolute entry file → route path */
|
|
13
|
+
export declare function viteRouteEntries(appRoot: string, files?: string[], aliases?: Alias[]): Map<string, string>;
|
|
14
|
+
export declare function isViteApp(appRoot: string): boolean;
|
|
15
|
+
//# sourceMappingURL=vite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../src/routes/vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAA8C,KAAK,EAAe,MAAM,cAAc,CAAC;AA+F9F,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAA6B,EAAE,OAAO,GAAE,KAAK,EAAyB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ1J;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route entry discovery for Vite apps.
|
|
3
|
+
*
|
|
4
|
+
* Vite has no routing convention of its own, so we look for the common ones:
|
|
5
|
+
* 1. File-based pages: src/pages/** (vite-plugin-pages, Nuxt-style)
|
|
6
|
+
* 2. File-based routes: src/routes/** (TanStack Router file routes)
|
|
7
|
+
* 3. React Router declarations: <Route path="/x" element={<X/>}>,
|
|
8
|
+
* { path: '/x', element: <X/> }, { path: '/x', Component: X },
|
|
9
|
+
* resolved to the component's source file.
|
|
10
|
+
*/
|
|
11
|
+
import fs from 'fs';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { resolveSpecifier, walkSourceFiles, toPosix, readAliases } from './imports.js';
|
|
14
|
+
import { hasDependency } from '../pkg.js';
|
|
15
|
+
const PAGE_EXTS = ['.tsx', '.jsx', '.ts', '.js', '.vue', '.svelte'];
|
|
16
|
+
function fileToRoute(rel) {
|
|
17
|
+
let p = toPosix(rel).replace(/\.[^.]+$/, '');
|
|
18
|
+
p = p.replace(/(^|\/)index$/, '');
|
|
19
|
+
p = p.replace(/(^|\/)_index$/, '');
|
|
20
|
+
p = p.replace(/\$([\w]+)/g, '[$1]'); // TanStack $param
|
|
21
|
+
p = p.replace(/(^|\/)__root$/, '');
|
|
22
|
+
p = p.replace(/\.(?=[^/])/g, '/'); // TanStack dotted nesting: posts.$id → posts/[id]
|
|
23
|
+
p = p.replace(/\/+$/, '');
|
|
24
|
+
return '/' + p.replace(/^\/+/, '');
|
|
25
|
+
}
|
|
26
|
+
function collectFileRoutes(dir, files, entries) {
|
|
27
|
+
const prefix = dir + path.sep;
|
|
28
|
+
for (const file of files) {
|
|
29
|
+
if (!file.startsWith(prefix))
|
|
30
|
+
continue;
|
|
31
|
+
if (!PAGE_EXTS.includes(path.extname(file)))
|
|
32
|
+
continue;
|
|
33
|
+
const base = path.basename(file);
|
|
34
|
+
if (base.startsWith('_') && !/^_index\./.test(base))
|
|
35
|
+
continue; // layouts / private
|
|
36
|
+
if (/\.(test|spec|stories)\./.test(base))
|
|
37
|
+
continue;
|
|
38
|
+
const rel = path.relative(dir, file);
|
|
39
|
+
if (/(^|\/)(components?|hooks|utils|lib)\//.test(rel))
|
|
40
|
+
continue;
|
|
41
|
+
if (!entries.has(file))
|
|
42
|
+
entries.set(file, fileToRoute(rel));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const ROUTE_DECL = /path\s*[:=]\s*["'`]([^"'`\n]+)["'`]/g;
|
|
46
|
+
/** Map imported component names to specifiers in one file. */
|
|
47
|
+
function componentImports(source) {
|
|
48
|
+
const map = new Map();
|
|
49
|
+
const named = /import\s+(?:type\s+)?([\w$]+)?\s*,?\s*(?:\{([^}]*)\})?\s*from\s*['"]([^'"\n]+)['"]/g;
|
|
50
|
+
let m;
|
|
51
|
+
while ((m = named.exec(source))) {
|
|
52
|
+
const spec = m[3];
|
|
53
|
+
if (m[1])
|
|
54
|
+
map.set(m[1], spec);
|
|
55
|
+
if (m[2]) {
|
|
56
|
+
for (const part of m[2].split(',')) {
|
|
57
|
+
const name = part.trim().split(/\s+as\s+/).pop()?.trim();
|
|
58
|
+
if (name)
|
|
59
|
+
map.set(name, spec);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const lazy = /(?:const|let|var)\s+([\w$]+)\s*=\s*(?:React\.)?lazy\s*\(\s*\(\)\s*=>\s*import\s*\(\s*['"]([^'"\n]+)['"]\s*\)/g;
|
|
64
|
+
while ((m = lazy.exec(source)))
|
|
65
|
+
map.set(m[1], m[2]);
|
|
66
|
+
return map;
|
|
67
|
+
}
|
|
68
|
+
function joinRoute(parent, child) {
|
|
69
|
+
if (child.startsWith('/'))
|
|
70
|
+
return child.replace(/\/+$/, '') || '/';
|
|
71
|
+
const base = parent.replace(/\/+$/, '');
|
|
72
|
+
const joined = `${base}/${child}`.replace(/\/+/g, '/').replace(/\/+$/, '');
|
|
73
|
+
return joined || '/';
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Scan source files that mention react-router for route declarations.
|
|
77
|
+
*/
|
|
78
|
+
function collectReactRouterRoutes(files, aliases, entries) {
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
let source;
|
|
81
|
+
try {
|
|
82
|
+
source = fs.readFileSync(file, 'utf-8');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (!/react-router|createBrowserRouter|createRoutesFromElements|<Routes|<Route\b/.test(source))
|
|
88
|
+
continue;
|
|
89
|
+
const imports = componentImports(source);
|
|
90
|
+
let parent = '/';
|
|
91
|
+
ROUTE_DECL.lastIndex = 0;
|
|
92
|
+
let m;
|
|
93
|
+
while ((m = ROUTE_DECL.exec(source))) {
|
|
94
|
+
const raw = m[1];
|
|
95
|
+
if (raw === '*' || raw.includes('${'))
|
|
96
|
+
continue;
|
|
97
|
+
const routePath = joinRoute(parent, raw.replace(/:(\w+)/g, '[$1]'));
|
|
98
|
+
if (raw.startsWith('/'))
|
|
99
|
+
parent = routePath;
|
|
100
|
+
const window = source.slice(m.index, m.index + 400);
|
|
101
|
+
const comp = window.match(/element\s*[:=]\s*\{?\s*<\s*([\w$.]+)/)?.[1]
|
|
102
|
+
|| window.match(/Component\s*[:=]\s*\{?\s*([\w$.]+)/)?.[1]
|
|
103
|
+
|| window.match(/component\s*[:=]\s*\{?\s*([\w$.]+)/)?.[1]
|
|
104
|
+
|| window.match(/lazy\s*[:=]\s*\(\)\s*=>\s*import\s*\(\s*['"]([^'"\n]+)['"]/)?.[1];
|
|
105
|
+
if (!comp)
|
|
106
|
+
continue;
|
|
107
|
+
const spec = comp.includes('/') || comp.startsWith('.') ? comp : imports.get(comp.split('.')[0]);
|
|
108
|
+
if (!spec)
|
|
109
|
+
continue;
|
|
110
|
+
const target = resolveSpecifier(spec, file, files, aliases);
|
|
111
|
+
if (target && !entries.has(target))
|
|
112
|
+
entries.set(target, routePath);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** absolute entry file → route path */
|
|
117
|
+
export function viteRouteEntries(appRoot, files = walkSourceFiles(appRoot), aliases = readAliases(appRoot)) {
|
|
118
|
+
const entries = new Map();
|
|
119
|
+
// Explicit router declarations win over file-name guesses.
|
|
120
|
+
collectReactRouterRoutes(new Set(files), aliases, entries);
|
|
121
|
+
collectFileRoutes(path.join(appRoot, 'src', 'pages'), files, entries);
|
|
122
|
+
collectFileRoutes(path.join(appRoot, 'src', 'routes'), files, entries);
|
|
123
|
+
collectFileRoutes(path.join(appRoot, 'pages'), files, entries);
|
|
124
|
+
return entries;
|
|
125
|
+
}
|
|
126
|
+
export function isViteApp(appRoot) {
|
|
127
|
+
return hasDependency(appRoot, 'vite')
|
|
128
|
+
|| fs.readdirSync(appRoot).some(f => /^vite\.config\.(ts|js|mjs|cjs|mts)$/.test(f));
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=vite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../src/routes/vite.ts"],"names":[],"mappings":"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"}
|
package/dist/routes.d.ts
CHANGED
|
@@ -1,21 +1,48 @@
|
|
|
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 { DetectedRoute, RouteDetectionOptions } from './types.js';
|
|
6
|
-
export type Framework
|
|
12
|
+
import { DetectedRoute, Framework, PrePostConfig, RouteDetectionOptions } from './types.js';
|
|
13
|
+
export type { Framework };
|
|
14
|
+
export declare function frameworkForRoot(root: string): Framework;
|
|
15
|
+
/** Directories (depth ≤ 3) that look like an app: package.json, or app/ pages/ route folders. */
|
|
16
|
+
export declare function findAppRoots(baseDir: string): string[];
|
|
7
17
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
export declare function getChangedFiles(diffTarget?: string, cwd?: string): string[];
|
|
12
|
-
/**
|
|
13
|
-
* Auto-detect the framework used in the project.
|
|
18
|
+
* Auto-detect the framework used in the project: the most specific framework
|
|
19
|
+
* any app root matches, in adapter order.
|
|
14
20
|
*/
|
|
15
21
|
export declare function detectFramework(rootDir?: string): Framework;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
export declare function deduplicateRoutes(routes: DetectedRoute[]): DetectedRoute[];
|
|
23
|
+
export declare function isDynamicRoute(route: string): boolean;
|
|
24
|
+
/** Apply a sample URL for a dynamic route; returns the route unchanged when static. */
|
|
25
|
+
export declare function resolveSample(route: string, samples?: Record<string, string>): string;
|
|
26
|
+
export declare function getChangedFiles(diffTarget?: string, cwd?: string): string[];
|
|
20
27
|
export declare function detectRoutes(changedFiles: string[], options?: RouteDetectionOptions): DetectedRoute[];
|
|
28
|
+
export interface RepoRouteDetection {
|
|
29
|
+
framework: Framework;
|
|
30
|
+
appRoot: string;
|
|
31
|
+
changedFiles: string[];
|
|
32
|
+
routes: DetectedRoute[];
|
|
33
|
+
/** Dynamic routes with no sample URL configured */
|
|
34
|
+
skippedDynamic: string[];
|
|
35
|
+
/** Milliseconds spent */
|
|
36
|
+
durationMs: number;
|
|
37
|
+
}
|
|
38
|
+
export interface RepoDetectionOptions {
|
|
39
|
+
cwd?: string;
|
|
40
|
+
config?: PrePostConfig;
|
|
41
|
+
framework?: Framework;
|
|
42
|
+
maxRoutes?: number;
|
|
43
|
+
diffTarget?: string;
|
|
44
|
+
/** Override changed files (tests) */
|
|
45
|
+
changedFiles?: string[];
|
|
46
|
+
}
|
|
47
|
+
export declare function detectRoutesForRepo(options?: RepoDetectionOptions): RepoRouteDetection;
|
|
21
48
|
//# sourceMappingURL=routes.d.ts.map
|
package/dist/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAS5F,YAAY,EAAE,SAAS,EAAE,CAAC;AAgH1B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAExD;AAQD,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAG3D;AAQD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAS1E;AAaD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAEzF;AAMD,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,MAAM,EAAE,CAMlF;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,qBAA0B,GAAG,aAAa,EAAE,CAIzG;AAMD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,mDAAmD;IACnD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AASD,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,kBAAkB,CA8F1F"}
|