1- import { freeze } from '../util/object-utils.js'
1+ import { logOnce } from '../util/log-once.js'
2+ import { freeze , isString } from '../util/object-utils.js'
23import { ColumnNode } from './column-node.js'
34import { IdentifierNode } from './identifier-node.js'
45import { OperationNode } from './operation-node.js'
@@ -18,21 +19,56 @@ export type UniqueConstraintNodeProps = Omit<
1819>
1920
2021/**
22+ * TODO: remove this interface once support for `string[]` is removed.
23+ *
2124 * @internal
2225 */
23- export const UniqueConstraintNode = freeze ( {
26+ interface UniqueConstraintNodeFactory {
27+ is ( node : OperationNode ) : node is UniqueConstraintNode
28+ create (
29+ columns : OperationNode [ ] ,
30+ constraintName ?: string ,
31+ nullsNotDistinct ?: boolean ,
32+ ) : UniqueConstraintNode
33+ /**
34+ * @deprecated pass `ColumnNode[]` instead of strings.
35+ */
36+ create (
37+ columns : string [ ] ,
38+ constraintName ?: string ,
39+ nullsNotDistinct ?: boolean ,
40+ ) : UniqueConstraintNode
41+ cloneWith (
42+ node : UniqueConstraintNode ,
43+ props : UniqueConstraintNodeProps ,
44+ ) : UniqueConstraintNode
45+ }
46+
47+ /**
48+ * @internal
49+ */
50+ export const UniqueConstraintNode : UniqueConstraintNodeFactory = freeze ( {
2451 is ( node : OperationNode ) : node is UniqueConstraintNode {
2552 return node . kind === 'UniqueConstraintNode'
2653 } ,
2754
2855 create (
29- columns : OperationNode [ ] ,
56+ columns : string [ ] | OperationNode [ ] ,
3057 constraintName ?: string ,
3158 nullsNotDistinct ?: boolean ,
3259 ) : UniqueConstraintNode {
60+ // TODO: remove this block when support for `string[]` is removed.
61+ if ( isString ( columns . at ( 0 ) ) ) {
62+ logOnce (
63+ '`UniqueConstraintNode.create(columns: string[], ...)` is deprecated - pass `ColumnNode[]` instead.' ,
64+ )
65+
66+ columns = ( columns as string [ ] ) . map ( ColumnNode . create )
67+ }
68+
3369 return freeze ( {
3470 kind : 'UniqueConstraintNode' ,
35- columns : freeze ( columns ) ,
71+ columns : freeze ( columns ) as OperationNode [ ] ,
3672 name : constraintName ? IdentifierNode . create ( constraintName ) : undefined ,
3773 nullsNotDistinct,
3874 } )
@@ -42,9 +78,6 @@ export const UniqueConstraintNode = freeze({
4278 node : UniqueConstraintNode ,
4379 props : UniqueConstraintNodeProps ,
4480 ) : UniqueConstraintNode {
45- return freeze ( {
46- ...node ,
47- ...props ,
48- } )
81+ return freeze ( { ...node , ...props } )
4982 } ,
5083} )
0 commit comments