@danielfgray/pg-sourcerer 0.2.1 → 0.3.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 (164) hide show
  1. package/dist/cli.js +3 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/errors.d.ts +14 -1
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/errors.js +2 -0
  10. package/dist/errors.js.map +1 -1
  11. package/dist/generate.d.ts +5 -9
  12. package/dist/generate.d.ts.map +1 -1
  13. package/dist/generate.js +27 -29
  14. package/dist/generate.js.map +1 -1
  15. package/dist/index.d.ts +19 -12
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +25 -13
  18. package/dist/index.js.map +1 -1
  19. package/dist/init.d.ts.map +1 -1
  20. package/dist/init.js +39 -9
  21. package/dist/init.js.map +1 -1
  22. package/dist/ir/extensions/queries.d.ts +264 -0
  23. package/dist/ir/extensions/queries.d.ts.map +1 -0
  24. package/dist/ir/extensions/queries.js +153 -0
  25. package/dist/ir/extensions/queries.js.map +1 -0
  26. package/dist/ir/extensions/schema-builder.d.ts +61 -0
  27. package/dist/ir/extensions/schema-builder.d.ts.map +1 -0
  28. package/dist/ir/extensions/schema-builder.js +5 -0
  29. package/dist/ir/extensions/schema-builder.js.map +1 -0
  30. package/dist/lib/conjure.d.ts +66 -0
  31. package/dist/lib/conjure.d.ts.map +1 -1
  32. package/dist/lib/conjure.js +127 -29
  33. package/dist/lib/conjure.js.map +1 -1
  34. package/dist/lib/hex.d.ts +10 -3
  35. package/dist/lib/hex.d.ts.map +1 -1
  36. package/dist/lib/hex.js +18 -8
  37. package/dist/lib/hex.js.map +1 -1
  38. package/dist/plugins/arktype.d.ts +27 -14
  39. package/dist/plugins/arktype.d.ts.map +1 -1
  40. package/dist/plugins/arktype.js +166 -130
  41. package/dist/plugins/arktype.js.map +1 -1
  42. package/dist/plugins/effect.d.ts +53 -0
  43. package/dist/plugins/effect.d.ts.map +1 -0
  44. package/dist/plugins/effect.js +1074 -0
  45. package/dist/plugins/effect.js.map +1 -0
  46. package/dist/plugins/http-elysia.d.ts +32 -0
  47. package/dist/plugins/http-elysia.d.ts.map +1 -0
  48. package/dist/plugins/http-elysia.js +613 -0
  49. package/dist/plugins/http-elysia.js.map +1 -0
  50. package/dist/plugins/http-express.d.ts +36 -0
  51. package/dist/plugins/http-express.d.ts.map +1 -0
  52. package/dist/plugins/http-express.js +388 -0
  53. package/dist/plugins/http-express.js.map +1 -0
  54. package/dist/plugins/http-hono.d.ts +36 -0
  55. package/dist/plugins/http-hono.d.ts.map +1 -0
  56. package/dist/plugins/http-hono.js +453 -0
  57. package/dist/plugins/http-hono.js.map +1 -0
  58. package/dist/plugins/http-orpc.d.ts +55 -0
  59. package/dist/plugins/http-orpc.d.ts.map +1 -0
  60. package/dist/plugins/http-orpc.js +370 -0
  61. package/dist/plugins/http-orpc.js.map +1 -0
  62. package/dist/plugins/http-trpc.d.ts +59 -0
  63. package/dist/plugins/http-trpc.d.ts.map +1 -0
  64. package/dist/plugins/http-trpc.js +392 -0
  65. package/dist/plugins/http-trpc.js.map +1 -0
  66. package/dist/plugins/kysely/queries.d.ts +92 -0
  67. package/dist/plugins/kysely/queries.d.ts.map +1 -0
  68. package/dist/plugins/kysely/queries.js +1169 -0
  69. package/dist/plugins/kysely/queries.js.map +1 -0
  70. package/dist/plugins/kysely/shared.d.ts +59 -0
  71. package/dist/plugins/kysely/shared.d.ts.map +1 -0
  72. package/dist/plugins/kysely/shared.js +247 -0
  73. package/dist/plugins/kysely/shared.js.map +1 -0
  74. package/dist/plugins/kysely/types.d.ts +22 -0
  75. package/dist/plugins/kysely/types.d.ts.map +1 -0
  76. package/dist/plugins/kysely/types.js +428 -0
  77. package/dist/plugins/kysely/types.js.map +1 -0
  78. package/dist/plugins/kysely.d.ts +72 -0
  79. package/dist/plugins/kysely.d.ts.map +1 -0
  80. package/dist/plugins/kysely.js +906 -0
  81. package/dist/plugins/kysely.js.map +1 -0
  82. package/dist/plugins/sql-queries.d.ts +55 -11
  83. package/dist/plugins/sql-queries.d.ts.map +1 -1
  84. package/dist/plugins/sql-queries.js +467 -218
  85. package/dist/plugins/sql-queries.js.map +1 -1
  86. package/dist/plugins/types.d.ts +20 -14
  87. package/dist/plugins/types.d.ts.map +1 -1
  88. package/dist/plugins/types.js +90 -112
  89. package/dist/plugins/types.js.map +1 -1
  90. package/dist/plugins/valibot.d.ts +45 -0
  91. package/dist/plugins/valibot.d.ts.map +1 -0
  92. package/dist/plugins/valibot.js +422 -0
  93. package/dist/plugins/valibot.js.map +1 -0
  94. package/dist/plugins/zod.d.ts +27 -14
  95. package/dist/plugins/zod.d.ts.map +1 -1
  96. package/dist/plugins/zod.js +231 -166
  97. package/dist/plugins/zod.js.map +1 -1
  98. package/dist/services/artifact-store.d.ts +11 -1
  99. package/dist/services/artifact-store.d.ts.map +1 -1
  100. package/dist/services/artifact-store.js +9 -0
  101. package/dist/services/artifact-store.js.map +1 -1
  102. package/dist/services/core-providers.d.ts +15 -0
  103. package/dist/services/core-providers.d.ts.map +1 -0
  104. package/dist/services/core-providers.js +23 -0
  105. package/dist/services/core-providers.js.map +1 -0
  106. package/dist/services/emissions.d.ts +14 -0
  107. package/dist/services/emissions.d.ts.map +1 -1
  108. package/dist/services/emissions.js +86 -47
  109. package/dist/services/emissions.js.map +1 -1
  110. package/dist/services/execution.d.ts +35 -0
  111. package/dist/services/execution.d.ts.map +1 -0
  112. package/dist/services/execution.js +86 -0
  113. package/dist/services/execution.js.map +1 -0
  114. package/dist/services/file-builder.d.ts +4 -0
  115. package/dist/services/file-builder.d.ts.map +1 -1
  116. package/dist/services/file-builder.js.map +1 -1
  117. package/dist/services/inflection.d.ts +2 -2
  118. package/dist/services/inflection.d.ts.map +1 -1
  119. package/dist/services/inflection.js +4 -4
  120. package/dist/services/inflection.js.map +1 -1
  121. package/dist/services/ir-builder.d.ts.map +1 -1
  122. package/dist/services/ir-builder.js +10 -3
  123. package/dist/services/ir-builder.js.map +1 -1
  124. package/dist/services/pg-types.d.ts +31 -0
  125. package/dist/services/pg-types.d.ts.map +1 -1
  126. package/dist/services/pg-types.js +24 -0
  127. package/dist/services/pg-types.js.map +1 -1
  128. package/dist/services/plugin-runner.d.ts +27 -37
  129. package/dist/services/plugin-runner.d.ts.map +1 -1
  130. package/dist/services/plugin-runner.js +73 -171
  131. package/dist/services/plugin-runner.js.map +1 -1
  132. package/dist/services/plugin.d.ts +349 -217
  133. package/dist/services/plugin.d.ts.map +1 -1
  134. package/dist/services/plugin.js +182 -130
  135. package/dist/services/plugin.js.map +1 -1
  136. package/dist/services/resolution.d.ts +38 -0
  137. package/dist/services/resolution.d.ts.map +1 -0
  138. package/dist/services/resolution.js +242 -0
  139. package/dist/services/resolution.js.map +1 -0
  140. package/dist/services/service-registry.d.ts +74 -0
  141. package/dist/services/service-registry.d.ts.map +1 -0
  142. package/dist/services/service-registry.js +61 -0
  143. package/dist/services/service-registry.js.map +1 -0
  144. package/dist/services/symbols.d.ts +59 -0
  145. package/dist/services/symbols.d.ts.map +1 -1
  146. package/dist/services/symbols.js +16 -0
  147. package/dist/services/symbols.js.map +1 -1
  148. package/dist/testing.d.ts +4 -25
  149. package/dist/testing.d.ts.map +1 -1
  150. package/dist/testing.js +2 -23
  151. package/dist/testing.js.map +1 -1
  152. package/package.json +1 -1
  153. package/dist/plugins/effect-model.d.ts +0 -17
  154. package/dist/plugins/effect-model.d.ts.map +0 -1
  155. package/dist/plugins/effect-model.js +0 -409
  156. package/dist/plugins/effect-model.js.map +0 -1
  157. package/dist/plugins/kysely-queries.d.ts +0 -66
  158. package/dist/plugins/kysely-queries.d.ts.map +0 -1
  159. package/dist/plugins/kysely-queries.js +0 -951
  160. package/dist/plugins/kysely-queries.js.map +0 -1
  161. package/dist/plugins/kysely-types.d.ts +0 -35
  162. package/dist/plugins/kysely-types.d.ts.map +0 -1
  163. package/dist/plugins/kysely-types.js +0 -601
  164. package/dist/plugins/kysely-types.js.map +0 -1
