Closed zce closed 3 days ago
ColumnNode and ValueNode implement the OperationNode interface. There's no mistake there.
thanks for prompt responses! I just noticed there is no automatic type narrowing when using it:
class UpdatedAtPlugin implements KyselyPlugin {
constructor(private readonly column: string = 'updated_at') {}
transformQuery(args: PluginTransformQueryArgs) {
if (args.node.kind !== 'UpdateQueryNode') return args.node
if (args.node.updates?.some(item => item.column.kind === 'ColumnNode' && (item.column as ColumnNode).column.name === this.column)) return args.node
const updatedAt = ColumnUpdateNode.create(ColumnNode.create(this.column), ValueNode.create(new Date().toISOString()))
return UpdateQueryNode.cloneWithUpdates(args.node, [updatedAt])
}
transformResult(args: PluginTransformResultArgs) {
return Promise.resolve(args.result)
}
}
Hey 👋
Try using these:
UpdateQueryNode.is(args.node)
ColumnNode.is(item.column)
https://github.com/kysely-org/kysely/blob/f353fc6d333b70424e1819395eac4a81c26e4df4/src/operation-node/column-update-node.ts#L6-L7
Should the types here be
ColumnNode
andValueNode
?in inspector:
I’m not sure if there is any special purpose behind using base type, if not I think I can submit a PR to fix it