effect-qb 0.13.0 → 0.15.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 (146) hide show
  1. package/README.md +6 -1431
  2. package/dist/mysql.js +61945 -3611
  3. package/dist/postgres/metadata.js +2818 -0
  4. package/dist/postgres.js +9942 -5591
  5. package/package.json +21 -10
  6. package/src/internal/aggregation-validation.ts +3 -3
  7. package/src/internal/case-analysis.d.ts +18 -0
  8. package/src/internal/case-analysis.ts +4 -4
  9. package/src/internal/coercion/analysis.d.ts +7 -0
  10. package/src/internal/{coercion-analysis.ts → coercion/analysis.ts} +3 -3
  11. package/src/internal/coercion/errors.d.ts +17 -0
  12. package/src/internal/{coercion-errors.ts → coercion/errors.ts} +1 -1
  13. package/src/internal/coercion/kind.d.ts +4 -0
  14. package/src/internal/{coercion-kind.ts → coercion/kind.ts} +2 -2
  15. package/src/internal/{coercion-normalize.ts → coercion/normalize.ts} +1 -1
  16. package/src/internal/coercion/rules.d.ts +6 -0
  17. package/src/internal/{coercion-rules.ts → coercion/rules.ts} +2 -2
  18. package/src/internal/column-state.d.ts +190 -0
  19. package/src/internal/column-state.ts +119 -56
  20. package/src/internal/column.ts +387 -149
  21. package/src/internal/datatypes/define.d.ts +17 -0
  22. package/src/internal/datatypes/define.ts +18 -34
  23. package/src/internal/datatypes/lookup.d.ts +44 -0
  24. package/src/internal/datatypes/lookup.ts +61 -152
  25. package/src/internal/datatypes/shape.d.ts +16 -0
  26. package/src/internal/datatypes/shape.ts +1 -1
  27. package/src/internal/derived-table.d.ts +4 -0
  28. package/src/internal/derived-table.ts +21 -16
  29. package/src/internal/dsl-mutation-runtime.ts +378 -0
  30. package/src/internal/dsl-plan-runtime.ts +387 -0
  31. package/src/internal/dsl-query-runtime.ts +160 -0
  32. package/src/internal/dsl-transaction-ddl-runtime.ts +263 -0
  33. package/src/internal/executor.ts +173 -38
  34. package/src/internal/expression-ast.ts +19 -5
  35. package/src/internal/grouping-key.d.ts +3 -0
  36. package/src/internal/grouping-key.ts +1 -1
  37. package/src/internal/implication-runtime.d.ts +15 -0
  38. package/src/internal/implication-runtime.ts +171 -0
  39. package/src/internal/json/ast.d.ts +30 -0
  40. package/src/internal/json/ast.ts +1 -1
  41. package/src/internal/json/errors.d.ts +8 -0
  42. package/src/internal/json/path.d.ts +75 -0
  43. package/src/internal/json/path.ts +1 -1
  44. package/src/internal/json/types.d.ts +62 -0
  45. package/src/internal/predicate/analysis.d.ts +20 -0
  46. package/src/internal/{predicate-analysis.ts → predicate/analysis.ts} +13 -3
  47. package/src/internal/predicate/atom.d.ts +28 -0
  48. package/src/internal/{predicate-branches.ts → predicate/branches.ts} +2 -2
  49. package/src/internal/predicate/context.d.ts +67 -0
  50. package/src/internal/{predicate-context.ts → predicate/context.ts} +111 -32
  51. package/src/internal/predicate/formula.d.ts +35 -0
  52. package/src/internal/{predicate-formula.ts → predicate/formula.ts} +32 -20
  53. package/src/internal/predicate/key.d.ts +11 -0
  54. package/src/internal/{predicate-key.ts → predicate/key.ts} +2 -2
  55. package/src/internal/{predicate-nnf.ts → predicate/nnf.ts} +2 -2
  56. package/src/internal/predicate/normalize.d.ts +53 -0
  57. package/src/internal/predicate/normalize.ts +273 -0
  58. package/src/internal/predicate/runtime.d.ts +31 -0
  59. package/src/internal/predicate/runtime.ts +679 -0
  60. package/src/internal/projection-alias.d.ts +13 -0
  61. package/src/internal/projections.d.ts +31 -0
  62. package/src/internal/projections.ts +1 -1
  63. package/src/internal/query-ast.d.ts +217 -0
  64. package/src/internal/query-ast.ts +1 -1
  65. package/src/internal/query-requirements.d.ts +20 -0
  66. package/src/internal/query.d.ts +775 -0
  67. package/src/internal/query.ts +767 -275
  68. package/src/internal/renderer.ts +7 -21
  69. package/src/internal/row-set.d.ts +53 -0
  70. package/src/internal/{plan.ts → row-set.ts} +23 -11
  71. package/src/internal/{runtime-normalize.ts → runtime/normalize.ts} +9 -31
  72. package/src/internal/{runtime-schema.ts → runtime/schema.ts} +84 -55
  73. package/src/internal/runtime/value.d.ts +22 -0
  74. package/src/internal/{runtime-value.ts → runtime/value.ts} +2 -2
  75. package/src/internal/scalar.d.ts +107 -0
  76. package/src/internal/scalar.ts +191 -0
  77. package/src/internal/schema-derivation.d.ts +105 -0
  78. package/src/internal/schema-derivation.ts +93 -21
  79. package/src/internal/schema-expression.d.ts +18 -0
  80. package/src/internal/schema-expression.ts +75 -0
  81. package/src/internal/table-options.d.ts +94 -0
  82. package/src/internal/table-options.ts +94 -8
  83. package/src/internal/table.d.ts +173 -0
  84. package/src/internal/table.ts +135 -54
  85. package/src/mysql/column.ts +95 -18
  86. package/src/mysql/datatypes/index.ts +58 -3
  87. package/src/mysql/errors/generated.ts +57336 -0
  88. package/src/mysql/errors/index.ts +1 -0
  89. package/src/mysql/errors/normalize.ts +55 -53
  90. package/src/mysql/errors/types.ts +74 -0
  91. package/src/mysql/executor.ts +69 -7
  92. package/src/mysql/function/aggregate.ts +1 -5
  93. package/src/mysql/function/core.ts +1 -3
  94. package/src/mysql/function/index.ts +1 -1
  95. package/src/mysql/function/string.ts +1 -5
  96. package/src/mysql/function/temporal.ts +12 -15
  97. package/src/mysql/function/window.ts +1 -6
  98. package/src/{internal/mysql-dialect.ts → mysql/internal/dialect.ts} +1 -1
  99. package/src/mysql/internal/dsl.ts +6115 -0
  100. package/src/{internal/mysql-renderer.ts → mysql/internal/renderer.ts} +6 -6
  101. package/src/mysql/internal/sql-expression-renderer.ts +1455 -0
  102. package/src/mysql/json.ts +2 -0
  103. package/src/mysql/query.ts +111 -86
  104. package/src/mysql/renderer.ts +1 -1
  105. package/src/mysql/table.ts +1 -1
  106. package/src/mysql.ts +6 -4
  107. package/src/postgres/cast.ts +30 -0
  108. package/src/postgres/column.ts +178 -20
  109. package/src/postgres/datatypes/index.d.ts +515 -0
  110. package/src/postgres/datatypes/index.ts +49 -5
  111. package/src/postgres/datatypes/spec.d.ts +412 -0
  112. package/src/postgres/errors/generated.ts +2636 -0
  113. package/src/postgres/errors/index.ts +1 -0
  114. package/src/postgres/errors/normalize.ts +47 -62
  115. package/src/postgres/errors/types.ts +92 -34
  116. package/src/postgres/executor.ts +37 -5
  117. package/src/postgres/function/aggregate.ts +1 -5
  118. package/src/postgres/function/core.ts +20 -2
  119. package/src/postgres/function/index.ts +1 -1
  120. package/src/postgres/function/string.ts +1 -5
  121. package/src/postgres/function/temporal.ts +12 -15
  122. package/src/postgres/function/window.ts +1 -6
  123. package/src/{internal/postgres-dialect.ts → postgres/internal/dialect.ts} +1 -1
  124. package/src/{internal/query-factory.ts → postgres/internal/dsl.ts} +1568 -2120
  125. package/src/{internal/postgres-renderer.ts → postgres/internal/renderer.ts} +6 -6
  126. package/src/postgres/internal/schema-ddl.ts +108 -0
  127. package/src/postgres/internal/schema-model.ts +150 -0
  128. package/src/{internal → postgres/internal}/sql-expression-renderer.ts +112 -46
  129. package/src/postgres/json.ts +493 -0
  130. package/src/postgres/metadata.ts +31 -0
  131. package/src/postgres/query.ts +113 -86
  132. package/src/postgres/renderer.ts +3 -13
  133. package/src/postgres/schema-expression.ts +17 -0
  134. package/src/postgres/schema-management.ts +204 -0
  135. package/src/postgres/schema.ts +35 -0
  136. package/src/postgres/table.ts +316 -42
  137. package/src/postgres/type.ts +31 -0
  138. package/src/postgres.ts +20 -4
  139. package/CHANGELOG.md +0 -134
  140. package/src/internal/expression.ts +0 -327
  141. package/src/internal/predicate-normalize.ts +0 -202
  142. package/src/mysql/function/json.ts +0 -4
  143. package/src/mysql/private/query.ts +0 -13
  144. package/src/postgres/function/json.ts +0 -4
  145. package/src/postgres/private/query.ts +0 -13
  146. /package/src/internal/{predicate-atom.ts → predicate/atom.ts} +0 -0
