@danielfgray/pg-sourcerer 0.3.0 → 0.5.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.
- package/bin/pgsourcerer +2 -0
- package/dist/__tests__/fixtures/index.d.ts +15 -0
- package/dist/__tests__/fixtures/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/index.js +19 -0
- package/dist/__tests__/fixtures/index.js.map +1 -0
- package/dist/__tests__/fixtures/introspection.json +40522 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +7 -46
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +38 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -2
- package/dist/config.js.map +1 -1
- package/dist/{lib/conjure.d.ts → conjure/index.d.ts} +62 -3
- package/dist/conjure/index.d.ts.map +1 -0
- package/dist/{lib/conjure.js → conjure/index.js} +124 -3
- package/dist/conjure/index.js.map +1 -0
- package/dist/conjure/signature.d.ts +85 -0
- package/dist/conjure/signature.d.ts.map +1 -0
- package/dist/conjure/signature.js +130 -0
- package/dist/conjure/signature.js.map +1 -0
- package/dist/conjure/types.d.ts +97 -0
- package/dist/conjure/types.d.ts.map +1 -0
- package/dist/conjure/types.js +206 -0
- package/dist/conjure/types.js.map +1 -0
- package/dist/errors.d.ts +114 -139
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +82 -36
- package/dist/errors.js.map +1 -1
- package/dist/generate.d.ts +45 -46
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +86 -59
- package/dist/generate.js.map +1 -1
- package/dist/hex/builder.d.ts +12 -0
- package/dist/hex/builder.d.ts.map +1 -0
- package/dist/hex/builder.js +64 -0
- package/dist/hex/builder.js.map +1 -0
- package/dist/hex/ddl.d.ts +53 -0
- package/dist/hex/ddl.d.ts.map +1 -0
- package/dist/hex/ddl.js +306 -0
- package/dist/hex/ddl.js.map +1 -0
- package/dist/hex/index.d.ts +105 -0
- package/dist/hex/index.d.ts.map +1 -0
- package/dist/hex/index.js +81 -0
- package/dist/hex/index.js.map +1 -0
- package/dist/hex/primitives.d.ts +23 -0
- package/dist/hex/primitives.d.ts.map +1 -0
- package/dist/hex/primitives.js +38 -0
- package/dist/hex/primitives.js.map +1 -0
- package/dist/hex/query.d.ts +116 -0
- package/dist/hex/query.d.ts.map +1 -0
- package/dist/hex/query.js +219 -0
- package/dist/hex/query.js.map +1 -0
- package/dist/hex/types.d.ts +287 -0
- package/dist/hex/types.d.ts.map +1 -0
- package/dist/hex/types.js +431 -0
- package/dist/hex/types.js.map +1 -0
- package/dist/index.d.ts +17 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -44
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +76 -140
- package/dist/init.js.map +1 -1
- package/dist/ir/extensions/queries.d.ts +6 -6
- package/dist/ir/extensions/queries.d.ts.map +1 -1
- package/dist/ir/extensions/queries.js +6 -4
- package/dist/ir/extensions/queries.js.map +1 -1
- package/dist/ir/extensions/schema-builder.d.ts.map +1 -1
- package/dist/ir/extensions/schema-builder.js.map +1 -1
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js.map +1 -1
- package/dist/ir/relation-graph.d.ts.map +1 -1
- package/dist/ir/relation-graph.js +8 -8
- package/dist/ir/relation-graph.js.map +1 -1
- package/dist/ir/semantic-ir.d.ts +38 -0
- package/dist/ir/semantic-ir.d.ts.map +1 -1
- package/dist/ir/semantic-ir.js +50 -2
- package/dist/ir/semantic-ir.js.map +1 -1
- package/dist/ir/smart-tags.d.ts.map +1 -1
- package/dist/ir/smart-tags.js.map +1 -1
- package/dist/lib/field-utils.d.ts.map +1 -1
- package/dist/lib/field-utils.js +7 -7
- package/dist/lib/field-utils.js.map +1 -1
- package/dist/lib/join-graph.d.ts +95 -0
- package/dist/lib/join-graph.d.ts.map +1 -0
- package/dist/lib/join-graph.js +305 -0
- package/dist/lib/join-graph.js.map +1 -0
- package/dist/lib/picker.d.ts +60 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +325 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/plugins/arktype.d.ts +20 -24
- package/dist/plugins/arktype.d.ts.map +1 -1
- package/dist/plugins/arktype.js +462 -386
- package/dist/plugins/arktype.js.map +1 -1
- package/dist/plugins/effect/http.d.ts +7 -0
- package/dist/plugins/effect/http.d.ts.map +1 -0
- package/dist/plugins/effect/http.js +460 -0
- package/dist/plugins/effect/http.js.map +1 -0
- package/dist/plugins/effect/index.d.ts +22 -0
- package/dist/plugins/effect/index.d.ts.map +1 -0
- package/dist/plugins/effect/index.js +65 -0
- package/dist/plugins/effect/index.js.map +1 -0
- package/dist/plugins/effect/models.d.ts +6 -0
- package/dist/plugins/effect/models.d.ts.map +1 -0
- package/dist/plugins/effect/models.js +116 -0
- package/dist/plugins/effect/models.js.map +1 -0
- package/dist/plugins/effect/repos.d.ts +21 -0
- package/dist/plugins/effect/repos.d.ts.map +1 -0
- package/dist/plugins/effect/repos.js +131 -0
- package/dist/plugins/effect/repos.js.map +1 -0
- package/dist/plugins/effect/schemas.d.ts +7 -0
- package/dist/plugins/effect/schemas.d.ts.map +1 -0
- package/dist/plugins/effect/schemas.js +75 -0
- package/dist/plugins/effect/schemas.js.map +1 -0
- package/dist/plugins/effect/shared.d.ts +116 -0
- package/dist/plugins/effect/shared.d.ts.map +1 -0
- package/dist/plugins/effect/shared.js +164 -0
- package/dist/plugins/effect/shared.js.map +1 -0
- package/dist/plugins/http-elysia.d.ts +20 -27
- package/dist/plugins/http-elysia.d.ts.map +1 -1
- package/dist/plugins/http-elysia.js +350 -475
- package/dist/plugins/http-elysia.js.map +1 -1
- package/dist/plugins/http-express.d.ts +20 -31
- package/dist/plugins/http-express.d.ts.map +1 -1
- package/dist/plugins/http-express.js +281 -268
- package/dist/plugins/http-express.js.map +1 -1
- package/dist/plugins/http-hono.d.ts +17 -33
- package/dist/plugins/http-hono.d.ts.map +1 -1
- package/dist/plugins/http-hono.js +317 -341
- package/dist/plugins/http-hono.js.map +1 -1
- package/dist/plugins/http-orpc.d.ts +34 -33
- package/dist/plugins/http-orpc.d.ts.map +1 -1
- package/dist/plugins/http-orpc.js +345 -257
- package/dist/plugins/http-orpc.js.map +1 -1
- package/dist/plugins/http-trpc.d.ts +33 -35
- package/dist/plugins/http-trpc.d.ts.map +1 -1
- package/dist/plugins/http-trpc.js +337 -241
- package/dist/plugins/http-trpc.js.map +1 -1
- package/dist/plugins/kysely.d.ts +54 -59
- package/dist/plugins/kysely.d.ts.map +1 -1
- package/dist/plugins/kysely.js +826 -687
- package/dist/plugins/kysely.js.map +1 -1
- package/dist/plugins/sql-queries.d.ts +38 -44
- package/dist/plugins/sql-queries.d.ts.map +1 -1
- package/dist/plugins/sql-queries.js +497 -897
- package/dist/plugins/sql-queries.js.map +1 -1
- package/dist/plugins/types.d.ts +12 -20
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/types.js +84 -227
- package/dist/plugins/types.js.map +1 -1
- package/dist/plugins/valibot.d.ts +7 -44
- package/dist/plugins/valibot.d.ts.map +1 -1
- package/dist/plugins/valibot.js +376 -382
- package/dist/plugins/valibot.js.map +1 -1
- package/dist/plugins/zod.d.ts +20 -24
- package/dist/plugins/zod.d.ts.map +1 -1
- package/dist/plugins/zod.js +370 -367
- package/dist/plugins/zod.js.map +1 -1
- package/dist/runtime/emit.d.ts +64 -0
- package/dist/runtime/emit.d.ts.map +1 -0
- package/dist/runtime/emit.js +445 -0
- package/dist/runtime/emit.js.map +1 -0
- package/dist/runtime/errors.d.ts +36 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +29 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/file-assignment.d.ts +161 -0
- package/dist/runtime/file-assignment.d.ts.map +1 -0
- package/dist/runtime/file-assignment.js +195 -0
- package/dist/runtime/file-assignment.js.map +1 -0
- package/dist/runtime/orchestrator.d.ts +62 -0
- package/dist/runtime/orchestrator.d.ts.map +1 -0
- package/dist/runtime/orchestrator.js +99 -0
- package/dist/runtime/orchestrator.js.map +1 -0
- package/dist/runtime/registry.d.ts +268 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +436 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/types.d.ts +182 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/validation.d.ts +41 -0
- package/dist/runtime/validation.d.ts.map +1 -0
- package/dist/runtime/validation.js +70 -0
- package/dist/runtime/validation.js.map +1 -0
- package/dist/services/config-loader.d.ts.map +1 -1
- package/dist/services/config-loader.js +15 -6
- package/dist/services/config-loader.js.map +1 -1
- package/dist/services/config.d.ts +55 -25
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +60 -34
- package/dist/services/config.js.map +1 -1
- package/dist/services/file-writer.d.ts +3 -3
- package/dist/services/file-writer.d.ts.map +1 -1
- package/dist/services/file-writer.js +6 -8
- package/dist/services/file-writer.js.map +1 -1
- package/dist/services/inflection.d.ts +126 -27
- package/dist/services/inflection.d.ts.map +1 -1
- package/dist/services/inflection.js +300 -72
- package/dist/services/inflection.js.map +1 -1
- package/dist/services/introspection.d.ts.map +1 -1
- package/dist/services/introspection.js +6 -6
- package/dist/services/introspection.js.map +1 -1
- package/dist/services/ir-builder.d.ts.map +1 -1
- package/dist/services/ir-builder.js +73 -77
- package/dist/services/ir-builder.js.map +1 -1
- package/dist/services/ir.d.ts.map +1 -1
- package/dist/services/ir.js.map +1 -1
- package/dist/services/pg-types.d.ts.map +1 -1
- package/dist/services/pg-types.js +3 -3
- package/dist/services/pg-types.js.map +1 -1
- package/dist/services/smart-tags-parser.d.ts.map +1 -1
- package/dist/services/smart-tags-parser.js +4 -4
- package/dist/services/smart-tags-parser.js.map +1 -1
- package/dist/services/type-hints.d.ts.map +1 -1
- package/dist/services/type-hints.js +1 -1
- package/dist/services/type-hints.js.map +1 -1
- package/dist/services/user-module-parser.d.ts +46 -0
- package/dist/services/user-module-parser.d.ts.map +1 -0
- package/dist/services/user-module-parser.js +181 -0
- package/dist/services/user-module-parser.js.map +1 -0
- package/dist/shared/converters.d.ts +60 -0
- package/dist/shared/converters.d.ts.map +1 -0
- package/dist/shared/converters.js +168 -0
- package/dist/shared/converters.js.map +1 -0
- package/dist/shared/query-types.d.ts +95 -0
- package/dist/shared/query-types.d.ts.map +1 -0
- package/dist/shared/query-types.js +9 -0
- package/dist/shared/query-types.js.map +1 -0
- package/dist/testing.d.ts +125 -37
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +134 -42
- package/dist/testing.js.map +1 -1
- package/dist/user-module.d.ts +86 -0
- package/dist/user-module.d.ts.map +1 -0
- package/dist/user-module.js +55 -0
- package/dist/user-module.js.map +1 -0
- package/package.json +10 -6
- package/dist/lib/conjure.d.ts.map +0 -1
- package/dist/lib/conjure.js.map +0 -1
- package/dist/lib/hex.d.ts +0 -119
- package/dist/lib/hex.d.ts.map +0 -1
- package/dist/lib/hex.js +0 -188
- package/dist/lib/hex.js.map +0 -1
- package/dist/plugins/effect.d.ts +0 -53
- package/dist/plugins/effect.d.ts.map +0 -1
- package/dist/plugins/effect.js +0 -1074
- package/dist/plugins/effect.js.map +0 -1
- package/dist/plugins/kysely/queries.d.ts +0 -92
- package/dist/plugins/kysely/queries.d.ts.map +0 -1
- package/dist/plugins/kysely/queries.js +0 -1169
- package/dist/plugins/kysely/queries.js.map +0 -1
- package/dist/plugins/kysely/shared.d.ts +0 -59
- package/dist/plugins/kysely/shared.d.ts.map +0 -1
- package/dist/plugins/kysely/shared.js +0 -247
- package/dist/plugins/kysely/shared.js.map +0 -1
- package/dist/plugins/kysely/types.d.ts +0 -22
- package/dist/plugins/kysely/types.d.ts.map +0 -1
- package/dist/plugins/kysely/types.js +0 -428
- package/dist/plugins/kysely/types.js.map +0 -1
- package/dist/services/artifact-store.d.ts +0 -65
- package/dist/services/artifact-store.d.ts.map +0 -1
- package/dist/services/artifact-store.js +0 -57
- package/dist/services/artifact-store.js.map +0 -1
- package/dist/services/core-providers.d.ts +0 -15
- package/dist/services/core-providers.d.ts.map +0 -1
- package/dist/services/core-providers.js +0 -23
- package/dist/services/core-providers.js.map +0 -1
- package/dist/services/emissions.d.ts +0 -103
- package/dist/services/emissions.d.ts.map +0 -1
- package/dist/services/emissions.js +0 -241
- package/dist/services/emissions.js.map +0 -1
- package/dist/services/execution.d.ts +0 -35
- package/dist/services/execution.d.ts.map +0 -1
- package/dist/services/execution.js +0 -86
- package/dist/services/execution.js.map +0 -1
- package/dist/services/file-builder.d.ts +0 -85
- package/dist/services/file-builder.d.ts.map +0 -1
- package/dist/services/file-builder.js +0 -112
- package/dist/services/file-builder.js.map +0 -1
- package/dist/services/plugin-meta.d.ts +0 -33
- package/dist/services/plugin-meta.d.ts.map +0 -1
- package/dist/services/plugin-meta.js +0 -24
- package/dist/services/plugin-meta.js.map +0 -1
- package/dist/services/plugin-runner.d.ts +0 -42
- package/dist/services/plugin-runner.d.ts.map +0 -1
- package/dist/services/plugin-runner.js +0 -84
- package/dist/services/plugin-runner.js.map +0 -1
- package/dist/services/plugin.d.ts +0 -421
- package/dist/services/plugin.d.ts.map +0 -1
- package/dist/services/plugin.js +0 -197
- package/dist/services/plugin.js.map +0 -1
- package/dist/services/resolution.d.ts +0 -38
- package/dist/services/resolution.d.ts.map +0 -1
- package/dist/services/resolution.js +0 -242
- package/dist/services/resolution.js.map +0 -1
- package/dist/services/service-registry.d.ts +0 -74
- package/dist/services/service-registry.d.ts.map +0 -1
- package/dist/services/service-registry.js +0 -61
- package/dist/services/service-registry.js.map +0 -1
- package/dist/services/symbols.d.ts +0 -144
- package/dist/services/symbols.d.ts.map +0 -1
- package/dist/services/symbols.js +0 -144
- package/dist/services/symbols.js.map +0 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { namedTypes as n } from "ast-types";
|
|
2
|
+
import type { TSTypeKind } from "ast-types/lib/gen/kinds.js";
|
|
3
|
+
import type { QueryDescriptor, ParamDescriptor, ReturnDescriptor } from "../shared/query-types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Template parts extracted from parameterized SQL.
|
|
6
|
+
* Used for generating tagged template literals.
|
|
7
|
+
*/
|
|
8
|
+
export interface TemplateParts {
|
|
9
|
+
/** String parts between parameters */
|
|
10
|
+
readonly parts: readonly string[];
|
|
11
|
+
/** Parameter names in order */
|
|
12
|
+
readonly paramNames: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Options for toTaggedTemplate()
|
|
16
|
+
*/
|
|
17
|
+
export interface TaggedTemplateOptions {
|
|
18
|
+
/** Type parameter for the tag: sql<User>`...` */
|
|
19
|
+
readonly typeParam?: TSTypeKind;
|
|
20
|
+
/** Custom expression for each param. Default: identifier with param name */
|
|
21
|
+
readonly paramExpr?: (name: string) => n.Expression;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for toParameterizedCall()
|
|
25
|
+
*/
|
|
26
|
+
export interface ParameterizedCallOptions {
|
|
27
|
+
/** Type parameter for the call: pool.query<User>(...) */
|
|
28
|
+
readonly typeParam?: TSTypeKind;
|
|
29
|
+
/** Custom expression for each param. Default: identifier with param name */
|
|
30
|
+
readonly paramExpr?: (name: string) => n.Expression;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Query object - wraps a QueryDescriptor with AST rendering methods.
|
|
34
|
+
*
|
|
35
|
+
* This is the primary interface for plugins working with SQL queries.
|
|
36
|
+
* Use `hex.select()` or `hex.mutate()` to create Query objects.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const query = hex.select(ir, {
|
|
41
|
+
* selects: [{ kind: "star", from: "users" }],
|
|
42
|
+
* from: { kind: "table", table: "users" },
|
|
43
|
+
* where: [{ kind: "equals", column: "users.id", value: { name: "id", pgType: "uuid" } }],
|
|
44
|
+
* })
|
|
45
|
+
*
|
|
46
|
+
* // Access data
|
|
47
|
+
* query.sql // "SELECT users.* FROM users WHERE users.id = $1"
|
|
48
|
+
* query.descriptor // Full QueryDescriptor
|
|
49
|
+
* query.templateParts // { parts: ["SELECT ... WHERE users.id = ", ""], paramNames: ["id"] }
|
|
50
|
+
*
|
|
51
|
+
* // Render to AST
|
|
52
|
+
* query.toTaggedTemplate("sql", { typeParam: types.ref("User") })
|
|
53
|
+
* // → sql<User>`SELECT users.* FROM users WHERE users.id = ${id}`
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare class Query {
|
|
57
|
+
#private;
|
|
58
|
+
constructor(descriptor: QueryDescriptor);
|
|
59
|
+
/** The parameterized SQL string (with $1, $2, etc.) */
|
|
60
|
+
get sql(): string;
|
|
61
|
+
/** The full QueryDescriptor for advanced access */
|
|
62
|
+
get descriptor(): QueryDescriptor;
|
|
63
|
+
/** Template parts for building tagged templates */
|
|
64
|
+
get templateParts(): TemplateParts;
|
|
65
|
+
/** Parameter descriptors */
|
|
66
|
+
get params(): readonly ParamDescriptor[];
|
|
67
|
+
/** Return descriptor */
|
|
68
|
+
get returns(): ReturnDescriptor;
|
|
69
|
+
/**
|
|
70
|
+
* Render as a tagged template literal: sql<T>`SELECT ... ${id}`
|
|
71
|
+
*
|
|
72
|
+
* @param tag - The tag name (e.g., "sql")
|
|
73
|
+
* @param opts - Optional type parameter and custom param expressions
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* query.toTaggedTemplate("sql")
|
|
77
|
+
* // → sql`SELECT * FROM users WHERE id = ${id}`
|
|
78
|
+
*
|
|
79
|
+
* query.toTaggedTemplate("sql", { typeParam: types.ref("User") })
|
|
80
|
+
* // → sql<User>`SELECT * FROM users WHERE id = ${id}`
|
|
81
|
+
*
|
|
82
|
+
* query.toTaggedTemplate("sql", { paramExpr: (name) => conjure.id("params").prop(name).build() })
|
|
83
|
+
* // → sql`SELECT * FROM users WHERE id = ${params.id}`
|
|
84
|
+
*/
|
|
85
|
+
toTaggedTemplate(tag: string, opts?: TaggedTemplateOptions): n.TaggedTemplateExpression;
|
|
86
|
+
/**
|
|
87
|
+
* Render as a parameterized call: pool.query<T>("SELECT ...", [id])
|
|
88
|
+
*
|
|
89
|
+
* @param obj - The object to call the method on (e.g., "pool", "db")
|
|
90
|
+
* @param method - The method name (e.g., "query", "execute")
|
|
91
|
+
* @param opts - Optional type parameter and custom param expressions
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* query.toParameterizedCall("pool", "query")
|
|
95
|
+
* // → pool.query("SELECT * FROM users WHERE id = $1", [id])
|
|
96
|
+
*
|
|
97
|
+
* query.toParameterizedCall("db", "execute", { typeParam: types.ref("User") })
|
|
98
|
+
* // → db.execute<User>("SELECT * FROM users WHERE id = $1", [id])
|
|
99
|
+
*/
|
|
100
|
+
toParameterizedCall(obj: string, method: string, opts?: ParameterizedCallOptions): n.CallExpression;
|
|
101
|
+
/**
|
|
102
|
+
* Build a function type signature for this query.
|
|
103
|
+
*
|
|
104
|
+
* Used in symbol declarations to describe the query function's type.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* query.toSignature()
|
|
108
|
+
* // → (id: string) => Promise<User | null>
|
|
109
|
+
*/
|
|
110
|
+
toSignature(): TSTypeKind;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a Query object from a QueryDescriptor.
|
|
114
|
+
*/
|
|
115
|
+
export declare function createQuery(descriptor: QueryDescriptor): Query;
|
|
116
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/hex/query.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAOnG;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,CAAC,UAAU,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,CAAC,UAAU,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,KAAK;;gBAIJ,UAAU,EAAE,eAAe;IAKvC,uDAAuD;IACvD,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,mDAAmD;IACnD,IAAI,UAAU,IAAI,eAAe,CAEhC;IAED,mDAAmD;IACnD,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,4BAA4B;IAC5B,IAAI,MAAM,IAAI,SAAS,eAAe,EAAE,CAEvC;IAED,wBAAwB;IACxB,IAAI,OAAO,IAAI,gBAAgB,CAE9B;IA2CD;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,CAAC,CAAC,wBAAwB;IAoBvF;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,CAAC,CAAC,cAAc;IA8BnG;;;;;;;;OAQG;IACH,WAAW,IAAI,UAAU;CA2C1B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,KAAK,CAE9D"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hex - Query Object
|
|
3
|
+
*
|
|
4
|
+
* Query class that wraps QueryDescriptor with AST rendering methods.
|
|
5
|
+
*/
|
|
6
|
+
import recast from "recast";
|
|
7
|
+
import { conjure, cast } from "../conjure/index.js";
|
|
8
|
+
import { param as sigParam, returns as sigReturns, sig } from "../conjure/signature.js";
|
|
9
|
+
import * as types from "../conjure/types.js";
|
|
10
|
+
const b = recast.types.builders;
|
|
11
|
+
/**
|
|
12
|
+
* Query object - wraps a QueryDescriptor with AST rendering methods.
|
|
13
|
+
*
|
|
14
|
+
* This is the primary interface for plugins working with SQL queries.
|
|
15
|
+
* Use `hex.select()` or `hex.mutate()` to create Query objects.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const query = hex.select(ir, {
|
|
20
|
+
* selects: [{ kind: "star", from: "users" }],
|
|
21
|
+
* from: { kind: "table", table: "users" },
|
|
22
|
+
* where: [{ kind: "equals", column: "users.id", value: { name: "id", pgType: "uuid" } }],
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* // Access data
|
|
26
|
+
* query.sql // "SELECT users.* FROM users WHERE users.id = $1"
|
|
27
|
+
* query.descriptor // Full QueryDescriptor
|
|
28
|
+
* query.templateParts // { parts: ["SELECT ... WHERE users.id = ", ""], paramNames: ["id"] }
|
|
29
|
+
*
|
|
30
|
+
* // Render to AST
|
|
31
|
+
* query.toTaggedTemplate("sql", { typeParam: types.ref("User") })
|
|
32
|
+
* // → sql<User>`SELECT users.* FROM users WHERE users.id = ${id}`
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class Query {
|
|
36
|
+
#descriptor;
|
|
37
|
+
#templateParts;
|
|
38
|
+
constructor(descriptor) {
|
|
39
|
+
this.#descriptor = descriptor;
|
|
40
|
+
this.#templateParts = this.#extractTemplateParts();
|
|
41
|
+
}
|
|
42
|
+
/** The parameterized SQL string (with $1, $2, etc.) */
|
|
43
|
+
get sql() {
|
|
44
|
+
return this.#descriptor.sql;
|
|
45
|
+
}
|
|
46
|
+
/** The full QueryDescriptor for advanced access */
|
|
47
|
+
get descriptor() {
|
|
48
|
+
return this.#descriptor;
|
|
49
|
+
}
|
|
50
|
+
/** Template parts for building tagged templates */
|
|
51
|
+
get templateParts() {
|
|
52
|
+
return this.#templateParts;
|
|
53
|
+
}
|
|
54
|
+
/** Parameter descriptors */
|
|
55
|
+
get params() {
|
|
56
|
+
return this.#descriptor.params;
|
|
57
|
+
}
|
|
58
|
+
/** Return descriptor */
|
|
59
|
+
get returns() {
|
|
60
|
+
return this.#descriptor.returns;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract template parts from parameterized SQL.
|
|
64
|
+
*
|
|
65
|
+
* Converts "SELECT * FROM users WHERE id = $1 AND name = $2"
|
|
66
|
+
* into { parts: ["SELECT * FROM users WHERE id = ", " AND name = ", ""], paramNames: ["id", "name"] }
|
|
67
|
+
*/
|
|
68
|
+
#extractTemplateParts() {
|
|
69
|
+
const sql = this.#descriptor.sql;
|
|
70
|
+
const params = this.#descriptor.params;
|
|
71
|
+
// Split on $N placeholders
|
|
72
|
+
const parts = [];
|
|
73
|
+
const paramNames = [];
|
|
74
|
+
// Regex to match $1, $2, etc.
|
|
75
|
+
const regex = /\$(\d+)/g;
|
|
76
|
+
let lastIndex = 0;
|
|
77
|
+
let match;
|
|
78
|
+
while ((match = regex.exec(sql)) !== null) {
|
|
79
|
+
// Add the part before this placeholder
|
|
80
|
+
parts.push(sql.slice(lastIndex, match.index));
|
|
81
|
+
// Get param name by index (1-based)
|
|
82
|
+
const paramIndex = parseInt(match[1], 10) - 1;
|
|
83
|
+
const param = params[paramIndex];
|
|
84
|
+
if (param) {
|
|
85
|
+
paramNames.push(param.name);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
paramNames.push(`param${paramIndex + 1}`);
|
|
89
|
+
}
|
|
90
|
+
lastIndex = regex.lastIndex;
|
|
91
|
+
}
|
|
92
|
+
// Add the final part after the last placeholder
|
|
93
|
+
parts.push(sql.slice(lastIndex));
|
|
94
|
+
return { parts, paramNames };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Render as a tagged template literal: sql<T>`SELECT ... ${id}`
|
|
98
|
+
*
|
|
99
|
+
* @param tag - The tag name (e.g., "sql")
|
|
100
|
+
* @param opts - Optional type parameter and custom param expressions
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* query.toTaggedTemplate("sql")
|
|
104
|
+
* // → sql`SELECT * FROM users WHERE id = ${id}`
|
|
105
|
+
*
|
|
106
|
+
* query.toTaggedTemplate("sql", { typeParam: types.ref("User") })
|
|
107
|
+
* // → sql<User>`SELECT * FROM users WHERE id = ${id}`
|
|
108
|
+
*
|
|
109
|
+
* query.toTaggedTemplate("sql", { paramExpr: (name) => conjure.id("params").prop(name).build() })
|
|
110
|
+
* // → sql`SELECT * FROM users WHERE id = ${params.id}`
|
|
111
|
+
*/
|
|
112
|
+
toTaggedTemplate(tag, opts) {
|
|
113
|
+
const { parts, paramNames } = this.#templateParts;
|
|
114
|
+
// Build param expressions
|
|
115
|
+
const expressions = paramNames.map(name => {
|
|
116
|
+
if (opts?.paramExpr) {
|
|
117
|
+
return opts.paramExpr(name);
|
|
118
|
+
}
|
|
119
|
+
return b.identifier(name);
|
|
120
|
+
});
|
|
121
|
+
// Use conjure's taggedTemplate builder
|
|
122
|
+
return conjure.taggedTemplate(tag, parts, expressions, opts?.typeParam ? [opts.typeParam] : undefined);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Render as a parameterized call: pool.query<T>("SELECT ...", [id])
|
|
126
|
+
*
|
|
127
|
+
* @param obj - The object to call the method on (e.g., "pool", "db")
|
|
128
|
+
* @param method - The method name (e.g., "query", "execute")
|
|
129
|
+
* @param opts - Optional type parameter and custom param expressions
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* query.toParameterizedCall("pool", "query")
|
|
133
|
+
* // → pool.query("SELECT * FROM users WHERE id = $1", [id])
|
|
134
|
+
*
|
|
135
|
+
* query.toParameterizedCall("db", "execute", { typeParam: types.ref("User") })
|
|
136
|
+
* // → db.execute<User>("SELECT * FROM users WHERE id = $1", [id])
|
|
137
|
+
*/
|
|
138
|
+
toParameterizedCall(obj, method, opts) {
|
|
139
|
+
const { paramNames } = this.#templateParts;
|
|
140
|
+
// Build param array expressions
|
|
141
|
+
const paramExprs = paramNames.map(name => {
|
|
142
|
+
if (opts?.paramExpr) {
|
|
143
|
+
return cast.toExpr(opts.paramExpr(name));
|
|
144
|
+
}
|
|
145
|
+
return b.identifier(name);
|
|
146
|
+
});
|
|
147
|
+
// Build the call: obj.method<T>("sql", [params])
|
|
148
|
+
const callee = b.memberExpression(b.identifier(obj), b.identifier(method));
|
|
149
|
+
const args = [
|
|
150
|
+
b.stringLiteral(this.#descriptor.sql),
|
|
151
|
+
b.arrayExpression(paramExprs),
|
|
152
|
+
];
|
|
153
|
+
const callExpr = b.callExpression(callee, args);
|
|
154
|
+
// Add type parameters if provided
|
|
155
|
+
if (opts?.typeParam) {
|
|
156
|
+
callExpr.typeParameters =
|
|
157
|
+
b.tsTypeParameterInstantiation([opts.typeParam]);
|
|
158
|
+
}
|
|
159
|
+
return callExpr;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Build a function type signature for this query.
|
|
163
|
+
*
|
|
164
|
+
* Used in symbol declarations to describe the query function's type.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* query.toSignature()
|
|
168
|
+
* // → (id: string) => Promise<User | null>
|
|
169
|
+
*/
|
|
170
|
+
toSignature() {
|
|
171
|
+
const params = this.#descriptor.params.map(p => {
|
|
172
|
+
const tsType = conjure.ts.fromString(p.tsType);
|
|
173
|
+
const paramType = p.nullable ? types.nullable(tsType) : tsType;
|
|
174
|
+
return sigParam.simple(p.name, paramType);
|
|
175
|
+
});
|
|
176
|
+
// Build return type based on mode
|
|
177
|
+
const { mode, fields } = this.#descriptor.returns;
|
|
178
|
+
let returnType;
|
|
179
|
+
if (mode === "void") {
|
|
180
|
+
returnType = b.tsVoidKeyword();
|
|
181
|
+
}
|
|
182
|
+
else if (mode === "affected") {
|
|
183
|
+
returnType = b.tsNumberKeyword();
|
|
184
|
+
}
|
|
185
|
+
else if (fields.length === 0) {
|
|
186
|
+
returnType = b.tsUnknownKeyword();
|
|
187
|
+
}
|
|
188
|
+
else if (fields.length === 1 && fields[0].name === "*") {
|
|
189
|
+
// SELECT * returns unknown without entity context
|
|
190
|
+
returnType = b.tsUnknownKeyword();
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Build object type from fields
|
|
194
|
+
const props = fields.map(f => ({
|
|
195
|
+
name: f.name,
|
|
196
|
+
type: conjure.ts.fromString(f.tsType),
|
|
197
|
+
optional: f.nullable,
|
|
198
|
+
}));
|
|
199
|
+
returnType = conjure.ts.objectType(props);
|
|
200
|
+
}
|
|
201
|
+
// Apply cardinality modifiers
|
|
202
|
+
if (mode === "many") {
|
|
203
|
+
returnType = types.array(returnType);
|
|
204
|
+
}
|
|
205
|
+
else if (mode === "oneOrNone") {
|
|
206
|
+
returnType = types.nullable(returnType);
|
|
207
|
+
}
|
|
208
|
+
// Wrap in Promise for async
|
|
209
|
+
returnType = sigReturns.promise(returnType);
|
|
210
|
+
return sig(params, returnType);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a Query object from a QueryDescriptor.
|
|
215
|
+
*/
|
|
216
|
+
export function createQuery(descriptor) {
|
|
217
|
+
return new Query(descriptor);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/hex/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hex - SQL Query Builder Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the declarative query builder API.
|
|
5
|
+
*/
|
|
6
|
+
import type { SemanticIR, TableEntity } from "../ir/semantic-ir.js";
|
|
7
|
+
import type { ParamDescriptor, FieldDescriptor } from "../shared/query-types.js";
|
|
8
|
+
export type JoinType = "inner" | "left" | "right" | "full" | "cross" | "cross lateral";
|
|
9
|
+
export interface SelectItem {
|
|
10
|
+
kind: "column" | "expression" | "star" | "lateral";
|
|
11
|
+
from?: string;
|
|
12
|
+
column?: string;
|
|
13
|
+
expr?: string;
|
|
14
|
+
func?: FunctionCall;
|
|
15
|
+
alias?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface FunctionCall {
|
|
18
|
+
name: string;
|
|
19
|
+
args: FunctionArg[];
|
|
20
|
+
filter?: WhereCondition;
|
|
21
|
+
orderBy?: OrderByItem[];
|
|
22
|
+
window?: {
|
|
23
|
+
partitionBy: (string | Expression)[];
|
|
24
|
+
orderBy: OrderByItem[];
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface FunctionArg {
|
|
28
|
+
kind: "column" | "star" | "expression" | "all";
|
|
29
|
+
from?: string;
|
|
30
|
+
column?: string;
|
|
31
|
+
expr?: string;
|
|
32
|
+
distinct?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface FromItem {
|
|
35
|
+
kind: "table" | "subquery";
|
|
36
|
+
table?: string;
|
|
37
|
+
subquery?: SelectSpec;
|
|
38
|
+
alias?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface JoinItem {
|
|
41
|
+
type: JoinType;
|
|
42
|
+
table: string;
|
|
43
|
+
alias?: string;
|
|
44
|
+
on?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface WhereCondition {
|
|
47
|
+
kind: "equals" | "notEquals" | "greater" | "greaterOrEqual" | "less" | "lessOrEqual" | "isNull" | "isNotNull" | "in" | "notIn" | "like" | "ilike" | "between" | "raw";
|
|
48
|
+
column?: string;
|
|
49
|
+
value?: ParamSpec | string | number | boolean | null;
|
|
50
|
+
values?: (ParamSpec | string | number | boolean)[];
|
|
51
|
+
low?: ParamSpec | string | number;
|
|
52
|
+
high?: ParamSpec | string | number;
|
|
53
|
+
expr?: string;
|
|
54
|
+
subquery?: SelectSpec;
|
|
55
|
+
}
|
|
56
|
+
export interface OrderByItem {
|
|
57
|
+
kind: "column" | "expression" | "param";
|
|
58
|
+
from?: string;
|
|
59
|
+
column?: string;
|
|
60
|
+
expr?: string;
|
|
61
|
+
param?: string;
|
|
62
|
+
direction: "asc" | "desc";
|
|
63
|
+
nulls?: "first" | "last";
|
|
64
|
+
}
|
|
65
|
+
export interface GroupByItem {
|
|
66
|
+
kind: "column" | "expression";
|
|
67
|
+
from?: string;
|
|
68
|
+
column?: string;
|
|
69
|
+
expr?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface HavingCondition {
|
|
72
|
+
kind: "equals" | "notEquals" | "greater" | "greaterOrEqual" | "less" | "lessOrEqual";
|
|
73
|
+
expr: string;
|
|
74
|
+
value: ParamSpec | string | number;
|
|
75
|
+
}
|
|
76
|
+
export interface ParamSpec {
|
|
77
|
+
name: string;
|
|
78
|
+
pgType: string;
|
|
79
|
+
tsType?: string;
|
|
80
|
+
nullable?: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface CommonTableExpression {
|
|
83
|
+
name: string;
|
|
84
|
+
query: SelectSpec;
|
|
85
|
+
}
|
|
86
|
+
export interface SelectSpec {
|
|
87
|
+
selects: SelectItem[];
|
|
88
|
+
from: FromItem;
|
|
89
|
+
joins?: JoinItem[];
|
|
90
|
+
where?: WhereCondition[];
|
|
91
|
+
orderBy?: OrderByItem[];
|
|
92
|
+
groupBy?: GroupByItem[];
|
|
93
|
+
having?: HavingCondition[];
|
|
94
|
+
limit?: number | ParamSpec;
|
|
95
|
+
offset?: number | ParamSpec;
|
|
96
|
+
with?: CommonTableExpression[];
|
|
97
|
+
}
|
|
98
|
+
export interface MutationSpec {
|
|
99
|
+
kind: "insert" | "update" | "delete" | "upsert";
|
|
100
|
+
table: string;
|
|
101
|
+
alias?: string;
|
|
102
|
+
columns?: {
|
|
103
|
+
column: string;
|
|
104
|
+
value: ParamSpec | Expression | null;
|
|
105
|
+
}[];
|
|
106
|
+
returning?: SelectItem[];
|
|
107
|
+
where?: WhereCondition[];
|
|
108
|
+
}
|
|
109
|
+
export interface Expression {
|
|
110
|
+
kind: "column" | "param" | "value" | "raw" | "subquery";
|
|
111
|
+
from?: string;
|
|
112
|
+
column?: string;
|
|
113
|
+
param?: string;
|
|
114
|
+
value?: string | number | boolean | null;
|
|
115
|
+
expr?: string;
|
|
116
|
+
subquery?: SelectSpec;
|
|
117
|
+
}
|
|
118
|
+
export interface ColumnSpec {
|
|
119
|
+
name: string;
|
|
120
|
+
pgType: string;
|
|
121
|
+
nullable?: boolean;
|
|
122
|
+
hasDefault?: boolean;
|
|
123
|
+
defaultValue?: string;
|
|
124
|
+
isArray?: boolean;
|
|
125
|
+
isIdentity?: boolean;
|
|
126
|
+
generationKind?: "always" | "by default";
|
|
127
|
+
}
|
|
128
|
+
export type IndexMethod = "btree" | "gin" | "gist" | "hash" | "brin" | "spgist";
|
|
129
|
+
export interface IndexSpec {
|
|
130
|
+
name: string;
|
|
131
|
+
columns: string[];
|
|
132
|
+
method?: IndexMethod;
|
|
133
|
+
unique?: boolean;
|
|
134
|
+
isPrimaryKey?: boolean;
|
|
135
|
+
where?: string;
|
|
136
|
+
include?: string[];
|
|
137
|
+
opclass?: Record<string, string>;
|
|
138
|
+
}
|
|
139
|
+
export interface PrimaryKeySpec {
|
|
140
|
+
columns: string[];
|
|
141
|
+
name?: string;
|
|
142
|
+
}
|
|
143
|
+
export interface UniqueConstraintSpec {
|
|
144
|
+
columns: string[];
|
|
145
|
+
name?: string;
|
|
146
|
+
where?: string;
|
|
147
|
+
}
|
|
148
|
+
export interface ExcludeConstraintSpec {
|
|
149
|
+
columns: {
|
|
150
|
+
name: string;
|
|
151
|
+
opclass?: string;
|
|
152
|
+
}[];
|
|
153
|
+
name?: string;
|
|
154
|
+
using?: IndexMethod;
|
|
155
|
+
where?: string;
|
|
156
|
+
}
|
|
157
|
+
export type TableConstraintSpec = {
|
|
158
|
+
kind: "primaryKey";
|
|
159
|
+
columns: string[];
|
|
160
|
+
name?: string;
|
|
161
|
+
} | {
|
|
162
|
+
kind: "unique";
|
|
163
|
+
columns: string[];
|
|
164
|
+
name?: string;
|
|
165
|
+
where?: string;
|
|
166
|
+
} | {
|
|
167
|
+
kind: "exclude";
|
|
168
|
+
elements: {
|
|
169
|
+
column: string;
|
|
170
|
+
opclass?: string;
|
|
171
|
+
}[];
|
|
172
|
+
name?: string;
|
|
173
|
+
};
|
|
174
|
+
export interface ForeignKeySpec {
|
|
175
|
+
columns: string[];
|
|
176
|
+
targetTable: string;
|
|
177
|
+
targetColumns: string[];
|
|
178
|
+
onDelete?: "cascade" | "restrict" | "set null" | "set default";
|
|
179
|
+
onUpdate?: "cascade" | "restrict" | "set null" | "set default";
|
|
180
|
+
name?: string;
|
|
181
|
+
}
|
|
182
|
+
export interface CreateTableSpec {
|
|
183
|
+
table: string;
|
|
184
|
+
schema?: string;
|
|
185
|
+
columns: ColumnSpec[];
|
|
186
|
+
primaryKey?: PrimaryKeySpec;
|
|
187
|
+
constraints?: TableConstraintSpec[];
|
|
188
|
+
indexes?: IndexSpec[];
|
|
189
|
+
foreignKeys?: ForeignKeySpec[];
|
|
190
|
+
ifNotExists?: boolean;
|
|
191
|
+
inherits?: string[];
|
|
192
|
+
like?: {
|
|
193
|
+
table: string;
|
|
194
|
+
including?: string[];
|
|
195
|
+
excluding?: string[];
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export interface AlterTableSpec {
|
|
199
|
+
table: string;
|
|
200
|
+
schema?: string;
|
|
201
|
+
actions: AlterAction[];
|
|
202
|
+
}
|
|
203
|
+
export type AlterAction = {
|
|
204
|
+
kind: "addColumn";
|
|
205
|
+
column: ColumnSpec;
|
|
206
|
+
} | {
|
|
207
|
+
kind: "dropColumn";
|
|
208
|
+
column: string;
|
|
209
|
+
cascade?: boolean;
|
|
210
|
+
} | {
|
|
211
|
+
kind: "alterColumnSetDefault";
|
|
212
|
+
column: string;
|
|
213
|
+
setDefault: string | null;
|
|
214
|
+
} | {
|
|
215
|
+
kind: "alterColumnSetNotNull";
|
|
216
|
+
column: string;
|
|
217
|
+
} | {
|
|
218
|
+
kind: "alterColumnDropNotNull";
|
|
219
|
+
column: string;
|
|
220
|
+
} | {
|
|
221
|
+
kind: "addConstraint";
|
|
222
|
+
constraint: TableConstraintSpec;
|
|
223
|
+
} | {
|
|
224
|
+
kind: "dropConstraint";
|
|
225
|
+
name: string;
|
|
226
|
+
cascade?: boolean;
|
|
227
|
+
} | {
|
|
228
|
+
kind: "addForeignKey";
|
|
229
|
+
foreignKey: ForeignKeySpec;
|
|
230
|
+
} | {
|
|
231
|
+
kind: "dropForeignKey";
|
|
232
|
+
name: string;
|
|
233
|
+
cascade?: boolean;
|
|
234
|
+
} | {
|
|
235
|
+
kind: "renameTo";
|
|
236
|
+
newName: string;
|
|
237
|
+
} | {
|
|
238
|
+
kind: "renameColumn";
|
|
239
|
+
from: string;
|
|
240
|
+
to: string;
|
|
241
|
+
};
|
|
242
|
+
export interface DropSpec {
|
|
243
|
+
kind: "table" | "column" | "constraint" | "index" | "foreignKey" | "schema" | "type" | "function" | "trigger" | "rule";
|
|
244
|
+
name: string;
|
|
245
|
+
schema?: string;
|
|
246
|
+
table?: string;
|
|
247
|
+
ifExists?: boolean;
|
|
248
|
+
cascade?: boolean;
|
|
249
|
+
}
|
|
250
|
+
export interface SchemaInfo {
|
|
251
|
+
schema: string;
|
|
252
|
+
tables: string[];
|
|
253
|
+
enums: string[];
|
|
254
|
+
types: string[];
|
|
255
|
+
functions: string[];
|
|
256
|
+
}
|
|
257
|
+
export interface BuilderState {
|
|
258
|
+
params: ParamDescriptor[];
|
|
259
|
+
paramCounter: number;
|
|
260
|
+
tables: Map<string, TableEntity>;
|
|
261
|
+
enums: Map<string, {
|
|
262
|
+
name: string;
|
|
263
|
+
values: readonly string[];
|
|
264
|
+
}>;
|
|
265
|
+
usedParamNames: Set<string>;
|
|
266
|
+
lateralAliases: Set<string>;
|
|
267
|
+
subqueryAliases: Set<string>;
|
|
268
|
+
}
|
|
269
|
+
export declare function createBuilderState(ir: SemanticIR): BuilderState;
|
|
270
|
+
export declare function resolvePgType(state: BuilderState, column: string, allowLateral?: boolean): string;
|
|
271
|
+
export declare function resolveTsType(state: BuilderState, pgType: string): string;
|
|
272
|
+
export declare function addParam(state: BuilderState, spec: ParamSpec): number;
|
|
273
|
+
export declare function nextPlaceholder(state: BuilderState): string;
|
|
274
|
+
export declare function buildSelectItem(state: BuilderState, item: SelectItem): string;
|
|
275
|
+
export declare function buildFunctionCall(state: BuilderState, call: FunctionCall): string;
|
|
276
|
+
export declare function buildFromClause(state: BuilderState, from: FromItem): string;
|
|
277
|
+
export declare function buildJoinClause(join: JoinItem): string;
|
|
278
|
+
export declare function buildWhereClause(state: BuilderState, conditions: WhereCondition[]): string;
|
|
279
|
+
export declare function buildOrderByClause(orderBy: OrderByItem[]): string;
|
|
280
|
+
export declare function buildGroupByClause(groupBy: GroupByItem[]): string;
|
|
281
|
+
export declare function buildValueOrParam(state: BuilderState, value: ParamSpec | Expression | null): string;
|
|
282
|
+
export declare function buildExpression(state: BuilderState, expr: Expression): string;
|
|
283
|
+
export declare function buildMutationQuery(state: BuilderState, spec: MutationSpec): string;
|
|
284
|
+
export declare function buildSelectQuery(state: BuilderState, spec: SelectSpec): string;
|
|
285
|
+
export declare function inferReturnFields(state: BuilderState, selects: SelectItem[]): FieldDescriptor[];
|
|
286
|
+
export declare function inferExpressionPgType(expr: string): string;
|
|
287
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hex/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAEV,eAAe,EAEf,eAAe,EAIhB,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE;QACP,WAAW,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,WAAW,EAAE,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAC7E,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACnD,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,gBAAgB,GAAG,MAAM,GAAG,aAAa,CAAC;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IACrE,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;CAC1C;AAMD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAMD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAMzF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;IAC/D,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACtE;AAMD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,mBAAmB,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAMvD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACvH,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAChE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,UAAU,GAAG,YAAY,CAuB/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,MAAM,CAoC/F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgCzE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAgBrE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CA0B7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAkCjF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAoB3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAStD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CA2C1F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAgBjE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAQjE;AAkBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,CAQnG;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CA4B7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CA6ClF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAoD9E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CA6B/F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU1D"}
|