@xata.io/client 0.8.4 → 0.9.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.cjs","sources":["../src/util/lang.ts","../src/util/environment.ts","../src/util/apiKey.ts","../src/util/fetch.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/operators.ts","../src/schema/index.ts","../src/search/index.ts","../src/util/branches.ts","../src/util/config.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["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 isString(value: any): value is string {\n return value !== undefined && value !== null && typeof value === 'string';\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, isString } from './lang';\n\nexport function getEnvVariable(name: string): string | undefined {\n // Node.js: process.env\n try {\n if (isObject(process) && isString(process?.env?.[name])) {\n return process.env[name];\n }\n } catch (err) {\n // Ignore: Should never happen\n }\n\n try {\n // Deno: Deno.env.get\n if (isObject(Deno) && isString(Deno?.env?.get(name))) {\n return Deno.env.get(name);\n }\n } catch (err) {\n // Ignore: Will fail if not using --allow-env\n }\n}\n\nexport async function getGitBranch(): Promise<string | undefined> {\n // Node.js: child_process.execSync\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require('child_process').execSync('git branch --show-current', { encoding: 'utf-8' }).trim();\n } catch (err) {\n // Ignore\n }\n\n // Deno: Deno.run\n try {\n if (isObject(Deno)) {\n const process = Deno.run({\n cmd: ['git', 'branch', '--show-current'],\n stdout: 'piped',\n stderr: 'piped'\n });\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 { getEnvVariable } from './environment';\n\nexport function getAPIKey() {\n try {\n return getEnvVariable('XATA_API_KEY') ?? XATA_API_KEY;\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 `The \\`fetch\\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`\n );\n }\n return fetchImpl;\n}\n","import { Responses } from '.';\nimport { isObject, isString } from '../util/lang';\n\nexport class FetcherError extends Error {\n public status: number | string;\n public errors: Responses.BulkError['errors'] | undefined;\n\n constructor(status: number, data?: unknown) {\n super(getMessage(data));\n\n this.status = status;\n this.errors = isBulkError(data) ? data.errors : undefined;\n\n if (data instanceof Error) {\n this.stack = data.stack;\n this.cause = data.cause;\n }\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 { FetcherError, PossibleErrors } from './errors';\n\nconst resolveUrl = (url: string, queryParams: Record<string, any> = {}, pathParams: Record<string, string> = {}) => {\n const query = new URLSearchParams(queryParams).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<{ ok: boolean; status: number; json(): Promise<any> }>;\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};\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}: FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> & FetcherExtraProps): Promise<TData> {\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\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 ...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 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']);\n } catch (error) {\n throw new FetcherError(response.status, error as Error);\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\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 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 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 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<undefined, CreateBranchError, CreateBranchRequestBody, {}, CreateBranchQueryParams, CreateBranchPathParams>({\n url: '/db/{dbBranchName}',\n method: 'put',\n ...variables\n });\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 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<undefined, 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 * ```jsx\n * PATCH /db/test:main/tables/users\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 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 InsertRecordResponse = {\n id: string;\n xata: {\n version: number;\n };\n};\n\nexport type InsertRecordVariables = {\n body?: Record<string, any>;\n pathParams: InsertRecordPathParams;\n} & FetcherExtraProps;\n\n/**\n * Insert a new Record into the Table\n */\nexport const insertRecord = (variables: InsertRecordVariables) =>\n fetch<InsertRecordResponse, InsertRecordError, Record<string, any>, {}, {}, InsertRecordPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/data',\n method: 'post',\n ...variables\n });\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 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 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 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 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} & FetcherExtraProps;\n\nexport const deleteRecord = (variables: DeleteRecordVariables) =>\n fetch<undefined, DeleteRecordError, undefined, {}, {}, 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 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 GetRecordRequestBody = {\n columns?: Schemas.ColumnsFilter;\n};\n\nexport type GetRecordVariables = {\n body?: GetRecordRequestBody;\n pathParams: GetRecordPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve record by ID\n */\nexport const getRecord = (variables: GetRecordVariables) =>\n fetch<Schemas.XataRecord, GetRecordError, GetRecordRequestBody, {}, {}, 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 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\nexport type BulkInsertTableRecordsResponse = {\n recordIDs: string[];\n};\n\nexport type BulkInsertTableRecordsRequestBody = {\n records: Record<string, any>[];\n};\n\nexport type BulkInsertTableRecordsVariables = {\n body: BulkInsertTableRecordsRequestBody;\n pathParams: BulkInsertTableRecordsPathParams;\n} & FetcherExtraProps;\n\n/**\n * Bulk insert records\n */\nexport const bulkInsertTableRecords = (variables: BulkInsertTableRecordsVariables) =>\n fetch<\n BulkInsertTableRecordsResponse,\n BulkInsertTableRecordsError,\n BulkInsertTableRecordsRequestBody,\n {},\n {},\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.ColumnsFilter;\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 * },\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\": [\n * \"*\",\n * \"team.name\"\n * ]\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\": [\n * \"*\",\n * \"team.*\"\n * ]\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 * }\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 an 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*alue*\"\n * }\n * }\n * }\n * ```\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 ranges\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$ge\": 0,\n * \"$lt\": 100\n * }\n * }\n * }\n * ```\n *\n * The supported operators are `$gt`, `$lt`, `$ge`, `$le`.\n *\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 * \"<column_name1>\": \"value1\"\n * }, {\n * \"$all\": [{\n * \"<column_name2>\": \"value2\"\n * }, {\n * \"<column_name3>\": \"value3\"\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\": [\n * {\"$contains\": \"label\"},\n * ]\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 *\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 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.\n */\n tables?: string[];\n /*\n * The query string.\n *\n * @minLength 1\n */\n query: string;\n /*\n * Maximum [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) for the search terms. The Levenshtein\n * distance is the number of one charcter changes needed to make two strings equal. The default is 1, meaning that single\n * character typos per word are tollerated by search. You can set it to 0 to remove the typo tollerance or set it to 2\n * to allow two typos in a word.\n *\n * @default 1\n * @maximum 2\n * @minimum 0\n */\n fuzziness?: number;\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 cancelWorkspaceMemberInvite,\n resendWorkspaceMemberInvite,\n acceptWorkspaceMemberInvite\n },\n database: { getDatabaseList, createDatabase, deleteDatabase },\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 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 { getAPIKey } from '../util/apiKey';\nimport { getFetchImplementation } from '../util/fetch';\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}\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\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 };\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 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\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 = '',\n options: Types.CreateBranchRequestBody = {}\n ): Promise<void> {\n return operationsByTag.branch.createBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n queryParams: { from },\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<void> {\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 ): Promise<Types.InsertRecordResponse> {\n return operationsByTag.records.insertRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\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 ): Promise<void> {\n return operationsByTag.records.deleteRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options: Types.GetRecordRequestBody = {}\n ): Promise<Schemas.XataRecord> {\n return operationsByTag.records.getRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n // TODO: FIXME https://github.com/xataio/openapi/issues/139\n //body: 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 ): Promise<Types.BulkInsertTableRecordsResponse> {\n return operationsByTag.records.bulkInsertTableRecords({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\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 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';\n\nexport abstract class XataPlugin {\n abstract build(options: XataPluginOptions): unknown | Promise<unknown>;\n}\n\nexport type XataPluginOptions = {\n getFetchProps: () => Promise<FetcherExtraProps>;\n};\n","import { 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: 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: Result[];\n\n constructor(query: Query<Record, Result>, meta: PaginationQueryMeta, records: Result[] = []) {\n this.#query = query;\n this.meta = meta;\n this.records = 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({ page: { 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({ page: { 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({ page: { 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({ page: { 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 };\nexport type PaginationOptions = CursorNavigationOptions & OffsetNavigationOptions;\n\nexport const PAGINATION_MAX_SIZE = 200;\nexport const PAGINATION_DEFAULT_SIZE = 200;\nexport const PAGINATION_MAX_OFFSET = 800;\nexport const PAGINATION_DEFAULT_OFFSET = 0;\n","import { FilterExpression } from '../api/schemas';\nimport { compact } from '../util/lang';\nimport { NonEmptyArray, RequiredBy } from '../util/types';\nimport { Filter } from './filters';\nimport { Page, Paginable, PaginationOptions, PaginationQueryMeta, PAGINATION_MAX_SIZE } from './pagination';\nimport { XataRecord } from './record';\nimport { Repository } from './repository';\nimport { SelectableColumn, SelectedPick, ValueAtColumn } from './selection';\nimport { SortDirection, SortFilter } from './sorting';\n\nexport type QueryOptions<T extends XataRecord> = {\n page?: PaginationOptions;\n columns?: NonEmptyArray<SelectableColumn<T>>;\n filter?: FilterExpression;\n sort?: SortFilter<T> | SortFilter<T>[];\n};\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: Result[] = [];\n\n constructor(\n repository: Repository<Record> | null,\n table: string,\n data: Partial<QueryOptions<Record>>,\n parent?: 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 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.page = data.page ?? parent?.page;\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 /**\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({\n * \"columnName\": columnValue\n * })\n * query.filter({\n * \"columnName\": operator(columnValue) // Use gt, gte, lt, lte, startsWith,...\n * })\n * ```\n *\n * @returns A new Query object.\n */\n filter(filters: Filter<Record>): Query<Record, Result>;\n filter<F extends SelectableColumn<Record>>(column: F, value: Filter<ValueAtColumn<Record, F>>): Query<Record, Result>;\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): 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: NonEmptyArray<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 getPaginated(): Promise<Page<Record, Result>>;\n getPaginated(options: Omit<QueryOptions<Record>, 'columns'>): Promise<Page<Record, Result>>;\n getPaginated<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<Page<Record, SelectedPick<Record, typeof options['columns']>>>;\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 async *[Symbol.asyncIterator](): AsyncIterableIterator<Result> {\n for await (const [record] of this.getIterator(1)) {\n yield record;\n }\n }\n\n getIterator(chunk: number): AsyncGenerator<Result[]>;\n getIterator(chunk: number, options: Omit<QueryOptions<Record>, 'columns' | 'page'>): AsyncGenerator<Result[]>;\n getIterator<Options extends RequiredBy<Omit<QueryOptions<Record>, 'page'>, 'columns'>>(\n chunk: number,\n options: Options\n ): AsyncGenerator<SelectedPick<Record, typeof options['columns']>[]>;\n async *getIterator<Result extends XataRecord>(\n chunk: number,\n options: QueryOptions<Record> = {}\n ): AsyncGenerator<Result[]> {\n let offset = 0;\n let end = false;\n\n while (!end) {\n const { records, meta } = await this.getPaginated({ ...options, page: { size: chunk, offset } });\n // Method overloading does not provide type inference for the return type.\n yield records as unknown as Result[];\n\n offset += chunk;\n end = !meta.page.more;\n }\n }\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(): Promise<Result[]>;\n getMany(options: Omit<QueryOptions<Record>, 'columns'>): Promise<Result[]>;\n getMany<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>[]>;\n async getMany<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result[]> {\n const { records } = await this.getPaginated(options);\n // Method overloading does not provide type inference for the return type.\n return records as unknown as 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 * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getAll(chunk?: number): Promise<Result[]>;\n getAll(chunk: number | undefined, options: Omit<QueryOptions<Record>, 'columns' | 'page'>): Promise<Result[]>;\n getAll<Options extends RequiredBy<Omit<QueryOptions<Record>, 'page'>, 'columns'>>(\n chunk: number | undefined,\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>[]>;\n async getAll<Result extends XataRecord>(\n chunk = PAGINATION_MAX_SIZE,\n options: QueryOptions<Record> = {}\n ): Promise<Result[]> {\n const results = [];\n\n for await (const page of this.getIterator(chunk, options)) {\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 * @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 getOne(): Promise<Result | null>;\n getOne(options: Omit<QueryOptions<Record>, 'columns' | 'page'>): Promise<Result | null>;\n getOne<Options extends RequiredBy<Omit<QueryOptions<Record>, 'page'>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']> | null>;\n async getOne<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result | null> {\n const records = await this.getMany({ ...options, page: { 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 nextPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n previousPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n firstPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ page: { size, offset } });\n }\n\n lastPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ page: { size, offset, before: 'end' } });\n }\n\n hasNextPage(): boolean {\n return this.meta.page.more;\n }\n}\n","import { isObject, isString } from '../util/lang';\nimport { 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 extends Identifiable {\n /**\n * Metadata of this record.\n */\n xata: {\n /**\n * Number that is increased every time the record is updated.\n */\n version: number;\n };\n\n /**\n * Retrieves a refreshed copy of the current record from the database.\n */\n read(): Promise<Readonly<SelectedPick<this, ['*']>> | 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 data 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(\n partialUpdate: Partial<EditableData<Omit<this, keyof XataRecord>>>\n ): Promise<Readonly<SelectedPick<this, ['*']>>>;\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(): Promise<Readonly<SelectedPick<Record, ['*']>> | 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 data 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(\n partialUpdate: Partial<EditableData<Omit<Record, keyof XataRecord>>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\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 return (\n isIdentifiable(x) && typeof x?.xata === 'object' && typeof (x?.xata as XataRecord['xata'])?.version === 'number'\n );\n}\n\nexport type EditableData<O extends BaseData> = {\n [K in keyof O]: O[K] extends XataRecord\n ? { id: string }\n : NonNullable<O[K]> extends XataRecord\n ? { id: 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 getRecord,\n insertRecord,\n insertRecordWithID,\n queryTable,\n searchBranch,\n updateRecordWithID,\n upsertRecordWithID\n} from '../api';\nimport { FetcherExtraProps } from '../api/fetcher';\nimport { isObject, isString } from '../util/lang';\nimport { Dictionary } from '../util/types';\nimport { Page } from './pagination';\nimport { Query } from './query';\nimport { BaseData, EditableData, Identifiable, isIdentifiable, XataRecord } from './record';\nimport { SelectedPick } from './selection';\nimport { buildSortFilter } from './sorting';\n\ntype TableLink = string[];\nexport type LinkDictionary = Dictionary<TableLink[]>;\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 * @returns The full persisted record.\n */\n abstract create(object: EditableData<Data> & Partial<Identifiable>): 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 * @returns The full persisted record.\n */\n abstract create(id: string, object: EditableData<Data>): 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 * @returns Array of the persisted records.\n */\n abstract create(\n objects: Array<EditableData<Data> & 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 * @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 * 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 * @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 * @returns Array of the persisted records.\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 * @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 * @returns The full persisted record.\n */\n abstract createOrUpdate(id: string, object: EditableData<Data>): 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 * @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(query: string, options?: { fuzziness?: number }): Promise<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 #links: LinkDictionary;\n #getFetchProps: () => Promise<FetcherExtraProps>;\n db: SchemaPluginResult<any>;\n\n constructor(options: {\n table: string;\n links?: LinkDictionary;\n getFetchProps: () => Promise<FetcherExtraProps>;\n db: SchemaPluginResult<any>;\n }) {\n super(null, options.table, {});\n\n this.#table = options.table;\n this.#links = options.links ?? {};\n this.#getFetchProps = options.getFetchProps;\n this.db = options.db;\n }\n\n async create(object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>>;\n async create(recordId: string, object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>>;\n async create(objects: EditableData<Data>[]): Promise<SelectedPick<Record, ['*']>[]>;\n async create(\n a: string | EditableData<Data> | EditableData<Data>[],\n b?: EditableData<Data>\n ): Promise<SelectedPick<Record, ['*']> | SelectedPick<Record, ['*']>[]> {\n // Create many records\n if (Array.isArray(a)) {\n return this.#bulkInsertTableRecords(a);\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 return this.#insertRecordWithId(a, b);\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 return this.#insertRecordWithId(a.id, { ...a, id: undefined });\n }\n\n // Create one record without id\n if (isObject(a)) {\n return this.#insertRecordWithoutId(a);\n }\n\n throw new Error('Invalid arguments for create method');\n }\n\n async #insertRecordWithoutId(object: EditableData<Data>): Promise<SelectedPick<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 body: record,\n ...fetchProps\n });\n\n const finalObject = await this.read(response.id);\n if (!finalObject) {\n throw new Error('The server failed to save the record');\n }\n\n return finalObject;\n }\n\n async #insertRecordWithId(recordId: string, object: EditableData<Data>): Promise<SelectedPick<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 },\n ...fetchProps\n });\n\n const finalObject = await this.read(response.id);\n if (!finalObject) {\n throw new Error('The server failed to save the record');\n }\n\n return finalObject;\n }\n\n async #bulkInsertTableRecords(objects: EditableData<Data>[]): Promise<SelectedPick<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 body: { records },\n ...fetchProps\n });\n\n const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter('id', id))).getAll();\n if (finalObjects.length !== objects.length) {\n throw new Error('The server failed to save some records');\n }\n\n return finalObjects;\n }\n\n // TODO: Add column support: https://github.com/xataio/openapi/issues/139\n async read(recordId: string): Promise<SelectedPick<Record, ['*']> | null> {\n const fetchProps = await this.#getFetchProps();\n\n try {\n const response = await getRecord({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n ...fetchProps\n });\n\n return initObject(this.db, this.#links, 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 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(\n a: string | (Partial<EditableData<Data>> & Identifiable) | Array<Partial<EditableData<Data>> & Identifiable>,\n b?: Partial<EditableData<Data>>\n ): Promise<SelectedPick<Record, ['*']> | SelectedPick<Record, ['*']>[]> {\n // Update many records\n if (Array.isArray(a)) {\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 return Promise.all(a.map((object) => this.update(object)));\n }\n\n // Update one record with id as param\n if (isString(a) && isObject(b)) {\n return this.#updateRecordWithID(a, b);\n }\n\n // Update one record with id as property\n if (isObject(a) && isString(a.id)) {\n return this.#updateRecordWithID(a.id, { ...a, id: undefined });\n }\n\n throw new Error('Invalid arguments for update method');\n }\n\n async #updateRecordWithID(\n recordId: string,\n object: Partial<EditableData<Data>>\n ): Promise<SelectedPick<Record, ['*']>> {\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 body: record,\n ...fetchProps\n });\n\n const item = await this.read(response.id);\n if (!item) throw new Error('The server failed to save the record');\n\n return item;\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(\n a: string | EditableData<Data> | EditableData<Data>[],\n b?: EditableData<Data>\n ): Promise<SelectedPick<Record, ['*']> | SelectedPick<Record, ['*']>[]> {\n // Create or update many records\n if (Array.isArray(a)) {\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 return Promise.all(a.map((object) => this.createOrUpdate(object)));\n }\n\n // Create or update one record with id as param\n if (isString(a) && isObject(b)) {\n return this.#upsertRecordWithID(a, b);\n }\n\n // Create or update one record with id as property\n if (isObject(a) && isString(a.id)) {\n return this.#upsertRecordWithID(a.id, { ...a, id: undefined });\n }\n\n throw new Error('Invalid arguments for createOrUpdate method');\n }\n\n async #upsertRecordWithID(recordId: string, object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>> {\n const fetchProps = await this.#getFetchProps();\n\n const response = await upsertRecordWithID({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n body: object,\n ...fetchProps\n });\n\n const item = await this.read(response.id);\n if (!item) throw new Error('The server failed to save the record');\n\n return item;\n }\n\n async delete(recordId: string | Identifiable | Array<string | Identifiable>): Promise<void> {\n // Delete many records\n if (Array.isArray(recordId)) {\n if (recordId.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(recordId.map((id) => this.delete(id)));\n return;\n }\n\n // Delete one record with id as param\n if (isString(recordId)) {\n await this.#deleteRecord(recordId);\n return;\n }\n\n // Delete one record with id as property\n if (isObject(recordId) && isString(recordId.id)) {\n await this.#deleteRecord(recordId.id);\n return;\n }\n\n throw new Error('Invalid arguments for delete method');\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(query: string, options: { fuzziness?: number } = {}): Promise<SelectedPick<Record, ['*']>[]> {\n const fetchProps = await this.#getFetchProps();\n\n const { records } = await searchBranch({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n body: { tables: [this.#table], query, fuzziness: options.fuzziness },\n ...fetchProps\n });\n\n return records.map((item) => initObject(this.db, this.#links, this.#table, item));\n }\n\n async query<Result extends XataRecord>(query: Query<Record, Result>): Promise<Page<Record, Result>> {\n const data = query.getQueryOptions();\n\n const body = {\n filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : undefined,\n sort: data.sort ? buildSortFilter(data.sort) : undefined,\n page: data.page,\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 records = objects.map((record) => initObject<Result>(this.db, this.#links, this.#table, record));\n\n return new Page<Record, Result>(query, meta, records);\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 links: LinkDictionary,\n table: string,\n object: object\n) => {\n const result: Dictionary<unknown> = {};\n Object.assign(result, object);\n\n const tableLinks = links[table] || [];\n for (const link of tableLinks) {\n const [field, linkTable] = link;\n const value = result[field];\n\n if (value && isObject(value)) {\n result[field] = initObject(db, links, linkTable, value);\n }\n }\n\n result.read = function () {\n return db[table].read(result['id'] as string);\n };\n result.update = function (data: any) {\n return db[table].update(result['id'] as string, data);\n };\n result.delete = function () {\n return db[table].delete(result['id'] as string);\n };\n\n for (const prop of ['read', 'update', 'delete']) {\n Object.defineProperty(result, prop, { enumerable: false });\n }\n\n Object.freeze(result);\n return result as T;\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 gt = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $gt: value });\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const ge = <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 gte = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $ge: value });\n\n/**\n * Operator to restrict results to only values that are lower than the given value.\n */\nexport const lt = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $lt: value });\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lte = <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 le = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $le: value });\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 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 { XataPlugin, XataPluginOptions } from '../plugins';\nimport { isString } from '../util/lang';\nimport { BaseData } from './record';\nimport { LinkDictionary, Repository, RestRepository } from './repository';\n\nexport * from './operators';\nexport * from './pagination';\nexport { Query } from './query';\nexport { isIdentifiable, isXataRecord } from './record';\nexport type { BaseData, EditableData, Identifiable, XataRecord } from './record';\nexport { Repository, RestRepository } from './repository';\nexport type { LinkDictionary } from './repository';\nexport * from './selection';\n\nexport type SchemaDefinition = {\n table: string;\n links?: LinkDictionary;\n};\n\nexport type SchemaPluginResult<Schemas extends Record<string, BaseData>> = {\n [Key in keyof Schemas]: Repository<Schemas[Key]>;\n};\n\nexport class SchemaPlugin<Schemas extends Record<string, BaseData>> extends XataPlugin {\n #tables: Record<string, Repository<any>> = {};\n\n constructor(private links?: LinkDictionary) {\n super();\n }\n\n build(options: XataPluginOptions): SchemaPluginResult<Schemas> {\n const { getFetchProps } = options;\n\n const links = this.links;\n\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]) this.#tables[table] = new RestRepository({ db, getFetchProps, table, links });\n\n return this.#tables[table];\n }\n }\n );\n\n return db;\n }\n}\n","import { searchBranch } from '../api';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { SchemaPluginResult } from '../schema';\nimport { BaseData, XataRecord } from '../schema/record';\nimport { initObject, LinkDictionary } from '../schema/repository';\nimport { SelectedPick } from '../schema/selection';\nimport { GetArrayInnerType, StringKeys, Values } from '../util/types';\n\nexport type SearchOptions<Schemas extends Record<string, BaseData>, Tables extends StringKeys<Schemas>> = {\n fuzziness?: number;\n tables?: Tables[];\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 GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]: {\n table: Model;\n record: Awaited<SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>>;\n };\n }>[]\n >;\n byTable: <Tables extends StringKeys<Schemas>>(\n query: string,\n options?: SearchOptions<Schemas, Tables>\n ) => Promise<{\n [Model in GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]?: Awaited<\n SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>[]\n >;\n }>;\n};\n\nexport class SearchPlugin<Schemas extends Record<string, BaseData>> extends XataPlugin {\n constructor(private db: SchemaPluginResult<Schemas>, private links: LinkDictionary) {\n super();\n }\n\n build({ getFetchProps }: XataPluginOptions): SearchPluginResult<Schemas> {\n return {\n all: async <Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables> = {}\n ): Promise<\n Values<{\n [Model in GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]: {\n table: Model;\n record: Awaited<SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>>;\n };\n }>[]\n > => {\n const records = await this.#search(query, options, getFetchProps);\n\n return records.map((record) => {\n const { table = 'orphan' } = record.xata;\n return { table, record: initObject(this.db, this.links, table, record) } as any;\n });\n },\n byTable: async <Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables> = {}\n ): Promise<{\n [Model in GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]?: Awaited<\n SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>[]\n >;\n }> => {\n const records = await this.#search(query, options, getFetchProps);\n\n return records.reduce((acc, record) => {\n const { table = 'orphan' } = record.xata;\n const items = acc[table] ?? [];\n const item = initObject(this.db, this.links, 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: { fuzziness?: number; tables?: Tables[] },\n getFetchProps: XataPluginOptions['getFetchProps']\n ) {\n const fetchProps = await getFetchProps();\n const { tables, fuzziness } = options ?? {};\n\n const { records } = await searchBranch({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n body: { tables, query, fuzziness },\n ...fetchProps\n });\n\n return records;\n }\n}\n\ntype SearchXataRecord = XataRecord & { xata: { table: string } };\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 } from '../api';\nimport { FetchImpl } from '../api/fetcher';\nimport { getAPIKey } from './apiKey';\nimport { getEnvVariable, getGitBranch } from './environment';\nimport { getFetchImplementation } from './fetch';\nimport { isObject } from './lang';\n\nconst envBranchNames = [\n 'XATA_BRANCH',\n 'VERCEL_GIT_COMMIT_REF', // Vercel\n 'CF_PAGES_BRANCH', // Cloudflare Pages\n 'BRANCH' // Netlify. Putting it the last one because it is more ambiguous\n];\n\nconst defaultBranch = 'main';\n\ntype BranchResolutionOptions = {\n databaseURL?: string;\n apiKey?: string;\n fetchImpl?: FetchImpl;\n};\n\nexport async function getCurrentBranchName(options?: BranchResolutionOptions): Promise<string | undefined> {\n const env = await getBranchByEnvVariable();\n if (env) return env;\n\n const branch = await getGitBranch();\n if (!branch) return defaultBranch;\n\n // TODO: in the future, call /resolve endpoint\n // For now, call API to see if the branch exists. If not, use a default value.\n const details = await getDatabaseBranch(branch, options);\n if (details) return branch;\n\n return defaultBranch;\n}\n\nexport async function getCurrentBranchDetails(options?: BranchResolutionOptions) {\n const env = await getBranchByEnvVariable();\n if (env) return getDatabaseBranch(env, options);\n\n const branch = await getGitBranch();\n if (!branch) return getDatabaseBranch(defaultBranch, options);\n\n // TODO: in the future, call /resolve endpoint\n // For now, call API to see if the branch exists. If not, use a default value.\n const details = await getDatabaseBranch(branch, options);\n if (details) return details;\n\n return getDatabaseBranch(defaultBranch, options);\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: {\n dbBranchName,\n workspace\n }\n });\n } catch (err) {\n if (isObject(err) && err.status === 404) return null;\n throw err;\n }\n}\n\nfunction getBranchByEnvVariable(): string | undefined {\n for (const name of envBranchNames) {\n const value = getEnvVariable(name);\n if (value) {\n return value;\n }\n }\n try {\n return XATA_BRANCH;\n } catch (err) {\n // Ignore ReferenceError. Only CloudFlare workers set env variables as global variables\n }\n}\n\nexport function getDatabaseURL() {\n try {\n return getEnvVariable('XATA_DATABASE_URL') ?? XATA_DATABASE_URL;\n } catch (err) {\n return undefined;\n }\n}\n","import { FetcherExtraProps, FetchImpl } from './api/fetcher';\nimport { XataPlugin } from './plugins';\nimport { SchemaPlugin, SchemaPluginResult } from './schema';\nimport { BaseData } from './schema/record';\nimport { LinkDictionary } from './schema/repository';\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};\n\nexport const buildClient = <Plugins extends Record<string, XataPlugin> = {}>(plugins?: Plugins) =>\n class {\n #branch: BranchStrategyValue;\n db: SchemaPluginResult<any>;\n search: SearchPluginResult<any>;\n\n constructor(options: BaseClientOptions = {}, links?: LinkDictionary) {\n const safeOptions = this.#parseOptions(options);\n\n const db = new SchemaPlugin(links).build({ getFetchProps: () => this.#getFetchProps(safeOptions) });\n const search = new SearchPlugin(db, links ?? {}).build({\n getFetchProps: () => this.#getFetchProps(safeOptions)\n });\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) continue;\n const result = namespace.build({ getFetchProps: () => this.#getFetchProps(safeOptions) });\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 #parseOptions(options?: BaseClientOptions) {\n const fetch = getFetchImplementation(options?.fetch);\n const databaseURL = options?.databaseURL || getDatabaseURL();\n const apiKey = options?.apiKey || getAPIKey();\n const branch = async () =>\n options?.branch\n ? await this.#evaluateBranch(options.branch)\n : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });\n\n if (!databaseURL || !apiKey) {\n throw new Error('Options databaseURL and apiKey are required');\n }\n\n return { fetch, databaseURL, apiKey, branch };\n }\n\n async #getFetchProps({\n fetch,\n apiKey,\n databaseURL,\n branch\n }: AllRequired<BaseClientOptions>): 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 };\n }\n\n async #evaluateBranch(param?: BranchStrategyOption): Promise<string | undefined> {\n if (this.#branch) return this.#branch;\n if (!param) 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 <Schemas extends Record<string, BaseData>>(options?: Partial<BaseClientOptions>, links?: LinkDictionary): 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}\n\nexport class BaseClient extends buildClient()<Record<string, any>> {}\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 './util/config';\nexport * from './util/apiKey';\n"],"names":["fetch","__accessCheck","__privateGet","__privateAdd","__privateSet","_table","__privateMethod"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/util/lang.ts","../src/util/environment.ts","../src/util/apiKey.ts","../src/util/fetch.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/index.ts"],"sourcesContent":["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 isString(value: any): value is string {\n return value !== undefined && value !== null && typeof value === 'string';\n}\n\nexport function toBase64(value: string): string {\n try {\n return btoa(value);\n } catch (err) {\n return Buffer.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, isString } from './lang';\n\nexport function getEnvVariable(name: string): string | undefined {\n // Node.js: process.env\n try {\n if (isObject(process) && isString(process?.env?.[name])) {\n return process.env[name];\n }\n } catch (err) {\n // Ignore: Should never happen\n }\n\n try {\n // Deno: Deno.env.get\n if (isObject(Deno) && isString(Deno?.env?.get(name))) {\n return Deno.env.get(name);\n }\n } catch (err) {\n // Ignore: Will fail if not using --allow-env\n }\n}\n\nexport async function getGitBranch(): Promise<string | undefined> {\n // Node.js: child_process.execSync\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return require('child_process').execSync('git branch --show-current', { encoding: 'utf-8' }).trim();\n } catch (err) {\n // Ignore\n }\n\n // Deno: Deno.run\n try {\n if (isObject(Deno)) {\n const process = Deno.run({\n cmd: ['git', 'branch', '--show-current'],\n stdout: 'piped',\n stderr: 'piped'\n });\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 { getEnvVariable } from './environment';\n\nexport function getAPIKey() {\n try {\n return getEnvVariable('XATA_API_KEY') ?? XATA_API_KEY;\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 `The \\`fetch\\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`\n );\n }\n return fetchImpl;\n}\n","import { Responses } from '.';\nimport { isObject, isString } from '../util/lang';\n\nexport class FetcherError extends Error {\n public status: number | string;\n public errors: Responses.BulkError['errors'] | undefined;\n\n constructor(status: number, data?: unknown) {\n super(getMessage(data));\n\n this.status = status;\n this.errors = isBulkError(data) ? data.errors : undefined;\n\n if (data instanceof Error) {\n this.stack = data.stack;\n this.cause = data.cause;\n }\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 { FetcherError, PossibleErrors } from './errors';\n\nconst resolveUrl = (url: string, queryParams: Record<string, any> = {}, pathParams: Record<string, string> = {}) => {\n const query = new URLSearchParams(queryParams).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<{ ok: boolean; status: number; json(): Promise<any> }>;\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};\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}: FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> & FetcherExtraProps): Promise<TData> {\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\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 ...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 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']);\n } catch (error) {\n throw new FetcherError(response.status, error as Error);\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\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 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 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 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<undefined, CreateBranchError, CreateBranchRequestBody, {}, CreateBranchQueryParams, CreateBranchPathParams>({\n url: '/db/{dbBranchName}',\n method: 'put',\n ...variables\n });\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 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<undefined, 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 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 InsertRecordResponse = {\n id: string;\n xata: {\n version: number;\n };\n};\n\nexport type InsertRecordVariables = {\n body?: Record<string, any>;\n pathParams: InsertRecordPathParams;\n} & FetcherExtraProps;\n\n/**\n * Insert a new Record into the Table\n */\nexport const insertRecord = (variables: InsertRecordVariables) =>\n fetch<InsertRecordResponse, InsertRecordError, Record<string, any>, {}, {}, InsertRecordPathParams>({\n url: '/db/{dbBranchName}/tables/{tableName}/data',\n method: 'post',\n ...variables\n });\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 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 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 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 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} & FetcherExtraProps;\n\nexport const deleteRecord = (variables: DeleteRecordVariables) =>\n fetch<undefined, DeleteRecordError, undefined, {}, {}, 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 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 GetRecordRequestBody = {\n columns?: Schemas.ColumnsFilter;\n};\n\nexport type GetRecordVariables = {\n body?: GetRecordRequestBody;\n pathParams: GetRecordPathParams;\n} & FetcherExtraProps;\n\n/**\n * Retrieve record by ID\n */\nexport const getRecord = (variables: GetRecordVariables) =>\n fetch<Schemas.XataRecord, GetRecordError, GetRecordRequestBody, {}, {}, 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 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\nexport type BulkInsertTableRecordsResponse = {\n recordIDs: string[];\n};\n\nexport type BulkInsertTableRecordsRequestBody = {\n records: Record<string, any>[];\n};\n\nexport type BulkInsertTableRecordsVariables = {\n body: BulkInsertTableRecordsRequestBody;\n pathParams: BulkInsertTableRecordsPathParams;\n} & FetcherExtraProps;\n\n/**\n * Bulk insert records\n */\nexport const bulkInsertTableRecords = (variables: BulkInsertTableRecordsVariables) =>\n fetch<\n BulkInsertTableRecordsResponse,\n BulkInsertTableRecordsError,\n BulkInsertTableRecordsRequestBody,\n {},\n {},\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.ColumnsFilter;\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 * },\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 * }\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 an 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*alue*\"\n * }\n * }\n * }\n * ```\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 ranges\n *\n * ```json\n * {\n * \"filter\": {\n * \"<column_name>\": {\n * \"$ge\": 0,\n * \"$lt\": 100\n * }\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 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.\n */\n tables?: string[];\n /*\n * The query string.\n *\n * @minLength 1\n */\n query: string;\n /*\n * Maximum [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) for the search terms. The Levenshtein\n * distance is the number of one charcter changes needed to make two strings equal. The default is 1, meaning that single\n * character typos per word are tollerated by search. You can set it to 0 to remove the typo tollerance or set it to 2\n * to allow two typos in a word.\n *\n * @default 1\n * @maximum 2\n * @minimum 0\n */\n fuzziness?: number;\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 cancelWorkspaceMemberInvite,\n resendWorkspaceMemberInvite,\n acceptWorkspaceMemberInvite\n },\n database: { getDatabaseList, createDatabase, deleteDatabase },\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 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 { getAPIKey } from '../util/apiKey';\nimport { getFetchImplementation } from '../util/fetch';\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}\n\n/**\n * @deprecated Use XataApiPlugin instead\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\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 };\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 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\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 = '',\n options: Types.CreateBranchRequestBody = {}\n ): Promise<void> {\n return operationsByTag.branch.createBranch({\n pathParams: { workspace, dbBranchName: `${database}:${branch}` },\n queryParams: { from },\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<void> {\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 ): Promise<Types.InsertRecordResponse> {\n return operationsByTag.records.insertRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\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 ): Promise<void> {\n return operationsByTag.records.deleteRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options: Types.GetRecordRequestBody = {}\n ): Promise<Schemas.XataRecord> {\n return operationsByTag.records.getRecord({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },\n // TODO: FIXME https://github.com/xataio/openapi/issues/139\n //body: 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 ): Promise<Types.BulkInsertTableRecordsResponse> {\n return operationsByTag.records.bulkInsertTableRecords({\n pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },\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 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';\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};\n","import { 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: 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: Result[];\n\n constructor(query: Query<Record, Result>, meta: PaginationQueryMeta, records: Result[] = []) {\n this.#query = query;\n this.meta = meta;\n this.records = 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({ page: { 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({ page: { 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({ page: { 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({ page: { 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 };\nexport type PaginationOptions = CursorNavigationOptions & OffsetNavigationOptions;\n\nexport const PAGINATION_MAX_SIZE = 200;\nexport const PAGINATION_DEFAULT_SIZE = 200;\nexport const PAGINATION_MAX_OFFSET = 800;\nexport const PAGINATION_DEFAULT_OFFSET = 0;\n","import { FilterExpression } from '../api/schemas';\nimport { compact, toBase64 } from '../util/lang';\nimport { NonEmptyArray, RequiredBy } from '../util/types';\nimport { Filter } from './filters';\nimport { Page, Paginable, PaginationOptions, PaginationQueryMeta, PAGINATION_MAX_SIZE } from './pagination';\nimport { XataRecord } from './record';\nimport { Repository } from './repository';\nimport { SelectableColumn, SelectedPick, ValueAtColumn } from './selection';\nimport { SortDirection, SortFilter } from './sorting';\n\nexport type QueryOptions<T extends XataRecord> = {\n page?: PaginationOptions;\n columns?: NonEmptyArray<SelectableColumn<T>>;\n filter?: FilterExpression;\n sort?: SortFilter<T> | SortFilter<T>[];\n cache?: number;\n};\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: Result[] = [];\n\n constructor(\n repository: Repository<Record> | null,\n table: string,\n data: Partial<QueryOptions<Record>>,\n parent?: 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 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.page = data.page ?? parent?.page;\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 = [], page = {} } = this.#data;\n const key = JSON.stringify({ columns, filter, sort, page });\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({\n * \"columnName\": columnValue\n * })\n * query.filter({\n * \"columnName\": operator(columnValue) // Use gt, gte, lt, lte, startsWith,...\n * })\n * ```\n *\n * @returns A new Query object.\n */\n filter(filters: Filter<Record>): Query<Record, Result>;\n filter<F extends SelectableColumn<Record>>(column: F, value: Filter<ValueAtColumn<Record, F>>): Query<Record, Result>;\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): 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: NonEmptyArray<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 getPaginated(): Promise<Page<Record, Result>>;\n getPaginated(options: Omit<QueryOptions<Record>, 'columns'>): Promise<Page<Record, Result>>;\n getPaginated<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<Page<Record, SelectedPick<Record, typeof options['columns']>>>;\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 async *[Symbol.asyncIterator](): AsyncIterableIterator<Result> {\n for await (const [record] of this.getIterator(1)) {\n yield record;\n }\n }\n\n getIterator(chunk: number): AsyncGenerator<Result[]>;\n getIterator(chunk: number, options: Omit<QueryOptions<Record>, 'columns' | 'page'>): AsyncGenerator<Result[]>;\n getIterator<Options extends RequiredBy<Omit<QueryOptions<Record>, 'page'>, 'columns'>>(\n chunk: number,\n options: Options\n ): AsyncGenerator<SelectedPick<Record, typeof options['columns']>[]>;\n async *getIterator<Result extends XataRecord>(\n chunk: number,\n options: QueryOptions<Record> = {}\n ): AsyncGenerator<Result[]> {\n let offset = 0;\n let end = false;\n\n while (!end) {\n const { records, meta } = await this.getPaginated({ ...options, page: { size: chunk, offset } });\n // Method overloading does not provide type inference for the return type.\n yield records as unknown as Result[];\n\n offset += chunk;\n end = !meta.page.more;\n }\n }\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(): Promise<Result[]>;\n getMany(options: Omit<QueryOptions<Record>, 'columns'>): Promise<Result[]>;\n getMany<Options extends RequiredBy<QueryOptions<Record>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>[]>;\n async getMany<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result[]> {\n const { records } = await this.getPaginated(options);\n // Method overloading does not provide type inference for the return type.\n return records as unknown as 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 * @param options Additional options to be used when performing the query.\n * @returns An array of records from the database.\n */\n getAll(chunk?: number): Promise<Result[]>;\n getAll(chunk: number | undefined, options: Omit<QueryOptions<Record>, 'columns' | 'page'>): Promise<Result[]>;\n getAll<Options extends RequiredBy<Omit<QueryOptions<Record>, 'page'>, 'columns'>>(\n chunk: number | undefined,\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']>[]>;\n async getAll<Result extends XataRecord>(\n chunk = PAGINATION_MAX_SIZE,\n options: QueryOptions<Record> = {}\n ): Promise<Result[]> {\n const results = [];\n\n for await (const page of this.getIterator(chunk, options)) {\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 * @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(): Promise<Result | null>;\n getFirst(options: Omit<QueryOptions<Record>, 'columns' | 'page'>): Promise<Result | null>;\n getFirst<Options extends RequiredBy<Omit<QueryOptions<Record>, 'page'>, 'columns'>>(\n options: Options\n ): Promise<SelectedPick<Record, typeof options['columns']> | null>;\n async getFirst<Result extends XataRecord>(options: QueryOptions<Record> = {}): Promise<Result | null> {\n const records = await this.getMany({ ...options, page: { 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 nextPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n previousPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.firstPage(size, offset);\n }\n\n firstPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ page: { size, offset } });\n }\n\n lastPage(size?: number, offset?: number): Promise<Page<Record, Result>> {\n return this.getPaginated({ page: { size, offset, before: 'end' } });\n }\n\n hasNextPage(): boolean {\n return this.meta.page.more;\n }\n}\n","import { isObject, isString } from '../util/lang';\nimport { 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 extends Identifiable {\n /**\n * Metadata of this record.\n */\n xata: {\n /**\n * Number that is increased every time the record is updated.\n */\n version: number;\n };\n\n /**\n * Retrieves a refreshed copy of the current record from the database.\n */\n read(): Promise<Readonly<SelectedPick<this, ['*']>> | 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 data 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(\n partialUpdate: Partial<EditableData<Omit<this, keyof XataRecord>>>\n ): Promise<Readonly<SelectedPick<this, ['*']>>>;\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(): Promise<Readonly<SelectedPick<Record, ['*']>> | 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 data 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(\n partialUpdate: Partial<EditableData<Omit<Record, keyof XataRecord>>>\n ): Promise<Readonly<SelectedPick<Record, ['*']>>>;\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 return (\n isIdentifiable(x) && typeof x?.xata === 'object' && typeof (x?.xata as XataRecord['xata'])?.version === 'number'\n );\n}\n\nexport type EditableData<O extends BaseData> = {\n [K in keyof O]: O[K] extends XataRecord\n ? { id: string }\n : NonNullable<O[K]> extends XataRecord\n ? { id: 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 getRecord,\n insertRecord,\n insertRecordWithID,\n queryTable,\n searchBranch,\n updateRecordWithID,\n upsertRecordWithID\n} from '../api';\nimport { FetcherExtraProps } from '../api/fetcher';\nimport { RecordsMetadata } from '../api/schemas';\nimport { XataPluginOptions } from '../plugins';\nimport { isObject, isString } from '../util/lang';\nimport { Dictionary } from '../util/types';\nimport { CacheImpl } from './cache';\nimport { Page } from './pagination';\nimport { Query } from './query';\nimport { BaseData, EditableData, Identifiable, isIdentifiable, XataRecord } from './record';\nimport { SelectedPick } from './selection';\nimport { buildSortFilter } from './sorting';\n\ntype TableLink = string[];\nexport type LinkDictionary = Dictionary<TableLink[]>;\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 * @returns The full persisted record.\n */\n abstract create(object: EditableData<Data> & Partial<Identifiable>): 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 * @returns The full persisted record.\n */\n abstract create(id: string, object: EditableData<Data>): 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 * @returns Array of the persisted records.\n */\n abstract create(\n objects: Array<EditableData<Data> & 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 * @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 * 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 * @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 * @returns Array of the persisted records.\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 * @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 * @returns The full persisted record.\n */\n abstract createOrUpdate(id: string, object: EditableData<Data>): 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 * @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(query: string, options?: { fuzziness?: number }): Promise<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 #links: LinkDictionary;\n #getFetchProps: () => Promise<FetcherExtraProps>;\n db: SchemaPluginResult<any>;\n #cache: CacheImpl;\n\n constructor(options: {\n table: string;\n links?: LinkDictionary;\n db: SchemaPluginResult<any>;\n pluginOptions: XataPluginOptions;\n }) {\n super(null, options.table, {});\n\n this.#table = options.table;\n this.#links = options.links ?? {};\n this.#getFetchProps = options.pluginOptions.getFetchProps;\n this.db = options.db;\n this.#cache = options.pluginOptions.cache;\n }\n\n async create(object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>>;\n async create(recordId: string, object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>>;\n async create(objects: EditableData<Data>[]): Promise<SelectedPick<Record, ['*']>[]>;\n async create(\n a: string | EditableData<Data> | EditableData<Data>[],\n b?: EditableData<Data>\n ): Promise<SelectedPick<Record, ['*']> | SelectedPick<Record, ['*']>[]> {\n // Create many records\n if (Array.isArray(a)) {\n const records = await this.#bulkInsertTableRecords(a);\n await Promise.all(records.map((record) => this.#setCacheRecord(record)));\n\n return records;\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 const record = await this.#insertRecordWithId(a, b);\n await this.#setCacheRecord(record);\n\n return record;\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 const record = await this.#insertRecordWithId(a.id, { ...a, id: undefined });\n await this.#setCacheRecord(record);\n\n return record;\n }\n\n // Create one record without id\n if (isObject(a)) {\n const record = await this.#insertRecordWithoutId(a);\n await this.#setCacheRecord(record);\n\n return record;\n }\n\n throw new Error('Invalid arguments for create method');\n }\n\n async #insertRecordWithoutId(object: EditableData<Data>): Promise<SelectedPick<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 body: record,\n ...fetchProps\n });\n\n const finalObject = await this.read(response.id);\n if (!finalObject) {\n throw new Error('The server failed to save the record');\n }\n\n return finalObject;\n }\n\n async #insertRecordWithId(recordId: string, object: EditableData<Data>): Promise<SelectedPick<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 },\n ...fetchProps\n });\n\n const finalObject = await this.read(response.id);\n if (!finalObject) {\n throw new Error('The server failed to save the record');\n }\n\n return finalObject;\n }\n\n async #bulkInsertTableRecords(objects: EditableData<Data>[]): Promise<SelectedPick<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 body: { records },\n ...fetchProps\n });\n\n const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter('id', id))).getAll();\n if (finalObjects.length !== objects.length) {\n throw new Error('The server failed to save some records');\n }\n\n return finalObjects;\n }\n\n // TODO: Add column support: https://github.com/xataio/openapi/issues/139\n async read(recordId: string): Promise<SelectedPick<Record, ['*']> | null> {\n const cacheRecord = await this.#getCacheRecord(recordId);\n if (cacheRecord) return cacheRecord;\n\n const fetchProps = await this.#getFetchProps();\n\n try {\n const response = await getRecord({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n ...fetchProps\n });\n\n return initObject(this.db, this.#links, 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 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(\n a: string | (Partial<EditableData<Data>> & Identifiable) | Array<Partial<EditableData<Data>> & Identifiable>,\n b?: Partial<EditableData<Data>>\n ): Promise<SelectedPick<Record, ['*']> | SelectedPick<Record, ['*']>[]> {\n // Update many records\n if (Array.isArray(a)) {\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 return Promise.all(a.map((object) => this.update(object)));\n }\n\n // Update one record with id as param\n if (isString(a) && isObject(b)) {\n await this.#invalidateCache(a);\n const record = await this.#updateRecordWithID(a, b);\n await this.#setCacheRecord(record);\n\n return record;\n }\n\n // Update one record with id as property\n if (isObject(a) && isString(a.id)) {\n await this.#invalidateCache(a.id);\n const record = await this.#updateRecordWithID(a.id, { ...a, id: undefined });\n await this.#setCacheRecord(record);\n\n return record;\n }\n\n throw new Error('Invalid arguments for update method');\n }\n\n async #updateRecordWithID(\n recordId: string,\n object: Partial<EditableData<Data>>\n ): Promise<SelectedPick<Record, ['*']>> {\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 body: record,\n ...fetchProps\n });\n\n const item = await this.read(response.id);\n if (!item) throw new Error('The server failed to save the record');\n\n return item;\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(\n a: string | EditableData<Data> | EditableData<Data>[],\n b?: EditableData<Data>\n ): Promise<SelectedPick<Record, ['*']> | SelectedPick<Record, ['*']>[]> {\n // Create or update many records\n if (Array.isArray(a)) {\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 return Promise.all(a.map((object) => this.createOrUpdate(object)));\n }\n\n // Create or update one record with id as param\n if (isString(a) && isObject(b)) {\n await this.#invalidateCache(a);\n const record = await this.#upsertRecordWithID(a, b);\n await this.#setCacheRecord(record);\n\n return record;\n }\n\n // Create or update one record with id as property\n if (isObject(a) && isString(a.id)) {\n await this.#invalidateCache(a.id);\n const record = await this.#upsertRecordWithID(a.id, { ...a, id: undefined });\n await this.#setCacheRecord(record);\n\n return record;\n }\n\n throw new Error('Invalid arguments for createOrUpdate method');\n }\n\n async #upsertRecordWithID(recordId: string, object: EditableData<Data>): Promise<SelectedPick<Record, ['*']>> {\n const fetchProps = await this.#getFetchProps();\n\n const response = await upsertRecordWithID({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}', tableName: this.#table, recordId },\n body: object,\n ...fetchProps\n });\n\n const item = await this.read(response.id);\n if (!item) throw new Error('The server failed to save the record');\n\n return item;\n }\n\n async delete(a: string | Identifiable | Array<string | Identifiable>): Promise<void> {\n // Delete many records\n if (Array.isArray(a)) {\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 await this.#invalidateCache(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 await this.#invalidateCache(a.id);\n return;\n }\n\n throw new Error('Invalid arguments for delete method');\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(query: string, options: { fuzziness?: number } = {}): Promise<SelectedPick<Record, ['*']>[]> {\n const fetchProps = await this.#getFetchProps();\n\n const { records } = await searchBranch({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n body: { tables: [this.#table], query, fuzziness: options.fuzziness },\n ...fetchProps\n });\n\n return records.map((item) => initObject(this.db, this.#links, this.#table, item));\n }\n\n async query<Result extends XataRecord>(query: Query<Record, Result>): Promise<Page<Record, Result>> {\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 ? buildSortFilter(data.sort) : undefined,\n page: data.page,\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 records = objects.map((record) => initObject<Result>(this.db, this.#links, this.#table, record));\n await this.#setCacheQuery(query, meta, records);\n\n return new Page<Record, Result>(query, meta, records);\n }\n\n async #invalidateCache(recordId: string): Promise<void> {\n await this.#cache.delete(`rec_${this.#table}:${recordId}`);\n\n const cacheItems = await this.#cache.getAll();\n const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith('query_'));\n\n for (const [key, value] of queries) {\n const ids = getIds(value);\n if (ids.includes(recordId)) await this.#cache.delete(key);\n }\n }\n\n async #setCacheRecord(record: SelectedPick<Record, ['*']>): Promise<void> {\n if (!this.#cache.cacheRecords) return;\n await this.#cache.set(`rec_${this.#table}:${record.id}`, record);\n }\n\n async #getCacheRecord(recordId: string): Promise<SelectedPick<Record, ['*']> | null> {\n if (!this.#cache.cacheRecords) return null;\n return this.#cache.get<SelectedPick<Record, ['*']>>(`rec_${this.#table}:${recordId}`);\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 || ttl < 0) return result;\n\n const hasExpired = result.date.getTime() + ttl < Date.now();\n return hasExpired ? null : result;\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 links: LinkDictionary,\n table: string,\n object: object\n) => {\n const result: Dictionary<unknown> = {};\n Object.assign(result, object);\n\n const tableLinks = links[table] || [];\n for (const link of tableLinks) {\n const [field, linkTable] = link;\n const value = result[field];\n\n if (value && isObject(value)) {\n result[field] = initObject(db, links, linkTable, value);\n }\n }\n\n result.read = function () {\n return db[table].read(result['id'] as string);\n };\n result.update = function (data: any) {\n return db[table].update(result['id'] as string, data);\n };\n result.delete = function () {\n return db[table].delete(result['id'] as string);\n };\n\n for (const prop of ['read', 'update', 'delete']) {\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","export interface CacheImpl {\n cacheRecords: boolean;\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 cacheRecords?: boolean;\n defaultQueryTTL?: number;\n}\n\nexport class SimpleCache implements CacheImpl {\n #map: Map<string, unknown>;\n\n capacity: number;\n cacheRecords: boolean;\n defaultQueryTTL: number;\n\n constructor(options: SimpleCacheOptions = {}) {\n this.#map = new Map();\n this.capacity = options.max ?? 500;\n this.cacheRecords = options.cacheRecords ?? true;\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 gt = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $gt: value });\n\n/**\n * Operator to restrict results to only values that are greater than or equal to the given value.\n */\nexport const ge = <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 gte = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $ge: value });\n\n/**\n * Operator to restrict results to only values that are lower than the given value.\n */\nexport const lt = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $lt: value });\n\n/**\n * Operator to restrict results to only values that are lower than or equal to the given value.\n */\nexport const lte = <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 le = <T extends ComparableType>(value: T): ComparableTypeFilter<T> => ({ $le: value });\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 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 { XataRecord } from '../api/schemas';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { isString } from '../util/lang';\nimport { BaseData } from './record';\nimport { LinkDictionary, Repository, RestRepository } from './repository';\n\nexport * from './cache';\nexport * from './operators';\nexport * from './pagination';\nexport { Query } from './query';\nexport { isIdentifiable, isXataRecord } from './record';\nexport type { BaseData, EditableData, Identifiable, XataRecord } from './record';\nexport { Repository, RestRepository } from './repository';\nexport type { LinkDictionary } from './repository';\nexport * from './selection';\n\nexport type SchemaDefinition = {\n table: string;\n links?: LinkDictionary;\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\n constructor(private links?: LinkDictionary, private tableNames?: string[]) {\n super();\n }\n\n build(pluginOptions: XataPluginOptions): SchemaPluginResult<Schemas> {\n const links = this.links;\n\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]) {\n this.#tables[table] = new RestRepository({ db, pluginOptions, table, links });\n }\n\n return this.#tables[table];\n }\n }\n );\n\n // Inject generated tables for shell to auto-complete\n for (const table of this.tableNames ?? []) {\n db[table] = new RestRepository({ db, pluginOptions, table, links });\n }\n\n return db;\n }\n}\n","import { searchBranch } from '../api';\nimport { XataPlugin, XataPluginOptions } from '../plugins';\nimport { SchemaPluginResult } from '../schema';\nimport { BaseData, XataRecord } from '../schema/record';\nimport { initObject, LinkDictionary } from '../schema/repository';\nimport { SelectedPick } from '../schema/selection';\nimport { GetArrayInnerType, StringKeys, Values } from '../util/types';\n\nexport type SearchOptions<Schemas extends Record<string, BaseData>, Tables extends StringKeys<Schemas>> = {\n fuzziness?: number;\n tables?: Tables[];\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 GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]: {\n table: Model;\n record: Awaited<SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>>;\n };\n }>[]\n >;\n byTable: <Tables extends StringKeys<Schemas>>(\n query: string,\n options?: SearchOptions<Schemas, Tables>\n ) => Promise<{\n [Model in GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]?: Awaited<\n SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>[]\n >;\n }>;\n};\n\nexport class SearchPlugin<Schemas extends Record<string, BaseData>> extends XataPlugin {\n constructor(private db: SchemaPluginResult<Schemas>, private links: LinkDictionary) {\n super();\n }\n\n build({ getFetchProps }: XataPluginOptions): SearchPluginResult<Schemas> {\n return {\n all: async <Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables> = {}\n ): Promise<\n Values<{\n [Model in GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]: {\n table: Model;\n record: Awaited<SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>>;\n };\n }>[]\n > => {\n const records = await this.#search(query, options, getFetchProps);\n\n return records.map((record) => {\n const { table = 'orphan' } = record.xata;\n return { table, record: initObject(this.db, this.links, table, record) } as any;\n });\n },\n byTable: async <Tables extends StringKeys<Schemas>>(\n query: string,\n options: SearchOptions<Schemas, Tables> = {}\n ): Promise<{\n [Model in GetArrayInnerType<NonNullable<NonNullable<typeof options>['tables']>>]?: Awaited<\n SelectedPick<Schemas[Model] & SearchXataRecord, ['*']>[]\n >;\n }> => {\n const records = await this.#search(query, options, getFetchProps);\n\n return records.reduce((acc, record) => {\n const { table = 'orphan' } = record.xata;\n const items = acc[table] ?? [];\n const item = initObject(this.db, this.links, 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: { fuzziness?: number; tables?: Tables[] },\n getFetchProps: XataPluginOptions['getFetchProps']\n ) {\n const fetchProps = await getFetchProps();\n const { tables, fuzziness } = options ?? {};\n\n const { records } = await searchBranch({\n pathParams: { workspace: '{workspaceId}', dbBranchName: '{dbBranch}' },\n body: { tables, query, fuzziness },\n ...fetchProps\n });\n\n return records;\n }\n}\n\ntype SearchXataRecord = XataRecord & { xata: { table: string } };\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 } from '../api';\nimport { FetchImpl } from '../api/fetcher';\nimport { getAPIKey } from './apiKey';\nimport { getEnvVariable, getGitBranch } from './environment';\nimport { getFetchImplementation } from './fetch';\nimport { isObject } from './lang';\n\nconst envBranchNames = [\n 'XATA_BRANCH',\n 'VERCEL_GIT_COMMIT_REF', // Vercel\n 'CF_PAGES_BRANCH', // Cloudflare Pages\n 'BRANCH' // Netlify. Putting it the last one because it is more ambiguous\n];\n\nconst defaultBranch = 'main';\n\ntype BranchResolutionOptions = {\n databaseURL?: string;\n apiKey?: string;\n fetchImpl?: FetchImpl;\n};\n\nexport async function getCurrentBranchName(options?: BranchResolutionOptions): Promise<string> {\n const env = await getBranchByEnvVariable();\n if (env) return env;\n\n const branch = await getGitBranch();\n if (!branch) return defaultBranch;\n\n // TODO: in the future, call /resolve endpoint\n // For now, call API to see if the branch exists. If not, use a default value.\n const details = await getDatabaseBranch(branch, options);\n if (details) return branch;\n\n return defaultBranch;\n}\n\nexport async function getCurrentBranchDetails(options?: BranchResolutionOptions) {\n const env = await getBranchByEnvVariable();\n if (env) return getDatabaseBranch(env, options);\n\n const branch = await getGitBranch();\n if (!branch) return getDatabaseBranch(defaultBranch, options);\n\n // TODO: in the future, call /resolve endpoint\n // For now, call API to see if the branch exists. If not, use a default value.\n const details = await getDatabaseBranch(branch, options);\n if (details) return details;\n\n return getDatabaseBranch(defaultBranch, options);\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: {\n dbBranchName,\n workspace\n }\n });\n } catch (err) {\n if (isObject(err) && err.status === 404) return null;\n throw err;\n }\n}\n\nfunction getBranchByEnvVariable(): string | undefined {\n for (const name of envBranchNames) {\n const value = getEnvVariable(name);\n if (value) {\n return value;\n }\n }\n try {\n return XATA_BRANCH;\n } catch (err) {\n // Ignore ReferenceError. Only CloudFlare workers set env variables as global variables\n }\n}\n\nexport function getDatabaseURL() {\n try {\n return getEnvVariable('XATA_DATABASE_URL') ?? XATA_DATABASE_URL;\n } catch (err) {\n return undefined;\n }\n}\n","import { FetcherExtraProps, FetchImpl } from './api/fetcher';\nimport { XataPlugin, XataPluginOptions } from './plugins';\nimport { SchemaPlugin, SchemaPluginResult } from './schema';\nimport { CacheImpl, SimpleCache } from './schema/cache';\nimport { BaseData } from './schema/record';\nimport { LinkDictionary } from './schema/repository';\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};\n\nexport const buildClient = <Plugins extends Record<string, XataPlugin> = {}>(plugins?: Plugins) =>\n class {\n #branch: BranchStrategyValue;\n db: SchemaPluginResult<any>;\n search: SearchPluginResult<any>;\n\n constructor(options: BaseClientOptions = {}, links?: LinkDictionary, tables?: string[]) {\n const safeOptions = this.#parseOptions(options);\n const pluginOptions: XataPluginOptions = {\n getFetchProps: () => this.#getFetchProps(safeOptions),\n cache: safeOptions.cache\n };\n\n const db = new SchemaPlugin(links, tables).build(pluginOptions);\n const search = new SearchPlugin(db, links ?? {}).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) 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 #parseOptions(options?: BaseClientOptions) {\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({ cacheRecords: false, defaultQueryTTL: 0 });\n const branch = async () =>\n options?.branch\n ? await this.#evaluateBranch(options.branch)\n : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });\n\n if (!databaseURL || !apiKey) {\n throw new Error('Options databaseURL and apiKey are required');\n }\n\n return { fetch, databaseURL, apiKey, branch, cache };\n }\n\n async #getFetchProps({\n fetch,\n apiKey,\n databaseURL,\n branch\n }: AllRequired<BaseClientOptions>): 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 };\n }\n\n async #evaluateBranch(param?: BranchStrategyOption): Promise<string | undefined> {\n if (this.#branch) return this.#branch;\n if (!param) 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 <Schemas extends Record<string, BaseData> = {}>(\n options?: Partial<BaseClientOptions>,\n links?: LinkDictionary\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}\n\nexport class BaseClient extends buildClient()<Record<string, any>> {}\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 './util/config';\nexport * from './util/apiKey';\n"],"names":["fetch","__accessCheck","__privateGet","__privateAdd","__privateSet","_table","__privateMethod"],"mappings":";;;;AAAA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,EAAE,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC;AAC5C,CAAC;AACM,SAAS,OAAO,CAAC,GAAG,EAAE;AAC7B,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAIM,SAAS,QAAQ,CAAC,KAAK,EAAE;AAChC,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AACM,SAAS,QAAQ,CAAC,KAAK,EAAE;AAChC,EAAE,OAAO,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACzE,CAAC;AACM,SAAS,QAAQ,CAAC,KAAK,EAAE;AAChC,EAAE,IAAI;AACN,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjD,GAAG;AACH;;ACpBO,SAAS,cAAc,CAAC,IAAI,EAAE;AACrC,EAAE,IAAI;AACN,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE;AAC7D,MAAM,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,KAAK;AACL,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,GAAG;AACH,EAAE,IAAI;AACN,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AAC1D,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,GAAG;AACH,CAAC;AACM,eAAe,YAAY,GAAG;AACrC,EAAE,IAAI;AACN,IAAI,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACxG,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,GAAG;AACH,EAAE,IAAI;AACN,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxB,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AAChC,QAAQ,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC;AAChD,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,MAAM,EAAE,OAAO;AACvB,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACtE,KAAK;AACL,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,GAAG;AACH;;AC9BO,SAAS,SAAS,GAAG;AAC5B,EAAE,IAAI;AACN,IAAI,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC;AAC1D,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG;AACH;;ACPO,SAAS,sBAAsB,CAAC,SAAS,EAAE;AAClD,EAAE,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;AACpE,EAAE,MAAM,SAAS,GAAG,SAAS,IAAI,WAAW,CAAC;AAC7C,EAAE,IAAI,CAAC,SAAS,EAAE;AAClB,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,+GAA+G,CAAC,CAAC,CAAC;AACvI,GAAG;AACH,EAAE,OAAO,SAAS,CAAC;AACnB;;ACNO,MAAM,YAAY,SAAS,KAAK,CAAC;AACxC,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE;AAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAC3D,IAAI,IAAI,IAAI,YAAY,KAAK,EAAE;AAC/B,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,KAAK;AACL,GAAG;AACH,CAAC;AACD,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAK,EAAE;AACnC,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AACD,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,EAAE,IAAI,IAAI,YAAY,KAAK,EAAE;AAC7B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AACvC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,GAAG,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;AAChC,IAAI,OAAO,uBAAuB,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,OAAO,kBAAkB,CAAC;AAC9B,GAAG;AACH;;AC7BA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,KAAK;AAC/D,EAAE,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5D,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AAC1D,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AACtF,CAAC,CAAC;AACF,SAAS,YAAY,CAAC;AACtB,EAAE,IAAI;AACN,EAAE,gBAAgB;AAClB,EAAE,MAAM;AACR,EAAE,UAAU;AACZ,CAAC,EAAE;AACH,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS;AAC5B,IAAI,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9B,EAAE,MAAM,GAAG,GAAG,OAAO,gBAAgB,KAAK,QAAQ,GAAG,CAAC,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACvH,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AAC5D,CAAC;AACD,SAAS,UAAU,CAAC,GAAG,EAAE;AACzB,EAAE,MAAM,OAAO,GAAG,yBAAyB,CAAC;AAC5C,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC7C,EAAE,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AACnD,CAAC;AACM,eAAeA,OAAK,CAAC;AAC5B,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,UAAU;AACZ,EAAE,WAAW;AACb,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,gBAAgB;AAClB,CAAC,EAAE;AACH,EAAE,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/E,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAC/D,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC;AAC/F,EAAE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;AACxC,IAAI,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;AAChC,IAAI,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC9C,IAAI,OAAO,EAAE;AACb,MAAM,cAAc,EAAE,kBAAkB;AACxC,MAAM,GAAG,OAAO;AAChB,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;AAC5B,MAAM,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/B,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAE,IAAI;AACN,IAAI,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,IAAI,IAAI,QAAQ,CAAC,EAAE,EAAE;AACrB,MAAM,OAAO,YAAY,CAAC;AAC1B,KAAK;AACL,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC1D,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACnD,GAAG;AACH;;AC1DY,MAAC,OAAO,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE;AAC/E,MAAC,UAAU,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE;AAClF,MAAC,UAAU,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE;AACrF,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,YAAY;AACnB,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,gBAAgB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACrD,EAAE,GAAG,EAAE,sBAAsB;AAC7B,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,gBAAgB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACrD,EAAE,GAAG,EAAE,sBAAsB;AAC7B,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,eAAe,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACpD,EAAE,GAAG,EAAE,aAAa;AACpB,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,iBAAiB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACtD,EAAE,GAAG,EAAE,aAAa;AACpB,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,eAAe,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACpD,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,eAAe,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACpD,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,uBAAuB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAC5D,EAAE,GAAG,EAAE,mCAAmC;AAC1C,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,yBAAyB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,4CAA4C,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE;AACtI,MAAC,qBAAqB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAC1D,EAAE,GAAG,EAAE,4CAA4C;AACnD,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,qBAAqB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,mCAAmC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE;AAC1H,MAAC,2BAA2B,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAChE,EAAE,GAAG,EAAE,8CAA8C;AACrD,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,2BAA2B,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAChE,EAAE,GAAG,EAAE,qDAAqD;AAC5D,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,2BAA2B,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAChE,EAAE,GAAG,EAAE,sDAAsD;AAC7D,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,eAAe,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACpD,EAAE,GAAG,EAAE,MAAM;AACb,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,aAAa,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAClD,EAAE,GAAG,EAAE,eAAe;AACtB,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,eAAe;AACtB,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,eAAe;AACtB,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,gBAAgB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACrD,EAAE,GAAG,EAAE,oBAAoB;AAC3B,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,oBAAoB;AAC3B,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,oBAAoB;AAC3B,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,oBAAoB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACzD,EAAE,GAAG,EAAE,6BAA6B;AACpC,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,iBAAiB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACtD,EAAE,GAAG,EAAE,6BAA6B;AACpC,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,yBAAyB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,+BAA+B,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE;AACzH,MAAC,0BAA0B,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,uCAAuC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE;AACnI,MAAC,sBAAsB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,oCAAoC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE;AAC5H,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,0BAA0B;AACjC,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,WAAW,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAChD,EAAE,GAAG,EAAE,uCAAuC;AAC9C,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,WAAW,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAChD,EAAE,GAAG,EAAE,uCAAuC;AAC9C,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,WAAW,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAChD,EAAE,GAAG,EAAE,uCAAuC;AAC9C,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,8CAA8C;AACrD,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,8CAA8C;AACrD,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,eAAe,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACpD,EAAE,GAAG,EAAE,+CAA+C;AACtD,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,cAAc,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACnD,EAAE,GAAG,EAAE,+CAA+C;AACtD,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,SAAS,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAC9C,EAAE,GAAG,EAAE,4DAA4D;AACnE,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,4DAA4D;AACnE,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,4DAA4D;AACnE,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,4CAA4C;AACnD,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,kBAAkB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,uDAAuD,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE;AAC1I,MAAC,kBAAkB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,uDAAuD,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,EAAE;AAC5I,MAAC,kBAAkB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,uDAAuD,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE;AAC3I,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,uDAAuD;AAC9D,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,SAAS,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAC9C,EAAE,GAAG,EAAE,uDAAuD;AAC9D,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,sBAAsB,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC,EAAE,GAAG,EAAE,4CAA4C,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE;AACpI,MAAC,UAAU,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AAC/C,EAAE,GAAG,EAAE,6CAA6C;AACpD,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,YAAY,GAAG,CAAC,SAAS,KAAKA,OAAK,CAAC;AACjD,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,GAAG,SAAS;AACd,CAAC,EAAE;AACS,MAAC,eAAe,GAAG;AAC/B,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAChG,EAAE,UAAU,EAAE;AACd,IAAI,eAAe;AACnB,IAAI,iBAAiB;AACrB,IAAI,YAAY;AAChB,IAAI,eAAe;AACnB,IAAI,eAAe;AACnB,IAAI,uBAAuB;AAC3B,IAAI,yBAAyB;AAC7B,IAAI,qBAAqB;AACzB,IAAI,qBAAqB;AACzB,IAAI,2BAA2B;AAC/B,IAAI,2BAA2B;AAC/B,IAAI,2BAA2B;AAC/B,GAAG;AACH,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE;AAC/D,EAAE,MAAM,EAAE;AACV,IAAI,aAAa;AACjB,IAAI,gBAAgB;AACpB,IAAI,YAAY;AAChB,IAAI,YAAY;AAChB,IAAI,oBAAoB;AACxB,IAAI,iBAAiB;AACrB,IAAI,yBAAyB;AAC7B,IAAI,0BAA0B;AAC9B,IAAI,sBAAsB;AAC1B,IAAI,cAAc;AAClB,GAAG;AACH,EAAE,KAAK,EAAE;AACT,IAAI,WAAW;AACf,IAAI,WAAW;AACf,IAAI,WAAW;AACf,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,eAAe;AACnB,IAAI,cAAc;AAClB,IAAI,SAAS;AACb,IAAI,YAAY;AAChB,IAAI,YAAY;AAChB,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,YAAY;AAChB,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,YAAY;AAChB,IAAI,SAAS;AACb,IAAI,sBAAsB;AAC1B,IAAI,UAAU;AACd,IAAI,YAAY;AAChB,GAAG;AACH;;AC9PO,SAAS,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC3C,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC9B,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AACrC,GAAG,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE;AACvC,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,GAAG;AACH,EAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AACD,MAAM,SAAS,GAAG;AAClB,EAAE,UAAU,EAAE;AACd,IAAI,IAAI,EAAE,qBAAqB;AAC/B,IAAI,UAAU,EAAE,+BAA+B;AAC/C,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,IAAI,EAAE,6BAA6B;AACvC,IAAI,UAAU,EAAE,2CAA2C;AAC3D,GAAG;AACH,CAAC,CAAC;AACF,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AACD,SAAS,cAAc,CAAC,OAAO,EAAE;AACjC,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACrF;;ACxBA,IAAIC,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAED,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK;AACnD,EAAEH,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5D,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,IAAI,WAAW,EAAE,WAAW,CAAC;AAKtB,MAAM,aAAa,CAAC;AAC3B,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAIE,cAAY,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,IAAIA,cAAY,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AACxC,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;AAClD,IAAI,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;AAClD,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AAC1D,KAAK;AACL,IAAIC,cAAY,CAAC,IAAI,EAAE,WAAW,EAAE;AACpC,MAAM,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC1C,MAAM,gBAAgB,EAAE,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC;AAC1D,MAAM,SAAS,EAAE,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC;AACtD,MAAM,MAAM;AACZ,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,IAAI,CAACF,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI;AAC7C,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1F,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC;AAChD,GAAG;AACH,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,UAAU;AACnD,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,UAAU,GAAG,IAAI,YAAY,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACrG,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,UAAU,CAAC;AACtD,GAAG;AACH,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS;AAClD,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,GAAG,IAAI,WAAW,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACnG,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC;AACrD,GAAG;AACH,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ;AACjD,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,GAAG,IAAI,SAAS,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAChG,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC;AACpD,GAAG;AACH,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM;AAC/C,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM,GAAG,IAAI,QAAQ,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAC7F,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC;AAClD,GAAG;AACH,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,OAAO;AAChD,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,OAAO,GAAG,IAAI,UAAU,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAChG,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC;AACnD,GAAG;AACH,CAAC;AACD,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5B,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5B,MAAM,OAAO,CAAC;AACd,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACjE,GAAG;AACH,EAAE,UAAU,CAAC,IAAI,EAAE;AACnB,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AAChF,GAAG;AACH,EAAE,UAAU,GAAG;AACf,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACpE,GAAG;AACH,EAAE,cAAc,GAAG;AACnB,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACxE,GAAG;AACH,EAAE,gBAAgB,CAAC,OAAO,EAAE;AAC5B,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAClD,MAAM,UAAU,EAAE,EAAE,OAAO,EAAE;AAC7B,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,gBAAgB,CAAC,OAAO,EAAE;AAC5B,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAClD,MAAM,UAAU,EAAE,EAAE,OAAO,EAAE;AAC7B,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,MAAM,YAAY,CAAC;AACnB,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,eAAe,CAAC,aAAa,EAAE;AACjC,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC;AACtD,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,iBAAiB,GAAG;AACtB,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AAChF,GAAG;AACH,EAAE,YAAY,CAAC,WAAW,EAAE;AAC5B,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC;AACnD,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE;AACjC,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,eAAe,CAAC,WAAW,EAAE,aAAa,EAAE;AAC9C,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC;AACtD,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE;AACjC,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,eAAe,CAAC,WAAW,EAAE;AAC/B,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC;AACtD,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE;AACjC,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,uBAAuB,CAAC,WAAW,EAAE;AACvC,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,uBAAuB,CAAC;AAC9D,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE;AACjC,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;AACvD,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,yBAAyB,CAAC;AAChE,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;AACzC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE;AACpB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE;AAC7C,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,qBAAqB,CAAC;AAC5D,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;AACzC,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,qBAAqB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;AAClD,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,qBAAqB,CAAC;AAC5D,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE;AACjC,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AAC3B,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE;AACrD,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,2BAA2B,CAAC;AAClE,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;AAC3C,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE;AACrD,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,2BAA2B,CAAC;AAClE,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;AAC3C,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,2BAA2B,CAAC,WAAW,EAAE,SAAS,EAAE;AACtD,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,2BAA2B,CAAC;AAClE,MAAM,UAAU,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE;AAC5C,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,MAAM,WAAW,CAAC;AAClB,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,eAAe,CAAC,SAAS,EAAE;AAC7B,IAAI,OAAO,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC;AACpD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE;AAC/B,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAClD,IAAI,OAAO,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC;AACnD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;AACvC,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE;AACpC,IAAI,OAAO,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC;AACnD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;AACvC,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,MAAM,SAAS,CAAC;AAChB,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE;AACnC,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;AACvC,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE;AAChD,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACnD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE;AACrE,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;AAC/C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE;AAC3B,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC5C,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;AAC/C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE;AACnE,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC;AACvD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE;AACjD,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACpD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,yBAAyB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AACvE,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,yBAAyB,CAAC;AAC5D,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,0BAA0B,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;AACzE,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,0BAA0B,CAAC;AAC7D,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;AAC9D,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,sBAAsB,CAAC;AACzD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC9C,IAAI,OAAO,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;AACjD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,MAAM,QAAQ,CAAC;AACf,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;AACtD,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;AACtD,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE;AAC/D,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;AACzD,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE;AAClE,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;AAC1D,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC;AACjD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;AACjE,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE;AAChE,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;AAC7F,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE;AACnE,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC;AAC9C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;AAC7F,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE;AAC5E,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC;AAC9C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;AAC7F,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,MAAM,UAAU,CAAC;AACjB,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;AAC/D,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAC7F,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACtD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC3F,MAAM,WAAW,EAAE,OAAO;AAC1B,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAC7F,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACtD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC3F,MAAM,WAAW,EAAE,OAAO;AAC1B,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAC7F,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACtD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC3F,MAAM,WAAW,EAAE,OAAO;AAC1B,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE;AACjE,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC3F,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE;AAC5E,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC;AAC7C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC3F,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE;AAC1E,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,sBAAsB,CAAC;AAC1D,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE;AACvB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;AAC5D,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC;AAC9C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;AACjF,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;AACnD,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;AACtE,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACrZO,MAAM,aAAa,CAAC;AAC3B,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE;AACvB,IAAI,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;AAChE,IAAI,OAAO,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3D,GAAG;AACH;;ACVO,MAAM,UAAU,CAAC;AACxB;;ACDA,IAAID,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAED,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK;AACnD,EAAEH,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5D,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,IAAI,MAAM,CAAC;AACJ,MAAM,IAAI,CAAC;AAClB,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE;AACzC,IAAIE,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,IAAIC,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,GAAG;AACH,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;AAC/B,IAAI,OAAOF,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7G,GAAG;AACH,EAAE,MAAM,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;AACnC,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9G,GAAG;AACH,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE;AAChC,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7G,GAAG;AACH,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;AAC/B,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5G,GAAG;AACH,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,GAAG;AACH,CAAC;AACD,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACX,MAAC,mBAAmB,GAAG,IAAI;AAC3B,MAAC,uBAAuB,GAAG,IAAI;AAC/B,MAAC,qBAAqB,GAAG,IAAI;AAC7B,MAAC,yBAAyB,GAAG;;AC9CzC,IAAID,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAED,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK;AACnD,EAAEH,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5D,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,IAAII,QAAM,EAAE,WAAW,EAAE,KAAK,CAAC;AAG/B,MAAM,MAAM,GAAG,MAAM;AACrB,EAAE,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/C,IAAIF,cAAY,CAAC,IAAI,EAAEE,QAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,IAAIF,cAAY,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9C,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AAC1D,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACtB,IAAIC,cAAY,CAAC,IAAI,EAAEC,QAAM,EAAE,KAAK,CAAC,CAAC;AACtC,IAAI,IAAI,UAAU,EAAE;AACpB,MAAMD,cAAY,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAClD,KAAK,MAAM;AACX,MAAMA,cAAY,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAK;AACL,IAAIF,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;AAC3E,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AACtF,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AACtF,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AACtF,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AACzF,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC;AAC/D,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACjF,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC;AAC/D,IAAIA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC;AAClE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAChE,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,GAAG;AACH,EAAE,eAAe,GAAG;AACpB,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,GAAG;AACH,EAAE,GAAG,GAAG;AACR,IAAI,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,GAAGA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1F,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzB,GAAG;AACH,EAAE,GAAG,CAAC,GAAG,OAAO,EAAE;AAClB,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpI,GAAG;AACH,EAAE,GAAG,CAAC,GAAG,OAAO,EAAE;AAClB,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpI,GAAG;AACH,EAAE,GAAG,CAAC,GAAG,OAAO,EAAE;AAClB,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpI,GAAG;AACH,EAAE,IAAI,CAAC,GAAG,OAAO,EAAE;AACnB,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/E,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACrI,GAAG;AACH,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACf,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;AACtG,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,CAACA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AAChG,MAAM,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACtI,KAAK,MAAM;AACX,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,CAACA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjG,MAAM,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACtI,KAAK;AACL,GAAG;AACH,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;AAC1B,IAAI,MAAM,YAAY,GAAG,CAACA,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACxH,GAAG;AACH,EAAE,MAAM,CAAC,OAAO,EAAE;AAClB,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3H,GAAG;AACH,EAAE,YAAY,CAAC,OAAO,GAAG,EAAE,EAAE;AAC7B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,OAAO,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9H,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxD,GAAG;AACH,EAAE,QAAQ,MAAM,CAAC,aAAa,CAAC,GAAG;AAClC,IAAI,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACtD,MAAM,MAAM,MAAM,CAAC;AACnB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AAC1C,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;AACnB,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC;AACpB,IAAI,OAAO,CAAC,GAAG,EAAE;AACjB,MAAM,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACvG,MAAM,MAAM,OAAO,CAAC;AACpB,MAAM,MAAM,IAAI,KAAK,CAAC;AACtB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,KAAK;AACL,GAAG;AACH,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,EAAE,EAAE;AAC9B,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH,EAAE,MAAM,MAAM,CAAC,KAAK,GAAG,mBAAmB,EAAE,OAAO,GAAG,EAAE,EAAE;AAC1D,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,WAAW,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC/D,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5B,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH,EAAE,MAAM,QAAQ,CAAC,OAAO,GAAG,EAAE,EAAE;AAC/B,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,GAAG;AACH,EAAE,KAAK,CAAC,GAAG,EAAE;AACb,IAAI,OAAO,IAAI,MAAM,CAACA,cAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAEG,QAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAEH,cAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9H,GAAG;AACH,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxC,GAAG;AACH,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;AAC7B,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxC,GAAG;AACH,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACzD,GAAG;AACH,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AACxE,GAAG;AACH,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,GAAG;AACH,CAAC,CAAC;AACQ,IAAC,KAAK,GAAG,OAAO;AAC1BG,QAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACvB,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5B,KAAK,GAAG,IAAI,OAAO,EAAE;;ACrJd,SAAS,cAAc,CAAC,CAAC,EAAE;AAClC,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AACM,SAAS,YAAY,CAAC,CAAC,EAAE;AAChC,EAAE,OAAO,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC;AAClG;;ACLO,SAAS,kBAAkB,CAAC,KAAK,EAAE;AAC1C,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AACM,SAAS,gBAAgB,CAAC,MAAM,EAAE;AACzC,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC;AACzG,CAAC;AACM,SAAS,kBAAkB,CAAC,MAAM,EAAE;AAC3C,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACnF,CAAC;AACM,SAAS,eAAe,CAAC,MAAM,EAAE;AACxC,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;AAClC,IAAI,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;AAC/B,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,GAAG,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;AACvC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACzC,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;AAC1D,GAAG,MAAM;AACT,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACtD,GAAG;AACH;;ACtBA,IAAIJ,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAED,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK;AACnD,EAAEH,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5D,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,IAAIK,iBAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC/C,EAAEL,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACtD,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF,IAAI,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,CAAC;AAiBhe,MAAM,UAAU,SAAS,KAAK,CAAC;AACtC,CAAC;AACM,MAAM,cAAc,SAAS,KAAK,CAAC;AAC1C,EAAE,WAAW,CAAC,OAAO,EAAE;AACvB,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnC,IAAIE,cAAY,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC/C,IAAIA,cAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC5C,IAAIA,cAAY,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;AAChD,IAAIA,cAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC5C,IAAIA,cAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC5C,IAAIA,cAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACtC,IAAIA,cAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AACzC,IAAIA,cAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACxC,IAAIA,cAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACxC,IAAIA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACvC,IAAIA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACvC,IAAIA,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,IAAIA,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,IAAIA,cAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/C,IAAIA,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACvC,IAAIC,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9C,IAAIA,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACpD,IAAIA,cAAY,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AAC5E,IAAI,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;AACzB,IAAIA,cAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5D,GAAG;AACH,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACrB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1B,MAAM,MAAM,OAAO,GAAG,MAAME,iBAAe,CAAC,IAAI,EAAE,uBAAuB,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACpH,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAKA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/H,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACpC,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACjD,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9G,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;AACrB,QAAQ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACjD,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACpI,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACrB,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,sBAAsB,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjH,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC3D,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AACvB,IAAI,MAAM,WAAW,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7G,IAAI,IAAI,WAAW;AACnB,MAAM,OAAO,WAAW,CAAC;AACzB,IAAI,MAAM,UAAU,GAAG,MAAMJ,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;AACvC,QAAQ,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE;AAC/H,QAAQ,GAAG,UAAU;AACrB,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnG,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3C,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,MAAM,CAAC,CAAC;AACd,KAAK;AACL,GAAG;AACH,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACrB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1B,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1B,QAAQ,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;AAC/G,OAAO;AACP,MAAM,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACpC,MAAM,MAAMI,iBAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACtF,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9G,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AACvC,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzF,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACpI,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC3D,GAAG;AACH,EAAE,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7B,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1B,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1B,QAAQ,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;AAC/G,OAAO;AACP,MAAM,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzE,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACpC,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACtF,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9G,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AACvC,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzF,MAAM,MAAM,MAAM,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACpI,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACnE,GAAG;AACH,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE;AAClB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1B,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1B,QAAQ,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;AAC/G,OAAO;AACP,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AACrB,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChF,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACtF,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AACvC,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACnF,MAAM,MAAMA,iBAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzF,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC3D,GAAG;AACH,EAAE,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACpC,IAAI,MAAM,UAAU,GAAG,MAAMJ,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CAAC;AAC3C,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE;AAC5E,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAACA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;AACzF,MAAM,GAAG,UAAU;AACnB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,EAAE,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpH,GAAG;AACH,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;AACrB,IAAI,MAAM,UAAU,GAAG,MAAMI,iBAAe,CAAC,IAAI,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvG,IAAI,IAAI,UAAU;AAClB,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AAClE,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;AACzC,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACnF,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC3D,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,KAAK,CAAC;AACN,IAAI,MAAM,UAAU,GAAG,MAAMJ,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,IAAI,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC;AACxD,MAAM,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;AACnH,MAAM,IAAI;AACV,MAAM,GAAG,UAAU;AACnB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,EAAE,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjI,IAAI,MAAMI,iBAAe,CAAC,IAAI,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACnG,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1C,GAAG;AACH,CAAC;AACD,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACvB,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACvB,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AACvB,sBAAsB,GAAG,IAAI,OAAO,EAAE,CAAC;AACvC,wBAAwB,GAAG,eAAe,MAAM,EAAE;AAClD,EAAE,MAAM,UAAU,GAAG,MAAMJ,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAE,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC9C,EAAE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;AACtC,IAAI,UAAU,EAAE;AAChB,MAAM,SAAS,EAAE,eAAe;AAChC,MAAM,YAAY,EAAE,YAAY;AAChC,MAAM,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3C,KAAK;AACL,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnD,EAAE,IAAI,CAAC,WAAW,EAAE;AACpB,IAAI,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC5D,GAAG;AACH,EAAE,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AACF,mBAAmB,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,qBAAqB,GAAG,eAAe,QAAQ,EAAE,MAAM,EAAE;AACzD,EAAE,MAAM,UAAU,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAE,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC9C,EAAE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;AAC5C,IAAI,UAAU,EAAE;AAChB,MAAM,SAAS,EAAE,eAAe;AAChC,MAAM,YAAY,EAAE,YAAY;AAChC,MAAM,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3C,MAAM,QAAQ;AACd,KAAK;AACL,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;AACrC,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnD,EAAE,IAAI,CAAC,WAAW,EAAE;AACpB,IAAI,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC5D,GAAG;AACH,EAAE,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AACF,uBAAuB,GAAG,IAAI,OAAO,EAAE,CAAC;AACxC,yBAAyB,GAAG,eAAe,OAAO,EAAE;AACpD,EAAE,MAAM,UAAU,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,EAAE,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC;AAChD,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;AACjH,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE;AACrB,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACzG,EAAE,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AAC9C,IAAI,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC9D,GAAG;AACH,EAAE,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AACF,mBAAmB,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,qBAAqB,GAAG,eAAe,QAAQ,EAAE,MAAM,EAAE;AACzD,EAAE,MAAM,UAAU,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAE,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC9C,EAAE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;AAC5C,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE;AAC3H,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5C,EAAE,IAAI,CAAC,IAAI;AACX,IAAI,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC5D,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,mBAAmB,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,qBAAqB,GAAG,eAAe,QAAQ,EAAE,MAAM,EAAE;AACzD,EAAE,MAAM,UAAU,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;AAC5C,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE;AAC3H,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5C,EAAE,IAAI,CAAC,IAAI;AACX,IAAI,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC5D,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,eAAe,GAAG,eAAe,QAAQ,EAAE;AAC3C,EAAE,MAAM,UAAU,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,CAAC;AACrB,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE;AAC3H,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,CAAC,CAAC;AACF,gBAAgB,GAAG,IAAI,OAAO,EAAE,CAAC;AACjC,kBAAkB,GAAG,eAAe,QAAQ,EAAE;AAC9C,EAAE,MAAMA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3F,EAAE,MAAM,UAAU,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/D,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzF,EAAE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;AACtC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9B,MAAM,MAAMA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnD,GAAG;AACH,CAAC,CAAC;AACF,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC,iBAAiB,GAAG,eAAe,MAAM,EAAE;AAC3C,EAAE,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY;AAC9C,IAAI,OAAO;AACX,EAAE,MAAMA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACjG,CAAC,CAAC;AACF,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC,iBAAiB,GAAG,eAAe,QAAQ,EAAE;AAC7C,EAAE,IAAI,CAACA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,YAAY;AAC9C,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,OAAOA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC,CAAC;AACF,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,gBAAgB,GAAG,eAAe,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;AACxD,EAAE,MAAMA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAClI,CAAC,CAAC;AACF,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,gBAAgB,GAAG,eAAe,KAAK,EAAE;AACzC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAEA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnE,EAAE,MAAM,MAAM,GAAG,MAAMA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3D,EAAE,IAAI,CAAC,MAAM;AACb,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAGA,cAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,eAAe,EAAE,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;AAC9F,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;AACrB,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9D,EAAE,OAAO,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;AACpC,CAAC,CAAC;AACF,MAAM,oBAAoB,GAAG,CAAC,MAAM,KAAK;AACzC,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAC9D,IAAI,IAAI,GAAG,KAAK,MAAM;AACtB,MAAM,OAAO,GAAG,CAAC;AACjB,IAAI,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AACvE,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AACK,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK;AACxD,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChC,EAAE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACxC,EAAE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AACjC,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;AACpC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC,IAAI,IAAI,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AAClC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9D,KAAK;AACL,GAAG;AACH,EAAE,MAAM,CAAC,IAAI,GAAG,WAAW;AAC3B,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,GAAG,CAAC;AACJ,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;AACjC,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,GAAG,CAAC;AACJ,EAAE,MAAM,CAAC,MAAM,GAAG,WAAW;AAC7B,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,GAAG,CAAC;AACJ,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACnD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,GAAG;AACH,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF,SAAS,MAAM,CAAC,KAAK,EAAE;AACvB,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC5B,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,GAAG;AACH,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtB,IAAI,OAAO,EAAE,CAAC;AACd,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5E,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AACnE;;ACzXA,IAAID,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAED,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK;AACnD,EAAEH,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5D,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,IAAI,IAAI,CAAC;AACF,MAAM,WAAW,CAAC;AACzB,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAIE,cAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACrC,IAAIC,cAAY,CAAC,IAAI,EAAE,IAAI,kBAAkB,IAAI,GAAG,EAAE,CAAC,CAAC;AACxD,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC;AACvC,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;AACrD,IAAI,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE,GAAG,GAAG,CAAC;AAC/D,GAAG;AACH,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,OAAO,MAAM,CAAC,WAAW,CAACF,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,GAAG;AACH,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AACjB,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AACrD,GAAG;AACH,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE;AACxB,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,IAAIA,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7C,IAAI,IAAIA,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvD,MAAM,MAAM,iBAAiB,GAAGA,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AAC7E,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC3C,KAAK;AACL,GAAG;AACH,EAAE,MAAM,MAAM,CAAC,GAAG,EAAE;AACpB,IAAIA,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzC,GAAG;AACH,EAAE,MAAM,KAAK,GAAG;AAChB,IAAI,OAAOA,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5C,GAAG;AACH,CAAC;AACD,IAAI,GAAG,IAAI,OAAO,EAAE;;AChDR,MAAC,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AAClC,MAAC,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AAClC,MAAC,GAAG,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AACnC,MAAC,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AAClC,MAAC,GAAG,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AACnC,MAAC,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AAClC,MAAC,MAAM,GAAG,CAAC,MAAM,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;AAC5C,MAAC,SAAS,GAAG,CAAC,MAAM,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAClD,MAAC,UAAU,GAAG,CAAC,KAAK,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;AAClD,MAAC,QAAQ,GAAG,CAAC,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;AAC9C,MAAC,OAAO,GAAG,CAAC,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;AAC5C,MAAC,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;AAClC,MAAC,KAAK,GAAG,CAAC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;AACxC,MAAC,QAAQ,GAAG,CAAC,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;AAC9C,MAAC,QAAQ,GAAG,CAAC,KAAK,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;AAC9C,MAAC,WAAW,GAAG,CAAC,KAAK,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;AACpD,MAAC,YAAY,GAAG,CAAC,KAAK,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;AACtD,MAAC,WAAW,GAAG,CAAC,KAAK,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE;;ACjB9D,IAAID,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIC,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAED,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAI,OAAO,CAAC;AAWL,MAAM,YAAY,SAAS,UAAU,CAAC;AAC7C,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE;AACjC,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,IAAIA,cAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACpC,GAAG;AACH,EAAE,KAAK,CAAC,aAAa,EAAE;AACvB,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7B,IAAI,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;AAC7B,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK;AAC/B,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5B,UAAU,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAChD,QAAQ,IAAI,CAACD,cAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE;AACjD,UAAUA,cAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvG,SAAS;AACT,QAAQ,OAAOA,cAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAClD,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE;AAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,KAAK;AACL,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,CAAC;AACD,OAAO,GAAG,IAAI,OAAO,EAAE;;ACjDvB,IAAID,eAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAIE,cAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAIG,iBAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC/C,EAAEL,eAAa,CAAC,GAAG,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACtD,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF,IAAI,OAAO,EAAE,SAAS,CAAC;AAIhB,MAAM,YAAY,SAAS,UAAU,CAAC;AAC7C,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE;AACzB,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACjB,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAIE,cAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,GAAG;AACH,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,EAAE;AAC3B,IAAI,OAAO;AACX,MAAM,GAAG,EAAE,OAAO,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK;AAC1C,QAAQ,MAAM,OAAO,GAAG,MAAMG,iBAAe,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAClH,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACvC,UAAU,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AACnD,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AACnF,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,OAAO,EAAE,OAAO,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK;AAC9C,QAAQ,MAAM,OAAO,GAAG,MAAMA,iBAAe,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAClH,QAAQ,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK;AAC/C,UAAU,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AACnD,UAAU,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACzC,UAAU,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACtE,UAAU,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AACvD,SAAS,EAAE,EAAE,CAAC,CAAC;AACf,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC;AACD,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AACxB,SAAS,GAAG,eAAe,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE;AAC1D,EAAE,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;AAC3C,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;AAC9C,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CAAC;AACzC,IAAI,UAAU,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE;AAC1E,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,IAAI,GAAG,UAAU;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;;ACvDM,MAAM,uBAAuB,GAAG,CAAC,QAAQ,KAAK;AACrD,EAAE,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC;AACxC,CAAC;;ACGD,MAAM,cAAc,GAAG;AACvB,EAAE,aAAa;AACf,EAAE,uBAAuB;AACzB,EAAE,iBAAiB;AACnB,EAAE,QAAQ;AACV,CAAC,CAAC;AACF,MAAM,aAAa,GAAG,MAAM,CAAC;AACtB,eAAe,oBAAoB,CAAC,OAAO,EAAE;AACpD,EAAE,MAAM,GAAG,GAAG,MAAM,sBAAsB,EAAE,CAAC;AAC7C,EAAE,IAAI,GAAG;AACT,IAAI,OAAO,GAAG,CAAC;AACf,EAAE,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;AACtC,EAAE,IAAI,CAAC,MAAM;AACb,IAAI,OAAO,aAAa,CAAC;AACzB,EAAE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,EAAE,IAAI,OAAO;AACb,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE,OAAO,aAAa,CAAC;AACvB,CAAC;AACM,eAAe,uBAAuB,CAAC,OAAO,EAAE;AACvD,EAAE,MAAM,GAAG,GAAG,MAAM,sBAAsB,EAAE,CAAC;AAC7C,EAAE,IAAI,GAAG;AACT,IAAI,OAAO,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3C,EAAE,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;AACtC,EAAE,IAAI,CAAC,MAAM;AACb,IAAI,OAAO,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACrD,EAAE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,EAAE,IAAI,OAAO;AACb,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,OAAO,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AACD,eAAe,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE;AAClD,EAAE,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,CAAC;AAC/D,EAAE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;AAChD,EAAE,IAAI,CAAC,WAAW;AAClB,IAAI,MAAM,IAAI,KAAK,CAAC,+GAA+G,CAAC,CAAC;AACrI,EAAE,IAAI,CAAC,MAAM;AACb,IAAI,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;AAC7H,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChE,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,EAAE,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,EAAE,IAAI;AACN,IAAI,OAAO,MAAM,gBAAgB,CAAC;AAClC,MAAM,MAAM;AACZ,MAAM,MAAM,EAAE,WAAW;AACzB,MAAM,SAAS,EAAE,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC;AAC3D,MAAM,gBAAgB,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9C,MAAM,UAAU,EAAE;AAClB,QAAQ,YAAY;AACpB,QAAQ,SAAS;AACjB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;AAC3C,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,MAAM,GAAG,CAAC;AACd,GAAG;AACH,CAAC;AACD,SAAS,sBAAsB,GAAG;AAClC,EAAE,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AACvC,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,GAAG;AACH,EAAE,IAAI;AACN,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,GAAG;AACH,CAAC;AACM,SAAS,cAAc,GAAG;AACjC,EAAE,IAAI;AACN,IAAI,OAAO,cAAc,CAAC,mBAAmB,CAAC,IAAI,iBAAiB,CAAC;AACpE,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG;AACH;;ACjFA,IAAI,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK;AAC1C,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,MAAM,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,IAAI,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC5C,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACxD,EAAE,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,IAAI,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,KAAK;AAC3C,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,IAAI,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;AACzE,EAAE,MAAM,YAAY,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AACF,IAAI,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK;AACnD,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5D,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,IAAI,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK;AAC/C,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACtD,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAQU,MAAC,WAAW,GAAG,CAAC,OAAO,KAAK;AACxC,EAAE,IAAI,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,CAAC;AACxH,EAAE,OAAO,EAAE,GAAG,MAAM;AACpB,IAAI,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7C,MAAM,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACxC,MAAM,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACzC,MAAM,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC1C,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1C,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpG,MAAM,MAAM,aAAa,GAAG;AAC5B,QAAQ,aAAa,EAAE,MAAM,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AAC5G,QAAQ,KAAK,EAAE,WAAW,CAAC,KAAK;AAChC,OAAO,CAAC;AACR,MAAM,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC5E,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACnB,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC3B,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;AACpE,QAAQ,IAAI,CAAC,SAAS;AACtB,UAAU,SAAS;AACnB,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACtD,QAAQ,IAAI,MAAM,YAAY,OAAO,EAAE;AACvC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK;AAC3C,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AACnC,WAAW,CAAC,CAAC;AACb,SAAS,MAAM;AACf,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC7B,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG,EAAE,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE,aAAa,GAAG,IAAI,OAAO,EAAE,EAAE,eAAe,GAAG,SAAS,OAAO,EAAE;AACjG,IAAI,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,IAAI,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,CAAC;AACjE,IAAI,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;AAClD,IAAI,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,WAAW,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;AACjG,IAAI,MAAM,MAAM,GAAG,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,oBAAoB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7N,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE;AACjC,MAAM,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACrE,KAAK;AACL,IAAI,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACzD,GAAG,EAAE,cAAc,GAAG,IAAI,OAAO,EAAE,EAAE,gBAAgB,GAAG,eAAe;AACvE,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,WAAW;AACf,IAAI,MAAM;AACV,GAAG,EAAE;AACL,IAAI,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3G,IAAI,IAAI,CAAC,WAAW;AACpB,MAAM,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACxD,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,MAAM;AACZ,MAAM,MAAM,EAAE,EAAE;AAChB,MAAM,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;AAC1C,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;AAC/D,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACzF,QAAQ,OAAO,WAAW,GAAG,OAAO,CAAC;AACrC,OAAO;AACP,KAAK,CAAC;AACN,GAAG,EAAE,eAAe,GAAG,IAAI,OAAO,EAAE,EAAE,iBAAiB,GAAG,eAAe,KAAK,EAAE;AAChF,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AACnC,MAAM,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,KAAK;AACd,MAAM,OAAO,KAAK,CAAC,CAAC;AACpB,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnE,IAAI,MAAM,cAAc,GAAG,OAAO,QAAQ,KAAK;AAC/C,MAAM,OAAO,uBAAuB,CAAC,QAAQ,CAAC,GAAG,MAAM,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC7E,KAAK,CAAC;AACN,IAAI,WAAW,MAAM,QAAQ,IAAI,UAAU,EAAE;AAC7C,MAAM,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpD,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC5C,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO;AACP,KAAK;AACL,GAAG,EAAE,EAAE,CAAC;AACR,EAAE;AACK,MAAM,UAAU,SAAS,WAAW,EAAE,CAAC;AAC9C;;AC3GO,MAAM,SAAS,SAAS,KAAK,CAAC;AACrC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;AAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}