@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
package/dist/generate.js CHANGED
@@ -5,8 +5,10 @@
5
5
  * 1. Load config
6
6
  * 2. Introspect database
7
7
  * 3. Build IR
8
- * 4. Run providers
9
- * 5. Write files
8
+ * 4. Run plugins
9
+ * 5. Validate user module imports
10
+ * 6. Emit files
11
+ * 7. Write files
10
12
  *
11
13
  * Logging:
12
14
  * - Effect.log (INFO) - Progress messages shown by default
@@ -14,9 +16,12 @@
14
16
  *
15
17
  * Configure via Logger.withMinimumLogLevel at the call site.
16
18
  */
17
- import { Effect, Layer } from "effect";
19
+ import path from "node:path";
20
+ import { Effect, Layer, Schema } from "effect";
18
21
  import { Command } from "@effect/platform";
19
- import { runPlugins } from "./services/plugin-runner.js";
22
+ import { NodeFileSystem } from "@effect/platform-node";
23
+ import { runPlugins } from "./runtime/orchestrator.js";
24
+ import { emitFiles } from "./runtime/emit.js";
20
25
  import { ConfigService } from "./services/config.js";
21
26
  import { DatabaseIntrospectionService, DatabaseIntrospectionLive, } from "./services/introspection.js";
22
27
  import { createIRBuilderService } from "./services/ir-builder.js";
@@ -24,25 +29,30 @@ import { createFileWriter } from "./services/file-writer.js";
24
29
  import { createInflection, makeInflectionLayer } from "./services/inflection.js";
25
30
  import { createTypeHintRegistry } from "./services/type-hints.js";
26
31
  import { getEnumEntities, getTableEntities, getDomainEntities, getCompositeEntities, } from "./ir/semantic-ir.js";
27
- import { FormatError, } from "./errors.js";
32
+ import { createUserModuleParser } from "./services/user-module-parser.js";
33
+ export class FormatError extends Schema.TaggedError()("FormatError", {
34
+ message: Schema.String,
35
+ path: Schema.String,
36
+ cause: Schema.optional(Schema.Unknown),
37
+ }) {
38
+ }
28
39
  /**
29
40
  * Run a formatter command on the output directory.
30
41
  * Spawns a subprocess and fails if it exits non-zero.
31
42
  * Output is piped to the parent process's stdout/stderr.
32
43
  */
33
44
  const runFormatter = (command, outputDir) => {
34
- // Parse command string into program and args, append outputDir
35
45
  const parts = command.split(/\s+/).filter(Boolean);
36
46
  const program = parts[0] ?? "echo";
37
47
  const args = parts.slice(1);
38
48
  const cmd = Command.make(program, ...args, outputDir).pipe(Command.stdout("inherit"), Command.stderr("inherit"), Command.runInShell(true));
39
- return Command.exitCode(cmd).pipe(Effect.flatMap((code) => code === 0
49
+ return Command.exitCode(cmd).pipe(Effect.flatMap(code => code === 0
40
50
  ? Effect.void
41
51
  : Effect.fail(new FormatError({
42
52
  message: `Formatter command failed with exit code ${code}: ${command} ${outputDir}`,
43
53
  path: outputDir,
44
54
  cause: new Error(`Exit code: ${code}`),
45
- }))), Effect.mapError((cause) => cause instanceof FormatError
55
+ }))), Effect.mapError(cause => cause instanceof FormatError
46
56
  ? cause
47
57
  : new FormatError({
48
58
  message: `Formatter command failed: ${command} ${outputDir}`,
@@ -50,41 +60,72 @@ const runFormatter = (command, outputDir) => {
50
60
  cause,
51
61
  })));
52
62
  };
