LakeQL
Overview
  • Introduction
Server Setup
  • createApiServer
  • defineConfig
  • Yoga Configuration
Authentication
  • JWT Authentication
  • Permissions
  • Scope Authorization
Schema Builder
  • Builder Configuration
  • Scalar Types
  • Comparison Types
  • Pagination
  • Input Validation
Customization
  • Custom Queries & Mutations
  • Extending Core
  • CORS Configuration
GitHub
LakeQL
  1. API
  2. Server Setup
  3. defineConfig

On this page

  1. Signature
  2. Configuration options
  3. Return type
  4. Usage
    1. Minimal — pass only configs
    2. Full configuration (matching the template)
    3. Using startServer

defineConfig

Type-safe configuration wrapper that provides createYogaServer and startServer methods.

defineConfig is the recommended way to configure your LakeQL API server. It provides full type safety for permissions by inferring catalog, schema, and table names from your generated configs.

Signature #

1
2
3
4
function defineConfig<const TConfig extends readonly SchemaConfigEntry[]>(
  input: TConfig | DefineConfigOptions<TConfig>
): DefinedApiConfig<TConfig>

Configuration options #

The DefineConfigOptions interface extends ApiRuntimeConfig with a required allConfigs field:

PropertyType
getUser?GetUserResolver

Custom JWT authentication resolver.

Default: built-in mock auth
hasReadPermission?ReadPermissionResolver

Custom read permission resolver.

Default: built-in read permission check
hasWritePermission?WritePermissionResolver

Custom write permission resolver.

Default: built-in write permission check
maxRecordsPerPage?number

Maximum records per paginated response.

Default: 2000
yogaConfig?YogaConfigOverrides

Override GraphQL Yoga options.

permissions?Permission[]

Permission rules for technical users.

Default: []
baseDir?string

Base directory for resolving relative paths.

Default: process.cwd()
schemaPath?string

Path to query schema files (relative to baseDir).

graphqlPath?string

GraphQL endpoint path.

Default: "/graphql"
healthCheckEndpoint?string

Health check endpoint path.

Default: "/live"
port?number

Server port.

Default: 4000

Return type #

defineConfig returns a DefinedApiConfig object that includes all your config options plus two convenience methods:

1
2
3
4
5
6
7
interface DefinedApiConfig<TConfig> {
  // ...all config options
  allConfigs: TConfig
  createYogaServer: (logger) => Promise<ApiYoga>
  startServer: () => Promise<void>
}

Usage #

Minimal — pass only configs #

1
2
3
4
5
import { defineConfig } from "@lakeql/api/config"
import { allConfigs } from "./config-registry"

export const config = defineConfig(allConfigs)

Full configuration (matching the template) #

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { defineConfig } from "@lakeql/api/config"

import { getUser } from "./auth"
import { allConfigs } from "./config-registry"
import { permissions } from "./permissions"

const baseDir = import.meta.dirname

export const config = defineConfig({
  allConfigs,
  baseDir,
  getUser,
  graphqlPath: "/graphql",
  healthCheckEndpoint: "/live",
  permissions,
  port: 4000,
  schemaPath: "./schemas",
})

Using startServer #

1
2
3
4
import { config } from "./config"

await config.startServer()

This calls startApiServer internally with your defined configuration.

Previous page

createApiServer

Next page

Yoga Configuration

src/config.ts
src/config.ts
src/index.ts