@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.
Files changed (125) hide show
  1. package/README.md +102 -222
  2. package/dist/bin/cli.js +199 -347
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/browser.d.ts +42 -11
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js +371 -94
  7. package/dist/browser.js.map +1 -1
  8. package/dist/capture.d.ts +1 -6
  9. package/dist/capture.d.ts.map +1 -1
  10. package/dist/capture.js +12 -35
  11. package/dist/capture.js.map +1 -1
  12. package/dist/commands/compare.d.ts +18 -0
  13. package/dist/commands/compare.d.ts.map +1 -0
  14. package/dist/commands/compare.js +64 -0
  15. package/dist/commands/compare.js.map +1 -0
  16. package/dist/commands/detect.d.ts +20 -0
  17. package/dist/commands/detect.d.ts.map +1 -0
  18. package/dist/commands/detect.js +19 -0
  19. package/dist/commands/detect.js.map +1 -0
  20. package/dist/commands/doctor.d.ts +10 -0
  21. package/dist/commands/doctor.d.ts.map +1 -0
  22. package/dist/commands/doctor.js +38 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/login.d.ts +6 -0
  25. package/dist/commands/login.d.ts.map +1 -0
  26. package/dist/commands/login.js +34 -0
  27. package/dist/commands/login.js.map +1 -0
  28. package/dist/commands/pr.d.ts +28 -0
  29. package/dist/commands/pr.d.ts.map +1 -0
  30. package/dist/commands/pr.js +159 -0
  31. package/dist/commands/pr.js.map +1 -0
  32. package/dist/commands/prune.d.ts +10 -0
  33. package/dist/commands/prune.d.ts.map +1 -0
  34. package/dist/commands/prune.js +13 -0
  35. package/dist/commands/prune.js.map +1 -0
  36. package/dist/config.d.ts +36 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +60 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/diff-pool.d.ts +17 -0
  41. package/dist/diff-pool.d.ts.map +1 -0
  42. package/dist/diff-pool.js +89 -0
  43. package/dist/diff-pool.js.map +1 -0
  44. package/dist/diff-worker.d.ts +29 -0
  45. package/dist/diff-worker.d.ts.map +1 -0
  46. package/dist/diff-worker.js +38 -0
  47. package/dist/diff-worker.js.map +1 -0
  48. package/dist/diff.d.ts +37 -0
  49. package/dist/diff.d.ts.map +1 -0
  50. package/dist/diff.js +171 -0
  51. package/dist/diff.js.map +1 -0
  52. package/dist/doctor.d.ts +38 -0
  53. package/dist/doctor.d.ts.map +1 -0
  54. package/dist/doctor.js +72 -0
  55. package/dist/doctor.js.map +1 -0
  56. package/dist/errors.d.ts +38 -0
  57. package/dist/errors.d.ts.map +1 -0
  58. package/dist/errors.js +59 -0
  59. package/dist/errors.js.map +1 -0
  60. package/dist/filename.d.ts +2 -0
  61. package/dist/filename.d.ts.map +1 -1
  62. package/dist/filename.js +2 -1
  63. package/dist/filename.js.map +1 -1
  64. package/dist/git.d.ts +23 -0
  65. package/dist/git.d.ts.map +1 -0
  66. package/dist/git.js +86 -0
  67. package/dist/git.js.map +1 -0
  68. package/dist/github.d.ts +73 -0
  69. package/dist/github.d.ts.map +1 -0
  70. package/dist/github.js +240 -0
  71. package/dist/github.js.map +1 -0
  72. package/dist/index.d.ts +22 -22
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +17 -66
  75. package/dist/index.js.map +1 -1
  76. package/dist/pkg.d.ts +8 -0
  77. package/dist/pkg.d.ts.map +1 -0
  78. package/dist/pkg.js +35 -0
  79. package/dist/pkg.js.map +1 -0
  80. package/dist/report.d.ts +20 -0
  81. package/dist/report.d.ts.map +1 -0
  82. package/dist/report.js +107 -0
  83. package/dist/report.js.map +1 -0
  84. package/dist/routes/imports.d.ts +46 -0
  85. package/dist/routes/imports.d.ts.map +1 -0
  86. package/dist/routes/imports.js +208 -0
  87. package/dist/routes/imports.js.map +1 -0
  88. package/dist/routes/vite.d.ts +15 -0
  89. package/dist/routes/vite.d.ts.map +1 -0
  90. package/dist/routes/vite.js +130 -0
  91. package/dist/routes/vite.js.map +1 -0
  92. package/dist/routes.d.ts +41 -14
  93. package/dist/routes.d.ts.map +1 -1
  94. package/dist/routes.js +271 -141
  95. package/dist/routes.js.map +1 -1
  96. package/dist/run.d.ts +36 -0
  97. package/dist/run.d.ts.map +1 -0
  98. package/dist/run.js +128 -0
  99. package/dist/run.js.map +1 -0
  100. package/dist/sessions.d.ts +50 -0
  101. package/dist/sessions.d.ts.map +1 -0
  102. package/dist/sessions.js +74 -0
  103. package/dist/sessions.js.map +1 -0
  104. package/dist/types.d.ts +118 -41
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js +1 -0
  107. package/dist/types.js.map +1 -1
  108. package/dist/viewport.d.ts +6 -1
  109. package/dist/viewport.d.ts.map +1 -1
  110. package/dist/viewport.js +13 -7
  111. package/dist/viewport.js.map +1 -1
  112. package/package.json +21 -13
  113. package/skill/SKILL.md +31 -229
  114. package/dist/clipboard.d.ts +0 -9
  115. package/dist/clipboard.d.ts.map +0 -1
  116. package/dist/clipboard.js +0 -26
  117. package/dist/clipboard.js.map +0 -1
  118. package/dist/upload.d.ts +0 -39
  119. package/dist/upload.d.ts.map +0 -1
  120. package/dist/upload.js +0 -149
  121. package/dist/upload.js.map +0 -1
  122. package/skill/scripts/adapters/0x0st.sh +0 -36
  123. package/skill/scripts/adapters/blob.sh +0 -55
  124. package/skill/scripts/adapters/git-native.sh +0 -51
  125. 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 from git diff output.
3
- * Maps changed files to affected UI routes.
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 = 'nextjs-app' | 'nextjs-pages' | 'generic';
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
- * Get changed files from git diff.
9
- * Returns paths relative to the repo root.
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
- * Detect routes affected by changed files.
18
- * Main entry point for route detection.
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
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAIlE,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;AAYlE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,MAAM,EAAE,CAUlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAa3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE,qBAA0B,GAClC,aAAa,EAAE,CAoCjB"}
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"}