@danielfgray/pg-sourcerer 0.2.2 → 0.4.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 (307) hide show
  1. package/bin/pgsourcerer +2 -0
  2. package/dist/__tests__/fixtures/index.d.ts +15 -0
  3. package/dist/__tests__/fixtures/index.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/index.js +19 -0
  5. package/dist/__tests__/fixtures/index.js.map +1 -0
  6. package/dist/__tests__/fixtures/introspection.json +40522 -0
  7. package/dist/cli.d.ts +0 -1
  8. package/dist/cli.js +7 -46
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +38 -5
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +13 -2
  13. package/dist/config.js.map +1 -1
  14. package/dist/{lib/conjure.d.ts → conjure/index.d.ts} +62 -3
  15. package/dist/conjure/index.d.ts.map +1 -0
  16. package/dist/{lib/conjure.js → conjure/index.js} +124 -3
  17. package/dist/conjure/index.js.map +1 -0
  18. package/dist/conjure/signature.d.ts +85 -0
  19. package/dist/conjure/signature.d.ts.map +1 -0
  20. package/dist/conjure/signature.js +130 -0
  21. package/dist/conjure/signature.js.map +1 -0
  22. package/dist/conjure/types.d.ts +97 -0
  23. package/dist/conjure/types.d.ts.map +1 -0
  24. package/dist/conjure/types.js +206 -0
  25. package/dist/conjure/types.js.map +1 -0
  26. package/dist/errors.d.ts +114 -139
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +82 -36
  29. package/dist/errors.js.map +1 -1
  30. package/dist/generate.d.ts +45 -46
  31. package/dist/generate.d.ts.map +1 -1
  32. package/dist/generate.js +86 -59
  33. package/dist/generate.js.map +1 -1
  34. package/dist/hex/builder.d.ts +12 -0
  35. package/dist/hex/builder.d.ts.map +1 -0
  36. package/dist/hex/builder.js +64 -0
  37. package/dist/hex/builder.js.map +1 -0
  38. package/dist/hex/ddl.d.ts +53 -0
  39. package/dist/hex/ddl.d.ts.map +1 -0
  40. package/dist/hex/ddl.js +306 -0
  41. package/dist/hex/ddl.js.map +1 -0
  42. package/dist/hex/index.d.ts +105 -0
  43. package/dist/hex/index.d.ts.map +1 -0
  44. package/dist/hex/index.js +81 -0
  45. package/dist/hex/index.js.map +1 -0
  46. package/dist/hex/primitives.d.ts +23 -0
  47. package/dist/hex/primitives.d.ts.map +1 -0
  48. package/dist/hex/primitives.js +38 -0
  49. package/dist/hex/primitives.js.map +1 -0
  50. package/dist/hex/query.d.ts +116 -0
  51. package/dist/hex/query.d.ts.map +1 -0
  52. package/dist/hex/query.js +219 -0
  53. package/dist/hex/query.js.map +1 -0
  54. package/dist/hex/types.d.ts +287 -0
  55. package/dist/hex/types.d.ts.map +1 -0
  56. package/dist/hex/types.js +431 -0
  57. package/dist/hex/types.js.map +1 -0
  58. package/dist/index.d.ts +17 -25
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +33 -44
  61. package/dist/index.js.map +1 -1
  62. package/dist/init.d.ts.map +1 -1
  63. package/dist/init.js +76 -140
  64. package/dist/init.js.map +1 -1
  65. package/dist/ir/extensions/queries.d.ts +6 -6
  66. package/dist/ir/extensions/queries.d.ts.map +1 -1
  67. package/dist/ir/extensions/queries.js +6 -4
  68. package/dist/ir/extensions/queries.js.map +1 -1
  69. package/dist/ir/extensions/schema-builder.d.ts.map +1 -1
  70. package/dist/ir/extensions/schema-builder.js.map +1 -1
  71. package/dist/ir/index.d.ts.map +1 -1
  72. package/dist/ir/index.js.map +1 -1
  73. package/dist/ir/relation-graph.d.ts.map +1 -1
  74. package/dist/ir/relation-graph.js +8 -8
  75. package/dist/ir/relation-graph.js.map +1 -1
  76. package/dist/ir/semantic-ir.d.ts +38 -0
  77. package/dist/ir/semantic-ir.d.ts.map +1 -1
  78. package/dist/ir/semantic-ir.js +50 -2
  79. package/dist/ir/semantic-ir.js.map +1 -1
  80. package/dist/ir/smart-tags.d.ts.map +1 -1
  81. package/dist/ir/smart-tags.js.map +1 -1
  82. package/dist/lib/field-utils.d.ts.map +1 -1
  83. package/dist/lib/field-utils.js +7 -7
  84. package/dist/lib/field-utils.js.map +1 -1
  85. package/dist/lib/join-graph.d.ts +95 -0
  86. package/dist/lib/join-graph.d.ts.map +1 -0
  87. package/dist/lib/join-graph.js +305 -0
  88. package/dist/lib/join-graph.js.map +1 -0
  89. package/dist/lib/picker.d.ts +60 -0
  90. package/dist/lib/picker.d.ts.map +1 -0
  91. package/dist/lib/picker.js +325 -0
  92. package/dist/lib/picker.js.map +1 -0
  93. package/dist/plugins/arktype.d.ts +20 -24
  94. package/dist/plugins/arktype.d.ts.map +1 -1
  95. package/dist/plugins/arktype.js +462 -386
  96. package/dist/plugins/arktype.js.map +1 -1
  97. package/dist/plugins/effect/http.d.ts +7 -0
  98. package/dist/plugins/effect/http.d.ts.map +1 -0
  99. package/dist/plugins/effect/http.js +460 -0
  100. package/dist/plugins/effect/http.js.map +1 -0
  101. package/dist/plugins/effect/index.d.ts +22 -0
  102. package/dist/plugins/effect/index.d.ts.map +1 -0
  103. package/dist/plugins/effect/index.js +65 -0
  104. package/dist/plugins/effect/index.js.map +1 -0
  105. package/dist/plugins/effect/models.d.ts +6 -0
  106. package/dist/plugins/effect/models.d.ts.map +1 -0
  107. package/dist/plugins/effect/models.js +116 -0
  108. package/dist/plugins/effect/models.js.map +1 -0
  109. package/dist/plugins/effect/repos.d.ts +21 -0
  110. package/dist/plugins/effect/repos.d.ts.map +1 -0
  111. package/dist/plugins/effect/repos.js +131 -0
  112. package/dist/plugins/effect/repos.js.map +1 -0
  113. package/dist/plugins/effect/schemas.d.ts +7 -0
  114. package/dist/plugins/effect/schemas.d.ts.map +1 -0
  115. package/dist/plugins/effect/schemas.js +75 -0
  116. package/dist/plugins/effect/schemas.js.map +1 -0
  117. package/dist/plugins/effect/shared.d.ts +116 -0
  118. package/dist/plugins/effect/shared.d.ts.map +1 -0
  119. package/dist/plugins/effect/shared.js +164 -0
  120. package/dist/plugins/effect/shared.js.map +1 -0
  121. package/dist/plugins/http-elysia.d.ts +20 -27
  122. package/dist/plugins/http-elysia.d.ts.map +1 -1
  123. package/dist/plugins/http-elysia.js +350 -475
  124. package/dist/plugins/http-elysia.js.map +1 -1
  125. package/dist/plugins/http-express.d.ts +20 -31
  126. package/dist/plugins/http-express.d.ts.map +1 -1
  127. package/dist/plugins/http-express.js +281 -268
  128. package/dist/plugins/http-express.js.map +1 -1
  129. package/dist/plugins/http-hono.d.ts +17 -33
  130. package/dist/plugins/http-hono.d.ts.map +1 -1
  131. package/dist/plugins/http-hono.js +317 -341
  132. package/dist/plugins/http-hono.js.map +1 -1
  133. package/dist/plugins/http-orpc.d.ts +34 -33
  134. package/dist/plugins/http-orpc.d.ts.map +1 -1
  135. package/dist/plugins/http-orpc.js +345 -257
  136. package/dist/plugins/http-orpc.js.map +1 -1
  137. package/dist/plugins/http-trpc.d.ts +33 -35
  138. package/dist/plugins/http-trpc.d.ts.map +1 -1
  139. package/dist/plugins/http-trpc.js +337 -241
  140. package/dist/plugins/http-trpc.js.map +1 -1
  141. package/dist/plugins/kysely.d.ts +54 -59
  142. package/dist/plugins/kysely.d.ts.map +1 -1
  143. package/dist/plugins/kysely.js +826 -687
  144. package/dist/plugins/kysely.js.map +1 -1
  145. package/dist/plugins/sql-queries.d.ts +38 -44
  146. package/dist/plugins/sql-queries.d.ts.map +1 -1
  147. package/dist/plugins/sql-queries.js +497 -897
  148. package/dist/plugins/sql-queries.js.map +1 -1
  149. package/dist/plugins/types.d.ts +12 -20
  150. package/dist/plugins/types.d.ts.map +1 -1
  151. package/dist/plugins/types.js +84 -227
  152. package/dist/plugins/types.js.map +1 -1
  153. package/dist/plugins/valibot.d.ts +7 -44
  154. package/dist/plugins/valibot.d.ts.map +1 -1
  155. package/dist/plugins/valibot.js +376 -382
  156. package/dist/plugins/valibot.js.map +1 -1
  157. package/dist/plugins/zod.d.ts +20 -24
  158. package/dist/plugins/zod.d.ts.map +1 -1
  159. package/dist/plugins/zod.js +370 -367
  160. package/dist/plugins/zod.js.map +1 -1
  161. package/dist/runtime/emit.d.ts +64 -0
  162. package/dist/runtime/emit.d.ts.map +1 -0
  163. package/dist/runtime/emit.js +445 -0
  164. package/dist/runtime/emit.js.map +1 -0
  165. package/dist/runtime/errors.d.ts +36 -0
  166. package/dist/runtime/errors.d.ts.map +1 -0
  167. package/dist/runtime/errors.js +29 -0
  168. package/dist/runtime/errors.js.map +1 -0
  169. package/dist/runtime/file-assignment.d.ts +161 -0
  170. package/dist/runtime/file-assignment.d.ts.map +1 -0
  171. package/dist/runtime/file-assignment.js +195 -0
  172. package/dist/runtime/file-assignment.js.map +1 -0
  173. package/dist/runtime/orchestrator.d.ts +62 -0
  174. package/dist/runtime/orchestrator.d.ts.map +1 -0
  175. package/dist/runtime/orchestrator.js +99 -0
  176. package/dist/runtime/orchestrator.js.map +1 -0
  177. package/dist/runtime/registry.d.ts +268 -0
  178. package/dist/runtime/registry.d.ts.map +1 -0
  179. package/dist/runtime/registry.js +436 -0
  180. package/dist/runtime/registry.js.map +1 -0
  181. package/dist/runtime/types.d.ts +182 -0
  182. package/dist/runtime/types.d.ts.map +1 -0
  183. package/dist/runtime/types.js +2 -0
  184. package/dist/runtime/types.js.map +1 -0
  185. package/dist/runtime/validation.d.ts +41 -0
  186. package/dist/runtime/validation.d.ts.map +1 -0
  187. package/dist/runtime/validation.js +70 -0
  188. package/dist/runtime/validation.js.map +1 -0
  189. package/dist/services/config-loader.d.ts.map +1 -1
  190. package/dist/services/config-loader.js +15 -6
  191. package/dist/services/config-loader.js.map +1 -1
  192. package/dist/services/config.d.ts +55 -25
  193. package/dist/services/config.d.ts.map +1 -1
  194. package/dist/services/config.js +60 -34
  195. package/dist/services/config.js.map +1 -1
  196. package/dist/services/file-writer.d.ts +3 -3
  197. package/dist/services/file-writer.d.ts.map +1 -1
  198. package/dist/services/file-writer.js +6 -8
  199. package/dist/services/file-writer.js.map +1 -1
  200. package/dist/services/inflection.d.ts +126 -27
  201. package/dist/services/inflection.d.ts.map +1 -1
  202. package/dist/services/inflection.js +300 -72
  203. package/dist/services/inflection.js.map +1 -1
  204. package/dist/services/introspection.d.ts.map +1 -1
  205. package/dist/services/introspection.js +6 -6
  206. package/dist/services/introspection.js.map +1 -1
  207. package/dist/services/ir-builder.d.ts.map +1 -1
  208. package/dist/services/ir-builder.js +73 -77
  209. package/dist/services/ir-builder.js.map +1 -1
  210. package/dist/services/ir.d.ts.map +1 -1
  211. package/dist/services/ir.js.map +1 -1
  212. package/dist/services/pg-types.d.ts.map +1 -1
  213. package/dist/services/pg-types.js +3 -3
  214. package/dist/services/pg-types.js.map +1 -1
  215. package/dist/services/smart-tags-parser.d.ts.map +1 -1
  216. package/dist/services/smart-tags-parser.js +4 -4
  217. package/dist/services/smart-tags-parser.js.map +1 -1
  218. package/dist/services/type-hints.d.ts.map +1 -1
  219. package/dist/services/type-hints.js +1 -1
  220. package/dist/services/type-hints.js.map +1 -1
  221. package/dist/services/user-module-parser.d.ts +46 -0
  222. package/dist/services/user-module-parser.d.ts.map +1 -0
  223. package/dist/services/user-module-parser.js +181 -0
  224. package/dist/services/user-module-parser.js.map +1 -0
  225. package/dist/shared/converters.d.ts +60 -0
  226. package/dist/shared/converters.d.ts.map +1 -0
  227. package/dist/shared/converters.js +168 -0
  228. package/dist/shared/converters.js.map +1 -0
  229. package/dist/shared/query-types.d.ts +95 -0
  230. package/dist/shared/query-types.d.ts.map +1 -0
  231. package/dist/shared/query-types.js +9 -0
  232. package/dist/shared/query-types.js.map +1 -0
  233. package/dist/testing.d.ts +125 -37
  234. package/dist/testing.d.ts.map +1 -1
  235. package/dist/testing.js +134 -42
  236. package/dist/testing.js.map +1 -1
  237. package/dist/user-module.d.ts +86 -0
  238. package/dist/user-module.d.ts.map +1 -0
  239. package/dist/user-module.js +55 -0
  240. package/dist/user-module.js.map +1 -0
  241. package/package.json +10 -6
  242. package/dist/lib/conjure.d.ts.map +0 -1
  243. package/dist/lib/conjure.js.map +0 -1
  244. package/dist/lib/hex.d.ts +0 -119
  245. package/dist/lib/hex.d.ts.map +0 -1
  246. package/dist/lib/hex.js +0 -188
  247. package/dist/lib/hex.js.map +0 -1
  248. package/dist/plugins/effect.d.ts +0 -53
  249. package/dist/plugins/effect.d.ts.map +0 -1
  250. package/dist/plugins/effect.js +0 -1074
  251. package/dist/plugins/effect.js.map +0 -1
  252. package/dist/plugins/kysely/queries.d.ts +0 -92
  253. package/dist/plugins/kysely/queries.d.ts.map +0 -1
  254. package/dist/plugins/kysely/queries.js +0 -1169
  255. package/dist/plugins/kysely/queries.js.map +0 -1
  256. package/dist/plugins/kysely/shared.d.ts +0 -59
  257. package/dist/plugins/kysely/shared.d.ts.map +0 -1
  258. package/dist/plugins/kysely/shared.js +0 -247
  259. package/dist/plugins/kysely/shared.js.map +0 -1
  260. package/dist/plugins/kysely/types.d.ts +0 -22
  261. package/dist/plugins/kysely/types.d.ts.map +0 -1
  262. package/dist/plugins/kysely/types.js +0 -428
  263. package/dist/plugins/kysely/types.js.map +0 -1
  264. package/dist/services/artifact-store.d.ts +0 -65
  265. package/dist/services/artifact-store.d.ts.map +0 -1
  266. package/dist/services/artifact-store.js +0 -57
  267. package/dist/services/artifact-store.js.map +0 -1
  268. package/dist/services/core-providers.d.ts +0 -15
  269. package/dist/services/core-providers.d.ts.map +0 -1
  270. package/dist/services/core-providers.js +0 -23
  271. package/dist/services/core-providers.js.map +0 -1
  272. package/dist/services/emissions.d.ts +0 -103
  273. package/dist/services/emissions.d.ts.map +0 -1
  274. package/dist/services/emissions.js +0 -241
  275. package/dist/services/emissions.js.map +0 -1
  276. package/dist/services/execution.d.ts +0 -35
  277. package/dist/services/execution.d.ts.map +0 -1
  278. package/dist/services/execution.js +0 -86
  279. package/dist/services/execution.js.map +0 -1
  280. package/dist/services/file-builder.d.ts +0 -85
  281. package/dist/services/file-builder.d.ts.map +0 -1
  282. package/dist/services/file-builder.js +0 -112
  283. package/dist/services/file-builder.js.map +0 -1
  284. package/dist/services/plugin-meta.d.ts +0 -33
  285. package/dist/services/plugin-meta.d.ts.map +0 -1
  286. package/dist/services/plugin-meta.js +0 -24
  287. package/dist/services/plugin-meta.js.map +0 -1
  288. package/dist/services/plugin-runner.d.ts +0 -42
  289. package/dist/services/plugin-runner.d.ts.map +0 -1
  290. package/dist/services/plugin-runner.js +0 -84
  291. package/dist/services/plugin-runner.js.map +0 -1
  292. package/dist/services/plugin.d.ts +0 -421
  293. package/dist/services/plugin.d.ts.map +0 -1
  294. package/dist/services/plugin.js +0 -197
  295. package/dist/services/plugin.js.map +0 -1
  296. package/dist/services/resolution.d.ts +0 -38
  297. package/dist/services/resolution.d.ts.map +0 -1
  298. package/dist/services/resolution.js +0 -242
  299. package/dist/services/resolution.js.map +0 -1
  300. package/dist/services/service-registry.d.ts +0 -74
  301. package/dist/services/service-registry.d.ts.map +0 -1
  302. package/dist/services/service-registry.js +0 -61
  303. package/dist/services/service-registry.js.map +0 -1
  304. package/dist/services/symbols.d.ts +0 -144
  305. package/dist/services/symbols.d.ts.map +0 -1
  306. package/dist/services/symbols.js +0 -144
  307. package/dist/services/symbols.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"field-utils.js","sourceRoot":"","sources":["../../src/lib/field-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-utils.js","sourceRoot":"","sources":["../../src/lib/field-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import type { SemanticIR, TableEntity, IndexDef } from "../ir/semantic-ir.js";
2
+ /**
3
+ * Direction of a join edge - which side has the FK
4
+ */
5
+ export type JoinDirection = "forward" | "reverse";
6
+ /**
7
+ * A joinable edge in the graph - represents one way to join two tables
8
+ */
9
+ export interface JoinEdge {
10
+ /** Target entity name (what we're joining TO) */
11
+ readonly targetEntity: string;
12
+ /** Direction: forward = we have FK, reverse = they have FK to us */
13
+ readonly direction: JoinDirection;
14
+ /** Cardinality: many-to-one or one-to-many */
15
+ readonly cardinality: "many-to-one" | "one-to-many" | "one-to-one";
16
+ /** Original constraint name (for debugging) */
17
+ readonly constraintName: string;
18
+ /** Column mappings for the join condition */
19
+ readonly columns: readonly {
20
+ readonly local: string;
21
+ readonly foreign: string;
22
+ }[];
23
+ /** Suggested alias based on relationship semantics */
24
+ readonly suggestedAlias?: string;
25
+ }
26
+ /**
27
+ * Join path - a sequence of edges from source to destination
28
+ */
29
+ export interface JoinPath {
30
+ /** Starting entity */
31
+ readonly from: string;
32
+ /** Sequence of edges to traverse */
33
+ readonly edges: readonly JoinEdge[];
34
+ /** Table aliases for each step (including start) */
35
+ readonly aliases: readonly string[];
36
+ }
37
+ /**
38
+ * Index info for filter suggestions
39
+ */
40
+ export interface FilterableIndex {
41
+ readonly entityName: string;
42
+ readonly columns: readonly string[];
43
+ readonly isUnique: boolean;
44
+ readonly isPartial: boolean;
45
+ readonly method: IndexDef["method"];
46
+ }
47
+ /**
48
+ * Suggested foreign key based on naming patterns and type analysis
49
+ */
50
+ export interface ForeignKeySuggestion {
51
+ /** Column name that could be a foreign key */
52
+ readonly column: string;
53
+ /** Suggested target table name */
54
+ readonly targetTable: string;
55
+ /** Suggested target column (typically the PK) */
56
+ readonly targetColumn: string;
57
+ /** Confidence level based on heuristics */
58
+ readonly confidence: "high" | "medium" | "low";
59
+ /** Reason for the suggestion */
60
+ readonly reason: string;
61
+ }
62
+ /**
63
+ * The JoinGraph provides navigation APIs for building queries
64
+ */
65
+ export interface JoinGraph {
66
+ /** Get all entities in the graph */
67
+ readonly entities: ReadonlyMap<string, TableEntity>;
68
+ /** Get joinable edges from an entity */
69
+ readonly getEdges: (entityName: string) => readonly JoinEdge[];
70
+ /** Get a specific entity */
71
+ readonly getEntity: (name: string) => TableEntity | undefined;
72
+ /** Find shortest path between two entities (BFS) */
73
+ readonly findPath: (from: string, to: string) => JoinPath | undefined;
74
+ /** Get all reachable entities from a starting point */
75
+ readonly getReachable: (from: string, maxDepth?: number) => ReadonlySet<string>;
76
+ /** Get indexes that could be used for filtering on an entity */
77
+ readonly getFilterableIndexes: (entityName: string) => readonly FilterableIndex[];
78
+ /** Suggest foreign keys based on column naming and type patterns */
79
+ readonly suggestForeignKeys: (entityName: string) => readonly ForeignKeySuggestion[];
80
+ /** Generate SQL JOIN clause from a path */
81
+ readonly toJoinClause: (path: JoinPath) => string;
82
+ }
83
+ /**
84
+ * Create a JoinGraph from SemanticIR
85
+ */
86
+ export declare function createJoinGraph(ir: SemanticIR): JoinGraph;
87
+ /**
88
+ * Format an edge for display in picker
89
+ */
90
+ export declare function formatEdge(edge: JoinEdge): string;
91
+ /**
92
+ * Format edge with more detail
93
+ */
94
+ export declare function formatEdgeDetail(edge: JoinEdge): string;
95
+ //# sourceMappingURL=join-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-graph.d.ts","sourceRoot":"","sources":["../../src/lib/join-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,305 @@
1
+ import { isTableEntity, getAllRelations } from "../ir/semantic-ir.js";
2
+ import { inflect } from "../services/inflection.js";
3
+ // =============================================================================
4
+ // Implementation
5
+ // =============================================================================
6
+ /**
7
+ * Build edge from a forward (belongsTo) relation
8
+ */
9
+ function edgeFromBelongsTo(rel) {
10
+ return {
11
+ targetEntity: rel.targetEntity,
12
+ direction: "forward",
13
+ cardinality: "many-to-one",
14
+ constraintName: rel.constraintName,
15
+ columns: rel.columns,
16
+ suggestedAlias: inferAliasFromConstraint(rel.constraintName, rel.targetEntity),
17
+ };
18
+ }
19
+ /**
20
+ * Build edge from a reverse (hasMany) relation
21
+ */
22
+ function edgeFromHasMany(rel) {
23
+ return {
24
+ targetEntity: rel.sourceEntity,
25
+ direction: "reverse",
26
+ cardinality: rel.kind === "hasOne" ? "one-to-one" : "one-to-many",
27
+ constraintName: rel.constraintName,
28
+ columns: rel.columns,
29
+ suggestedAlias: inferAliasFromConstraint(rel.constraintName, rel.sourceEntity),
30
+ };
31
+ }
32
+ /**
33
+ * Infer a reasonable alias from constraint name or target
34
+ */
35
+ function inferAliasFromConstraint(constraintName, targetEntity) {
36
+ // Extract meaningful part from constraint name like "posts_user_id_fkey"
37
+ // We want something short and meaningful
38
+ const parts = constraintName.replace(/_fkey$/, "").split("_");
39
+ // If constraint has a meaningful relationship hint, use it
40
+ // e.g., "comments_parent_id_fkey" -> could suggest "parent"
41
+ const targetLower = targetEntity.toLowerCase();
42
+ const hintPart = parts.find(p => p !== targetLower && p.length > 2 && !["id", "idx", "key"].includes(p));
43
+ if (hintPart && hintPart !== parts[0]) {
44
+ return hintPart;
45
+ }
46
+ // Fall back to lowercase target entity
47
+ return targetEntity.charAt(0).toLowerCase() + targetEntity.slice(1);
48
+ }
49
+ function analyzeColumnForFk(entityName, columnName, columnType, entities) {
50
+ const colLower = columnName.toLowerCase();
51
+ for (const [targetName, targetEntity] of entities) {
52
+ if (targetName === entityName)
53
+ continue;
54
+ if (!isTableEntity(targetEntity))
55
+ continue;
56
+ const targetLower = targetName.toLowerCase();
57
+ const targetPk = targetEntity.primaryKey;
58
+ const targetPkColumn = targetPk?.columns[0];
59
+ if (!targetPkColumn)
60
+ continue;
61
+ const targetField = targetEntity.shapes.row.fields.find(f => f.columnName === targetPkColumn);
62
+ const targetType = targetField?.pgAttribute.getType()?.typname;
63
+ const idSuffixes = ["_id", "_ids", "id", "_by", "_at"];
64
+ const isLikelyFkColumn = idSuffixes.some(suffix => colLower.endsWith(suffix)) || colLower.includes("_ref_");
65
+ if (!isLikelyFkColumn)
66
+ continue;
67
+ const singularTarget = inflect.singularize(targetLower);
68
+ const pluralTarget = inflect.pluralize(targetLower);
69
+ const possibleTargets = [targetLower, singularTarget, pluralTarget, targetName];
70
+ const matchingTarget = possibleTargets.find(t => {
71
+ const patterns = [
72
+ `${t}_id`,
73
+ `${t}id`,
74
+ `${t}_ids`,
75
+ `${t}_by`,
76
+ `${t}_at`,
77
+ `ref_${t}`,
78
+ ];
79
+ return patterns.some(p => colLower === p || colLower.endsWith(`_${p}`));
80
+ });
81
+ if (!matchingTarget)
82
+ continue;
83
+ if (columnType && targetType && !typesMatch(columnType, targetType)) {
84
+ continue;
85
+ }
86
+ const targetFieldForColumn = targetEntity.shapes.row.fields.find(f => f.columnName === targetPkColumn);
87
+ const confidence = determineConfidence(columnName, targetName, columnType, targetType, targetFieldForColumn);
88
+ return {
89
+ column: columnName,
90
+ targetTable: targetName,
91
+ targetColumn: targetPkColumn,
92
+ confidence,
93
+ reason: confidence === "high"
94
+ ? `Column "${columnName}" matches ${targetName}.${targetPkColumn} by naming convention`
95
+ : `Column "${columnName}" may reference ${targetName}.${targetPkColumn}`,
96
+ };
97
+ }
98
+ return null;
99
+ }
100
+ // Manual singularize/pluralize removed - now using inflect helpers from inflection service
101
+ function typesMatch(colType, targetType) {
102
+ if (colType === targetType)
103
+ return true;
104
+ const intTypes = new Set(["int2", "int4", "int8", "serial", "bigserial"]);
105
+ const uuidTypes = new Set(["uuid", "char", "bpchar"]);
106
+ const textTypes = new Set(["text", "varchar", "char"]);
107
+ if (intTypes.has(colType) && intTypes.has(targetType))
108
+ return true;
109
+ if (uuidTypes.has(colType) && uuidTypes.has(targetType))
110
+ return true;
111
+ if (textTypes.has(colType) && textTypes.has(targetType))
112
+ return true;
113
+ return false;
114
+ }
115
+ function determineConfidence(columnName, targetName, columnType, targetType, targetField) {
116
+ const colLower = columnName.toLowerCase();
117
+ const targetLower = targetName.toLowerCase();
118
+ const singularTarget = inflect.singularize(targetLower);
119
+ const exactMatch = colLower === `${targetLower}_id` || colLower === `${singularTarget}_id`;
120
+ const typeMatch = columnType && targetType && typesMatch(columnType, targetType);
121
+ const nonNullable = targetField && !targetField.nullable;
122
+ if (exactMatch && typeMatch) {
123
+ return nonNullable ? "high" : "medium";
124
+ }
125
+ if (exactMatch || (typeMatch && colLower.includes(targetLower))) {
126
+ return "medium";
127
+ }
128
+ return "low";
129
+ }
130
+ /**
131
+ * Create a JoinGraph from SemanticIR
132
+ */
133
+ export function createJoinGraph(ir) {
134
+ // Build entity map (tables/views only)
135
+ const entities = new Map();
136
+ for (const [name, entity] of ir.entities) {
137
+ if (isTableEntity(entity)) {
138
+ entities.set(name, entity);
139
+ }
140
+ }
141
+ // Pre-compute edges for each entity
142
+ const edgeCache = new Map();
143
+ const getEdges = (entityName) => {
144
+ const cached = edgeCache.get(entityName);
145
+ if (cached)
146
+ return cached;
147
+ const rels = getAllRelations(ir, entityName);
148
+ if (!rels)
149
+ return [];
150
+ const edges = [
151
+ ...rels.belongsTo.map(edgeFromBelongsTo),
152
+ ...rels.hasMany.map(edgeFromHasMany),
153
+ ];
154
+ edgeCache.set(entityName, edges);
155
+ return edges;
156
+ };
157
+ const getEntity = (name) => entities.get(name);
158
+ // BFS to find shortest path
159
+ const findPath = (from, to) => {
160
+ if (from === to) {
161
+ return { from, edges: [], aliases: [from] };
162
+ }
163
+ if (!entities.has(from) || !entities.has(to)) {
164
+ return undefined;
165
+ }
166
+ const visited = new Set([from]);
167
+ const queue = [
168
+ { entity: from, path: [], aliases: [from.toLowerCase()] },
169
+ ];
170
+ while (queue.length > 0) {
171
+ const current = queue.shift();
172
+ const edges = getEdges(current.entity);
173
+ for (const edge of edges) {
174
+ if (visited.has(edge.targetEntity))
175
+ continue;
176
+ const newPath = [...current.path, edge];
177
+ const newAliases = [...current.aliases, edge.suggestedAlias ?? edge.targetEntity.toLowerCase()];
178
+ if (edge.targetEntity === to) {
179
+ return { from, edges: newPath, aliases: newAliases };
180
+ }
181
+ visited.add(edge.targetEntity);
182
+ queue.push({ entity: edge.targetEntity, path: newPath, aliases: newAliases });
183
+ }
184
+ }
185
+ return undefined;
186
+ };
187
+ // Get all reachable entities via BFS
188
+ const getReachable = (from, maxDepth = Infinity) => {
189
+ const result = new Set();
190
+ const visited = new Set([from]);
191
+ const queue = [{ entity: from, depth: 0 }];
192
+ while (queue.length > 0) {
193
+ const { entity, depth } = queue.shift();
194
+ result.add(entity);
195
+ if (depth >= maxDepth)
196
+ continue;
197
+ for (const edge of getEdges(entity)) {
198
+ if (!visited.has(edge.targetEntity)) {
199
+ visited.add(edge.targetEntity);
200
+ queue.push({ entity: edge.targetEntity, depth: depth + 1 });
201
+ }
202
+ }
203
+ }
204
+ return result;
205
+ };
206
+ // Get indexes useful for filtering
207
+ const getFilterableIndexes = (entityName) => {
208
+ const entity = entities.get(entityName);
209
+ if (!entity)
210
+ return [];
211
+ return entity.indexes.map(idx => ({
212
+ entityName,
213
+ columns: idx.columns,
214
+ isUnique: idx.isUnique,
215
+ isPartial: idx.isPartial,
216
+ method: idx.method,
217
+ }));
218
+ };
219
+ // Generate SQL JOIN clause
220
+ const toJoinClause = (path) => {
221
+ if (path.edges.length === 0) {
222
+ return `FROM ${entities.get(path.from)?.pgName ?? path.from} AS ${path.aliases[0]}`;
223
+ }
224
+ const clauses = [];
225
+ const startEntity = entities.get(path.from);
226
+ clauses.push(`FROM ${startEntity?.pgName ?? path.from} AS ${path.aliases[0]}`);
227
+ for (let i = 0; i < path.edges.length; i++) {
228
+ const edge = path.edges[i];
229
+ const alias = path.aliases[i + 1];
230
+ const prevAlias = path.aliases[i];
231
+ const targetEntity = entities.get(edge.targetEntity);
232
+ const tableName = targetEntity?.pgName ?? edge.targetEntity;
233
+ // Build ON clause
234
+ const onConditions = edge.columns.map(col => {
235
+ if (edge.direction === "forward") {
236
+ // We have the FK: our local column matches their foreign column
237
+ return `${prevAlias}.${col.local} = ${alias}.${col.foreign}`;
238
+ }
239
+ else {
240
+ // They have FK to us: their foreign column matches our local column
241
+ return `${alias}.${col.foreign} = ${prevAlias}.${col.local}`;
242
+ }
243
+ });
244
+ // Use LEFT JOIN for one-to-many (reverse) to not filter out rows without children
245
+ const joinType = edge.direction === "reverse" ? "LEFT JOIN" : "JOIN";
246
+ clauses.push(`${joinType} ${tableName} AS ${alias} ON ${onConditions.join(" AND ")}`);
247
+ }
248
+ return clauses.join("\n ");
249
+ };
250
+ const suggestForeignKeys = (entityName) => {
251
+ const entity = entities.get(entityName);
252
+ if (!entity)
253
+ return [];
254
+ const suggestions = [];
255
+ const existingFkColumns = new Set();
256
+ for (const rel of entity.relations) {
257
+ if (rel.kind === "belongsTo") {
258
+ for (const col of rel.columns) {
259
+ existingFkColumns.add(col.local);
260
+ }
261
+ }
262
+ }
263
+ for (const field of entity.shapes.row.fields) {
264
+ if (existingFkColumns.has(field.columnName))
265
+ continue;
266
+ const suggestion = analyzeColumnForFk(entityName, field.columnName, field.pgAttribute.getType()?.typname, entities);
267
+ if (suggestion) {
268
+ suggestions.push(suggestion);
269
+ }
270
+ }
271
+ return suggestions.sort((a, b) => {
272
+ const confidenceOrder = { high: 0, medium: 1, low: 2 };
273
+ return confidenceOrder[a.confidence] - confidenceOrder[b.confidence];
274
+ });
275
+ };
276
+ return {
277
+ entities,
278
+ getEdges,
279
+ getEntity,
280
+ findPath,
281
+ getReachable,
282
+ getFilterableIndexes,
283
+ suggestForeignKeys,
284
+ toJoinClause,
285
+ };
286
+ }
287
+ // =============================================================================
288
+ // Formatting utilities for TUI
289
+ // =============================================================================
290
+ /**
291
+ * Format an edge for display in picker
292
+ */
293
+ export function formatEdge(edge) {
294
+ const arrow = edge.direction === "forward" ? "->" : "<-";
295
+ const cardinality = edge.cardinality === "one-to-many" ? "[*]" : "[1]";
296
+ return `${arrow} ${edge.targetEntity} ${cardinality}`;
297
+ }
298
+ /**
299
+ * Format edge with more detail
300
+ */
301
+ export function formatEdgeDetail(edge) {
302
+ const cols = edge.columns.map(c => `${c.local} = ${c.foreign}`).join(", ");
303
+ return `via ${edge.constraintName} (${cols})`;
304
+ }
305
+ //# sourceMappingURL=join-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-graph.js","sourceRoot":"","sources":["../../src/lib/join-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { BoxRenderable, InputRenderable, SelectRenderable, TextRenderable, type BoxOptions, type InputRenderableOptions, type SelectRenderableOptions, type CliRenderer, type RenderContext, type StyledText } from "@opentui/core";
2
+ interface RequiredBaseRow {
3
+ label: string;
4
+ id?: string | number;
5
+ description?: string;
6
+ }
7
+ interface RowListProps<T extends RequiredBaseRow> {
8
+ rows: T[];
9
+ filterPlaceholder?: string;
10
+ focused?: "input" | "list";
11
+ wrapSelection?: boolean;
12
+ showDescription?: boolean;
13
+ fastScrollStep?: number;
14
+ preview?: PreviewOptions<T>;
15
+ colors?: {
16
+ input?: Partial<Pick<InputRenderableOptions, "backgroundColor" | "textColor" | "focusedBackgroundColor" | "focusedTextColor" | "placeholderColor" | "cursorColor">>;
17
+ select?: Partial<Pick<SelectRenderableOptions, "backgroundColor" | "textColor" | "focusedBackgroundColor" | "focusedTextColor" | "selectedBackgroundColor" | "selectedTextColor" | "descriptionColor" | "selectedDescriptionColor" | "itemSpacing" | "fastScrollStep">>;
18
+ preview?: {
19
+ backgroundColor?: string;
20
+ textColor?: string;
21
+ borderColor?: string;
22
+ };
23
+ };
24
+ style?: {
25
+ container?: Partial<BoxOptions>;
26
+ filter?: Partial<InputRenderableOptions>;
27
+ list?: Partial<SelectRenderableOptions>;
28
+ };
29
+ onSelect: (rows: T[], indices: number[]) => void;
30
+ }
31
+ interface RowListInstance<T extends RequiredBaseRow> {
32
+ container: BoxRenderable;
33
+ input: InputRenderable;
34
+ list: SelectRenderable;
35
+ previewBox?: BoxRenderable;
36
+ previewText?: TextRenderable;
37
+ setRows: (rows: T[]) => void;
38
+ focus: (which: "input" | "list") => void;
39
+ destroy: () => void;
40
+ getSelectedRows: () => T[];
41
+ clearSelection: () => void;
42
+ updatePreview: (row: T | undefined) => void;
43
+ }
44
+ type PreviewPosition = "right" | "bottom" | "none";
45
+ export interface PreviewOptions<T> {
46
+ position?: PreviewPosition;
47
+ width?: number | `${number}%`;
48
+ height?: number | `${number}%`;
49
+ title?: string;
50
+ onPreview?: (row: T, SelectedRows: T[]) => string | StyledText | undefined;
51
+ }
52
+ export interface PickerOptions<T extends RequiredBaseRow> {
53
+ filterPlaceholder?: string;
54
+ preview?: PreviewOptions<T>;
55
+ }
56
+ declare function createRowList<T extends RequiredBaseRow>(ctx: CliRenderer | RenderContext, { rows, filterPlaceholder, focused, wrapSelection, showDescription, fastScrollStep, preview, colors, style, onSelect, }: RowListProps<T>): RowListInstance<T>;
57
+ export declare function picker<T extends RequiredBaseRow>(rows: T[], options?: PickerOptions<T>): Promise<null | T[]>;
58
+ export { createRowList };
59
+ export type { RowListProps, RowListInstance };
60
+ //# sourceMappingURL=picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../src/lib/picker.ts"],"names":[],"mappings":"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"}