@cr8rcho/alkahest 0.1.1

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 (130) hide show
  1. package/README.ko.md +208 -0
  2. package/README.md +208 -0
  3. package/dist/assets/dashboard.html +647 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +68 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/hook.d.ts +1 -0
  8. package/dist/commands/hook.js +64 -0
  9. package/dist/commands/hook.js.map +1 -0
  10. package/dist/commands/login.d.ts +11 -0
  11. package/dist/commands/login.js +27 -0
  12. package/dist/commands/login.js.map +1 -0
  13. package/dist/commands/mcp.d.ts +6 -0
  14. package/dist/commands/mcp.js +13 -0
  15. package/dist/commands/mcp.js.map +1 -0
  16. package/dist/commands/publish.d.ts +19 -0
  17. package/dist/commands/publish.js +27 -0
  18. package/dist/commands/publish.js.map +1 -0
  19. package/dist/commands/scan.d.ts +11 -0
  20. package/dist/commands/scan.js +29 -0
  21. package/dist/commands/scan.js.map +1 -0
  22. package/dist/commands/update.d.ts +15 -0
  23. package/dist/commands/update.js +41 -0
  24. package/dist/commands/update.js.map +1 -0
  25. package/dist/commands/view.d.ts +6 -0
  26. package/dist/commands/view.js +21 -0
  27. package/dist/commands/view.js.map +1 -0
  28. package/dist/core/adapters/angular.d.ts +2 -0
  29. package/dist/core/adapters/angular.js +305 -0
  30. package/dist/core/adapters/angular.js.map +1 -0
  31. package/dist/core/adapters/astro.d.ts +3 -0
  32. package/dist/core/adapters/astro.js +140 -0
  33. package/dist/core/adapters/astro.js.map +1 -0
  34. package/dist/core/adapters/compose.d.ts +2 -0
  35. package/dist/core/adapters/compose.js +195 -0
  36. package/dist/core/adapters/compose.js.map +1 -0
  37. package/dist/core/adapters/django.d.ts +2 -0
  38. package/dist/core/adapters/django.js +314 -0
  39. package/dist/core/adapters/django.js.map +1 -0
  40. package/dist/core/adapters/expo-router.d.ts +2 -0
  41. package/dist/core/adapters/expo-router.js +60 -0
  42. package/dist/core/adapters/expo-router.js.map +1 -0
  43. package/dist/core/adapters/flask.d.ts +2 -0
  44. package/dist/core/adapters/flask.js +249 -0
  45. package/dist/core/adapters/flask.js.map +1 -0
  46. package/dist/core/adapters/flutter.d.ts +2 -0
  47. package/dist/core/adapters/flutter.js +232 -0
  48. package/dist/core/adapters/flutter.js.map +1 -0
  49. package/dist/core/adapters/index.d.ts +19 -0
  50. package/dist/core/adapters/index.js +59 -0
  51. package/dist/core/adapters/index.js.map +1 -0
  52. package/dist/core/adapters/next-app.d.ts +2 -0
  53. package/dist/core/adapters/next-app.js +62 -0
  54. package/dist/core/adapters/next-app.js.map +1 -0
  55. package/dist/core/adapters/next-pages.d.ts +2 -0
  56. package/dist/core/adapters/next-pages.js +70 -0
  57. package/dist/core/adapters/next-pages.js.map +1 -0
  58. package/dist/core/adapters/nuxt.d.ts +2 -0
  59. package/dist/core/adapters/nuxt.js +59 -0
  60. package/dist/core/adapters/nuxt.js.map +1 -0
  61. package/dist/core/adapters/rails.d.ts +2 -0
  62. package/dist/core/adapters/rails.js +275 -0
  63. package/dist/core/adapters/rails.js.map +1 -0
  64. package/dist/core/adapters/react-jsx.d.ts +68 -0
  65. package/dist/core/adapters/react-jsx.js +355 -0
  66. package/dist/core/adapters/react-jsx.js.map +1 -0
  67. package/dist/core/adapters/react-navigation.d.ts +2 -0
  68. package/dist/core/adapters/react-navigation.js +153 -0
  69. package/dist/core/adapters/react-navigation.js.map +1 -0
  70. package/dist/core/adapters/react-router.d.ts +2 -0
  71. package/dist/core/adapters/react-router.js +249 -0
  72. package/dist/core/adapters/react-router.js.map +1 -0
  73. package/dist/core/adapters/remix.d.ts +2 -0
  74. package/dist/core/adapters/remix.js +109 -0
  75. package/dist/core/adapters/remix.js.map +1 -0
  76. package/dist/core/adapters/static-html.d.ts +2 -0
  77. package/dist/core/adapters/static-html.js +157 -0
  78. package/dist/core/adapters/static-html.js.map +1 -0
  79. package/dist/core/adapters/sveltekit.d.ts +2 -0
  80. package/dist/core/adapters/sveltekit.js +151 -0
  81. package/dist/core/adapters/sveltekit.js.map +1 -0
  82. package/dist/core/adapters/swiftui.d.ts +2 -0
  83. package/dist/core/adapters/swiftui.js +216 -0
  84. package/dist/core/adapters/swiftui.js.map +1 -0
  85. package/dist/core/adapters/types.d.ts +65 -0
  86. package/dist/core/adapters/types.js +2 -0
  87. package/dist/core/adapters/types.js.map +1 -0
  88. package/dist/core/adapters/uikit.d.ts +2 -0
  89. package/dist/core/adapters/uikit.js +178 -0
  90. package/dist/core/adapters/uikit.js.map +1 -0
  91. package/dist/core/adapters/vue-router.d.ts +2 -0
  92. package/dist/core/adapters/vue-router.js +224 -0
  93. package/dist/core/adapters/vue-router.js.map +1 -0
  94. package/dist/core/adapters/vue-sfc.d.ts +28 -0
  95. package/dist/core/adapters/vue-sfc.js +132 -0
  96. package/dist/core/adapters/vue-sfc.js.map +1 -0
  97. package/dist/core/credentials.d.ts +24 -0
  98. package/dist/core/credentials.js +30 -0
  99. package/dist/core/credentials.js.map +1 -0
  100. package/dist/core/dashboard.d.ts +9 -0
  101. package/dist/core/dashboard.js +20 -0
  102. package/dist/core/dashboard.js.map +1 -0
  103. package/dist/core/emit.d.ts +7 -0
  104. package/dist/core/emit.js +23 -0
  105. package/dist/core/emit.js.map +1 -0
  106. package/dist/core/hash.d.ts +2 -0
  107. package/dist/core/hash.js +6 -0
  108. package/dist/core/hash.js.map +1 -0
  109. package/dist/core/pipeline.d.ts +25 -0
  110. package/dist/core/pipeline.js +122 -0
  111. package/dist/core/pipeline.js.map +1 -0
  112. package/dist/core/publish.d.ts +31 -0
  113. package/dist/core/publish.js +87 -0
  114. package/dist/core/publish.js.map +1 -0
  115. package/dist/core/resolve.d.ts +42 -0
  116. package/dist/core/resolve.js +128 -0
  117. package/dist/core/resolve.js.map +1 -0
  118. package/dist/core/serve.d.ts +5 -0
  119. package/dist/core/serve.js +52 -0
  120. package/dist/core/serve.js.map +1 -0
  121. package/dist/core/types.d.ts +117 -0
  122. package/dist/core/types.js +9 -0
  123. package/dist/core/types.js.map +1 -0
  124. package/dist/core/version.d.ts +23 -0
  125. package/dist/core/version.js +102 -0
  126. package/dist/core/version.js.map +1 -0
  127. package/dist/mcp/server.d.ts +7 -0
  128. package/dist/mcp/server.js +224 -0
  129. package/dist/mcp/server.js.map +1 -0
  130. package/package.json +57 -0
