@danielfgray/pg-sourcerer 0.1.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 (145) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +104 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +133 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +47 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/errors.d.ts +129 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +41 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/generate.d.ts +75 -0
  14. package/dist/generate.d.ts.map +1 -0
  15. package/dist/generate.js +183 -0
  16. package/dist/generate.js.map +1 -0
  17. package/dist/index.d.ts +35 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +62 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/init.d.ts +4 -0
  22. package/dist/init.d.ts.map +1 -0
  23. package/dist/init.js +229 -0
  24. package/dist/init.js.map +1 -0
  25. package/dist/ir/index.d.ts +7 -0
  26. package/dist/ir/index.d.ts.map +1 -0
  27. package/dist/ir/index.js +7 -0
  28. package/dist/ir/index.js.map +1 -0
  29. package/dist/ir/relation-graph.d.ts +113 -0
  30. package/dist/ir/relation-graph.d.ts.map +1 -0
  31. package/dist/ir/relation-graph.js +232 -0
  32. package/dist/ir/relation-graph.js.map +1 -0
  33. package/dist/ir/semantic-ir.d.ts +448 -0
  34. package/dist/ir/semantic-ir.d.ts.map +1 -0
  35. package/dist/ir/semantic-ir.js +138 -0
  36. package/dist/ir/semantic-ir.js.map +1 -0
  37. package/dist/ir/smart-tags.d.ts +24 -0
  38. package/dist/ir/smart-tags.d.ts.map +1 -0
  39. package/dist/ir/smart-tags.js +30 -0
  40. package/dist/ir/smart-tags.js.map +1 -0
  41. package/dist/lib/conjure.d.ts +431 -0
  42. package/dist/lib/conjure.d.ts.map +1 -0
  43. package/dist/lib/conjure.js +697 -0
  44. package/dist/lib/conjure.js.map +1 -0
  45. package/dist/lib/field-utils.d.ts +61 -0
  46. package/dist/lib/field-utils.d.ts.map +1 -0
  47. package/dist/lib/field-utils.js +132 -0
  48. package/dist/lib/field-utils.js.map +1 -0
  49. package/dist/lib/hex.d.ts +117 -0
  50. package/dist/lib/hex.d.ts.map +1 -0
  51. package/dist/lib/hex.js +185 -0
  52. package/dist/lib/hex.js.map +1 -0
  53. package/dist/plugins/arktype.d.ts +11 -0
  54. package/dist/plugins/arktype.d.ts.map +1 -0
  55. package/dist/plugins/arktype.js +207 -0
  56. package/dist/plugins/arktype.js.map +1 -0
  57. package/dist/plugins/effect-model.d.ts +10 -0
  58. package/dist/plugins/effect-model.d.ts.map +1 -0
  59. package/dist/plugins/effect-model.js +261 -0
  60. package/dist/plugins/effect-model.js.map +1 -0
  61. package/dist/plugins/kysely-queries.d.ts +7 -0
  62. package/dist/plugins/kysely-queries.d.ts.map +1 -0
  63. package/dist/plugins/kysely-queries.js +380 -0
  64. package/dist/plugins/kysely-queries.js.map +1 -0
  65. package/dist/plugins/sql-queries.d.ts +6 -0
  66. package/dist/plugins/sql-queries.d.ts.map +1 -0
  67. package/dist/plugins/sql-queries.js +249 -0
  68. package/dist/plugins/sql-queries.js.map +1 -0
  69. package/dist/plugins/types.d.ts +18 -0
  70. package/dist/plugins/types.d.ts.map +1 -0
  71. package/dist/plugins/types.js +263 -0
  72. package/dist/plugins/types.js.map +1 -0
  73. package/dist/plugins/zod.d.ts +11 -0
  74. package/dist/plugins/zod.d.ts.map +1 -0
  75. package/dist/plugins/zod.js +180 -0
  76. package/dist/plugins/zod.js.map +1 -0
  77. package/dist/services/artifact-store.d.ts +55 -0
  78. package/dist/services/artifact-store.d.ts.map +1 -0
  79. package/dist/services/artifact-store.js +51 -0
  80. package/dist/services/artifact-store.js.map +1 -0
  81. package/dist/services/config-loader.d.ts +45 -0
  82. package/dist/services/config-loader.d.ts.map +1 -0
  83. package/dist/services/config-loader.js +113 -0
  84. package/dist/services/config-loader.js.map +1 -0
  85. package/dist/services/emissions.d.ts +89 -0
  86. package/dist/services/emissions.d.ts.map +1 -0
  87. package/dist/services/emissions.js +194 -0
  88. package/dist/services/emissions.js.map +1 -0
  89. package/dist/services/file-builder.d.ts +81 -0
  90. package/dist/services/file-builder.d.ts.map +1 -0
  91. package/dist/services/file-builder.js +112 -0
  92. package/dist/services/file-builder.js.map +1 -0
  93. package/dist/services/file-writer.d.ts +57 -0
  94. package/dist/services/file-writer.d.ts.map +1 -0
  95. package/dist/services/file-writer.js +76 -0
  96. package/dist/services/file-writer.js.map +1 -0
  97. package/dist/services/inflection.d.ts +227 -0
  98. package/dist/services/inflection.d.ts.map +1 -0
  99. package/dist/services/inflection.js +350 -0
  100. package/dist/services/inflection.js.map +1 -0
  101. package/dist/services/introspection.d.ts +46 -0
  102. package/dist/services/introspection.d.ts.map +1 -0
  103. package/dist/services/introspection.js +99 -0
  104. package/dist/services/introspection.js.map +1 -0
  105. package/dist/services/ir-builder.d.ts +46 -0
  106. package/dist/services/ir-builder.d.ts.map +1 -0
  107. package/dist/services/ir-builder.js +923 -0
  108. package/dist/services/ir-builder.js.map +1 -0
  109. package/dist/services/ir.d.ts +28 -0
  110. package/dist/services/ir.d.ts.map +1 -0
  111. package/dist/services/ir.js +25 -0
  112. package/dist/services/ir.js.map +1 -0
  113. package/dist/services/pg-types.d.ts +197 -0
  114. package/dist/services/pg-types.d.ts.map +1 -0
  115. package/dist/services/pg-types.js +274 -0
  116. package/dist/services/pg-types.js.map +1 -0
  117. package/dist/services/plugin-meta.d.ts +33 -0
  118. package/dist/services/plugin-meta.d.ts.map +1 -0
  119. package/dist/services/plugin-meta.js +24 -0
  120. package/dist/services/plugin-meta.js.map +1 -0
  121. package/dist/services/plugin-runner.d.ts +52 -0
  122. package/dist/services/plugin-runner.d.ts.map +1 -0
  123. package/dist/services/plugin-runner.js +182 -0
  124. package/dist/services/plugin-runner.js.map +1 -0
  125. package/dist/services/plugin.d.ts +286 -0
  126. package/dist/services/plugin.d.ts.map +1 -0
  127. package/dist/services/plugin.js +132 -0
  128. package/dist/services/plugin.js.map +1 -0
  129. package/dist/services/smart-tags-parser.d.ts +37 -0
  130. package/dist/services/smart-tags-parser.d.ts.map +1 -0
  131. package/dist/services/smart-tags-parser.js +79 -0
  132. package/dist/services/smart-tags-parser.js.map +1 -0
  133. package/dist/services/symbols.d.ts +85 -0
  134. package/dist/services/symbols.d.ts.map +1 -0
  135. package/dist/services/symbols.js +128 -0
  136. package/dist/services/symbols.js.map +1 -0
  137. package/dist/services/type-hints.d.ts +62 -0
  138. package/dist/services/type-hints.d.ts.map +1 -0
  139. package/dist/services/type-hints.js +117 -0
  140. package/dist/services/type-hints.js.map +1 -0
  141. package/dist/testing.d.ts +77 -0
  142. package/dist/testing.d.ts.map +1 -0
  143. package/dist/testing.js +84 -0
  144. package/dist/testing.js.map +1 -0
  145. package/package.json +74 -0
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Conjure - AST Builder DSL for recast
3
+ *
4
+ * A fluent, immutable API for constructing JavaScript/TypeScript AST nodes.
5
+ * Wraps recast builders with ergonomic patterns for common code generation tasks.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { conjure, cast } from "../lib/conjure.js"
10
+ *
11
+ * // Method chains
12
+ * const schema = conjure.id("z")
13
+ * .method("string")
14
+ * .method("uuid")
15
+ * .method("nullable")
16
+ * .build()
17
+ *
18
+ * // Object literals
19
+ * const config = conjure.obj()
20
+ * .prop("path", conjure.str("/users"))
21
+ * .prop("method", conjure.str("GET"))
22
+ * .build()
23
+ *
24
+ * // Functions
25
+ * const handler = conjure.fn()
26
+ * .async()
27
+ * .arrow()
28
+ * .param("req", conjure.ts.ref("Request"))
29
+ * .param("res", conjure.ts.ref("Response"))
30
+ * .body(
31
+ * conjure.stmt.return(conjure.id("res").method("json", [data]).build())
32
+ * )
33
+ * .build()
34
+ * ```
35
+ */
36
+ import recast from "recast";
37
+ import type { namedTypes as n } from "ast-types";
38
+ import type { ExpressionKind, StatementKind, TSTypeKind, SpreadElementKind, RestElementKind } from "ast-types/lib/gen/kinds.js";
39
+ /**
40
+ * The ast-types library uses "Kind" union types that are incompatible with
41
+ * exactOptionalPropertyTypes. We define explicit cast functions that convert
42
+ * from the namedTypes interfaces (n.Expression, n.Statement, etc.) to the
43
+ * Kind types that recast builders expect.
44
+ *
45
+ * This is safe because every member of n.Expression is a member of ExpressionKind.
46
+ */
47
+ /** Cast n.Expression to ExpressionKind for recast builder compatibility */
48
+ declare function toExpr(node: n.Expression): ExpressionKind;
49
+ /** Cast n.Statement to StatementKind for recast builder compatibility */
50
+ declare function toStmt(node: n.Statement): StatementKind;
51
+ /** Cast n.TSType to TSTypeKind for recast builder compatibility */
52
+ declare function toTSType(node: n.TSType): TSTypeKind;
53
+ /**
54
+ * Array element types that recast accepts
55
+ */
56
+ type ArrayElementLike = ExpressionKind | SpreadElementKind | RestElementKind | null;
57
+ /**
58
+ * Type cast helpers for raw recast interop.
59
+ *
60
+ * Use these when mixing conjure with direct recast builder calls.
61
+ * These provide the same functionality as the internal cast functions
62
+ * but are exported for external use.
63
+ */
64
+ export declare const cast: {
65
+ /** Cast n.Expression to ExpressionKind */
66
+ readonly toExpr: typeof toExpr;
67
+ /** Cast array element (expression or spread) */
68
+ readonly asArrayElem: (node: n.Expression | n.SpreadElement) => ArrayElementLike;
69
+ /** Cast n.Statement to StatementKind */
70
+ readonly toStmt: typeof toStmt;
71
+ /** Cast n.TSType to TSTypeKind */
72
+ readonly toTSType: typeof toTSType;
73
+ };
74
+ /**
75
+ * Context for symbol registration - identifies what entity/shape this symbol represents.
76
+ */
77
+ export interface SymbolContext {
78
+ readonly capability: string;
79
+ readonly entity: string;
80
+ readonly shape?: string;
81
+ }
82
+ /**
83
+ * Metadata attached to an exported symbol.
84
+ */
85
+ export interface SymbolMeta {
86
+ readonly name: string;
87
+ readonly capability: string;
88
+ readonly entity: string;
89
+ readonly shape?: string;
90
+ readonly isType: boolean;
91
+ readonly isDefault?: boolean;
92
+ }
93
+ /**
94
+ * A statement with attached symbol metadata.
95
+ * Used by exp.* helpers to track exports.
96
+ */
97
+ export interface SymbolStatement {
98
+ readonly _tag: "SymbolStatement";
99
+ readonly node: n.Statement;
100
+ readonly symbol: SymbolMeta;
101
+ }
102
+ /**
103
+ * A program with extracted symbol metadata.
104
+ * Returned by program() when SymbolStatements are included.
105
+ */
106
+ export interface SymbolProgram {
107
+ readonly _tag: "SymbolProgram";
108
+ readonly node: n.Program;
109
+ readonly symbols: readonly SymbolMeta[];
110
+ }
111
+ /**
112
+ * Fluent builder for method chains and property access.
113
+ */
114
+ export interface ChainBuilder {
115
+ /** The underlying AST node */
116
+ readonly node: n.Expression;
117
+ /** Property access: `.name` */
118
+ prop(name: string): ChainBuilder;
119
+ /** Method call: `.name(args)` */
120
+ method(name: string, args?: n.Expression[]): ChainBuilder;
121
+ /** Direct call: `(args)` */
122
+ call(args?: n.Expression[]): ChainBuilder;
123
+ /** Computed property access: `[expr]` */
124
+ index(expr: n.Expression): ChainBuilder;
125
+ /** Finalize and return the expression */
126
+ build(): n.Expression;
127
+ }
128
+ /**
129
+ * Fluent builder for object literals.
130
+ */
131
+ export interface ObjBuilder {
132
+ /** Add a property: `key: value` */
133
+ prop(key: string, value: n.Expression): ObjBuilder;
134
+ /** Add a property with string literal key: `"key": value` (for keys with special chars) */
135
+ stringProp(key: string, value: n.Expression): ObjBuilder;
136
+ /** Add a computed property: `[key]: value` */
137
+ computed(key: n.Expression, value: n.Expression): ObjBuilder;
138
+ /** Add a spread: `...expr` */
139
+ spread(expr: n.Expression): ObjBuilder;
140
+ /** Add a shorthand property: `key` (where key is also the value identifier) */
141
+ shorthand(key: string): ObjBuilder;
142
+ /** Finalize and return the object expression */
143
+ build(): n.ObjectExpression;
144
+ }
145
+ /**
146
+ * Fluent builder for array literals.
147
+ */
148
+ export interface ArrBuilder {
149
+ /** Add one or more elements */
150
+ add(...exprs: n.Expression[]): ArrBuilder;
151
+ /** Add a spread element: `...expr` */
152
+ spread(expr: n.Expression): ArrBuilder;
153
+ /** Finalize and return the array expression */
154
+ build(): n.ArrayExpression;
155
+ }
156
+ /**
157
+ * Fluent builder for function expressions and declarations.
158
+ */
159
+ export interface FnBuilder {
160
+ /** Add a required parameter */
161
+ param(name: string, type?: n.TSType): FnBuilder;
162
+ /** Add an optional parameter */
163
+ optionalParam(name: string, type?: n.TSType): FnBuilder;
164
+ /** Add a rest parameter: `...name` */
165
+ restParam(name: string, type?: n.TSType): FnBuilder;
166
+ /** Add a parameter with a default value */
167
+ defaultParam(name: string, defaultValue: n.Expression, type?: n.TSType): FnBuilder;
168
+ /** Set the return type annotation */
169
+ returns(type: n.TSType): FnBuilder;
170
+ /** Set the function body */
171
+ body(...statements: n.Statement[]): FnBuilder;
172
+ /** Mark as async */
173
+ async(): FnBuilder;
174
+ /** Make it an arrow function */
175
+ arrow(): FnBuilder;
176
+ /** Make it a generator function */
177
+ generator(): FnBuilder;
178
+ /** Build as a function expression */
179
+ build(): n.Expression;
180
+ /** Build as a named function declaration */
181
+ toDeclaration(name: string): n.FunctionDeclaration;
182
+ }
183
+ type BinaryOp = "===" | "!==" | "==" | "!=" | "<" | ">" | "<=" | ">=" | "+" | "-" | "*" | "/" | "%" | "**" | "in" | "instanceof" | "<<" | ">>" | ">>>" | "&" | "|" | "^";
184
+ type LogicalOp = "&&" | "||" | "??";
185
+ type UnaryOp = "!" | "-" | "+" | "typeof" | "void" | "delete" | "~";
186
+ type AssignOp = "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "??=" | "||=" | "&&=";
187
+ /**
188
+ * Field descriptor for destructured parameters
189
+ */
190
+ interface DestructuredField {
191
+ readonly name: string;
192
+ readonly type: n.TSType;
193
+ readonly optional?: boolean;
194
+ readonly defaultValue?: n.Expression;
195
+ }
196
+ /**
197
+ * TypeScript interface property signature
198
+ */
199
+ interface TSPropertySignature {
200
+ name: string;
201
+ type: n.TSType;
202
+ optional?: boolean;
203
+ readonly?: boolean;
204
+ }
205
+ /**
206
+ * Export helpers that produce statements with symbol metadata.
207
+ * These are used for tracking exports across files for import resolution.
208
+ */
209
+ export declare const exp: {
210
+ /**
211
+ * Export interface declaration: `export interface Name { ... }`
212
+ */
213
+ readonly interface: (name: string, ctx: SymbolContext, properties: TSPropertySignature[]) => SymbolStatement;
214
+ /**
215
+ * Export type alias: `export type Name = Type`
216
+ */
217
+ readonly typeAlias: (name: string, ctx: SymbolContext, type: n.TSType) => SymbolStatement;
218
+ /**
219
+ * Export const declaration: `export const name = init`
220
+ */
221
+ readonly const: (name: string, ctx: SymbolContext, init: n.Expression, typeAnnotation?: n.TSType) => SymbolStatement;
222
+ /**
223
+ * Export type alias for inferred types: `export type Name = typeof schema`
224
+ * Useful for exporting the inferred type alongside a schema constant.
225
+ */
226
+ readonly type: (name: string, ctx: SymbolContext, type: n.TSType) => SymbolStatement;
227
+ };
228
+ /**
229
+ * Create a SymbolProgram from statements, extracting symbol metadata.
230
+ * Accepts both regular statements and SymbolStatements.
231
+ */
232
+ declare function createSymbolProgram(...statements: (n.Statement | SymbolStatement)[]): SymbolProgram;
233
+ /**
234
+ * Conjure - AST Builder DSL
235
+ *
236
+ * A fluent, immutable API for constructing JavaScript/TypeScript AST nodes.
237
+ */
238
+ export declare const conjure: {
239
+ /** Start a chain from an identifier */
240
+ readonly id: (name: string) => ChainBuilder;
241
+ /** Start a chain from any expression */
242
+ readonly chain: (expr: n.Expression) => ChainBuilder;
243
+ /** Start an object literal builder */
244
+ readonly obj: () => ObjBuilder;
245
+ /** Start an array literal builder */
246
+ readonly arr: (...elements: n.Expression[]) => ArrBuilder;
247
+ /** Start a function builder */
248
+ readonly fn: () => FnBuilder;
249
+ /** String literal */
250
+ readonly str: (value: string) => recast.types.namedTypes.StringLiteral;
251
+ /** Numeric literal */
252
+ readonly num: (value: number) => recast.types.namedTypes.NumericLiteral;
253
+ /** Boolean literal */
254
+ readonly bool: (value: boolean) => recast.types.namedTypes.BooleanLiteral;
255
+ /** null */
256
+ readonly null: () => recast.types.namedTypes.NullLiteral;
257
+ /** undefined */
258
+ readonly undefined: () => recast.types.namedTypes.Identifier;
259
+ /** Template literal */
260
+ readonly template: (quasis: string[], ...expressions: n.Expression[]) => recast.types.namedTypes.TemplateLiteral;
261
+ readonly op: {
262
+ /** Generic binary expression */
263
+ readonly binary: (left: n.Expression, operator: BinaryOp, right: n.Expression) => recast.types.namedTypes.BinaryExpression;
264
+ /** Logical expression (&&, ||, ??) */
265
+ readonly logical: (left: n.Expression, operator: LogicalOp, right: n.Expression) => recast.types.namedTypes.LogicalExpression;
266
+ /** Unary expression */
267
+ readonly unary: (operator: UnaryOp, argument: n.Expression) => recast.types.namedTypes.UnaryExpression;
268
+ /** Assignment expression */
269
+ readonly assign: (left: n.Identifier | n.MemberExpression | n.Pattern, operator: AssignOp, right: n.Expression) => recast.types.namedTypes.AssignmentExpression;
270
+ /** Ternary/conditional expression */
271
+ readonly ternary: (test: n.Expression, consequent: n.Expression, alternate: n.Expression) => recast.types.namedTypes.ConditionalExpression;
272
+ /** New expression */
273
+ readonly new: (callee: n.Expression, args?: n.Expression[]) => recast.types.namedTypes.NewExpression;
274
+ /** Strict equality: `===` */
275
+ readonly eq: (left: n.Expression, right: n.Expression) => recast.types.namedTypes.BinaryExpression;
276
+ /** Strict inequality: `!==` */
277
+ readonly neq: (left: n.Expression, right: n.Expression) => recast.types.namedTypes.BinaryExpression;
278
+ /** Logical not: `!` */
279
+ readonly not: (expr: n.Expression) => recast.types.namedTypes.UnaryExpression;
280
+ /** Logical and: `&&` */
281
+ readonly and: (left: n.Expression, right: n.Expression) => recast.types.namedTypes.LogicalExpression;
282
+ /** Logical or: `||` */
283
+ readonly or: (left: n.Expression, right: n.Expression) => recast.types.namedTypes.LogicalExpression;
284
+ /** Nullish coalescing: `??` */
285
+ readonly nullish: (left: n.Expression, right: n.Expression) => recast.types.namedTypes.LogicalExpression;
286
+ };
287
+ readonly stmt: {
288
+ /** `const name = init` */
289
+ readonly const: (name: string, init: n.Expression, type?: n.TSType) => recast.types.namedTypes.VariableDeclaration;
290
+ /** `let name = init` */
291
+ readonly let: (name: string, init?: n.Expression, type?: n.TSType) => recast.types.namedTypes.VariableDeclaration;
292
+ /** `return expr` */
293
+ readonly return: (expr?: n.Expression) => recast.types.namedTypes.ReturnStatement;
294
+ /** Expression statement: `expr;` */
295
+ readonly expr: (expr: n.Expression) => recast.types.namedTypes.ExpressionStatement;
296
+ /** If statement */
297
+ readonly if: (test: n.Expression, consequent: n.Statement[], alternate?: n.Statement[]) => recast.types.namedTypes.IfStatement;
298
+ /** Throw statement */
299
+ readonly throw: (expr: n.Expression) => recast.types.namedTypes.ThrowStatement;
300
+ /** Try-catch statement */
301
+ readonly try: (block: n.Statement[], catchParam: string, catchBlock: n.Statement[], finallyBlock?: n.Statement[]) => recast.types.namedTypes.TryStatement;
302
+ /** For...of statement */
303
+ readonly forOf: (varKind: "const" | "let", varName: string, iterable: n.Expression, body: n.Statement[]) => recast.types.namedTypes.ForOfStatement;
304
+ /** Block statement */
305
+ readonly block: (...statements: n.Statement[]) => recast.types.namedTypes.BlockStatement;
306
+ };
307
+ readonly ts: {
308
+ readonly string: () => recast.types.namedTypes.TSStringKeyword;
309
+ readonly number: () => recast.types.namedTypes.TSNumberKeyword;
310
+ readonly boolean: () => recast.types.namedTypes.TSBooleanKeyword;
311
+ readonly bigint: () => recast.types.namedTypes.TSBigIntKeyword;
312
+ readonly any: () => recast.types.namedTypes.TSAnyKeyword;
313
+ readonly unknown: () => recast.types.namedTypes.TSUnknownKeyword;
314
+ readonly never: () => recast.types.namedTypes.TSNeverKeyword;
315
+ readonly void: () => recast.types.namedTypes.TSVoidKeyword;
316
+ readonly null: () => recast.types.namedTypes.TSNullKeyword;
317
+ readonly undefined: () => recast.types.namedTypes.TSUndefinedKeyword;
318
+ /** Type reference: `TypeName` or `TypeName<T>` */
319
+ readonly ref: (name: string, typeParams?: n.TSType[]) => recast.types.namedTypes.TSTypeReference;
320
+ /** Qualified name reference: `Namespace.Type` */
321
+ readonly qualifiedRef: (qualifier: string, name: string, typeParams?: n.TSType[]) => recast.types.namedTypes.TSTypeReference;
322
+ /** Array type: `T[]` */
323
+ readonly array: (elementType: n.TSType) => recast.types.namedTypes.TSArrayType;
324
+ /** Union type: `A | B | C` */
325
+ readonly union: (...types: n.TSType[]) => recast.types.namedTypes.TSUnionType;
326
+ /** Intersection type: `A & B` */
327
+ readonly intersection: (...types: n.TSType[]) => recast.types.namedTypes.TSIntersectionType;
328
+ /** Literal type: `"value"` or `42` */
329
+ readonly literal: (value: string | number | boolean) => recast.types.namedTypes.TSLiteralType;
330
+ /** Tuple type: `[A, B, C]` */
331
+ readonly tuple: (...types: n.TSType[]) => recast.types.namedTypes.TSTupleType;
332
+ /** Function type: `(a: A, b: B) => R` */
333
+ readonly fn: (params: {
334
+ name: string;
335
+ type: n.TSType;
336
+ optional?: boolean;
337
+ }[], returnType: n.TSType) => recast.types.namedTypes.TSFunctionType;
338
+ /** Typeof type: `typeof x` */
339
+ readonly typeof: (expr: string) => recast.types.namedTypes.TSTypeQuery;
340
+ /** Keyof type: `keyof T` */
341
+ readonly keyof: (type: n.TSType) => n.TSTypeOperator;
342
+ /** Readonly type: `readonly T` */
343
+ readonly readonly: (type: n.TSType) => n.TSTypeOperator;
344
+ /** Promise type: `Promise<T>` */
345
+ readonly promise: (inner: n.TSType) => recast.types.namedTypes.TSTypeReference;
346
+ /**
347
+ * Object type literal: `{ name: string; age?: number }`
348
+ * @example
349
+ * ts.objectType([
350
+ * { name: "id", type: ts.string() },
351
+ * { name: "count", type: ts.number(), optional: true },
352
+ * ])
353
+ */
354
+ readonly objectType: (props: {
355
+ name: string;
356
+ type: n.TSType;
357
+ optional?: boolean;
358
+ readonly?: boolean;
359
+ }[]) => recast.types.namedTypes.TSTypeLiteral;
360
+ };
361
+ readonly param: {
362
+ /**
363
+ * Create a typed parameter: `name: Type`
364
+ */
365
+ readonly typed: (name: string, type: n.TSType) => n.Identifier;
366
+ /**
367
+ * Create an optional typed parameter: `name?: Type`
368
+ */
369
+ readonly optional: (name: string, type: n.TSType) => n.Identifier;
370
+ /**
371
+ * Create a parameter with default value: `name: Type = defaultValue`
372
+ */
373
+ readonly withDefault: (name: string, defaultValue: n.Expression, type?: n.TSType) => n.AssignmentPattern;
374
+ /**
375
+ * Create a destructured parameter with Pick type: `{ field }: Pick<Entity, 'field'>`
376
+ *
377
+ * @example
378
+ * param.pick(["id", "name"], "UserRow")
379
+ * // { id, name }: Pick<UserRow, "id" | "name">
380
+ */
381
+ readonly pick: (fields: readonly string[], entityType: string) => n.ObjectPattern;
382
+ /**
383
+ * Create a destructured parameter with explicit types and optional defaults.
384
+ *
385
+ * @example
386
+ * param.destructured([
387
+ * { name: "limit", type: ts.number(), optional: true, defaultValue: conjure.num(50) },
388
+ * { name: "offset", type: ts.number(), optional: true, defaultValue: conjure.num(0) },
389
+ * ])
390
+ * // { limit = 50, offset = 0 }: { limit?: number; offset?: number }
391
+ */
392
+ readonly destructured: (fields: readonly DestructuredField[]) => n.ObjectPattern;
393
+ };
394
+ readonly exp: {
395
+ /**
396
+ * Export interface declaration: `export interface Name { ... }`
397
+ */
398
+ readonly interface: (name: string, ctx: SymbolContext, properties: TSPropertySignature[]) => SymbolStatement;
399
+ /**
400
+ * Export type alias: `export type Name = Type`
401
+ */
402
+ readonly typeAlias: (name: string, ctx: SymbolContext, type: n.TSType) => SymbolStatement;
403
+ /**
404
+ * Export const declaration: `export const name = init`
405
+ */
406
+ readonly const: (name: string, ctx: SymbolContext, init: n.Expression, typeAnnotation?: n.TSType) => SymbolStatement;
407
+ /**
408
+ * Export type alias for inferred types: `export type Name = typeof schema`
409
+ * Useful for exporting the inferred type alongside a schema constant.
410
+ */
411
+ readonly type: (name: string, ctx: SymbolContext, type: n.TSType) => SymbolStatement;
412
+ };
413
+ /** Await expression */
414
+ readonly await: (expr: n.Expression) => recast.types.namedTypes.AwaitExpression;
415
+ /** Spread expression (for use in arrays/calls) */
416
+ readonly spread: (expr: n.Expression) => recast.types.namedTypes.SpreadElement;
417
+ /** Print AST node to code string */
418
+ readonly print: (node: n.Node) => string;
419
+ /** Create a program from statements (backwards compatible) */
420
+ readonly program: (...statements: n.Statement[]) => recast.types.namedTypes.Program;
421
+ /**
422
+ * Create a SymbolProgram from statements, extracting symbol metadata.
423
+ * Accepts both regular statements and SymbolStatements.
424
+ * Returns a SymbolProgram with the AST node and extracted symbols.
425
+ */
426
+ readonly symbolProgram: typeof createSymbolProgram;
427
+ /** Raw recast builders for advanced use cases */
428
+ readonly b: import("ast-types/lib/gen/builders").builders;
429
+ };
430
+ export default conjure;
431
+ //# sourceMappingURL=conjure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conjure.d.ts","sourceRoot":"","sources":["../../src/lib/conjure.ts"],"names":[],"mappings":"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"}