63
+ /**
64
+ * Collect all unique UserModuleRefs from rendered symbols.
65
+ */
66
+ function collectUserModuleRefs(rendered) {
67
+ const seen = new Set();
68
+ const refs = [];
69
+ for (const symbol of rendered) {
70
+ const withImports = symbol;
71
+ if (!withImports.userImports)
72
+ continue;
73
+ for (const ref of withImports.userImports) {
74
+ // Only validate refs that have validate: true (default)
75
+ if (ref.validate === false)
76
+ continue;
77
+ // Dedupe by path (we only need to validate each file once)
78
+ if (!seen.has(ref.path)) {
79
+ seen.add(ref.path);
80
+ refs.push(ref);
81
+ }
82
+ }
83
+ }
84
+ return refs;
85
+ }
86
+ /**
87
+ * Validate all user module imports.
88
+ * Resolves paths relative to configDir and checks that exports exist.
89
+ */
90
+ const validateUserModules = (refs, configDir) => Effect.gen(function* () {
91
+ if (refs.length === 0)
92
+ return;
93
+ const parser = createUserModuleParser();
94
+ for (const ref of refs) {
95
+ const absolutePath = path.resolve(configDir, ref.path);
96
+ yield* parser.validateImports(absolutePath, ref);
97
+ }
98
+ });
53
99
  /**
54
100
  * The main generate pipeline.
55
101
  *
56
102
  * Config is provided via ConfigService layer (Effect DI).
57
- * Use ConfigFromFile or ConfigWithInit layers depending on context.
103
+ * Use ConfigFromFile or ConfigWithFallback layers depending on context.
58
104
  */