package/dist/testing.js CHANGED
@@ -11,9 +11,8 @@ import { TypeHintsLive } from "./services/type-hints.js";
11
11
  import { ArtifactStoreLive } from "./services/artifact-store.js";
12
12
  import { PluginMeta } from "./services/plugin-meta.js";
13
13
  import { IR } from "./services/ir.js";
14
- import { PluginRunner } from "./services/plugin-runner.js";
15
14
  /**
16
- * Base test layers for direct plugin testing (bypassing PluginRunner).
15
+ * Base test layers for direct plugin testing.
17
16
  *
18
17
  * Provides all shared services except IR and PluginMeta,
19
18
  * which are test-specific.
@@ -28,26 +27,6 @@ import { PluginRunner } from "./services/plugin-runner.js";
28
27
  * ```
29
28
  */
30
29
  export const PluginTestLayers = Layer.mergeAll(InflectionLive, EmissionsLive, SymbolsLive, TypeHintsLive([]), ArtifactStoreLive);
31
- /**
32
- * Test layer for PluginRunner integration tests.
33
- *
34
- * PluginRunner.Default includes InflectionLive by default.
35
- * Add TypeHintsLive for complete test setup.
36
- *
37
- * Usage:
38
- * ```typescript
39
- * layer(PluginRunnerTestLayer)("my tests", (it) => {
40
- * it.effect("runs plugins", () =>
41
- * Effect.gen(function* () {
42
- * const runner = yield* PluginRunner
43
- * const prepared = yield* runner.prepare(plugins)
44
- * const result = yield* runner.run(prepared, ir)
45
- * })
46
- * )
47
- * })
48
- * ```
49
- */
50
- export const PluginRunnerTestLayer = Layer.mergeAll(PluginRunner.Default, TypeHintsLive([]));
51
30
  /**
52
31
  * Create a complete test layer for a specific plugin test.
53
32
  *
@@ -79,6 +58,6 @@ export { IR } from "./services/ir.js";
79
58
  export { PluginMeta } from "./services/plugin-meta.js";
80
59
  export { Emissions } from "./services/emissions.js";
81
60
  export { Symbols } from "./services/symbols.js";
82
- export { PluginRunner } from "./services/plugin-runner.js";
61
+ export { runPlugins } from "./services/plugin-runner.js";
83
62
  export { createIRBuilder, freezeIR } from "./ir/semantic-ir.js";
84
63
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAG1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAC5C,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,CAAC,EAAE,CAAC,EACjB,iBAAiB,CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,QAAQ,CACjD,YAAY,CAAC,OAAO,EACpB,aAAa,CAAC,EAAE,CAAC,CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAc,EAAE,UAAkB;IACtE,OAAO,KAAK,CAAC,QAAQ,CACnB,gBAAgB,EAChB,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EACrB,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAChD,CAAA;AACH,CAAC;AAED,4CAA4C;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAGrC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAC5C,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,CAAC,EAAE,CAAC,EACjB,iBAAiB,CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAc,EAAE,UAAkB;IACtE,OAAO,KAAK,CAAC,QAAQ,CACnB,gBAAgB,EAChB,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EACrB,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAChD,CAAA;AACH,CAAC;AAED,4CAA4C;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielfgray/pg-sourcerer",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "PostgreSQL code generation framework with a plugin ecosystem",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,17 +0,0 @@
1
- /**
2
- * Effect Model Plugin
3
- *
4
- * Generates @effect/sql Model classes for each entity.
5
- */
6
- export declare const effectModelPlugin: import("../index.js").PluginFactory<{
7
- readonly outputDir: string;
8
- readonly exportTypes: boolean;
9
- readonly enumStyle: "enum" | "strings";
10
- readonly typeReferences: "inline" | "separate";
11
- }, {
12
- readonly outputDir?: string | undefined;
13
- readonly exportTypes?: boolean | undefined;
14
- readonly enumStyle?: "enum" | "strings" | undefined;
15
- readonly typeReferences?: "inline" | "separate" | undefined;
16
- }>;
17
- //# sourceMappingURL=effect-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-model.d.ts","sourceRoot":"","sources":["../../src/plugins/effect-model.ts"],"names":[],"mappings":"AAodA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;EAsH5B,CAAC"}
@@ -1,409 +0,0 @@
1
- /**
2
- * Effect Model Plugin - Generate @effect/sql Model classes for entities
3
- *
4
- * Generates Model classes with proper variants based on:
5
- * - Field properties (isGenerated, isIdentity, hasDefault, nullable)
6
- * - Smart tags (sensitive, insert override)
7
- */
8
- import { Array as Arr, Option, pipe, Schema as S } from "effect";
9
- import { definePlugin } from "../services/plugin.js";
10
- import { inflect } from "../services/inflection.js";
11
- import { findEnumByPgName, TsType } from "../services/pg-types.js";
12
- import { getEnumEntities, getTableEntities, getCompositeEntities } from "../ir/semantic-ir.js";
13
- import { conjure } from "../lib/conjure.js";
14
- import { isUuidType, isDateType, isBigIntType, isEnumType, getPgTypeName, resolveFieldType } from "../lib/field-utils.js";
15
- const { ts, exp, obj } = conjure;
16
- // ============================================================================
17
- // Configuration
18
- // ============================================================================
19
- const EffectModelPluginConfig = S.Struct({
20
- /** Output directory relative to main outputDir */
21
- outputDir: S.optionalWith(S.String, { default: () => "effect-model" }),
22
- /** How to represent enum values: 'strings' uses S.Union(S.Literal(...)), 'enum' uses S.Enums(TsEnum) */
23
- enumStyle: S.optionalWith(S.Union(S.Literal("strings"), S.Literal("enum")), { default: () => "strings" }),
24
- /** Where to define enum types: 'inline' embeds at usage, 'separate' generates enum files */
25
- typeReferences: S.optionalWith(S.Union(S.Literal("inline"), S.Literal("separate")), { default: () => "separate" }),
26
- /** Export inferred types for composite schemas (default: true) */
27
- exportTypes: S.optionalWith(S.Boolean, { default: () => true }),
28
- });
29
- // ============================================================================
30
- // Smart Tags
31
- // ============================================================================
32
- const EffectModelTagsSchema = S.Struct({
33
- /** Override insert optionality: "optional" or "required" */
34
- insert: S.optional(S.Union(S.Literal("optional"), S.Literal("required"))),
35
- /** Mark field as sensitive - excluded from json variants */
36
- sensitive: S.optional(S.Boolean),
37
- });
38
- const getEffectModelTags = (field) => {
39
- const pluginTags = field.tags["effect:model"];
40
- if (!pluginTags)
41
- return {};
42
- return S.decodeUnknownSync(EffectModelTagsSchema)(pluginTags);
43
- };
44
- const isSensitive = (field) => getEffectModelTags(field).sensitive === true;
45
- const getInsertOverride = (field) => getEffectModelTags(field).insert;
46
- // ============================================================================
47
- // Schema Builders (pure functions)
48
- // ============================================================================
49
- /** Cast n.Expression to ExpressionKind for recast compatibility */
50
- const toExprKind = (expr) => expr;
51
- /** Map TypeScript type to Effect Schema property access */
52
- const tsTypeToEffectSchema = (tsType) => {
53
- const prop = tsType === TsType.String
54
- ? "String"
55
- : tsType === TsType.Number
56
- ? "Number"
57
- : tsType === TsType.Boolean
58
- ? "Boolean"
59
- : tsType === TsType.BigInt
60
- ? "BigInt"
61
- : tsType === TsType.Date
62
- ? "Date"
63
- : "Unknown";
64
- return conjure.id("S").prop(prop).build();
65
- };
66
- /** Build S.Union(S.Literal(...), ...) for an enum */
67
- const buildEnumSchema = (enumResult) => conjure
68
- .id("S")
69
- .method("Union", enumResult.values.map(v => conjure
70
- .id("S")
71
- .method("Literal", [conjure.str(v)])
72
- .build()))
73
- .build();
74
- // ============================================================================
75
- // Schema Wrappers
76
- // ============================================================================
77
- const wrapIf = (schema, condition, wrapper) => (condition ? wrapper(schema) : schema);
78
- const wrapNullable = (schema) => conjure.id("S").method("NullOr", [schema]).build();
79
- const wrapArray = (schema) => conjure.id("S").method("Array", [schema]).build();
80
- const wrapGenerated = (schema) => conjure.id("Model").method("Generated", [schema]).build();
81
- const wrapSensitive = (schema) => conjure.id("Model").method("Sensitive", [schema]).build();
82
- const wrapFieldOption = (schema) => conjure.id("Model").method("FieldOption", [schema]).build();
83
- /**
84
- * Determine if a field should be treated as DB-generated.
85
- * Includes GENERATED ALWAYS, IDENTITY, and PK fields with defaults.
86
- */
87
- const isDbGenerated = (field, entity) => field.isGenerated ||
88
- field.isIdentity ||
89
- (field.hasDefault && entity.primaryKey?.columns.includes(field.columnName) === true);
90
- /**
91
- * Check for auto-timestamp patterns (created_at, updated_at)
92
- */
93
- const getAutoTimestamp = (field) => {
94
- if (!field.hasDefault)
95
- return undefined;
96
- const name = field.columnName.toLowerCase();
97
- if (name === "created_at" || name === "createdat")
98
- return "insert";
99
- if (name === "updated_at" || name === "updatedat")
100
- return "update";
101
- return undefined;
102
- };
103
- // ============================================================================
104
- // Field → Schema Expression
105
- // ============================================================================
106
- /**
107
- * Build the base Effect Schema type for a field
108
- */
109
- const buildBaseSchemaType = (field, ctx) => {
110
- const resolved = resolveFieldType(field, ctx.enums, ctx.extensions);
111
- if (resolved.enumDef) {
112
- if (ctx.typeReferences === "separate") {
113
- // Reference by name - the enum schema is imported
114
- return conjure.id(resolved.enumDef.name).build();
115
- }
116
- else if (ctx.enumStyle === "enum") {
117
- // Inline native enum: S.Enums(EnumName)
118
- // Note: This requires the TS enum to be generated/imported
119
- return conjure.id("S").method("Enums", [
120
- conjure.id(resolved.enumDef.name).build()
121
- ]).build();
122
- }
123
- else {
124
- // Inline strings: S.Union(S.Literal(...), ...)
125
- return buildEnumSchema(resolved.enumDef);
126
- }
127
- }
128
- if (isUuidType(field))
129
- return conjure.id("S").prop("UUID").build();
130
- if (isDateType(field))
131
- return conjure.id("S").prop("Date").build();
132
- if (isBigIntType(field))
133
- return conjure.id("S").prop("BigInt").build();
134
- return tsTypeToEffectSchema(resolved.tsType);
135
- };
136
- /**
137
- * Build the complete field schema expression with all wrappers applied
138
- */
139
- const buildFieldSchema = (field, ctx) => {
140
- // Check for auto-timestamp patterns first (returns early with special type)
141
- const autoTs = getAutoTimestamp(field);
142
- if (autoTs === "insert")
143
- return conjure.id("Model").prop("DateTimeInsertFromDate").build();
144
- if (autoTs === "update")
145
- return conjure.id("Model").prop("DateTimeUpdateFromDate").build();
146
- // Build base type with array/nullable wrappers
147
- let schema = buildBaseSchemaType(field, ctx);
148
- schema = wrapIf(schema, field.isArray, wrapArray);
149
- schema = wrapIf(schema, field.nullable, wrapNullable);
150
- schema = wrapIf(schema, isSensitive(field), wrapSensitive);
151
- // Determine generated/optional status
152
- const insertOverride = getInsertOverride(field);
153
- const shouldBeGenerated = insertOverride === "required"
154
- ? field.isGenerated || field.isIdentity
155
- : isDbGenerated(field, ctx.entity);
156
- if (shouldBeGenerated) {
157
- schema = wrapGenerated(schema);
158
- }
159
- else if (insertOverride === "optional") {
160
- schema = wrapFieldOption(schema);
161
- }
162
- return schema;
163
- };
164
- // ============================================================================
165
- // Entity → Model Class
166
- // ============================================================================
167
- /**
168
- * Build Model.Class<ClassName>("table_name")({ ...fields })
169
- */
170
- const buildModelClass = (entity, className, ctx) => {
171
- // Build fields object from row shape
172
- const fieldsObj = entity.shapes.row.fields.reduce((builder, field) => builder.prop(field.name, buildFieldSchema(field, ctx)), obj());
173
- // Build: Model.Class<ClassName>("table_name")
174
- const modelClassRef = conjure.b.memberExpression(conjure.b.identifier("Model"), conjure.b.identifier("Class"));
175
- const modelClassWithType = conjure.b.callExpression(modelClassRef, [
176
- conjure.str(entity.name),
177
- ]);
178
- // Add type parameters: Model.Class<ClassName>
179
- // Use typeParameters for TypeScript (not typeArguments which is for Flow)
180
- modelClassWithType.typeParameters =
181
- conjure.b.tsTypeParameterInstantiation([
182
- conjure.b.tsTypeReference(conjure.b.identifier(className)),
183
- ]);
184
- // Call with fields: Model.Class<ClassName>("table_name")({ ... })
185
- return conjure.b.callExpression(modelClassWithType, [fieldsObj.build()]);
186
- };
187
- /**
188
- * Generate: export class ClassName extends Model.Class<ClassName>("table")({ ... }) {}
189
- */
190
- const generateModelStatement = (entity, className, ctx) => {
191
- const modelExpr = buildModelClass(entity, className, ctx);
192
- const classDecl = conjure.b.classDeclaration(conjure.b.identifier(className), conjure.b.classBody([]), toExprKind(modelExpr));
193
- return {
194
- _tag: "SymbolStatement",
195
- node: conjure.b.exportNamedDeclaration(classDecl, []),
196
- symbol: {
197
- name: className,
198
- capability: "models:effect",
199
- entity: entity.name,
200
- isType: false,
201
- },
202
- };
203
- };
204
- /**
205
- * Generate enum schema: export const EnumName = S.Union(S.Literal(...), ...)
206
- */
207
- const generateEnumStatement = (enumEntity) => exp.const(enumEntity.name, { capability: "models:effect", entity: enumEntity.name }, buildEnumSchema({
208
- name: enumEntity.name,
209
- pgName: enumEntity.pgName,
210
- values: enumEntity.values,
211
- }));
212
- /**
213
- * Build the base Effect Schema type for a composite field (no Model wrappers)
214
- */
215
- const buildCompositeFieldSchema = (field, ctx) => {
216
- const resolved = resolveFieldType(field, ctx.enums, ctx.extensions);
217
- if (resolved.enumDef) {
218
- if (ctx.typeReferences === "separate") {
219
- return conjure.id(resolved.enumDef.name).build();
220
- }
221
- else if (ctx.enumStyle === "enum") {
222
- return conjure.id("S").method("Enums", [
223
- conjure.id(resolved.enumDef.name).build()
224
- ]).build();
225
- }
226
- else {
227
- return buildEnumSchema(resolved.enumDef);
228
- }
229
- }
230
- if (isUuidType(field))
231
- return conjure.id("S").prop("UUID").build();
232
- if (isDateType(field))
233
- return conjure.id("S").prop("Date").build();
234
- if (isBigIntType(field))
235
- return conjure.id("S").prop("BigInt").build();
236
- return tsTypeToEffectSchema(resolved.tsType);
237
- };
238
- /**
239
- * Generate: export const CompositeName = S.Struct({ ... })
240
- * Optionally: export type CompositeName = S.Schema.Type<typeof CompositeName>
241
- */
242
- const generateCompositeStatements = (composite, ctx, exportTypes) => {
243
- // Build S.Struct({ ... }) for composite fields
244
- const fieldsObj = composite.fields.reduce((builder, field) => {
245
- let schema = buildCompositeFieldSchema(field, ctx);
246
- schema = wrapIf(schema, field.isArray, wrapArray);
247
- schema = wrapIf(schema, field.nullable, wrapNullable);
248
- return builder.prop(field.name, schema);
249
- }, obj());
250
- const structExpr = conjure.id("S").method("Struct", [fieldsObj.build()]).build();
251
- const symbolCtx = { capability: "models:effect", entity: composite.name };
252
- const schemaStatement = exp.const(composite.name, symbolCtx, structExpr);
253
- if (!exportTypes) {
254
- return [schemaStatement];
255
- }
256
- // Generate: export type CompositeName = S.Schema.Type<typeof CompositeName>
257
- const inferType = ts.qualifiedRefWithParams(["S", "Schema", "Type"], [ts.typeof(composite.name)]);
258
- const typeStatement = exp.type(composite.name, symbolCtx, inferType);
259
- return [schemaStatement, typeStatement];
260
- };
261
- // ============================================================================
262
- // Enum Helpers
263
- // ============================================================================
264
- /** Collect enum names used by fields */
265
- const collectUsedEnums = (fields, enums) => {
266
- const enumNames = fields
267
- .filter(isEnumType)
268
- .flatMap(field => {
269
- const pgTypeName = getPgTypeName(field);
270
- if (!pgTypeName)
271
- return [];
272
- return pipe(findEnumByPgName(enums, pgTypeName), Option.map(e => e.name), Option.toArray);
273
- });
274
- return new Set(enumNames);
275
- };
276
- /** Build import refs for used enums */
277
- const buildEnumImports = (usedEnums) => Arr.fromIterable(usedEnums).map(enumName => ({
278
- kind: "symbol",
279
- ref: { capability: "models:effect", entity: enumName },
280
- }));
281
- /**
282
- * Generate enum schema for native enum style.
283
- * Generates: export enum EnumName { A = 'a', ... } + export const EnumNameSchema = S.Enums(EnumName)
284
- */
285
- const generateNativeEnumStatements = (enumEntity) => {
286
- const symbolCtx = { capability: "models:effect", entity: enumEntity.name };
287
- // Generate: export enum EnumName { A = 'a', B = 'b', ... }
288
- const enumDecl = conjure.b.tsEnumDeclaration(conjure.b.identifier(enumEntity.name), enumEntity.values.map(v => conjure.b.tsEnumMember(conjure.b.identifier(v.toUpperCase().replace(/[^A-Z0-9_]/g, "_")), conjure.str(v))));
289
- const enumStatement = {
290
- _tag: "SymbolStatement",
291
- node: conjure.b.exportNamedDeclaration(enumDecl, []),
292
- symbol: {
293
- name: enumEntity.name,
294
- capability: "models:effect",
295
- entity: enumEntity.name,
296
- isType: true,
297
- },
298
- };
299
- const schemaName = `${enumEntity.name}Schema`;
300
- const schemaExpr = conjure.id("S").method("Enums", [
301
- conjure.id(enumEntity.name).build()
302
- ]).build();
303
- const schemaStatement = exp.const(schemaName, symbolCtx, schemaExpr);
304
- return [enumStatement, schemaStatement];
305
- };
306
- // ============================================================================
307
- // File Emission Helpers
308
- // ============================================================================
309
- const buildFileNameContext = (entityName, pgName, schemaName, inflection, entity) => ({
310
- entityName,
311
- pgName,
312
- schema: schemaName,
313
- inflection,
314
- entity,
315
- });
316
- // ============================================================================
317
- // Plugin Definition
318
- // ============================================================================
319
- /**
320
- * Effect Model Plugin
321
- *
322
- * Generates @effect/sql Model classes for each entity.
323
- */
324
- export const effectModelPlugin = definePlugin({
325
- name: "effect-model",
326
- provides: ["models:effect", "models"],
327
- configSchema: EffectModelPluginConfig,
328
- inflection: {
329
- outputFile: ctx => `${ctx.entityName}.ts`,
330
- symbolName: (entityName, _artifactKind) => entityName,
331
- },
332
- inflectionDefaults: {
333
- entityName: inflect.pascalCase,
334
- enumName: inflect.pascalCase,
335
- },
336
- run: (ctx, config) => {
337
- const enumEntities = getEnumEntities(ctx.ir);
338
- const { enumStyle, typeReferences } = config;
339
- // Generate separate enum files if configured
340
- if (typeReferences === "separate") {
341
- enumEntities
342
- .filter(e => e.tags.omit !== true)
343
- .forEach(enumEntity => {
344
- const fileNameCtx = buildFileNameContext(enumEntity.name, enumEntity.pgName, enumEntity.schemaName, ctx.inflection, enumEntity);
345
- const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
346
- const statements = enumStyle === "enum"
347
- ? generateNativeEnumStatements(enumEntity)
348
- : [generateEnumStatement(enumEntity)];
349
- ctx
350
- .file(filePath)
351
- .import({ kind: "package", names: ["Schema as S"], from: "effect" })
352
- .ast(conjure.symbolProgram(...statements))
353
- .emit();
354
- });
355
- }
356
- // Generate table/view entity model files
357
- getTableEntities(ctx.ir)
358
- .filter(entity => entity.tags.omit !== true)
359
- .forEach(entity => {
360
- const className = ctx.inflection.entityName(entity.pgClass, entity.tags);
361
- const fieldCtx = {
362
- entity,
363
- enums: enumEntities,
364
- extensions: ctx.ir.extensions,
365
- enumStyle,
366
- typeReferences,
367
- };
368
- const fileNameCtx = buildFileNameContext(className, entity.pgName, entity.schemaName, ctx.inflection, entity);
369
- const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
370
- // Collect enum usage for imports
371
- const usedEnums = typeReferences === "separate"
372
- ? collectUsedEnums(entity.shapes.row.fields, enumEntities)
373
- : new Set();
374
- const fileBuilder = ctx
375
- .file(filePath)
376
- .import({ kind: "package", names: ["Model"], from: "@effect/sql" })
377
- .import({ kind: "package", names: ["Schema as S"], from: "effect" });
378
- buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
379
- fileBuilder
380
- .ast(conjure.symbolProgram(generateModelStatement(entity, className, fieldCtx)))
381
- .emit();
382
- });
383
- // Generate composite type schema files
384
- const compositeFieldCtx = {
385
- enums: enumEntities,
386
- extensions: ctx.ir.extensions,
387
- enumStyle,
388
- typeReferences,
389
- };
390
- getCompositeEntities(ctx.ir)
391
- .filter(composite => composite.tags.omit !== true)
392
- .forEach(composite => {
393
- const fileNameCtx = buildFileNameContext(composite.name, composite.pgName, composite.schemaName, ctx.inflection, composite);
394
- const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
395
- // Collect enum usage for imports
396
- const usedEnums = typeReferences === "separate"
397
- ? collectUsedEnums(composite.fields, enumEntities)
398
- : new Set();
399
- const fileBuilder = ctx
400
- .file(filePath)
401
- .import({ kind: "package", names: ["Schema as S"], from: "effect" });
402
- buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
403
- fileBuilder
404
- .ast(conjure.symbolProgram(...generateCompositeStatements(composite, compositeFieldCtx, config.exportTypes)))
405
- .emit();
406
- });
407
- },
408
- });
409
- //# sourceMappingURL=effect-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect-model.js","sourceRoot":"","sources":["../../src/plugins/effect-model.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Function to generate export names for CRUD/lookup methods.
3
- * @param entityName - PascalCase entity name (e.g., "User", "Post")
4
- * @param methodName - PascalCase method name (e.g., "FindById", "Create")
5
- * @returns The export name (e.g., "UserFindById", "userCreate", "findById")
6
- */
7
- export type ExportNameFn = (entityName: string, methodName: string) => string;
8
- /**
9
- * Function to generate export names for stored function wrappers.
10
- * @param pgFunctionName - PostgreSQL function name in snake_case (e.g., "current_user", "verify_email")
11
- * @returns The export name (e.g., "currentUser", "verifyEmail")
12
- */
13
- export type FunctionExportNameFn = (pgFunctionName: string) => string;
14
- /**
15
- * User-facing config input with properly typed function options.
16
- */
17
- export interface KyselyQueriesConfigInput {
18
- readonly outputDir?: string;
19
- readonly dbTypesPath?: string;
20
- readonly executeQueries?: boolean;
21
- readonly generateListMany?: boolean;
22
- readonly generateFunctions?: boolean;
23
- readonly functionsFile?: string;
24
- /**
25
- * Custom export name function for CRUD/lookup methods.
26
- * @default (entityName, methodName) => entityName + methodName
27
- * @example
28
- * // Unprefixed: "FindById", "Create"
29
- * exportName: (_entity, method) => method
30
- *
31
- * // camelCase prefix: "userFindById", "userCreate"
32
- * exportName: (entity, method) => entity.toLowerCase() + method
33
- */
34
- readonly exportName?: ExportNameFn;
35
- /**
36
- * Custom export name function for stored function wrappers.
37
- * @default (pgFunctionName) => camelCase(pgFunctionName)
38
- * @example
39
- * // PascalCase: "CurrentUser", "VerifyEmail"
40
- * functionExportName: (fn) => pascalCase(fn)
41
- *
42
- * // Prefixed: "fnCurrentUser", "fnVerifyEmail"
43
- * functionExportName: (fn) => "fn" + pascalCase(fn)
44
- */
45
- readonly functionExportName?: FunctionExportNameFn;
46
- }
47
- export declare const kyselyQueriesPlugin: import("../index.js").PluginFactory<{
48
- readonly outputDir: string;
49
- readonly generateFunctions: boolean;
50
- readonly functionsFile: string;
51
- readonly dbTypesPath: string;
52
- readonly executeQueries: boolean;
53
- readonly generateListMany: boolean;
54
- readonly exportName?: any;
55
- readonly functionExportName?: any;
56
- }, {
57
- readonly outputDir?: string | undefined;
58
- readonly generateFunctions?: boolean | undefined;
59
- readonly functionsFile?: string | undefined;
60
- readonly dbTypesPath?: string | undefined;
61
- readonly executeQueries?: boolean | undefined;
62
- readonly generateListMany?: boolean | undefined;
63
- readonly exportName?: any;
64
- readonly functionExportName?: any;
65
- }>;
66
- //# sourceMappingURL=kysely-queries.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kysely-queries.d.ts","sourceRoot":"","sources":["../../src/plugins/kysely-queries.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;AAE7E;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAA;AAqDrE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,oBAAoB,CAAA;CACnD;AAqhCD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EA8K9B,CAAA"}