@@ -0,0 +1,355 @@
1
+ import { readdirSync, readFileSync, existsSync, statSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { Project, Node, SyntaxKind, ts } from "ts-morph";
4
+ /**
5
+ * Shared React/JSX parsing for all React-family adapters (next-app, next-pages,
6
+ * react-router, …). Only file→screen discovery differs per framework; the JSX
7
+ * signal extraction (Link/NavLink/<a>, router.push, navigate(), fetch, query
8
+ * hooks, form/button/input, .map lists) is identical, so it lives here.
9
+ */
10
+ let _project = null;
11
+ /** Shared ts-morph project (lazy). allowJs + React JSX so .jsx/.tsx all parse. */
12
+ export function project() {
13
+ if (!_project)
14
+ _project = new Project({
15
+ useInMemoryFileSystem: false,
16
+ skipAddingFilesFromTsConfig: true,
17
+ compilerOptions: { allowJs: true, jsx: ts.JsxEmit.React },
18
+ });
19
+ return _project;
20
+ }
21
+ /** Add a file to the shared project, reusing it if already added (parse is idempotent). */
22
+ export function sourceFileFor(absPath) {
23
+ return project().getSourceFile(absPath) ?? project().addSourceFileAtPath(absPath);
24
+ }
25
+ /** True if any of `names` is a (dev)dependency in the project's package.json. */
26
+ export function hasDependency(projectRoot, ...names) {
27
+ try {
28
+ const pkg = JSON.parse(readFileSync(join(projectRoot, "package.json"), "utf8"));
29
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
30
+ return names.some((n) => n in deps);
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ /**
37
+ * A non-Next React SPA that happens to use a `pages/`-style folder shouldn't be read as
38
+ * Next.js. True when react-router is a dependency and Next.js is not — the Next adapters
39
+ * bow out in that case (the dependency signal beats the directory-name heuristic).
40
+ */
41
+ export function isReactRouterSpa(projectRoot) {
42
+ return hasDependency(projectRoot, "react-router-dom", "react-router") && !hasDependency(projectRoot, "next");
43
+ }
44
+ /**
45
+ * A React Native / Expo project. Expo Router uses an `app/` dir just like Next's app-router,
46
+ * so the Next adapters must bow out when this is true (the dependency signal disambiguates).
47
+ */
48
+ export function isReactNativeApp(projectRoot) {
49
+ return hasDependency(projectRoot, "react-native", "expo");
50
+ }
51
+ /**
52
+ * A Remix / React Router 7 (framework mode) project. Routes live in `app/routes/`, so the
53
+ * `app/` dir would otherwise make the Next app-router adapter claim it — the dependency signal
54
+ * (`@remix-run/*` or `@react-router/dev`) disambiguates, so the Next adapters bow out.
55
+ */
56
+ export function isRemixApp(projectRoot) {
57
+ return hasDependency(projectRoot, "@remix-run/react", "@remix-run/node", "@remix-run/dev", "@react-router/dev");
58
+ }
59
+ /**
60
+ * A Vue/Nuxt project. Nuxt also uses a `pages/` dir, which would otherwise make the Next
61
+ * pages-router adapter claim it — so the Next adapters bow out when this is true.
62
+ */
63
+ export function isVueApp(projectRoot) {
64
+ return hasDependency(projectRoot, "vue", "nuxt");
65
+ }
66
+ /**
67
+ * An Astro project. Astro uses `src/pages/`, which the Next pages-router adapter would otherwise
68
+ * claim — so the Next adapters bow out when `astro` is a dependency.
69
+ */
70
+ export function isAstroApp(projectRoot) {
71
+ return hasDependency(projectRoot, "astro");
72
+ }
73
+ /**
74
+ * An Angular project. Angular's conventional `src/app/` dir collides with Next's app-router,
75
+ * so the Next adapters bow out when `@angular/core`/`@angular/router` is a dependency.
76
+ */
77
+ export function isAngularApp(projectRoot) {
78
+ return hasDependency(projectRoot, "@angular/core", "@angular/router");
79
+ }
80
+ /**
81
+ * A Rails project. Rails' `app/` dir collides with Next's app-router; detect by `config/routes.rb`
82
+ * (Rails has no package.json) or a Gemfile that pulls in rails, so the Next adapters bow out.
83
+ */
84
+ export function isRailsApp(projectRoot) {
85
+ if (existsSync(join(projectRoot, "config", "routes.rb")))
86
+ return true;
87
+ const gemfile = join(projectRoot, "Gemfile");
88
+ try {
89
+ return existsSync(gemfile) && /\bgem\s+["']rails["']/.test(readFileSync(gemfile, "utf8"));
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ }
95
+ /**
96
+ * An Android/Compose project. Gradle's `app/` module dir collides with Next's app-router
97
+ * convention, so the Next adapters must bow out. Android projects have no package.json, so
98
+ * detect by Gradle build files (build.gradle / build.gradle.kts / settings.gradle*).
99
+ */
100
+ export function isAndroidApp(projectRoot) {
101
+ return (existsSync(join(projectRoot, "build.gradle.kts")) ||
102
+ existsSync(join(projectRoot, "build.gradle")) ||
103
+ existsSync(join(projectRoot, "settings.gradle.kts")) ||
104
+ existsSync(join(projectRoot, "settings.gradle")) ||
105
+ existsSync(join(projectRoot, "app", "build.gradle.kts")) ||
106
+ existsSync(join(projectRoot, "app", "build.gradle")));
107
+ }
108
+ // ---------- component → source-file resolution (shared by config-driven adapters) ----------
109
+ /** React/JS source extensions, in resolution-priority order. */
110
+ export const SOURCE_EXTS = [".tsx", ".ts", ".jsx", ".js"];
111
+ const SOURCE_RE = /\.(tsx|jsx|ts|js)$/;
112
+ /**
113
+ * Map each importable name in a file to its module specifier — covers default and named
114
+ * static imports plus `const X = lazy(() => import("…"))`. Used to turn a route's referenced
115
+ * component identifier back into the file it lives in.
116
+ */
117
+ export function importMap(sf) {
118
+ const map = new Map();
119
+ for (const imp of sf.getImportDeclarations()) {
120
+ const spec = imp.getModuleSpecifierValue();
121
+ const def = imp.getDefaultImport();
122
+ if (def)
123
+ map.set(def.getText(), spec);
124
+ for (const n of imp.getNamedImports())
125
+ map.set(n.getName(), spec);
126
+ }
127
+ for (const decl of sf.getDescendantsOfKind(SyntaxKind.VariableDeclaration)) {
128
+ const init = decl.getInitializer();
129
+ if (init && Node.isCallExpression(init) && init.getExpression().getText() === "lazy") {
130
+ const spec = dynamicImportSpecifier(init.getArguments()[0]);
131
+ if (spec)
132
+ map.set(decl.getName(), spec);
133
+ }
134
+ }
135
+ return map;
136
+ }
137
+ /** Resolve a relative module specifier (from `configDir`) to an on-disk source file, or null. */
138
+ export function resolveComponentFile(configDir, spec) {
139
+ if (!spec || !spec.startsWith("."))
140
+ return null; // only resolve local files
141
+ const base = resolve(configDir, spec);
142
+ const candidates = [...SOURCE_EXTS.map((e) => base + e), ...SOURCE_EXTS.map((e) => join(base, "index" + e))];
143
+ if (SOURCE_RE.test(base))
144
+ candidates.unshift(base);
145
+ return candidates.find((c) => existsSync(c) && statSync(c).isFile()) ?? null;
146
+ }
147
+ function dynamicImportSpecifier(arrowOrCall) {
148
+ if (!arrowOrCall)
149
+ return null;
150
+ for (const ce of arrowOrCall.getDescendantsOfKind(SyntaxKind.CallExpression)) {
151
+ if (ce.getExpression().getKind() === SyntaxKind.ImportKeyword) {
152
+ const a = ce.getArguments()[0];
153
+ if (a && Node.isStringLiteral(a))
154
+ return a.getLiteralValue();
155
+ }
156
+ }
157
+ return null;
158
+ }
159
+ /** Recursively visit every file under `dir`, skipping node_modules and dotfiles. */
160
+ export function walk(dir, onFile) {
161
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
162
+ if (entry.name === "node_modules" || entry.name.startsWith("."))
163
+ continue;
164
+ const full = join(dir, entry.name);
165
+ if (entry.isDirectory())
166
+ walk(full, onFile);
167
+ else
168
+ onFile(full);
169
+ }
170
+ }
171
+ /** Last path segment → Title Case, unwrapping dynamic `[slug]`/`:slug`. Shared route→title. */
172
+ export function titleFromRoute(route) {
173
+ if (route === "/" || route === "")
174
+ return "Home";
175
+ const last = route.split("/").filter(Boolean).pop() ?? route;
176
+ return last
177
+ .replace(/^\[(\.\.\.)?(.+?)\]$/, "$2") // [slug] / [...all] → slug / all
178
+ .replace(/^:(.+)$/, "$1") // :slug → slug (react-router dynamic)
179
+ .replace(/[-_]/g, " ")
180
+ .replace(/\b\w/g, (c) => c.toUpperCase());
181
+ }
182
+ // ---------- JSX parsing ----------
183
+ const NAV_HOOKS = new Set(["redirect", "permanentRedirect"]);
184
+ const QUERY_HOOKS = new Set(["useQuery", "useMutation", "useSWR", "useSWRMutation", "useInfiniteQuery"]);
185
+ const HTML_INPUTS = new Set(["input", "textarea", "select"]);
186
+ // Capitalized JSX tags that are framework nav primitives, not user components.
187
+ const NAV_COMPONENTS = new Set(["Link", "NavLink", "Navigate"]);
188
+ /** Parse one React/JSX screen file into raw nav/call/feature signals. */
189
+ export function parseReactScreen(sf) {
190
+ const navs = [];
191
+ const calls = [];
192
+ const features = [];
193
+ const components = new Set();
194
+ const navImports = importedFrom(sf, "next/navigation");
195
+ const routerVars = collectHookVars(sf, "useRouter"); // next / expo-router: router.push/replace/navigate
196
+ const navigateVars = collectHookVars(sf, "useNavigate"); // react-router: navigate()
197
+ const navigationVars = collectHookVars(sf, "useNavigation"); // react-navigation: navigation.navigate(...)
198
+ navigationVars.add("navigation"); // react-navigation passes `navigation` as a screen prop by convention
199
+ // expo-router exposes a global `router` (import { router } from "expo-router") — treat like a useRouter() var.
200
+ for (const imp of sf.getImportDeclarations()) {
201
+ if (imp.getModuleSpecifierValue() === "expo-router") {
202
+ for (const n of imp.getNamedImports())
203
+ if (n.getName() === "router")
204
+ routerVars.add("router");
205
+ }
206
+ }
207
+ const elements = [
208
+ ...sf.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
209
+ ...sf.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
210
+ ];
211
+ for (const el of elements) {
212
+ const tag = el.getTagNameNode().getText();
213
+ const line = el.getStartLineNumber();
214
+ if (tag === "Link" || tag === "NavLink" || tag === "a") {
215
+ // Next uses href; react-router uses to. Accept either.
216
+ const href = attrString(el, "href");
217
+ const to = attrString(el, "to");
218
+ const attrName = href !== undefined ? "href" : "to";
219
+ navs.push({
220
+ target: href ?? to ?? null,
221
+ raw: snippet(el.getText()),
222
+ trigger: tag === "a" ? "<a href>" : `<${tag} ${attrName}>`,
223
+ line,
224
+ });
225
+ }
226
+ else if (tag === "Navigate") {
227
+ navs.push({ target: attrString(el, "to") ?? null, raw: snippet(el.getText()), trigger: "<Navigate to>", line });
228
+ }
229
+ else if (tag === "form") {
230
+ features.push({ kind: "form", label: "Form", detail: "form", line });
231
+ }
232
+ else if (tag === "button" || tag === "Button") {
233
+ const text = Node.isJsxOpeningElement(el) ? jsxText(el) : "";
234
+ features.push({ kind: "button", label: text || "Button", detail: tag, line });
235
+ }
236
+ else if (HTML_INPUTS.has(tag)) {
237
+ const label = attrString(el, "placeholder") ?? attrString(el, "name") ?? tag;
238
+ features.push({ kind: "input", label, detail: tag, line });
239
+ }
240
+ if (/^[A-Z]/.test(tag) && !NAV_COMPONENTS.has(tag))
241
+ components.add(tag);
242
+ }
243
+ for (const ce of sf.getDescendantsOfKind(SyntaxKind.CallExpression)) {
244
+ const expr = ce.getExpression();
245
+ const line = ce.getStartLineNumber();
246
+ const args = ce.getArguments();
247
+ if (Node.isPropertyAccessExpression(expr)) {
248
+ const obj = expr.getExpression().getText();
249
+ const name = expr.getName();
250
+ if (routerVars.has(obj) && (name === "push" || name === "replace" || name === "navigate")) {
251
+ navs.push({ target: literalString(args[0]), raw: snippet(ce.getText()), trigger: `router.${name}`, line });
252
+ }
253
+ else if (navigationVars.has(obj) && (name === "navigate" || name === "push" || name === "replace")) {
254
+ navs.push({ target: literalString(args[0]), raw: snippet(ce.getText()), trigger: `navigation.${name}`, line });
255
+ }
256
+ else if (name === "map" && callbackReturnsJsx(args)) {
257
+ features.push({ kind: "list", label: "List", detail: `${obj}.map`, line });
258
+ }
259
+ continue;
260
+ }
261
+ if (Node.isIdentifier(expr)) {
262
+ const fn = expr.getText();
263
+ if (navigateVars.has(fn)) {
264
+ navs.push({ target: literalString(args[0]), raw: snippet(ce.getText()), trigger: "navigate()", line });
265
+ }
266
+ else if (fn === "fetch") {
267
+ calls.push({ url: literalString(args[0]), method: fetchMethod(args[1]), raw: snippet(ce.getText()), trigger: "fetch", line });
268
+ }
269
+ else if (NAV_HOOKS.has(fn) && navImports.has(fn)) {
270
+ navs.push({ target: literalString(args[0]), raw: snippet(ce.getText()), trigger: `${fn}()`, line });
271
+ }
272
+ else if (QUERY_HOOKS.has(fn)) {
273
+ calls.push({ url: null, raw: snippet(ce.getText()), trigger: fn, line });
274
+ }
275
+ }
276
+ }
277
+ return { navs, calls, features, components: [...components].sort(), contains: [] };
278
+ }
279
+ function snippet(text) {
280
+ const flat = text.replace(/\s+/g, " ").trim();
281
+ return flat.length > 80 ? flat.slice(0, 77) + "..." : flat;
282
+ }
283
+ function importedFrom(sf, moduleSpecifier) {
284
+ const names = new Set();
285
+ for (const imp of sf.getImportDeclarations()) {
286
+ if (imp.getModuleSpecifierValue() !== moduleSpecifier)
287
+ continue;
288
+ for (const n of imp.getNamedImports())
289
+ names.add(n.getName());
290
+ }
291
+ return names;
292
+ }
293
+ /** Vars bound to a `const x = useXxx()` call — e.g. useRouter → router, useNavigate → navigate. */
294
+ function collectHookVars(sf, hook) {
295
+ const vars = new Set();
296
+ for (const decl of sf.getDescendantsOfKind(SyntaxKind.VariableDeclaration)) {
297
+ const init = decl.getInitializer();
298
+ if (init && Node.isCallExpression(init) && init.getExpression().getText() === hook) {
299
+ vars.add(decl.getName());
300
+ }
301
+ }
302
+ return vars;
303
+ }
304
+ function literalString(arg) {
305
+ if (arg && Node.isStringLiteral(arg))
306
+ return arg.getLiteralValue();
307
+ return null;
308
+ }
309
+ function attrString(el, name) {
310
+ const attr = el.getAttribute(name);
311
+ if (!attr || !Node.isJsxAttribute(attr))
312
+ return undefined;
313
+ const init = attr.getInitializer();
314
+ if (!init)
315
+ return undefined;
316
+ if (Node.isStringLiteral(init))
317
+ return init.getLiteralValue();
318
+ if (Node.isJsxExpression(init)) {
319
+ const inner = init.getExpression();
320
+ if (inner && Node.isStringLiteral(inner))
321
+ return inner.getLiteralValue();
322
+ }
323
+ return undefined;
324
+ }
325
+ function jsxText(opening) {
326
+ const parent = opening.getParent();
327
+ if (!parent || !Node.isJsxElement(parent))
328
+ return "";
329
+ return parent
330
+ .getJsxChildren()
331
+ .filter((c) => c.getKind() === SyntaxKind.JsxText)
332
+ .map((c) => c.getText().trim())
333
+ .filter(Boolean)
334
+ .join(" ")
335
+ .trim();
336
+ }
337
+ function fetchMethod(arg) {
338
+ if (!arg || !Node.isObjectLiteralExpression(arg))
339
+ return undefined;
340
+ const prop = arg.getProperty("method");
341
+ if (prop && Node.isPropertyAssignment(prop)) {
342
+ const init = prop.getInitializer();
343
+ if (init && Node.isStringLiteral(init))
344
+ return init.getLiteralValue();
345
+ }
346
+ return undefined;
347
+ }
348
+ function callbackReturnsJsx(args) {
349
+ const cb = args[0];
350
+ if (!cb || (!Node.isArrowFunction(cb) && !Node.isFunctionExpression(cb)))
351
+ return false;
352
+ return (cb.getDescendantsOfKind(SyntaxKind.JsxElement).length > 0 ||
353
+ cb.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).length > 0);
354
+ }
355
+ //# sourceMappingURL=react-jsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-jsx.js","sourceRoot":"","sources":["../../../src/core/adapters/react-jsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { FrameworkAdapter } from "./types.js";
2
+ export declare const reactNavigationAdapter: FrameworkAdapter;
@@ -0,0 +1,153 @@
1
+ import { readFileSync, existsSync, statSync } from "node:fs";
2
+ import { join, relative, sep, dirname } from "node:path";
3
+ import { Node } from "ts-morph";
4
+ import { sourceFileFor, walk, parseReactScreen, titleFromRoute, hasDependency, importMap, resolveComponentFile } from "./react-jsx.js";
5
+ /**
6
+ * React Navigation adapter (React Native, config-based). Screens are *registered*, not
7
+ * file-based: `<Stack.Screen name="Home" component={HomeScreen} />` (also Tab/Drawer/any
8
+ * `*.Screen`). discover() reads each registration, maps name→component, resolves the
9
+ * component to its source file; parse() then runs the shared react-jsx parser.
10
+ *
11
+ * Screen id = the route `name` (what `navigation.navigate("Home")` targets, so transitions
12
+ * resolve). Entry = the nearest `<*.Navigator initialRouteName>`, else the first registered.
13
+ *
14
+ * Containment: a screen whose component renders a navigator (e.g. a Tab/Drawer navigator)
15
+ * "contains" that navigator's child `*.Screen`s — surfaced as contains edges (parent → tabs),
16
+ * mirroring the SwiftUI TabView behaviour.
17
+ */
18
+ const SOURCE_RE = /\.(tsx|jsx|ts|js)$/;
19
+ const CONFIG_HINT = /\.Screen[\s/>]|\.Navigator[\s>]|create\w*Navigator/;
20
+ export const reactNavigationAdapter = {
21
+ id: "react-native",
22
+ router: "react-navigation",
23
+ // Expo Router is registered first; this is the non-Expo React Navigation path.
24
+ detect(projectRoot) {
25
+ return hasDependency(projectRoot, "@react-navigation/native");
26
+ },
27
+ discover(projectRoot) {
28
+ const root = srcRootOf(projectRoot);
29
+ const byName = new Map();
30
+ let entryName = null;
31
+ walk(root, (file) => {
32
+ if (!SOURCE_RE.test(file))
33
+ return;
34
+ const src = safeRead(file);
35
+ if (!CONFIG_HINT.test(src))
36
+ return; // cheap pre-filter before parsing
37
+ const sf = sourceFileFor(file);
38
+ const { registrations, initialRouteName } = collectRegistrations(sf);
39
+ if (registrations.length === 0)
40
+ return;
41
+ if (initialRouteName && !entryName)
42
+ entryName = initialRouteName;
43
+ const imports = importMap(sf);
44
+ const dir = dirname(file);
45
+ for (const { name, component } of registrations) {
46
+ if (byName.has(name))
47
+ continue; // first registration wins
48
+ const abs = component ? resolveComponentFile(dir, imports.get(component)) : null;
49
+ if (!abs)
50
+ continue; // can't open the component → can't extract signals; skip
51
+ byName.set(name, {
52
+ absPath: abs,
53
+ relPath: relative(projectRoot, abs).split(sep).join("/"),
54
+ id: name,
55
+ route: name,
56
+ title: titleFromRoute(name),
57
+ isEntry: false,
58
+ });
59
+ }
60
+ });
61
+ const files = [...byName.values()];
62
+ // Entry: initialRouteName if it resolved to a real screen, else the first registered.
63
+ const entry = (entryName && byName.get(entryName)) || files[0];
64
+ if (entry)
65
+ entry.isEntry = true;
66
+ return files.sort((a, b) => a.route.localeCompare(b.route));
67
+ },
68
+ parse(file) {
69
+ const sf = sourceFileFor(file.absPath);
70
+ const signals = parseReactScreen(sf);
71
+ // If this screen's component renders a navigator (Tab/Drawer/Stack), its child
72
+ // `<*.Screen name>` entries are structurally contained by this screen → contains edges
73
+ // (e.g. a Tab navigator's tabs). resolve.ts keeps only those that are real screens and
74
+ // aren't already navigate targets, so this is safe to over-supply.
75
+ const children = collectRegistrations(sf).registrations
76
+ .map((r) => r.name)
77
+ .filter((name) => name !== file.id);
78
+ return { ...signals, contains: [...new Set([...signals.contains, ...children])] };
79
+ },
80
+ };
81
+ // ---------- registration extraction ----------
82
+ /**
83
+ * Collect `<*.Screen name component>` registrations and any `<*.Navigator initialRouteName>`.
84
+ * Single descendant pass; attributes are read immediately (ts-morph node wrappers can go
85
+ * stale if the tree is re-queried — same caveat the react-router adapter documents).
86
+ */
87
+ function collectRegistrations(sf) {
88
+ const registrations = [];
89
+ let initialRouteName = null;
90
+ for (const node of sf.getDescendants()) {
91
+ let el = null;
92
+ if (Node.isJsxOpeningElement(node) || Node.isJsxSelfClosingElement(node))
93
+ el = node;
94
+ if (!el)
95
+ continue;
96
+ const tag = el.getTagNameNode().getText();
97
+ if (tag.endsWith(".Screen")) {
98
+ const name = jsxStringAttr(el, "name");
99
+ if (name)
100
+ registrations.push({ name, component: jsxIdentAttr(el, "component") });
101
+ }
102
+ else if (tag.endsWith(".Navigator")) {
103
+ const ir = jsxStringAttr(el, "initialRouteName");
104
+ if (ir && !initialRouteName)
105
+ initialRouteName = ir;
106
+ }
107
+ }
108
+ return { registrations, initialRouteName };
109
+ }
110
+ // ---------- helpers ----------
111
+ function srcRootOf(projectRoot) {
112
+ const src = join(projectRoot, "src");
113
+ return existsSync(src) && statSync(src).isDirectory() ? src : projectRoot;
114
+ }
115
+ /** String-valued JSX attribute (`name="Home"` or `name={"Home"}`). */
116
+ function jsxStringAttr(el, name) {
117
+ const attr = el.getAttribute(name);
118
+ if (!attr || !Node.isJsxAttribute(attr))
119
+ return null;
120
+ const init = attr.getInitializer();
121
+ if (!init)
122
+ return null;
123
+ if (Node.isStringLiteral(init))
124
+ return init.getLiteralValue();
125
+ if (Node.isJsxExpression(init)) {
126
+ const inner = init.getExpression();
127
+ if (inner && Node.isStringLiteral(inner))
128
+ return inner.getLiteralValue();
129
+ }
130
+ return null;
131
+ }
132
+ /** Identifier-valued JSX attribute (`component={HomeScreen}`) → "HomeScreen". */
133
+ function jsxIdentAttr(el, name) {
134
+ const attr = el.getAttribute(name);
135
+ if (!attr || !Node.isJsxAttribute(attr))
136
+ return null;
137
+ const init = attr.getInitializer();
138
+ if (init && Node.isJsxExpression(init)) {
139
+ const inner = init.getExpression();
140
+ if (inner && Node.isIdentifier(inner))
141
+ return inner.getText();
142
+ }
143
+ return null;
144
+ }
145
+ function safeRead(file) {
146
+ try {
147
+ return readFileSync(file, "utf8");
148
+ }
149
+ catch {
150
+ return "";
151
+ }
152
+ }
153
+ //# sourceMappingURL=react-navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-navigation.js","sourceRoot":"","sources":["../../../src/core/adapters/react-navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { FrameworkAdapter } from "./types.js";
2
+ export declare const reactRouterAdapter: FrameworkAdapter;