59
105
  export const generate = (options = {}) => Effect.gen(function* () {
60
- // 1. Get configuration from Effect context (DI)
61
106
  yield* Effect.logDebug("Loading configuration...");
62
107
  const config = yield* ConfigService;
63
108
  yield* Effect.logDebug(`Config schemas: ${config.schemas.join(", ")}`);
64
109
  yield* Effect.logDebug(`Config plugins: ${config.plugins.length}`);
65
- // 2. Introspect database
66
110
  yield* Effect.log("Introspecting database...");
67
111
  const dbService = yield* DatabaseIntrospectionService;
68
112
  const introspection = yield* dbService.introspect({
69
113
  connectionString: config.connectionString,
70
114
  role: config.role,
71
115
  });
72
- const tables = introspection.classes.filter((c) => c.relkind === "r");
73
- const views = introspection.classes.filter((c) => c.relkind === "v");
116
+ const tables = introspection.classes.filter(c => c.relkind === "r");
117
+ const views = introspection.classes.filter(c => c.relkind === "v");
74
118
  yield* Effect.log(`Found ${tables.length} tables, ${views.length} views`);
75
119
  if (tables.length > 0) {
76
- const tableNames = tables.map((t) => t.relname).sort();
120
+ const tableNames = tables.map(t => t.relname).sort();
77
121
  yield* Effect.logDebug(`Tables: ${tableNames.join(", ")}`);
78
122
  }
79
123
  if (views.length > 0) {
80
- const viewNames = views.map((v) => v.relname).sort();
124
+ const viewNames = views.map(v => v.relname).sort();
81
125
  yield* Effect.logDebug(`Views: ${viewNames.join(", ")}`);
82
126
  }
83
- // 3. Build IR with user's inflection config
84
127
  yield* Effect.log("Building semantic IR...");
85
128
  const irBuilder = createIRBuilderService();
86
- // Create inflection from config (or use defaults)
87
- const inflection = createInflection(config.inflection);
88
129
  const inflectionLayer = makeInflectionLayer(config.inflection);
89
130
  const ir = yield* irBuilder
90
131
  .build(introspection, {
@@ -96,10 +137,7 @@ export const generate = (options = {}) => Effect.gen(function* () {
96
137
  const tableEntities = getTableEntities(ir);
97
138
  const domainEntities = getDomainEntities(ir);
98
139
  const compositeEntities = getCompositeEntities(ir);
99
- const counts = [
100
- `${tableEntities.length} tables/views`,
101
- `${enumEntities.length} enums`,
102
- ];
140
+ const counts = [`${tableEntities.length} tables/views`, `${enumEntities.length} enums`];
103
141
  if (domainEntities.length > 0)
104
142
  counts.push(`${domainEntities.length} domains`);
105
143
  if (compositeEntities.length > 0)
@@ -110,80 +148,69 @@ export const generate = (options = {}) => Effect.gen(function* () {
110
148
  yield* Effect.logDebug(`Entities: ${entityNames.join(", ")}`);
111
149
  }
112
150
  if (enumEntities.length > 0) {
113
- const enumNames = enumEntities.map((e) => e.name).sort();
151
+ const enumNames = enumEntities.map(e => e.name).sort();
114
152
  yield* Effect.logDebug(`Enums: ${enumNames.join(", ")}`);
115
153
  }
116
- // 4. Run providers
117
154
  yield* Effect.log("Running plugins...");
118
- // Cast plugins from config to Plugin[]
119
155
  const plugins = config.plugins;
120
- yield* Effect.log(`Plugins: ${plugins.map((p) => p.name).join(", ")}`);
121
- // Create type hints registry from config
156
+ const pluginNames = plugins.map(p => p.name);
157
+ yield* Effect.log(`Plugins: ${pluginNames.join(", ")}`);
122
158
  const typeHints = createTypeHintRegistry(config.typeHints ?? []);
123
- const pluginResult = yield* runPlugins(plugins, {
159
+ const inflection = createInflection(config.inflection);
160
+ const pluginResult = yield* runPlugins({
161
+ plugins,
124
162
  ir,
125
163
  typeHints,
126
164
  inflection,
165
+ defaultFile: config.defaultFile,
166
+ outputDir: config.outputDir,
167
+ });
168
+ // Validate user module imports before emitting
169
+ if (config.configDir) {
170
+ const userModuleRefs = collectUserModuleRefs(pluginResult.rendered);
171
+ if (userModuleRefs.length > 0) {
172
+ yield* Effect.logDebug(`Validating ${userModuleRefs.length} user module import(s)...`);
173
+ yield* validateUserModules(userModuleRefs, config.configDir).pipe(Effect.provide(NodeFileSystem.layer));
174
+ }
175
+ }
176
+ const emittedFiles = emitFiles(pluginResult, {
177
+ configDir: config.configDir,
178
+ outputDir: options.outputDir ?? config.outputDir,
127
179
  });
128
- const emissions = pluginResult.emissions.getAll();
129
- yield* Effect.log(`Generated ${emissions.length} files`);
130
- // 5. Write files
180
+ yield* Effect.log(`Generated ${emittedFiles.length} files`);
131
181
  const outputDir = options.outputDir ?? config.outputDir;
132
182
  yield* Effect.log(`Writing to ${outputDir}...`);
133
183
  const writer = createFileWriter();
134
- const writeResults = yield* writer.writeAll(emissions, {
184
+ const writeResults = yield* writer.writeAll(emittedFiles, {
135
185
  outputDir,
136
186
  dryRun: options.dryRun ?? false,
137
187
  });
138
- // 6. Format files (if formatter provided and not dry run)
139
188
  if (config.formatter && !options.dryRun) {
140
189
  yield* Effect.log(`Formatting with: ${config.formatter} ${outputDir}`);
141
190
  yield* runFormatter(config.formatter, outputDir);
142
191
  yield* Effect.log("Formatting complete");
143
192
  }
144
- // Log each file at debug level
145
- yield* Effect.forEach(writeResults, (result) => {
146
- const status = options.dryRun
147
- ? "(dry run)"
148
- : result.written
149
- ? "✓"
150
- : "–";
193
+ yield* Effect.forEach(writeResults, result => {
194
+ const status = options.dryRun ? "(dry run)" : result.written ? "✓" : "–";
151
195
  return Effect.logDebug(`${status} ${result.path}`);
152
196
  }, { discard: true });
153
- const written = writeResults.filter((r) => r.written).length;
197
+ const written = writeResults.filter(r => r.written).length;
154
198
  const dryRunSuffix = options.dryRun ? " (dry run)" : "";
155
199
  yield* Effect.log(`Wrote ${written} files${dryRunSuffix}`);
156
200
  return {
157
201
  config,
158
202
  ir,
159
203
  pluginResult,
204
+ emittedFiles,
160
205
  writeResults,
161
206
  };
162
207
  });
163
208
  /**
164
209
  * Layer that provides database introspection for generate().
165
- *
166
- * Note: ConfigService is NOT included here - it must be provided separately
167
- * via ConfigFromFile, ConfigWithInit, or ConfigTest layers.
168
210
  */
169
211
  export const GenerateLive = Layer.effect(DatabaseIntrospectionService, DatabaseIntrospectionLive);
170
212
  /**
171
213
  * Run generate with database introspection provided.
172
- *
173
- * ConfigService must still be provided by the caller via one of:
174
- * - ConfigFromFile (load from disk, fail if not found)
175
- * - ConfigWithInit (load from disk, or run interactive init)
176
- * - ConfigTest (provide config directly for testing)
177
- *
178
- * @example
179
- * ```typescript
180
- * import { ConfigFromFile } from "./services/config.js"
181
- *
182
- * runGenerate({ dryRun: true }).pipe(
183
- * Effect.provide(ConfigFromFile()),
184
- * // ... platform layers
185
- * )
186
- * ```
187
214
  */
188
215
  export const runGenerate = (options = {}) => generate(options).pipe(Effect.provide(GenerateLive));
189
216
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Hex - Query Builder Functions
3
+ *
4
+ * Core declarative query building functions.
5
+ */
6
+ import type { SemanticIR } from "../ir/semantic-ir.js";
7
+ import type { QueryDescriptor } from "../shared/query-types.js";
8
+ import type { SelectSpec, MutationSpec, ParamSpec } from "./types.js";
9
+ export declare function select(ir: SemanticIR, spec: SelectSpec): QueryDescriptor;
10
+ export declare function mutate(ir: SemanticIR, spec: MutationSpec): QueryDescriptor;
11
+ export declare function call(ir: SemanticIR, funcName: string, args: ParamSpec[]): QueryDescriptor;
12
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/hex/builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAQpF,wBAAgB,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,eAAe,CAgBxE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,GAAG,eAAe,CAsB1E;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,eAAe,CA4BzF"}
@@ -0,0 +1,64 @@
1
+ import { createBuilderState, buildSelectQuery, buildMutationQuery, inferReturnFields, } from "./types.js";
2
+ export function select(ir, spec) {
3
+ const state = createBuilderState(ir);
4
+ const sql = buildSelectQuery(state, spec);
5
+ const returns = {
6
+ mode: "many",
7
+ fields: inferReturnFields(state, spec.selects),
8
+ };
9
+ return {
10
+ name: "",
11
+ entityName: "",
12
+ operation: "select",
13
+ sql,
14
+ params: state.params,
15
+ returns,
16
+ };
17
+ }
18
+ export function mutate(ir, spec) {
19
+ const state = createBuilderState(ir);
20
+ const sql = buildMutationQuery(state, spec);
21
+ const operation = spec.kind === "insert" ? "insert"
22
+ : spec.kind === "update" ? "update"
23
+ : spec.kind === "delete" ? "delete"
24
+ : "upsert";
25
+ const returns = {
26
+ mode: spec.returning ? "many" : "void",
27
+ fields: spec.returning ? inferReturnFields(state, spec.returning) : [],
28
+ };
29
+ return {
30
+ name: "",
31
+ entityName: "",
32
+ operation,
33
+ sql,
34
+ params: state.params,
35
+ returns,
36
+ };
37
+ }
38
+ export function call(ir, funcName, args) {
39
+ const state = createBuilderState(ir);
40
+ const placeholders = args.map(arg => {
41
+ const placeholder = `$${state.params.length + 1}`;
42
+ state.params.push({
43
+ name: arg.name,
44
+ pgType: arg.pgType,
45
+ tsType: arg.tsType ?? "unknown",
46
+ nullable: arg.nullable ?? false,
47
+ });
48
+ return placeholder;
49
+ });
50
+ const sql = `SELECT ${funcName}(${placeholders.join(", ")})`;
51
+ const returns = {
52
+ mode: "oneOrNone",
53
+ fields: [],
54
+ };
55
+ return {
56
+ name: "",
57
+ entityName: "",
58
+ operation: "select",
59
+ sql,
60
+ params: state.params,
61
+ returns,
62
+ };
63
+ }
64
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/hex/builder.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,MAAM,CAAC,EAAc,EAAE,IAAgB;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAqB;QAChC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;KAC/C,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,QAAQ;QACnB,GAAG;QACH,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAc,EAAE,IAAkB;IACvD,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;QACjD,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACnC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBACnC,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,OAAO,GAAqB;QAChC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACtC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;KACvE,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,EAAE;QACd,SAAS;QACT,GAAG;QACH,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAc,EAAE,QAAgB,EAAE,IAAiB;IACtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAClC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;YAC/B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK;SAChC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,UAAU,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7D,MAAM,OAAO,GAAqB;QAChC,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,QAAQ;QACnB,GAAG;QACH,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Hex - DDL Query Builder
3
+ *
4
+ * Declarative query builder for DDL statements (CREATE TABLE, ALTER TABLE, etc.).
5
+ * Integrates with SemanticIR for type-aware schema generation.
6
+ */
7
+ import type { SemanticIR } from "../ir/semantic-ir.js";
8
+ import type { CreateTableSpec, AlterTableSpec, IndexSpec, ForeignKeySpec, DropSpec } from "./types.js";
9
+ export { IndexMethod } from "./types.js";
10
+ export declare function createTable(_ir: SemanticIR, spec: CreateTableSpec): string;
11
+ export declare function createIndex(_ir: SemanticIR, tableName: string, index: IndexSpec, options?: {
12
+ concurrently?: boolean;
13
+ ifNotExists?: boolean;
14
+ schema?: string;
15
+ }): string;
16
+ export declare function createPrimaryKeyIndex(_ir: SemanticIR, tableName: string, columns: string[], indexName: string, options?: {
17
+ concurrently?: boolean;
18
+ schema?: string;
19
+ }): string;
20
+ export declare function addForeignKey(_ir: SemanticIR, tableName: string, foreignKey: ForeignKeySpec, options?: {
21
+ schema?: string;
22
+ }): string;
23
+ export declare function dropForeignKey(_ir: SemanticIR, tableName: string, constraintName: string, options?: {
24
+ schema?: string;
25
+ ifExists?: boolean;
26
+ cascade?: boolean;
27
+ }): string;
28
+ export declare function dropIndex(indexName: string, options?: {
29
+ ifExists?: boolean;
30
+ cascade?: boolean;
31
+ concurrently?: boolean;
32
+ }): string;
33
+ export declare function dropTable(tableName: string, options?: {
34
+ schema?: string;
35
+ ifExists?: boolean;
36
+ cascade?: boolean;
37
+ }): string;
38
+ export declare function alterTable(_ir: SemanticIR, spec: AlterTableSpec): string;
39
+ export declare function drop(spec: DropSpec): string;
40
+ export declare function renameTable(oldName: string, newName: string, options?: {
41
+ schema?: string;
42
+ }): string;
43
+ export declare function renameColumn(tableName: string, oldColumn: string, newColumn: string, options?: {
44
+ schema?: string;
45
+ }): string;
46
+ export declare function renameConstraint(tableName: string, oldConstraint: string, newConstraint: string, options?: {
47
+ schema?: string;
48
+ }): string;
49
+ export declare function setSchema(objectName: string, newSchema: string, options?: {
50
+ schema?: string;
51
+ cascade?: boolean;
52
+ }): string;
53
+ //# sourceMappingURL=ddl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl.d.ts","sourceRoot":"","sources":["../../src/hex/ddl.ts"],"names":[],"mappings":"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"}