feat(core): base connection schema

This commit is contained in:
admin committed 2026-06-16 19:40:49 +05:00
1 parent e88bb648b7
commit c1c0e3383b
2 files changed
+39 -1

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
import * as z from 'zod'
export const sshConfigSchema = z
.object({
host: z.string().min(1),
port: z.number().int().positive().default(22),
user: z.string().min(1),
password: z.string().optional(),
privateKey: z.string().optional(),
privateKeyPath: z.string().optional(),
passphrase: z.string().optional(),
agent: z.boolean().optional()
})
.strict()
export type SshConfig = z.infer<typeof sshConfigSchema>
// Fields shared by every backend. Leaf packages spread this, add `type` and
// engine-specific fields, then call `.strict()`. `user` is required here to
// match dbmole exactly; esmole overrides it to optional.
export const baseConnectionShape = {
name: z.string().regex(/^[a-zA-Z0-9_-]+$/, 'name must match [a-zA-Z0-9_-]+'),
host: z.string().min(1),
port: z.number().int().positive().optional(),
user: z.string().min(1),
password: z.string().optional(),
readonly: z.boolean().default(false),
ssh: sshConfigSchema.optional()
} as const
export type ConnectionSource = 'env' | 'config' | 'store'
export type ResolvedConnection<TConfig> = {
config: TConfig
source: ConnectionSource
hash: string
}
+2 -1
View File
@@ -1 +1,2 @@
export {}
export type { ConnectionSource, ResolvedConnection, SshConfig } from './config/baseSchema.js'
export { baseConnectionShape, sshConfigSchema } from './config/baseSchema.js'