@@ -1,5 +1,7 @@
1
- import { postgresQuery } from "./private/query.js"
2
1
  import {
2
+ type AnyTableFunctionSource,
3
+ type AnyUnnestSource,
4
+ type AnyValuesSource,
3
5
  type CapabilitiesOfPlan,
4
6
  type CompletePlan,
5
7
  type DialectCompatiblePlan,
@@ -36,92 +38,117 @@ import {
36
38
  type StatementOfPlan,
37
39
  type StringExpressionInput
38
40
  } from "../internal/query.js"
41
+ import {
42
+ type PublicNonStructuredFromApi,
43
+ type PublicGenerateSeriesApi,
44
+ type PublicStructuredFromConstraint,
45
+ type PublicStructuredFromResult,
46
+ type as postgresType,
47
+ values,
48
+ unnest,
49
+ select,
50
+ insert,
51
+ generateSeries as dslGenerateSeries,
52
+ from as dslFrom
53
+ } from "./internal/dsl.js"
54
+
55
+ export {
56
+ literal,
57
+ column,
58
+ eq,
59
+ neq,
60
+ lt,
61
+ lte,
62
+ gt,
63
+ gte,
64
+ isNull,
65
+ isNotNull,
66
+ like,
67
+ ilike,
68
+ collate,
69
+ regexMatch,
70
+ regexIMatch,
71
+ regexNotMatch,
72
+ regexNotIMatch,
73
+ and,
74
+ or,
75
+ not,
76
+ all,
77
+ any,
78
+ case_ as case,
79
+ match,
80
+ in_ as in,
81
+ notIn,
82
+ between,
83
+ contains,
84
+ containedBy,
85
+ overlaps,
86
+ exists,
87
+ isDistinctFrom,
88
+ isNotDistinctFrom,
89
+ excluded,
90
+ as,
91
+ with_ as with,
92
+ withRecursive,
93
+ lateral,
94
+ scalar,
95
+ inSubquery,
96
+ compareAny,
97
+ compareAll,
98
+ values,
99
+ unnest,
100
+ select,
101
+ returning,
102
+ onConflict,
103
+ insert,
104
+ update,
105
+ upsert,
106
+ delete_ as delete,
107
+ truncate,
108
+ merge,
109
+ transaction,
110
+ commit,
111
+ rollback,
112
+ savepoint,
113
+ rollbackTo,
114
+ releaseSavepoint,
115
+ createTable,
116
+ dropTable,
117
+ createIndex,
118
+ dropIndex,
119
+ union,
120
+ unionAll,
121
+ intersect,
122
+ intersectAll,
123
+ except,
124
+ exceptAll,
125
+ where,
126
+ having,
127
+ innerJoin,
128
+ leftJoin,
129
+ rightJoin,
130
+ fullJoin,
131
+ crossJoin,
132
+ distinct,
133
+ distinctOn,
134
+ limit,
135
+ offset,
136
+ lock,
137
+ orderBy,
138
+ groupBy
139
+ } from "./internal/dsl.js"
140
+ export { postgresType as type }
141
+ export const generateSeries: PublicGenerateSeriesApi = dslGenerateSeries as PublicGenerateSeriesApi
142
+
143
+ type StructuredSource = AnyValuesSource | AnyUnnestSource | AnyTableFunctionSource
144
+
145
+ type StructuredFromApi = <CurrentSource extends StructuredSource>(
146
+ source: CurrentSource
147
+ ) => <PlanValue extends QueryPlan<any, any, any, any, any, any, any, any, any, any>>(
148
+ plan: PlanValue & PublicStructuredFromConstraint<PlanValue, CurrentSource, "postgres">
149
+ ) => PublicStructuredFromResult<PlanValue, CurrentSource, "postgres">
39
150
 
40
- export const literal = postgresQuery.literal
41
- export const cast = postgresQuery.cast
42
- export const type = postgresQuery.type
43
- export const eq = postgresQuery.eq
44
- export const neq = postgresQuery.neq
45
- export const lt = postgresQuery.lt
46
- export const lte = postgresQuery.lte
47
- export const gt = postgresQuery.gt
48
- export const gte = postgresQuery.gte
49
- export const isNull = postgresQuery.isNull
50
- export const isNotNull = postgresQuery.isNotNull
51
- export const like = postgresQuery.like
52
- export const ilike = postgresQuery.ilike
53
- export const and = postgresQuery.and
54
- export const or = postgresQuery.or
55
- export const not = postgresQuery.not
56
- export const all = postgresQuery.all
57
- export const any = postgresQuery.any
58
- const case_ = postgresQuery.case
59
- export const match = postgresQuery.match
60
- export const in_ = postgresQuery.in
61
- export const notIn = postgresQuery.notIn
62
- export const between = postgresQuery.between
63
- export const contains = postgresQuery.contains
64
- export const containedBy = postgresQuery.containedBy
65
- export const overlaps = postgresQuery.overlaps
66
- export const exists = postgresQuery.exists
67
- export const isDistinctFrom = postgresQuery.isDistinctFrom
68
- export const isNotDistinctFrom = postgresQuery.isNotDistinctFrom
69
- export const excluded = postgresQuery.excluded
70
- export const as = postgresQuery.as
71
- export const with_ = postgresQuery.with
72
- export const withRecursive = postgresQuery.withRecursive
73
- export const lateral = postgresQuery.lateral
74
- export const scalar = postgresQuery.scalar
75
- export const inSubquery = postgresQuery.inSubquery
76
- export const compareAny = postgresQuery.compareAny
77
- export const compareAll = postgresQuery.compareAll
78
- export const values = postgresQuery.values
79
- export const unnest = postgresQuery.unnest
80
- export const generateSeries = postgresQuery.generateSeries
81
- export const returning = postgresQuery.returning
82
- export const onConflict = postgresQuery.onConflict
83
- export const insert = postgresQuery.insert
84
- export const update = postgresQuery.update
85
- export const upsert = postgresQuery.upsert
86
- export const delete_ = postgresQuery.delete
87
- export const truncate = postgresQuery.truncate
88
- export const merge = postgresQuery.merge
89
- export const transaction = postgresQuery.transaction
90
- export const commit = postgresQuery.commit
91
- export const rollback = postgresQuery.rollback
92
- export const savepoint = postgresQuery.savepoint
93
- export const rollbackTo = postgresQuery.rollbackTo
94
- export const releaseSavepoint = postgresQuery.releaseSavepoint
95
- export const createTable = postgresQuery.createTable
96
- export const dropTable = postgresQuery.dropTable
97
- export const createIndex = postgresQuery.createIndex
98
- export const dropIndex = postgresQuery.dropIndex
99
- export const union = postgresQuery.union
100
- export const unionAll = postgresQuery.unionAll
101
- export const intersect = postgresQuery.intersect
102
- export const intersectAll = postgresQuery.intersectAll
103
- export const except = postgresQuery.except
104
- export const exceptAll = postgresQuery.exceptAll
105
- export const select = postgresQuery.select
106
- export const where = postgresQuery.where
107
- export const having = postgresQuery.having
108
- export const from = postgresQuery.from
109
- export const innerJoin = postgresQuery.innerJoin
110
- export const leftJoin = postgresQuery.leftJoin
111
- export const rightJoin = postgresQuery.rightJoin
112
- export const fullJoin = postgresQuery.fullJoin
113
- export const crossJoin = postgresQuery.crossJoin
114
- export const distinct = postgresQuery.distinct
115
- export const distinctOn = postgresQuery.distinctOn
116
- export const limit = postgresQuery.limit
117
- export const offset = postgresQuery.offset
118
- export const lock = postgresQuery.lock
119
- export const orderBy = postgresQuery.orderBy
120
- export const groupBy = postgresQuery.groupBy
121
- export { case_ as case }
122
- export { in_ as in }
123
- export { with_ as with }
124
- export { delete_ as delete }
151
+ export const from: StructuredFromApi & PublicNonStructuredFromApi = dslFrom as StructuredFromApi & PublicNonStructuredFromApi
125
152
 
126
153
  export type {
127
154
  CapabilitiesOfPlan,
@@ -1,4 +1,5 @@
1
1
  import * as CoreRenderer from "../internal/renderer.js"
2
+ import { renderPostgresPlan } from "./internal/renderer.js"
2
3
 
3
4
  /** Postgres-specialized rendered query shape. */
4
5
  export type RenderedQuery<Row> = CoreRenderer.RenderedQuery<Row, "postgres">
@@ -11,19 +12,8 @@ export { TypeId } from "../internal/renderer.js"
11
12
  export type { Projection } from "../internal/renderer.js"
12
13
 
13
14
  /** Creates the built-in Postgres renderer. */
14
- export function make(): Renderer
15
- export function make(dialect: "postgres"): Renderer
16
- export function make(
17
- dialect: "postgres",
18
- render: Parameters<typeof CoreRenderer.make>[1]
19
- ): Renderer
20
- export function make(
21
- dialectOrRender?: "postgres" | Parameters<typeof CoreRenderer.make>[1],
22
- render?: Parameters<typeof CoreRenderer.make>[1]
23
- ): Renderer {
24
- const customRender = typeof dialectOrRender === "function" ? dialectOrRender : render
25
- return customRender ? CoreRenderer.make("postgres", customRender as any) : CoreRenderer.make("postgres")
26
- }
15
+ export const make = (): Renderer =>
16
+ CoreRenderer.make("postgres", renderPostgresPlan)
27
17
 
28
18
  /** Shared built-in Postgres renderer instance. */
29
19
  export const postgres = make()
@@ -0,0 +1,17 @@
1
+ export {
2
+ TypeId,
3
+ fromAst,
4
+ fromSql,
5
+ isSchemaExpression,
6
+ normalize,
7
+ parseExpression,
8
+ render,
9
+ toAst,
10
+ type Any,
11
+ type SchemaExpression
12
+ } from "../internal/schema-expression.js"
13
+
14
+ export {
15
+ normalizeDdlExpressionSql,
16
+ renderDdlExpressionSql
17
+ } from "./internal/schema-ddl.js"
@@ -0,0 +1,204 @@
1
+ import * as Schema from "effect/Schema"
2
+ import { pipeArguments, type Pipeable } from "effect/Pipeable"
3
+
4
+ import type * as Expression from "../internal/scalar.js"
5
+ import { makeColumnDefinition, type ColumnDefinition } from "../internal/column-state.js"
6
+
7
+ export const EnumTypeId: unique symbol = Symbol.for("effect-qb/SchemaManagement/Enum")
8
+ export const SequenceTypeId: unique symbol = Symbol.for("effect-qb/SchemaManagement/Sequence")
9
+
10
+ type QualifiedName<
11
+ Name extends string,
12
+ SchemaName extends string | undefined
13
+ > = SchemaName extends string
14
+ ? SchemaName extends "public"
15
+ ? Name
16
+ : `${SchemaName}.${Name}`
17
+ : Name
18
+
19
+ type EnumColumn<
20
+ Name extends string,
21
+ Values extends readonly [string, ...string[]],
22
+ SchemaName extends string | undefined
23
+ > = ColumnDefinition<
24
+ Values[number],
25
+ Values[number],
26
+ Values[number],
27
+ Expression.DbType.Enum<"postgres", QualifiedName<Name, SchemaName>>,
28
+ false,
29
+ false,
30
+ false,
31
+ false,
32
+ false,
33
+ undefined
34
+ >
35
+
36
+ const EnumProto = {
37
+ pipe(this: unknown) {
38
+ return pipeArguments(this, arguments)
39
+ },
40
+ qualifiedName(this: EnumDefinition) {
41
+ return this.schemaName === undefined || this.schemaName === "public"
42
+ ? this.name
43
+ : `${this.schemaName}.${this.name}`
44
+ },
45
+ type(this: EnumDefinition) {
46
+ return {
47
+ dialect: "postgres",
48
+ kind: this.qualifiedName(),
49
+ variant: "enum"
50
+ }
51
+ },
52
+ column(this: EnumDefinition) {
53
+ const values = this.values.map((value) => Schema.Literal(value)) as unknown as readonly [Schema.Schema.Any, ...Schema.Schema.Any[]]
54
+ return makeColumnDefinition(
55
+ values.length === 1 ? values[0]! : Schema.Union(...values),
56
+ {
57
+ dbType: this.type(),
58
+ nullable: false,
59
+ hasDefault: false,
60
+ generated: false,
61
+ primaryKey: false,
62
+ unique: false,
63
+ references: undefined,
64
+ ddlType: this.qualifiedName(),
65
+ identity: undefined,
66
+ enum: {
67
+ name: this.name,
68
+ schemaName: this.schemaName,
69
+ values: this.values
70
+ }
71
+ }
72
+ )
73
+ }
74
+ }
75
+
76
+ const SequenceProto = {
77
+ pipe(this: unknown) {
78
+ return pipeArguments(this, arguments)
79
+ },
80
+ qualifiedName(this: SequenceDefinition) {
81
+ return this.schemaName === undefined || this.schemaName === "public"
82
+ ? this.name
83
+ : `${this.schemaName}.${this.name}`
84
+ }
85
+ }
86
+
87
+ export interface EnumDefinition<
88
+ Name extends string = string,
89
+ Values extends readonly [string, ...string[]] = readonly [string, ...string[]],
90
+ SchemaName extends string | undefined = undefined
91
+ > extends Pipeable {
92
+ readonly name: Name
93
+ readonly values: Values
94
+ readonly schemaName: SchemaName
95
+ readonly [EnumTypeId]: {
96
+ readonly kind: "enum"
97
+ readonly name: Name
98
+ readonly values: Values
99
+ readonly schemaName: SchemaName
100
+ }
101
+ readonly qualifiedName: () => QualifiedName<Name, SchemaName>
102
+ readonly type: () => Expression.DbType.Enum<"postgres", QualifiedName<Name, SchemaName>>
103
+ readonly column: () => EnumColumn<Name, Values, SchemaName>
104
+ }
105
+
106
+ export interface SequenceDefinition<
107
+ Name extends string = string,
108
+ SchemaName extends string | undefined = undefined
109
+ > extends Pipeable {
110
+ readonly name: Name
111
+ readonly schemaName: SchemaName
112
+ readonly [SequenceTypeId]: {
113
+ readonly kind: "sequence"
114
+ readonly name: Name
115
+ readonly schemaName: SchemaName
116
+ }
117
+ readonly qualifiedName: () => QualifiedName<Name, SchemaName>
118
+ }
119
+
120
+ export type AnyEnumDefinition = EnumDefinition<string, readonly [string, ...string[]], string | undefined>
121
+ export type AnySequenceDefinition = SequenceDefinition<string, string | undefined>
122
+ export type AnyDefinition = AnyEnumDefinition | AnySequenceDefinition
123
+
124
+ export function enumType<
125
+ Name extends string,
126
+ const Values extends readonly [string, ...string[]]
127
+ >(
128
+ name: Name,
129
+ values: Values
130
+ ): EnumDefinition<Name, Values, undefined>
131
+ export function enumType<
132
+ Name extends string,
133
+ const Values extends readonly [string, ...string[]],
134
+ SchemaName extends string
135
+ >(
136
+ name: Name,
137
+ values: Values,
138
+ schemaName: SchemaName
139
+ ): EnumDefinition<Name, Values, SchemaName>
140
+ export function enumType(
141
+ name: string,
142
+ values: readonly [string, ...string[]],
143
+ schemaName?: string
144
+ ): EnumDefinition<string, readonly [string, ...string[]], string | undefined> {
145
+ const definition = Object.create(EnumProto)
146
+ definition.name = name
147
+ definition.values = values
148
+ definition.schemaName = schemaName
149
+ definition[EnumTypeId] = {
150
+ kind: "enum",
151
+ name,
152
+ values,
153
+ schemaName
154
+ }
155
+ return definition
156
+ }
157
+
158
+ export function sequence<Name extends string>(
159
+ name: Name
160
+ ): SequenceDefinition<Name, undefined>
161
+ export function sequence<Name extends string, SchemaName extends string>(
162
+ name: Name,
163
+ schemaName: SchemaName
164
+ ): SequenceDefinition<Name, SchemaName>
165
+ export function sequence(
166
+ name: string,
167
+ schemaName?: string
168
+ ): SequenceDefinition<string, string | undefined> {
169
+ const definition = Object.create(SequenceProto)
170
+ definition.name = name
171
+ definition.schemaName = schemaName
172
+ definition[SequenceTypeId] = {
173
+ kind: "sequence",
174
+ name,
175
+ schemaName
176
+ }
177
+ return definition
178
+ }
179
+
180
+ export const schema = <SchemaName extends string>(
181
+ schemaName: SchemaName
182
+ ) => ({
183
+ schemaName,
184
+ enumType: <
185
+ Name extends string,
186
+ const Values extends readonly [string, ...string[]]
187
+ >(
188
+ name: Name,
189
+ values: Values
190
+ ): EnumDefinition<Name, Values, SchemaName> =>
191
+ enumType(name, values, schemaName) as EnumDefinition<Name, Values, SchemaName>,
192
+ sequence: <
193
+ Name extends string
194
+ >(
195
+ name: Name
196
+ ): SequenceDefinition<Name, SchemaName> =>
197
+ sequence(name, schemaName) as SequenceDefinition<Name, SchemaName>
198
+ })
199
+
200
+ export const isEnumDefinition = (value: unknown): value is AnyEnumDefinition =>
201
+ typeof value === "object" && value !== null && EnumTypeId in value
202
+
203
+ export const isSequenceDefinition = (value: unknown): value is AnySequenceDefinition =>
204
+ typeof value === "object" && value !== null && SequenceTypeId in value
@@ -0,0 +1,35 @@
1
+ import { schema as makeTableSchemaNamespace, type TableSchemaNamespace } from "../internal/table.js"
2
+ import { enumType, sequence, type EnumDefinition, type SequenceDefinition } from "./schema-management.js"
3
+
4
+ export type SchemaNamespace<SchemaName extends string> = TableSchemaNamespace<SchemaName> & {
5
+ readonly enum: <
6
+ Name extends string,
7
+ const Values extends readonly [string, ...string[]]
8
+ >(
9
+ name: Name,
10
+ values: Values
11
+ ) => EnumDefinition<Name, Values, SchemaName>
12
+ readonly sequence: <
13
+ Name extends string
14
+ >(
15
+ name: Name
16
+ ) => SequenceDefinition<Name, SchemaName>
17
+ }
18
+
19
+ export const schema = <SchemaName extends string>(
20
+ schemaName: SchemaName
21
+ ): SchemaNamespace<SchemaName> => ({
22
+ ...makeTableSchemaNamespace(schemaName),
23
+ enum: <
24
+ Name extends string,
25
+ const Values extends readonly [string, ...string[]]
26
+ >(
27
+ name: Name,
28
+ values: Values
29
+ ) => enumType(name, values, schemaName) as EnumDefinition<Name, Values, SchemaName>,
30
+ sequence: <
31
+ Name extends string
32
+ >(
33
+ name: Name
34
+ ) => sequence(name, schemaName) as SequenceDefinition<Name, SchemaName>
35
+ })