effect-qb 0.17.0 → 0.19.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 (103) hide show
  1. package/README.md +4 -0
  2. package/dist/index.js +8065 -0
  3. package/dist/mysql.js +3053 -2505
  4. package/dist/postgres/metadata.js +1366 -1250
  5. package/dist/postgres.js +2020 -2719
  6. package/dist/sqlite.js +3226 -2732
  7. package/dist/standard.js +8019 -0
  8. package/package.json +10 -3
  9. package/src/casing.ts +71 -0
  10. package/src/index.ts +2 -0
  11. package/src/internal/casing.ts +89 -0
  12. package/src/internal/column-state.ts +11 -6
  13. package/src/internal/column.ts +44 -7
  14. package/src/internal/datatypes/define.ts +2 -1
  15. package/src/internal/datatypes/enrich.ts +23 -0
  16. package/src/internal/datatypes/lookup.ts +14 -7
  17. package/src/internal/derived-table.ts +4 -36
  18. package/src/{mysql/internal/sql-expression-renderer.ts → internal/dialect-renderers/mysql.ts} +548 -359
  19. package/src/{postgres/internal/sql-expression-renderer.ts → internal/dialect-renderers/postgres.ts} +654 -399
  20. package/src/{sqlite/internal/sql-expression-renderer.ts → internal/dialect-renderers/sqlite.ts} +501 -345
  21. package/src/internal/dialect.ts +35 -0
  22. package/src/internal/dsl-mutation-runtime.ts +12 -162
  23. package/src/internal/dsl-plan-runtime.ts +10 -138
  24. package/src/internal/dsl-query-runtime.ts +5 -79
  25. package/src/internal/dsl-transaction-ddl-runtime.ts +41 -65
  26. package/src/internal/executor.ts +10 -6
  27. package/src/internal/grouping-key.ts +87 -20
  28. package/src/internal/implication-runtime.ts +1 -1
  29. package/src/internal/predicate/runtime.ts +3 -0
  30. package/src/internal/query.d.ts +38 -11
  31. package/src/internal/query.ts +64 -25
  32. package/src/internal/renderer.ts +26 -14
  33. package/src/internal/runtime/normalize.ts +12 -5
  34. package/src/internal/scalar.ts +6 -1
  35. package/src/internal/schema-derivation.d.ts +12 -61
  36. package/src/internal/schema-derivation.ts +90 -38
  37. package/src/internal/schema-expression.ts +2 -2
  38. package/src/internal/sql-expression-renderer.ts +19 -0
  39. package/src/internal/standard-dsl.ts +6885 -0
  40. package/src/internal/table-options.ts +126 -66
  41. package/src/internal/table.d.ts +33 -32
  42. package/src/internal/table.ts +406 -155
  43. package/src/mysql/column-extension.ts +3 -0
  44. package/src/mysql/column.ts +10 -11
  45. package/src/mysql/datatypes/index.ts +3 -2
  46. package/src/mysql/executor.ts +7 -5
  47. package/src/mysql/internal/dialect.ts +9 -4
  48. package/src/mysql/internal/dsl.ts +219 -155
  49. package/src/mysql/internal/renderer.ts +6 -2
  50. package/src/mysql/json.ts +37 -0
  51. package/src/mysql/query-extension.ts +16 -0
  52. package/src/mysql/renderer.ts +31 -4
  53. package/src/mysql.ts +4 -12
  54. package/src/postgres/column-extension.ts +28 -0
  55. package/src/postgres/column.ts +5 -11
  56. package/src/postgres/datatypes/index.d.ts +2 -1
  57. package/src/postgres/datatypes/index.ts +3 -2
  58. package/src/postgres/executor.ts +7 -5
  59. package/src/postgres/function/core.ts +1 -3
  60. package/src/postgres/function/index.ts +1 -17
  61. package/src/postgres/internal/dialect.ts +9 -4
  62. package/src/postgres/internal/dsl.ts +208 -160
  63. package/src/postgres/internal/renderer.ts +6 -2
  64. package/src/postgres/internal/schema-ddl.ts +22 -10
  65. package/src/postgres/internal/schema-model.ts +238 -7
  66. package/src/postgres/json.ts +43 -7
  67. package/src/postgres/jsonb.ts +38 -0
  68. package/src/postgres/query-extension.ts +2 -0
  69. package/src/postgres/renderer.ts +31 -4
  70. package/src/postgres/schema-management.ts +17 -12
  71. package/src/postgres/schema.ts +98 -15
  72. package/src/postgres/table.ts +193 -524
  73. package/src/postgres/type.ts +8 -7
  74. package/src/postgres.ts +9 -11
  75. package/src/sqlite/column-extension.ts +3 -0
  76. package/src/sqlite/column.ts +10 -11
  77. package/src/sqlite/datatypes/index.ts +3 -2
  78. package/src/sqlite/executor.ts +7 -5
  79. package/src/sqlite/internal/dialect.ts +9 -4
  80. package/src/sqlite/internal/dsl.ts +208 -155
  81. package/src/sqlite/internal/renderer.ts +6 -2
  82. package/src/sqlite/json.ts +37 -0
  83. package/src/sqlite/query-extension.ts +2 -0
  84. package/src/sqlite/renderer.ts +31 -4
  85. package/src/sqlite.ts +4 -12
  86. package/src/standard/column.ts +163 -0
  87. package/src/standard/datatypes/index.ts +83 -0
  88. package/src/standard/datatypes/spec.ts +98 -0
  89. package/src/standard/dialect.ts +40 -0
  90. package/src/standard/function/aggregate.ts +2 -0
  91. package/src/standard/function/core.ts +2 -0
  92. package/src/standard/function/index.ts +18 -0
  93. package/src/standard/function/string.ts +2 -0
  94. package/src/standard/function/temporal.ts +78 -0
  95. package/src/standard/function/window.ts +2 -0
  96. package/src/standard/internal/renderer.ts +45 -0
  97. package/src/standard/query.ts +152 -0
  98. package/src/standard/renderer.ts +21 -0
  99. package/src/standard/table.ts +147 -0
  100. package/src/standard.ts +18 -0
  101. package/src/internal/aggregation-validation.ts +0 -57
  102. package/src/mysql/table.ts +0 -183
  103. package/src/sqlite/table.ts +0 -183
