@xata.io/client 0.16.2 → 0.18.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/schema/tracing.ts","../src/util/lang.ts","../src/util/environment.ts","../src/util/apiKey.ts","../src/util/fetch.ts","../src/version.ts","../src/api/errors.ts","../src/api/fetcher.ts","../src/api/components.ts","../src/api/providers.ts","../src/api/client.ts","../src/api/index.ts","../src/plugins.ts","../src/schema/pagination.ts","../src/schema/query.ts","../src/schema/record.ts","../src/schema/sorting.ts","../src/schema/repository.ts","../src/schema/cache.ts","../src/schema/operators.ts","../src/schema/index.ts","../src/search/index.ts","../src/util/branches.ts","../src/util/config.ts","../src/client.ts","../src/serializer/index.ts","../src/workers/index.ts","../src/index.ts"],"sourcesContent":["export type AttributeDictionary = Record<string, string | number | boolean | undefined>;\n\nexport type TraceFunction = <T>(\n name: string,\n fn: (options: { setAttributes: (attrs: AttributeDictionary) => void; onError: (message: string) => void }) => T,\n options?: AttributeDictionary\n) => Promise<T>;\n\nexport const defaultTrace: TraceFunction = async <T>(\n _name: string,\n fn: (options: {\n setAttributes: (attrs: Record<string, string | number | boolean | undefined>) => void;\n onError: (message: string) => void;\n }) => T,\n _options?: Record<string, any>\n): Promise<T> => {\n return await fn({\n setAttributes: () => {\n return;\n },\n onError: () => {\n return;\n }\n });\n};\n\nexport const TraceAttributes = {\n VERSION: 'xata.sdk.version',\n\n TABLE: 'xata.table',\n\n HTTP_REQUEST_ID: 'http.request_id',\n HTTP_STATUS_CODE: 'http.status_code',\n HTTP_HOST: 'http.host',\n HTTP_SCHEME: 'http.scheme',\n HTTP_USER_AGENT: 'http.user_agent',\n HTTP_METHOD: 'http.method',\n HTTP_URL: 'http.url',\n HTTP_ROUTE: 'http.route',\n HTTP_TARGET: 'http.target'\n};\n","function notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function compact<T>(arr: Array<T | null | undefined>): T[] {\n return arr.filter(notEmpty);\n}\n\nexport function compactObject<T>(obj: Record<string, T | null | undefined>): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => notEmpty(value))) as Record<string, T>;\n}\n\nexport type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport function isObject(value: any): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function isString(value: any): value is string {\n return isDefined(value) && typeof value === 'string';\n}\n\nexport function isStringArray(value: any): value is string[] {\n return isDefined(value) && Array.isArray(value) && value.every(isString);\n}\n\nexport function toBase64(value: string): string {\n try {\n return btoa(value);\n } catch (err) {\n const buf = Buffer; // Avoid \"A Node.js API is used which is not supported in the Edge Runtime\" in Vercel Edge middleware\n return buf.from(value).toString('base64');\n }\n}\n","// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path=\"../types/global-node.d.ts\"/>\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path=\"../types/global-variables.d.ts\"/>\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path=\"../types/global-deno.d.ts\"/>\n\nimport { isObject } from './lang';\n\ninterface Environment {\n apiKey: string | undefined;\n databaseURL: string | undefined;\n branch: string | undefined;\n envBranch: string | undefined;\n fallbackBranch: string | undefined;\n}\n\nexport function getEnvironment(): Environment {\n // Node.js: process.env\n try {\n if (isObject(process) && isObject(process.env)) {\n return {\n apiKey: process.env.XATA_API_KEY ?? getGlobalApiKey(),\n databaseURL: process.env.XATA_DATABASE_URL ?? getGlobalDatabaseURL(),\n branch: process.env.XATA_BRANCH ?? getGlobalBranch(),\n envBranch: process.env.VERCEL_GIT_COMMIT_REF ?? process.env.CF_PAGES_BRANCH ?? process.env.BRANCH,\n fallbackBranch: process.env.XATA_FALLBACK_BRANCH ?? getGlobalFallbackBranch()\n };\n }\n } catch (err) {\n // Ignore: Should never happen\n }\n\n try {\n // Deno: Deno.env.get\n if (isObject(Deno) && isObject(Deno.env)) {\n return {\n apiKey: Deno.env.get('XATA_API_KEY') ?? getGlobalApiKey(),\n databaseURL: Deno.env.get('XATA_DATABASE_URL') ?? getGlobalDatabaseURL(),\n branch: Deno.env.get('XATA_BRANCH') ?? getGlobalBranch(),\n envBranch: Deno.env.get('VERCEL_GIT_COMMIT_REF') ?? Deno.env.get('CF_PAGES_BRANCH') ?? Deno.env.get('BRANCH'),\n fallbackBranch: Deno.env.get('XATA_FALLBACK_BRANCH') ?? getGlobalFallbackBranch()\n };\n }\n } catch (err) {\n // Ignore: Will fail if not using --allow-env\n }\n\n return {\n apiKey: getGlobalApiKey(),\n databaseURL: getGlobalDatabaseURL(),\n branch: getGlobalBranch(),\n envBranch: undefined,\n fallbackBranch: getGlobalFallbackBranch()\n };\n}\n\nfunction getGlobalApiKey(): string | undefined {\n try {\n return XATA_API_KEY;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction getGlobalDatabaseURL(): string | undefined {\n try {\n return XATA_DATABASE_URL;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction getGlobalBranch(): string | undefined {\n try {\n return XATA_BRANCH;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction getGlobalFallbackBranch(): string | undefined {\n try {\n return XATA_FALLBACK_BRANCH;\n } catch (err) {\n return undefined;\n }\n}\n\nexport async function getGitBranch(): Promise<string | undefined> {\n const cmd = ['git', 'branch', '--show-current'];\n const fullCmd = cmd.join(' ');\n\n // Avoid \"Detected a Node builtin module import while Node compatibility is disabled\" in CloudFlare Workers\n const nodeModule = ['child', 'process'].join('_');\n\n const execOptions = { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] };\n\n // Node.js: child_process.execSync\n try {\n // CJS\n if (typeof require === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require(nodeModule).execSync(fullCmd, execOptions).trim();\n }\n\n // ESM\n const { execSync } = await import(nodeModule);\n return execSync(fullCmd, execOptions).toString().trim();\n } catch (err) {\n // Ignore\n }\n\n // Deno: Deno.run\n try {\n if (isObject(Deno)) {\n const process = Deno.run({ cmd, stdout: 'piped', stderr: 'null' });\n return new TextDecoder().decode(await process.output()).trim();\n }\n } catch (err) {\n // Ignore: Will fail if not using --allow-run\n }\n}\n","import { getEnvironment } from './environment';\n\nexport function getAPIKey() {\n try {\n const { apiKey } = getEnvironment();\n return apiKey;\n } catch (err) {\n return undefined;\n }\n}\n","import { FetchImpl } from '../api/fetcher';\n\nexport function getFetchImplementation(userFetch?: FetchImpl) {\n const globalFetch = typeof fetch !== 'undefined' ? fetch : undefined;\n const fetchImpl = userFetch ?? globalFetch;\n if (!fetchImpl) {\n /** @todo add a link after docs exist */\n throw new Error(\n `Couldn't find \\`fetch\\`. Install a fetch implementation such as \\`node-fetch\\` and pass it explicitly.`\n );\n }\n return fetchImpl;\n}\n","export const VERSION = '0.16.2';","import { Responses } from '.';\nimport { isObject, isString } from '../util/lang';\n\n// Polyfill for TypeScript < 4.6\nclass ErrorWithCause extends Error {\n cause?: Error;\n\n constructor(message?: string, options?: { cause?: Error }) {\n // @ts-ignore - Options didn't exist before 4.6\n super(message, options);\n }\n}\n\nexport class FetcherError extends ErrorWithCause {\n public status: number | string;\n public requestId: string | undefined;\n public errors: Responses.BulkError['errors'] | undefined;\n\n constructor(status: number, data?: unknown, requestId?: string) {\n super(getMessage(data));\n\n this.status = status;\n this.errors = isBulkError(data) ? data.errors : undefined;\n this.requestId = requestId;\n\n if (data instanceof Error) {\n this.stack = data.stack;\n this.cause = (data as ErrorWithCause).cause;\n }\n }\n\n toString() {\n const error = super.toString();\n\n return `[${this.status}] (${this.requestId ?? 'Unknown'}): ${error}`;\n }\n}\n\nexport type PossibleErrors =\n | Responses.BadRequestError\n | Responses.AuthError\n | Responses.SimpleError\n | Responses.BulkError;\n\nfunction isBulkError(error: any): error is Responses.BulkError {\n return isObject(error) && Array.isArray(error.errors);\n}\n\nfunction isErrorWithMessage(\n error: any\n): error is Responses.BadRequestError | Responses.SimpleError | Responses.AuthError {\n return isObject(error) && isString(error.message);\n}\n\nfunction getMessage(data?: unknown): string {\n if (data instanceof Error) {\n return data.message;\n } else if (isString(data)) {\n return data;\n } else if (isErrorWithMessage(data)) {\n return data.message;\n } else if (isBulkError(data)) {\n return 'Bulk operation failed';\n } else {\n return 'Unexpected error';\n }\n}\n","import { TraceAttributes, TraceFunction } from '../schema/tracing';\nimport { VERSION } from '../version';\nimport { FetcherError, PossibleErrors } from './errors';\n\nconst resolveUrl = (url: string, queryParams: Record<string, any> = {}, pathParams: Record<string, string> = {}) => {\n // Remove nulls and undefineds from query params\n const cleanQueryParams = Object.entries(queryParams).reduce((acc, [key, value]) => {\n if (value === undefined || value === null) return acc;\n return { ...acc, [key]: value };\n }, {} as Record<string, any>);\n\n const query = new URLSearchParams(cleanQueryParams).toString();\n const queryString = query.length > 0 ? `?${query}` : '';\n return url.replace(/\\{\\w*\\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;\n};\n\n// Typed only the subset of the spec we actually use (to be able to build a simple mock)\nexport type FetchImpl = (\n url: string,\n init?: { body?: string; headers?: Record<string, string>; method?: string }\n) => Promise<{\n ok: boolean;\n status: number;\n url: string;\n json(): Promise<any>;\n headers?: {\n get(name: string): string | null;\n };\n}>;\n\nexport type WorkspaceApiUrlBuilder = (path: string, pathParams: Record<string, string>) => string;\n\nexport type FetcherExtraProps = {\n apiUrl: string;\n workspacesApiUrl: string | WorkspaceApiUrlBuilder;\n fetchImpl: FetchImpl;\n apiKey: string;\n trace: TraceFunction;\n};\n\nexport type ErrorWrapper<TError> = TError | { status: 'unknown'; payload: string };\n\nexport type FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> = {\n url: string;\n method: string;\n body?: TBody;\n headers?: THeaders;\n queryParams?: TQueryParams;\n pathParams?: TPathParams;\n} & FetcherExtraProps;\n\nfunction buildBaseUrl({\n path,\n workspacesApiUrl,\n apiUrl,\n pathParams\n}: {\n path: string;\n workspacesApiUrl: string | WorkspaceApiUrlBuilder;\n apiUrl: string;\n pathParams?: Record<string, string>;\n}): string {\n if (!pathParams?.workspace) return `${apiUrl}${path}`;\n\n const url = typeof workspacesApiUrl === 'string' ? `${workspacesApiUrl}${path}` : workspacesApiUrl(path, pathParams);\n return url.replace('{workspaceId}', pathParams.workspace);\n}\n\n// The host header is needed by Node.js on localhost.\n// It is ignored by fetch() in the frontend\nfunction hostHeader(url: string): { Host?: string } {\n const pattern = /.*:\\/\\/(?<host>[^/]+).*/;\n const { groups } = pattern.exec(url) ?? {};\n\n return groups?.host ? { Host: groups.host } : {};\n}\n\nexport async function fetch<\n TData,\n TError extends ErrorWrapper<{ status: unknown; payload: PossibleErrors }>,\n TBody extends Record<string, unknown> | undefined | null,\n THeaders extends Record<string, unknown>,\n TQueryParams extends Record<string, unknown>,\n TPathParams extends Record<string, string>\n>({\n url: path,\n method,\n body,\n headers,\n pathParams,\n queryParams,\n fetchImpl,\n apiKey,\n apiUrl,\n workspacesApiUrl,\n trace\n}: FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> & FetcherExtraProps): Promise<TData> {\n return trace(\n `${method.toUpperCase()} ${path}`,\n async ({ setAttributes, onError }) => {\n const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });\n const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);\n\n // Node.js on localhost won't resolve localhost subdomains unless mapped in /etc/hosts\n // So, instead, we use localhost without subdomains, but will add a Host header\n const url = fullUrl.includes('localhost') ? fullUrl.replace(/^[^.]+\\./, 'http://') : fullUrl;\n setAttributes({\n [TraceAttributes.HTTP_URL]: url,\n [TraceAttributes.HTTP_TARGET]: resolveUrl(path, queryParams, pathParams)\n });\n\n const response = await fetchImpl(url, {\n method: method.toUpperCase(),\n body: body ? JSON.stringify(body) : undefined,\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': `Xata client-ts/${VERSION}`,\n ...headers,\n ...hostHeader(fullUrl),\n Authorization: `Bearer ${apiKey}`\n }\n });\n\n // No content\n if (response.status === 204) {\n return {} as unknown as TData;\n }\n\n const { host, protocol } = parseUrl(response.url);\n const requestId = response.headers?.get('x-request-id') ?? undefined;\n setAttributes({\n [TraceAttributes.HTTP_REQUEST_ID]: requestId,\n [TraceAttributes.HTTP_STATUS_CODE]: response.status,\n [TraceAttributes.HTTP_HOST]: host,\n [TraceAttributes.HTTP_SCHEME]: protocol?.replace(':', '')\n });\n\n try {\n const jsonResponse = await response.json();\n\n if (response.ok) {\n return jsonResponse;\n }\n\n throw new FetcherError(response.status, jsonResponse as TError['payload'], requestId);\n } catch (error) {\n const fetcherError = new FetcherError(response.status, error, requestId);\n onError(fetcherError.message);\n\n throw fetcherError;\n }\n },\n { [TraceAttributes.HTTP_METHOD]: method.toUpperCase(), [TraceAttributes.HTTP_ROUTE]: path }\n );\n}\n\nfunction parseUrl(url: string): { host?: string; protocol?: string } {\n try {\n const { host, protocol } = new URL(url);\n\n return { host, protocol };\n } catch (error) {\n return {};\n }\n}\n","/**\n * Generated by @openapi-codegen\n *\n * @version 1.0\n */\nimport type * as Fetcher from './fetcher';\nimport { fetch, FetcherExtraProps } from './fetcher';\nimport type * as Schemas from './schemas';\nimport type * as Responses from './responses';\n\nexport type GetUserError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetUserVariables = FetcherExtraProps;\n\n/**\n * Return details of the user making the request\n */\nexport const getUser = (variables: GetUserVariables) =>\n fetch<Schemas.UserWithID, GetUserError, undefined, {}, {}, {}>({ url: '/user', method: 'get', ...variables });\n\nexport type UpdateUserError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateUserVariables = {\n body: Schemas.User;\n} & FetcherExtraProps;\n\n/**\n * Update user info\n */\nexport const updateUser = (variables: UpdateUserVariables) =>\n fetch<Schemas.UserWithID, UpdateUserError, Schemas.User, {}, {}, {}>({ url: '/user', method: 'put', ...variables });\n\nexport type DeleteUserError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteUserVariables = FetcherExtraProps;\n\n/**\n * Delete the user making the request\n */\nexport const deleteUser = (variables: DeleteUserVariables) =>\n fetch<undefined, DeleteUserError, undefined, {}, {}, {}>({ url: '/user', method: 'delete', ...variables });\n\nexport type GetUserAPIKeysError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetUserAPIKeysResponse = {\n keys: {\n name: string;\n createdAt: Schemas.DateTime;\n }[];\n};\n\nexport type GetUserAPIKeysVariables = FetcherExtraProps;\n\n/**\n * Retrieve a list of existing user API keys\n */\nexport const getUserAPIKeys = (variables: GetUserAPIKeysVariables) =>\n fetch<GetUserAPIKeysResponse, GetUserAPIKeysError, undefined, {}, {}, {}>({\n url: '/user/keys',\n method: 'get',\n ...variables\n });\n\nexport type CreateUserAPIKeyPathParams = {\n /*\n * API Key name\n */\n keyName: Schemas.APIKeyName;\n};\n\nexport type CreateUserAPIKeyError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateUserAPIKeyResponse = {\n name: string;\n key: string;\n createdAt: Schemas.DateTime;\n};\n\nexport type CreateUserAPIKeyVariables = {\n pathParams: CreateUserAPIKeyPathParams;\n} & FetcherExtraProps;\n\n/**\n * Create and return new API key\n */\nexport const createUserAPIKey = (variables: CreateUserAPIKeyVariables) =>\n fetch<CreateUserAPIKeyResponse, CreateUserAPIKeyError, undefined, {}, {}, CreateUserAPIKeyPathParams>({\n url: '/user/keys/{keyName}',\n method: 'post',\n ...variables\n });\n\nexport type DeleteUserAPIKeyPathParams = {\n /*\n * API Key name\n */\n keyName: Schemas.APIKeyName;\n};\n\nexport type DeleteUserAPIKeyError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteUserAPIKeyVariables = {\n pathParams: DeleteUserAPIKeyPathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete an existing API key\n */\nexport const deleteUserAPIKey = (variables: DeleteUserAPIKeyVariables) =>\n fetch<undefined, DeleteUserAPIKeyError, undefined, {}, {}, DeleteUserAPIKeyPathParams>({\n url: '/user/keys/{keyName}',\n method: 'delete',\n ...variables\n });\n\nexport type CreateWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateWorkspaceVariables = {\n body: Schemas.WorkspaceMeta;\n} & FetcherExtraProps;\n\n/**\n * Creates a new workspace with the user requesting it as its single owner.\n */\nexport const createWorkspace = (variables: CreateWorkspaceVariables) =>\n fetch<Schemas.Workspace, CreateWorkspaceError, Schemas.WorkspaceMeta, {}, {}, {}>({\n url: '/workspaces',\n method: 'post',\n ...variables\n });\n\nexport type GetWorkspacesListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetWorkspacesListResponse = {\n workspaces: {\n id: Schemas.WorkspaceID;\n name: string;\n slug: string;\n role: Schemas.Role;\n }[];\n};\n\nexport type GetWorkspacesListVariables = FetcherExtraProps;\n\n/**\n * Retrieve the list of workspaces the user belongs to\n */\nexport const getWorkspacesList = (variables: GetWorkspacesListVariables) =>\n fetch<GetWorkspacesListResponse, GetWorkspacesListError, undefined, {}, {}, {}>({\n url: '/workspaces',\n method: 'get',\n ...variables\n });\n\nexport type GetWorkspacePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type GetWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetWorkspaceVariables = {\n pathParams: GetWorkspacePathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve workspace info from a workspace ID\n */\nexport const getWorkspace = (variables: GetWorkspaceVariables) =>\n fetch<Schemas.Workspace, GetWorkspaceError, undefined, {}, {}, GetWorkspacePathParams>({\n url: '/workspaces/{workspaceId}',\n method: 'get',\n ...variables\n });\n\nexport type UpdateWorkspacePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type UpdateWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateWorkspaceVariables = {\n body: Schemas.WorkspaceMeta;\n pathParams: UpdateWorkspacePathParams;\n} & FetcherExtraProps;\n\n/**\n * Update workspace info\n */\nexport const updateWorkspace = (variables: UpdateWorkspaceVariables) =>\n fetch<Schemas.Workspace, UpdateWorkspaceError, Schemas.WorkspaceMeta, {}, {}, UpdateWorkspacePathParams>({\n url: '/workspaces/{workspaceId}',\n method: 'put',\n ...variables\n });\n\nexport type DeleteWorkspacePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type DeleteWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteWorkspaceVariables = {\n pathParams: DeleteWorkspacePathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete the workspace with the provided ID\n */\nexport const deleteWorkspace = (variables: DeleteWorkspaceVariables) =>\n fetch<undefined, DeleteWorkspaceError, undefined, {}, {}, DeleteWorkspacePathParams>({\n url: '/workspaces/{workspaceId}',\n method: 'delete',\n ...variables\n });\n\nexport type GetWorkspaceMembersListPathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type GetWorkspaceMembersListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetWorkspaceMembersListVariables = {\n pathParams: GetWorkspaceMembersListPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve the list of members of the given workspace\n */\nexport const getWorkspaceMembersList = (variables: GetWorkspaceMembersListVariables) =>\n fetch<Schemas.WorkspaceMembers, GetWorkspaceMembersListError, undefined, {}, {}, GetWorkspaceMembersListPathParams>({\n url: '/workspaces/{workspaceId}/members',\n method: 'get',\n ...variables\n });\n\nexport type UpdateWorkspaceMemberRolePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * UserID\n */\n userId: Schemas.UserID;\n};\n\nexport type UpdateWorkspaceMemberRoleError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateWorkspaceMemberRoleRequestBody = {\n role: Schemas.Role;\n};\n\nexport type UpdateWorkspaceMemberRoleVariables = {\n body: UpdateWorkspaceMemberRoleRequestBody;\n pathParams: UpdateWorkspaceMemberRolePathParams;\n} & FetcherExtraProps;\n\n/**\n * Update a workspace member role. Workspaces must always have at least one owner, so this operation will fail if trying to remove owner role from the last owner in the workspace.\n */\nexport const updateWorkspaceMemberRole = (variables: UpdateWorkspaceMemberRoleVariables) =>\n fetch<\n undefined,\n UpdateWorkspaceMemberRoleError,\n UpdateWorkspaceMemberRoleRequestBody,\n {},\n {},\n UpdateWorkspaceMemberRolePathParams\n >({ url: '/workspaces/{workspaceId}/members/{userId}', method: 'put', ...variables });\n\nexport type RemoveWorkspaceMemberPathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * UserID\n */\n userId: Schemas.UserID;\n};\n\nexport type RemoveWorkspaceMemberError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type RemoveWorkspaceMemberVariables = {\n pathParams: RemoveWorkspaceMemberPathParams;\n} & FetcherExtraProps;\n\n/**\n * Remove the member from the workspace\n */\nexport const removeWorkspaceMember = (variables: RemoveWorkspaceMemberVariables) =>\n fetch<undefined, RemoveWorkspaceMemberError, undefined, {}, {}, RemoveWorkspaceMemberPathParams>({\n url: '/workspaces/{workspaceId}/members/{userId}',\n method: 'delete',\n ...variables\n });\n\nexport type InviteWorkspaceMemberPathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type InviteWorkspaceMemberError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 409;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type InviteWorkspaceMemberRequestBody = {\n /*\n * @format email\n */\n email: string;\n role: Schemas.Role;\n};\n\nexport type InviteWorkspaceMemberVariables = {\n body: InviteWorkspaceMemberRequestBody;\n pathParams: InviteWorkspaceMemberPathParams;\n} & FetcherExtraProps;\n\n/**\n * Invite some user to join the workspace with the given role\n */\nexport const inviteWorkspaceMember = (variables: InviteWorkspaceMemberVariables) =>\n fetch<\n Schemas.WorkspaceInvite,\n InviteWorkspaceMemberError,\n InviteWorkspaceMemberRequestBody,\n {},\n {},\n InviteWorkspaceMemberPathParams\n >({ url: '/workspaces/{workspaceId}/invites', method: 'post', ...variables });\n\nexport type UpdateWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite identifier\n */\n inviteId: Schemas.InviteID;\n};\n\nexport type UpdateWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateWorkspaceMemberInviteRequestBody = {\n role: Schemas.Role;\n};\n\nexport type UpdateWorkspaceMemberInviteVariables = {\n body: UpdateWorkspaceMemberInviteRequestBody;\n pathParams: UpdateWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * This operation provides a way to update an existing invite. Updates are performed in-place; they do not change the invite link, the expiry time, nor do they re-notify the recipient of the invite.\n */\nexport const updateWorkspaceMemberInvite = (variables: UpdateWorkspaceMemberInviteVariables) =>\n fetch<\n Schemas.WorkspaceInvite,\n UpdateWorkspaceMemberInviteError,\n UpdateWorkspaceMemberInviteRequestBody,\n {},\n {},\n UpdateWorkspaceMemberInvitePathParams\n >({ url: '/workspaces/{workspaceId}/invites/{inviteId}', method: 'patch', ...variables });\n\nexport type CancelWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite identifier\n */\n inviteId: Schemas.InviteID;\n};\n\nexport type CancelWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CancelWorkspaceMemberInviteVariables = {\n pathParams: CancelWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * This operation provides a way to cancel invites by deleting them. Already accepted invites cannot be deleted.\n */\nexport const cancelWorkspaceMemberInvite = (variables: CancelWorkspaceMemberInviteVariables) =>\n fetch<undefined, CancelWorkspaceMemberInviteError, undefined, {}, {}, CancelWorkspaceMemberInvitePathParams>({\n url: '/workspaces/{workspaceId}/invites/{inviteId}',\n method: 'delete',\n ...variables\n });\n\nexport type ResendWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite identifier\n */\n inviteId: Schemas.InviteID;\n};\n\nexport type ResendWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ResendWorkspaceMemberInviteVariables = {\n pathParams: ResendWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * This operation provides a way to resend an Invite notification. Invite notifications can only be sent for Invites not yet accepted.\n */\nexport const resendWorkspaceMemberInvite = (variables: ResendWorkspaceMemberInviteVariables) =>\n fetch<undefined, ResendWorkspaceMemberInviteError, undefined, {}, {}, ResendWorkspaceMemberInvitePathParams>({\n url: '/workspaces/{workspaceId}/invites/{inviteId}/resend',\n method: 'post',\n ...variables\n });\n\nexport type AcceptWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite Key (secret) for the invited user\n */\n inviteKey: Schemas.InviteKey;\n};\n\nexport type AcceptWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type AcceptWorkspaceMemberInviteVariables = {\n pathParams: AcceptWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * Accept the invitation to join a workspace. If the operation succeeds the user will be a member of the workspace\n */\nexport const acceptWorkspaceMemberInvite = (variables: AcceptWorkspaceMemberInviteVariables) =>\n fetch<undefined, AcceptWorkspaceMemberInviteError, undefined, {}, {}, AcceptWorkspaceMemberInvitePathParams>({\n url: '/workspaces/{workspaceId}/invites/{inviteKey}/accept',\n method: 'post',\n ...variables\n });\n\nexport type GetDatabaseListPathParams = {\n workspace: string;\n};\n\nexport type GetDatabaseListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type GetDatabaseListVariables = {\n pathParams: GetDatabaseListPathParams;\n} & FetcherExtraProps;\n\n/**\n * List all databases available in your Workspace.\n */\nexport const getDatabaseList = (variables: GetDatabaseListVariables) =>\n fetch<Schemas.ListDatabasesResponse, GetDatabaseListError, undefined, {}, {}, GetDatabaseListPathParams>({\n url: '/dbs',\n method: 'get',\n ...variables\n });\n\nexport type GetBranchListPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type GetBranchListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchListVariables = {\n pathParams: GetBranchListPathParams;\n} & FetcherExtraProps;\n\n/**\n * List all available Branches\n */\nexport const getBranchList = (variables: GetBranchListVariables) =>\n fetch<Schemas.ListBranchesResponse, GetBranchListError, undefined, {}, {}, GetBranchListPathParams>({\n url: '/dbs/{dbName}',\n method: 'get',\n ...variables\n });\n\nexport type CreateDatabasePathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type CreateDatabaseError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type CreateDatabaseResponse = {\n /*\n * @minLength 1\n */\n databaseName: string;\n branchName?: string;\n};\n\nexport type CreateDatabaseRequestBody = {\n /*\n * @minLength 1\n */\n displayName?: string;\n /*\n * @minLength 1\n */\n branchName?: string;\n ui?: {\n color?: string;\n };\n metadata?: Schemas.BranchMetadata;\n};\n\nexport type CreateDatabaseVariables = {\n body?: CreateDatabaseRequestBody;\n pathParams: CreateDatabasePathParams;\n} & FetcherExtraProps;\n\n/**\n * Create Database with identifier name\n */\nexport const createDatabase = (variables: CreateDatabaseVariables) =>\n fetch<CreateDatabaseResponse, CreateDatabaseError, CreateDatabaseRequestBody, {}, {}, CreateDatabasePathParams>({\n url: '/dbs/{dbName}',\n method: 'put',\n ...variables\n });\n\nexport type DeleteDatabasePathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type DeleteDatabaseError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteDatabaseVariables = {\n pathParams: DeleteDatabasePathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete a database and all of its branches and tables permanently.\n */\nexport const deleteDatabase = (variables: DeleteDatabaseVariables) =>\n fetch<undefined, DeleteDatabaseError, undefined, {}, {}, DeleteDatabasePathParams>({\n url: '/dbs/{dbName}',\n method: 'delete',\n ...variables\n });\n\nexport type GetDatabaseMetadataPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type GetDatabaseMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetDatabaseMetadataVariables = {\n pathParams: GetDatabaseMetadataPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve metadata of the given database\n */\nexport const getDatabaseMetadata = (variables: GetDatabaseMetadataVariables) =>\n fetch<Schemas.DatabaseMetadata, GetDatabaseMetadataError, undefined, {}, {}, GetDatabaseMetadataPathParams>({\n url: '/dbs/{dbName}/metadata',\n method: 'get',\n ...variables\n });\n\nexport type GetGitBranchesMappingPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type GetGitBranchesMappingError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type GetGitBranchesMappingVariables = {\n pathParams: GetGitBranchesMappingPathParams;\n} & FetcherExtraProps;\n\n/**\n * Lists all the git branches in the mapping, and their associated Xata branches.\n *\n * Example response:\n *\n * ```json\n * {\n * \"mappings\": [\n * {\n * \"gitBranch\": \"main\",\n * \"xataBranch\": \"main\"\n * },\n * {\n * \"gitBranch\": \"gitBranch1\",\n * \"xataBranch\": \"xataBranch1\"\n * }\n * {\n * \"gitBranch\": \"xataBranch2\",\n * \"xataBranch\": \"xataBranch2\"\n * }\n * ]\n * }\n * ```\n */\nexport const getGitBranchesMapping = (variables: GetGitBranchesMappingVariables) =>\n fetch<\n Schemas.ListGitBranchesResponse,\n GetGitBranchesMappingError,\n undefined,\n {},\n {},\n GetGitBranchesMappingPathParams\n >({ url: '/dbs/{dbName}/gitBranches', method: 'get', ...variables });\n\nexport type AddGitBranchesEntryPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type AddGitBranchesEntryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type AddGitBranchesEntryResponse = {\n /*\n * Warning message\n */\n warning?: string;\n};\n\nexport type AddGitBranchesEntryRequestBody = {\n /*\n * The name of the Git branch.\n */\n gitBranch: string;\n /*\n * The name of the Xata branch.\n */\n xataBranch: Schemas.BranchName;\n};\n\nexport type AddGitBranchesEntryVariables = {\n body: AddGitBranchesEntryRequestBody;\n pathParams: AddGitBranchesEntryPathParams;\n} & FetcherExtraProps;\n\n/**\n * Adds an entry to the mapping of git branches to Xata branches. The git branch and the Xata branch must be present in the body of the request. If the Xata branch doesn't exist, a 400 error is returned.\n *\n * If the git branch is already present in the mapping, the old entry is overwritten, and a warning message is included in the response. If the git branch is added and didn't exist before, the response code is 204. If the git branch existed and it was overwritten, the response code is 201.\n *\n * Example request:\n *\n * ```json\n * // POST https://tutorial-ng7s8c.xata.sh/dbs/demo/gitBranches\n * {\n * \"gitBranch\": \"fix/bug123\",\n * \"xataBranch\": \"fix_bug\"\n * }\n * ```\n */\nexport const addGitBranchesEntry = (variables: AddGitBranchesEntryVariables) =>\n fetch<\n AddGitBranchesEntryResponse,\n AddGitBranchesEntryError,\n AddGitBranchesEntryRequestBody,\n {},\n {},\n AddGitBranchesEntryPathParams\n >({ url: '/dbs/{dbName}/gitBranches', method: 'post', ...variables });\n\nexport type RemoveGitBranchesEntryPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type RemoveGitBranchesEntryQueryParams = {\n /*\n * The Git Branch to remove from the mapping\n */\n gitBranch: string;\n};\n\nexport type RemoveGitBranchesEntryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type RemoveGitBranchesEntryVariables = {\n pathParams: RemoveGitBranchesEntryPathParams;\n queryParams: RemoveGitBranchesEntryQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Removes an entry from the mapping of git branches to Xata branches. The name of the git branch must be passed as a query parameter. If the git branch is not found, the endpoint returns a 404 status code.\n *\n * Example request:\n *\n * ```json\n * // DELETE https://tutorial-ng7s8c.xata.sh/dbs/demo/gitBranches?gitBranch=fix%2Fbug123\n * ```\n */\nexport const removeGitBranchesEntry = (variables: RemoveGitBranchesEntryVariables) =>\n fetch<\n undefined,\n RemoveGitBranchesEntryError,\n undefined,\n {},\n RemoveGitBranchesEntryQueryParams,\n RemoveGitBranchesEntryPathParams\n >({ url: '/dbs/{dbName}/gitBranches', method: 'delete', ...variables });\n\nexport type ResolveBranchPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type ResolveBranchQueryParams = {\n /*\n * The Git Branch\n */\n gitBranch?: string;\n /*\n * Default branch to fallback to\n */\n fallbackBranch?: string;\n};\n\nexport type ResolveBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type ResolveBranchResponse = {\n branch: string;\n reason: {\n code: 'FOUND_IN_MAPPING' | 'BRANCH_EXISTS' | 'FALLBACK_BRANCH' | 'DEFAULT_BRANCH';\n message: string;\n };\n};\n\nexport type ResolveBranchVariables = {\n pathParams: ResolveBranchPathParams;\n queryParams?: ResolveBranchQueryParams;\n} & FetcherExtraProps;\n\n/**\n * In order to resolve the database branch, the following algorithm is used:\n * * if the `gitBranch` was provided and is found in the [git branches mapping](/api-reference/dbs/db_name/gitBranches), the associated Xata branch is returned\n * * else, if a Xata branch with the exact same name as `gitBranch` exists, return it\n * * else, if `fallbackBranch` is provided and a branch with that name exists, return it\n * * else, return the default branch of the DB (`main` or the first branch)\n *\n * Example call:\n *\n * ```json\n * // GET https://tutorial-ng7s8c.xata.sh/dbs/demo/dbs/demo/resolveBranch?gitBranch=test&fallbackBranch=tsg\n * ```\n *\n * Example response:\n *\n * ```json\n * {\n * \"branch\": \"main\",\n * \"reason\": {\n * \"code\": \"DEFAULT_BRANCH\",\n * \"message\": \"Default branch for this database (main)\"\n * }\n * }\n * ```\n */\nexport const resolveBranch = (variables: ResolveBranchVariables) =>\n fetch<ResolveBranchResponse, ResolveBranchError, undefined, {}, ResolveBranchQueryParams, ResolveBranchPathParams>({\n url: '/dbs/{dbName}/resolveBranch',\n method: 'get',\n ...variables\n });\n\nexport type GetBranchDetailsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchDetailsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchDetailsVariables = {\n pathParams: GetBranchDetailsPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchDetails = (variables: GetBranchDetailsVariables) =>\n fetch<Schemas.DBBranch, GetBranchDetailsError, undefined, {}, {}, GetBranchDetailsPathParams>({\n url: '/db/{dbBranchName}',\n method: 'get',\n ...variables\n });\n\nexport type CreateBranchPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type CreateBranchQueryParams = {\n /*\n * Name of source branch to branch the new schema from\n */\n from?: string;\n};\n\nexport type CreateBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateBranchResponse = {\n /*\n * @minLength 1\n */\n databaseName: string;\n branchName: string;\n};\n\nexport type CreateBranchRequestBody = {\n /*\n * Select the branch to fork from. Defaults to 'main'\n */\n from?: string;\n metadata?: Schemas.BranchMetadata;\n};\n\nexport type CreateBranchVariables = {\n body?: CreateBranchRequestBody;\n pathParams: CreateBranchPathParams;\n queryParams?: CreateBranchQueryParams;\n} & FetcherExtraProps;\n\nexport const createBranch = (variables: CreateBranchVariables) =>\n fetch<\n CreateBranchResponse,\n CreateBranchError,\n CreateBranchRequestBody,\n {},\n CreateBranchQueryParams,\n CreateBranchPathParams\n >({ url: '/db/{dbBranchName}', method: 'put', ...variables });\n\nexport type DeleteBranchPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type DeleteBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteBranchVariables = {\n pathParams: DeleteBranchPathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete the branch in the database and all its resources\n */\nexport const deleteBranch = (variables: DeleteBranchVariables) =>\n fetch<undefined, DeleteBranchError, undefined, {}, {}, DeleteBranchPathParams>({\n url: '/db/{dbBranchName}',\n method: 'delete',\n ...variables\n });\n\nexport type UpdateBranchMetadataPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type UpdateBranchMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateBranchMetadataVariables = {\n body?: Schemas.BranchMetadata;\n pathParams: UpdateBranchMetadataPathParams;\n} & FetcherExtraProps;\n\n/**\n * Update the branch metadata\n */\nexport const updateBranchMetadata = (variables: UpdateBranchMetadataVariables) =>\n fetch<undefined, UpdateBranchMetadataError, Schemas.BranchMetadata, {}, {}, UpdateBranchMetadataPathParams>({\n url: '/db/{dbBranchName}/metadata',\n method: 'put',\n ...variables\n });\n\nexport type GetBranchMetadataPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchMetadataVariables = {\n pathParams: GetBranchMetadataPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchMetadata = (variables: GetBranchMetadataVariables) =>\n fetch<Schemas.BranchMetadata, GetBranchMetadataError, undefined, {}, {}, GetBranchMetadataPathParams>({\n url: '/db/{dbBranchName}/metadata',\n method: 'get',\n ...variables\n });\n\nexport type GetBranchMigrationHistoryPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchMigrationHistoryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchMigrationHistoryResponse = {\n startedFrom?: Schemas.StartedFromMetadata;\n migrations?: Schemas.BranchMigration[];\n};\n\nexport type GetBranchMigrationHistoryRequestBody = {\n limit?: number;\n startFrom?: string;\n};\n\nexport type GetBranchMigrationHistoryVariables = {\n body?: GetBranchMigrationHistoryRequestBody;\n pathParams: GetBranchMigrationHistoryPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchMigrationHistory = (variables: GetBranchMigrationHistoryVariables) =>\n fetch<\n GetBranchMigrationHistoryResponse,\n GetBranchMigrationHistoryError,\n GetBranchMigrationHistoryRequestBody,\n {},\n {},\n GetBranchMigrationHistoryPathParams\n >({ url: '/db/{dbBranchName}/migrations', method: 'get', ...variables });\n\nexport type ExecuteBranchMigrationPlanPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type ExecuteBranchMigrationPlanError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ExecuteBranchMigrationPlanRequestBody = {\n version: number;\n migration: Schemas.BranchMigration;\n};\n\nexport type ExecuteBranchMigrationPlanVariables = {\n body: ExecuteBranchMigrationPlanRequestBody;\n pathParams: ExecuteBranchMigrationPlanPathParams;\n} & FetcherExtraProps;\n\n/**\n * Apply a migration plan to the branch\n */\nexport const executeBranchMigrationPlan = (variables: ExecuteBranchMigrationPlanVariables) =>\n fetch<\n undefined,\n ExecuteBranchMigrationPlanError,\n ExecuteBranchMigrationPlanRequestBody,\n {},\n {},\n ExecuteBranchMigrationPlanPathParams\n >({ url: '/db/{dbBranchName}/migrations/execute', method: 'post', ...variables });\n\nexport type GetBranchMigrationPlanPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchMigrationPlanError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchMigrationPlanVariables = {\n body: Schemas.Schema;\n pathParams: GetBranchMigrationPlanPathParams;\n} & FetcherExtraProps;\n\n/**\n * Compute a migration plan from a target schema the branch should be migrated too.\n */\nexport const getBranchMigrationPlan = (variables: GetBranchMigrationPlanVariables) =>\n fetch<\n Responses.BranchMigrationPlan,\n GetBranchMigrationPlanError,\n Schemas.Schema,\n {},\n {},\n GetBranchMigrationPlanPathParams\n >({ url: '/db/{dbBranchName}/migrations/plan', method: 'post', ...variables });\n\nexport type GetBranchStatsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchStatsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.SimpleError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchStatsResponse = {\n timestamp: string;\n interval: string;\n resolution: string;\n numberOfRecords?: Schemas.MetricsDatapoint[];\n writesOverTime?: Schemas.MetricsDatapoint[];\n readsOverTime?: Schemas.MetricsDatapoint[];\n readLatency?: Schemas.MetricsLatency;\n writeLatency?: Schemas.MetricsLatency;\n warning?: string;\n};\n\nexport type GetBranchStatsVariables = {\n pathParams: GetBranchStatsPathParams;\n} & FetcherExtraProps;\n\n/**\n * Get branch usage metrics.\n */\nexport const getBranchStats = (variables: GetBranchStatsVariables) =>\n fetch<GetBranchStatsResponse, GetBranchStatsError, undefined, {}, {}, GetBranchStatsPathParams>({\n url: '/db/{dbBranchName}/stats',\n method: 'get',\n ...variables\n });\n\nexport type CreateTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type CreateTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateTableResponse = {\n branchName: string;\n /*\n * @minLength 1\n */\n tableName: string;\n};\n\nexport type CreateTableVariables = {\n pathParams: CreateTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Creates a new table with the given name. Returns 422 if a table with the same name already exists.\n */\nexport const createTable = (variables: CreateTableVariables) =>\n fetch<CreateTableResponse, CreateTableError, undefined, {}, {}, CreateTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}',\n method: 'put',\n ...variables\n });\n\nexport type DeleteTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type DeleteTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type DeleteTableVariables = {\n pathParams: DeleteTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Deletes the table with the given name.\n */\nexport const deleteTable = (variables: DeleteTableVariables) =>\n fetch<undefined, DeleteTableError, undefined, {}, {}, DeleteTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}',\n method: 'delete',\n ...variables\n });\n\nexport type UpdateTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type UpdateTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateTableRequestBody = {\n /*\n * @minLength 1\n */\n name: string;\n};\n\nexport type UpdateTableVariables = {\n body: UpdateTableRequestBody;\n pathParams: UpdateTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Update table. Currently there is only one update operation supported: renaming the table by providing a new name.\n *\n * In the example below, we rename a table from “users” to “people”:\n *\n * ```json\n * // PATCH /db/test:main/tables/users\n *\n * {\n * \"name\": \"people\"\n * }\n * ```\n */\nexport const updateTable = (variables: UpdateTableVariables) =>\n fetch<undefined, UpdateTableError, UpdateTableRequestBody, {}, {}, UpdateTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}',\n method: 'patch',\n ...variables\n });\n\nexport type GetTableSchemaPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type GetTableSchemaError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetTableSchemaResponse = {\n columns: Schemas.Column[];\n};\n\nexport type GetTableSchemaVariables = {\n pathParams: GetTableSchemaPathParams;\n} & FetcherExtraProps;\n\nexport const getTableSchema = (variables: GetTableSchemaVariables) =>\n fetch<GetTableSchemaResponse, GetTableSchemaError, undefined, {}, {}, GetTableSchemaPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/schema',\n method: 'get',\n ...variables\n });\n\nexport type SetTableSchemaPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type SetTableSchemaError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 409;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SetTableSchemaRequestBody = {\n columns: Schemas.Column[];\n};\n\nexport type SetTableSchemaVariables = {\n body: SetTableSchemaRequestBody;\n pathParams: SetTableSchemaPathParams;\n} & FetcherExtraProps;\n\nexport const setTableSchema = (variables: SetTableSchemaVariables) =>\n fetch<undefined, SetTableSchemaError, SetTableSchemaRequestBody, {}, {}, SetTableSchemaPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/schema',\n method: 'put',\n ...variables\n });\n\nexport type GetTableColumnsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type GetTableColumnsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetTableColumnsResponse = {\n columns: Schemas.Column[];\n};\n\nexport type GetTableColumnsVariables = {\n pathParams: GetTableColumnsPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieves the list of table columns and their definition. This endpoint returns the column list with object columns being reported with their\n * full dot-separated path (flattened).\n */\nexport const getTableColumns = (variables: GetTableColumnsVariables) =>\n fetch<GetTableColumnsResponse, GetTableColumnsError, undefined, {}, {}, GetTableColumnsPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns',\n method: 'get',\n ...variables\n });\n\nexport type AddTableColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type AddTableColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type AddTableColumnVariables = {\n body: Schemas.Column;\n pathParams: AddTableColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Adds a new column to the table. The body of the request should contain the column definition. In the column definition, the 'name' field should\n * contain the full path separated by dots. If the parent objects do not exists, they will be automatically created. For example,\n * passing `\"name\": \"address.city\"` will auto-create the `address` object if it doesn't exist.\n */\nexport const addTableColumn = (variables: AddTableColumnVariables) =>\n fetch<Responses.MigrationIdResponse, AddTableColumnError, Schemas.Column, {}, {}, AddTableColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns',\n method: 'post',\n ...variables\n });\n\nexport type GetColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Column name\n */\n columnName: Schemas.ColumnName;\n workspace: string;\n};\n\nexport type GetColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetColumnVariables = {\n pathParams: GetColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Get the definition of a single column. To refer to sub-objects, the column name can contain dots. For example `address.country`.\n */\nexport const getColumn = (variables: GetColumnVariables) =>\n fetch<Schemas.Column, GetColumnError, undefined, {}, {}, GetColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns/{columnName}',\n method: 'get',\n ...variables\n });\n\nexport type DeleteColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Column name\n */\n columnName: Schemas.ColumnName;\n workspace: string;\n};\n\nexport type DeleteColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteColumnVariables = {\n pathParams: DeleteColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Deletes the specified column. To refer to sub-objects, the column name can contain dots. For example `address.country`.\n */\nexport const deleteColumn = (variables: DeleteColumnVariables) =>\n fetch<Responses.MigrationIdResponse, DeleteColumnError, undefined, {}, {}, DeleteColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns/{columnName}',\n method: 'delete',\n ...variables\n });\n\nexport type UpdateColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Column name\n */\n columnName: Schemas.ColumnName;\n workspace: string;\n};\n\nexport type UpdateColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateColumnRequestBody = {\n /*\n * @minLength 1\n */\n name: string;\n};\n\nexport type UpdateColumnVariables = {\n body: UpdateColumnRequestBody;\n pathParams: UpdateColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Update column with partial data. Can be used for renaming the column by providing a new \"name\" field. To refer to sub-objects, the column name can contain dots. For example `address.country`.\n */\nexport const updateColumn = (variables: UpdateColumnVariables) =>\n fetch<Responses.MigrationIdResponse, UpdateColumnError, UpdateColumnRequestBody, {}, {}, UpdateColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns/{columnName}',\n method: 'patch',\n ...variables\n });\n\nexport type InsertRecordPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type InsertRecordQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type InsertRecordError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type InsertRecordVariables = {\n body?: Record<string, any>;\n pathParams: InsertRecordPathParams;\n queryParams?: InsertRecordQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Insert a new Record into the Table\n */\nexport const insertRecord = (variables: InsertRecordVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n InsertRecordError,\n Record<string, any>,\n {},\n InsertRecordQueryParams,\n InsertRecordPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data', method: 'post', ...variables });\n\nexport type InsertRecordWithIDPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type InsertRecordWithIDQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n createOnly?: boolean;\n ifVersion?: number;\n};\n\nexport type InsertRecordWithIDError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type InsertRecordWithIDVariables = {\n body?: Record<string, any>;\n pathParams: InsertRecordWithIDPathParams;\n queryParams?: InsertRecordWithIDQueryParams;\n} & FetcherExtraProps;\n\n/**\n * By default, IDs are auto-generated when data is insterted into Xata. Sending a request to this endpoint allows us to insert a record with a pre-existing ID, bypassing the default automatic ID generation.\n */\nexport const insertRecordWithID = (variables: InsertRecordWithIDVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n InsertRecordWithIDError,\n Record<string, any>,\n {},\n InsertRecordWithIDQueryParams,\n InsertRecordWithIDPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}', method: 'put', ...variables });\n\nexport type UpdateRecordWithIDPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type UpdateRecordWithIDQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n ifVersion?: number;\n};\n\nexport type UpdateRecordWithIDError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateRecordWithIDVariables = {\n body?: Record<string, any>;\n pathParams: UpdateRecordWithIDPathParams;\n queryParams?: UpdateRecordWithIDQueryParams;\n} & FetcherExtraProps;\n\nexport const updateRecordWithID = (variables: UpdateRecordWithIDVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n UpdateRecordWithIDError,\n Record<string, any>,\n {},\n UpdateRecordWithIDQueryParams,\n UpdateRecordWithIDPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}', method: 'patch', ...variables });\n\nexport type UpsertRecordWithIDPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type UpsertRecordWithIDQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n ifVersion?: number;\n};\n\nexport type UpsertRecordWithIDError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpsertRecordWithIDVariables = {\n body?: Record<string, any>;\n pathParams: UpsertRecordWithIDPathParams;\n queryParams?: UpsertRecordWithIDQueryParams;\n} & FetcherExtraProps;\n\nexport const upsertRecordWithID = (variables: UpsertRecordWithIDVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n UpsertRecordWithIDError,\n Record<string, any>,\n {},\n UpsertRecordWithIDQueryParams,\n UpsertRecordWithIDPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}', method: 'post', ...variables });\n\nexport type DeleteRecordPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type DeleteRecordQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type DeleteRecordError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteRecordVariables = {\n pathParams: DeleteRecordPathParams;\n queryParams?: DeleteRecordQueryParams;\n} & FetcherExtraProps;\n\nexport const deleteRecord = (variables: DeleteRecordVariables) =>\n fetch<Responses.RecordResponse, DeleteRecordError, undefined, {}, DeleteRecordQueryParams, DeleteRecordPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}',\n method: 'delete',\n ...variables\n });\n\nexport type GetRecordPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type GetRecordQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type GetRecordError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetRecordVariables = {\n pathParams: GetRecordPathParams;\n queryParams?: GetRecordQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve record by ID\n */\nexport const getRecord = (variables: GetRecordVariables) =>\n fetch<Responses.RecordResponse, GetRecordError, undefined, {}, GetRecordQueryParams, GetRecordPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}',\n method: 'get',\n ...variables\n });\n\nexport type BulkInsertTableRecordsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type BulkInsertTableRecordsQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type BulkInsertTableRecordsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BulkError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type BulkInsertTableRecordsRequestBody = {\n records: Record<string, any>[];\n};\n\nexport type BulkInsertTableRecordsVariables = {\n body: BulkInsertTableRecordsRequestBody;\n pathParams: BulkInsertTableRecordsPathParams;\n queryParams?: BulkInsertTableRecordsQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Bulk insert records\n */\nexport const bulkInsertTableRecords = (variables: BulkInsertTableRecordsVariables) =>\n fetch<\n Responses.BulkInsertResponse,\n BulkInsertTableRecordsError,\n BulkInsertTableRecordsRequestBody,\n {},\n BulkInsertTableRecordsQueryParams,\n BulkInsertTableRecordsPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/bulk', method: 'post', ...variables });\n\nexport type QueryTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type QueryTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type QueryTableRequestBody = {\n filter?: Schemas.FilterExpression;\n sort?: Schemas.SortExpression;\n page?: Schemas.PageConfig;\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type QueryTableVariables = {\n body?: QueryTableRequestBody;\n pathParams: QueryTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * The Query Table API can be used to retrieve all records in a table.\n * The API support filtering, sorting, selecting a subset of columns, and pagination.\n *\n * The overall structure of the request looks like this:\n *\n * ```json\n * // POST /db/<dbname>:<branch>/tables/<table>/query\n * {\n * \"columns\": [...],\n * \"filter\": {\n * \"$all\": [...],\n * \"$any\": [...]\n * ...\n * },\n * \"sort\": {\n * \"multiple\": [...]\n * ...\n * },\n * \"page\": {\n * ...\n * }\n * }\n * ```\n *\n * ### Column selection\n *\n * If the `columns` array is not specified, all columns are included. For link\n * fields, only the ID column of the linked records is included in the response.\n *\n * If the `columns` array is specified, only the selected columns are included.\n * The `*` wildcard can be used to select all columns of the given array\n *\n * For objects and link fields, if the column name of the object is specified, we\n * include all of its sub-keys. If only some sub-keys are specified (via dotted\n * notation, e.g. `\"settings.plan\"` ), then only those sub-keys from the object\n * are included.\n *\n * By the way of example, assuming two tables like this:\n *\n * ```json {\"truncate\": true}\n * {\n * \"formatVersion\": \"1.0\",\n * \"tables\": [\n * {\n * \"name\": \"teams\",\n * \"columns\": [\n * {\n * \"name\": \"name\",\n * \"type\": \"string\"\n * },\n * {\n * \"name\": \"owner\",\n * \"type\": \"link\",\n * \"link\": {\n * \"table\": \"users\"\n * }\n * },\n * {\n * \"name\": \"foundedDate\",\n * \"type\": \"datetime\"\n * },\n * ]\n * },\n * {\n * \"name\": \"users\",\n * \"columns\": [\n * {\n * \"name\": \"email\",\n * \"type\": \"email\"\n * },\n * {\n * \"name\": \"full_name\",\n * \"type\": \"string\"\n * },\n * {\n * \"name\": \"address\",\n * \"type\": \"object\",\n * \"columns\": [\n * {\n * \"name\": \"street\",\n * \"type\": \"string\"\n * },\n * {\n * \"name\": \"number\",\n * \"type\": \"int\"\n * },\n * {\n * \"name\": \"zipcode\",\n * \"type\": \"int\"\n * }\n * ]\n * },\n * {\n * \"name\": \"team\",\n * \"type\": \"link\",\n * \"link\": {\n * \"table\": \"teams\"\n * }\n * }\n * ]\n * }\n * ]\n * }\n * ```\n *\n * A query like this:\n *\n * ```json\n * POST /db/<dbname>:<branch>/tables/<table>/query\n * {\n * \"columns\": [\n * \"name\",\n * \"address.*\"\n * ]\n * }\n * ```\n *\n * returns objects like:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"address\": {\n * \"street\": \"New street\",\n * \"number\": 41,\n * \"zipcode\": 10407\n * }\n * }\n * ```\n *\n * while a query like this:\n *\n * ```json\n * POST /db/<dbname>:<branch>/tables/<table>/query\n * {\n * \"columns\": [\n * \"name\",\n * \"address.street\"\n * ]\n * }\n * ```\n *\n * returns objects like:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"address\": {\n * \"street\": \"New street\"\n * }\n * }\n * ```\n *\n * If you want to return all columns from the main table and selected columns from the linked table, you can do it like this:\n *\n * ```json\n * {\n * \"columns\": [\"*\", \"team.name\"]\n * }\n * ```\n *\n * The `\"*\"` in the above means all columns, including columns of objects. This returns data like:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"email\": \"kilian@gmail.com\",\n * \"address\": {\n * \"street\": \"New street\",\n * \"number\": 41,\n * \"zipcode\": 10407\n * },\n * \"team\": {\n * \"id\": \"XX\",\n * \"xata\": {\n * \"version\": 0\n * },\n * \"name\": \"first team\"\n * }\n * }\n * ```\n *\n * If you want all columns of the linked table, you can do:\n *\n * ```json\n * {\n * \"columns\": [\"*\", \"team.*\"]\n * }\n * ```\n *\n * This returns, for example:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"email\": \"kilian@gmail.com\",\n * \"address\": {\n * \"street\": \"New street\",\n * \"number\": 41,\n * \"zipcode\": 10407\n * },\n * \"team\": {\n * \"id\": \"XX\",\n * \"xata\": {\n * \"version\": 0\n * },\n * \"name\": \"first team\",\n * \"code\": \"A1\",\n * \"foundedDate\": \"2020-03-04T10:43:54.32Z\"\n * }\n * }\n * ```\n *\n * ### Filtering\n *\n * There are two types of operators:\n *\n * - Operators that work on a single column: `$is`, `$contains`, `$pattern`,\n * `$includes`, `$gt`, etc.\n * - Control operators that combine multiple conditions: `$any`, `$all`, `$not` ,\n * `$none`, etc.\n *\n * All operators start with an `$` to differentiate them from column names\n * (which are not allowed to start with a dollar sign).\n *\n * #### Exact matching and control operators\n *\n * Filter by one column:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": \"value\"\n * }\n * }\n * ```\n *\n * This is equivalent to using the `$is` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$is\": \"value\"\n * }\n * }\n * }\n * ```\n *\n * For example:\n *\n * ```json\n * {\n * \"filter\": {\n * \"name\": \"r2\"\n * }\n * }\n * ```\n *\n * Or:\n *\n * ```json\n * {\n * \"filter\": {\n * \"name\": {\n * \"$is\": \"r2\"\n * }\n * }\n * }\n * ```\n *\n * For objects, both dots and nested versions work:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.plan\": \"free\"\n * }\n * }\n * ```\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings\": {\n * \"plan\": \"free\"\n * }\n * }\n * }\n * ```\n *\n * If you want to OR together multiple values, you can use the `$any` operator with an array of values:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.plan\": { \"$any\": [\"free\", \"paid\"] }\n * }\n * }\n * ```\n *\n * If you specify multiple columns in the same filter, they are logically AND'ed together:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.dark\": true,\n * \"settings.plan\": \"free\"\n * }\n * }\n * ```\n *\n * The above matches if both conditions are met.\n *\n * To be more explicit about it, you can use `$all` or `$any`:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$any\": {\n * \"settings.dark\": true,\n * \"settings.plan\": \"free\"\n * }\n * }\n * }\n * ```\n *\n * The `$all` and `$any` operators can also receive an array of objects, which allows for repeating column names:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$any\": [\n * {\n * \"name\": \"r1\"\n * },\n * {\n * \"name\": \"r2\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * You can check for a value being not-null with `$exists`:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$exists\": \"settings\"\n * }\n * }\n * ```\n *\n * This can be combined with `$all` or `$any` :\n *\n * ```json\n * {\n * \"filter\": {\n * \"$all\": [\n * {\n * \"$exists\": \"settings\"\n * },\n * {\n * \"$exists\": \"name\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * Or you can use the inverse operator `$notExists`:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$notExists\": \"settings\"\n * }\n * }\n * ```\n *\n * #### Partial match\n *\n * `$contains` is the simplest operator for partial matching. We should generally\n * discourage overusing `$contains` because it typically can't make use of\n * indices.\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$contains\": \"value\"\n * }\n * }\n * }\n * ```\n *\n * Wildcards are supported via the `$pattern` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$pattern\": \"v*alu?\"\n * }\n * }\n * }\n * ```\n *\n * The `$pattern` operator accepts two wildcard characters:\n * * `*` matches zero or more characters\n * * `?` matches exactly one character\n *\n * If you want to match a string that contains a wildcard character, you can escape them using a backslash (`\\`). You can escape a backslash by usign another backslash.\n *\n * We could also have `$endsWith` and `$startsWith` operators:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$endsWith\": \".gz\"\n * },\n * \"<column_name>\": {\n * \"$startsWith\": \"tmp-\"\n * }\n * }\n * }\n * ```\n *\n * #### Numeric or datetime ranges\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$ge\": 0,\n * \"$lt\": 100\n * }\n * }\n * }\n * ```\n * Date ranges support the same operators, with the date using the format defined in\n * [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339):\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$gt\": \"2019-10-12T07:20:50.52Z\",\n * \"$lt\": \"2021-10-12T07:20:50.52Z\"\n * }\n * }\n * }\n * ```\n * The supported operators are `$gt`, `$lt`, `$ge`, `$le`.\n *\n * #### Negations\n *\n * A general `$not` operator can inverse any operation.\n *\n * ```json\n * {\n * \"filter\": {\n * \"$not\": {\n * \"<column_name1>\": \"value1\",\n * \"<column_name2>\": \"value1\"\n * }\n * }\n * }\n * ```\n *\n * Note: in the above the two condition are AND together, so this does (NOT ( ...\n * AND ...))\n *\n * Or more complex:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$not\": {\n * \"$any\": [\n * {\n * \"<column_name1>\": \"value1\"\n * },\n * {\n * \"$all\": [\n * {\n * \"<column_name2>\": \"value2\"\n * },\n * {\n * \"<column_name3>\": \"value3\"\n * }\n * ]\n * }\n * ]\n * }\n * }\n * }\n * ```\n *\n * The `$not: { $any: {}}` can be shorted using the `$none` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$none\": {\n * \"<column_name1>\": \"value1\",\n * \"<column_name2>\": \"value1\"\n * }\n * }\n * }\n * ```\n *\n * In addition, you can use operators like `$isNot` or `$notExists` to simplify expressions:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$isNot\": \"2019-10-12T07:20:50.52Z\"\n * }\n * }\n * }\n * ```\n *\n * #### Working with arrays\n *\n * To test that an array contains a value, use `$includes`.\n *\n * ```json\n * {\n * \"filter\": {\n * \"<array_name>\": {\n * \"$includes\": \"value\"\n * }\n * }\n * }\n * ```\n *\n * The `$includes` operator accepts a custom predicate that will check if any\n * array values matches the predicate. For example a complex predicate can include\n * the `$all` , `$contains` and `$endsWith` operators:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<array name>\": {\n * \"$includes\": {\n * \"$all\": [\n * { \"$contains\": \"label\" },\n * { \"$not\": { \"$endsWith\": \"-debug\" } }\n * ]\n * }\n * }\n * }\n * }\n * ```\n *\n * The `$includes` all operator succeeds if any column in the array matches the\n * predicate. The `$includesAll` operator succeeds if all array items match the\n * predicate. The `$includesNone` operator succeeds if no array item matches the\n * predicate. The `$includes` operator is a synonym for the `$includesAny`\n * operator.\n *\n * Here is an example of using the `$includesAll` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.labels\": {\n * \"$includesAll\": [{ \"$contains\": \"label\" }]\n * }\n * }\n * }\n * ```\n *\n * The above matches if all label values contain the string \"labels\".\n *\n * ### Sorting\n *\n * Sorting by one element:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"sort\": {\n * \"index\": \"asc\"\n * }\n * }\n * ```\n *\n * or descendently:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"sort\": {\n * \"index\": \"desc\"\n * }\n * }\n * ```\n *\n * Sorting by multiple fields:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"sort\": [\n * {\n * \"index\": \"desc\"\n * },\n * {\n * \"createdAt\": \"desc\"\n * }\n * ]\n * }\n * ```\n *\n * ### Pagination\n *\n * We offer cursor pagination and offset pagination. The offset pagination is limited\n * in the amount of data it can retrieve, so we recommend the cursor pagination if you have more than 1000 records.\n *\n * Example of size + offset pagination:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"page\": {\n * \"size\": 100,\n * \"offset\": 200\n * }\n * }\n * ```\n *\n * The `page.size` parameter represents the maximum number of records returned by this query. It has a default value of 20 and a maximum value of 200.\n * The `page.offset` parameter represents the number of matching records to skip. It has a default value of 0 and a maximum value of 800.\n *\n * Example of cursor pagination:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"page\": {\n * \"after\":\"fMoxCsIwFIDh3WP8c4amDai5hO5SJCRNfaVSeC9b6d1FD\"\n * }\n * }\n * ```\n *\n * In the above example, the value of the `page.after` parameter is the cursor returned by the previous query. A sample response is shown below:\n *\n * ```json\n * {\n * \"meta\": {\n * \"page\": {\n * \"cursor\": \"fMoxCsIwFIDh3WP8c4amDai5hO5SJCRNfaVSeC9b6d1FD\",\n * \"more\": true\n * }\n * },\n * \"records\": [...]\n * }\n * ```\n *\n * The `page` object might contain the follow keys, in addition to `size` and `offset` that were introduced before:\n *\n * - `after`: Return the next page 'after' the current cursor\n * - `before`: Return the previous page 'before' the current cursor.\n * - `first`: Return the first page in the table from a cursor.\n * - `last`: Return the last N records in the table from a cursor, where N is the `page.size` parameter.\n *\n * The request will fail if an invalid cursor value is given to `page.before`,\n * `page.after`, `page.first` , or `page.last`. No other cursor setting can be\n * used if `page.first` or `page.last` is set in a query.\n *\n * If both `page.before` and `page.after` parameters are present we treat the\n * request as a range query. The range query will return all entries after\n * `page.after`, but before `page.before`, up to `page.size` or the maximum\n * page size. This query requires both cursors to use the same filters and sort\n * settings, plus we require `page.after < page.before`. The range query returns\n * a new cursor. If the range encompass multiple pages the next page in the range\n * can be queried by update `page.after` to the returned cursor while keeping the\n * `page.before` cursor from the first range query.\n *\n * The `filter` , `columns`, `sort` , and `page.size` configuration will be\n * encoded with the cursor. The pagination request will be invalid if\n * `filter` or `sort` is set. The columns returned and page size can be changed\n * anytime by passing the `columns` or `page.size` settings to the next query.\n *\n * **Special cursors:**\n *\n * - `page.after=end`: Result points past the last entry. The list of records\n * returned is empty, but `page.meta.cursor` will include a cursor that can be\n * used to \"tail\" the table from the end waiting for new data to be inserted.\n * - `page.before=end`: This cursor returns the last page.\n * - `page.first=<cursor>`: Go to first page. This is equivalent to querying the\n * first page without a cursor but `filter` and `sort` . Yet the `page.first`\n * cursor can be convenient at times as user code does not need to remember the\n * filter, sort, columns or page size configuration. All these information are\n * read from the cursor.\n * - `page.last=<cursor>`: Go to the end of the table. This is equivalent to querying the\n * last page with `page.before=end`, `filter`, and `sort` . Yet the\n * `page.last` cursor can be more convenient at times as user code does not\n * need to remember the filter, sort, columns or page size configuration. All\n * these information are read from the cursor.\n *\n * When using special cursors like `page.after=\"end\"` or `page.before=\"end\"`, we\n * still allow `filter` and `sort` to be set.\n *\n * Example of getting the last page:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"page\": {\n * \"size\": 10,\n * \"before\": \"end\"\n * }\n * }\n * ```\n */\nexport const queryTable = (variables: QueryTableVariables) =>\n fetch<Responses.QueryResponse, QueryTableError, QueryTableRequestBody, {}, {}, QueryTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/query',\n method: 'post',\n ...variables\n });\n\nexport type SearchTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type SearchTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SearchTableRequestBody = {\n /*\n * The query string.\n *\n * @minLength 1\n */\n query: string;\n fuzziness?: Schemas.FuzzinessExpression;\n prefix?: Schemas.PrefixExpression;\n filter?: Schemas.FilterExpression;\n highlight?: Schemas.HighlightExpression;\n boosters?: Schemas.BoosterExpression[];\n};\n\nexport type SearchTableVariables = {\n body: SearchTableRequestBody;\n pathParams: SearchTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Run a free text search operation in a particular table.\n *\n * The endpoint accepts a `query` parameter that is used for the free text search and a set of structured filters (via the `filter` parameter) that are applied before the search. The `filter` parameter uses the same syntax as the [query endpoint](/api-reference/db/db_branch_name/tables/table_name/) with the following exceptions:\n * * filters `$contains`, `$startsWith`, `$endsWith` don't work on columns of type `text`\n * * filtering on columns of type `multiple` is currently unsupported\n */\nexport const searchTable = (variables: SearchTableVariables) =>\n fetch<Responses.SearchResponse, SearchTableError, SearchTableRequestBody, {}, {}, SearchTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/search',\n method: 'post',\n ...variables\n });\n\nexport type SearchBranchPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type SearchBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SearchBranchRequestBody = {\n /*\n * An array with the tables in which to search. By default, all tables are included. Optionally, filters can be included that apply to each table.\n */\n tables?: (\n | string\n | {\n /*\n * The name of the table.\n */\n table: string;\n filter?: Schemas.FilterExpression;\n boosters?: Schemas.BoosterExpression[];\n }\n )[];\n /*\n * The query string.\n *\n * @minLength 1\n */\n query: string;\n fuzziness?: Schemas.FuzzinessExpression;\n highlight?: Schemas.HighlightExpression;\n};\n\nexport type SearchBranchVariables = {\n body: SearchBranchRequestBody;\n pathParams: SearchBranchPathParams;\n} & FetcherExtraProps;\n\n/**\n * Run a free text search operation across the database branch.\n */\nexport const searchBranch = (variables: SearchBranchVariables) =>\n fetch<Responses.SearchResponse, SearchBranchError, SearchBranchRequestBody, {}, {}, SearchBranchPathParams>({\n url: '/db/{dbBranchName}/search',\n method: 'post',\n ...variables\n });\n\nexport const operationsByTag = {\n users: { getUser, updateUser, deleteUser, getUserAPIKeys, createUserAPIKey, deleteUserAPIKey },\n workspaces: {\n createWorkspace,\n getWorkspacesList,\n getWorkspace,\n updateWorkspace,\n deleteWorkspace,\n getWorkspaceMembersList,\n updateWorkspaceMemberRole,\n removeWorkspaceMember,\n inviteWorkspaceMember,\n updateWorkspaceMemberInvite,\n cancelWorkspaceMemberInvite,\n resendWorkspaceMemberInvite,\n acceptWorkspaceMemberInvite\n },\n database: {\n getDatabaseList,\n createDatabase,\n deleteDatabase,\n getDatabaseMetadata,\n getGitBranchesMapping,\n addGitBranchesEntry,\n removeGitBranchesEntry,\n resolveBranch\n },\n branch: {\n getBranchList,\n getBranchDetails,\n createBranch,\n deleteBranch,\n updateBranchMetadata,\n getBranchMetadata,\n getBranchMigrationHistory,\n executeBranchMigrationPlan,\n getBranchMigrationPlan,\n getBranchStats\n },\n table: {\n createTable,\n deleteTable,\n updateTable,\n getTableSchema,\n setTableSchema,\n getTableColumns,\n addTableColumn,\n getColumn,\n deleteColumn,\n updateColumn\n },\n records: {\n insertRecord,\n insertRecordWithID,\n updateRecordWithID,\n upsertRecordWithID,\n deleteRecord,\n getRecord,\n bulkInsertTableRecords,\n queryTable,\n searchTable,\n searchBranch\n }\n};\n","import { isObject, isString } from '../util/lang';\n\ntype HostAliases = 'production' | 'staging';\ntype ProviderBuilder = { main: string; workspaces: string };\nexport type HostProvider = HostAliases | ProviderBuilder;\n\nexport function getHostUrl(provider: HostProvider, type: keyof ProviderBuilder): string {\n if (isValidAlias(provider)) {\n return providers[provider][type];\n } else if (isValidBuilder(provider)) {\n return provider[type];\n }\n\n throw new Error('Invalid API provider');\n}\n\nconst providers: Record<HostAliases, ProviderBuilder> = {\n production: {\n main: 'https://api.xata.io',\n workspaces: 'https://{workspaceId}.xata.sh'\n },\n staging: {\n main: 'https://staging.xatabase.co',\n workspaces: 'https://{workspaceId}.staging.xatabase.co'\n }\n};\n\nfunction isValidAlias(alias: HostProvider): alias is HostAliases {\n return isString(alias) && Object.keys(providers).includes(alias);\n}\n\nfunction isValidBuilder(builder: HostProvider): builder is ProviderBuilder {\n return isObject(builder) && isString(builder.main) && isString(builder.workspaces);\n}\n","import { defaultTrace, TraceFunction } from '../schema/tracing';\nimport { getAPIKey } from '../util/apiKey';\nimport { getFetchImplementation } from '../util/fetch';\nimport { isString } from '../util/lang';\nimport type * as Types from './components';\nimport { operationsByTag } from './components';\nimport type { FetcherExtraProps, FetchImpl } from './fetcher';\nimport { HostProvider, getHostUrl } from './providers';\nimport type * as Responses from './responses';\nimport type * as Schemas from './schemas';\n\nexport interface XataApiClientOptions {\n fetch?: FetchImpl;\n apiKey?: string;\n host?: HostProvider;\n trace?: TraceFunction;\n}\n\nexport class XataApiClient {\n #extraProps: FetcherExtraProps;\n #namespaces: Partial<{\n user: UserApi;\n workspaces: WorkspaceApi;\n databases: DatabaseApi;\n branches: BranchApi;\n tables: TableApi;\n records: RecordsApi;\n }> = {};\n\n constructor(options: XataApiClientOptions = {}) {\n const provider = options.host ?? 'production';\n const apiKey = options.apiKey ?? getAPIKey();\n const trace = options.trace ?? defaultTrace;\n\n if (!apiKey) {\n throw new Error('Could not resolve a valid apiKey');\n }\n\n this.#extraProps = {\n apiUrl: getHostUrl(provider, 'main'),\n workspacesApiUrl: getHostUrl(provider, 'workspaces'),\n fetchImpl: getFetchImplementation(options.fetch),\n apiKey,\n trace\n };\n }\n\n public get user() {\n if (!this.#namespaces.user) this.#namespaces.user = new UserApi(this.#extraProps);\n return this.#namespaces.user;\n }\n\n public get workspaces() {\n if (!this.#namespaces.workspaces) this.#namespaces.workspaces = new WorkspaceApi(this.#extraProps);\n return this.#namespaces.workspaces;\n }\n\n public get databases() {\n if (!this.#namespaces.databases) this.#namespaces.databases = new DatabaseApi(this.#extraProps);\n return this.#namespaces.databases;\n }\n\n public get branches() {\n if (!this.#namespaces.branches) this.#namespaces.branches = new BranchApi(this.#extraProps);\n return this.#namespaces.branches;\n }\n\n public get tables() {\n if (!this.#namespaces.tables) this.#namespaces.tables = new TableApi(this.#extraProps);\n return this.#namespaces.tables;\n }\n\n public get records() {\n if (!this.#namespaces.records) this.#namespaces.records = new RecordsApi(this.#extraProps);\n return this.#namespaces.records;\n }\n}\n\nclass UserApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getUser(): Promise<Schemas.UserWithID> {\n return operationsByTag.users.getUser({ ...this.extraProps });\n }\n\n public updateUser(user: Schemas.User): Promise<Schemas.UserWithID> {\n return operationsByTag.users.updateUser({ body: user, ...this.extraProps });\n }\n\n public deleteUser(): Promise<void> {\n return operationsByTag.users.deleteUser({ ...this.extraProps });\n }\n\n public getUserAPIKeys(): Promise<Types.GetUserAPIKeysResponse> {\n return operationsByTag.users.getUserAPIKeys({ ...this.extraProps });\n }\n\n public createUserAPIKey(keyName: Schemas.APIKeyName): Promise<Types.CreateUserAPIKeyResponse> {\n return operationsByTag.users.createUserAPIKey({\n pathParams: { keyName },\n ...this.extraProps\n });\n }\n\n public deleteUserAPIKey(keyName: Schemas.APIKeyName): Promise<void> {\n return operationsByTag.users.deleteUserAPIKey({\n pathParams: { keyName },\n ...this.extraProps\n });\n }\n}\n\nclass WorkspaceApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public createWorkspace(workspaceMeta: Schemas.WorkspaceMeta): Promise<Schemas.Workspace> {\n return operationsByTag.workspaces.createWorkspace({\n body: workspaceMeta,\n ...this.extraProps\n });\n }\n\n public getWorkspacesList(): Promise<Types.GetWorkspacesListResponse> {\n return operationsByTag.workspaces.getWorkspacesList({ ...this.extraProps });\n }\n\n public getWorkspace(workspaceId: Schemas.WorkspaceID): Promise<Schemas.Workspace> {\n return operationsByTag.workspaces.getWorkspace({\n pathParams: { workspaceId },\n ...this.extraProps\n });\n }\n\n public updateWorkspace(\n workspaceId: Schemas.WorkspaceID,\n workspaceMeta: Schemas.WorkspaceMeta\n ): Promise<Schemas.Workspace> {\n return operationsByTag.workspaces.updateWorkspace({\n pathParams: { workspaceId },\n body: workspaceMeta,\n ...this.extraProps\n });\n }\n\n public deleteWorkspace(workspaceId: Schemas.WorkspaceID): Promise<void> {\n return operationsByTag.workspaces.deleteWorkspace({\n pathParams: { workspaceId },\n ...this.extraProps\n });\n }\n\n public getWorkspaceMembersList(workspaceId: Schemas.WorkspaceID): Promise<Schemas.WorkspaceMembers> {\n return operationsByTag.workspaces.getWorkspaceMembersList({\n pathParams: { workspaceId },\n ...this.extraProps\n });\n }\n\n public updateWorkspaceMemberRole(\n workspaceId: Schemas.WorkspaceID,\n userId: Schemas.UserID,\n role: Schemas.Role\n ): Promise<void> {\n return operationsByTag.workspaces.updateWorkspaceMemberRole({\n pathParams: { workspaceId, userId },\n body: { role },\n ...this.extraProps\n });\n }\n\n public removeWorkspaceMember(workspaceId: Schemas.WorkspaceID, userId: Schemas.UserID): Promise<void> {\n return operationsByTag.workspaces.removeWorkspaceMember({\n pathParams: { workspaceId, userId },\n ...this.extraProps\n });\n }\n\n public inviteWorkspaceMember(\n workspaceId: Schemas.WorkspaceID,\n email: string,\n role: Schemas.Role\n ): Promise<Schemas.WorkspaceInvite> {\n return operationsByTag.workspaces.inviteWorkspaceMember({\n pathParams: { workspaceId },\n body: { email, role },\n ...this.extraProps\n });\n }\n\n public updateWorkspaceMemberInvite(\n workspaceId: Schemas.WorkspaceID,\n inviteId: Schemas.InviteID,\n role: Schemas.Role\n ): Promise<Schemas.WorkspaceInvite> {\n return operationsByTag.workspaces.updateWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteId },\n body: { role },\n ...this.extraProps\n });\n }\n\n public cancelWorkspaceMemberInvite(workspaceId: Schemas.WorkspaceID, inviteId: Schemas.InviteID): Promise<void> {\n return operationsByTag.workspaces.cancelWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteId },\n ...this.extraProps\n });\n }\n\n public resendWorkspaceMemberInvite(workspaceId: Schemas.WorkspaceID, inviteId: Schemas.InviteID): Promise<void> {\n return operationsByTag.workspaces.resendWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteId },\n ...this.extraProps\n });\n }\n\n public acceptWorkspaceMemberInvite(workspaceId: Schemas.WorkspaceID, inviteKey: Schemas.InviteKey): Promise<void> {\n return operationsByTag.workspaces.acceptWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteKey },\n ...this.extraProps\n });\n }\n}\n\nclass DatabaseApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getDatabaseList(workspace: Schemas.WorkspaceID): Promise<Schemas.ListDatabasesResponse> {\n return operationsByTag.database.getDatabaseList({\n pathParams: { workspace },\n ...this.extraProps\n });\n }\n\n public createDatabase(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n options: Types.CreateDatabaseRequestBody = {}\n ): Promise<Types.CreateDatabaseResponse> {\n return operationsByTag.database.createDatabase({\n pathParams: { workspace, dbName },\n body: options,\n ...this.extraProps\n });\n }\n\n public deleteDatabase(workspace: Schemas.WorkspaceID, dbName: Schemas.DBName): Promise<void> {\n return operationsByTag.database.deleteDatabase({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public getDatabaseMetadata(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName\n ): Promise<Schemas.DatabaseMetadata> {\n return operationsByTag.database.getDatabaseMetadata({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public getGitBranchesMapping(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName\n ): Promise<Schemas.ListGitBranchesResponse> {\n return operationsByTag.database.getGitBranchesMapping({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public addGitBranchesEntry(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n body: Types.AddGitBranchesEntryRequestBody\n ): Promise<Types.AddGitBranchesEntryResponse> {\n return operationsByTag.database.addGitBranchesEntry({\n pathParams: { workspace, dbName },\n body,\n ...this.extraProps\n });\n }\n\n public removeGitBranchesEntry(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n gitBranch: string\n ): Promise<void> {\n return operationsByTag.database.removeGitBranchesEntry({\n pathParams: { workspace, dbName },\n queryParams: { gitBranch },\n ...this.extraProps\n });\n }\n\n public resolveBranch(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n gitBranch?: string,\n fallbackBranch?: string\n ): Promise<Types.ResolveBranchResponse> {\n return operationsByTag.database.resolveBranch({\n pathParams: { workspace, dbName },\n queryParams: { gitBranch, fallbackBranch },\n ...this.extraProps\n });\n }\n}\n\nclass BranchApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getBranchList(workspace: Schemas.WorkspaceID, dbName: Schemas.DBName): Promise<Schemas.ListBranchesResponse> {\n return operationsByTag.branch.getBranchList({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public getBranchDetails(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<Schemas.DBBranch> {\n return operationsByTag.branch.getBranchDetails({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n\n public createBranch(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n from?: string,\n options: Types.CreateBranchRequestBody = {}\n ): Promise<Types.CreateBranchResponse> {\n return operationsByTag.branch.createBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n queryParams: isString(from) ? { from } : undefined,\n body: options,\n ...this.extraProps\n });\n }\n\n public deleteBranch(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<void> {\n return operationsByTag.branch.deleteBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n\n public updateBranchMetadata(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n metadata: Schemas.BranchMetadata = {}\n ): Promise<void> {\n return operationsByTag.branch.updateBranchMetadata({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: metadata,\n ...this.extraProps\n });\n }\n\n public getBranchMetadata(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<Schemas.BranchMetadata> {\n return operationsByTag.branch.getBranchMetadata({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n\n public getBranchMigrationHistory(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n options: Types.GetBranchMigrationHistoryRequestBody = {}\n ): Promise<Types.GetBranchMigrationHistoryResponse> {\n return operationsByTag.branch.getBranchMigrationHistory({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: options,\n ...this.extraProps\n });\n }\n\n public executeBranchMigrationPlan(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n migrationPlan: Types.ExecuteBranchMigrationPlanRequestBody\n ): Promise<void> {\n return operationsByTag.branch.executeBranchMigrationPlan({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: migrationPlan,\n ...this.extraProps\n });\n }\n\n public getBranchMigrationPlan(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n schema: Schemas.Schema\n ): Promise<Responses.BranchMigrationPlan> {\n return operationsByTag.branch.getBranchMigrationPlan({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: schema,\n ...this.extraProps\n });\n }\n\n public getBranchStats(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<Types.GetBranchStatsResponse> {\n return operationsByTag.branch.getBranchStats({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n}\n\nclass TableApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public createTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<Types.CreateTableResponse> {\n return operationsByTag.table.createTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public deleteTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<void> {\n return operationsByTag.table.deleteTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public updateTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n options: Types.UpdateTableRequestBody\n ): Promise<void> {\n return operationsByTag.table.updateTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: options,\n ...this.extraProps\n });\n }\n\n public getTableSchema(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<Types.GetTableSchemaResponse> {\n return operationsByTag.table.getTableSchema({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public setTableSchema(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n options: Types.SetTableSchemaRequestBody\n ): Promise<void> {\n return operationsByTag.table.setTableSchema({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: options,\n ...this.extraProps\n });\n }\n\n public getTableColumns(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<Types.GetTableColumnsResponse> {\n return operationsByTag.table.getTableColumns({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public addTableColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n column: Schemas.Column\n ): Promise<Responses.MigrationIdResponse> {\n return operationsByTag.table.addTableColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: column,\n ...this.extraProps\n });\n }\n\n public getColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n columnName: Schemas.ColumnName\n ): Promise<Schemas.Column> {\n return operationsByTag.table.getColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },\n ...this.extraProps\n });\n }\n\n public deleteColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n columnName: Schemas.ColumnName\n ): Promise<Responses.MigrationIdResponse> {\n return operationsByTag.table.deleteColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },\n ...this.extraProps\n });\n }\n\n public updateColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n columnName: Schemas.ColumnName,\n options: Types.UpdateColumnRequestBody\n ): Promise<Responses.MigrationIdResponse> {\n return operationsByTag.table.updateColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },\n body: options,\n ...this.extraProps\n });\n }\n}\n\nclass RecordsApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public insertRecord(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n record: Record<string, any>,\n options: Types.InsertRecordQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.insertRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public insertRecordWithID(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n record: Record<string, any>,\n options: Types.InsertRecordWithIDQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.insertRecordWithID({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public updateRecordWithID(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n record: Record<string, any>,\n options: Types.UpdateRecordWithIDQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.updateRecordWithID({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public upsertRecordWithID(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n record: Record<string, any>,\n options: Types.UpsertRecordWithIDQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.upsertRecordWithID({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public deleteRecord(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n options: Types.DeleteRecordQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.deleteRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n ...this.extraProps\n });\n }\n\n public getRecord(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n options: Types.GetRecordQueryParams = {}\n ): Promise<Schemas.XataRecord> {\n return operationsByTag.records.getRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n ...this.extraProps\n });\n }\n\n public bulkInsertTableRecords(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n records: Record<string, any>[],\n options: Types.BulkInsertTableRecordsQueryParams = {}\n ): Promise<Responses.BulkInsertResponse> {\n return operationsByTag.records.bulkInsertTableRecords({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n queryParams: options,\n body: { records },\n ...this.extraProps\n });\n }\n\n public queryTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n query: Types.QueryTableRequestBody\n ): Promise<Responses.QueryResponse> {\n return operationsByTag.records.queryTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: query,\n ...this.extraProps\n });\n }\n\n public searchTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n query: Types.SearchTableRequestBody\n ): Promise<Responses.SearchResponse> {\n return operationsByTag.records.searchTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: query,\n ...this.extraProps\n });\n }\n\n public searchBranch(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n query: Types.SearchBranchRequestBody\n ): Promise<Responses.SearchResponse> {\n return operationsByTag.records.searchBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: query,\n ...this.extraProps\n });\n }\n}\n","import { XataPlugin, XataPluginOptions } from '../plugins';\nimport { XataApiClient } from './client';\nimport { operationsByTag } from './components';\nimport type * as Responses from './responses';\nimport type * as Schemas from './schemas';\n\nexport * from './client';\nexport * from './components';\nexport type { FetcherExtraProps, FetchImpl } from './fetcher';\nexport { operationsByTag as Operations };\nexport type { Responses, Schemas };\n\nexport class XataApiPlugin implements XataPlugin {\n async build(options: XataPluginOptions) {\n const { fetchImpl, apiKey } = await options.getFetchProps();\n return new XataApiClient({ fetch: fetchImpl, apiKey });\n }\n}\n","import { FetcherExtraProps } from './api/fetcher';\nimport { CacheImpl } from './schema/cache';\nimport { TraceFunction } from './schema/tracing';\n\nexport abstract class XataPlugin {\n abstract build(options: XataPluginOptions): unknown | Promise<unknown>;\n}\n\nexport type XataPluginOptions = {\n getFetchProps: () => Promise<FetcherExtraProps>;\n cache: CacheImpl;\n trace?: TraceFunction;\n};\n","import { isDefined, isObject } from '../util/lang';\nimport { Query } from './query';\nimport { XataRecord } from './record';\n\nexport type PaginationQueryMeta = { page: { cursor: string; more: boolean } };\n\nexport interface Paginable<Record extends XataRecord, Result extends XataRecord = Record> {\n meta: PaginationQueryMeta;\n records: RecordArray<Result>;\n\n nextPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n previousPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n firstPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n lastPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n\n hasNextPage(): boolean;\n}\n\n/**\n * A Page contains a set of results from a query plus metadata about the retrieved\n * set of values such as the cursor, required to retrieve additional records.\n */\nexport class Page<Record extends XataRecord, Result extends XataRecord = Record> implements Paginable<Record, Result> {\n #query: Query<Record, Result>;\n /**\n * Page metadata, required to retrieve additional records.\n */\n readonly meta: PaginationQueryMeta;\n /**\n * The set of results for this page.\n */\n readonly records: RecordArray<Result>;\n\n constructor(query: Query<Record, Result>, meta: PaginationQueryMeta, records: Result[] = []) {\n this.#query = query;\n this.meta = meta;\n this.records = new RecordArray(this, records);\n }\n\n /**\n * Retrieves the next page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The next page or results.\n */\n async nextPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });\n }\n\n /**\n * Retrieves the previous page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The previous page or results.\n */\n async previousPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, before: this.meta.page.cursor } });\n }\n\n /**\n * Retrieves the first page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The first page or results.\n */\n async firstPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, first: this.meta.page.cursor } });\n }\n\n /**\n * Retrieves the last page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The last page or results.\n */\n async lastPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, last: this.meta.page.cursor } });\n }\n\n /**\n * Shortcut method to check if there will be additional results if the next page of results is retrieved.\n * @returns Whether or not there will be additional results in the next page of results.\n */\n hasNextPage(): boolean {\n return this.meta.page.more;\n }\n}\n\nexport type CursorNavigationOptions = { first?: string } | { last?: string } | { after?: string; before?: string };\nexport type OffsetNavigationOptions = { size?: number; offset?: number };\n\nexport const PAGINATION_MAX_SIZE = 200;\nexport const PAGINATION_DEFAULT_SIZE = 20;\nexport const PAGINATION_MAX_OFFSET = 800;\nexport const PAGINATION_DEFAULT_OFFSET = 0;\n\nexport function isCursorPaginationOptions(\n options: Record<string, unknown> | undefined | null\n): options is CursorNavigationOptions {\n return (\n isDefined(options) &&\n (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before))\n );\n}\n\nexport class RecordArray<Result extends XataRecord> extends Array<Result> {\n #page: Paginable<Result, Result>;\n\n constructor(page: Paginable<any, Result>, overrideRecords?: Result[]);\n constructor(...args: any[]) {\n super(...RecordArray.parseConstructorParams(...args));\n\n // In the case of serialization/deserialization, the page might be lost\n this.#page = isObject(args[0]?.meta) ? args[0] : { meta: { page: { cursor: '', more: false } }, records: [] };\n }\n\n static parseConstructorParams(...args: any[]) {\n // new <T>(arrayLength: number): T[]\n if (args.length === 1 && typeof args[0] === 'number') {\n return new Array(args[0]);\n }\n\n // new RecordArray<T>(page: Page, overrideRecords: Array | undefined): T[>]\n if (args.length <= 2 && isObject(args[0]?.meta) && Array.isArray(args[1] ?? [])) {\n const result = args[1] ?? args[0].records ?? [];\n return new Array(...result);\n }\n\n // <T>(...items: T[]): T[]\n return new Array(...args);\n }\n\n toArray(): Result[] {\n return new Array(...this);\n }\n\n map<U>(callbackfn: (value: Result, index: number, array: Result[]) => U, thisArg?: any): U[] {\n return this.toArray().map(callbackfn, thisArg);\n }\n\n /**\n * Retrieve next page of records\n *\n * @returns A new array of objects\n */\n async nextPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.nextPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * Retrieve previous page of records\n *\n * @returns A new array of objects\n */\n async previousPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.previousPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * Retrieve first page of records\n *\n * @returns A new array of objects\n */\n async firstPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.firstPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * Retrieve last page of records\n *\n * @returns A new array of objects\n */\n async lastPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.lastPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * @returns Boolean indicating if there is a next page\n */\n hasNextPage(): boolean {\n return this.#page.meta.page.more;\n }\n}\n","import { FilterExpression } from '../api/schemas';\nimport { compact, toBase64 } from '../util/lang';\nimport { OmitBy, RequiredBy } from '../util/types';\nimport { Filter } from './filters';\nimport {\n CursorNavigationOptions,\n isCursorPaginationOptions,\n OffsetNavigationOptions,\n Page,\n Paginable,\n PaginationQueryMeta,\n PAGINATION_MAX_SIZE,\n RecordArray\n} from './pagination';\nimport { XataRecord } from './record';\nimport { Repository } from './repository';\nimport { SelectableColumn, SelectedPick, ValueAtColumn } from './selection';\nimport { SortDirection, SortFilter } from './sorting';\n\ntype BaseOptions<T extends XataRecord> = {\n columns?: SelectableColumn<T>[];\n cache?: number;\n};\n\ntype CursorQueryOptions = {\n pagination?: CursorNavigationOptions & OffsetNavigationOptions;\n filter?: never;\n sort?: never;\n};\n\ntype OffsetQueryOptions<T extends XataRecord> = {\n pagination?: OffsetNavigationOptions;\n filter?: FilterExpression;\n sort?: SortFilter<T> | SortFilter<T>[];\n};\n\nexport type QueryOptions<T extends XataRecord> = BaseOptions<T> & (CursorQueryOptions | OffsetQueryOptions<T>);\n\n/**\n * Query objects contain the information of all filters, sorting, etc. to be included in the database query.\n *\n * Query objects are immutable. Any method that adds more constraints or options to the query will return\n * a new Query object containing the both the previous and the new constraints and options.\n */\nexport class Query<Record extends XataRecord, Result extends XataRecord = Record> implements Paginable<Record, Result> {\n #table: string;\n #repository: Repository<Record>;\n #data: QueryOptions<Record> = { filter: {} };\n\n // Implements pagination\n readonly meta: PaginationQueryMeta = { page: { cursor: 'start', more: true } };\n readonly records: RecordArray<Result> = new RecordArray<Result>(this, []);\n\n constructor(\n repository: Repository<Record> | null,\n table: string,\n data: Partial<QueryOptions<Record>>,\n rawParent?: Partial<QueryOptions<Record>>\n ) {\n this.#table = table;\n\n if (repository) {\n this.#repository = repository;\n } else {\n this.#repository = this as any;\n }\n\n // Clean parent query options if new query is cursor based\n const parent = cleanParent(data, rawParent);\n\n this.#data.filter = data.filter ?? parent?.filter ?? {};\n this.#data.filter.$any = data.filter?.$any ?? parent?.filter?.$any;\n this.#data.filter.$all = data.filter?.$all ?? parent?.filter?.$all;\n this.#data.filter.$not = data.filter?.$not ?? parent?.filter?.$not;\n this.#data.filter.$none = data.filter?.$none ?? parent?.filter?.$none;\n this.#data.sort = data.sort ?? parent?.sort;\n this.#data.columns = data.columns ?? parent?.columns ?? ['*'];\n this.#data.pagination = data.pagination ?? parent?.pagination;\n this.#data.cache = data.cache ?? parent?.cache;\n\n this.any = this.any.bind(this);\n this.all = this.all.bind(this);\n this.not = this.not.bind(this);\n this.filter = this.filter.bind(this);\n this.sort = this.sort.bind(this);\n this.none = this.none.bind(this);\n\n Object.defineProperty(this, 'table', { enumerable: false });\n Object.defineProperty(this, 'repository', { enumerable: false });\n }\n\n getQueryOptions(): QueryOptions<Record> {\n return this.#data;\n }\n\n key(): string {\n const { columns = [], filter = {}, sort = [], pagination = {} } = this.#data;\n const key = JSON.stringify({ columns, filter, sort, pagination });\n return toBase64(key);\n }\n\n /**\n * Builds a new query object representing a logical OR between the given subqueries.\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n any(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $any = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $any } }, this.#data);\n }\n\n /**\n * Builds a new query object representing a logical AND between the given subqueries.\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n all(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $all = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $all } }, this.#data);\n }\n\n /**\n * Builds a new query object representing a logical OR negating each subquery. In pseudo-code: !q1 OR !q2\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n not(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $not = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $not } }, this.#data);\n }\n\n /**\n * Builds a new query object representing a logical AND negating each subquery. In pseudo-code: !q1 AND !q2\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n none(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $none = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $none } }, this.#data);\n }\n\n /**\n * Builds a new query object adding one or more constraints. Examples:\n *\n * ```\n * query.filter(\"columnName\", columnValue)\n * query.filter(\"columnName\", operator(columnValue)) // Use gt, gte, lt, lte, startsWith,...\n * ```\n *\n * @param column The name of the column to filter.\n * @param value The value to filter.\n * @returns A new Query object.\n */\n filter<F extends SelectableColumn<Record>>(\n column: F,\n value: Filter<NonNullable<ValueAtColumn<Record, F>>>\n ): Query<Record, Result>;\n\n /**\n * Builds a new query object adding one or more constraints. Examples:\n *\n * ```\n * query.filter({ \"columnName\": columnValue })\n * query.filter({\n * \"columnName\": operator(columnValue) // Use gt, gte, lt, lte, startsWith,...\n * })\n * ```\n *\n * @param filters A filter object\n * @returns A new Query object.\n */\n filter(filters: Filter<Record>): Query<Record, Result>;\n\n filter(a: any, b?: any): Query<Record, Result> {\n if (arguments.length === 1) {\n const constraints = Object.entries(a).map(([column, constraint]) => ({ [column]: constraint as any }));\n const $all = compact([this.#data.filter?.$all].flat().concat(constraints));\n\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $all } }, this.#data);\n } else {\n const $all = compact([this.#data.filter?.$all].flat().concat([{ [a]: b }]));\n\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $all } }, this.#data);\n }\n }\n\n /**\n * Builds a new query with a new sort option.\n * @param column The column name.\n * @param direction The direction. Either ascending or descending.\n * @returns A new Query object.\n */\n sort<F extends SelectableColumn<Record>>(column: F, direction: SortDirection = 'asc'): Query<Record, Result> {\n const originalSort = [this.#data.sort ?? []].flat() as SortFilter<Record>[];\n const sort = [...originalSort, { column, direction }];\n return new Query<Record, Result>(this.#repository, this.#table, { sort }, this.#data);\n }\n\n /**\n * Builds a new query specifying the set of columns to be returned in the query response.\n * @param columns Array of column names to be returned by the query.\n * @returns A new Query object.\n */\n select<K extends SelectableColumn<Record>>(columns: K[]) {\n return new Query<Record, SelectedPick<Record, typeof columns>>(\n this.#repository,\n this.#table,\n { columns },\n this.#data\n );\n }\n\n /**\n * Get paginated results\n *\n * @returns A page of results\n */\n getPaginated(): Promise<Page<Record, Result>>;\n\n /**\n * Get paginated results\n *\n * @param options Pagination options\n * @returns A page of results\n */\n getPaginated(options: OmitBy<QueryOptions<Record>, 'columns'>): Promise<Page<Record, Result>>;\n\n /**\n * Get paginated results\n *\n * @param options Pagination options\n * @returns A page of results\n */\n getPaginated<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<Page<Record, SelectedPick<Record, typeof options['columns']>>>;\n\n getPaginated<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Page<Record, Result>> {\n const query = new Query<Record, Result>(this.#repository, this.#table, options, this.#data);\n return this.#repository.query(query);\n }\n\n /**\n * Get results in an iterator\n *\n * @async\n * @returns Async interable of results\n */\n async *[Symbol.asyncIterator](): AsyncIterableIterator<Result> {\n for await (const [record] of this.getIterator({ batchSize: 1 })) {\n yield record;\n }\n }\n\n /**\n * Build an iterator of results\n *\n * @returns Async generator of results array\n */\n getIterator(): AsyncGenerator<Result[]>;\n\n /**\n * Build an iterator of results\n *\n * @param options Pagination options with batchSize\n * @returns Async generator of results array\n */\n getIterator(\n options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'> & { batchSize?: number }\n ): AsyncGenerator<Result[]>;\n\n /**\n * Build an iterator of results\n *\n * @param options Pagination options with batchSize\n * @returns Async generator of results array\n */\n getIterator<\n Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'> & { batchSize?: number }\n >(options: Options): AsyncGenerator<SelectedPick<Record, typeof options['columns']>[]>;\n\n async *getIterator<Result extends XataRecord>(\n options: QueryOptions<Record> & { batchSize?: number } = {}\n ): AsyncGenerator<Result[]> {\n const { batchSize = 1 } = options;\n\n let page = await this.getPaginated({ ...options, pagination: { size: batchSize, offset: 0 } });\n let more = page.hasNextPage();\n\n yield page.records as unknown as Result[];\n\n while (more) {\n page = await page.nextPage();\n more = page.hasNextPage();\n\n yield page.records as unknown as Result[];\n }\n }\n\n /**\n * Performs the query in the database and returns a set of results.\n * @returns An array of records from the database.\n */\n getMany(): Promise<RecordArray<Result>>;\n\n /**\n * Performs the query in the database and returns a set of results.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getMany<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<RecordArray<SelectedPick<Record, typeof options['columns']>>>;\n\n /**\n * Performs the query in the database and returns a set of results.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getMany(options: OmitBy<QueryOptions<Record>, 'columns'>): Promise<RecordArray<Result>>;\n\n async getMany<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<RecordArray<Result>> {\n const page = await this.getPaginated(options);\n\n if (page.hasNextPage() && options.pagination?.size === undefined) {\n console.trace('Calling getMany does not return all results. Paginate to get all results or call getAll.');\n }\n\n // Method overloading does not provide type inference for the return type.\n return page.records as unknown as RecordArray<Result>;\n }\n\n /**\n * Performs the query in the database and returns all the results.\n * Warning: If there are a large number of results, this method can have performance implications.\n * @returns An array of records from the database.\n */\n getAll(): Promise<Result[]>;\n\n /**\n * Performs the query in the database and returns all the results.\n * Warning: If there are a large number of results, this method can have performance implications.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getAll<Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'> & { batchSize?: number }>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>[]>;\n\n /**\n * Performs the query in the database and returns all the results.\n * Warning: If there are a large number of results, this method can have performance implications.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getAll(options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'> & { batchSize?: number }): Promise<Result[]>;\n\n async getAll<Result extends XataRecord>(\n options: QueryOptions<Record> & { batchSize?: number } = {}\n ): Promise<Result[]> {\n const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;\n const results = [];\n\n for await (const page of this.getIterator({ ...rest, batchSize })) {\n results.push(...page);\n }\n\n // Method overloading does not provide type inference for the return type.\n return results as unknown as Result[];\n }\n\n /**\n * Performs the query in the database and returns the first result.\n * @returns The first record that matches the query, or null if no record matched the query.\n */\n getFirst(): Promise<Result | null>;\n\n /**\n * Performs the query in the database and returns the first result.\n * @param options Additional options to be used when performing the query.\n * @returns The first record that matches the query, or null if no record matched the query.\n */\n getFirst<Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']> | null>;\n\n /**\n * Performs the query in the database and returns the first result.\n * @param options Additional options to be used when performing the query.\n * @returns The first record that matches the query, or null if no record matched the query.\n */\n getFirst(options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'>): Promise<Result | null>;\n\n async getFirst<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result | null> {\n const records = await this.getMany({ ...options, pagination: { size: 1 } });\n // Method overloading does not provide type inference for the return type.\n return (records[0] as unknown as Result) ?? null;\n }\n\n /**\n * Builds a new query object adding a cache TTL in milliseconds.\n * @param ttl The cache TTL in milliseconds.\n * @returns A new Query object.\n */\n cache(ttl: number): Query<Record, Result> {\n return new Query<Record, Result>(this.#repository, this.#table, { cache: ttl }, this.#data);\n }\n\n /**\n * Retrieve next page of records\n *\n * @returns A new page object.\n */\n nextPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n /**\n * Retrieve previous page of records\n *\n * @returns A new page object\n */\n previousPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n /**\n * Retrieve first page of records\n *\n * @returns A new page object\n */\n firstPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ pagination: { size, offset } });\n }\n\n /**\n * Retrieve last page of records\n *\n * @returns A new page object\n */\n lastPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ pagination: { size, offset, before: 'end' } });\n }\n\n /**\n * @returns Boolean indicating if there is a next page\n */\n hasNextPage(): boolean {\n return this.meta.page.more;\n }\n}\n\n// When using cursor based pagination, it is not allowed to send new sorting/filtering\n// We removed the sorting/filtering from the query options to avoid the error from the API\nfunction cleanParent<Record extends XataRecord>(\n data: Partial<QueryOptions<Record>>,\n parent?: Partial<QueryOptions<Record>>\n) {\n if (isCursorPaginationOptions(data.pagination)) {\n return { ...parent, sorting: undefined, filter: undefined };\n }\n\n return parent;\n}\n","import { isObject, isString } from '../util/lang';\nimport { SelectableColumn, SelectedPick } from './selection';\n\n/**\n * Represents an identifiable record from the database.\n */\nexport interface Identifiable {\n /**\n * Unique id of this record.\n */\n id: string;\n}\n\nexport interface BaseData {\n [key: string]: any;\n}\n\n/**\n * Represents a persisted record from the database.\n */\nexport interface XataRecord<OriginalRecord extends XataRecord<any> = XataRecord<any>> extends Identifiable {\n /**\n * Get metadata of this record.\n */\n getMetadata(): XataRecordMetadata;\n\n /**\n * Retrieves a refreshed copy of the current record from the database.\n * @param columns The columns to retrieve. If not specified, all first level properties are retrieved.\n * @returns The persisted record with the selected columns.\n */\n read<K extends SelectableColumn<OriginalRecord>>(\n columns: K[]\n ): Promise<Readonly<SelectedPick<OriginalRecord, typeof columns>> | null>;\n\n /**\n * Retrieves a refreshed copy of the current record from the database.\n * @returns The persisted record with all first level properties.\n */\n read(): Promise<Readonly<SelectedPick<OriginalRecord, ['*']>> | null>;\n\n /**\n * Performs a partial update of the current record. On success a new object is\n * returned and the current object is not mutated.\n * @param partialUpdate The columns and their values that have to be updated.\n * @param columns The columns to retrieve. If not specified, all first level properties are retrieved.\n * @returns The persisted record with the selected columns.\n */\n update<K extends SelectableColumn<OriginalRecord>>(\n partialUpdate: Partial<EditableData<Omit<OriginalRecord, keyof XataRecord>>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<OriginalRecord, typeof columns>>>;\n\n /**\n * Performs a partial update of the current record. On success a new object is\n * returned and the current object is not mutated.\n * @param partialUpdate The columns and their values that have to be updated.\n * @returns The persisted record with all first level properties.\n */\n update(\n partialUpdate: Partial<EditableData<Omit<OriginalRecord, keyof XataRecord>>>\n ): Promise<Readonly<SelectedPick<OriginalRecord, ['*']>>>;\n\n /**\n * Performs a deletion of the current record in the database.\n *\n * @throws If the record was already deleted or if an error happened while performing the deletion.\n */\n delete(): Promise<void>;\n}\n\nexport type Link<Record extends XataRecord> = Omit<XataRecord, 'read' | 'update'> & {\n /**\n * Retrieves a refreshed copy of the current record from the database.\n */\n read<K extends SelectableColumn<Record>>(\n columns?: K[]\n ): Promise<Readonly<\n SelectedPick<Record, typeof columns extends SelectableColumn<Record>[] ? typeof columns : ['*']>\n > | null>;\n\n /**\n * Performs a partial update of the current record. On success a new object is\n * returned and the current object is not mutated.\n * @param partialUpdate The columns and their values that have to be updated.\n * @returns A new record containing the latest values for all the columns of the current record.\n */\n update<K extends SelectableColumn<Record>>(\n partialUpdate: Partial<EditableData<Omit<Record, keyof XataRecord>>>,\n columns?: K[]\n ): Promise<\n Readonly<SelectedPick<Record, typeof columns extends SelectableColumn<Record>[] ? typeof columns : ['*']>>\n >;\n\n /**\n * Performs a deletion of the current record in the database.\n *\n * @throws If the record was already deleted or if an error happened while performing the deletion.\n */\n delete(): Promise<void>;\n};\n\nexport type XataRecordMetadata = {\n /**\n * Number that is increased every time the record is updated.\n */\n version: number;\n /*\n * Encoding/Decoding errors\n */\n warnings?: string[];\n};\n\nexport function isIdentifiable(x: any): x is Identifiable & Record<string, unknown> {\n return isObject(x) && isString((x as Partial<Identifiable>)?.id);\n}\n\nexport function isXataRecord(x: any): x is XataRecord & Record<string, unknown> {\n const record = x as XataRecord & Record<string, unknown>;\n const metadata = record?.getMetadata();\n\n return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === 'number';\n}\n\nexport type EditableData<O extends BaseData> = {\n [K in keyof O]: O[K] extends XataRecord\n ? { id: string } | string\n : NonNullable<O[K]> extends XataRecord\n ? { id: string } | string | null | undefined\n : O[K];\n};\n","import { isObject, isString } from '../util/lang';\nimport { SingleOrArray, StringKeys, Values } from '../util/types';\nimport { XataRecord } from './record';\nimport { SelectableColumn } from './selection';\n\nexport type SortDirection = 'asc' | 'desc';\nexport type SortFilterExtended<T extends XataRecord> = {\n column: SelectableColumn<T>;\n direction?: SortDirection;\n};\n\nexport type SortFilter<T extends XataRecord> = SelectableColumn<T> | SortFilterExtended<T> | SortFilterBase<T>;\n\ntype SortFilterBase<T extends XataRecord> = {\n [Key in StringKeys<T>]: SortDirection;\n};\n\nexport type ApiSortFilter<T extends XataRecord> = SingleOrArray<\n Values<{\n [Key in SelectableColumn<T>]: { [K in Key]: SortDirection };\n }>\n>;\n\nexport function isSortFilterString<T extends XataRecord>(value: any): value is SelectableColumn<T> {\n return isString(value);\n}\n\nexport function isSortFilterBase<T extends XataRecord>(filter: SortFilter<T>): filter is SortFilterBase<T> {\n return isObject(filter) && Object.values(filter).every((value) => value === 'asc' || value === 'desc');\n}\n\nexport function isSortFilterObject<T extends XataRecord>(filter: SortFilter<T>): filter is SortFilterExtended<T> {\n return isObject(filter) && !isSortFilterBase(filter) && filter.column !== undefined;\n}\n\nexport function buildSortFilter<T extends XataRecord>(filter: SingleOrArray<SortFilter<T>>): ApiSortFilter<T> {\n if (isSortFilterString(filter)) {\n return { [filter]: 'asc' } as { [key in SelectableColumn<T>]: SortDirection };\n } else if (Array.isArray(filter)) {\n return filter.map((item) => buildSortFilter(item)) as { [key in SelectableColumn<T>]: SortDirection }[];\n } else if (isSortFilterBase(filter)) {\n return filter as { [key in SelectableColumn<T>]: SortDirection };\n } else if (isSortFilterObject(filter)) {\n return { [filter.column]: filter.direction ?? 'asc' } as { [key in SelectableColumn<T>]: SortDirection };\n } else {\n throw new Error(`Invalid sort filter: ${filter}`);\n }\n}\n","import { SchemaPluginResult } from '.';\nimport {\n bulkInsertTableRecords,\n deleteRecord,\n getBranchDetails,\n getRecord,\n insertRecord,\n insertRecordWithID,\n queryTable,\n Schemas,\n searchTable,\n updateRecordWithID,\n upsertRecordWithID\n} from '../api';\nimport { FetcherExtraProps } from '../api/fetcher';\nimport { FuzzinessExpression, HighlightExpression, PrefixExpression, RecordsMetadata } from '../api/schemas';\nimport { XataPluginOptions } from '../plugins';\nimport { SearchXataRecord } from '../search';\nimport { Boosters } from '../search/boosters';\nimport { isObject, isString, isStringArray } from '../util/lang';\nimport { Dictionary } from '../util/types';\nimport { VERSION } from '../version';\nimport { CacheImpl } from './cache';\nimport { Filter } from './filters';\nimport { Page } from './pagination';\nimport { Query } from './query';\nimport { BaseData, EditableData, Identifiable, isIdentifiable, XataRecord } from './record';\nimport { SelectableColumn, SelectedPick } from './selection';\nimport { buildSortFilter } from './sorting';\nimport { AttributeDictionary, defaultTrace, TraceAttributes, TraceFunction } from './tracing';\n\n/**\n * Common interface for performing operations on a table.\n */\nexport abstract class Repository<Data extends BaseData, Record extends XataRecord = Data & XataRecord> extends Query<\n Record,\n Readonly<SelectedPick<Record, ['*']>>\n> {\n /*\n * Creates a single record in the table.\n * @param object Object containing the column names with their values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract create<K extends SelectableColumn<Record>>(\n object: Omit<EditableData<Data>, 'id'> & Partial<Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /*\n * Creates a single record in the table.\n * @param object Object containing the column names with their values to be stored in the table.\n * @returns The full persisted record.\n */\n abstract create(\n object: Omit<EditableData<Data>, 'id'> & Partial<Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates a single record in the table with a unique id.\n * @param id The unique id.\n * @param object Object containing the column names with their values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract create<K extends SelectableColumn<Record>>(\n id: string,\n object: Omit<EditableData<Data>, 'id'>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Creates a single record in the table with a unique id.\n * @param id The unique id.\n * @param object Object containing the column names with their values to be stored in the table.\n * @returns The full persisted record.\n */\n abstract create(id: string, object: Omit<EditableData<Data>, 'id'>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates multiple records in the table.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records in order.\n */\n abstract create<K extends SelectableColumn<Record>>(\n objects: Array<Omit<EditableData<Data>, 'id'> & Partial<Identifiable>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n\n /**\n * Creates multiple records in the table.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @returns Array of the persisted records in order.\n */\n abstract create(\n objects: Array<Omit<EditableData<Data>, 'id'> & Partial<Identifiable>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n\n /**\n * Queries a single record from the table given its unique id.\n * @param id The unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns> | null>>;\n\n /**\n * Queries a single record from the table given its unique id.\n * @param id The unique id.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read(id: string): Promise<Readonly<SelectedPick<Record, ['*']> | null>>;\n\n /**\n * Queries multiple records from the table given their unique id.\n * @param ids The unique ids array.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read<K extends SelectableColumn<Record>>(\n ids: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Queries multiple records from the table given their unique id.\n * @param ids The unique ids array.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read(ids: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Queries a single record from the table by the id in the object.\n * @param object Object containing the id of the record.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns> | null>>;\n\n /**\n * Queries a single record from the table by the id in the object.\n * @param object Object containing the id of the record.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']> | null>>;\n\n /**\n * Queries multiple records from the table by the ids in the objects.\n * @param objects Array of objects containing the ids of the records.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read<K extends SelectableColumn<Record>>(\n objects: Identifiable[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Queries multiple records from the table by the ids in the objects.\n * @param objects Array of objects containing the ids of the records.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read(objects: Identifiable[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Partially update a single record.\n * @param object An object with its id and the columns to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract update<K extends SelectableColumn<Record>>(\n object: Partial<EditableData<Data>> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Partially update a single record.\n * @param object An object with its id and the columns to be updated.\n * @returns The full persisted record.\n */\n abstract update(object: Partial<EditableData<Data>> & Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Partially update a single record given its unique id.\n * @param id The unique id.\n * @param object The column names and their values that have to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract update<K extends SelectableColumn<Record>>(\n id: string,\n object: Partial<EditableData<Data>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Partially update a single record given its unique id.\n * @param id The unique id.\n * @param object The column names and their values that have to be updated.\n * @returns The full persisted record.\n */\n abstract update(id: string, object: Partial<EditableData<Data>>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Partially updates multiple records.\n * @param objects An array of objects with their ids and columns to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records in order.\n */\n abstract update<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Data>> & Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n\n /**\n * Partially updates multiple records.\n * @param objects An array of objects with their ids and columns to be updated.\n * @returns Array of the persisted records in order.\n */\n abstract update(\n objects: Array<Partial<EditableData<Data>> & Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param object Object containing the column names with their values to be persisted in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract createOrUpdate<K extends SelectableColumn<Record>>(\n object: EditableData<Data> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param object Object containing the column names with their values to be persisted in the table.\n * @returns The full persisted record.\n */\n abstract createOrUpdate(object: EditableData<Data> & Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param id A unique id.\n * @param object The column names and the values to be persisted.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract createOrUpdate<K extends SelectableColumn<Record>>(\n id: string,\n object: Omit<EditableData<Data>, 'id'>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param id A unique id.\n * @param object The column names and the values to be persisted.\n * @returns The full persisted record.\n */\n abstract createOrUpdate(\n id: string,\n object: Omit<EditableData<Data>, 'id'>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records.\n */\n abstract createOrUpdate<K extends SelectableColumn<Record>>(\n objects: Array<EditableData<Data> & Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @returns Array of the persisted records.\n */\n abstract createOrUpdate(\n objects: Array<EditableData<Data> & Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n\n /**\n * Deletes a record given its unique id.\n * @param id The unique id.\n * @throws If the record could not be found or there was an error while performing the deletion.\n */\n abstract delete(id: string): Promise<void>;\n\n /**\n * Deletes a record given its unique id.\n * @param id An object with a unique id.\n * @throws If the record could not be found or there was an error while performing the deletion.\n */\n abstract delete(id: Identifiable): Promise<void>;\n\n /**\n * Deletes a record given a list of unique ids.\n * @param ids The array of unique ids.\n * @throws If the record could not be found or there was an error while performing the deletion.\n */\n abstract delete(ids: string[]): Promise<void>;\n\n /**\n * Deletes a record given a list of unique ids.\n * @param ids An array of objects with unique ids.\n * @throws If the record could not be found or there was an error while performing the deletion.\n */\n abstract delete(ids: Identifiable[]): Promise<void>;\n\n /**\n * Search for records in the table.\n * @param query The query to search for.\n * @param options The options to search with (like: fuzziness)\n * @returns The found records.\n */\n abstract search(\n query: string,\n options?: {\n fuzziness?: FuzzinessExpression;\n prefix?: PrefixExpression;\n highlight?: HighlightExpression;\n filter?: Filter<Record>;\n boosters?: Boosters<Record>[];\n }\n ): Promise<SearchXataRecord<SelectedPick<Record, ['*']>>[]>;\n\n abstract query<Result extends XataRecord>(query: Query<Record, Result>): Promise<Page<Record, Result>>;\n}\n\nexport class RestRepository<Data extends BaseData, Record extends XataRecord = Data & XataRecord>\n extends Query<Record, SelectedPick<Record, ['*']>>\n implements Repository<Data, Record>\n{\n #table: string;\n #getFetchProps: () => Promise<FetcherExtraProps>;\n #db: SchemaPluginResult<any>;\n #cache: CacheImpl;\n #schemaTables?: Schemas.Table[];\n #trace: TraceFunction;\n\n constructor(options: {\n table: string;\n db: SchemaPluginResult<any>;\n pluginOptions: XataPluginOptions;\n schemaTables?: Schemas.Table[];\n }) {\n super(null, options.table, {});\n\n this.#table = options.table;\n this.#getFetchProps = options.pluginOptions.getFetchProps;\n this.#db = options.db;\n this.#cache = options.pluginOptions.cache;\n this.#schemaTables = options.schemaTables;\n\n const trace = options.pluginOptions.trace ?? defaultTrace;\n this.#trace = async <T>(\n name: string,\n fn: (options: { setAttributes: (attrs: AttributeDictionary) => void; onError: (message: string) => void }) => T,\n options: AttributeDictionary = {}\n ) => {\n return trace<T>(name, fn, {\n ...options,\n [TraceAttributes.TABLE]: this.#table,\n [TraceAttributes.VERSION]: VERSION\n });\n };\n }\n\n async create(object: EditableData<Data>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async create(recordId: string, object: EditableData<Data>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async create(objects: EditableData<Data>[]): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n async create<K extends SelectableColumn<Record>>(\n object: EditableData<Data>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async create<K extends SelectableColumn<Record>>(\n recordId: string,\n object: EditableData<Data>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async create<K extends SelectableColumn<Record>>(\n objects: EditableData<Data>[],\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n async create<K extends SelectableColumn<Record>>(\n a: string | EditableData<Data> | EditableData<Data>[],\n b?: EditableData<Data> | K[],\n c?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, K[]>>\n | Readonly<SelectedPick<Record, K[]>>[]\n | Readonly<SelectedPick<Record, ['*']>>\n | Readonly<SelectedPick<Record, ['*']>>[]\n > {\n return this.#trace('create', async () => {\n // Create many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n const columns = isStringArray(b) ? b : undefined;\n return this.#bulkInsertTableRecords(a, columns);\n }\n\n // Create one record with id as param\n if (isString(a) && isObject(b)) {\n if (a === '') throw new Error(\"The id can't be empty\");\n\n const columns = isStringArray(c) ? c : undefined;\n return this.#insertRecordWithId(a, b, columns);\n }\n\n // Create one record with id as property\n if (isObject(a) && isString(a.id)) {\n if (a.id === '') throw new Error(\"The id can't be empty\");\n\n const columns = isStringArray(b) ? b : undefined;\n return this.#insertRecordWithId(a.id, { ...a, id: undefined }, columns);\n }\n\n // Create one record without id\n if (isObject(a)) {\n const columns = isStringArray(b) ? b : undefined;\n return this.#insertRecordWithoutId(a, columns);\n }\n\n throw new Error('Invalid arguments for create method');\n });\n }\n\n async #insertRecordWithoutId(object: EditableData<Data>, columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n const record = transformObjectLinks(object);\n\n const response = await insertRecord({\n pathParams: {\n workspace: '{workspaceId}',\n dbBranchName: '{dbBranch}',\n tableName: this.#table\n },\n queryParams: { columns },\n body: record,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async #insertRecordWithId(recordId: string, object: EditableData<Data>, columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n const record = transformObjectLinks(object);\n\n const response = await insertRecordWithID({\n pathParams: {\n workspace: '{workspaceId}',\n dbBranchName: '{dbBranch}',\n tableName: this.#table,\n recordId\n },\n body: record,\n queryParams: { createOnly: true, columns },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async #bulkInsertTableRecords(objects: EditableData<Data>[], columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n const records = objects.map((object) => transformObjectLinks(object));\n\n const response = await bulkInsertTableRecords({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table },\n queryParams: { columns },\n body: { records },\n ...fetchProps\n });\n\n if (!isResponseWithRecords(response)) {\n throw new Error(\"Request included columns but server didn't include them\");\n }\n\n const schemaTables = await this.#getSchemaTables();\n return response.records?.map((item) => initObject(this.#db, schemaTables, this.#table, item)) as any;\n }\n\n async read(recordId: string): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n async read(recordIds: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n async read(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n async read(objects: Identifiable[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n async read<K extends SelectableColumn<Record>>(\n recordId: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n async read<K extends SelectableColumn<Record>>(\n recordIds: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n async read<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n async read<K extends SelectableColumn<Record>>(\n objects: Identifiable[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n async read<K extends SelectableColumn<Record>>(\n a: string | string[] | Identifiable | Identifiable[],\n b?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Readonly<SelectedPick<Record, ['*']>>[]\n | Readonly<SelectedPick<Record, K[]>>\n | Readonly<SelectedPick<Record, K[]>>[]\n | null\n > {\n return this.#trace('read', async () => {\n const columns = isStringArray(b) ? b : ['*' as const];\n\n // Read many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n const ids = a.map((item) => (isString(item) ? item : item.id)).filter((id) => isString(id));\n\n const finalObjects = await this.getAll({ filter: { id: { $any: ids } }, columns });\n\n // Maintain order of objects\n const dictionary = finalObjects.reduce((acc, object) => {\n acc[object.id] = object;\n return acc;\n }, {} as Dictionary<any>);\n\n return ids.map((id) => dictionary[id] ?? null);\n }\n\n // Read one record\n const id = isString(a) ? a : a.id;\n if (isString(id)) {\n const fetchProps = await this.#getFetchProps();\n\n try {\n const response = await getRecord({\n pathParams: {\n workspace: '{workspaceId}',\n dbBranchName: '{dbBranch}',\n tableName: this.#table,\n recordId: id\n },\n queryParams: { columns },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response);\n } catch (e) {\n if (isObject(e) && e.status === 404) {\n return null;\n }\n\n throw e;\n }\n }\n\n return null;\n });\n }\n\n async update(object: Partial<EditableData<Data>> & Identifiable): Promise<SelectedPick<Record, ['*']>>;\n async update(recordId: string, object: Partial<EditableData<Data>>): Promise<SelectedPick<Record, ['*']>>;\n async update(objects: Array<Partial<EditableData<Data>> & Identifiable>): Promise<SelectedPick<Record, ['*']>[]>;\n async update<K extends SelectableColumn<Record>>(\n object: Partial<EditableData<Data>> & Identifiable,\n columns: K[]\n ): Promise<SelectedPick<Record, typeof columns>>;\n async update<K extends SelectableColumn<Record>>(\n recordId: string,\n object: Partial<EditableData<Data>>,\n columns: K[]\n ): Promise<SelectedPick<Record, typeof columns>>;\n async update<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Data>> & Identifiable>,\n columns: K[]\n ): Promise<SelectedPick<Record, typeof columns>[]>;\n async update<K extends SelectableColumn<Record>>(\n a: string | (Partial<EditableData<Data>> & Identifiable) | Array<Partial<EditableData<Data>> & Identifiable>,\n b?: Partial<EditableData<Data>> | K[],\n c?: K[]\n ): Promise<\n | SelectedPick<Record, ['*']>\n | SelectedPick<Record, ['*']>[]\n | SelectedPick<Record, K[]>\n | SelectedPick<Record, K[]>[]\n > {\n return this.#trace('update', async () => {\n // Update many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n if (a.length > 100) {\n // TODO: Implement bulk update when API has support for it\n console.warn('Bulk update operation is not optimized in the Xata API yet, this request might be slow');\n }\n\n const columns = isStringArray(b) ? b : (['*'] as K[]);\n return Promise.all(a.map((object) => this.update(object, columns)));\n }\n\n // Update one record with id as param\n if (isString(a) && isObject(b)) {\n const columns = isStringArray(c) ? c : undefined;\n return this.#updateRecordWithID(a, b, columns);\n }\n\n // Update one record with id as property\n if (isObject(a) && isString(a.id)) {\n const columns = isStringArray(b) ? b : undefined;\n return this.#updateRecordWithID(a.id, { ...a, id: undefined }, columns);\n }\n\n throw new Error('Invalid arguments for update method');\n });\n }\n\n async #updateRecordWithID(\n recordId: string,\n object: Partial<EditableData<Data>>,\n columns: SelectableColumn<Record>[] = ['*']\n ) {\n const fetchProps = await this.#getFetchProps();\n\n const record = transformObjectLinks(object);\n\n const response = await updateRecordWithID({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n queryParams: { columns },\n body: record,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async createOrUpdate(object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>>;\n async createOrUpdate(recordId: string, object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>>;\n async createOrUpdate(objects: EditableData<Data>[]): Promise<SelectedPick<Record, ['*']>[]>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n object: EditableData<Data>,\n columns: K[]\n ): Promise<SelectedPick<Record, typeof columns>>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n recordId: string,\n object: EditableData<Data>,\n columns: K[]\n ): Promise<SelectedPick<Record, typeof columns>>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n objects: EditableData<Data>[],\n columns: K[]\n ): Promise<SelectedPick<Record, typeof columns>[]>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n a: string | EditableData<Data> | EditableData<Data>[],\n b?: EditableData<Data> | K[],\n c?: K[]\n ): Promise<\n | SelectedPick<Record, ['*']>\n | SelectedPick<Record, ['*']>[]\n | SelectedPick<Record, K[]>\n | SelectedPick<Record, K[]>[]\n > {\n return this.#trace('createOrUpdate', async () => {\n // Create or update many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n if (a.length > 100) {\n // TODO: Implement bulk update when API has support for it\n console.warn('Bulk update operation is not optimized in the Xata API yet, this request might be slow');\n }\n\n const columns = isStringArray(b) ? b : (['*'] as K[]);\n return Promise.all(a.map((object) => this.createOrUpdate(object, columns)));\n }\n\n // Create or update one record with id as param\n if (isString(a) && isObject(b)) {\n const columns = isStringArray(c) ? c : undefined;\n return this.#upsertRecordWithID(a, b, columns);\n }\n\n // Create or update one record with id as property\n if (isObject(a) && isString(a.id)) {\n const columns = isStringArray(c) ? c : undefined;\n return this.#upsertRecordWithID(a.id, { ...a, id: undefined }, columns);\n }\n\n throw new Error('Invalid arguments for createOrUpdate method');\n });\n }\n\n async #upsertRecordWithID(recordId: string, object: EditableData<Data>, columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n const response = await upsertRecordWithID({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n queryParams: { columns },\n body: object,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async delete(a: string | Identifiable | Array<string | Identifiable>): Promise<void> {\n return this.#trace('delete', async () => {\n // Delete many records\n if (Array.isArray(a)) {\n if (a.length === 0) return;\n\n if (a.length > 100) {\n // TODO: Implement bulk delete when API has support for it\n console.warn('Bulk delete operation is not optimized in the Xata API yet, this request might be slow');\n }\n\n await Promise.all(a.map((id) => this.delete(id)));\n return;\n }\n\n // Delete one record with id as param\n if (isString(a)) {\n await this.#deleteRecord(a);\n return;\n }\n\n // Delete one record with id as property\n if (isObject(a) && isString(a.id)) {\n await this.#deleteRecord(a.id);\n return;\n }\n\n throw new Error('Invalid arguments for delete method');\n });\n }\n\n async #deleteRecord(recordId: string): Promise<void> {\n const fetchProps = await this.#getFetchProps();\n\n await deleteRecord({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n ...fetchProps\n });\n }\n\n async search(\n query: string,\n options: {\n fuzziness?: FuzzinessExpression;\n prefix?: PrefixExpression;\n highlight?: HighlightExpression;\n filter?: Filter<Record>;\n boosters?: Boosters<Record>[];\n } = {}\n ) {\n return this.#trace('search', async () => {\n const fetchProps = await this.#getFetchProps();\n\n const { records } = await searchTable({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table },\n body: {\n query,\n fuzziness: options.fuzziness,\n prefix: options.prefix,\n highlight: options.highlight,\n filter: options.filter as Schemas.FilterExpression,\n boosters: options.boosters as Schemas.BoosterExpression[]\n },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return records.map((item) => initObject(this.#db, schemaTables, this.#table, item)) as any;\n });\n }\n\n async query<Result extends XataRecord>(query: Query<Record, Result>): Promise<Page<Record, Result>> {\n return this.#trace('query', async () => {\n const cacheQuery = await this.#getCacheQuery<Result>(query);\n if (cacheQuery) return new Page<Record, Result>(query, cacheQuery.meta, cacheQuery.records);\n\n const data = query.getQueryOptions();\n\n const body = {\n filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : undefined,\n sort: data.sort !== undefined ? buildSortFilter(data.sort) : undefined,\n page: data.pagination,\n columns: data.columns\n };\n\n const fetchProps = await this.#getFetchProps();\n const { meta, records: objects } = await queryTable({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table },\n body,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n const records = objects.map((record) => initObject<Result>(this.#db, schemaTables, this.#table, record));\n await this.#setCacheQuery(query, meta, records);\n\n return new Page<Record, Result>(query, meta, records);\n });\n }\n\n async #setCacheQuery(query: Query<Record, XataRecord>, meta: RecordsMetadata, records: XataRecord[]): Promise<void> {\n await this.#cache.set(`query_${this.#table}:${query.key()}`, { date: new Date(), meta, records });\n }\n\n async #getCacheQuery<T extends XataRecord>(\n query: Query<Record, XataRecord>\n ): Promise<{ meta: RecordsMetadata; records: T[] } | null> {\n const key = `query_${this.#table}:${query.key()}`;\n const result = await this.#cache.get<{ date: Date; meta: RecordsMetadata; records: T[] }>(key);\n if (!result) return null;\n\n const { cache: ttl = this.#cache.defaultQueryTTL } = query.getQueryOptions();\n if (ttl < 0) return null;\n\n const hasExpired = result.date.getTime() + ttl < Date.now();\n return hasExpired ? null : result;\n }\n\n async #getSchemaTables(): Promise<Schemas.Table[]> {\n if (this.#schemaTables) return this.#schemaTables;\n const fetchProps = await this.#getFetchProps();\n\n const { schema } = await getBranchDetails({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n ...fetchProps\n });\n\n this.#schemaTables = schema.tables;\n return schema.tables;\n }\n}\n\nconst transformObjectLinks = (object: any) => {\n return Object.entries(object).reduce((acc, [key, value]) => {\n // Ignore internal properties\n if (key === 'xata') return acc;\n\n // Transform links to identifier\n return { ...acc, [key]: isIdentifiable(value) ? value.id : value };\n }, {});\n};\n\nexport const initObject = <T>(\n db: Record<string, Repository<any>>,\n schemaTables: Schemas.Table[],\n table: string,\n object: Record<string, unknown>\n) => {\n const result: Dictionary<unknown> = {};\n const { xata, ...rest } = object ?? {};\n Object.assign(result, rest);\n\n const { columns } = schemaTables.find(({ name }) => name === table) ?? {};\n if (!columns) console.error(`Table ${table} not found in schema`);\n\n for (const column of columns ?? []) {\n const value = result[column.name];\n\n switch (column.type) {\n case 'datetime': {\n const date = value !== undefined ? new Date(value as string) : undefined;\n\n if (date && isNaN(date.getTime())) {\n console.error(`Failed to parse date ${value} for field ${column.name}`);\n } else if (date) {\n result[column.name] = date;\n }\n\n break;\n }\n case 'link': {\n const linkTable = column.link?.table;\n\n if (!linkTable) {\n console.error(`Failed to parse link for field ${column.name}`);\n } else if (isObject(value)) {\n result[column.name] = initObject(db, schemaTables, linkTable, value);\n }\n\n break;\n }\n default:\n break;\n }\n }\n\n result.read = function (columns?: any) {\n return db[table].read(result['id'] as string, columns);\n };\n\n result.update = function (data: any, columns?: any) {\n return db[table].update(result['id'] as string, data, columns);\n };\n\n result.delete = function () {\n return db[table].delete(result['id'] as string);\n };\n\n result.getMetadata = function () {\n return xata;\n };\n\n for (const prop of ['read', 'update', 'delete', 'getMetadata']) {\n Object.defineProperty(result, prop, { enumerable: false });\n }\n\n Object.freeze(result);\n return result as T;\n};\n\nfunction getIds(value: any): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => getIds(item)).flat();\n }\n\n if (!isObject(value)) return [];\n\n const nestedIds = Object.values(value)\n .map((item) => getIds(item))\n .flat();\n\n return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;\n}\n\nfunction isResponseWithRecords(value: any): value is { records: Schemas.XataRecord[] } {\n return isObject(value) && Array.isArray(value.records);\n}\n","export interface CacheImpl {\n defaultQueryTTL: number;\n\n getAll(): Promise<Record<string, unknown>>;\n get: <T>(key: string) => Promise<T | null>;\n set: <T>(key: string, value: T) => Promise<void>;\n delete: (key: string) => Promise<void>;\n clear: () => Promise<void>;\n}\n\nexport interface SimpleCacheOptions {\n max?: number;\n defaultQueryTTL?: number;\n}\n\nexport class SimpleCache implements CacheImpl {\n #map: Map<string, unknown>;\n\n capacity: number;\n defaultQueryTTL: number;\n\n constructor(options: SimpleCacheOptions = {}) {\n this.#map = new Map();\n this.capacity = options.max ?? 500;\n this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1000;\n }\n\n async getAll(): Promise<Record<string, unknown>> {\n return Object.fromEntries(this.#map);\n }\n\n async get<T>(key: string): Promise<T | null> {\n return (this.#map.get(key) ?? null) as T | null;\n }\n\n async set<T>(key: string, value: T): Promise<void> {\n await this.delete(key);\n this.#map.set(key, value);\n\n if (this.#map.size > this.capacity) {\n const leastRecentlyUsed = this.#map.keys().next().value;\n await this.delete(leastRecentlyUsed);\n }\n }\n\n async delete(key: string): Promise<void> {\n this.#map.delete(key);\n }\n\n async clear(): Promise<void> {\n return this.#map.clear();\n }\n}\n","import {\n ArrayFilter,\n ComparableType,\n ComparableTypeFilter,\n ExistanceFilter,\n PropertyFilter,\n StringTypeFilter\n} from './filters';\nimport { SelectableColumn } from './selection';\n\n/**\n * Operator to restrict results to only values that are greater than the given value.\n */\nexport const greaterThan = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $gt: value });\n\n/**\n * Operator to restrict results to only values that are greater than the given value.\n */\nexport const gt = greaterThan;\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const greaterThanEquals = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $ge: value });\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const greaterEquals = greaterThanEquals;\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const gte = greaterThanEquals;\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const ge = greaterThanEquals;\n\n/**\n * Operator to restrict results to only values that are lower than the given value.\n */\nexport const lessThan = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $lt: value });\n\n/**\n * Operator to restrict results to only values that are lower than the given value.\n */\nexport const lt = lessThan;\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lessThanEquals = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $le: value });\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lessEquals = lessThanEquals;\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lte = lessThanEquals;\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const le = lessThanEquals;\n\n/**\n * Operator to restrict results to only values that are not null.\n */\nexport const exists = <T>(column: SelectableColumn<T>): ExistanceFilter<T> => ({ $exists: column });\n\n/**\n * Operator to restrict results to only values that are null.\n */\nexport const notExists = <T>(column: SelectableColumn<T>): ExistanceFilter<T> => ({ $notExists: column });\n\n/**\n * Operator to restrict results to only values that start with the given prefix.\n */\nexport const startsWith = (value: string): StringTypeFilter => ({ $startsWith: value });\n\n/**\n * Operator to restrict results to only values that end with the given suffix.\n */\nexport const endsWith = (value: string): StringTypeFilter => ({ $endsWith: value });\n\n/**\n * Operator to restrict results to only values that match the given pattern.\n */\nexport const pattern = (value: string): StringTypeFilter => ({ $pattern: value });\n\n/**\n * Operator to restrict results to only values that are equal to the given value.\n */\nexport const is = <T>(value: T): PropertyFilter<T> => ({ $is: value });\n\n/**\n * Operator to restrict results to only values that are equal to the given value.\n */\nexport const equals = is;\n\n/**\n * Operator to restrict results to only values that are not equal to the given value.\n */\nexport const isNot = <T>(value: T): PropertyFilter<T> => ({ $isNot: value });\n\n/**\n * Operator to restrict results to only values that contain the given value.\n */\nexport const contains = (value: string): StringTypeFilter => ({ $contains: value });\n\n/**\n * Operator to restrict results if some array items match the predicate.\n */\nexport const includes = <T>(value: T): ArrayFilter<T> => ({ $includes: value });\n\n/**\n * Operator to restrict results if all array items match the predicate.\n */\nexport const includesAll = <T>(value: T): ArrayFilter<T> => ({ $includesAll: value });\n\n/**\n * Operator to restrict results if none array items match the predicate.\n */\nexport const includesNone = <T>(value: T): ArrayFilter<T> => ({ $includesNone: value });\n\n/**\n * Operator to restrict results if some array items match the predicate.\n */\nexport const includesAny = <T>(value: T): ArrayFilter<T> => ({ $includesAny: value });\n","import type { Schemas } from '../api';\nimport { XataRecord } from '../api/schemas';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { isString } from '../util/lang';\nimport { BaseData } from './record';\nimport { Repository, RestRepository } from './repository';\n\nexport * from './cache';\nexport * from './inference';\nexport * from './operators';\nexport * from './pagination';\nexport { Query } from './query';\nexport { isIdentifiable, isXataRecord } from './record';\nexport type { BaseData, EditableData, Identifiable, Link, XataRecord } from './record';\nexport { Repository, RestRepository } from './repository';\nexport * from './selection';\n\nexport type SchemaDefinition = {\n table: string;\n};\n\nexport type SchemaPluginResult<Schemas extends Record<string, BaseData>> = {\n [Key in keyof Schemas]: Repository<Schemas[Key]>;\n} & { [key: string]: Repository<XataRecord> };\n\nexport class SchemaPlugin<Schemas extends Record<string, BaseData>> extends XataPlugin {\n #tables: Record<string, Repository<any>> = {};\n #schemaTables?: Schemas.Table[];\n\n constructor(schemaTables?: Schemas.Table[]) {\n super();\n\n this.#schemaTables = schemaTables;\n }\n\n build(pluginOptions: XataPluginOptions): SchemaPluginResult<Schemas> {\n const db: any = new Proxy(\n {},\n {\n get: (_target, table) => {\n if (!isString(table)) throw new Error('Invalid table name');\n if (this.#tables[table] === undefined) {\n this.#tables[table] = new RestRepository({ db, pluginOptions, table, schemaTables: this.#schemaTables });\n }\n\n return this.#tables[table];\n }\n }\n );\n\n // Inject generated tables for shell to auto-complete\n const tableNames = this.#schemaTables?.map(({ name }) => name) ?? [];\n for (const table of tableNames) {\n db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: this.#schemaTables });\n }\n\n return db;\n }\n}\n","import type { Schemas } from '../api';\nimport { getBranchDetails, searchBranch } from '../api';\nimport { FuzzinessExpression, HighlightExpression, PrefixExpression } from '../api/schemas';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { SchemaPluginResult } from '../schema';\nimport { Filter } from '../schema/filters';\nimport { BaseData, XataRecord, XataRecordMetadata } from '../schema/record';\nimport { initObject } from '../schema/repository';\nimport { SelectedPick } from '../schema/selection';\nimport { GetArrayInnerType, StringKeys, Values } from '../util/types';\nimport { Boosters } from './boosters';\n\nexport type SearchOptions<Schemas extends Record<string, BaseData>, Tables extends StringKeys<Schemas>> = {\n fuzziness?: FuzzinessExpression;\n prefix?: PrefixExpression;\n highlight?: HighlightExpression;\n tables?: Array<\n | Tables\n | Values<{\n [Model in GetArrayInnerType<NonNullable<Tables[]>>]: {\n table: Model;\n filter?: Filter<SelectedPick<Schemas[Model] & XataRecord, ['*']>>;\n boosters?: Boosters<Schemas[Model] & XataRecord>[];\n };\n }>\n >;\n};\n\nexport type SearchPluginResult<Schemas extends Record<string, BaseData>> = {\n all: <Tables extends StringKeys<Schemas>>(\n query: string,\n options?: SearchOptions<Schemas, Tables>\n ) => Promise<\n Values<{\n [Model in ExtractTables<\n Schemas,\n Tables,\n GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>\n >]: {\n table: Model;\n record: Awaited<SearchXataRecord<SelectedPick<Schemas[Model] & XataRecord, ['*']>>>;\n };\n }>[]\n >;\n byTable: <Tables extends StringKeys<Schemas>>(\n query: string,\n options?: SearchOptions<Schemas, Tables>\n ) => Promise<{\n [Model in ExtractTables<\n Schemas,\n Tables,\n GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>\n >]?: Awaited<SearchXataRecord<SelectedPick<Schemas[Model] & XataRecord, ['*']>>[]>;\n }>;\n};\n\nexport class SearchPlugin<Schemas extends Record<string, BaseData>> extends XataPlugin {\n #schemaTables?: Schemas.Table[];\n\n constructor(private db: SchemaPluginResult<Schemas>, schemaTables?: Schemas.Table[]) {\n super();\n this.#schemaTables = schemaTables;\n }\n\n build({ getFetchProps }: XataPluginOptions): SearchPluginResult<Schemas> {\n return {\n all: async <Tables extends StringKeys<Schemas>>(query: string, options: SearchOptions<Schemas, Tables> = {}) => {\n const records = await this.#search(query, options, getFetchProps);\n const schemaTables = await this.#getSchemaTables(getFetchProps);\n\n return records.map((record) => {\n const { table = 'orphan' } = record.xata;\n\n return { table, record: initObject(this.db, schemaTables, table, record) } as any;\n });\n },\n byTable: async <Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables> = {}\n ) => {\n const records = await this.#search(query, options, getFetchProps);\n const schemaTables = await this.#getSchemaTables(getFetchProps);\n\n return records.reduce((acc, record) => {\n const { table = 'orphan' } = record.xata;\n\n const items = acc[table] ?? [];\n const item = initObject(this.db, schemaTables, table, record);\n\n return { ...acc, [table]: [...items, item] };\n }, {} as any);\n }\n };\n }\n\n async #search<Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables>,\n getFetchProps: XataPluginOptions['getFetchProps']\n ) {\n const fetchProps = await getFetchProps();\n const { tables, fuzziness, highlight, prefix } = options ?? {};\n\n const { records } = await searchBranch({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n // @ts-ignore https://github.com/xataio/client-ts/issues/313\n body: { tables, query, fuzziness, prefix, highlight },\n ...fetchProps\n });\n\n return records;\n }\n\n async #getSchemaTables(getFetchProps: XataPluginOptions['getFetchProps']): Promise<Schemas.Table[]> {\n if (this.#schemaTables) return this.#schemaTables;\n const fetchProps = await getFetchProps();\n\n const { schema } = await getBranchDetails({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n ...fetchProps\n });\n\n this.#schemaTables = schema.tables;\n return schema.tables;\n }\n}\n\nexport type SearchXataRecord<Record extends XataRecord> = Omit<Record, 'getMetadata'> & {\n getMetadata: () => XataRecordMetadata & SearchExtraProperties;\n};\n\ntype SearchExtraProperties = {\n /*\n * The record's table name. APIs that return records from multiple tables will set this field accordingly.\n */\n table: string;\n /*\n * Highlights of the record. This is used by the search APIs to indicate which fields and parts of the fields have matched the search.\n */\n highlight?: {\n [key: string]:\n | string[]\n | {\n [key: string]: any;\n };\n };\n /*\n * The record's relevancy score. This is returned by the search APIs.\n */\n score?: number;\n};\n\ntype ReturnTable<Table, Tables> = Table extends Tables ? Table : never;\n\ntype ExtractTables<\n Schemas extends Record<string, BaseData>,\n Tables extends StringKeys<Schemas>,\n TableOptions extends GetArrayInnerType<NonNullable<NonNullable<SearchOptions<Schemas, Tables>>['tables']>>\n> = TableOptions extends `${infer Table}`\n ? ReturnTable<Table, Tables>\n : TableOptions extends { table: infer Table }\n ? ReturnTable<Table, Tables>\n : never;\n","export type BranchStrategyValue = string | undefined | null;\nexport type BranchStrategyBuilder = () => BranchStrategyValue | Promise<BranchStrategyValue>;\nexport type BranchStrategy = BranchStrategyValue | BranchStrategyBuilder;\nexport type BranchStrategyOption = NonNullable<BranchStrategy | BranchStrategy[]>;\n\nexport const isBranchStrategyBuilder = (strategy: BranchStrategy): strategy is BranchStrategyBuilder => {\n return typeof strategy === 'function';\n};\n","import { getBranchDetails, resolveBranch } from '../api';\nimport { FetchImpl } from '../api/fetcher';\nimport { defaultTrace } from '../schema/tracing';\nimport { getAPIKey } from './apiKey';\nimport { getEnvironment, getGitBranch } from './environment';\nimport { getFetchImplementation } from './fetch';\nimport { isObject } from './lang';\n\ntype BranchResolutionOptions = {\n databaseURL?: string;\n apiKey?: string;\n fetchImpl?: FetchImpl;\n};\n\nexport async function getCurrentBranchName(options?: BranchResolutionOptions): Promise<string> {\n const { branch, envBranch } = getEnvironment();\n\n if (branch) {\n const details = await getDatabaseBranch(branch, options);\n if (details) return branch;\n\n console.warn(`Branch ${branch} not found in Xata. Ignoring...`);\n }\n\n const gitBranch = envBranch || (await getGitBranch());\n return resolveXataBranch(gitBranch, options);\n}\n\nexport async function getCurrentBranchDetails(options?: BranchResolutionOptions) {\n const branch = await getCurrentBranchName(options);\n return getDatabaseBranch(branch, options);\n}\n\nasync function resolveXataBranch(gitBranch: string | undefined, options?: BranchResolutionOptions): Promise<string> {\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n\n if (!databaseURL)\n throw new Error(\n 'A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely'\n );\n if (!apiKey)\n throw new Error(\n 'An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely'\n );\n\n const [protocol, , host, , dbName] = databaseURL.split('/');\n const [workspace] = host.split('.');\n const { fallbackBranch } = getEnvironment();\n\n const { branch } = await resolveBranch({\n apiKey,\n apiUrl: databaseURL,\n fetchImpl: getFetchImplementation(options?.fetchImpl),\n workspacesApiUrl: `${protocol}//${host}`,\n pathParams: { dbName, workspace },\n queryParams: { gitBranch, fallbackBranch },\n trace: defaultTrace\n });\n\n return branch;\n}\n\nasync function getDatabaseBranch(branch: string, options?: BranchResolutionOptions) {\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n\n if (!databaseURL)\n throw new Error(\n 'A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely'\n );\n if (!apiKey)\n throw new Error(\n 'An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely'\n );\n\n const [protocol, , host, , database] = databaseURL.split('/');\n const [workspace] = host.split('.');\n const dbBranchName = `${database}:${branch}`;\n try {\n return await getBranchDetails({\n apiKey,\n apiUrl: databaseURL,\n fetchImpl: getFetchImplementation(options?.fetchImpl),\n workspacesApiUrl: `${protocol}//${host}`,\n pathParams: { dbBranchName, workspace },\n trace: defaultTrace\n });\n } catch (err) {\n if (isObject(err) && err.status === 404) return null;\n throw err;\n }\n}\n\nexport function getDatabaseURL() {\n try {\n const { databaseURL } = getEnvironment();\n return databaseURL;\n } catch (err) {\n return undefined;\n }\n}\n","import { Schemas } from './api';\nimport { FetcherExtraProps, FetchImpl } from './api/fetcher';\nimport { XataPlugin, XataPluginOptions } from './plugins';\nimport { BaseSchema, SchemaInference, SchemaPlugin, SchemaPluginResult } from './schema';\nimport { CacheImpl, SimpleCache } from './schema/cache';\nimport { defaultTrace, TraceFunction } from './schema/tracing';\nimport { SearchPlugin, SearchPluginResult } from './search';\nimport { getAPIKey } from './util/apiKey';\nimport { BranchStrategy, BranchStrategyOption, BranchStrategyValue, isBranchStrategyBuilder } from './util/branches';\nimport { getCurrentBranchName, getDatabaseURL } from './util/config';\nimport { getFetchImplementation } from './util/fetch';\nimport { AllRequired, StringKeys } from './util/types';\n\nexport type BaseClientOptions = {\n fetch?: FetchImpl;\n apiKey?: string;\n databaseURL?: string;\n branch?: BranchStrategyOption;\n cache?: CacheImpl;\n trace?: TraceFunction;\n};\n\ntype SafeOptions = AllRequired<Omit<BaseClientOptions, 'branch'>> & {\n branch: () => Promise<string | undefined>;\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const buildClient = <Plugins extends Record<string, XataPlugin> = {}>(plugins?: Plugins) =>\n class {\n #branch: BranchStrategyValue;\n #options: SafeOptions;\n\n db: SchemaPluginResult<any>;\n search: SearchPluginResult<any>;\n\n constructor(options: BaseClientOptions = {}, schemaTables?: Schemas.Table[]) {\n const safeOptions = this.#parseOptions(options);\n this.#options = safeOptions;\n\n const pluginOptions: XataPluginOptions = {\n getFetchProps: () => this.#getFetchProps(safeOptions),\n cache: safeOptions.cache,\n trace: safeOptions.trace\n };\n\n const db = new SchemaPlugin(schemaTables).build(pluginOptions);\n const search = new SearchPlugin(db, schemaTables).build(pluginOptions);\n\n // We assign the namespaces after creating in case the user overrides the db plugin\n this.db = db;\n this.search = search;\n\n for (const [key, namespace] of Object.entries(plugins ?? {})) {\n if (namespace === undefined) continue;\n const result = namespace.build(pluginOptions);\n\n if (result instanceof Promise) {\n void result.then((namespace: unknown) => {\n // @ts-ignore\n this[key] = namespace;\n });\n } else {\n // @ts-ignore\n this[key] = result;\n }\n }\n }\n\n public async getConfig() {\n const databaseURL = this.#options.databaseURL;\n const branch = await this.#options.branch();\n\n return { databaseURL, branch };\n }\n\n #parseOptions(options?: BaseClientOptions): SafeOptions {\n const fetch = getFetchImplementation(options?.fetch);\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });\n const trace = options?.trace ?? defaultTrace;\n const branch = async () =>\n options?.branch !== undefined\n ? await this.#evaluateBranch(options.branch)\n : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });\n\n if (!apiKey) {\n throw new Error('Option apiKey is required');\n }\n\n if (!databaseURL) {\n throw new Error('Option databaseURL is required');\n }\n\n return { fetch, databaseURL, apiKey, branch, cache, trace };\n }\n\n async #getFetchProps({ fetch, apiKey, databaseURL, branch, trace }: SafeOptions): Promise<FetcherExtraProps> {\n const branchValue = await this.#evaluateBranch(branch);\n if (!branchValue) throw new Error('Unable to resolve branch value');\n\n return {\n fetchImpl: fetch,\n apiKey,\n apiUrl: '',\n // Instead of using workspace and dbBranch, we inject a probably CNAME'd URL\n workspacesApiUrl: (path, params) => {\n const hasBranch = params.dbBranchName ?? params.branch;\n const newPath = path.replace(/^\\/db\\/[^/]+/, hasBranch ? `:${branchValue}` : '');\n return databaseURL + newPath;\n },\n trace\n };\n }\n\n async #evaluateBranch(param?: BranchStrategyOption): Promise<string | undefined> {\n if (this.#branch) return this.#branch;\n if (param === undefined) return undefined;\n\n const strategies = Array.isArray(param) ? [...param] : [param];\n\n const evaluateBranch = async (strategy: BranchStrategy) => {\n return isBranchStrategyBuilder(strategy) ? await strategy() : strategy;\n };\n\n for await (const strategy of strategies) {\n const branch = await evaluateBranch(strategy);\n if (branch) {\n this.#branch = branch;\n return branch;\n }\n }\n }\n } as unknown as ClientConstructor<Plugins>;\n\nexport interface ClientConstructor<Plugins extends Record<string, XataPlugin>> {\n new <T extends readonly BaseSchema[]>(options?: Partial<BaseClientOptions>, schemaTables?: T): Omit<\n {\n db: Awaited<ReturnType<SchemaPlugin<SchemaInference<NonNullable<typeof schemaTables>>>['build']>>;\n search: Awaited<ReturnType<SearchPlugin<SchemaInference<NonNullable<typeof schemaTables>>>['build']>>;\n },\n keyof Plugins\n > & {\n [Key in StringKeys<NonNullable<Plugins>>]: Awaited<ReturnType<NonNullable<Plugins>[Key]['build']>>;\n } & {\n getConfig(): Promise<{\n databaseURL: string;\n branch: string;\n }>;\n };\n}\n\nexport class BaseClient extends buildClient()<[]> {}\n","// These will be used to set special fields to serialized objects.\n// So objects should not use this field names. I think that's fine. Another approach would be to generate two objects:\n// One containing the \"data tree\" and another containing the a tree with the type information.\nconst META = '__';\nconst VALUE = '___';\n\n// TODO: Add types for the serializer\nexport class Serializer {\n classes: Record<string, any> = {};\n\n add(clazz: any) {\n this.classes[clazz.name] = clazz;\n }\n\n toJSON<T>(data: T): string {\n // We are not using JSON.stringify() and the replacer function here, because the replacer receives\n // the result of toJSON() if the object has a toJSON() method. This is a problem for the Date type:\n // we get a string, because Date.toJSON() returns the date formatted into a ISO string alreayd,\n // so it's not possible to guess the type of the original object.\n function visit(obj: any): any {\n if (Array.isArray(obj)) return obj.map(visit);\n\n const type = typeof obj;\n if (type === 'undefined') return { [META]: 'undefined' };\n if (type === 'bigint') return { [META]: 'bigint', [VALUE]: obj.toString() };\n if (obj === null || type !== 'object') return obj;\n\n const constructor = obj.constructor;\n const o: Record<string, any> = { [META]: constructor.name };\n for (const [key, value] of Object.entries(obj)) {\n o[key] = visit(value);\n }\n if (constructor === Date) o[VALUE] = obj.toISOString();\n if (constructor === Map) o[VALUE] = Object.fromEntries(obj);\n if (constructor === Set) o[VALUE] = [...obj];\n return o;\n }\n\n return JSON.stringify(visit(data));\n }\n\n fromJSON<T>(json: string): T {\n return JSON.parse(json, (key, value) => {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const { [META]: clazz, [VALUE]: val, ...rest } = value;\n const constructor = this.classes[clazz];\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (constructor) {\n return Object.assign(Object.create(constructor.prototype), rest);\n }\n if (clazz === 'Date') return new Date(val);\n if (clazz === 'Set') return new Set(val);\n if (clazz === 'Map') return new Map(Object.entries(val));\n if (clazz === 'bigint') return BigInt(val);\n // TODO: this is ignored. In order to support undefined we'd need to traverse the JSON tree ourselves.\n // Instead of using the JSON.parse() reviver argument.\n if (clazz === 'undefined') return undefined;\n return rest;\n }\n return value;\n });\n }\n}\n\nconst defaultSerializer = new Serializer();\n\nexport const serialize = <T>(data: T): string => {\n return defaultSerializer.toJSON<T>(data);\n};\n\nexport const deserialize = <T>(json: string): T => {\n return defaultSerializer.fromJSON<T>(json);\n};\n","import { deserialize, serialize } from '../serializer';\nimport { Request } from '../util/request';\n\ntype XataWorkerContext<XataClient> = { xata: XataClient; request: Request; env: Record<string, string | undefined> };\n\ntype RemoveFirst<T> = T extends [any, ...infer U] ? U : never;\n\ntype WorkerRunnerConfig = {\n workspace: string;\n worker: string;\n};\n\nexport function buildWorkerRunner<XataClient>(config: WorkerRunnerConfig) {\n return function xataWorker<WorkerFunction extends (ctx: XataWorkerContext<XataClient>, ...args: any[]) => any>(\n name: string,\n _worker: WorkerFunction\n ) {\n return async (...args: RemoveFirst<Parameters<WorkerFunction>>): Promise<Awaited<ReturnType<typeof _worker>>> => {\n const url =\n process.env.NODE_ENV === 'development'\n ? `http://localhost:64749/${name}`\n : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;\n\n // @ts-ignore - This is a browser only feature - fetch will be defined in the browser\n const result = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: serialize({ args })\n });\n\n // TODO: Detect if not compiled yet (+ other errors)\n\n const text = await result.text();\n return deserialize<any>(text);\n };\n };\n}\n","export class XataError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.status = status;\n }\n}\n\nexport * from './api';\nexport * from './plugins';\nexport * from './client';\nexport * from './schema';\nexport * from './search';\nexport * from './serializer';\nexport * from './util/config';\nexport * from './util/apiKey';\nexport * from './workers';\n"],"names":["fetch","__accessCheck","__privateGet","__privateAdd","__privateSet","_table","__privateMethod","_schemaTables","_getSchemaTables","getSchemaTables_fn"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/schema/tracing.ts","../src/util/lang.ts","../src/util/environment.ts","../src/util/apiKey.ts","../src/util/fetch.ts","../src/version.ts","../src/api/errors.ts","../src/api/fetcher.ts","../src/api/components.ts","../src/api/providers.ts","../src/api/client.ts","../src/api/index.ts","../src/plugins.ts","../src/schema/pagination.ts","../src/schema/query.ts","../src/schema/record.ts","../src/schema/sorting.ts","../src/schema/repository.ts","../src/schema/cache.ts","../src/schema/operators.ts","../src/schema/index.ts","../src/search/index.ts","../src/util/branches.ts","../src/util/config.ts","../src/client.ts","../src/serializer/index.ts","../src/workers/index.ts","../src/index.ts"],"sourcesContent":["export type AttributeDictionary = Record<string, string | number | boolean | undefined>;\n\nexport type TraceFunction = <T>(\n name: string,\n fn: (options: { setAttributes: (attrs: AttributeDictionary) => void }) => T,\n options?: AttributeDictionary\n) => Promise<T>;\n\nexport const defaultTrace: TraceFunction = async <T>(\n _name: string,\n fn: (options: { setAttributes: (attrs: Record<string, string | number | boolean | undefined>) => void }) => T,\n _options?: Record<string, any>\n): Promise<T> => {\n return await fn({\n setAttributes: () => {\n return;\n }\n });\n};\n\nexport const TraceAttributes = {\n KIND: 'xata.trace.kind',\n\n VERSION: 'xata.sdk.version',\n\n TABLE: 'xata.table',\n\n HTTP_REQUEST_ID: 'http.request_id',\n HTTP_STATUS_CODE: 'http.status_code',\n HTTP_HOST: 'http.host',\n HTTP_SCHEME: 'http.scheme',\n HTTP_USER_AGENT: 'http.user_agent',\n HTTP_METHOD: 'http.method',\n HTTP_URL: 'http.url',\n HTTP_ROUTE: 'http.route',\n HTTP_TARGET: 'http.target'\n};\n","function notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function compact<T>(arr: Array<T | null | undefined>): T[] {\n return arr.filter(notEmpty);\n}\n\nexport function compactObject<T>(obj: Record<string, T | null | undefined>): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => notEmpty(value))) as Record<string, T>;\n}\n\nexport type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport function isObject(value: any): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function isString(value: any): value is string {\n return isDefined(value) && typeof value === 'string';\n}\n\nexport function isStringArray(value: any): value is string[] {\n return isDefined(value) && Array.isArray(value) && value.every(isString);\n}\n\nexport function toBase64(value: string): string {\n try {\n return btoa(value);\n } catch (err) {\n const buf = Buffer; // Avoid \"A Node.js API is used which is not supported in the Edge Runtime\" in Vercel Edge middleware\n return buf.from(value).toString('base64');\n }\n}\n","// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path=\"../types/global-node.d.ts\"/>\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path=\"../types/global-variables.d.ts\"/>\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path=\"../types/global-deno.d.ts\"/>\n\nimport { isObject } from './lang';\n\ninterface Environment {\n apiKey: string | undefined;\n databaseURL: string | undefined;\n branch: string | undefined;\n envBranch: string | undefined;\n fallbackBranch: string | undefined;\n}\n\nexport function getEnvironment(): Environment {\n // Node.js: process.env\n try {\n if (isObject(process) && isObject(process.env)) {\n return {\n apiKey: process.env.XATA_API_KEY ?? getGlobalApiKey(),\n databaseURL: process.env.XATA_DATABASE_URL ?? getGlobalDatabaseURL(),\n branch: process.env.XATA_BRANCH ?? getGlobalBranch(),\n envBranch: process.env.VERCEL_GIT_COMMIT_REF ?? process.env.CF_PAGES_BRANCH ?? process.env.BRANCH,\n fallbackBranch: process.env.XATA_FALLBACK_BRANCH ?? getGlobalFallbackBranch()\n };\n }\n } catch (err) {\n // Ignore: Should never happen\n }\n\n try {\n // Deno: Deno.env.get\n if (isObject(Deno) && isObject(Deno.env)) {\n return {\n apiKey: Deno.env.get('XATA_API_KEY') ?? getGlobalApiKey(),\n databaseURL: Deno.env.get('XATA_DATABASE_URL') ?? getGlobalDatabaseURL(),\n branch: Deno.env.get('XATA_BRANCH') ?? getGlobalBranch(),\n envBranch: Deno.env.get('VERCEL_GIT_COMMIT_REF') ?? Deno.env.get('CF_PAGES_BRANCH') ?? Deno.env.get('BRANCH'),\n fallbackBranch: Deno.env.get('XATA_FALLBACK_BRANCH') ?? getGlobalFallbackBranch()\n };\n }\n } catch (err) {\n // Ignore: Will fail if not using --allow-env\n }\n\n return {\n apiKey: getGlobalApiKey(),\n databaseURL: getGlobalDatabaseURL(),\n branch: getGlobalBranch(),\n envBranch: undefined,\n fallbackBranch: getGlobalFallbackBranch()\n };\n}\n\nfunction getGlobalApiKey(): string | undefined {\n try {\n return XATA_API_KEY;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction getGlobalDatabaseURL(): string | undefined {\n try {\n return XATA_DATABASE_URL;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction getGlobalBranch(): string | undefined {\n try {\n return XATA_BRANCH;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction getGlobalFallbackBranch(): string | undefined {\n try {\n return XATA_FALLBACK_BRANCH;\n } catch (err) {\n return undefined;\n }\n}\n\nexport async function getGitBranch(): Promise<string | undefined> {\n const cmd = ['git', 'branch', '--show-current'];\n const fullCmd = cmd.join(' ');\n\n // Avoid \"Detected a Node builtin module import while Node compatibility is disabled\" in CloudFlare Workers\n const nodeModule = ['child', 'process'].join('_');\n\n const execOptions = { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] };\n\n // Node.js: child_process.execSync\n try {\n // CJS\n if (typeof require === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require(nodeModule).execSync(fullCmd, execOptions).trim();\n }\n\n // ESM\n const { execSync } = await import(nodeModule);\n return execSync(fullCmd, execOptions).toString().trim();\n } catch (err) {\n // Ignore\n }\n\n // Deno: Deno.run\n try {\n if (isObject(Deno)) {\n const process = Deno.run({ cmd, stdout: 'piped', stderr: 'null' });\n return new TextDecoder().decode(await process.output()).trim();\n }\n } catch (err) {\n // Ignore: Will fail if not using --allow-run\n }\n}\n","import { getEnvironment } from './environment';\n\nexport function getAPIKey() {\n try {\n const { apiKey } = getEnvironment();\n return apiKey;\n } catch (err) {\n return undefined;\n }\n}\n","import { FetchImpl } from '../api/fetcher';\n\nexport function getFetchImplementation(userFetch?: FetchImpl) {\n const globalFetch = typeof fetch !== 'undefined' ? fetch : undefined;\n const fetchImpl = userFetch ?? globalFetch;\n if (!fetchImpl) {\n /** @todo add a link after docs exist */\n throw new Error(\n `Couldn't find \\`fetch\\`. Install a fetch implementation such as \\`node-fetch\\` and pass it explicitly.`\n );\n }\n return fetchImpl;\n}\n","export const VERSION = '0.18.0';","import { Responses } from '.';\nimport { isObject, isString } from '../util/lang';\n\n// Polyfill for TypeScript < 4.6\nclass ErrorWithCause extends Error {\n cause?: Error;\n\n constructor(message?: string, options?: { cause?: Error }) {\n // @ts-ignore - Options didn't exist before 4.6\n super(message, options);\n }\n}\n\nexport class FetcherError extends ErrorWithCause {\n public status: number | string;\n public requestId: string | undefined;\n public errors: Responses.BulkError['errors'] | undefined;\n\n constructor(status: number, data?: unknown, requestId?: string) {\n super(getMessage(data));\n\n this.status = status;\n this.errors = isBulkError(data) ? data.errors : undefined;\n this.requestId = requestId;\n\n if (data instanceof Error) {\n this.stack = data.stack;\n this.cause = (data as ErrorWithCause).cause;\n }\n }\n\n toString() {\n const error = super.toString();\n\n return `[${this.status}] (${this.requestId ?? 'Unknown'}): ${error}`;\n }\n}\n\nexport type PossibleErrors =\n | Responses.BadRequestError\n | Responses.AuthError\n | Responses.SimpleError\n | Responses.BulkError;\n\nfunction isBulkError(error: any): error is Responses.BulkError {\n return isObject(error) && Array.isArray(error.errors);\n}\n\nfunction isErrorWithMessage(\n error: any\n): error is Responses.BadRequestError | Responses.SimpleError | Responses.AuthError {\n return isObject(error) && isString(error.message);\n}\n\nfunction getMessage(data?: unknown): string {\n if (data instanceof Error) {\n return data.message;\n } else if (isString(data)) {\n return data;\n } else if (isErrorWithMessage(data)) {\n return data.message;\n } else if (isBulkError(data)) {\n return 'Bulk operation failed';\n } else {\n return 'Unexpected error';\n }\n}\n","import { TraceAttributes, TraceFunction } from '../schema/tracing';\nimport { VERSION } from '../version';\nimport { FetcherError, PossibleErrors } from './errors';\n\nconst resolveUrl = (\n url: string,\n queryParams: Record<string, any> = {},\n pathParams: Partial<Record<string, string | number>> = {}\n) => {\n // Remove nulls and undefineds from query params\n const cleanQueryParams = Object.entries(queryParams).reduce((acc, [key, value]) => {\n if (value === undefined || value === null) return acc;\n return { ...acc, [key]: value };\n }, {} as Record<string, any>);\n\n const query = new URLSearchParams(cleanQueryParams).toString();\n const queryString = query.length > 0 ? `?${query}` : '';\n\n // We need to encode the path params because they can contain special characters\n // Special case, `:` does not need to be encoded as we use it as a separator\n const cleanPathParams = Object.entries(pathParams).reduce((acc, [key, value]) => {\n return { ...acc, [key]: encodeURIComponent(String(value ?? '')).replace('%3A', ':') };\n }, {} as Record<string, string>);\n\n return url.replace(/\\{\\w*\\}/g, (key) => cleanPathParams[key.slice(1, -1)]) + queryString;\n};\n\n// Typed only the subset of the spec we actually use (to be able to build a simple mock)\nexport type FetchImpl = (\n url: string,\n init?: { body?: string; headers?: Record<string, string>; method?: string }\n) => Promise<{\n ok: boolean;\n status: number;\n url: string;\n json(): Promise<any>;\n headers?: {\n get(name: string): string | null;\n };\n}>;\n\nexport type WorkspaceApiUrlBuilder = (path: string, pathParams: Partial<Record<string, string | number>>) => string;\n\nexport type FetcherExtraProps = {\n apiUrl: string;\n workspacesApiUrl: string | WorkspaceApiUrlBuilder;\n fetchImpl: FetchImpl;\n apiKey: string;\n trace: TraceFunction;\n};\n\nexport type ErrorWrapper<TError> = TError | { status: 'unknown'; payload: string };\n\nexport type FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> = {\n url: string;\n method: string;\n body?: TBody;\n headers?: THeaders;\n queryParams?: TQueryParams;\n pathParams?: TPathParams;\n} & FetcherExtraProps;\n\nfunction buildBaseUrl({\n path,\n workspacesApiUrl,\n apiUrl,\n pathParams\n}: {\n path: string;\n workspacesApiUrl: string | WorkspaceApiUrlBuilder;\n apiUrl: string;\n pathParams?: Partial<Record<string, string | number>>;\n}): string {\n if (pathParams?.workspace === undefined) return `${apiUrl}${path}`;\n\n const url = typeof workspacesApiUrl === 'string' ? `${workspacesApiUrl}${path}` : workspacesApiUrl(path, pathParams);\n return url.replace('{workspaceId}', String(pathParams.workspace));\n}\n\n// The host header is needed by Node.js on localhost.\n// It is ignored by fetch() in the frontend\nfunction hostHeader(url: string): { Host?: string } {\n const pattern = /.*:\\/\\/(?<host>[^/]+).*/;\n const { groups } = pattern.exec(url) ?? {};\n\n return groups?.host ? { Host: groups.host } : {};\n}\n\nexport async function fetch<\n TData,\n TError extends ErrorWrapper<{ status: unknown; payload: PossibleErrors }>,\n TBody extends Record<string, unknown> | undefined | null,\n THeaders extends Record<string, unknown>,\n TQueryParams extends Record<string, unknown>,\n TPathParams extends Partial<Record<string, string | number>>\n>({\n url: path,\n method,\n body,\n headers,\n pathParams,\n queryParams,\n fetchImpl,\n apiKey,\n apiUrl,\n workspacesApiUrl,\n trace\n}: FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> & FetcherExtraProps): Promise<TData> {\n return trace(\n `${method.toUpperCase()} ${path}`,\n async ({ setAttributes }) => {\n const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });\n const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);\n\n // Node.js on localhost won't resolve localhost subdomains unless mapped in /etc/hosts\n // So, instead, we use localhost without subdomains, but will add a Host header\n const url = fullUrl.includes('localhost') ? fullUrl.replace(/^[^.]+\\./, 'http://') : fullUrl;\n setAttributes({\n [TraceAttributes.HTTP_URL]: url,\n [TraceAttributes.HTTP_TARGET]: resolveUrl(path, queryParams, pathParams)\n });\n\n const response = await fetchImpl(url, {\n method: method.toUpperCase(),\n body: body ? JSON.stringify(body) : undefined,\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': `Xata client-ts/${VERSION}`,\n ...headers,\n ...hostHeader(fullUrl),\n Authorization: `Bearer ${apiKey}`\n }\n });\n\n // No content\n if (response.status === 204) {\n return {} as unknown as TData;\n }\n\n const { host, protocol } = parseUrl(response.url);\n const requestId = response.headers?.get('x-request-id') ?? undefined;\n setAttributes({\n [TraceAttributes.KIND]: 'http',\n [TraceAttributes.HTTP_REQUEST_ID]: requestId,\n [TraceAttributes.HTTP_STATUS_CODE]: response.status,\n [TraceAttributes.HTTP_HOST]: host,\n [TraceAttributes.HTTP_SCHEME]: protocol?.replace(':', '')\n });\n\n try {\n const jsonResponse = await response.json();\n\n if (response.ok) {\n return jsonResponse;\n }\n\n throw new FetcherError(response.status, jsonResponse as TError['payload'], requestId);\n } catch (error) {\n throw new FetcherError(response.status, error, requestId);\n }\n },\n { [TraceAttributes.HTTP_METHOD]: method.toUpperCase(), [TraceAttributes.HTTP_ROUTE]: path }\n );\n}\n\nfunction parseUrl(url: string): { host?: string; protocol?: string } {\n try {\n const { host, protocol } = new URL(url);\n\n return { host, protocol };\n } catch (error) {\n return {};\n }\n}\n","/**\n * Generated by @openapi-codegen\n *\n * @version 1.0\n */\nimport type * as Fetcher from './fetcher';\nimport { fetch, FetcherExtraProps } from './fetcher';\nimport type * as Schemas from './schemas';\nimport type * as Responses from './responses';\n\nexport type GetUserError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetUserVariables = FetcherExtraProps;\n\n/**\n * Return details of the user making the request\n */\nexport const getUser = (variables: GetUserVariables) =>\n fetch<Schemas.UserWithID, GetUserError, undefined, {}, {}, {}>({ url: '/user', method: 'get', ...variables });\n\nexport type UpdateUserError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateUserVariables = {\n body: Schemas.User;\n} & FetcherExtraProps;\n\n/**\n * Update user info\n */\nexport const updateUser = (variables: UpdateUserVariables) =>\n fetch<Schemas.UserWithID, UpdateUserError, Schemas.User, {}, {}, {}>({ url: '/user', method: 'put', ...variables });\n\nexport type DeleteUserError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteUserVariables = FetcherExtraProps;\n\n/**\n * Delete the user making the request\n */\nexport const deleteUser = (variables: DeleteUserVariables) =>\n fetch<undefined, DeleteUserError, undefined, {}, {}, {}>({ url: '/user', method: 'delete', ...variables });\n\nexport type GetUserAPIKeysError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetUserAPIKeysResponse = {\n keys: {\n name: string;\n createdAt: Schemas.DateTime;\n }[];\n};\n\nexport type GetUserAPIKeysVariables = FetcherExtraProps;\n\n/**\n * Retrieve a list of existing user API keys\n */\nexport const getUserAPIKeys = (variables: GetUserAPIKeysVariables) =>\n fetch<GetUserAPIKeysResponse, GetUserAPIKeysError, undefined, {}, {}, {}>({\n url: '/user/keys',\n method: 'get',\n ...variables\n });\n\nexport type CreateUserAPIKeyPathParams = {\n /*\n * API Key name\n */\n keyName: Schemas.APIKeyName;\n};\n\nexport type CreateUserAPIKeyError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateUserAPIKeyResponse = {\n name: string;\n key: string;\n createdAt: Schemas.DateTime;\n};\n\nexport type CreateUserAPIKeyVariables = {\n pathParams: CreateUserAPIKeyPathParams;\n} & FetcherExtraProps;\n\n/**\n * Create and return new API key\n */\nexport const createUserAPIKey = (variables: CreateUserAPIKeyVariables) =>\n fetch<CreateUserAPIKeyResponse, CreateUserAPIKeyError, undefined, {}, {}, CreateUserAPIKeyPathParams>({\n url: '/user/keys/{keyName}',\n method: 'post',\n ...variables\n });\n\nexport type DeleteUserAPIKeyPathParams = {\n /*\n * API Key name\n */\n keyName: Schemas.APIKeyName;\n};\n\nexport type DeleteUserAPIKeyError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteUserAPIKeyVariables = {\n pathParams: DeleteUserAPIKeyPathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete an existing API key\n */\nexport const deleteUserAPIKey = (variables: DeleteUserAPIKeyVariables) =>\n fetch<undefined, DeleteUserAPIKeyError, undefined, {}, {}, DeleteUserAPIKeyPathParams>({\n url: '/user/keys/{keyName}',\n method: 'delete',\n ...variables\n });\n\nexport type CreateWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateWorkspaceVariables = {\n body: Schemas.WorkspaceMeta;\n} & FetcherExtraProps;\n\n/**\n * Creates a new workspace with the user requesting it as its single owner.\n */\nexport const createWorkspace = (variables: CreateWorkspaceVariables) =>\n fetch<Schemas.Workspace, CreateWorkspaceError, Schemas.WorkspaceMeta, {}, {}, {}>({\n url: '/workspaces',\n method: 'post',\n ...variables\n });\n\nexport type GetWorkspacesListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetWorkspacesListResponse = {\n workspaces: {\n id: Schemas.WorkspaceID;\n name: string;\n slug: string;\n role: Schemas.Role;\n }[];\n};\n\nexport type GetWorkspacesListVariables = FetcherExtraProps;\n\n/**\n * Retrieve the list of workspaces the user belongs to\n */\nexport const getWorkspacesList = (variables: GetWorkspacesListVariables) =>\n fetch<GetWorkspacesListResponse, GetWorkspacesListError, undefined, {}, {}, {}>({\n url: '/workspaces',\n method: 'get',\n ...variables\n });\n\nexport type GetWorkspacePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type GetWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetWorkspaceVariables = {\n pathParams: GetWorkspacePathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve workspace info from a workspace ID\n */\nexport const getWorkspace = (variables: GetWorkspaceVariables) =>\n fetch<Schemas.Workspace, GetWorkspaceError, undefined, {}, {}, GetWorkspacePathParams>({\n url: '/workspaces/{workspaceId}',\n method: 'get',\n ...variables\n });\n\nexport type UpdateWorkspacePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type UpdateWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateWorkspaceVariables = {\n body: Schemas.WorkspaceMeta;\n pathParams: UpdateWorkspacePathParams;\n} & FetcherExtraProps;\n\n/**\n * Update workspace info\n */\nexport const updateWorkspace = (variables: UpdateWorkspaceVariables) =>\n fetch<Schemas.Workspace, UpdateWorkspaceError, Schemas.WorkspaceMeta, {}, {}, UpdateWorkspacePathParams>({\n url: '/workspaces/{workspaceId}',\n method: 'put',\n ...variables\n });\n\nexport type DeleteWorkspacePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type DeleteWorkspaceError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteWorkspaceVariables = {\n pathParams: DeleteWorkspacePathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete the workspace with the provided ID\n */\nexport const deleteWorkspace = (variables: DeleteWorkspaceVariables) =>\n fetch<undefined, DeleteWorkspaceError, undefined, {}, {}, DeleteWorkspacePathParams>({\n url: '/workspaces/{workspaceId}',\n method: 'delete',\n ...variables\n });\n\nexport type GetWorkspaceMembersListPathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type GetWorkspaceMembersListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetWorkspaceMembersListVariables = {\n pathParams: GetWorkspaceMembersListPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve the list of members of the given workspace\n */\nexport const getWorkspaceMembersList = (variables: GetWorkspaceMembersListVariables) =>\n fetch<Schemas.WorkspaceMembers, GetWorkspaceMembersListError, undefined, {}, {}, GetWorkspaceMembersListPathParams>({\n url: '/workspaces/{workspaceId}/members',\n method: 'get',\n ...variables\n });\n\nexport type UpdateWorkspaceMemberRolePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * UserID\n */\n userId: Schemas.UserID;\n};\n\nexport type UpdateWorkspaceMemberRoleError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateWorkspaceMemberRoleRequestBody = {\n role: Schemas.Role;\n};\n\nexport type UpdateWorkspaceMemberRoleVariables = {\n body: UpdateWorkspaceMemberRoleRequestBody;\n pathParams: UpdateWorkspaceMemberRolePathParams;\n} & FetcherExtraProps;\n\n/**\n * Update a workspace member role. Workspaces must always have at least one owner, so this operation will fail if trying to remove owner role from the last owner in the workspace.\n */\nexport const updateWorkspaceMemberRole = (variables: UpdateWorkspaceMemberRoleVariables) =>\n fetch<\n undefined,\n UpdateWorkspaceMemberRoleError,\n UpdateWorkspaceMemberRoleRequestBody,\n {},\n {},\n UpdateWorkspaceMemberRolePathParams\n >({ url: '/workspaces/{workspaceId}/members/{userId}', method: 'put', ...variables });\n\nexport type RemoveWorkspaceMemberPathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * UserID\n */\n userId: Schemas.UserID;\n};\n\nexport type RemoveWorkspaceMemberError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type RemoveWorkspaceMemberVariables = {\n pathParams: RemoveWorkspaceMemberPathParams;\n} & FetcherExtraProps;\n\n/**\n * Remove the member from the workspace\n */\nexport const removeWorkspaceMember = (variables: RemoveWorkspaceMemberVariables) =>\n fetch<undefined, RemoveWorkspaceMemberError, undefined, {}, {}, RemoveWorkspaceMemberPathParams>({\n url: '/workspaces/{workspaceId}/members/{userId}',\n method: 'delete',\n ...variables\n });\n\nexport type InviteWorkspaceMemberPathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n};\n\nexport type InviteWorkspaceMemberError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 409;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type InviteWorkspaceMemberRequestBody = {\n /*\n * @format email\n */\n email: string;\n role: Schemas.Role;\n};\n\nexport type InviteWorkspaceMemberVariables = {\n body: InviteWorkspaceMemberRequestBody;\n pathParams: InviteWorkspaceMemberPathParams;\n} & FetcherExtraProps;\n\n/**\n * Invite some user to join the workspace with the given role\n */\nexport const inviteWorkspaceMember = (variables: InviteWorkspaceMemberVariables) =>\n fetch<\n Schemas.WorkspaceInvite,\n InviteWorkspaceMemberError,\n InviteWorkspaceMemberRequestBody,\n {},\n {},\n InviteWorkspaceMemberPathParams\n >({ url: '/workspaces/{workspaceId}/invites', method: 'post', ...variables });\n\nexport type UpdateWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite identifier\n */\n inviteId: Schemas.InviteID;\n};\n\nexport type UpdateWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateWorkspaceMemberInviteRequestBody = {\n role: Schemas.Role;\n};\n\nexport type UpdateWorkspaceMemberInviteVariables = {\n body: UpdateWorkspaceMemberInviteRequestBody;\n pathParams: UpdateWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * This operation provides a way to update an existing invite. Updates are performed in-place; they do not change the invite link, the expiry time, nor do they re-notify the recipient of the invite.\n */\nexport const updateWorkspaceMemberInvite = (variables: UpdateWorkspaceMemberInviteVariables) =>\n fetch<\n Schemas.WorkspaceInvite,\n UpdateWorkspaceMemberInviteError,\n UpdateWorkspaceMemberInviteRequestBody,\n {},\n {},\n UpdateWorkspaceMemberInvitePathParams\n >({ url: '/workspaces/{workspaceId}/invites/{inviteId}', method: 'patch', ...variables });\n\nexport type CancelWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite identifier\n */\n inviteId: Schemas.InviteID;\n};\n\nexport type CancelWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CancelWorkspaceMemberInviteVariables = {\n pathParams: CancelWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * This operation provides a way to cancel invites by deleting them. Already accepted invites cannot be deleted.\n */\nexport const cancelWorkspaceMemberInvite = (variables: CancelWorkspaceMemberInviteVariables) =>\n fetch<undefined, CancelWorkspaceMemberInviteError, undefined, {}, {}, CancelWorkspaceMemberInvitePathParams>({\n url: '/workspaces/{workspaceId}/invites/{inviteId}',\n method: 'delete',\n ...variables\n });\n\nexport type ResendWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite identifier\n */\n inviteId: Schemas.InviteID;\n};\n\nexport type ResendWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ResendWorkspaceMemberInviteVariables = {\n pathParams: ResendWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * This operation provides a way to resend an Invite notification. Invite notifications can only be sent for Invites not yet accepted.\n */\nexport const resendWorkspaceMemberInvite = (variables: ResendWorkspaceMemberInviteVariables) =>\n fetch<undefined, ResendWorkspaceMemberInviteError, undefined, {}, {}, ResendWorkspaceMemberInvitePathParams>({\n url: '/workspaces/{workspaceId}/invites/{inviteId}/resend',\n method: 'post',\n ...variables\n });\n\nexport type AcceptWorkspaceMemberInvitePathParams = {\n /*\n * Workspace name\n */\n workspaceId: Schemas.WorkspaceID;\n /*\n * Invite Key (secret) for the invited user\n */\n inviteKey: Schemas.InviteKey;\n};\n\nexport type AcceptWorkspaceMemberInviteError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type AcceptWorkspaceMemberInviteVariables = {\n pathParams: AcceptWorkspaceMemberInvitePathParams;\n} & FetcherExtraProps;\n\n/**\n * Accept the invitation to join a workspace. If the operation succeeds the user will be a member of the workspace\n */\nexport const acceptWorkspaceMemberInvite = (variables: AcceptWorkspaceMemberInviteVariables) =>\n fetch<undefined, AcceptWorkspaceMemberInviteError, undefined, {}, {}, AcceptWorkspaceMemberInvitePathParams>({\n url: '/workspaces/{workspaceId}/invites/{inviteKey}/accept',\n method: 'post',\n ...variables\n });\n\nexport type GetDatabaseListPathParams = {\n workspace: string;\n};\n\nexport type GetDatabaseListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type GetDatabaseListVariables = {\n pathParams: GetDatabaseListPathParams;\n} & FetcherExtraProps;\n\n/**\n * List all databases available in your Workspace.\n */\nexport const getDatabaseList = (variables: GetDatabaseListVariables) =>\n fetch<Schemas.ListDatabasesResponse, GetDatabaseListError, undefined, {}, {}, GetDatabaseListPathParams>({\n url: '/dbs',\n method: 'get',\n ...variables\n });\n\nexport type GetBranchListPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type GetBranchListError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchListVariables = {\n pathParams: GetBranchListPathParams;\n} & FetcherExtraProps;\n\n/**\n * List all available Branches\n */\nexport const getBranchList = (variables: GetBranchListVariables) =>\n fetch<Schemas.ListBranchesResponse, GetBranchListError, undefined, {}, {}, GetBranchListPathParams>({\n url: '/dbs/{dbName}',\n method: 'get',\n ...variables\n });\n\nexport type CreateDatabasePathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type CreateDatabaseError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type CreateDatabaseResponse = {\n /*\n * @minLength 1\n */\n databaseName: string;\n branchName?: string;\n};\n\nexport type CreateDatabaseRequestBody = {\n /*\n * @minLength 1\n */\n branchName?: string;\n ui?: {\n color?: string;\n };\n metadata?: Schemas.BranchMetadata;\n};\n\nexport type CreateDatabaseVariables = {\n body?: CreateDatabaseRequestBody;\n pathParams: CreateDatabasePathParams;\n} & FetcherExtraProps;\n\n/**\n * Create Database with identifier name\n */\nexport const createDatabase = (variables: CreateDatabaseVariables) =>\n fetch<CreateDatabaseResponse, CreateDatabaseError, CreateDatabaseRequestBody, {}, {}, CreateDatabasePathParams>({\n url: '/dbs/{dbName}',\n method: 'put',\n ...variables\n });\n\nexport type DeleteDatabasePathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type DeleteDatabaseError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteDatabaseVariables = {\n pathParams: DeleteDatabasePathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete a database and all of its branches and tables permanently.\n */\nexport const deleteDatabase = (variables: DeleteDatabaseVariables) =>\n fetch<undefined, DeleteDatabaseError, undefined, {}, {}, DeleteDatabasePathParams>({\n url: '/dbs/{dbName}',\n method: 'delete',\n ...variables\n });\n\nexport type GetDatabaseMetadataPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type GetDatabaseMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetDatabaseMetadataVariables = {\n pathParams: GetDatabaseMetadataPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve metadata of the given database\n */\nexport const getDatabaseMetadata = (variables: GetDatabaseMetadataVariables) =>\n fetch<Schemas.DatabaseMetadata, GetDatabaseMetadataError, undefined, {}, {}, GetDatabaseMetadataPathParams>({\n url: '/dbs/{dbName}/metadata',\n method: 'get',\n ...variables\n });\n\nexport type UpdateDatabaseMetadataPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type UpdateDatabaseMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateDatabaseMetadataRequestBody = {\n ui?: {\n /*\n * @minLength 1\n */\n color?: string;\n };\n};\n\nexport type UpdateDatabaseMetadataVariables = {\n body?: UpdateDatabaseMetadataRequestBody;\n pathParams: UpdateDatabaseMetadataPathParams;\n} & FetcherExtraProps;\n\n/**\n * Update the color of the selected database\n */\nexport const updateDatabaseMetadata = (variables: UpdateDatabaseMetadataVariables) =>\n fetch<\n Schemas.DatabaseMetadata,\n UpdateDatabaseMetadataError,\n UpdateDatabaseMetadataRequestBody,\n {},\n {},\n UpdateDatabaseMetadataPathParams\n >({ url: '/dbs/{dbName}/metadata', method: 'patch', ...variables });\n\nexport type GetGitBranchesMappingPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type GetGitBranchesMappingError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type GetGitBranchesMappingVariables = {\n pathParams: GetGitBranchesMappingPathParams;\n} & FetcherExtraProps;\n\n/**\n * Lists all the git branches in the mapping, and their associated Xata branches.\n *\n * Example response:\n *\n * ```json\n * {\n * \"mappings\": [\n * {\n * \"gitBranch\": \"main\",\n * \"xataBranch\": \"main\"\n * },\n * {\n * \"gitBranch\": \"gitBranch1\",\n * \"xataBranch\": \"xataBranch1\"\n * }\n * {\n * \"gitBranch\": \"xataBranch2\",\n * \"xataBranch\": \"xataBranch2\"\n * }\n * ]\n * }\n * ```\n */\nexport const getGitBranchesMapping = (variables: GetGitBranchesMappingVariables) =>\n fetch<\n Schemas.ListGitBranchesResponse,\n GetGitBranchesMappingError,\n undefined,\n {},\n {},\n GetGitBranchesMappingPathParams\n >({ url: '/dbs/{dbName}/gitBranches', method: 'get', ...variables });\n\nexport type AddGitBranchesEntryPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type AddGitBranchesEntryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type AddGitBranchesEntryResponse = {\n /*\n * Warning message\n */\n warning?: string;\n};\n\nexport type AddGitBranchesEntryRequestBody = {\n /*\n * The name of the Git branch.\n */\n gitBranch: string;\n /*\n * The name of the Xata branch.\n */\n xataBranch: Schemas.BranchName;\n};\n\nexport type AddGitBranchesEntryVariables = {\n body: AddGitBranchesEntryRequestBody;\n pathParams: AddGitBranchesEntryPathParams;\n} & FetcherExtraProps;\n\n/**\n * Adds an entry to the mapping of git branches to Xata branches. The git branch and the Xata branch must be present in the body of the request. If the Xata branch doesn't exist, a 400 error is returned.\n *\n * If the git branch is already present in the mapping, the old entry is overwritten, and a warning message is included in the response. If the git branch is added and didn't exist before, the response code is 204. If the git branch existed and it was overwritten, the response code is 201.\n *\n * Example request:\n *\n * ```json\n * // POST https://tutorial-ng7s8c.xata.sh/dbs/demo/gitBranches\n * {\n * \"gitBranch\": \"fix/bug123\",\n * \"xataBranch\": \"fix_bug\"\n * }\n * ```\n */\nexport const addGitBranchesEntry = (variables: AddGitBranchesEntryVariables) =>\n fetch<\n AddGitBranchesEntryResponse,\n AddGitBranchesEntryError,\n AddGitBranchesEntryRequestBody,\n {},\n {},\n AddGitBranchesEntryPathParams\n >({ url: '/dbs/{dbName}/gitBranches', method: 'post', ...variables });\n\nexport type RemoveGitBranchesEntryPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type RemoveGitBranchesEntryQueryParams = {\n /*\n * The Git Branch to remove from the mapping\n */\n gitBranch: string;\n};\n\nexport type RemoveGitBranchesEntryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type RemoveGitBranchesEntryVariables = {\n pathParams: RemoveGitBranchesEntryPathParams;\n queryParams: RemoveGitBranchesEntryQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Removes an entry from the mapping of git branches to Xata branches. The name of the git branch must be passed as a query parameter. If the git branch is not found, the endpoint returns a 404 status code.\n *\n * Example request:\n *\n * ```json\n * // DELETE https://tutorial-ng7s8c.xata.sh/dbs/demo/gitBranches?gitBranch=fix%2Fbug123\n * ```\n */\nexport const removeGitBranchesEntry = (variables: RemoveGitBranchesEntryVariables) =>\n fetch<\n undefined,\n RemoveGitBranchesEntryError,\n undefined,\n {},\n RemoveGitBranchesEntryQueryParams,\n RemoveGitBranchesEntryPathParams\n >({ url: '/dbs/{dbName}/gitBranches', method: 'delete', ...variables });\n\nexport type ResolveBranchPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type ResolveBranchQueryParams = {\n /*\n * The Git Branch\n */\n gitBranch?: string;\n /*\n * Default branch to fallback to\n */\n fallbackBranch?: string;\n};\n\nexport type ResolveBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type ResolveBranchResponse = {\n branch: string;\n reason: {\n code: 'FOUND_IN_MAPPING' | 'BRANCH_EXISTS' | 'FALLBACK_BRANCH' | 'DEFAULT_BRANCH';\n message: string;\n };\n};\n\nexport type ResolveBranchVariables = {\n pathParams: ResolveBranchPathParams;\n queryParams?: ResolveBranchQueryParams;\n} & FetcherExtraProps;\n\n/**\n * In order to resolve the database branch, the following algorithm is used:\n * * if the `gitBranch` was provided and is found in the [git branches mapping](/api-reference/dbs/db_name/gitBranches), the associated Xata branch is returned\n * * else, if a Xata branch with the exact same name as `gitBranch` exists, return it\n * * else, if `fallbackBranch` is provided and a branch with that name exists, return it\n * * else, return the default branch of the DB (`main` or the first branch)\n *\n * Example call:\n *\n * ```json\n * // GET https://tutorial-ng7s8c.xata.sh/dbs/demo/dbs/demo/resolveBranch?gitBranch=test&fallbackBranch=tsg\n * ```\n *\n * Example response:\n *\n * ```json\n * {\n * \"branch\": \"main\",\n * \"reason\": {\n * \"code\": \"DEFAULT_BRANCH\",\n * \"message\": \"Default branch for this database (main)\"\n * }\n * }\n * ```\n */\nexport const resolveBranch = (variables: ResolveBranchVariables) =>\n fetch<ResolveBranchResponse, ResolveBranchError, undefined, {}, ResolveBranchQueryParams, ResolveBranchPathParams>({\n url: '/dbs/{dbName}/resolveBranch',\n method: 'get',\n ...variables\n });\n\nexport type ListMigrationRequestsPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type ListMigrationRequestsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ListMigrationRequestsResponse = {\n migrationRequests: Schemas.MigrationRequest[];\n meta: Schemas.RecordsMetadata;\n};\n\nexport type ListMigrationRequestsRequestBody = {\n filter?: Schemas.FilterExpression;\n sort?: Schemas.SortExpression;\n page?: Schemas.PageConfig;\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type ListMigrationRequestsVariables = {\n body?: ListMigrationRequestsRequestBody;\n pathParams: ListMigrationRequestsPathParams;\n} & FetcherExtraProps;\n\nexport const listMigrationRequests = (variables: ListMigrationRequestsVariables) =>\n fetch<\n ListMigrationRequestsResponse,\n ListMigrationRequestsError,\n ListMigrationRequestsRequestBody,\n {},\n {},\n ListMigrationRequestsPathParams\n >({ url: '/dbs/{dbName}/migrations/list', method: 'post', ...variables });\n\nexport type CreateMigrationRequestPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n workspace: string;\n};\n\nexport type CreateMigrationRequestError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateMigrationRequestResponse = {\n number: number;\n};\n\nexport type CreateMigrationRequestRequestBody = {\n /*\n * The source branch.\n */\n source: string;\n /*\n * The target branch.\n */\n target: string;\n /*\n * The title.\n */\n title: string;\n /*\n * Optional migration request description.\n */\n body?: string;\n};\n\nexport type CreateMigrationRequestVariables = {\n body: CreateMigrationRequestRequestBody;\n pathParams: CreateMigrationRequestPathParams;\n} & FetcherExtraProps;\n\nexport const createMigrationRequest = (variables: CreateMigrationRequestVariables) =>\n fetch<\n CreateMigrationRequestResponse,\n CreateMigrationRequestError,\n CreateMigrationRequestRequestBody,\n {},\n {},\n CreateMigrationRequestPathParams\n >({ url: '/dbs/{dbName}/migrations', method: 'post', ...variables });\n\nexport type GetMigrationRequestPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n /*\n * The migration request number.\n */\n mrNumber: number;\n workspace: string;\n};\n\nexport type GetMigrationRequestError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetMigrationRequestVariables = {\n pathParams: GetMigrationRequestPathParams;\n} & FetcherExtraProps;\n\nexport const getMigrationRequest = (variables: GetMigrationRequestVariables) =>\n fetch<Schemas.MigrationRequest, GetMigrationRequestError, undefined, {}, {}, GetMigrationRequestPathParams>({\n url: '/dbs/{dbName}/migrations/{mrNumber}',\n method: 'get',\n ...variables\n });\n\nexport type UpdateMigrationRequestPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n /*\n * The migration request number.\n */\n mrNumber: number;\n workspace: string;\n};\n\nexport type UpdateMigrationRequestError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateMigrationRequestRequestBody = {\n /*\n * New migration request title.\n */\n title?: string;\n /*\n * New migration request description.\n */\n body?: string;\n /*\n * Change the migration request status.\n */\n status?: 'open' | 'closed';\n};\n\nexport type UpdateMigrationRequestVariables = {\n body?: UpdateMigrationRequestRequestBody;\n pathParams: UpdateMigrationRequestPathParams;\n} & FetcherExtraProps;\n\nexport const updateMigrationRequest = (variables: UpdateMigrationRequestVariables) =>\n fetch<\n undefined,\n UpdateMigrationRequestError,\n UpdateMigrationRequestRequestBody,\n {},\n {},\n UpdateMigrationRequestPathParams\n >({ url: '/dbs/{dbName}/migrations/{mrNumber}', method: 'patch', ...variables });\n\nexport type ListMigrationRequestsCommitsPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n /*\n * The migration request number.\n */\n mrNumber: number;\n workspace: string;\n};\n\nexport type ListMigrationRequestsCommitsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ListMigrationRequestsCommitsResponse = {\n meta: {\n /*\n * last record id\n */\n cursor: string;\n /*\n * true if more records can be fetch\n */\n more: boolean;\n };\n logs: Schemas.Commit[];\n};\n\nexport type ListMigrationRequestsCommitsRequestBody = {\n page?: {\n /*\n * Query the next page that follow the cursor.\n */\n after?: string;\n /*\n * Query the previous page before the cursor.\n */\n before?: string;\n /*\n * Set page size. If the size is missing it is read from the cursor. If no cursor is given xata will choose the default page size.\n *\n * @default 20\n */\n size?: number;\n };\n};\n\nexport type ListMigrationRequestsCommitsVariables = {\n body?: ListMigrationRequestsCommitsRequestBody;\n pathParams: ListMigrationRequestsCommitsPathParams;\n} & FetcherExtraProps;\n\nexport const listMigrationRequestsCommits = (variables: ListMigrationRequestsCommitsVariables) =>\n fetch<\n ListMigrationRequestsCommitsResponse,\n ListMigrationRequestsCommitsError,\n ListMigrationRequestsCommitsRequestBody,\n {},\n {},\n ListMigrationRequestsCommitsPathParams\n >({ url: '/dbs/{dbName}/migrations/{mrNumber}/commits', method: 'post', ...variables });\n\nexport type CompareMigrationRequestPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n /*\n * The migration request number.\n */\n mrNumber: number;\n workspace: string;\n};\n\nexport type CompareMigrationRequestError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CompareMigrationRequestVariables = {\n pathParams: CompareMigrationRequestPathParams;\n} & FetcherExtraProps;\n\nexport const compareMigrationRequest = (variables: CompareMigrationRequestVariables) =>\n fetch<\n Responses.SchemaCompareResponse,\n CompareMigrationRequestError,\n undefined,\n {},\n {},\n CompareMigrationRequestPathParams\n >({ url: '/dbs/{dbName}/migrations/{mrNumber}/compare', method: 'post', ...variables });\n\nexport type GetMigrationRequestIsMergedPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n /*\n * The migration request number.\n */\n mrNumber: number;\n workspace: string;\n};\n\nexport type GetMigrationRequestIsMergedError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetMigrationRequestIsMergedResponse = {\n merged?: boolean;\n};\n\nexport type GetMigrationRequestIsMergedVariables = {\n pathParams: GetMigrationRequestIsMergedPathParams;\n} & FetcherExtraProps;\n\nexport const getMigrationRequestIsMerged = (variables: GetMigrationRequestIsMergedVariables) =>\n fetch<\n GetMigrationRequestIsMergedResponse,\n GetMigrationRequestIsMergedError,\n undefined,\n {},\n {},\n GetMigrationRequestIsMergedPathParams\n >({ url: '/dbs/{dbName}/migrations/{mrNumber}/merge', method: 'get', ...variables });\n\nexport type MergeMigrationRequestPathParams = {\n /*\n * The Database Name\n */\n dbName: Schemas.DBName;\n /*\n * The migration request number.\n */\n mrNumber: number;\n workspace: string;\n};\n\nexport type MergeMigrationRequestError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type MergeMigrationRequestVariables = {\n pathParams: MergeMigrationRequestPathParams;\n} & FetcherExtraProps;\n\nexport const mergeMigrationRequest = (variables: MergeMigrationRequestVariables) =>\n fetch<Schemas.Commit, MergeMigrationRequestError, undefined, {}, {}, MergeMigrationRequestPathParams>({\n url: '/dbs/{dbName}/migrations/{mrNumber}/merge',\n method: 'post',\n ...variables\n });\n\nexport type GetBranchDetailsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchDetailsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchDetailsVariables = {\n pathParams: GetBranchDetailsPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchDetails = (variables: GetBranchDetailsVariables) =>\n fetch<Schemas.DBBranch, GetBranchDetailsError, undefined, {}, {}, GetBranchDetailsPathParams>({\n url: '/db/{dbBranchName}',\n method: 'get',\n ...variables\n });\n\nexport type CreateBranchPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type CreateBranchQueryParams = {\n /*\n * Name of source branch to branch the new schema from\n */\n from?: string;\n};\n\nexport type CreateBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateBranchResponse = {\n /*\n * @minLength 1\n */\n databaseName: string;\n branchName: string;\n};\n\nexport type CreateBranchRequestBody = {\n /*\n * Select the branch to fork from. Defaults to 'main'\n */\n from?: string;\n metadata?: Schemas.BranchMetadata;\n};\n\nexport type CreateBranchVariables = {\n body?: CreateBranchRequestBody;\n pathParams: CreateBranchPathParams;\n queryParams?: CreateBranchQueryParams;\n} & FetcherExtraProps;\n\nexport const createBranch = (variables: CreateBranchVariables) =>\n fetch<\n CreateBranchResponse,\n CreateBranchError,\n CreateBranchRequestBody,\n {},\n CreateBranchQueryParams,\n CreateBranchPathParams\n >({ url: '/db/{dbBranchName}', method: 'put', ...variables });\n\nexport type DeleteBranchPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type DeleteBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteBranchVariables = {\n pathParams: DeleteBranchPathParams;\n} & FetcherExtraProps;\n\n/**\n * Delete the branch in the database and all its resources\n */\nexport const deleteBranch = (variables: DeleteBranchVariables) =>\n fetch<undefined, DeleteBranchError, undefined, {}, {}, DeleteBranchPathParams>({\n url: '/db/{dbBranchName}',\n method: 'delete',\n ...variables\n });\n\nexport type UpdateBranchMetadataPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type UpdateBranchMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateBranchMetadataVariables = {\n body?: Schemas.BranchMetadata;\n pathParams: UpdateBranchMetadataPathParams;\n} & FetcherExtraProps;\n\n/**\n * Update the branch metadata\n */\nexport const updateBranchMetadata = (variables: UpdateBranchMetadataVariables) =>\n fetch<undefined, UpdateBranchMetadataError, Schemas.BranchMetadata, {}, {}, UpdateBranchMetadataPathParams>({\n url: '/db/{dbBranchName}/metadata',\n method: 'put',\n ...variables\n });\n\nexport type GetBranchMetadataPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchMetadataError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchMetadataVariables = {\n pathParams: GetBranchMetadataPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchMetadata = (variables: GetBranchMetadataVariables) =>\n fetch<Schemas.BranchMetadata, GetBranchMetadataError, undefined, {}, {}, GetBranchMetadataPathParams>({\n url: '/db/{dbBranchName}/metadata',\n method: 'get',\n ...variables\n });\n\nexport type GetBranchMigrationHistoryPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchMigrationHistoryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchMigrationHistoryResponse = {\n startedFrom?: Schemas.StartedFromMetadata;\n migrations?: Schemas.BranchMigration[];\n};\n\nexport type GetBranchMigrationHistoryRequestBody = {\n limit?: number;\n startFrom?: string;\n};\n\nexport type GetBranchMigrationHistoryVariables = {\n body?: GetBranchMigrationHistoryRequestBody;\n pathParams: GetBranchMigrationHistoryPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchMigrationHistory = (variables: GetBranchMigrationHistoryVariables) =>\n fetch<\n GetBranchMigrationHistoryResponse,\n GetBranchMigrationHistoryError,\n GetBranchMigrationHistoryRequestBody,\n {},\n {},\n GetBranchMigrationHistoryPathParams\n >({ url: '/db/{dbBranchName}/migrations', method: 'get', ...variables });\n\nexport type ExecuteBranchMigrationPlanPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type ExecuteBranchMigrationPlanError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ExecuteBranchMigrationPlanRequestBody = {\n version: number;\n migration: Schemas.BranchMigration;\n};\n\nexport type ExecuteBranchMigrationPlanVariables = {\n body: ExecuteBranchMigrationPlanRequestBody;\n pathParams: ExecuteBranchMigrationPlanPathParams;\n} & FetcherExtraProps;\n\n/**\n * Apply a migration plan to the branch\n */\nexport const executeBranchMigrationPlan = (variables: ExecuteBranchMigrationPlanVariables) =>\n fetch<\n undefined,\n ExecuteBranchMigrationPlanError,\n ExecuteBranchMigrationPlanRequestBody,\n {},\n {},\n ExecuteBranchMigrationPlanPathParams\n >({ url: '/db/{dbBranchName}/migrations/execute', method: 'post', ...variables });\n\nexport type GetBranchMigrationPlanPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchMigrationPlanError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchMigrationPlanVariables = {\n body: Schemas.Schema;\n pathParams: GetBranchMigrationPlanPathParams;\n} & FetcherExtraProps;\n\n/**\n * Compute a migration plan from a target schema the branch should be migrated too.\n */\nexport const getBranchMigrationPlan = (variables: GetBranchMigrationPlanVariables) =>\n fetch<\n Responses.BranchMigrationPlan,\n GetBranchMigrationPlanError,\n Schemas.Schema,\n {},\n {},\n GetBranchMigrationPlanPathParams\n >({ url: '/db/{dbBranchName}/migrations/plan', method: 'post', ...variables });\n\nexport type CompareBranchWithUserSchemaPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type CompareBranchWithUserSchemaError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CompareBranchWithUserSchemaRequestBody = {\n schema: Schemas.Schema;\n};\n\nexport type CompareBranchWithUserSchemaVariables = {\n body: CompareBranchWithUserSchemaRequestBody;\n pathParams: CompareBranchWithUserSchemaPathParams;\n} & FetcherExtraProps;\n\nexport const compareBranchWithUserSchema = (variables: CompareBranchWithUserSchemaVariables) =>\n fetch<\n Responses.SchemaCompareResponse,\n CompareBranchWithUserSchemaError,\n CompareBranchWithUserSchemaRequestBody,\n {},\n {},\n CompareBranchWithUserSchemaPathParams\n >({ url: '/db/{dbBranchName}/schema/compare', method: 'post', ...variables });\n\nexport type CompareBranchSchemasPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Database Name\n */\n branchName: Schemas.BranchName;\n workspace: string;\n};\n\nexport type CompareBranchSchemasError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CompareBranchSchemasVariables = {\n body?: Record<string, any>;\n pathParams: CompareBranchSchemasPathParams;\n} & FetcherExtraProps;\n\nexport const compareBranchSchemas = (variables: CompareBranchSchemasVariables) =>\n fetch<\n Responses.SchemaCompareResponse,\n CompareBranchSchemasError,\n Record<string, any>,\n {},\n {},\n CompareBranchSchemasPathParams\n >({ url: '/db/{dbBranchName}/schema/compare/{branchName}', method: 'post', ...variables });\n\nexport type UpdateBranchSchemaPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type UpdateBranchSchemaError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateBranchSchemaResponse = {\n id: string;\n parentID: string;\n};\n\nexport type UpdateBranchSchemaVariables = {\n body: Schemas.Migration;\n pathParams: UpdateBranchSchemaPathParams;\n} & FetcherExtraProps;\n\nexport const updateBranchSchema = (variables: UpdateBranchSchemaVariables) =>\n fetch<UpdateBranchSchemaResponse, UpdateBranchSchemaError, Schemas.Migration, {}, {}, UpdateBranchSchemaPathParams>({\n url: '/db/{dbBranchName}/schema/update',\n method: 'post',\n ...variables\n });\n\nexport type PreviewBranchSchemaEditPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type PreviewBranchSchemaEditError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type PreviewBranchSchemaEditResponse = {\n original: Schemas.Schema;\n updated: Schemas.Schema;\n};\n\nexport type PreviewBranchSchemaEditRequestBody = {\n edits?: Schemas.SchemaEditScript;\n operations?: Schemas.MigrationOp[];\n};\n\nexport type PreviewBranchSchemaEditVariables = {\n body?: PreviewBranchSchemaEditRequestBody;\n pathParams: PreviewBranchSchemaEditPathParams;\n} & FetcherExtraProps;\n\nexport const previewBranchSchemaEdit = (variables: PreviewBranchSchemaEditVariables) =>\n fetch<\n PreviewBranchSchemaEditResponse,\n PreviewBranchSchemaEditError,\n PreviewBranchSchemaEditRequestBody,\n {},\n {},\n PreviewBranchSchemaEditPathParams\n >({ url: '/db/{dbBranchName}/schema/preview', method: 'post', ...variables });\n\nexport type ApplyBranchSchemaEditPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type ApplyBranchSchemaEditError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type ApplyBranchSchemaEditResponse = {\n id: string;\n parentID: string;\n};\n\nexport type ApplyBranchSchemaEditRequestBody = {\n edits: Schemas.SchemaEditScript;\n};\n\nexport type ApplyBranchSchemaEditVariables = {\n body: ApplyBranchSchemaEditRequestBody;\n pathParams: ApplyBranchSchemaEditPathParams;\n} & FetcherExtraProps;\n\nexport const applyBranchSchemaEdit = (variables: ApplyBranchSchemaEditVariables) =>\n fetch<\n ApplyBranchSchemaEditResponse,\n ApplyBranchSchemaEditError,\n ApplyBranchSchemaEditRequestBody,\n {},\n {},\n ApplyBranchSchemaEditPathParams\n >({ url: '/db/{dbBranchName}/schema/apply', method: 'post', ...variables });\n\nexport type GetBranchSchemaHistoryPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchSchemaHistoryError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchSchemaHistoryResponse = {\n meta: {\n /*\n * last record id\n */\n cursor: string;\n /*\n * true if more records can be fetch\n */\n more: boolean;\n };\n logs: Schemas.Commit[];\n};\n\nexport type GetBranchSchemaHistoryRequestBody = {\n page?: {\n /*\n * Query the next page that follow the cursor.\n */\n after?: string;\n /*\n * Query the previous page before the cursor.\n */\n before?: string;\n /*\n * Set page size. If the size is missing it is read from the cursor. If no cursor is given xata will choose the default page size.\n *\n * @default 20\n */\n size?: number;\n };\n};\n\nexport type GetBranchSchemaHistoryVariables = {\n body?: GetBranchSchemaHistoryRequestBody;\n pathParams: GetBranchSchemaHistoryPathParams;\n} & FetcherExtraProps;\n\nexport const getBranchSchemaHistory = (variables: GetBranchSchemaHistoryVariables) =>\n fetch<\n GetBranchSchemaHistoryResponse,\n GetBranchSchemaHistoryError,\n GetBranchSchemaHistoryRequestBody,\n {},\n {},\n GetBranchSchemaHistoryPathParams\n >({ url: '/db/{dbBranchName}/schema/history', method: 'post', ...variables });\n\nexport type GetBranchStatsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type GetBranchStatsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.SimpleError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetBranchStatsResponse = {\n timestamp: string;\n interval: string;\n resolution: string;\n numberOfRecords?: Schemas.MetricsDatapoint[];\n writesOverTime?: Schemas.MetricsDatapoint[];\n readsOverTime?: Schemas.MetricsDatapoint[];\n readLatency?: Schemas.MetricsLatency;\n writeLatency?: Schemas.MetricsLatency;\n warning?: string;\n};\n\nexport type GetBranchStatsVariables = {\n pathParams: GetBranchStatsPathParams;\n} & FetcherExtraProps;\n\n/**\n * Get branch usage metrics.\n */\nexport const getBranchStats = (variables: GetBranchStatsVariables) =>\n fetch<GetBranchStatsResponse, GetBranchStatsError, undefined, {}, {}, GetBranchStatsPathParams>({\n url: '/db/{dbBranchName}/stats',\n method: 'get',\n ...variables\n });\n\nexport type CreateTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type CreateTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type CreateTableResponse = {\n branchName: string;\n /*\n * @minLength 1\n */\n tableName: string;\n};\n\nexport type CreateTableVariables = {\n pathParams: CreateTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Creates a new table with the given name. Returns 422 if a table with the same name already exists.\n */\nexport const createTable = (variables: CreateTableVariables) =>\n fetch<CreateTableResponse, CreateTableError, undefined, {}, {}, CreateTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}',\n method: 'put',\n ...variables\n });\n\nexport type DeleteTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type DeleteTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n>;\n\nexport type DeleteTableVariables = {\n pathParams: DeleteTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Deletes the table with the given name.\n */\nexport const deleteTable = (variables: DeleteTableVariables) =>\n fetch<undefined, DeleteTableError, undefined, {}, {}, DeleteTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}',\n method: 'delete',\n ...variables\n });\n\nexport type UpdateTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type UpdateTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateTableRequestBody = {\n /*\n * @minLength 1\n */\n name: string;\n};\n\nexport type UpdateTableVariables = {\n body: UpdateTableRequestBody;\n pathParams: UpdateTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Update table. Currently there is only one update operation supported: renaming the table by providing a new name.\n *\n * In the example below, we rename a table from “users” to “people”:\n *\n * ```json\n * // PATCH /db/test:main/tables/users\n *\n * {\n * \"name\": \"people\"\n * }\n * ```\n */\nexport const updateTable = (variables: UpdateTableVariables) =>\n fetch<undefined, UpdateTableError, UpdateTableRequestBody, {}, {}, UpdateTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}',\n method: 'patch',\n ...variables\n });\n\nexport type GetTableSchemaPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type GetTableSchemaError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetTableSchemaResponse = {\n columns: Schemas.Column[];\n};\n\nexport type GetTableSchemaVariables = {\n pathParams: GetTableSchemaPathParams;\n} & FetcherExtraProps;\n\nexport const getTableSchema = (variables: GetTableSchemaVariables) =>\n fetch<GetTableSchemaResponse, GetTableSchemaError, undefined, {}, {}, GetTableSchemaPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/schema',\n method: 'get',\n ...variables\n });\n\nexport type SetTableSchemaPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type SetTableSchemaError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 409;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SetTableSchemaRequestBody = {\n columns: Schemas.Column[];\n};\n\nexport type SetTableSchemaVariables = {\n body: SetTableSchemaRequestBody;\n pathParams: SetTableSchemaPathParams;\n} & FetcherExtraProps;\n\nexport const setTableSchema = (variables: SetTableSchemaVariables) =>\n fetch<undefined, SetTableSchemaError, SetTableSchemaRequestBody, {}, {}, SetTableSchemaPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/schema',\n method: 'put',\n ...variables\n });\n\nexport type GetTableColumnsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type GetTableColumnsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetTableColumnsResponse = {\n columns: Schemas.Column[];\n};\n\nexport type GetTableColumnsVariables = {\n pathParams: GetTableColumnsPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieves the list of table columns and their definition. This endpoint returns the column list with object columns being reported with their\n * full dot-separated path (flattened).\n */\nexport const getTableColumns = (variables: GetTableColumnsVariables) =>\n fetch<GetTableColumnsResponse, GetTableColumnsError, undefined, {}, {}, GetTableColumnsPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns',\n method: 'get',\n ...variables\n });\n\nexport type AddTableColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type AddTableColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type AddTableColumnVariables = {\n body: Schemas.Column;\n pathParams: AddTableColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Adds a new column to the table. The body of the request should contain the column definition. In the column definition, the 'name' field should\n * contain the full path separated by dots. If the parent objects do not exists, they will be automatically created. For example,\n * passing `\"name\": \"address.city\"` will auto-create the `address` object if it doesn't exist.\n */\nexport const addTableColumn = (variables: AddTableColumnVariables) =>\n fetch<Responses.MigrationIdResponse, AddTableColumnError, Schemas.Column, {}, {}, AddTableColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns',\n method: 'post',\n ...variables\n });\n\nexport type GetColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Column name\n */\n columnName: Schemas.ColumnName;\n workspace: string;\n};\n\nexport type GetColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetColumnVariables = {\n pathParams: GetColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Get the definition of a single column. To refer to sub-objects, the column name can contain dots. For example `address.country`.\n */\nexport const getColumn = (variables: GetColumnVariables) =>\n fetch<Schemas.Column, GetColumnError, undefined, {}, {}, GetColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns/{columnName}',\n method: 'get',\n ...variables\n });\n\nexport type DeleteColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Column name\n */\n columnName: Schemas.ColumnName;\n workspace: string;\n};\n\nexport type DeleteColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteColumnVariables = {\n pathParams: DeleteColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Deletes the specified column. To refer to sub-objects, the column name can contain dots. For example `address.country`.\n */\nexport const deleteColumn = (variables: DeleteColumnVariables) =>\n fetch<Responses.MigrationIdResponse, DeleteColumnError, undefined, {}, {}, DeleteColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns/{columnName}',\n method: 'delete',\n ...variables\n });\n\nexport type UpdateColumnPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Column name\n */\n columnName: Schemas.ColumnName;\n workspace: string;\n};\n\nexport type UpdateColumnError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateColumnRequestBody = {\n /*\n * @minLength 1\n */\n name: string;\n};\n\nexport type UpdateColumnVariables = {\n body: UpdateColumnRequestBody;\n pathParams: UpdateColumnPathParams;\n} & FetcherExtraProps;\n\n/**\n * Update column with partial data. Can be used for renaming the column by providing a new \"name\" field. To refer to sub-objects, the column name can contain dots. For example `address.country`.\n */\nexport const updateColumn = (variables: UpdateColumnVariables) =>\n fetch<Responses.MigrationIdResponse, UpdateColumnError, UpdateColumnRequestBody, {}, {}, UpdateColumnPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/columns/{columnName}',\n method: 'patch',\n ...variables\n });\n\nexport type InsertRecordPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type InsertRecordQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type InsertRecordError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type InsertRecordVariables = {\n body?: Record<string, any>;\n pathParams: InsertRecordPathParams;\n queryParams?: InsertRecordQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Insert a new Record into the Table\n */\nexport const insertRecord = (variables: InsertRecordVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n InsertRecordError,\n Record<string, any>,\n {},\n InsertRecordQueryParams,\n InsertRecordPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data', method: 'post', ...variables });\n\nexport type InsertRecordWithIDPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type InsertRecordWithIDQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n createOnly?: boolean;\n ifVersion?: number;\n};\n\nexport type InsertRecordWithIDError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type InsertRecordWithIDVariables = {\n body?: Record<string, any>;\n pathParams: InsertRecordWithIDPathParams;\n queryParams?: InsertRecordWithIDQueryParams;\n} & FetcherExtraProps;\n\n/**\n * By default, IDs are auto-generated when data is insterted into Xata. Sending a request to this endpoint allows us to insert a record with a pre-existing ID, bypassing the default automatic ID generation.\n */\nexport const insertRecordWithID = (variables: InsertRecordWithIDVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n InsertRecordWithIDError,\n Record<string, any>,\n {},\n InsertRecordWithIDQueryParams,\n InsertRecordWithIDPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}', method: 'put', ...variables });\n\nexport type UpdateRecordWithIDPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type UpdateRecordWithIDQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n ifVersion?: number;\n};\n\nexport type UpdateRecordWithIDError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpdateRecordWithIDVariables = {\n body?: Record<string, any>;\n pathParams: UpdateRecordWithIDPathParams;\n queryParams?: UpdateRecordWithIDQueryParams;\n} & FetcherExtraProps;\n\nexport const updateRecordWithID = (variables: UpdateRecordWithIDVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n UpdateRecordWithIDError,\n Record<string, any>,\n {},\n UpdateRecordWithIDQueryParams,\n UpdateRecordWithIDPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}', method: 'patch', ...variables });\n\nexport type UpsertRecordWithIDPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type UpsertRecordWithIDQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n ifVersion?: number;\n};\n\nexport type UpsertRecordWithIDError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type UpsertRecordWithIDVariables = {\n body?: Record<string, any>;\n pathParams: UpsertRecordWithIDPathParams;\n queryParams?: UpsertRecordWithIDQueryParams;\n} & FetcherExtraProps;\n\nexport const upsertRecordWithID = (variables: UpsertRecordWithIDVariables) =>\n fetch<\n Responses.RecordUpdateResponse,\n UpsertRecordWithIDError,\n Record<string, any>,\n {},\n UpsertRecordWithIDQueryParams,\n UpsertRecordWithIDPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}', method: 'post', ...variables });\n\nexport type DeleteRecordPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type DeleteRecordQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type DeleteRecordError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type DeleteRecordVariables = {\n pathParams: DeleteRecordPathParams;\n queryParams?: DeleteRecordQueryParams;\n} & FetcherExtraProps;\n\nexport const deleteRecord = (variables: DeleteRecordVariables) =>\n fetch<Responses.RecordResponse, DeleteRecordError, undefined, {}, DeleteRecordQueryParams, DeleteRecordPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}',\n method: 'delete',\n ...variables\n });\n\nexport type GetRecordPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n /*\n * The Record name\n */\n recordId: Schemas.RecordID;\n workspace: string;\n};\n\nexport type GetRecordQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type GetRecordError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type GetRecordVariables = {\n pathParams: GetRecordPathParams;\n queryParams?: GetRecordQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve record by ID\n */\nexport const getRecord = (variables: GetRecordVariables) =>\n fetch<Responses.RecordResponse, GetRecordError, undefined, {}, GetRecordQueryParams, GetRecordPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/data/{recordId}',\n method: 'get',\n ...variables\n });\n\nexport type BulkInsertTableRecordsPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type BulkInsertTableRecordsQueryParams = {\n /*\n * Column filters\n */\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type BulkInsertTableRecordsError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BulkError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n | {\n status: 422;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type BulkInsertTableRecordsRequestBody = {\n records: Record<string, any>[];\n};\n\nexport type BulkInsertTableRecordsVariables = {\n body: BulkInsertTableRecordsRequestBody;\n pathParams: BulkInsertTableRecordsPathParams;\n queryParams?: BulkInsertTableRecordsQueryParams;\n} & FetcherExtraProps;\n\n/**\n * Bulk insert records\n */\nexport const bulkInsertTableRecords = (variables: BulkInsertTableRecordsVariables) =>\n fetch<\n Responses.BulkInsertResponse,\n BulkInsertTableRecordsError,\n BulkInsertTableRecordsRequestBody,\n {},\n BulkInsertTableRecordsQueryParams,\n BulkInsertTableRecordsPathParams\n >({ url: '/db/{dbBranchName}/tables/{tableName}/bulk', method: 'post', ...variables });\n\nexport type QueryTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type QueryTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type QueryTableRequestBody = {\n filter?: Schemas.FilterExpression;\n sort?: Schemas.SortExpression;\n page?: Schemas.PageConfig;\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type QueryTableVariables = {\n body?: QueryTableRequestBody;\n pathParams: QueryTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * The Query Table API can be used to retrieve all records in a table.\n * The API support filtering, sorting, selecting a subset of columns, and pagination.\n *\n * The overall structure of the request looks like this:\n *\n * ```json\n * // POST /db/<dbname>:<branch>/tables/<table>/query\n * {\n * \"columns\": [...],\n * \"filter\": {\n * \"$all\": [...],\n * \"$any\": [...]\n * ...\n * },\n * \"sort\": {\n * \"multiple\": [...]\n * ...\n * },\n * \"page\": {\n * ...\n * }\n * }\n * ```\n *\n * ### Column selection\n *\n * If the `columns` array is not specified, all columns are included. For link\n * fields, only the ID column of the linked records is included in the response.\n *\n * If the `columns` array is specified, only the selected columns are included.\n * The `*` wildcard can be used to select all columns of the given array\n *\n * For objects and link fields, if the column name of the object is specified, we\n * include all of its sub-keys. If only some sub-keys are specified (via dotted\n * notation, e.g. `\"settings.plan\"` ), then only those sub-keys from the object\n * are included.\n *\n * By the way of example, assuming two tables like this:\n *\n * ```json {\"truncate\": true}\n * {\n * \"formatVersion\": \"1.0\",\n * \"tables\": [\n * {\n * \"name\": \"teams\",\n * \"columns\": [\n * {\n * \"name\": \"name\",\n * \"type\": \"string\"\n * },\n * {\n * \"name\": \"owner\",\n * \"type\": \"link\",\n * \"link\": {\n * \"table\": \"users\"\n * }\n * },\n * {\n * \"name\": \"foundedDate\",\n * \"type\": \"datetime\"\n * },\n * ]\n * },\n * {\n * \"name\": \"users\",\n * \"columns\": [\n * {\n * \"name\": \"email\",\n * \"type\": \"email\"\n * },\n * {\n * \"name\": \"full_name\",\n * \"type\": \"string\"\n * },\n * {\n * \"name\": \"address\",\n * \"type\": \"object\",\n * \"columns\": [\n * {\n * \"name\": \"street\",\n * \"type\": \"string\"\n * },\n * {\n * \"name\": \"number\",\n * \"type\": \"int\"\n * },\n * {\n * \"name\": \"zipcode\",\n * \"type\": \"int\"\n * }\n * ]\n * },\n * {\n * \"name\": \"team\",\n * \"type\": \"link\",\n * \"link\": {\n * \"table\": \"teams\"\n * }\n * }\n * ]\n * }\n * ]\n * }\n * ```\n *\n * A query like this:\n *\n * ```json\n * POST /db/<dbname>:<branch>/tables/<table>/query\n * {\n * \"columns\": [\n * \"name\",\n * \"address.*\"\n * ]\n * }\n * ```\n *\n * returns objects like:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"address\": {\n * \"street\": \"New street\",\n * \"number\": 41,\n * \"zipcode\": 10407\n * }\n * }\n * ```\n *\n * while a query like this:\n *\n * ```json\n * POST /db/<dbname>:<branch>/tables/<table>/query\n * {\n * \"columns\": [\n * \"name\",\n * \"address.street\"\n * ]\n * }\n * ```\n *\n * returns objects like:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"address\": {\n * \"street\": \"New street\"\n * }\n * }\n * ```\n *\n * If you want to return all columns from the main table and selected columns from the linked table, you can do it like this:\n *\n * ```json\n * {\n * \"columns\": [\"*\", \"team.name\"]\n * }\n * ```\n *\n * The `\"*\"` in the above means all columns, including columns of objects. This returns data like:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"email\": \"kilian@gmail.com\",\n * \"address\": {\n * \"street\": \"New street\",\n * \"number\": 41,\n * \"zipcode\": 10407\n * },\n * \"team\": {\n * \"id\": \"XX\",\n * \"xata\": {\n * \"version\": 0\n * },\n * \"name\": \"first team\"\n * }\n * }\n * ```\n *\n * If you want all columns of the linked table, you can do:\n *\n * ```json\n * {\n * \"columns\": [\"*\", \"team.*\"]\n * }\n * ```\n *\n * This returns, for example:\n *\n * ```json\n * {\n * \"name\": \"Kilian\",\n * \"email\": \"kilian@gmail.com\",\n * \"address\": {\n * \"street\": \"New street\",\n * \"number\": 41,\n * \"zipcode\": 10407\n * },\n * \"team\": {\n * \"id\": \"XX\",\n * \"xata\": {\n * \"version\": 0\n * },\n * \"name\": \"first team\",\n * \"code\": \"A1\",\n * \"foundedDate\": \"2020-03-04T10:43:54.32Z\"\n * }\n * }\n * ```\n *\n * ### Filtering\n *\n * There are two types of operators:\n *\n * - Operators that work on a single column: `$is`, `$contains`, `$pattern`,\n * `$includes`, `$gt`, etc.\n * - Control operators that combine multiple conditions: `$any`, `$all`, `$not` ,\n * `$none`, etc.\n *\n * All operators start with an `$` to differentiate them from column names\n * (which are not allowed to start with a dollar sign).\n *\n * #### Exact matching and control operators\n *\n * Filter by one column:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": \"value\"\n * }\n * }\n * ```\n *\n * This is equivalent to using the `$is` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$is\": \"value\"\n * }\n * }\n * }\n * ```\n *\n * For example:\n *\n * ```json\n * {\n * \"filter\": {\n * \"name\": \"r2\"\n * }\n * }\n * ```\n *\n * Or:\n *\n * ```json\n * {\n * \"filter\": {\n * \"name\": {\n * \"$is\": \"r2\"\n * }\n * }\n * }\n * ```\n *\n * For objects, both dots and nested versions work:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.plan\": \"free\"\n * }\n * }\n * ```\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings\": {\n * \"plan\": \"free\"\n * }\n * }\n * }\n * ```\n *\n * If you want to OR together multiple values, you can use the `$any` operator with an array of values:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.plan\": { \"$any\": [\"free\", \"paid\"] }\n * }\n * }\n * ```\n *\n * If you specify multiple columns in the same filter, they are logically AND'ed together:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.dark\": true,\n * \"settings.plan\": \"free\"\n * }\n * }\n * ```\n *\n * The above matches if both conditions are met.\n *\n * To be more explicit about it, you can use `$all` or `$any`:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$any\": {\n * \"settings.dark\": true,\n * \"settings.plan\": \"free\"\n * }\n * }\n * }\n * ```\n *\n * The `$all` and `$any` operators can also receive an array of objects, which allows for repeating column names:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$any\": [\n * {\n * \"name\": \"r1\"\n * },\n * {\n * \"name\": \"r2\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * You can check for a value being not-null with `$exists`:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$exists\": \"settings\"\n * }\n * }\n * ```\n *\n * This can be combined with `$all` or `$any` :\n *\n * ```json\n * {\n * \"filter\": {\n * \"$all\": [\n * {\n * \"$exists\": \"settings\"\n * },\n * {\n * \"$exists\": \"name\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * Or you can use the inverse operator `$notExists`:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$notExists\": \"settings\"\n * }\n * }\n * ```\n *\n * #### Partial match\n *\n * `$contains` is the simplest operator for partial matching. We should generally\n * discourage overusing `$contains` because it typically can't make use of\n * indices.\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$contains\": \"value\"\n * }\n * }\n * }\n * ```\n *\n * Wildcards are supported via the `$pattern` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$pattern\": \"v*alu?\"\n * }\n * }\n * }\n * ```\n *\n * The `$pattern` operator accepts two wildcard characters:\n * * `*` matches zero or more characters\n * * `?` matches exactly one character\n *\n * If you want to match a string that contains a wildcard character, you can escape them using a backslash (`\\`). You can escape a backslash by usign another backslash.\n *\n * We could also have `$endsWith` and `$startsWith` operators:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$endsWith\": \".gz\"\n * },\n * \"<column_name>\": {\n * \"$startsWith\": \"tmp-\"\n * }\n * }\n * }\n * ```\n *\n * #### Numeric or datetime ranges\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$ge\": 0,\n * \"$lt\": 100\n * }\n * }\n * }\n * ```\n * Date ranges support the same operators, with the date using the format defined in\n * [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339):\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$gt\": \"2019-10-12T07:20:50.52Z\",\n * \"$lt\": \"2021-10-12T07:20:50.52Z\"\n * }\n * }\n * }\n * ```\n * The supported operators are `$gt`, `$lt`, `$ge`, `$le`.\n *\n * #### Negations\n *\n * A general `$not` operator can inverse any operation.\n *\n * ```json\n * {\n * \"filter\": {\n * \"$not\": {\n * \"<column_name1>\": \"value1\",\n * \"<column_name2>\": \"value1\"\n * }\n * }\n * }\n * ```\n *\n * Note: in the above the two condition are AND together, so this does (NOT ( ...\n * AND ...))\n *\n * Or more complex:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$not\": {\n * \"$any\": [\n * {\n * \"<column_name1>\": \"value1\"\n * },\n * {\n * \"$all\": [\n * {\n * \"<column_name2>\": \"value2\"\n * },\n * {\n * \"<column_name3>\": \"value3\"\n * }\n * ]\n * }\n * ]\n * }\n * }\n * }\n * ```\n *\n * The `$not: { $any: {}}` can be shorted using the `$none` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"$none\": {\n * \"<column_name1>\": \"value1\",\n * \"<column_name2>\": \"value1\"\n * }\n * }\n * }\n * ```\n *\n * In addition, you can use operators like `$isNot` or `$notExists` to simplify expressions:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$isNot\": \"2019-10-12T07:20:50.52Z\"\n * }\n * }\n * }\n * ```\n *\n * #### Working with arrays\n *\n * To test that an array contains a value, use `$includes`.\n *\n * ```json\n * {\n * \"filter\": {\n * \"<array_name>\": {\n * \"$includes\": \"value\"\n * }\n * }\n * }\n * ```\n *\n * The `$includes` operator accepts a custom predicate that will check if any\n * array values matches the predicate. For example a complex predicate can include\n * the `$all` , `$contains` and `$endsWith` operators:\n *\n * ```json\n * {\n * \"filter\": {\n * \"<array name>\": {\n * \"$includes\": {\n * \"$all\": [\n * { \"$contains\": \"label\" },\n * { \"$not\": { \"$endsWith\": \"-debug\" } }\n * ]\n * }\n * }\n * }\n * }\n * ```\n *\n * The `$includes` all operator succeeds if any column in the array matches the\n * predicate. The `$includesAll` operator succeeds if all array items match the\n * predicate. The `$includesNone` operator succeeds if no array item matches the\n * predicate. The `$includes` operator is a synonym for the `$includesAny`\n * operator.\n *\n * Here is an example of using the `$includesAll` operator:\n *\n * ```json\n * {\n * \"filter\": {\n * \"settings.labels\": {\n * \"$includesAll\": [{ \"$contains\": \"label\" }]\n * }\n * }\n * }\n * ```\n *\n * The above matches if all label values contain the string \"labels\".\n *\n * ### Sorting\n *\n * Sorting by one element:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"sort\": {\n * \"index\": \"asc\"\n * }\n * }\n * ```\n *\n * or descendently:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"sort\": {\n * \"index\": \"desc\"\n * }\n * }\n * ```\n *\n * Sorting by multiple fields:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"sort\": [\n * {\n * \"index\": \"desc\"\n * },\n * {\n * \"createdAt\": \"desc\"\n * }\n * ]\n * }\n * ```\n *\n * ### Pagination\n *\n * We offer cursor pagination and offset pagination. The offset pagination is limited\n * in the amount of data it can retrieve, so we recommend the cursor pagination if you have more than 1000 records.\n *\n * Example of size + offset pagination:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"page\": {\n * \"size\": 100,\n * \"offset\": 200\n * }\n * }\n * ```\n *\n * The `page.size` parameter represents the maximum number of records returned by this query. It has a default value of 20 and a maximum value of 200.\n * The `page.offset` parameter represents the number of matching records to skip. It has a default value of 0 and a maximum value of 800.\n *\n * Example of cursor pagination:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"page\": {\n * \"after\":\"fMoxCsIwFIDh3WP8c4amDai5hO5SJCRNfaVSeC9b6d1FD\"\n * }\n * }\n * ```\n *\n * In the above example, the value of the `page.after` parameter is the cursor returned by the previous query. A sample response is shown below:\n *\n * ```json\n * {\n * \"meta\": {\n * \"page\": {\n * \"cursor\": \"fMoxCsIwFIDh3WP8c4amDai5hO5SJCRNfaVSeC9b6d1FD\",\n * \"more\": true\n * }\n * },\n * \"records\": [...]\n * }\n * ```\n *\n * The `page` object might contain the follow keys, in addition to `size` and `offset` that were introduced before:\n *\n * - `after`: Return the next page 'after' the current cursor\n * - `before`: Return the previous page 'before' the current cursor.\n * - `first`: Return the first page in the table from a cursor.\n * - `last`: Return the last N records in the table from a cursor, where N is the `page.size` parameter.\n *\n * The request will fail if an invalid cursor value is given to `page.before`,\n * `page.after`, `page.first` , or `page.last`. No other cursor setting can be\n * used if `page.first` or `page.last` is set in a query.\n *\n * If both `page.before` and `page.after` parameters are present we treat the\n * request as a range query. The range query will return all entries after\n * `page.after`, but before `page.before`, up to `page.size` or the maximum\n * page size. This query requires both cursors to use the same filters and sort\n * settings, plus we require `page.after < page.before`. The range query returns\n * a new cursor. If the range encompass multiple pages the next page in the range\n * can be queried by update `page.after` to the returned cursor while keeping the\n * `page.before` cursor from the first range query.\n *\n * The `filter` , `columns`, `sort` , and `page.size` configuration will be\n * encoded with the cursor. The pagination request will be invalid if\n * `filter` or `sort` is set. The columns returned and page size can be changed\n * anytime by passing the `columns` or `page.size` settings to the next query.\n *\n * **Special cursors:**\n *\n * - `page.after=end`: Result points past the last entry. The list of records\n * returned is empty, but `page.meta.cursor` will include a cursor that can be\n * used to \"tail\" the table from the end waiting for new data to be inserted.\n * - `page.before=end`: This cursor returns the last page.\n * - `page.first=<cursor>`: Go to first page. This is equivalent to querying the\n * first page without a cursor but `filter` and `sort` . Yet the `page.first`\n * cursor can be convenient at times as user code does not need to remember the\n * filter, sort, columns or page size configuration. All these information are\n * read from the cursor.\n * - `page.last=<cursor>`: Go to the end of the table. This is equivalent to querying the\n * last page with `page.before=end`, `filter`, and `sort` . Yet the\n * `page.last` cursor can be more convenient at times as user code does not\n * need to remember the filter, sort, columns or page size configuration. All\n * these information are read from the cursor.\n *\n * When using special cursors like `page.after=\"end\"` or `page.before=\"end\"`, we\n * still allow `filter` and `sort` to be set.\n *\n * Example of getting the last page:\n *\n * ```json\n * POST /db/demo:main/tables/table/query\n * {\n * \"page\": {\n * \"size\": 10,\n * \"before\": \"end\"\n * }\n * }\n * ```\n */\nexport const queryTable = (variables: QueryTableVariables) =>\n fetch<Responses.QueryResponse, QueryTableError, QueryTableRequestBody, {}, {}, QueryTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/query',\n method: 'post',\n ...variables\n });\n\nexport type SearchTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type SearchTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SearchTableRequestBody = {\n /*\n * The query string.\n *\n * @minLength 1\n */\n query: string;\n fuzziness?: Schemas.FuzzinessExpression;\n prefix?: Schemas.PrefixExpression;\n filter?: Schemas.FilterExpression;\n highlight?: Schemas.HighlightExpression;\n boosters?: Schemas.BoosterExpression[];\n};\n\nexport type SearchTableVariables = {\n body: SearchTableRequestBody;\n pathParams: SearchTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Run a free text search operation in a particular table.\n *\n * The endpoint accepts a `query` parameter that is used for the free text search and a set of structured filters (via the `filter` parameter) that are applied before the search. The `filter` parameter uses the same syntax as the [query endpoint](/api-reference/db/db_branch_name/tables/table_name/) with the following exceptions:\n * * filters `$contains`, `$startsWith`, `$endsWith` don't work on columns of type `text`\n * * filtering on columns of type `multiple` is currently unsupported\n */\nexport const searchTable = (variables: SearchTableVariables) =>\n fetch<Responses.SearchResponse, SearchTableError, SearchTableRequestBody, {}, {}, SearchTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/search',\n method: 'post',\n ...variables\n });\n\nexport type SearchBranchPathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n workspace: string;\n};\n\nexport type SearchBranchError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SearchBranchRequestBody = {\n /*\n * An array with the tables in which to search. By default, all tables are included. Optionally, filters can be included that apply to each table.\n */\n tables?: (\n | string\n | {\n /*\n * The name of the table.\n */\n table: string;\n filter?: Schemas.FilterExpression;\n boosters?: Schemas.BoosterExpression[];\n }\n )[];\n /*\n * The query string.\n *\n * @minLength 1\n */\n query: string;\n fuzziness?: Schemas.FuzzinessExpression;\n prefix?: Schemas.PrefixExpression;\n highlight?: Schemas.HighlightExpression;\n};\n\nexport type SearchBranchVariables = {\n body: SearchBranchRequestBody;\n pathParams: SearchBranchPathParams;\n} & FetcherExtraProps;\n\n/**\n * Run a free text search operation across the database branch.\n */\nexport const searchBranch = (variables: SearchBranchVariables) =>\n fetch<Responses.SearchResponse, SearchBranchError, SearchBranchRequestBody, {}, {}, SearchBranchPathParams>({\n url: '/db/{dbBranchName}/search',\n method: 'post',\n ...variables\n });\n\nexport type SummarizeTablePathParams = {\n /*\n * The DBBranchName matches the pattern `{db_name}:{branch_name}`.\n */\n dbBranchName: Schemas.DBBranchName;\n /*\n * The Table name\n */\n tableName: Schemas.TableName;\n workspace: string;\n};\n\nexport type SummarizeTableError = Fetcher.ErrorWrapper<\n | {\n status: 400;\n payload: Responses.BadRequestError;\n }\n | {\n status: 401;\n payload: Responses.AuthError;\n }\n | {\n status: 404;\n payload: Responses.SimpleError;\n }\n>;\n\nexport type SummarizeTableRequestBody = {\n summaries?: Schemas.SummaryExpressionList;\n columns?: Schemas.ColumnsProjection;\n};\n\nexport type SummarizeTableVariables = {\n body?: SummarizeTableRequestBody;\n pathParams: SummarizeTablePathParams;\n} & FetcherExtraProps;\n\n/**\n * Summarize table\n */\nexport const summarizeTable = (variables: SummarizeTableVariables) =>\n fetch<Responses.SummarizeResponse, SummarizeTableError, SummarizeTableRequestBody, {}, {}, SummarizeTablePathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/summarize',\n method: 'post',\n ...variables\n });\n\nexport const operationsByTag = {\n users: { getUser, updateUser, deleteUser, getUserAPIKeys, createUserAPIKey, deleteUserAPIKey },\n workspaces: {\n createWorkspace,\n getWorkspacesList,\n getWorkspace,\n updateWorkspace,\n deleteWorkspace,\n getWorkspaceMembersList,\n updateWorkspaceMemberRole,\n removeWorkspaceMember,\n inviteWorkspaceMember,\n updateWorkspaceMemberInvite,\n cancelWorkspaceMemberInvite,\n resendWorkspaceMemberInvite,\n acceptWorkspaceMemberInvite\n },\n database: {\n getDatabaseList,\n createDatabase,\n deleteDatabase,\n getDatabaseMetadata,\n updateDatabaseMetadata,\n getGitBranchesMapping,\n addGitBranchesEntry,\n removeGitBranchesEntry,\n resolveBranch\n },\n branch: {\n getBranchList,\n getBranchDetails,\n createBranch,\n deleteBranch,\n updateBranchMetadata,\n getBranchMetadata,\n getBranchStats\n },\n migrationRequests: {\n listMigrationRequests,\n createMigrationRequest,\n getMigrationRequest,\n updateMigrationRequest,\n listMigrationRequestsCommits,\n compareMigrationRequest,\n getMigrationRequestIsMerged,\n mergeMigrationRequest\n },\n branchSchema: {\n getBranchMigrationHistory,\n executeBranchMigrationPlan,\n getBranchMigrationPlan,\n compareBranchWithUserSchema,\n compareBranchSchemas,\n updateBranchSchema,\n previewBranchSchemaEdit,\n applyBranchSchemaEdit,\n getBranchSchemaHistory\n },\n table: {\n createTable,\n deleteTable,\n updateTable,\n getTableSchema,\n setTableSchema,\n getTableColumns,\n addTableColumn,\n getColumn,\n deleteColumn,\n updateColumn\n },\n records: {\n insertRecord,\n insertRecordWithID,\n updateRecordWithID,\n upsertRecordWithID,\n deleteRecord,\n getRecord,\n bulkInsertTableRecords,\n queryTable,\n searchTable,\n searchBranch,\n summarizeTable\n }\n};\n","import { isObject, isString } from '../util/lang';\n\ntype HostAliases = 'production' | 'staging';\ntype ProviderBuilder = { main: string; workspaces: string };\nexport type HostProvider = HostAliases | ProviderBuilder;\n\nexport function getHostUrl(provider: HostProvider, type: keyof ProviderBuilder): string {\n if (isHostProviderAlias(provider)) {\n return providers[provider][type];\n } else if (isHostProviderBuilder(provider)) {\n return provider[type];\n }\n\n throw new Error('Invalid API provider');\n}\n\nconst providers: Record<HostAliases, ProviderBuilder> = {\n production: {\n main: 'https://api.xata.io',\n workspaces: 'https://{workspaceId}.xata.sh'\n },\n staging: {\n main: 'https://staging.xatabase.co',\n workspaces: 'https://{workspaceId}.staging.xatabase.co'\n }\n};\n\nexport function isHostProviderAlias(alias: HostProvider | string): alias is HostAliases {\n return isString(alias) && Object.keys(providers).includes(alias);\n}\n\nexport function isHostProviderBuilder(builder: HostProvider): builder is ProviderBuilder {\n return isObject(builder) && isString(builder.main) && isString(builder.workspaces);\n}\n","import { defaultTrace, TraceFunction } from '../schema/tracing';\nimport { getAPIKey } from '../util/apiKey';\nimport { getFetchImplementation } from '../util/fetch';\nimport { isString } from '../util/lang';\nimport type * as Components from './components';\nimport type * as Types from './components';\nimport { operationsByTag } from './components';\nimport type { FetcherExtraProps, FetchImpl } from './fetcher';\nimport { getHostUrl, HostProvider } from './providers';\nimport type * as Responses from './responses';\nimport type * as Schemas from './schemas';\n\nexport interface XataApiClientOptions {\n fetch?: FetchImpl;\n apiKey?: string;\n host?: HostProvider;\n trace?: TraceFunction;\n}\n\nexport class XataApiClient {\n #extraProps: FetcherExtraProps;\n #namespaces: Partial<{\n user: UserApi;\n workspaces: WorkspaceApi;\n databases: DatabaseApi;\n branches: BranchApi;\n tables: TableApi;\n records: RecordsApi;\n migrationRequests: MigrationRequestsApi;\n branchSchema: BranchSchemaApi;\n }> = {};\n\n constructor(options: XataApiClientOptions = {}) {\n const provider = options.host ?? 'production';\n const apiKey = options.apiKey ?? getAPIKey();\n const trace = options.trace ?? defaultTrace;\n\n if (!apiKey) {\n throw new Error('Could not resolve a valid apiKey');\n }\n\n this.#extraProps = {\n apiUrl: getHostUrl(provider, 'main'),\n workspacesApiUrl: getHostUrl(provider, 'workspaces'),\n fetchImpl: getFetchImplementation(options.fetch),\n apiKey,\n trace\n };\n }\n\n public get user() {\n if (!this.#namespaces.user) this.#namespaces.user = new UserApi(this.#extraProps);\n return this.#namespaces.user;\n }\n\n public get workspaces() {\n if (!this.#namespaces.workspaces) this.#namespaces.workspaces = new WorkspaceApi(this.#extraProps);\n return this.#namespaces.workspaces;\n }\n\n public get databases() {\n if (!this.#namespaces.databases) this.#namespaces.databases = new DatabaseApi(this.#extraProps);\n return this.#namespaces.databases;\n }\n\n public get branches() {\n if (!this.#namespaces.branches) this.#namespaces.branches = new BranchApi(this.#extraProps);\n return this.#namespaces.branches;\n }\n\n public get tables() {\n if (!this.#namespaces.tables) this.#namespaces.tables = new TableApi(this.#extraProps);\n return this.#namespaces.tables;\n }\n\n public get records() {\n if (!this.#namespaces.records) this.#namespaces.records = new RecordsApi(this.#extraProps);\n return this.#namespaces.records;\n }\n\n public get migrationRequests() {\n if (!this.#namespaces.migrationRequests)\n this.#namespaces.migrationRequests = new MigrationRequestsApi(this.#extraProps);\n return this.#namespaces.migrationRequests;\n }\n\n public get branchSchema() {\n if (!this.#namespaces.branchSchema) this.#namespaces.branchSchema = new BranchSchemaApi(this.#extraProps);\n return this.#namespaces.branchSchema;\n }\n}\n\nclass UserApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getUser(): Promise<Schemas.UserWithID> {\n return operationsByTag.users.getUser({ ...this.extraProps });\n }\n\n public updateUser(user: Schemas.User): Promise<Schemas.UserWithID> {\n return operationsByTag.users.updateUser({ body: user, ...this.extraProps });\n }\n\n public deleteUser(): Promise<void> {\n return operationsByTag.users.deleteUser({ ...this.extraProps });\n }\n\n public getUserAPIKeys(): Promise<Types.GetUserAPIKeysResponse> {\n return operationsByTag.users.getUserAPIKeys({ ...this.extraProps });\n }\n\n public createUserAPIKey(keyName: Schemas.APIKeyName): Promise<Types.CreateUserAPIKeyResponse> {\n return operationsByTag.users.createUserAPIKey({\n pathParams: { keyName },\n ...this.extraProps\n });\n }\n\n public deleteUserAPIKey(keyName: Schemas.APIKeyName): Promise<void> {\n return operationsByTag.users.deleteUserAPIKey({\n pathParams: { keyName },\n ...this.extraProps\n });\n }\n}\n\nclass WorkspaceApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public createWorkspace(workspaceMeta: Schemas.WorkspaceMeta): Promise<Schemas.Workspace> {\n return operationsByTag.workspaces.createWorkspace({\n body: workspaceMeta,\n ...this.extraProps\n });\n }\n\n public getWorkspacesList(): Promise<Types.GetWorkspacesListResponse> {\n return operationsByTag.workspaces.getWorkspacesList({ ...this.extraProps });\n }\n\n public getWorkspace(workspaceId: Schemas.WorkspaceID): Promise<Schemas.Workspace> {\n return operationsByTag.workspaces.getWorkspace({\n pathParams: { workspaceId },\n ...this.extraProps\n });\n }\n\n public updateWorkspace(\n workspaceId: Schemas.WorkspaceID,\n workspaceMeta: Schemas.WorkspaceMeta\n ): Promise<Schemas.Workspace> {\n return operationsByTag.workspaces.updateWorkspace({\n pathParams: { workspaceId },\n body: workspaceMeta,\n ...this.extraProps\n });\n }\n\n public deleteWorkspace(workspaceId: Schemas.WorkspaceID): Promise<void> {\n return operationsByTag.workspaces.deleteWorkspace({\n pathParams: { workspaceId },\n ...this.extraProps\n });\n }\n\n public getWorkspaceMembersList(workspaceId: Schemas.WorkspaceID): Promise<Schemas.WorkspaceMembers> {\n return operationsByTag.workspaces.getWorkspaceMembersList({\n pathParams: { workspaceId },\n ...this.extraProps\n });\n }\n\n public updateWorkspaceMemberRole(\n workspaceId: Schemas.WorkspaceID,\n userId: Schemas.UserID,\n role: Schemas.Role\n ): Promise<void> {\n return operationsByTag.workspaces.updateWorkspaceMemberRole({\n pathParams: { workspaceId, userId },\n body: { role },\n ...this.extraProps\n });\n }\n\n public removeWorkspaceMember(workspaceId: Schemas.WorkspaceID, userId: Schemas.UserID): Promise<void> {\n return operationsByTag.workspaces.removeWorkspaceMember({\n pathParams: { workspaceId, userId },\n ...this.extraProps\n });\n }\n\n public inviteWorkspaceMember(\n workspaceId: Schemas.WorkspaceID,\n email: string,\n role: Schemas.Role\n ): Promise<Schemas.WorkspaceInvite> {\n return operationsByTag.workspaces.inviteWorkspaceMember({\n pathParams: { workspaceId },\n body: { email, role },\n ...this.extraProps\n });\n }\n\n public updateWorkspaceMemberInvite(\n workspaceId: Schemas.WorkspaceID,\n inviteId: Schemas.InviteID,\n role: Schemas.Role\n ): Promise<Schemas.WorkspaceInvite> {\n return operationsByTag.workspaces.updateWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteId },\n body: { role },\n ...this.extraProps\n });\n }\n\n public cancelWorkspaceMemberInvite(workspaceId: Schemas.WorkspaceID, inviteId: Schemas.InviteID): Promise<void> {\n return operationsByTag.workspaces.cancelWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteId },\n ...this.extraProps\n });\n }\n\n public resendWorkspaceMemberInvite(workspaceId: Schemas.WorkspaceID, inviteId: Schemas.InviteID): Promise<void> {\n return operationsByTag.workspaces.resendWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteId },\n ...this.extraProps\n });\n }\n\n public acceptWorkspaceMemberInvite(workspaceId: Schemas.WorkspaceID, inviteKey: Schemas.InviteKey): Promise<void> {\n return operationsByTag.workspaces.acceptWorkspaceMemberInvite({\n pathParams: { workspaceId, inviteKey },\n ...this.extraProps\n });\n }\n}\n\nclass DatabaseApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getDatabaseList(workspace: Schemas.WorkspaceID): Promise<Schemas.ListDatabasesResponse> {\n return operationsByTag.database.getDatabaseList({\n pathParams: { workspace },\n ...this.extraProps\n });\n }\n\n public createDatabase(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n options: Types.CreateDatabaseRequestBody = {}\n ): Promise<Types.CreateDatabaseResponse> {\n return operationsByTag.database.createDatabase({\n pathParams: { workspace, dbName },\n body: options,\n ...this.extraProps\n });\n }\n\n public deleteDatabase(workspace: Schemas.WorkspaceID, dbName: Schemas.DBName): Promise<void> {\n return operationsByTag.database.deleteDatabase({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public getDatabaseMetadata(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName\n ): Promise<Schemas.DatabaseMetadata> {\n return operationsByTag.database.getDatabaseMetadata({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public updateDatabaseMetadata(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n options: Types.UpdateDatabaseMetadataRequestBody = {}\n ): Promise<Schemas.DatabaseMetadata> {\n return operationsByTag.database.updateDatabaseMetadata({\n pathParams: { workspace, dbName },\n body: options,\n ...this.extraProps\n });\n }\n\n public getGitBranchesMapping(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName\n ): Promise<Schemas.ListGitBranchesResponse> {\n return operationsByTag.database.getGitBranchesMapping({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public addGitBranchesEntry(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n body: Types.AddGitBranchesEntryRequestBody\n ): Promise<Types.AddGitBranchesEntryResponse> {\n return operationsByTag.database.addGitBranchesEntry({\n pathParams: { workspace, dbName },\n body,\n ...this.extraProps\n });\n }\n\n public removeGitBranchesEntry(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n gitBranch: string\n ): Promise<void> {\n return operationsByTag.database.removeGitBranchesEntry({\n pathParams: { workspace, dbName },\n queryParams: { gitBranch },\n ...this.extraProps\n });\n }\n\n public resolveBranch(\n workspace: Schemas.WorkspaceID,\n dbName: Schemas.DBName,\n gitBranch?: string,\n fallbackBranch?: string\n ): Promise<Types.ResolveBranchResponse> {\n return operationsByTag.database.resolveBranch({\n pathParams: { workspace, dbName },\n queryParams: { gitBranch, fallbackBranch },\n ...this.extraProps\n });\n }\n}\n\nclass BranchApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getBranchList(workspace: Schemas.WorkspaceID, dbName: Schemas.DBName): Promise<Schemas.ListBranchesResponse> {\n return operationsByTag.branch.getBranchList({\n pathParams: { workspace, dbName },\n ...this.extraProps\n });\n }\n\n public getBranchDetails(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<Schemas.DBBranch> {\n return operationsByTag.branch.getBranchDetails({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n\n public createBranch(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n from?: string,\n options: Types.CreateBranchRequestBody = {}\n ): Promise<Types.CreateBranchResponse> {\n return operationsByTag.branch.createBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n queryParams: isString(from) ? { from } : undefined,\n body: options,\n ...this.extraProps\n });\n }\n\n public deleteBranch(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<void> {\n return operationsByTag.branch.deleteBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n\n public updateBranchMetadata(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n metadata: Schemas.BranchMetadata = {}\n ): Promise<void> {\n return operationsByTag.branch.updateBranchMetadata({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: metadata,\n ...this.extraProps\n });\n }\n\n public getBranchMetadata(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<Schemas.BranchMetadata> {\n return operationsByTag.branch.getBranchMetadata({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n\n public getBranchStats(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName\n ): Promise<Types.GetBranchStatsResponse> {\n return operationsByTag.branch.getBranchStats({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n ...this.extraProps\n });\n }\n}\n\nclass TableApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public createTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<Types.CreateTableResponse> {\n return operationsByTag.table.createTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public deleteTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<void> {\n return operationsByTag.table.deleteTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public updateTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n options: Types.UpdateTableRequestBody\n ): Promise<void> {\n return operationsByTag.table.updateTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: options,\n ...this.extraProps\n });\n }\n\n public getTableSchema(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<Types.GetTableSchemaResponse> {\n return operationsByTag.table.getTableSchema({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public setTableSchema(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n options: Types.SetTableSchemaRequestBody\n ): Promise<void> {\n return operationsByTag.table.setTableSchema({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: options,\n ...this.extraProps\n });\n }\n\n public getTableColumns(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName\n ): Promise<Types.GetTableColumnsResponse> {\n return operationsByTag.table.getTableColumns({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n ...this.extraProps\n });\n }\n\n public addTableColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n column: Schemas.Column\n ): Promise<Responses.MigrationIdResponse> {\n return operationsByTag.table.addTableColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: column,\n ...this.extraProps\n });\n }\n\n public getColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n columnName: Schemas.ColumnName\n ): Promise<Schemas.Column> {\n return operationsByTag.table.getColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },\n ...this.extraProps\n });\n }\n\n public deleteColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n columnName: Schemas.ColumnName\n ): Promise<Responses.MigrationIdResponse> {\n return operationsByTag.table.deleteColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },\n ...this.extraProps\n });\n }\n\n public updateColumn(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n columnName: Schemas.ColumnName,\n options: Types.UpdateColumnRequestBody\n ): Promise<Responses.MigrationIdResponse> {\n return operationsByTag.table.updateColumn({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },\n body: options,\n ...this.extraProps\n });\n }\n}\n\nclass RecordsApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public insertRecord(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n record: Record<string, any>,\n options: Types.InsertRecordQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.insertRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public insertRecordWithID(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n record: Record<string, any>,\n options: Types.InsertRecordWithIDQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.insertRecordWithID({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public updateRecordWithID(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n record: Record<string, any>,\n options: Types.UpdateRecordWithIDQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.updateRecordWithID({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public upsertRecordWithID(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n record: Record<string, any>,\n options: Types.UpsertRecordWithIDQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.upsertRecordWithID({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n body: record,\n ...this.extraProps\n });\n }\n\n public deleteRecord(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n options: Types.DeleteRecordQueryParams = {}\n ): Promise<Responses.RecordUpdateResponse> {\n return operationsByTag.records.deleteRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n ...this.extraProps\n });\n }\n\n public getRecord(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n recordId: Schemas.RecordID,\n options: Types.GetRecordQueryParams = {}\n ): Promise<Schemas.XataRecord> {\n return operationsByTag.records.getRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n queryParams: options,\n ...this.extraProps\n });\n }\n\n public bulkInsertTableRecords(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n records: Record<string, any>[],\n options: Types.BulkInsertTableRecordsQueryParams = {}\n ): Promise<Responses.BulkInsertResponse> {\n return operationsByTag.records.bulkInsertTableRecords({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n queryParams: options,\n body: { records },\n ...this.extraProps\n });\n }\n\n public queryTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n query: Types.QueryTableRequestBody\n ): Promise<Responses.QueryResponse> {\n return operationsByTag.records.queryTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: query,\n ...this.extraProps\n });\n }\n\n public searchTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n query: Types.SearchTableRequestBody\n ): Promise<Responses.SearchResponse> {\n return operationsByTag.records.searchTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: query,\n ...this.extraProps\n });\n }\n\n public searchBranch(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n query: Types.SearchBranchRequestBody\n ): Promise<Responses.SearchResponse> {\n return operationsByTag.records.searchBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: query,\n ...this.extraProps\n });\n }\n\n public summarizeTable(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n tableName: Schemas.TableName,\n query: Types.SummarizeTableRequestBody\n ): Promise<Responses.SummarizeResponse> {\n return operationsByTag.records.summarizeTable({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\n body: query,\n ...this.extraProps\n });\n }\n}\n\nclass MigrationRequestsApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public listMigrationRequests(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n options: Types.ListMigrationRequestsRequestBody = {}\n ): Promise<Components.ListMigrationRequestsResponse> {\n return operationsByTag.migrationRequests.listMigrationRequests({\n pathParams: { workspace, dbName: database },\n body: options,\n ...this.extraProps\n });\n }\n\n public createMigrationRequest(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n options: Components.CreateMigrationRequestRequestBody\n ): Promise<Components.CreateMigrationRequestResponse> {\n return operationsByTag.migrationRequests.createMigrationRequest({\n pathParams: { workspace, dbName: database },\n body: options,\n ...this.extraProps\n });\n }\n\n public getMigrationRequest(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n migrationRequest: number\n ): Promise<Schemas.MigrationRequest> {\n return operationsByTag.migrationRequests.getMigrationRequest({\n pathParams: { workspace, dbName: database, mrNumber: migrationRequest },\n ...this.extraProps\n });\n }\n\n public updateMigrationRequest(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n migrationRequest: number,\n options: Components.UpdateMigrationRequestRequestBody\n ): Promise<void> {\n return operationsByTag.migrationRequests.updateMigrationRequest({\n pathParams: { workspace, dbName: database, mrNumber: migrationRequest },\n body: options,\n ...this.extraProps\n });\n }\n\n public listMigrationRequestsCommits(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n migrationRequest: number,\n options: Types.ListMigrationRequestsCommitsRequestBody = {}\n ): Promise<Components.ListMigrationRequestsCommitsResponse> {\n return operationsByTag.migrationRequests.listMigrationRequestsCommits({\n pathParams: { workspace, dbName: database, mrNumber: migrationRequest },\n body: options,\n ...this.extraProps\n });\n }\n\n public compareMigrationRequest(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n migrationRequest: number\n ): Promise<Responses.SchemaCompareResponse> {\n return operationsByTag.migrationRequests.compareMigrationRequest({\n pathParams: { workspace, dbName: database, mrNumber: migrationRequest },\n ...this.extraProps\n });\n }\n\n public getMigrationRequestIsMerged(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n migrationRequest: number\n ): Promise<Components.GetMigrationRequestIsMergedResponse> {\n return operationsByTag.migrationRequests.getMigrationRequestIsMerged({\n pathParams: { workspace, dbName: database, mrNumber: migrationRequest },\n ...this.extraProps\n });\n }\n\n public mergeMigrationRequest(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n migrationRequest: number\n ): Promise<Schemas.Commit> {\n return operationsByTag.migrationRequests.mergeMigrationRequest({\n pathParams: { workspace, dbName: database, mrNumber: migrationRequest },\n ...this.extraProps\n });\n }\n}\n\nclass BranchSchemaApi {\n constructor(private extraProps: FetcherExtraProps) {}\n\n public getBranchMigrationHistory(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n options: Types.GetBranchMigrationHistoryRequestBody = {}\n ): Promise<Types.GetBranchMigrationHistoryResponse> {\n return operationsByTag.branchSchema.getBranchMigrationHistory({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: options,\n ...this.extraProps\n });\n }\n\n public executeBranchMigrationPlan(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n migrationPlan: Types.ExecuteBranchMigrationPlanRequestBody\n ): Promise<void> {\n return operationsByTag.branchSchema.executeBranchMigrationPlan({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: migrationPlan,\n ...this.extraProps\n });\n }\n\n public getBranchMigrationPlan(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n schema: Schemas.Schema\n ): Promise<Responses.BranchMigrationPlan> {\n return operationsByTag.branchSchema.getBranchMigrationPlan({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: schema,\n ...this.extraProps\n });\n }\n\n public compareBranchWithUserSchema(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n schema: Schemas.Schema\n ): Promise<Responses.SchemaCompareResponse> {\n return operationsByTag.branchSchema.compareBranchWithUserSchema({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: { schema },\n ...this.extraProps\n });\n }\n\n public compareBranchSchemas(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n branchName: Schemas.BranchName,\n schema: Schemas.Schema\n ): Promise<Responses.SchemaCompareResponse> {\n return operationsByTag.branchSchema.compareBranchSchemas({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, branchName },\n body: { schema },\n ...this.extraProps\n });\n }\n\n public updateBranchSchema(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n migration: Schemas.Migration\n ): Promise<Components.UpdateBranchSchemaResponse> {\n return operationsByTag.branchSchema.updateBranchSchema({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: migration,\n ...this.extraProps\n });\n }\n\n public previewBranchSchemaEdit(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n migration: Schemas.Migration\n ): Promise<Components.PreviewBranchSchemaEditResponse> {\n return operationsByTag.branchSchema.previewBranchSchemaEdit({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: migration,\n ...this.extraProps\n });\n }\n\n public applyBranchSchemaEdit(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n edits: Schemas.SchemaEditScript\n ): Promise<Components.ApplyBranchSchemaEditResponse> {\n return operationsByTag.branchSchema.applyBranchSchemaEdit({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: { edits },\n ...this.extraProps\n });\n }\n\n public getBranchSchemaHistory(\n workspace: Schemas.WorkspaceID,\n database: Schemas.DBName,\n branch: Schemas.BranchName,\n options: Types.GetBranchSchemaHistoryRequestBody = {}\n ): Promise<Types.GetBranchSchemaHistoryResponse> {\n return operationsByTag.branchSchema.getBranchSchemaHistory({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n body: options,\n ...this.extraProps\n });\n }\n}\n","import { XataPlugin, XataPluginOptions } from '../plugins';\nimport { XataApiClient } from './client';\nimport { operationsByTag } from './components';\nimport type * as Responses from './responses';\nimport type * as Schemas from './schemas';\n\nexport * from './client';\nexport * from './components';\nexport type { FetcherExtraProps, FetchImpl } from './fetcher';\nexport { operationsByTag as Operations };\nexport type { Responses, Schemas };\n\nexport class XataApiPlugin implements XataPlugin {\n async build(options: XataPluginOptions) {\n const { fetchImpl, apiKey } = await options.getFetchProps();\n return new XataApiClient({ fetch: fetchImpl, apiKey });\n }\n}\n","import { FetcherExtraProps } from './api/fetcher';\nimport { CacheImpl } from './schema/cache';\nimport { TraceFunction } from './schema/tracing';\n\nexport abstract class XataPlugin {\n abstract build(options: XataPluginOptions): unknown | Promise<unknown>;\n}\n\nexport type XataPluginOptions = {\n getFetchProps: () => Promise<FetcherExtraProps>;\n cache: CacheImpl;\n trace?: TraceFunction;\n};\n","import { isDefined, isObject } from '../util/lang';\nimport { Query } from './query';\nimport { XataRecord } from './record';\n\nexport type PaginationQueryMeta = { page: { cursor: string; more: boolean } };\n\nexport interface Paginable<Record extends XataRecord, Result extends XataRecord = Record> {\n meta: PaginationQueryMeta;\n records: RecordArray<Result>;\n\n nextPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n previousPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n firstPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n lastPage(size?: number, offset?: number): Promise<Page<Record, Result>>;\n\n hasNextPage(): boolean;\n}\n\n/**\n * A Page contains a set of results from a query plus metadata about the retrieved\n * set of values such as the cursor, required to retrieve additional records.\n */\nexport class Page<Record extends XataRecord, Result extends XataRecord = Record> implements Paginable<Record, Result> {\n #query: Query<Record, Result>;\n /**\n * Page metadata, required to retrieve additional records.\n */\n readonly meta: PaginationQueryMeta;\n /**\n * The set of results for this page.\n */\n readonly records: RecordArray<Result>;\n\n constructor(query: Query<Record, Result>, meta: PaginationQueryMeta, records: Result[] = []) {\n this.#query = query;\n this.meta = meta;\n this.records = new RecordArray(this, records);\n }\n\n /**\n * Retrieves the next page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The next page or results.\n */\n async nextPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });\n }\n\n /**\n * Retrieves the previous page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The previous page or results.\n */\n async previousPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, before: this.meta.page.cursor } });\n }\n\n /**\n * Retrieves the first page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The first page or results.\n */\n async firstPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, first: this.meta.page.cursor } });\n }\n\n /**\n * Retrieves the last page of results.\n * @param size Maximum number of results to be retrieved.\n * @param offset Number of results to skip when retrieving the results.\n * @returns The last page or results.\n */\n async lastPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.#query.getPaginated({ pagination: { size, offset, last: this.meta.page.cursor } });\n }\n\n /**\n * Shortcut method to check if there will be additional results if the next page of results is retrieved.\n * @returns Whether or not there will be additional results in the next page of results.\n */\n hasNextPage(): boolean {\n return this.meta.page.more;\n }\n}\n\nexport type CursorNavigationOptions = { first?: string } | { last?: string } | { after?: string; before?: string };\nexport type OffsetNavigationOptions = { size?: number; offset?: number };\n\nexport const PAGINATION_MAX_SIZE = 200;\nexport const PAGINATION_DEFAULT_SIZE = 20;\nexport const PAGINATION_MAX_OFFSET = 800;\nexport const PAGINATION_DEFAULT_OFFSET = 0;\n\nexport function isCursorPaginationOptions(\n options: Record<string, unknown> | undefined | null\n): options is CursorNavigationOptions {\n return (\n isDefined(options) &&\n (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before))\n );\n}\n\nexport class RecordArray<Result extends XataRecord> extends Array<Result> {\n #page: Paginable<Result, Result>;\n\n constructor(page: Paginable<any, Result>, overrideRecords?: Result[]);\n constructor(...args: any[]) {\n super(...RecordArray.parseConstructorParams(...args));\n\n // In the case of serialization/deserialization, the page might be lost\n this.#page = isObject(args[0]?.meta) ? args[0] : { meta: { page: { cursor: '', more: false } }, records: [] };\n }\n\n static parseConstructorParams(...args: any[]) {\n // new <T>(arrayLength: number): T[]\n if (args.length === 1 && typeof args[0] === 'number') {\n return new Array(args[0]);\n }\n\n // new RecordArray<T>(page: Page, overrideRecords: Array | undefined): T[>]\n if (args.length <= 2 && isObject(args[0]?.meta) && Array.isArray(args[1] ?? [])) {\n const result = args[1] ?? args[0].records ?? [];\n return new Array(...result);\n }\n\n // <T>(...items: T[]): T[]\n return new Array(...args);\n }\n\n toArray(): Result[] {\n return new Array(...this);\n }\n\n map<U>(callbackfn: (value: Result, index: number, array: Result[]) => U, thisArg?: any): U[] {\n return this.toArray().map(callbackfn, thisArg);\n }\n\n /**\n * Retrieve next page of records\n *\n * @returns A new array of objects\n */\n async nextPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.nextPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * Retrieve previous page of records\n *\n * @returns A new array of objects\n */\n async previousPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.previousPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * Retrieve first page of records\n *\n * @returns A new array of objects\n */\n async firstPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.firstPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * Retrieve last page of records\n *\n * @returns A new array of objects\n */\n async lastPage(size?: number, offset?: number): Promise<RecordArray<Result>> {\n const newPage = await this.#page.lastPage(size, offset);\n return new RecordArray(newPage);\n }\n\n /**\n * @returns Boolean indicating if there is a next page\n */\n hasNextPage(): boolean {\n return this.#page.meta.page.more;\n }\n}\n","import { Schemas } from '../api';\nimport { FilterExpression } from '../api/schemas';\nimport { compact, isDefined, isString, isStringArray, toBase64 } from '../util/lang';\nimport { OmitBy, RequiredBy } from '../util/types';\nimport { Filter } from './filters';\nimport {\n CursorNavigationOptions,\n isCursorPaginationOptions,\n OffsetNavigationOptions,\n Page,\n Paginable,\n PaginationQueryMeta,\n PAGINATION_DEFAULT_SIZE,\n PAGINATION_MAX_SIZE,\n RecordArray\n} from './pagination';\nimport { XataRecord } from './record';\nimport { Repository } from './repository';\nimport { SelectableColumn, SelectedPick, ValueAtColumn } from './selection';\nimport { SortDirection, SortFilter } from './sorting';\n\ntype BaseOptions<T extends XataRecord> = {\n columns?: SelectableColumn<T>[];\n cache?: number;\n};\n\ntype CursorQueryOptions = {\n pagination?: CursorNavigationOptions & OffsetNavigationOptions;\n filter?: never;\n sort?: never;\n};\n\ntype OffsetQueryOptions<T extends XataRecord> = {\n pagination?: OffsetNavigationOptions;\n filter?: FilterExpression;\n sort?: SortFilter<T> | SortFilter<T>[];\n};\n\nexport type QueryOptions<T extends XataRecord> = BaseOptions<T> & (CursorQueryOptions | OffsetQueryOptions<T>);\n\n/**\n * Query objects contain the information of all filters, sorting, etc. to be included in the database query.\n *\n * Query objects are immutable. Any method that adds more constraints or options to the query will return\n * a new Query object containing the both the previous and the new constraints and options.\n */\nexport class Query<Record extends XataRecord, Result extends XataRecord = Record> implements Paginable<Record, Result> {\n #table: { name: string; schema?: Schemas.Table };\n #repository: Repository<Record>;\n #data: QueryOptions<Record> = { filter: {} };\n\n // Implements pagination\n readonly meta: PaginationQueryMeta = { page: { cursor: 'start', more: true } };\n readonly records: RecordArray<Result> = new RecordArray<Result>(this, []);\n\n constructor(\n repository: Repository<Record> | null,\n table: { name: string; schema?: Schemas.Table },\n data: Partial<QueryOptions<Record>>,\n rawParent?: Partial<QueryOptions<Record>>\n ) {\n this.#table = table;\n\n if (repository) {\n this.#repository = repository;\n } else {\n this.#repository = this as any;\n }\n\n // Clean parent query options if new query is cursor based\n const parent = cleanParent(data, rawParent);\n\n this.#data.filter = data.filter ?? parent?.filter ?? {};\n this.#data.filter.$any = data.filter?.$any ?? parent?.filter?.$any;\n this.#data.filter.$all = data.filter?.$all ?? parent?.filter?.$all;\n this.#data.filter.$not = data.filter?.$not ?? parent?.filter?.$not;\n this.#data.filter.$none = data.filter?.$none ?? parent?.filter?.$none;\n this.#data.sort = data.sort ?? parent?.sort;\n this.#data.columns = data.columns ?? parent?.columns ?? ['*'];\n this.#data.pagination = data.pagination ?? parent?.pagination;\n this.#data.cache = data.cache ?? parent?.cache;\n\n this.any = this.any.bind(this);\n this.all = this.all.bind(this);\n this.not = this.not.bind(this);\n this.filter = this.filter.bind(this);\n this.sort = this.sort.bind(this);\n this.none = this.none.bind(this);\n\n Object.defineProperty(this, 'table', { enumerable: false });\n Object.defineProperty(this, 'repository', { enumerable: false });\n }\n\n getQueryOptions(): QueryOptions<Record> {\n return this.#data;\n }\n\n key(): string {\n const { columns = [], filter = {}, sort = [], pagination = {} } = this.#data;\n const key = JSON.stringify({ columns, filter, sort, pagination });\n return toBase64(key);\n }\n\n /**\n * Builds a new query object representing a logical OR between the given subqueries.\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n any(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $any = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $any } }, this.#data);\n }\n\n /**\n * Builds a new query object representing a logical AND between the given subqueries.\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n all(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $all = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $all } }, this.#data);\n }\n\n /**\n * Builds a new query object representing a logical OR negating each subquery. In pseudo-code: !q1 OR !q2\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n not(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $not = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $not } }, this.#data);\n }\n\n /**\n * Builds a new query object representing a logical AND negating each subquery. In pseudo-code: !q1 AND !q2\n * @param queries An array of subqueries.\n * @returns A new Query object.\n */\n none(...queries: Query<Record, any>[]): Query<Record, Result> {\n const $none = queries.map((query) => query.getQueryOptions().filter ?? {});\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $none } }, this.#data);\n }\n\n /**\n * Builds a new query object adding one or more constraints. Examples:\n *\n * ```\n * query.filter(\"columnName\", columnValue)\n * query.filter(\"columnName\", operator(columnValue)) // Use gt, gte, lt, lte, startsWith,...\n * ```\n *\n * @param column The name of the column to filter.\n * @param value The value to filter.\n * @returns A new Query object.\n */\n filter<F extends SelectableColumn<Record>>(\n column: F,\n value: Filter<NonNullable<ValueAtColumn<Record, F>>>\n ): Query<Record, Result>;\n\n /**\n * Builds a new query object adding one or more constraints. Examples:\n *\n * ```\n * query.filter({ \"columnName\": columnValue })\n * query.filter({\n * \"columnName\": operator(columnValue) // Use gt, gte, lt, lte, startsWith,...\n * })\n * ```\n *\n * @param filters A filter object\n * @returns A new Query object.\n */\n filter(filters?: Filter<Record>): Query<Record, Result>;\n\n filter(a: any, b?: any): Query<Record, Result> {\n if (arguments.length === 1) {\n const constraints = Object.entries(a ?? {}).map(([column, constraint]) => ({ [column]: constraint as any }));\n const $all = compact([this.#data.filter?.$all].flat().concat(constraints));\n\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $all } }, this.#data);\n } else {\n const constraints = isDefined(a) && isDefined(b) ? [{ [a]: this.defaultFilter(a, b) }] : undefined;\n const $all = compact([this.#data.filter?.$all].flat().concat(constraints));\n\n return new Query<Record, Result>(this.#repository, this.#table, { filter: { $all } }, this.#data);\n }\n }\n\n defaultFilter<T>(column: string, value: T) {\n const columnType = this.#table.schema?.columns.find(({ name }) => name === column)?.type;\n // TODO: Fix when we support more array types than string\n if (columnType === 'multiple' && (isString(value) || isStringArray(value))) {\n return { $includes: value };\n }\n\n return value;\n }\n\n /**\n * Builds a new query with a new sort option.\n * @param column The column name.\n * @param direction The direction. Either ascending or descending.\n * @returns A new Query object.\n */\n sort<F extends SelectableColumn<Record>>(column: F, direction: SortDirection = 'asc'): Query<Record, Result> {\n const originalSort = [this.#data.sort ?? []].flat() as SortFilter<Record>[];\n const sort = [...originalSort, { column, direction }];\n return new Query<Record, Result>(this.#repository, this.#table, { sort }, this.#data);\n }\n\n /**\n * Builds a new query specifying the set of columns to be returned in the query response.\n * @param columns Array of column names to be returned by the query.\n * @returns A new Query object.\n */\n select<K extends SelectableColumn<Record>>(columns: K[]) {\n return new Query<Record, SelectedPick<Record, typeof columns>>(\n this.#repository,\n this.#table,\n { columns },\n this.#data\n );\n }\n\n /**\n * Get paginated results\n *\n * @returns A page of results\n */\n getPaginated(): Promise<Page<Record, Result>>;\n\n /**\n * Get paginated results\n *\n * @param options Pagination options\n * @returns A page of results\n */\n getPaginated(options: OmitBy<QueryOptions<Record>, 'columns'>): Promise<Page<Record, Result>>;\n\n /**\n * Get paginated results\n *\n * @param options Pagination options\n * @returns A page of results\n */\n getPaginated<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<Page<Record, SelectedPick<Record, typeof options['columns']>>>;\n\n getPaginated<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Page<Record, Result>> {\n const query = new Query<Record, Result>(this.#repository, this.#table, options, this.#data);\n return this.#repository.query(query);\n }\n\n /**\n * Get results in an iterator\n *\n * @async\n * @returns Async interable of results\n */\n async *[Symbol.asyncIterator](): AsyncIterableIterator<Result> {\n for await (const [record] of this.getIterator({ batchSize: 1 })) {\n yield record;\n }\n }\n\n /**\n * Build an iterator of results\n *\n * @returns Async generator of results array\n */\n getIterator(): AsyncGenerator<Result[]>;\n\n /**\n * Build an iterator of results\n *\n * @param options Pagination options with batchSize\n * @returns Async generator of results array\n */\n getIterator(\n options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'> & { batchSize?: number }\n ): AsyncGenerator<Result[]>;\n\n /**\n * Build an iterator of results\n *\n * @param options Pagination options with batchSize\n * @returns Async generator of results array\n */\n getIterator<\n Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'> & { batchSize?: number }\n >(options: Options): AsyncGenerator<SelectedPick<Record, typeof options['columns']>[]>;\n\n async *getIterator<Result extends XataRecord>(\n options: QueryOptions<Record> & { batchSize?: number } = {}\n ): AsyncGenerator<Result[]> {\n const { batchSize = 1 } = options;\n\n let page = await this.getPaginated({ ...options, pagination: { size: batchSize, offset: 0 } });\n let more = page.hasNextPage();\n\n yield page.records as unknown as Result[];\n\n while (more) {\n page = await page.nextPage();\n more = page.hasNextPage();\n\n yield page.records as unknown as Result[];\n }\n }\n\n /**\n * Performs the query in the database and returns a set of results.\n * @returns An array of records from the database.\n */\n getMany(): Promise<RecordArray<Result>>;\n\n /**\n * Performs the query in the database and returns a set of results.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getMany<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<RecordArray<SelectedPick<Record, typeof options['columns']>>>;\n\n /**\n * Performs the query in the database and returns a set of results.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getMany(options: OmitBy<QueryOptions<Record>, 'columns'>): Promise<RecordArray<Result>>;\n\n async getMany<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<RecordArray<Result>> {\n const { pagination = {}, ...rest } = options;\n const { size = PAGINATION_DEFAULT_SIZE, offset } = pagination;\n const batchSize = size <= PAGINATION_MAX_SIZE ? size : PAGINATION_MAX_SIZE;\n\n let page = await this.getPaginated({ ...rest, pagination: { size: batchSize, offset } });\n const results = [...page.records];\n\n while (page.hasNextPage() && results.length < size) {\n page = await page.nextPage();\n results.push(...page.records);\n }\n\n if (page.hasNextPage() && options.pagination?.size === undefined) {\n console.trace('Calling getMany does not return all results. Paginate to get all results or call getAll.');\n }\n\n const array = new RecordArray(page, results.slice(0, size));\n\n // Method overloading does not provide type inference for the return type.\n return array as unknown as RecordArray<Result>;\n }\n\n /**\n * Performs the query in the database and returns all the results.\n * Warning: If there are a large number of results, this method can have performance implications.\n * @returns An array of records from the database.\n */\n getAll(): Promise<Result[]>;\n\n /**\n * Performs the query in the database and returns all the results.\n * Warning: If there are a large number of results, this method can have performance implications.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getAll<Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'> & { batchSize?: number }>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>[]>;\n\n /**\n * Performs the query in the database and returns all the results.\n * Warning: If there are a large number of results, this method can have performance implications.\n * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getAll(options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'> & { batchSize?: number }): Promise<Result[]>;\n\n async getAll<Result extends XataRecord>(\n options: QueryOptions<Record> & { batchSize?: number } = {}\n ): Promise<Result[]> {\n const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;\n const results = [];\n\n for await (const page of this.getIterator({ ...rest, batchSize })) {\n results.push(...page);\n }\n\n // Method overloading does not provide type inference for the return type.\n return results as unknown as Result[];\n }\n\n /**\n * Performs the query in the database and returns the first result.\n * @returns The first record that matches the query, or null if no record matched the query.\n */\n getFirst(): Promise<Result | null>;\n\n /**\n * Performs the query in the database and returns the first result.\n * @param options Additional options to be used when performing the query.\n * @returns The first record that matches the query, or null if no record matched the query.\n */\n getFirst<Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']> | null>;\n\n /**\n * Performs the query in the database and returns the first result.\n * @param options Additional options to be used when performing the query.\n * @returns The first record that matches the query, or null if no record matched the query.\n */\n getFirst(options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'>): Promise<Result | null>;\n\n async getFirst<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result | null> {\n const records = await this.getMany({ ...options, pagination: { size: 1 } });\n\n // Method overloading does not provide type inference for the return type.\n return (records[0] as unknown as Result) ?? null;\n }\n\n /**\n * Performs the query in the database and returns the first result.\n * @returns The first record that matches the query, or null if no record matched the query.\n * @throws if there are no results.\n */\n getFirstOrThrow(): Promise<Result>;\n\n /**\n * Performs the query in the database and returns the first result.\n * @param options Additional options to be used when performing the query.\n * @returns The first record that matches the query, or null if no record matched the query.\n * @throws if there are no results.\n */\n getFirstOrThrow<Options extends RequiredBy<OmitBy<QueryOptions<Record>, 'pagination'>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>>;\n\n /**\n * Performs the query in the database and returns the first result.\n * @param options Additional options to be used when performing the query.\n * @returns The first record that matches the query, or null if no record matched the query.\n * @throws if there are no results.\n */\n getFirstOrThrow(options: OmitBy<QueryOptions<Record>, 'columns' | 'pagination'>): Promise<Result>;\n\n async getFirstOrThrow<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result> {\n const records = await this.getMany({ ...options, pagination: { size: 1 } });\n if (records[0] === undefined) throw new Error('No results found.');\n\n // Method overloading does not provide type inference for the return type.\n return records[0] as unknown as Result;\n }\n\n /**\n * Builds a new query object adding a cache TTL in milliseconds.\n * @param ttl The cache TTL in milliseconds.\n * @returns A new Query object.\n */\n cache(ttl: number): Query<Record, Result> {\n return new Query<Record, Result>(this.#repository, this.#table, { cache: ttl }, this.#data);\n }\n\n /**\n * Retrieve next page of records\n *\n * @returns A new page object.\n */\n nextPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n /**\n * Retrieve previous page of records\n *\n * @returns A new page object\n */\n previousPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n /**\n * Retrieve first page of records\n *\n * @returns A new page object\n */\n firstPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ pagination: { size, offset } });\n }\n\n /**\n * Retrieve last page of records\n *\n * @returns A new page object\n */\n lastPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ pagination: { size, offset, before: 'end' } });\n }\n\n /**\n * @returns Boolean indicating if there is a next page\n */\n hasNextPage(): boolean {\n return this.meta.page.more;\n }\n}\n\n// When using cursor based pagination, it is not allowed to send new sorting/filtering\n// We removed the sorting/filtering from the query options to avoid the error from the API\nfunction cleanParent<Record extends XataRecord>(\n data: Partial<QueryOptions<Record>>,\n parent?: Partial<QueryOptions<Record>>\n) {\n if (isCursorPaginationOptions(data.pagination)) {\n return { ...parent, sorting: undefined, filter: undefined };\n }\n\n return parent;\n}\n","import { isObject, isString } from '../util/lang';\nimport { SelectableColumn, SelectedPick } from './selection';\n\n/**\n * Represents an identifiable record from the database.\n */\nexport interface Identifiable {\n /**\n * Unique id of this record.\n */\n id: string;\n}\n\nexport interface BaseData {\n [key: string]: any;\n}\n\n/**\n * Represents a persisted record from the database.\n */\nexport interface XataRecord<OriginalRecord extends XataRecord<any> = XataRecord<any>> extends Identifiable {\n /**\n * Get metadata of this record.\n */\n getMetadata(): XataRecordMetadata;\n\n /**\n * Retrieves a refreshed copy of the current record from the database.\n * @param columns The columns to retrieve. If not specified, all first level properties are retrieved.\n * @returns The persisted record with the selected columns, null if not found.\n */\n read<K extends SelectableColumn<OriginalRecord>>(\n columns: K[]\n ): Promise<Readonly<SelectedPick<OriginalRecord, typeof columns>> | null>;\n\n /**\n * Retrieves a refreshed copy of the current record from the database.\n * @returns The persisted record with all first level properties, null if not found.\n */\n read(): Promise<Readonly<SelectedPick<OriginalRecord, ['*']>> | null>;\n\n /**\n * Performs a partial update of the current record. On success a new object is\n * returned and the current object is not mutated.\n * @param partialUpdate The columns and their values that have to be updated.\n * @param columns The columns to retrieve. If not specified, all first level properties are retrieved.\n * @returns The persisted record with the selected columns, null if not found.\n */\n update<K extends SelectableColumn<OriginalRecord>>(\n partialUpdate: Partial<EditableData<OriginalRecord>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<OriginalRecord, typeof columns>> | null>;\n\n /**\n * Performs a partial update of the current record. On success a new object is\n * returned and the current object is not mutated.\n * @param partialUpdate The columns and their values that have to be updated.\n * @returns The persisted record with all first level properties, null if not found.\n */\n update(\n partialUpdate: Partial<EditableData<OriginalRecord>>\n ): Promise<Readonly<SelectedPick<OriginalRecord, ['*']>> | null>;\n\n /**\n * Performs a deletion of the current record in the database.\n * @param columns The columns to retrieve. If not specified, all first level properties are retrieved.\n * @returns The deleted record, null if not found.\n */\n delete<K extends SelectableColumn<OriginalRecord>>(\n columns: K[]\n ): Promise<Readonly<SelectedPick<OriginalRecord, typeof columns>> | null>;\n\n /**\n * Performs a deletion of the current record in the database.\n * @returns The deleted record, null if not found.\n\n */\n delete(): Promise<Readonly<SelectedPick<OriginalRecord, ['*']>> | null>;\n}\n\nexport type Link<Record extends XataRecord> = XataRecord<Record>;\n\nexport type XataRecordMetadata = {\n /**\n * Number that is increased every time the record is updated.\n */\n version: number;\n /*\n * Encoding/Decoding errors\n */\n warnings?: string[];\n};\n\nexport function isIdentifiable(x: any): x is Identifiable & Record<string, unknown> {\n return isObject(x) && isString((x as Partial<Identifiable>)?.id);\n}\n\nexport function isXataRecord(x: any): x is XataRecord & Record<string, unknown> {\n const record = x as XataRecord & Record<string, unknown>;\n const metadata = record?.getMetadata();\n\n return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === 'number';\n}\n\nexport type EditableData<O extends XataRecord> = Identifiable &\n Omit<\n {\n [K in keyof O]: O[K] extends XataRecord\n ? { id: string } | string\n : NonNullable<O[K]> extends XataRecord\n ? { id: string } | string | null | undefined\n : O[K];\n },\n keyof XataRecord\n >;\n","import { isObject, isString } from '../util/lang';\nimport { SingleOrArray, StringKeys, Values } from '../util/types';\nimport { XataRecord } from './record';\nimport { SelectableColumn } from './selection';\n\nexport type SortDirection = 'asc' | 'desc';\nexport type SortFilterExtended<T extends XataRecord> = {\n column: SelectableColumn<T>;\n direction?: SortDirection;\n};\n\nexport type SortFilter<T extends XataRecord> = SelectableColumn<T> | SortFilterExtended<T> | SortFilterBase<T>;\n\ntype SortFilterBase<T extends XataRecord> = {\n [Key in StringKeys<T>]: SortDirection;\n};\n\nexport type ApiSortFilter<T extends XataRecord> = SingleOrArray<\n Values<{\n [Key in SelectableColumn<T>]: { [K in Key]: SortDirection };\n }>\n>;\n\nexport function isSortFilterString<T extends XataRecord>(value: any): value is SelectableColumn<T> {\n return isString(value);\n}\n\nexport function isSortFilterBase<T extends XataRecord>(filter: SortFilter<T>): filter is SortFilterBase<T> {\n return isObject(filter) && Object.values(filter).every((value) => value === 'asc' || value === 'desc');\n}\n\nexport function isSortFilterObject<T extends XataRecord>(filter: SortFilter<T>): filter is SortFilterExtended<T> {\n return isObject(filter) && !isSortFilterBase(filter) && filter.column !== undefined;\n}\n\nexport function buildSortFilter<T extends XataRecord>(filter: SingleOrArray<SortFilter<T>>): ApiSortFilter<T> {\n if (isSortFilterString(filter)) {\n return { [filter]: 'asc' } as { [key in SelectableColumn<T>]: SortDirection };\n } else if (Array.isArray(filter)) {\n return filter.map((item) => buildSortFilter(item)) as { [key in SelectableColumn<T>]: SortDirection }[];\n } else if (isSortFilterBase(filter)) {\n return filter as { [key in SelectableColumn<T>]: SortDirection };\n } else if (isSortFilterObject(filter)) {\n return { [filter.column]: filter.direction ?? 'asc' } as { [key in SelectableColumn<T>]: SortDirection };\n } else {\n throw new Error(`Invalid sort filter: ${filter}`);\n }\n}\n","import { SchemaPluginResult } from '.';\nimport {\n bulkInsertTableRecords,\n deleteRecord,\n getBranchDetails,\n getRecord,\n insertRecord,\n insertRecordWithID,\n queryTable,\n Schemas,\n searchTable,\n updateRecordWithID,\n upsertRecordWithID\n} from '../api';\nimport { FetcherExtraProps } from '../api/fetcher';\nimport { FuzzinessExpression, HighlightExpression, PrefixExpression, RecordsMetadata } from '../api/schemas';\nimport { XataPluginOptions } from '../plugins';\nimport { SearchXataRecord } from '../search';\nimport { Boosters } from '../search/boosters';\nimport { compact, isObject, isString, isStringArray } from '../util/lang';\nimport { Dictionary } from '../util/types';\nimport { VERSION } from '../version';\nimport { CacheImpl } from './cache';\nimport { Filter } from './filters';\nimport { Page } from './pagination';\nimport { Query } from './query';\nimport { EditableData, Identifiable, isIdentifiable, XataRecord } from './record';\nimport { SelectableColumn, SelectedPick } from './selection';\nimport { buildSortFilter } from './sorting';\nimport { AttributeDictionary, defaultTrace, TraceAttributes, TraceFunction } from './tracing';\n\n/**\n * Common interface for performing operations on a table.\n */\nexport abstract class Repository<Record extends XataRecord> extends Query<\n Record,\n Readonly<SelectedPick<Record, ['*']>>\n> {\n /*\n * Creates a single record in the table.\n * @param object Object containing the column names with their values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract create<K extends SelectableColumn<Record>>(\n object: Omit<EditableData<Record>, 'id'> & Partial<Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /*\n * Creates a single record in the table.\n * @param object Object containing the column names with their values to be stored in the table.\n * @returns The full persisted record.\n */\n abstract create(\n object: Omit<EditableData<Record>, 'id'> & Partial<Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates a single record in the table with a unique id.\n * @param id The unique id.\n * @param object Object containing the column names with their values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract create<K extends SelectableColumn<Record>>(\n id: string,\n object: Omit<EditableData<Record>, 'id'>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Creates a single record in the table with a unique id.\n * @param id The unique id.\n * @param object Object containing the column names with their values to be stored in the table.\n * @returns The full persisted record.\n */\n abstract create(id: string, object: Omit<EditableData<Record>, 'id'>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates multiple records in the table.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records in order.\n */\n abstract create<K extends SelectableColumn<Record>>(\n objects: Array<Omit<EditableData<Record>, 'id'> & Partial<Identifiable>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n\n /**\n * Creates multiple records in the table.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @returns Array of the persisted records in order.\n */\n abstract create(\n objects: Array<Omit<EditableData<Record>, 'id'> & Partial<Identifiable>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n\n /**\n * Queries a single record from the table given its unique id.\n * @param id The unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns> | null>>;\n\n /**\n * Queries a single record from the table given its unique id.\n * @param id The unique id.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read(id: string): Promise<Readonly<SelectedPick<Record, ['*']> | null>>;\n\n /**\n * Queries multiple records from the table given their unique id.\n * @param ids The unique ids array.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read<K extends SelectableColumn<Record>>(\n ids: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Queries multiple records from the table given their unique id.\n * @param ids The unique ids array.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read(ids: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Queries a single record from the table by the id in the object.\n * @param object Object containing the id of the record.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns> | null>>;\n\n /**\n * Queries a single record from the table by the id in the object.\n * @param object Object containing the id of the record.\n * @returns The persisted record for the given id or null if the record could not be found.\n */\n abstract read(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']> | null>>;\n\n /**\n * Queries multiple records from the table by the ids in the objects.\n * @param objects Array of objects containing the ids of the records.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read<K extends SelectableColumn<Record>>(\n objects: Identifiable[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Queries multiple records from the table by the ids in the objects.\n * @param objects Array of objects containing the ids of the records.\n * @returns The persisted records for the given ids in order (if a record could not be found null is returned).\n */\n abstract read(objects: Identifiable[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Queries a single record from the table given its unique id.\n * @param id The unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted record for the given id.\n * @throws If the record could not be found.\n */\n abstract readOrThrow<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Queries a single record from the table given its unique id.\n * @param id The unique id.\n * @returns The persisted record for the given id.\n * @throws If the record could not be found.\n */\n abstract readOrThrow(id: string): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Queries multiple records from the table given their unique id.\n * @param ids The unique ids array.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted records for the given ids in order.\n * @throws If one or more records could not be found.\n */\n abstract readOrThrow<K extends SelectableColumn<Record>>(\n ids: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n\n /**\n * Queries multiple records from the table given their unique id.\n * @param ids The unique ids array.\n * @returns The persisted records for the given ids in order.\n * @throws If one or more records could not be found.\n */\n abstract readOrThrow(ids: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n\n /**\n * Queries a single record from the table by the id in the object.\n * @param object Object containing the id of the record.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted record for the given id.\n * @throws If the record could not be found.\n */\n abstract readOrThrow<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Queries a single record from the table by the id in the object.\n * @param object Object containing the id of the record.\n * @returns The persisted record for the given id.\n * @throws If the record could not be found.\n */\n abstract readOrThrow(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Queries multiple records from the table by the ids in the objects.\n * @param objects Array of objects containing the ids of the records.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The persisted records for the given ids in order.\n * @throws If one or more records could not be found.\n */\n abstract readOrThrow<K extends SelectableColumn<Record>>(\n objects: Identifiable[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n\n /**\n * Queries multiple records from the table by the ids in the objects.\n * @param objects Array of objects containing the ids of the records.\n * @returns The persisted records for the given ids in order.\n * @throws If one or more records could not be found.\n */\n abstract readOrThrow(objects: Identifiable[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n\n /**\n * Partially update a single record.\n * @param object An object with its id and the columns to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record, null if the record could not be found.\n */\n abstract update<K extends SelectableColumn<Record>>(\n object: Partial<EditableData<Record>> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n\n /**\n * Partially update a single record.\n * @param object An object with its id and the columns to be updated.\n * @returns The full persisted record, null if the record could not be found.\n */\n abstract update(\n object: Partial<EditableData<Record>> & Identifiable\n ): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n\n /**\n * Partially update a single record given its unique id.\n * @param id The unique id.\n * @param object The column names and their values that have to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record, null if the record could not be found.\n */\n abstract update<K extends SelectableColumn<Record>>(\n id: string,\n object: Partial<EditableData<Record>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n\n /**\n * Partially update a single record given its unique id.\n * @param id The unique id.\n * @param object The column names and their values that have to be updated.\n * @returns The full persisted record, null if the record could not be found.\n */\n abstract update(\n id: string,\n object: Partial<EditableData<Record>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n\n /**\n * Partially updates multiple records.\n * @param objects An array of objects with their ids and columns to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records in order (if a record could not be found null is returned).\n */\n abstract update<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Partially updates multiple records.\n * @param objects An array of objects with their ids and columns to be updated.\n * @returns Array of the persisted records in order (if a record could not be found null is returned).\n */\n abstract update(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Partially update a single record.\n * @param object An object with its id and the columns to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n * @throws If the record could not be found.\n */\n abstract updateOrThrow<K extends SelectableColumn<Record>>(\n object: Partial<EditableData<Record>> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Partially update a single record.\n * @param object An object with its id and the columns to be updated.\n * @returns The full persisted record.\n * @throws If the record could not be found.\n */\n abstract updateOrThrow(\n object: Partial<EditableData<Record>> & Identifiable\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Partially update a single record given its unique id.\n * @param id The unique id.\n * @param object The column names and their values that have to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n * @throws If the record could not be found.\n */\n abstract updateOrThrow<K extends SelectableColumn<Record>>(\n id: string,\n object: Partial<EditableData<Record>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Partially update a single record given its unique id.\n * @param id The unique id.\n * @param object The column names and their values that have to be updated.\n * @returns The full persisted record.\n * @throws If the record could not be found.\n */\n abstract updateOrThrow(\n id: string,\n object: Partial<EditableData<Record>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Partially updates multiple records.\n * @param objects An array of objects with their ids and columns to be updated.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records in order.\n * @throws If one or more records could not be found.\n */\n abstract updateOrThrow<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n\n /**\n * Partially updates multiple records.\n * @param objects An array of objects with their ids and columns to be updated.\n * @returns Array of the persisted records in order.\n * @throws If one or more records could not be found.\n */\n abstract updateOrThrow(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param object Object containing the column names with their values to be persisted in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract createOrUpdate<K extends SelectableColumn<Record>>(\n object: EditableData<Record> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param object Object containing the column names with their values to be persisted in the table.\n * @returns The full persisted record.\n */\n abstract createOrUpdate(object: EditableData<Record> & Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param id A unique id.\n * @param object The column names and the values to be persisted.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The full persisted record.\n */\n abstract createOrUpdate<K extends SelectableColumn<Record>>(\n id: string,\n object: Omit<EditableData<Record>, 'id'>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param id A unique id.\n * @param object The column names and the values to be persisted.\n * @returns The full persisted record.\n */\n abstract createOrUpdate(\n id: string,\n object: Omit<EditableData<Record>, 'id'>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the persisted records.\n */\n abstract createOrUpdate<K extends SelectableColumn<Record>>(\n objects: Array<EditableData<Record> & Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n\n /**\n * Creates or updates a single record. If a record exists with the given id,\n * it will be update, otherwise a new record will be created.\n * @param objects Array of objects with the column names and the values to be stored in the table.\n * @returns Array of the persisted records.\n */\n abstract createOrUpdate(\n objects: Array<EditableData<Record> & Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n\n /**\n * Deletes a record given its unique id.\n * @param object An object with a unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The deleted record, null if the record could not be found.\n */\n abstract delete<K extends SelectableColumn<Record>>(\n object: Identifiable & Partial<EditableData<Record>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n\n /**\n * Deletes a record given its unique id.\n * @param object An object with a unique id.\n * @returns The deleted record, null if the record could not be found.\n */\n abstract delete(\n object: Identifiable & Partial<EditableData<Record>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n\n /**\n * Deletes a record given a unique id.\n * @param id The unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The deleted record, null if the record could not be found.\n */\n abstract delete<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n\n /**\n * Deletes a record given a unique id.\n * @param id The unique id.\n * @returns The deleted record, null if the record could not be found.\n */\n abstract delete(id: string): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n\n /**\n * Deletes multiple records given an array of objects with ids.\n * @param objects An array of objects with unique ids.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n */\n abstract delete<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Deletes multiple records given an array of objects with ids.\n * @param objects An array of objects with unique ids.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n */\n abstract delete(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Deletes multiple records given an array of unique ids.\n * @param objects An array of ids.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n */\n abstract delete<K extends SelectableColumn<Record>>(\n objects: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n\n /**\n * Deletes multiple records given an array of unique ids.\n * @param objects An array of ids.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n */\n abstract delete(objects: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n\n /**\n * Deletes a record given its unique id.\n * @param object An object with a unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The deleted record, null if the record could not be found.\n * @throws If the record could not be found.\n */\n abstract deleteOrThrow<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Deletes a record given its unique id.\n * @param object An object with a unique id.\n * @returns The deleted record, null if the record could not be found.\n * @throws If the record could not be found.\n */\n abstract deleteOrThrow(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Deletes a record given a unique id.\n * @param id The unique id.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns The deleted record, null if the record could not be found.\n * @throws If the record could not be found.\n */\n abstract deleteOrThrow<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n\n /**\n * Deletes a record given a unique id.\n * @param id The unique id.\n * @returns The deleted record, null if the record could not be found.\n * @throws If the record could not be found.\n */\n abstract deleteOrThrow(id: string): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n\n /**\n * Deletes multiple records given an array of objects with ids.\n * @param objects An array of objects with unique ids.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n * @throws If one or more records could not be found.\n */\n abstract deleteOrThrow<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n\n /**\n * Deletes multiple records given an array of objects with ids.\n * @param objects An array of objects with unique ids.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n * @throws If one or more records could not be found.\n */\n abstract deleteOrThrow(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n\n /**\n * Deletes multiple records given an array of unique ids.\n * @param objects An array of ids.\n * @param columns Array of columns to be returned. If not specified, first level columns will be returned.\n * @returns Array of the deleted records in order (if a record could not be found null is returned).\n * @throws If one or more records could not be found.\n */\n abstract deleteOrThrow<K extends SelectableColumn<Record>>(\n objects: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n\n /**\n * Deletes multiple records given an array of unique ids.\n * @param objects An array of ids.\n * @returns Array of the deleted records in order.\n * @throws If one or more records could not be found.\n */\n abstract deleteOrThrow(objects: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n\n /**\n * Search for records in the table.\n * @param query The query to search for.\n * @param options The options to search with (like: fuzziness)\n * @returns The found records.\n */\n abstract search(\n query: string,\n options?: {\n fuzziness?: FuzzinessExpression;\n prefix?: PrefixExpression;\n highlight?: HighlightExpression;\n filter?: Filter<Record>;\n boosters?: Boosters<Record>[];\n }\n ): Promise<SearchXataRecord<SelectedPick<Record, ['*']>>[]>;\n\n abstract query<Result extends XataRecord>(query: Query<Record, Result>): Promise<Page<Record, Result>>;\n}\n\nexport class RestRepository<Record extends XataRecord>\n extends Query<Record, SelectedPick<Record, ['*']>>\n implements Repository<Record>\n{\n #table: string;\n #getFetchProps: () => Promise<FetcherExtraProps>;\n #db: SchemaPluginResult<any>;\n #cache: CacheImpl;\n #schemaTables?: Schemas.Table[];\n #trace: TraceFunction;\n\n constructor(options: {\n table: string;\n db: SchemaPluginResult<any>;\n pluginOptions: XataPluginOptions;\n schemaTables?: Schemas.Table[];\n }) {\n super(\n null,\n { name: options.table, schema: options.schemaTables?.find((table) => table.name === options.table) },\n {}\n );\n\n this.#table = options.table;\n this.#getFetchProps = options.pluginOptions.getFetchProps;\n this.#db = options.db;\n this.#cache = options.pluginOptions.cache;\n this.#schemaTables = options.schemaTables;\n\n const trace = options.pluginOptions.trace ?? defaultTrace;\n this.#trace = async <T>(\n name: string,\n fn: (options: { setAttributes: (attrs: AttributeDictionary) => void }) => T,\n options: AttributeDictionary = {}\n ) => {\n return trace<T>(name, fn, {\n ...options,\n [TraceAttributes.TABLE]: this.#table,\n [TraceAttributes.KIND]: 'sdk-operation',\n [TraceAttributes.VERSION]: VERSION\n });\n };\n }\n\n async create<K extends SelectableColumn<Record>>(\n object: EditableData<Record> & Partial<Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async create(object: EditableData<Record> & Partial<Identifiable>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async create<K extends SelectableColumn<Record>>(\n id: string,\n object: EditableData<Record>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async create(id: string, object: EditableData<Record>): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async create<K extends SelectableColumn<Record>>(\n objects: Array<EditableData<Record> & Partial<Identifiable>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n async create(\n objects: Array<EditableData<Record> & Partial<Identifiable>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n async create<K extends SelectableColumn<Record>>(\n a: string | (EditableData<Record> & Partial<Identifiable>) | Array<EditableData<Record> & Partial<Identifiable>>,\n b?: EditableData<Record> | K[],\n c?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, K[]>>\n | Readonly<SelectedPick<Record, K[]>>[]\n | Readonly<SelectedPick<Record, ['*']>>\n | Readonly<SelectedPick<Record, ['*']>>[]\n > {\n return this.#trace('create', async () => {\n // Create many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n const columns = isStringArray(b) ? b : undefined;\n return this.#bulkInsertTableRecords(a, columns);\n }\n\n // Create one record with id as param\n if (isString(a) && isObject(b)) {\n if (a === '') throw new Error(\"The id can't be empty\");\n\n const columns = isStringArray(c) ? c : undefined;\n return this.#insertRecordWithId(a, b, columns);\n }\n\n // Create one record with id as property\n if (isObject(a) && isString(a.id)) {\n if (a.id === '') throw new Error(\"The id can't be empty\");\n\n const columns = isStringArray(b) ? b : undefined;\n return this.#insertRecordWithId(a.id, { ...a, id: undefined }, columns);\n }\n\n // Create one record without id\n if (isObject(a)) {\n const columns = isStringArray(b) ? b : undefined;\n return this.#insertRecordWithoutId(a, columns);\n }\n\n throw new Error('Invalid arguments for create method');\n });\n }\n\n async #insertRecordWithoutId(object: EditableData<Record>, columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n const record = transformObjectLinks(object);\n\n const response = await insertRecord({\n pathParams: {\n workspace: '{workspaceId}',\n dbBranchName: '{dbBranch}',\n tableName: this.#table\n },\n queryParams: { columns },\n body: record,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async #insertRecordWithId(\n recordId: string,\n object: EditableData<Record>,\n columns: SelectableColumn<Record>[] = ['*']\n ) {\n const fetchProps = await this.#getFetchProps();\n\n const record = transformObjectLinks(object);\n\n const response = await insertRecordWithID({\n pathParams: {\n workspace: '{workspaceId}',\n dbBranchName: '{dbBranch}',\n tableName: this.#table,\n recordId\n },\n body: record,\n queryParams: { createOnly: true, columns },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async #bulkInsertTableRecords(objects: EditableData<Record>[], columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n const records = objects.map((object) => transformObjectLinks(object));\n\n const response = await bulkInsertTableRecords({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table },\n queryParams: { columns },\n body: { records },\n ...fetchProps\n });\n\n if (!isResponseWithRecords(response)) {\n throw new Error(\"Request included columns but server didn't include them\");\n }\n\n const schemaTables = await this.#getSchemaTables();\n return response.records?.map((item) => initObject(this.#db, schemaTables, this.#table, item)) as any;\n }\n\n async read<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns> | null>>;\n async read(id: string): Promise<Readonly<SelectedPick<Record, ['*']> | null>>;\n async read<K extends SelectableColumn<Record>>(\n ids: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n async read(ids: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n async read<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns> | null>>;\n async read(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']> | null>>;\n async read<K extends SelectableColumn<Record>>(\n objects: Identifiable[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n async read(objects: Identifiable[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n async read<K extends SelectableColumn<Record>>(\n a: string | string[] | Identifiable | Identifiable[],\n b?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Array<Readonly<SelectedPick<Record, ['*']>> | null>\n | Readonly<SelectedPick<Record, K[]>>\n | Array<Readonly<SelectedPick<Record, K[]>> | null>\n | null\n > {\n return this.#trace('read', async () => {\n const columns = isStringArray(b) ? b : ['*' as const];\n\n // Read many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n const ids = a.map((item) => extractId(item));\n\n const finalObjects = await this.getAll({ filter: { id: { $any: compact(ids) } }, columns });\n\n // Maintain order of objects\n const dictionary = finalObjects.reduce((acc, object) => {\n acc[object.id] = object;\n return acc;\n }, {} as Dictionary<any>);\n\n return ids.map((id) => dictionary[id ?? ''] ?? null);\n }\n\n // Read one record\n const id = extractId(a);\n if (id) {\n const fetchProps = await this.#getFetchProps();\n\n try {\n const response = await getRecord({\n pathParams: {\n workspace: '{workspaceId}',\n dbBranchName: '{dbBranch}',\n tableName: this.#table,\n recordId: id\n },\n queryParams: { columns },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response);\n } catch (e) {\n if (isObject(e) && e.status === 404) {\n return null;\n }\n\n throw e;\n }\n }\n\n return null;\n });\n }\n\n async readOrThrow<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async readOrThrow(id: string): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async readOrThrow<K extends SelectableColumn<Record>>(\n ids: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n async readOrThrow(ids: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n async readOrThrow<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async readOrThrow(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async readOrThrow<K extends SelectableColumn<Record>>(\n objects: Identifiable[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n async readOrThrow(objects: Identifiable[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n async readOrThrow<K extends SelectableColumn<Record>>(\n a: string | string[] | Identifiable | Identifiable[],\n b?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Readonly<SelectedPick<Record, ['*']>>[]\n | Readonly<SelectedPick<Record, K[]>>\n | Readonly<SelectedPick<Record, K[]>>[]\n > {\n return this.#trace('readOrThrow', async () => {\n const result = await this.read(a as any, b as any);\n\n if (Array.isArray(result)) {\n const missingIds = compact(\n (a as Array<string | Identifiable>)\n .filter((_item, index) => result[index] === null)\n .map((item) => extractId(item))\n );\n\n if (missingIds.length > 0) {\n throw new Error(`Could not find records with ids: ${missingIds.join(', ')}`);\n }\n\n return result as any;\n }\n\n if (result === null) {\n const id = extractId(a) ?? 'unknown';\n throw new Error(`Record with id ${id} not found`);\n }\n\n return result;\n });\n }\n\n async update<K extends SelectableColumn<Record>>(\n object: Partial<EditableData<Record>> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n async update(\n object: Partial<EditableData<Record>> & Identifiable\n ): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n async update<K extends SelectableColumn<Record>>(\n id: string,\n object: Partial<EditableData<Record>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n async update(\n id: string,\n object: Partial<EditableData<Record>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n async update<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n async update(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n async update<K extends SelectableColumn<Record>>(\n a: string | (Partial<EditableData<Record>> & Identifiable) | Array<Partial<EditableData<Record>> & Identifiable>,\n b?: Partial<EditableData<Record>> | K[],\n c?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Array<Readonly<SelectedPick<Record, ['*']>> | null>\n | Readonly<SelectedPick<Record, K[]>>\n | Array<Readonly<SelectedPick<Record, K[]>> | null>\n | null\n > {\n return this.#trace('update', async () => {\n // Update many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n if (a.length > 100) {\n // TODO: Implement bulk update when API has support for it\n console.warn('Bulk update operation is not optimized in the Xata API yet, this request might be slow');\n }\n\n const columns = isStringArray(b) ? b : (['*'] as K[]);\n return Promise.all(a.map((object) => this.update(object, columns)));\n }\n\n // Update one record with id as param\n if (isString(a) && isObject(b)) {\n const columns = isStringArray(c) ? c : undefined;\n return this.#updateRecordWithID(a, b, columns);\n }\n\n // Update one record with id as property\n if (isObject(a) && isString(a.id)) {\n const columns = isStringArray(b) ? b : undefined;\n return this.#updateRecordWithID(a.id, { ...a, id: undefined }, columns);\n }\n\n throw new Error('Invalid arguments for update method');\n });\n }\n\n async updateOrThrow<K extends SelectableColumn<Record>>(\n object: Partial<EditableData<Record>> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async updateOrThrow(\n object: Partial<EditableData<Record>> & Identifiable\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async updateOrThrow<K extends SelectableColumn<Record>>(\n id: string,\n object: Partial<EditableData<Record>>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async updateOrThrow(\n id: string,\n object: Partial<EditableData<Record>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async updateOrThrow<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n async updateOrThrow(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n async updateOrThrow<K extends SelectableColumn<Record>>(\n a: string | (Partial<EditableData<Record>> & Identifiable) | Array<Partial<EditableData<Record>> & Identifiable>,\n b?: Partial<EditableData<Record>> | K[],\n c?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Array<Readonly<SelectedPick<Record, ['*']>>>\n | Readonly<SelectedPick<Record, K[]>>\n | Array<Readonly<SelectedPick<Record, K[]>>>\n > {\n return this.#trace('updateOrThrow', async () => {\n const result = await this.update(a as any, b as any, c as any);\n\n if (Array.isArray(result)) {\n const missingIds = compact(\n (a as Array<string | Identifiable>)\n .filter((_item, index) => result[index] === null)\n .map((item) => extractId(item))\n );\n\n if (missingIds.length > 0) {\n throw new Error(`Could not find records with ids: ${missingIds.join(', ')}`);\n }\n\n return result as any;\n }\n\n if (result === null) {\n const id = extractId(a) ?? 'unknown';\n throw new Error(`Record with id ${id} not found`);\n }\n\n return result;\n });\n }\n\n async #updateRecordWithID(\n recordId: string,\n object: Partial<EditableData<Record>>,\n columns: SelectableColumn<Record>[] = ['*']\n ) {\n const fetchProps = await this.#getFetchProps();\n\n const record = transformObjectLinks(object);\n\n try {\n const response = await updateRecordWithID({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n queryParams: { columns },\n body: record,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n } catch (e) {\n if (isObject(e) && e.status === 404) {\n return null;\n }\n\n throw e;\n }\n }\n\n async createOrUpdate<K extends SelectableColumn<Record>>(\n object: EditableData<Record> & Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async createOrUpdate(object: EditableData<Record> & Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n id: string,\n object: Omit<EditableData<Record>, 'id'>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async createOrUpdate(\n id: string,\n object: Omit<EditableData<Record>, 'id'>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n objects: Array<EditableData<Record> & Identifiable>,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>[]>;\n async createOrUpdate(\n objects: Array<EditableData<Record> & Identifiable>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>[]>;\n async createOrUpdate<K extends SelectableColumn<Record>>(\n a: string | EditableData<Record> | EditableData<Record>[],\n b?: EditableData<Record> | Omit<EditableData<Record>, 'id'> | K[],\n c?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Array<Readonly<SelectedPick<Record, ['*']>>>\n | Readonly<SelectedPick<Record, K[]>>\n | Array<Readonly<SelectedPick<Record, K[]>>>\n > {\n return this.#trace('createOrUpdate', async () => {\n // Create or update many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n if (a.length > 100) {\n // TODO: Implement bulk update when API has support for it\n console.warn('Bulk update operation is not optimized in the Xata API yet, this request might be slow');\n }\n\n const columns = isStringArray(b) ? b : (['*'] as K[]);\n return Promise.all(a.map((object) => this.createOrUpdate(object as any, columns)));\n }\n\n // Create or update one record with id as param\n if (isString(a) && isObject(b)) {\n const columns = isStringArray(c) ? c : undefined;\n return this.#upsertRecordWithID(a, b, columns);\n }\n\n // Create or update one record with id as property\n if (isObject(a) && isString(a.id)) {\n const columns = isStringArray(c) ? c : undefined;\n return this.#upsertRecordWithID(a.id, { ...a, id: undefined }, columns);\n }\n\n throw new Error('Invalid arguments for createOrUpdate method');\n });\n }\n\n async #upsertRecordWithID(\n recordId: string,\n object: Omit<EditableData<Record>, 'id'>,\n columns: SelectableColumn<Record>[] = ['*']\n ) {\n const fetchProps = await this.#getFetchProps();\n\n const response = await upsertRecordWithID({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n queryParams: { columns },\n body: object,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n }\n\n async delete<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n async delete(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n async delete<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>> | null>;\n async delete(id: string): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;\n async delete<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n async delete(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n async delete<K extends SelectableColumn<Record>>(\n objects: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>> | null>>;\n async delete(objects: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>> | null>>;\n async delete<K extends SelectableColumn<Record>>(\n a: string | Identifiable | Array<string | Identifiable>,\n b?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Array<Readonly<SelectedPick<Record, ['*']>> | null>\n | Readonly<SelectedPick<Record, K[]>>\n | Array<Readonly<SelectedPick<Record, K[]>> | null>\n | null\n > {\n return this.#trace('delete', async () => {\n // Delete many records\n if (Array.isArray(a)) {\n if (a.length === 0) return [];\n\n if (a.length > 100) {\n // TODO: Implement bulk delete when API has support for it\n console.warn('Bulk delete operation is not optimized in the Xata API yet, this request might be slow');\n }\n\n return Promise.all(a.map((id) => this.delete(id as any, b as any)));\n }\n\n // Delete one record with id as param\n if (isString(a)) {\n return this.#deleteRecord(a, b);\n }\n\n // Delete one record with id as property\n if (isObject(a) && isString(a.id)) {\n return this.#deleteRecord(a.id, b);\n }\n\n throw new Error('Invalid arguments for delete method');\n });\n }\n\n async deleteOrThrow<K extends SelectableColumn<Record>>(\n object: Identifiable,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async deleteOrThrow(object: Identifiable): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async deleteOrThrow<K extends SelectableColumn<Record>>(\n id: string,\n columns: K[]\n ): Promise<Readonly<SelectedPick<Record, typeof columns>>>;\n async deleteOrThrow(id: string): Promise<Readonly<SelectedPick<Record, ['*']>>>;\n async deleteOrThrow<K extends SelectableColumn<Record>>(\n objects: Array<Partial<EditableData<Record>> & Identifiable>,\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n async deleteOrThrow(\n objects: Array<Partial<EditableData<Record>> & Identifiable>\n ): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n async deleteOrThrow<K extends SelectableColumn<Record>>(\n objects: string[],\n columns: K[]\n ): Promise<Array<Readonly<SelectedPick<Record, typeof columns>>>>;\n async deleteOrThrow(objects: string[]): Promise<Array<Readonly<SelectedPick<Record, ['*']>>>>;\n async deleteOrThrow<K extends SelectableColumn<Record>>(\n a: string | Identifiable | Array<string | Identifiable>,\n b?: K[]\n ): Promise<\n | Readonly<SelectedPick<Record, ['*']>>\n | Array<Readonly<SelectedPick<Record, ['*']>>>\n | Readonly<SelectedPick<Record, K[]>>\n | Array<Readonly<SelectedPick<Record, K[]>>>\n > {\n return this.#trace('deleteOrThrow', async () => {\n const result = await this.delete(a as any, b as any);\n\n if (Array.isArray(result)) {\n const missingIds = compact(\n (a as Array<string | Identifiable>)\n .filter((_item, index) => result[index] === null)\n .map((item) => extractId(item))\n );\n\n if (missingIds.length > 0) {\n throw new Error(`Could not find records with ids: ${missingIds.join(', ')}`);\n }\n\n return result as any;\n } else if (result === null) {\n const id = extractId(a) ?? 'unknown';\n throw new Error(`Record with id ${id} not found`);\n }\n\n return result;\n });\n }\n\n async #deleteRecord(recordId: string, columns: SelectableColumn<Record>[] = ['*']) {\n const fetchProps = await this.#getFetchProps();\n\n try {\n const response = await deleteRecord({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n queryParams: { columns },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return initObject(this.#db, schemaTables, this.#table, response) as any;\n } catch (e) {\n if (isObject(e) && e.status === 404) {\n return null;\n }\n\n throw e;\n }\n }\n\n async search(\n query: string,\n options: {\n fuzziness?: FuzzinessExpression;\n prefix?: PrefixExpression;\n highlight?: HighlightExpression;\n filter?: Filter<Record>;\n boosters?: Boosters<Record>[];\n } = {}\n ) {\n return this.#trace('search', async () => {\n const fetchProps = await this.#getFetchProps();\n\n const { records } = await searchTable({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table },\n body: {\n query,\n fuzziness: options.fuzziness,\n prefix: options.prefix,\n highlight: options.highlight,\n filter: options.filter as Schemas.FilterExpression,\n boosters: options.boosters as Schemas.BoosterExpression[]\n },\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n return records.map((item) => initObject(this.#db, schemaTables, this.#table, item)) as any;\n });\n }\n\n async query<Result extends XataRecord>(query: Query<Record, Result>): Promise<Page<Record, Result>> {\n return this.#trace('query', async () => {\n const cacheQuery = await this.#getCacheQuery<Result>(query);\n if (cacheQuery) return new Page<Record, Result>(query, cacheQuery.meta, cacheQuery.records);\n\n const data = query.getQueryOptions();\n\n const body = {\n filter: cleanFilter(data.filter),\n sort: data.sort !== undefined ? buildSortFilter(data.sort) : undefined,\n page: data.pagination,\n columns: data.columns\n };\n\n const fetchProps = await this.#getFetchProps();\n const { meta, records: objects } = await queryTable({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table },\n body,\n ...fetchProps\n });\n\n const schemaTables = await this.#getSchemaTables();\n const records = objects.map((record) => initObject<Result>(this.#db, schemaTables, this.#table, record));\n await this.#setCacheQuery(query, meta, records);\n\n return new Page<Record, Result>(query, meta, records);\n });\n }\n\n async #setCacheQuery(query: Query<Record, XataRecord>, meta: RecordsMetadata, records: XataRecord[]): Promise<void> {\n await this.#cache.set(`query_${this.#table}:${query.key()}`, { date: new Date(), meta, records });\n }\n\n async #getCacheQuery<T extends XataRecord>(\n query: Query<Record, XataRecord>\n ): Promise<{ meta: RecordsMetadata; records: T[] } | null> {\n const key = `query_${this.#table}:${query.key()}`;\n const result = await this.#cache.get<{ date: Date; meta: RecordsMetadata; records: T[] }>(key);\n if (!result) return null;\n\n const { cache: ttl = this.#cache.defaultQueryTTL } = query.getQueryOptions();\n if (ttl < 0) return null;\n\n const hasExpired = result.date.getTime() + ttl < Date.now();\n return hasExpired ? null : result;\n }\n\n async #getSchemaTables(): Promise<Schemas.Table[]> {\n if (this.#schemaTables) return this.#schemaTables;\n const fetchProps = await this.#getFetchProps();\n\n const { schema } = await getBranchDetails({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n ...fetchProps\n });\n\n this.#schemaTables = schema.tables;\n return schema.tables;\n }\n}\n\nconst transformObjectLinks = (object: any) => {\n return Object.entries(object).reduce((acc, [key, value]) => {\n // Ignore internal properties\n if (key === 'xata') return acc;\n\n // Transform links to identifier\n return { ...acc, [key]: isIdentifiable(value) ? value.id : value };\n }, {});\n};\n\nexport const initObject = <T>(\n db: Record<string, Repository<any>>,\n schemaTables: Schemas.Table[],\n table: string,\n object: Record<string, unknown>\n) => {\n const result: Dictionary<unknown> = {};\n const { xata, ...rest } = object ?? {};\n Object.assign(result, rest);\n\n const { columns } = schemaTables.find(({ name }) => name === table) ?? {};\n if (!columns) console.error(`Table ${table} not found in schema`);\n\n for (const column of columns ?? []) {\n const value = result[column.name];\n\n switch (column.type) {\n case 'datetime': {\n const date = value !== undefined ? new Date(value as string) : undefined;\n\n if (date && isNaN(date.getTime())) {\n console.error(`Failed to parse date ${value} for field ${column.name}`);\n } else if (date) {\n result[column.name] = date;\n }\n\n break;\n }\n case 'link': {\n const linkTable = column.link?.table;\n\n if (!linkTable) {\n console.error(`Failed to parse link for field ${column.name}`);\n } else if (isObject(value)) {\n result[column.name] = initObject(db, schemaTables, linkTable, value);\n } else {\n result[column.name] = null;\n }\n\n break;\n }\n default:\n result[column.name] = value ?? null;\n if (column.notNull === true && value === null) {\n console.error(`Parse error, column ${column.name} is non nullable and value resolves null`);\n }\n break;\n }\n }\n\n result.read = function (columns?: any) {\n return db[table].read(result['id'] as string, columns);\n };\n\n result.update = function (data: any, columns?: any) {\n return db[table].update(result['id'] as string, data, columns);\n };\n\n result.delete = function () {\n return db[table].delete(result['id'] as string);\n };\n\n result.getMetadata = function () {\n return xata;\n };\n\n for (const prop of ['read', 'update', 'delete', 'getMetadata']) {\n Object.defineProperty(result, prop, { enumerable: false });\n }\n\n Object.freeze(result);\n return result as T;\n};\n\nfunction isResponseWithRecords(value: any): value is { records: Schemas.XataRecord[] } {\n return isObject(value) && Array.isArray(value.records);\n}\n\nfunction extractId(value: any): string | undefined {\n if (isString(value)) return value;\n if (isObject(value) && isString(value.id)) return value.id;\n return undefined;\n}\n\nfunction cleanFilter(filter?: Schemas.FilterExpression) {\n if (!filter) return undefined;\n\n const values = Object.values(filter)\n .filter(Boolean)\n .filter((value) => (Array.isArray(value) ? value.length > 0 : true));\n\n return values.length > 0 ? filter : undefined;\n}\n","export interface CacheImpl {\n defaultQueryTTL: number;\n\n getAll(): Promise<Record<string, unknown>>;\n get: <T>(key: string) => Promise<T | null>;\n set: <T>(key: string, value: T) => Promise<void>;\n delete: (key: string) => Promise<void>;\n clear: () => Promise<void>;\n}\n\nexport interface SimpleCacheOptions {\n max?: number;\n defaultQueryTTL?: number;\n}\n\nexport class SimpleCache implements CacheImpl {\n #map: Map<string, unknown>;\n\n capacity: number;\n defaultQueryTTL: number;\n\n constructor(options: SimpleCacheOptions = {}) {\n this.#map = new Map();\n this.capacity = options.max ?? 500;\n this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1000;\n }\n\n async getAll(): Promise<Record<string, unknown>> {\n return Object.fromEntries(this.#map);\n }\n\n async get<T>(key: string): Promise<T | null> {\n return (this.#map.get(key) ?? null) as T | null;\n }\n\n async set<T>(key: string, value: T): Promise<void> {\n await this.delete(key);\n this.#map.set(key, value);\n\n if (this.#map.size > this.capacity) {\n const leastRecentlyUsed = this.#map.keys().next().value;\n await this.delete(leastRecentlyUsed);\n }\n }\n\n async delete(key: string): Promise<void> {\n this.#map.delete(key);\n }\n\n async clear(): Promise<void> {\n return this.#map.clear();\n }\n}\n","import {\n ArrayFilter,\n ComparableType,\n ComparableTypeFilter,\n ExistanceFilter,\n PropertyFilter,\n StringTypeFilter\n} from './filters';\nimport { SelectableColumn } from './selection';\n\n/**\n * Operator to restrict results to only values that are greater than the given value.\n */\nexport const greaterThan = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $gt: value });\n\n/**\n * Operator to restrict results to only values that are greater than the given value.\n */\nexport const gt = greaterThan;\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const greaterThanEquals = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $ge: value });\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const greaterEquals = greaterThanEquals;\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const gte = greaterThanEquals;\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const ge = greaterThanEquals;\n\n/**\n * Operator to restrict results to only values that are lower than the given value.\n */\nexport const lessThan = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $lt: value });\n\n/**\n * Operator to restrict results to only values that are lower than the given value.\n */\nexport const lt = lessThan;\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lessThanEquals = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $le: value });\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lessEquals = lessThanEquals;\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lte = lessThanEquals;\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const le = lessThanEquals;\n\n/**\n * Operator to restrict results to only values that are not null.\n */\nexport const exists = <T>(column: SelectableColumn<T>): ExistanceFilter<T> => ({ $exists: column });\n\n/**\n * Operator to restrict results to only values that are null.\n */\nexport const notExists = <T>(column: SelectableColumn<T>): ExistanceFilter<T> => ({ $notExists: column });\n\n/**\n * Operator to restrict results to only values that start with the given prefix.\n */\nexport const startsWith = (value: string): StringTypeFilter => ({ $startsWith: value });\n\n/**\n * Operator to restrict results to only values that end with the given suffix.\n */\nexport const endsWith = (value: string): StringTypeFilter => ({ $endsWith: value });\n\n/**\n * Operator to restrict results to only values that match the given pattern.\n */\nexport const pattern = (value: string): StringTypeFilter => ({ $pattern: value });\n\n/**\n * Operator to restrict results to only values that are equal to the given value.\n */\nexport const is = <T>(value: T): PropertyFilter<T> => ({ $is: value });\n\n/**\n * Operator to restrict results to only values that are equal to the given value.\n */\nexport const equals = is;\n\n/**\n * Operator to restrict results to only values that are not equal to the given value.\n */\nexport const isNot = <T>(value: T): PropertyFilter<T> => ({ $isNot: value });\n\n/**\n * Operator to restrict results to only values that contain the given value.\n */\nexport const contains = (value: string): StringTypeFilter => ({ $contains: value });\n\n/**\n * Operator to restrict results if some array items match the predicate.\n */\nexport const includes = <T>(value: T): ArrayFilter<T> => ({ $includes: value });\n\n/**\n * Operator to restrict results if all array items match the predicate.\n */\nexport const includesAll = <T>(value: T): ArrayFilter<T> => ({ $includesAll: value });\n\n/**\n * Operator to restrict results if none array items match the predicate.\n */\nexport const includesNone = <T>(value: T): ArrayFilter<T> => ({ $includesNone: value });\n\n/**\n * Operator to restrict results if some array items match the predicate.\n */\nexport const includesAny = <T>(value: T): ArrayFilter<T> => ({ $includesAny: value });\n","import type { Schemas } from '../api';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { isString } from '../util/lang';\nimport { XataRecord } from './record';\nimport { Repository, RestRepository } from './repository';\n\nexport * from './cache';\nexport * from './inference';\nexport * from './operators';\nexport * from './pagination';\nexport { Query } from './query';\nexport { isIdentifiable, isXataRecord } from './record';\nexport type { BaseData, EditableData, Identifiable, Link, XataRecord } from './record';\nexport { Repository, RestRepository } from './repository';\nexport * from './selection';\n\nexport type SchemaDefinition = {\n table: string;\n};\n\nexport type SchemaPluginResult<Schemas extends Record<string, XataRecord>> = {\n [Key in keyof Schemas]: Repository<Schemas[Key]>;\n};\n\nexport class SchemaPlugin<Schemas extends Record<string, XataRecord>> extends XataPlugin {\n #tables: Record<string, Repository<any>> = {};\n #schemaTables?: Schemas.Table[];\n\n constructor(schemaTables?: Schemas.Table[]) {\n super();\n\n this.#schemaTables = schemaTables;\n }\n\n build(pluginOptions: XataPluginOptions): SchemaPluginResult<Schemas> {\n const db: any = new Proxy(\n {},\n {\n get: (_target, table) => {\n if (!isString(table)) throw new Error('Invalid table name');\n if (this.#tables[table] === undefined) {\n this.#tables[table] = new RestRepository({ db, pluginOptions, table, schemaTables: this.#schemaTables });\n }\n\n return this.#tables[table];\n }\n }\n );\n\n // Inject generated tables for shell to auto-complete\n const tableNames = this.#schemaTables?.map(({ name }) => name) ?? [];\n for (const table of tableNames) {\n db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: this.#schemaTables });\n }\n\n return db;\n }\n}\n","import type { Schemas } from '../api';\nimport { getBranchDetails, searchBranch } from '../api';\nimport { FuzzinessExpression, HighlightExpression, PrefixExpression } from '../api/schemas';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { SchemaPluginResult } from '../schema';\nimport { Filter } from '../schema/filters';\nimport { BaseData, XataRecord, XataRecordMetadata } from '../schema/record';\nimport { initObject } from '../schema/repository';\nimport { SelectedPick } from '../schema/selection';\nimport { GetArrayInnerType, StringKeys, Values } from '../util/types';\nimport { Boosters } from './boosters';\n\nexport type SearchOptions<Schemas extends Record<string, BaseData>, Tables extends StringKeys<Schemas>> = {\n fuzziness?: FuzzinessExpression;\n prefix?: PrefixExpression;\n highlight?: HighlightExpression;\n tables?: Array<\n | Tables\n | Values<{\n [Model in GetArrayInnerType<NonNullable<Tables[]>>]: {\n table: Model;\n filter?: Filter<SelectedPick<Schemas[Model] & XataRecord, ['*']>>;\n boosters?: Boosters<Schemas[Model] & XataRecord>[];\n };\n }>\n >;\n};\n\nexport type SearchPluginResult<Schemas extends Record<string, BaseData>> = {\n all: <Tables extends StringKeys<Schemas>>(\n query: string,\n options?: SearchOptions<Schemas, Tables>\n ) => Promise<\n Values<{\n [Model in ExtractTables<\n Schemas,\n Tables,\n GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>\n >]: {\n table: Model;\n record: Awaited<SearchXataRecord<SelectedPick<Schemas[Model] & XataRecord, ['*']>>>;\n };\n }>[]\n >;\n byTable: <Tables extends StringKeys<Schemas>>(\n query: string,\n options?: SearchOptions<Schemas, Tables>\n ) => Promise<{\n [Model in ExtractTables<\n Schemas,\n Tables,\n GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>\n >]?: Awaited<SearchXataRecord<SelectedPick<Schemas[Model] & XataRecord, ['*']>>[]>;\n }>;\n};\n\nexport class SearchPlugin<Schemas extends Record<string, XataRecord>> extends XataPlugin {\n #schemaTables?: Schemas.Table[];\n\n constructor(private db: SchemaPluginResult<Schemas>, schemaTables?: Schemas.Table[]) {\n super();\n this.#schemaTables = schemaTables;\n }\n\n build({ getFetchProps }: XataPluginOptions): SearchPluginResult<Schemas> {\n return {\n all: async <Tables extends StringKeys<Schemas>>(query: string, options: SearchOptions<Schemas, Tables> = {}) => {\n const records = await this.#search(query, options, getFetchProps);\n const schemaTables = await this.#getSchemaTables(getFetchProps);\n\n return records.map((record) => {\n const { table = 'orphan' } = record.xata;\n\n return { table, record: initObject(this.db, schemaTables, table, record) } as any;\n });\n },\n byTable: async <Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables> = {}\n ) => {\n const records = await this.#search(query, options, getFetchProps);\n const schemaTables = await this.#getSchemaTables(getFetchProps);\n\n return records.reduce((acc, record) => {\n const { table = 'orphan' } = record.xata;\n\n const items = acc[table] ?? [];\n const item = initObject(this.db, schemaTables, table, record);\n\n return { ...acc, [table]: [...items, item] };\n }, {} as any);\n }\n };\n }\n\n async #search<Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables>,\n getFetchProps: XataPluginOptions['getFetchProps']\n ) {\n const fetchProps = await getFetchProps();\n const { tables, fuzziness, highlight, prefix } = options ?? {};\n\n const { records } = await searchBranch({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n // @ts-ignore https://github.com/xataio/client-ts/issues/313\n body: { tables, query, fuzziness, prefix, highlight },\n ...fetchProps\n });\n\n return records;\n }\n\n async #getSchemaTables(getFetchProps: XataPluginOptions['getFetchProps']): Promise<Schemas.Table[]> {\n if (this.#schemaTables) return this.#schemaTables;\n const fetchProps = await getFetchProps();\n\n const { schema } = await getBranchDetails({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n ...fetchProps\n });\n\n this.#schemaTables = schema.tables;\n return schema.tables;\n }\n}\n\nexport type SearchXataRecord<Record extends XataRecord> = Omit<Record, 'getMetadata'> & {\n getMetadata: () => XataRecordMetadata & SearchExtraProperties;\n};\n\ntype SearchExtraProperties = {\n /*\n * The record's table name. APIs that return records from multiple tables will set this field accordingly.\n */\n table: string;\n /*\n * Highlights of the record. This is used by the search APIs to indicate which fields and parts of the fields have matched the search.\n */\n highlight?: {\n [key: string]:\n | string[]\n | {\n [key: string]: any;\n };\n };\n /*\n * The record's relevancy score. This is returned by the search APIs.\n */\n score?: number;\n};\n\ntype ReturnTable<Table, Tables> = Table extends Tables ? Table : never;\n\ntype ExtractTables<\n Schemas extends Record<string, BaseData>,\n Tables extends StringKeys<Schemas>,\n TableOptions extends GetArrayInnerType<NonNullable<NonNullable<SearchOptions<Schemas, Tables>>['tables']>>\n> = TableOptions extends `${infer Table}`\n ? ReturnTable<Table, Tables>\n : TableOptions extends { table: infer Table }\n ? ReturnTable<Table, Tables>\n : never;\n","export type BranchStrategyValue = string | undefined | null;\nexport type BranchStrategyBuilder = () => BranchStrategyValue | Promise<BranchStrategyValue>;\nexport type BranchStrategy = BranchStrategyValue | BranchStrategyBuilder;\nexport type BranchStrategyOption = NonNullable<BranchStrategy | BranchStrategy[]>;\n\nexport const isBranchStrategyBuilder = (strategy: BranchStrategy): strategy is BranchStrategyBuilder => {\n return typeof strategy === 'function';\n};\n","import { getBranchDetails, resolveBranch } from '../api';\nimport { FetchImpl } from '../api/fetcher';\nimport { defaultTrace } from '../schema/tracing';\nimport { getAPIKey } from './apiKey';\nimport { getEnvironment, getGitBranch } from './environment';\nimport { getFetchImplementation } from './fetch';\nimport { isObject } from './lang';\n\ntype BranchResolutionOptions = {\n databaseURL?: string;\n apiKey?: string;\n fetchImpl?: FetchImpl;\n};\n\nexport async function getCurrentBranchName(options?: BranchResolutionOptions): Promise<string> {\n const { branch, envBranch } = getEnvironment();\n\n if (branch) {\n const details = await getDatabaseBranch(branch, options);\n if (details) return branch;\n\n console.warn(`Branch ${branch} not found in Xata. Ignoring...`);\n }\n\n const gitBranch = envBranch || (await getGitBranch());\n return resolveXataBranch(gitBranch, options);\n}\n\nexport async function getCurrentBranchDetails(options?: BranchResolutionOptions) {\n const branch = await getCurrentBranchName(options);\n return getDatabaseBranch(branch, options);\n}\n\nasync function resolveXataBranch(gitBranch: string | undefined, options?: BranchResolutionOptions): Promise<string> {\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n\n if (!databaseURL)\n throw new Error(\n 'A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely'\n );\n if (!apiKey)\n throw new Error(\n 'An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely'\n );\n\n const [protocol, , host, , dbName] = databaseURL.split('/');\n const [workspace] = host.split('.');\n const { fallbackBranch } = getEnvironment();\n\n const { branch } = await resolveBranch({\n apiKey,\n apiUrl: databaseURL,\n fetchImpl: getFetchImplementation(options?.fetchImpl),\n workspacesApiUrl: `${protocol}//${host}`,\n pathParams: { dbName, workspace },\n queryParams: { gitBranch, fallbackBranch },\n trace: defaultTrace\n });\n\n return branch;\n}\n\nasync function getDatabaseBranch(branch: string, options?: BranchResolutionOptions) {\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n\n if (!databaseURL)\n throw new Error(\n 'A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely'\n );\n if (!apiKey)\n throw new Error(\n 'An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely'\n );\n\n const [protocol, , host, , database] = databaseURL.split('/');\n const [workspace] = host.split('.');\n const dbBranchName = `${database}:${branch}`;\n try {\n return await getBranchDetails({\n apiKey,\n apiUrl: databaseURL,\n fetchImpl: getFetchImplementation(options?.fetchImpl),\n workspacesApiUrl: `${protocol}//${host}`,\n pathParams: { dbBranchName, workspace },\n trace: defaultTrace\n });\n } catch (err) {\n if (isObject(err) && err.status === 404) return null;\n throw err;\n }\n}\n\nexport function getDatabaseURL() {\n try {\n const { databaseURL } = getEnvironment();\n return databaseURL;\n } catch (err) {\n return undefined;\n }\n}\n","import { Schemas } from './api';\nimport { FetcherExtraProps, FetchImpl } from './api/fetcher';\nimport { XataPlugin, XataPluginOptions } from './plugins';\nimport { BaseSchema, SchemaPlugin, SchemaPluginResult, XataRecord } from './schema';\nimport { CacheImpl, SimpleCache } from './schema/cache';\nimport { defaultTrace, TraceFunction } from './schema/tracing';\nimport { SearchPlugin, SearchPluginResult } from './search';\nimport { getAPIKey } from './util/apiKey';\nimport { BranchStrategy, BranchStrategyOption, BranchStrategyValue, isBranchStrategyBuilder } from './util/branches';\nimport { getCurrentBranchName, getDatabaseURL } from './util/config';\nimport { getFetchImplementation } from './util/fetch';\nimport { AllRequired, StringKeys } from './util/types';\n\nexport type BaseClientOptions = {\n fetch?: FetchImpl;\n apiKey?: string;\n databaseURL?: string;\n branch?: BranchStrategyOption;\n cache?: CacheImpl;\n trace?: TraceFunction;\n};\n\ntype SafeOptions = AllRequired<Omit<BaseClientOptions, 'branch'>> & {\n branch: () => Promise<string | undefined>;\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const buildClient = <Plugins extends Record<string, XataPlugin> = {}>(plugins?: Plugins) =>\n class {\n #branch: BranchStrategyValue;\n #options: SafeOptions;\n\n db: SchemaPluginResult<any>;\n search: SearchPluginResult<any>;\n\n constructor(options: BaseClientOptions = {}, schemaTables?: Schemas.Table[]) {\n const safeOptions = this.#parseOptions(options);\n this.#options = safeOptions;\n\n const pluginOptions: XataPluginOptions = {\n getFetchProps: () => this.#getFetchProps(safeOptions),\n cache: safeOptions.cache,\n trace: safeOptions.trace\n };\n\n const db = new SchemaPlugin(schemaTables).build(pluginOptions);\n const search = new SearchPlugin(db, schemaTables).build(pluginOptions);\n\n // We assign the namespaces after creating in case the user overrides the db plugin\n this.db = db;\n this.search = search;\n\n for (const [key, namespace] of Object.entries(plugins ?? {})) {\n if (namespace === undefined) continue;\n const result = namespace.build(pluginOptions);\n\n if (result instanceof Promise) {\n void result.then((namespace: unknown) => {\n // @ts-ignore\n this[key] = namespace;\n });\n } else {\n // @ts-ignore\n this[key] = result;\n }\n }\n }\n\n public async getConfig() {\n const databaseURL = this.#options.databaseURL;\n const branch = await this.#options.branch();\n\n return { databaseURL, branch };\n }\n\n #parseOptions(options?: BaseClientOptions): SafeOptions {\n const fetch = getFetchImplementation(options?.fetch);\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });\n const trace = options?.trace ?? defaultTrace;\n const branch = async () =>\n options?.branch !== undefined\n ? await this.#evaluateBranch(options.branch)\n : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });\n\n if (!apiKey) {\n throw new Error('Option apiKey is required');\n }\n\n if (!databaseURL) {\n throw new Error('Option databaseURL is required');\n }\n\n return { fetch, databaseURL, apiKey, branch, cache, trace };\n }\n\n async #getFetchProps({ fetch, apiKey, databaseURL, branch, trace }: SafeOptions): Promise<FetcherExtraProps> {\n const branchValue = await this.#evaluateBranch(branch);\n if (!branchValue) throw new Error('Unable to resolve branch value');\n\n return {\n fetchImpl: fetch,\n apiKey,\n apiUrl: '',\n // Instead of using workspace and dbBranch, we inject a probably CNAME'd URL\n workspacesApiUrl: (path, params) => {\n const hasBranch = params.dbBranchName ?? params.branch;\n const newPath = path.replace(/^\\/db\\/[^/]+/, hasBranch !== undefined ? `:${branchValue}` : '');\n return databaseURL + newPath;\n },\n trace\n };\n }\n\n async #evaluateBranch(param?: BranchStrategyOption): Promise<string | undefined> {\n if (this.#branch) return this.#branch;\n if (param === undefined) return undefined;\n\n const strategies = Array.isArray(param) ? [...param] : [param];\n\n const evaluateBranch = async (strategy: BranchStrategy) => {\n return isBranchStrategyBuilder(strategy) ? await strategy() : strategy;\n };\n\n for await (const strategy of strategies) {\n const branch = await evaluateBranch(strategy);\n if (branch) {\n this.#branch = branch;\n return branch;\n }\n }\n }\n } as unknown as ClientConstructor<Plugins>;\n\nexport interface ClientConstructor<Plugins extends Record<string, XataPlugin>> {\n // eslint-disable-next-line @typescript-eslint/ban-types\n new <Schemas extends Record<string, XataRecord> = {}>(\n options?: Partial<BaseClientOptions>,\n schemaTables?: readonly BaseSchema[]\n ): Omit<\n {\n db: Awaited<ReturnType<SchemaPlugin<Schemas>['build']>>;\n search: Awaited<ReturnType<SearchPlugin<Schemas>['build']>>;\n },\n keyof Plugins\n > & {\n [Key in StringKeys<NonNullable<Plugins>>]: Awaited<ReturnType<NonNullable<Plugins>[Key]['build']>>;\n } & {\n getConfig(): Promise<{\n databaseURL: string;\n branch: string;\n }>;\n };\n}\n\nexport class BaseClient extends buildClient()<Record<string, any>> {}\n","// These will be used to set special fields to serialized objects.\n// So objects should not use this field names. I think that's fine. Another approach would be to generate two objects:\n// One containing the \"data tree\" and another containing the a tree with the type information.\nconst META = '__';\nconst VALUE = '___';\n\n// TODO: Add types for the serializer\nexport class Serializer {\n classes: Record<string, any> = {};\n\n add(clazz: any) {\n this.classes[clazz.name] = clazz;\n }\n\n toJSON<T>(data: T): string {\n // We are not using JSON.stringify() and the replacer function here, because the replacer receives\n // the result of toJSON() if the object has a toJSON() method. This is a problem for the Date type:\n // we get a string, because Date.toJSON() returns the date formatted into a ISO string alreayd,\n // so it's not possible to guess the type of the original object.\n function visit(obj: any): any {\n if (Array.isArray(obj)) return obj.map(visit);\n\n const type = typeof obj;\n if (type === 'undefined') return { [META]: 'undefined' };\n if (type === 'bigint') return { [META]: 'bigint', [VALUE]: obj.toString() };\n if (obj === null || type !== 'object') return obj;\n\n const constructor = obj.constructor;\n const o: Record<string, any> = { [META]: constructor.name };\n for (const [key, value] of Object.entries(obj)) {\n o[key] = visit(value);\n }\n if (constructor === Date) o[VALUE] = obj.toISOString();\n if (constructor === Map) o[VALUE] = Object.fromEntries(obj);\n if (constructor === Set) o[VALUE] = [...obj];\n return o;\n }\n\n return JSON.stringify(visit(data));\n }\n\n fromJSON<T>(json: string): T {\n return JSON.parse(json, (key, value) => {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const { [META]: clazz, [VALUE]: val, ...rest } = value;\n const constructor = this.classes[clazz];\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (constructor) {\n return Object.assign(Object.create(constructor.prototype), rest);\n }\n if (clazz === 'Date') return new Date(val);\n if (clazz === 'Set') return new Set(val);\n if (clazz === 'Map') return new Map(Object.entries(val));\n if (clazz === 'bigint') return BigInt(val);\n // TODO: this is ignored. In order to support undefined we'd need to traverse the JSON tree ourselves.\n // Instead of using the JSON.parse() reviver argument.\n if (clazz === 'undefined') return undefined;\n return rest;\n }\n return value;\n });\n }\n}\n\nconst defaultSerializer = new Serializer();\n\nexport const serialize = <T>(data: T): string => {\n return defaultSerializer.toJSON<T>(data);\n};\n\nexport const deserialize = <T>(json: string): T => {\n return defaultSerializer.fromJSON<T>(json);\n};\n","import { deserialize, serialize } from '../serializer';\nimport { Request } from '../util/request';\n\ntype XataWorkerContext<XataClient> = { xata: XataClient; request: Request; env: Record<string, string | undefined> };\n\ntype RemoveFirst<T> = T extends [any, ...infer U] ? U : never;\n\ntype WorkerRunnerConfig = {\n workspace: string;\n worker: string;\n};\n\nexport function buildWorkerRunner<XataClient>(config: WorkerRunnerConfig) {\n return function xataWorker<WorkerFunction extends (ctx: XataWorkerContext<XataClient>, ...args: any[]) => any>(\n name: string,\n _worker: WorkerFunction\n ) {\n return async (...args: RemoveFirst<Parameters<WorkerFunction>>): Promise<Awaited<ReturnType<typeof _worker>>> => {\n const url =\n process.env.NODE_ENV === 'development'\n ? `http://localhost:64749/${name}`\n : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;\n\n // @ts-ignore - This is a browser only feature - fetch will be defined in the browser\n const result = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: serialize({ args })\n });\n\n // TODO: Detect if not compiled yet (+ other errors)\n\n const text = await result.text();\n return deserialize<any>(text);\n };\n };\n}\n","export class XataError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.status = status;\n }\n}\n\nexport * from './api';\nexport * from './plugins';\nexport * from './client';\nexport * from './schema';\nexport * from './search';\nexport * from './serializer';\nexport * from './util/config';\nexport * from './util/apiKey';\nexport * from './workers';\n"],"names":["process","fetch","__privateAdd","__privateSet","__privateGet","_table","_schemaTables","_getSchemaTables","getSchemaTables_fn","options","__privateMethod","id","columns","namespace"],"mappings":"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"}