@@ -1,35 +1,118 @@
1
- import { schema as makeTableSchemaNamespace, type TableSchemaNamespace } from "./table.js"
1
+ import { pipeArguments, type Pipeable } from "effect/Pipeable"
2
+
3
+ import { ColumnTypeId } from "../internal/column-state.js"
4
+ import type { AnyColumnDefinition } from "../internal/column-state.js"
5
+ import * as Casing from "../internal/casing.js"
6
+ import * as BaseTable from "../internal/table.js"
7
+ import type { TableFieldMap } from "../internal/schema-derivation.js"
8
+ import { make as makeTable } from "../standard/table.js"
2
9
  import { enumType, sequence, type EnumDefinition, type SequenceDefinition } from "./schema-management.js"
3
10
 
4
- export type SchemaNamespace<SchemaName extends string> = TableSchemaNamespace<SchemaName> & {
11
+ type InlinePrimaryKeyKeys<Fields extends TableFieldMap> = Extract<{
12
+ [K in keyof Fields]: Fields[K]["metadata"]["primaryKey"] extends true ? K : never
13
+ }[keyof Fields], string>
14
+
15
+ type FieldDialect<Column extends AnyColumnDefinition> = Column[typeof ColumnTypeId]["dbType"]["dialect"]
16
+
17
+ type ValidatePostgresSchemaFields<Fields extends TableFieldMap> = {
18
+ [K in keyof Fields]: Exclude<FieldDialect<Fields[K]>, "standard" | "postgres"> extends never ? Fields[K] : never
19
+ }
20
+
21
+ type ApplySchemaTableOptions<
22
+ Name extends string,
23
+ Fields extends TableFieldMap,
24
+ PrimaryKeyColumns extends keyof Fields & string,
25
+ SchemaName extends string,
26
+ Options extends BaseTable.DeclaredTableOptions
27
+ > = BaseTable.ApplyDeclaredOptions<
28
+ BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>,
29
+ Options
30
+ > extends BaseTable.TableDefinition<any, any, infer AppliedPrimaryKeyColumns extends keyof Fields & string, "schema", any>
31
+ ? BaseTable.TableDefinition<Name, Fields, AppliedPrimaryKeyColumns, "schema", SchemaName>
32
+ : BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>
33
+
34
+ type ValidatePostgresSchemaTable<
35
+ Table extends BaseTable.TableDefinition<any, any, any, any, any>
36
+ > = Table extends BaseTable.TableDefinition<any, infer Fields extends TableFieldMap, any, any, any>
37
+ ? BaseTable.TableDefinition<any, Fields & ValidatePostgresSchemaFields<Fields>, any, any, any>
38
+ : never
39
+
40
+ export type SchemaNamespace<SchemaName extends string> = Pipeable & {
41
+ readonly schemaName: SchemaName
42
+ readonly table: <
43
+ Name extends string,
44
+ Fields extends TableFieldMap,
45
+ const Options extends BaseTable.DeclaredTableOptions,
46
+ PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>
47
+ >(
48
+ name: BaseTable.NonEmptyStringInput<Name>,
49
+ fields: Fields & BaseTable.NonEmptyFieldMap<Fields> & ValidatePostgresSchemaFields<Fields>,
50
+ ...options: Options & BaseTable.ValidateDeclaredOptions<BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>, Options>
51
+ ) => ApplySchemaTableOptions<Name, Fields, PrimaryKeyColumns, SchemaName, Options>
5
52
  readonly enum: <
6
53
  Name extends string,
7
54
  const Values extends readonly [string, ...string[]]
8
55
  >(
9
- name: Name,
56
+ name: BaseTable.NonEmptyStringInput<Name>,
10
57
  values: Values
11
58
  ) => EnumDefinition<Name, Values, SchemaName>
12
59
  readonly sequence: <
13
60
  Name extends string
14
61
  >(
15
- name: Name
62
+ name: BaseTable.NonEmptyStringInput<Name>
16
63
  ) => SequenceDefinition<Name, SchemaName>
64
+ readonly withSchema: <
65
+ Table extends BaseTable.TableDefinition<any, any, any, any, any>
66
+ >(table: Table & ValidatePostgresSchemaTable<Table>) => BaseTable.TableDefinition<
67
+ Table[typeof BaseTable.TypeId]["name"],
68
+ Table[typeof BaseTable.TypeId]["fields"],
69
+ Table[typeof BaseTable.TypeId]["primaryKey"][number],
70
+ Table[typeof BaseTable.TypeId]["kind"],
71
+ SchemaName
72
+ >
73
+ readonly [Casing.TypeId]: Casing.State
74
+ readonly withCasing: (options: Casing.Options) => SchemaNamespace<SchemaName>
17
75
  }
18
76
 
19
- export const schema = <SchemaName extends string>(
20
- schemaName: SchemaName
21
- ): SchemaNamespace<SchemaName> => ({
22
- ...makeTableSchemaNamespace(schemaName),
23
- enum: <
77
+ const SchemaProto = {
78
+ pipe(this: Pipeable) {
79
+ return pipeArguments(this, arguments)
80
+ }
81
+ }
82
+
83
+ export const make = <SchemaName extends string>(
84
+ schemaName: BaseTable.NonEmptyStringInput<SchemaName>,
85
+ options: { readonly casing?: Casing.Options } = {}
86
+ ): SchemaNamespace<SchemaName> => {
87
+ const physicalSchemaName = Casing.applyCategory(options.casing, "schemas", schemaName)
88
+ const namespace = Object.create(SchemaProto)
89
+ namespace.schemaName = schemaName
90
+ namespace.table = ((name: string, fields: any, ...declaredOptions: any[]) => {
91
+ let table = makeTable(name, fields, schemaName)
92
+ for (const option of declaredOptions) {
93
+ table = option(table)
94
+ }
95
+ return options.casing === undefined ? table : BaseTable.withCasing(table as any, options.casing)
96
+ }) as SchemaNamespace<SchemaName>["table"]
97
+ namespace.enum = <
24
98
  Name extends string,
25
99
  const Values extends readonly [string, ...string[]]
26
100
  >(
27
- name: Name,
101
+ name: BaseTable.NonEmptyStringInput<Name>,
28
102
  values: Values
29
- ) => enumType(name, values, schemaName) as EnumDefinition<Name, Values, SchemaName>,
30
- sequence: <
103
+ ) => enumType(Casing.applyCategory(options.casing, "types", name), values, physicalSchemaName) as EnumDefinition<Name, Values, SchemaName>
104
+ namespace.sequence = <
31
105
  Name extends string
32
106
  >(
33
- name: Name
34
- ) => sequence(name, schemaName) as SequenceDefinition<Name, SchemaName>
35
- })
107
+ name: BaseTable.NonEmptyStringInput<Name>
108
+ ) => sequence(Casing.applyCategory(options.casing, "sequences", name), physicalSchemaName) as SequenceDefinition<Name, SchemaName>
109
+ namespace.withSchema = <
110
+ Table extends BaseTable.TableDefinition<any, any, any, any, any>
111
+ >(table: Table & ValidatePostgresSchemaTable<Table>) => BaseTable.withSchema(table, schemaName, options.casing)
112
+ namespace[Casing.TypeId] = {
113
+ casing: options.casing
114
+ }
115
+ namespace.withCasing = (override: Casing.Options) =>
116
+ make(schemaName, { casing: Casing.merge(options.casing, override) })
117
+ return namespace as SchemaNamespace<SchemaName>
118
+ }