appwrite-utils
Version:
725 lines (724 loc) • 36.1 kB
TypeScript
/**
* @fileoverview AppwriteUtils sidecar (extension) configuration schema.
*
* This schema is a STRICT SUPERSET of the official Appwrite CLI config. It
* exists so that AppwriteUtils can hold its own per-resource extensions
* (importDefs, attributeDisplayOrder, deployDir, predeployCommands, etc.)
* WITHOUT mutating the user's `appwrite.config.json` — the file the official
* CLI consumes.
*
* Two source-of-truth modes for the underlying Appwrite resources:
* - referenced: `appwriteConfig` points at an external
* `appwrite.config.json` file owned by the official CLI.
* - owned: `appwrite` embeds the full official config inline.
*
* If both are provided, the inline `appwrite` block wins — see the
* `appwriteConfig`/`appwrite` descriptions below.
*
* The root object intentionally uses `.passthrough()` (NOT `.strict()`) so
* that users can stuff forward-compatible fields without parser errors. The
* per-resource extension sub-schemas also default to `passthrough` because
* we have not yet enumerated all extension fields.
*/
import { z } from "zod";
/**
* Function-specific extensions (predeployCommands, deployDir, ignore, etc.
* still to be formalised). Currently passthrough.
*
* Known field: `forceOverwriteSecrets` — when false (default), the var-sync
* step skips updating any Appwrite-side variable whose `secret` flag is true,
* preserving server-managed secrets across deploys. Set to true to opt into
* overwriting secrets from this function's local `vars` block.
*/
export declare const FunctionExtensionSchema: z.ZodObject<{
forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>;
}, z.core.$loose>;
/**
* Site-specific extensions (predeployCommands, deployDir, ignore, etc.
* still to be formalised). Currently passthrough.
*/
export declare const SiteExtensionSchema: z.ZodObject<{}, z.core.$loose>;
/**
* Bucket-specific extensions (currently passthrough).
*/
export declare const BucketExtensionSchema: z.ZodObject<{}, z.core.$loose>;
/**
* Collection-specific extensions. Recognises `importDefs` (typed against the
* existing `importDefSchemas`) and `attributeDisplayOrder`. Other fields are
* passed through.
*/
export declare const CollectionExtensionSchema: z.ZodObject<{
importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
create: "create";
update: "update";
}>>>;
filePath: z.ZodString;
basePath: z.ZodOptional<z.ZodString>;
primaryKeyField: z.ZodDefault<z.ZodString>;
idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
sourceField: z.ZodString;
fieldToSet: z.ZodOptional<z.ZodString>;
targetFieldToMatch: z.ZodOptional<z.ZodString>;
targetField: z.ZodString;
targetCollection: z.ZodString;
}, z.core.$strip>>>;
createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>;
updateMapping: z.ZodOptional<z.ZodObject<{
originalIdField: z.ZodString;
targetField: z.ZodString;
}, z.core.$strip>>;
attributeMappings: z.ZodArray<z.ZodObject<{
oldKey: z.ZodOptional<z.ZodString>;
oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
targetKey: z.ZodString;
valueToSet: z.ZodOptional<z.ZodAny>;
fileData: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
path: z.ZodString;
}, z.core.$strip>>;
converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodString>;
}, z.core.$strip>>>>;
postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
}, z.core.$strip>>>;
attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>;
/**
* Table-specific extensions. Same shape as `CollectionExtensionSchema`,
* defined separately so that they can evolve independently.
*/
export declare const TableExtensionSchema: z.ZodObject<{
importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
create: "create";
update: "update";
}>>>;
filePath: z.ZodString;
basePath: z.ZodOptional<z.ZodString>;
primaryKeyField: z.ZodDefault<z.ZodString>;
idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
sourceField: z.ZodString;
fieldToSet: z.ZodOptional<z.ZodString>;
targetFieldToMatch: z.ZodOptional<z.ZodString>;
targetField: z.ZodString;
targetCollection: z.ZodString;
}, z.core.$strip>>>;
createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>;
updateMapping: z.ZodOptional<z.ZodObject<{
originalIdField: z.ZodString;
targetField: z.ZodString;
}, z.core.$strip>>;
attributeMappings: z.ZodArray<z.ZodObject<{
oldKey: z.ZodOptional<z.ZodString>;
oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
targetKey: z.ZodString;
valueToSet: z.ZodOptional<z.ZodAny>;
fileData: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
path: z.ZodString;
}, z.core.$strip>>;
converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodString>;
}, z.core.$strip>>>>;
postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
}, z.core.$strip>>>;
attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>;
/**
* Per-function YAML file at `functions/<id>/appwrite-utils.yaml`. Combines
* the official function shape with our extension fields in one document.
* Unknown keys pass through (FunctionExtensionSchema is itself passthrough).
*/
export declare const PerFunctionConfigSchema: z.ZodObject<{
forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>;
path: z.ZodOptional<z.ZodString>;
$id: z.ZodString;
execute: z.ZodOptional<z.ZodArray<z.ZodString>>;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
logging: z.ZodOptional<z.ZodBoolean>;
runtime: z.ZodString;
buildSpecification: z.ZodOptional<z.ZodString>;
runtimeSpecification: z.ZodOptional<z.ZodString>;
deploymentRetention: z.ZodOptional<z.ZodNumber>;
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
events: z.ZodOptional<z.ZodArray<z.ZodString>>;
schedule: z.ZodOptional<z.ZodString>;
timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
entrypoint: z.ZodOptional<z.ZodString>;
commands: z.ZodOptional<z.ZodString>;
vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
ignore: z.ZodOptional<z.ZodString>;
}, z.core.$loose>;
/**
* Per-site YAML file at `sites/<id>/appwrite-utils.yaml`. Same pattern as
* PerFunctionConfigSchema.
*/
export declare const PerSiteConfigSchema: z.ZodObject<{
path: z.ZodOptional<z.ZodString>;
$id: z.ZodString;
name: z.ZodString;
logging: z.ZodOptional<z.ZodBoolean>;
timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
framework: z.ZodOptional<z.ZodString>;
buildRuntime: z.ZodOptional<z.ZodString>;
adapter: z.ZodOptional<z.ZodString>;
installCommand: z.ZodOptional<z.ZodString>;
buildCommand: z.ZodOptional<z.ZodString>;
outputDirectory: z.ZodOptional<z.ZodString>;
fallbackFile: z.ZodOptional<z.ZodString>;
buildSpecification: z.ZodOptional<z.ZodString>;
runtimeSpecification: z.ZodOptional<z.ZodString>;
deploymentRetention: z.ZodOptional<z.ZodNumber>;
startCommand: z.ZodOptional<z.ZodString>;
vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
}, z.core.$loose>;
export declare const ResourceExtensionsSchema: z.ZodObject<{
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>;
}, z.core.$loose>>]>>;
sites: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
buckets: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
collections: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
create: "create";
update: "update";
}>>>;
filePath: z.ZodString;
basePath: z.ZodOptional<z.ZodString>;
primaryKeyField: z.ZodDefault<z.ZodString>;
idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
sourceField: z.ZodString;
fieldToSet: z.ZodOptional<z.ZodString>;
targetFieldToMatch: z.ZodOptional<z.ZodString>;
targetField: z.ZodString;
targetCollection: z.ZodString;
}, z.core.$strip>>>;
createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>;
updateMapping: z.ZodOptional<z.ZodObject<{
originalIdField: z.ZodString;
targetField: z.ZodString;
}, z.core.$strip>>;
attributeMappings: z.ZodArray<z.ZodObject<{
oldKey: z.ZodOptional<z.ZodString>;
oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
targetKey: z.ZodString;
valueToSet: z.ZodOptional<z.ZodAny>;
fileData: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
path: z.ZodString;
}, z.core.$strip>>;
converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodString>;
}, z.core.$strip>>>>;
postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
}, z.core.$strip>>>;
attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>>]>>;
tablesDB: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
tables: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
create: "create";
update: "update";
}>>>;
filePath: z.ZodString;
basePath: z.ZodOptional<z.ZodString>;
primaryKeyField: z.ZodDefault<z.ZodString>;
idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
sourceField: z.ZodString;
fieldToSet: z.ZodOptional<z.ZodString>;
targetFieldToMatch: z.ZodOptional<z.ZodString>;
targetField: z.ZodString;
targetCollection: z.ZodString;
}, z.core.$strip>>>;
createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>;
updateMapping: z.ZodOptional<z.ZodObject<{
originalIdField: z.ZodString;
targetField: z.ZodString;
}, z.core.$strip>>;
attributeMappings: z.ZodArray<z.ZodObject<{
oldKey: z.ZodOptional<z.ZodString>;
oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
targetKey: z.ZodString;
valueToSet: z.ZodOptional<z.ZodAny>;
fileData: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
path: z.ZodString;
}, z.core.$strip>>;
converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodString>;
}, z.core.$strip>>>>;
postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
}, z.core.$strip>>>;
attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>>]>>;
teams: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
webhooks: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
topics: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
messages: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
}, z.core.$loose>;
export declare const AuthBlockSchema: z.ZodObject<{
endpoint: z.ZodOptional<z.ZodString>;
projectId: z.ZodOptional<z.ZodString>;
apiKey: z.ZodOptional<z.ZodString>;
authMode: z.ZodDefault<z.ZodEnum<{
apiKey: "apiKey";
session: "session";
auto: "auto";
}>>;
sessionCookie: z.ZodOptional<z.ZodString>;
}, z.core.$loose>;
export declare const LoggingBlockSchema: z.ZodObject<{
enabled: z.ZodDefault<z.ZodBoolean>;
level: z.ZodDefault<z.ZodEnum<{
error: "error";
warn: "warn";
info: "info";
debug: "debug";
}>>;
logDirectory: z.ZodOptional<z.ZodString>;
console: z.ZodDefault<z.ZodBoolean>;
}, z.core.$loose>;
export declare const SchemaConfigSchema: z.ZodObject<{
outputDirectory: z.ZodDefault<z.ZodString>;
yamlSchemaDirectory: z.ZodDefault<z.ZodString>;
importDirectory: z.ZodDefault<z.ZodString>;
collectionsDirectory: z.ZodDefault<z.ZodString>;
tablesDirectory: z.ZodDefault<z.ZodString>;
}, z.core.$loose>;
export declare const AppwriteUtilsExtensionSchema: z.ZodObject<{
appwriteConfig: z.ZodOptional<z.ZodString>;
appwrite: z.ZodOptional<z.ZodObject<{
projectId: z.ZodString;
projectName: z.ZodOptional<z.ZodString>;
endpoint: z.ZodOptional<z.ZodString>;
settings: z.ZodOptional<z.ZodObject<{
services: z.ZodOptional<z.ZodObject<{
account: z.ZodOptional<z.ZodBoolean>;
avatars: z.ZodOptional<z.ZodBoolean>;
databases: z.ZodOptional<z.ZodBoolean>;
locale: z.ZodOptional<z.ZodBoolean>;
health: z.ZodOptional<z.ZodBoolean>;
storage: z.ZodOptional<z.ZodBoolean>;
teams: z.ZodOptional<z.ZodBoolean>;
users: z.ZodOptional<z.ZodBoolean>;
sites: z.ZodOptional<z.ZodBoolean>;
functions: z.ZodOptional<z.ZodBoolean>;
graphql: z.ZodOptional<z.ZodBoolean>;
messaging: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>;
protocols: z.ZodOptional<z.ZodObject<{
rest: z.ZodOptional<z.ZodBoolean>;
graphql: z.ZodOptional<z.ZodBoolean>;
websocket: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>;
auth: z.ZodOptional<z.ZodObject<{
methods: z.ZodOptional<z.ZodObject<{
jwt: z.ZodOptional<z.ZodBoolean>;
phone: z.ZodOptional<z.ZodBoolean>;
invites: z.ZodOptional<z.ZodBoolean>;
anonymous: z.ZodOptional<z.ZodBoolean>;
"email-otp": z.ZodOptional<z.ZodBoolean>;
"magic-url": z.ZodOptional<z.ZodBoolean>;
"email-password": z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>;
security: z.ZodOptional<z.ZodObject<{
duration: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
limit: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
sessionsLimit: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
passwordHistory: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
passwordDictionary: z.ZodOptional<z.ZodBoolean>;
personalDataCheck: z.ZodOptional<z.ZodBoolean>;
sessionAlerts: z.ZodOptional<z.ZodBoolean>;
mockNumbers: z.ZodOptional<z.ZodArray<z.ZodObject<{
phone: z.ZodString;
otp: z.ZodString;
}, z.core.$strict>>>;
}, z.core.$strict>>;
}, z.core.$strict>>;
}, z.core.$strict>>;
includes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
functions: z.ZodOptional<z.ZodArray<z.ZodObject<{
path: z.ZodOptional<z.ZodString>;
$id: z.ZodString;
execute: z.ZodOptional<z.ZodArray<z.ZodString>>;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
logging: z.ZodOptional<z.ZodBoolean>;
runtime: z.ZodString;
buildSpecification: z.ZodOptional<z.ZodString>;
runtimeSpecification: z.ZodOptional<z.ZodString>;
deploymentRetention: z.ZodOptional<z.ZodNumber>;
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
events: z.ZodOptional<z.ZodArray<z.ZodString>>;
schedule: z.ZodOptional<z.ZodString>;
timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
entrypoint: z.ZodOptional<z.ZodString>;
commands: z.ZodOptional<z.ZodString>;
vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
ignore: z.ZodOptional<z.ZodString>;
}, z.core.$strict>>>;
sites: z.ZodOptional<z.ZodArray<z.ZodObject<{
path: z.ZodOptional<z.ZodString>;
$id: z.ZodString;
name: z.ZodString;
logging: z.ZodOptional<z.ZodBoolean>;
timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
framework: z.ZodOptional<z.ZodString>;
buildRuntime: z.ZodOptional<z.ZodString>;
adapter: z.ZodOptional<z.ZodString>;
installCommand: z.ZodOptional<z.ZodString>;
buildCommand: z.ZodOptional<z.ZodString>;
outputDirectory: z.ZodOptional<z.ZodString>;
fallbackFile: z.ZodOptional<z.ZodString>;
buildSpecification: z.ZodOptional<z.ZodString>;
runtimeSpecification: z.ZodOptional<z.ZodString>;
deploymentRetention: z.ZodOptional<z.ZodNumber>;
startCommand: z.ZodOptional<z.ZodString>;
vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
}, z.core.$strict>>>;
databases: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>>;
collections: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
$permissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
databaseId: z.ZodString;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
documentSecurity: z.ZodDefault<z.ZodBoolean>;
attributes: z.ZodOptional<z.ZodArray<z.ZodObject<{
key: z.ZodString;
type: z.ZodEnum<{
string: "string";
bigint: "bigint";
boolean: "boolean";
datetime: "datetime";
integer: "integer";
double: "double";
relationship: "relationship";
varchar: "varchar";
text: "text";
mediumtext: "mediumtext";
longtext: "longtext";
point: "point";
polygon: "polygon";
linestring: "linestring";
}>;
required: z.ZodOptional<z.ZodBoolean>;
array: z.ZodOptional<z.ZodBoolean>;
size: z.ZodOptional<z.ZodNumber>;
default: z.ZodOptional<z.ZodAny>;
min: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>;
max: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>;
format: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
enum: "enum";
email: "email";
ip: "ip";
url: "url";
datetime: "datetime";
}>, z.ZodLiteral<"">]>>;
elements: z.ZodOptional<z.ZodArray<z.ZodString>>;
relatedCollection: z.ZodOptional<z.ZodString>;
relatedTable: z.ZodOptional<z.ZodString>;
relationType: z.ZodOptional<z.ZodString>;
twoWay: z.ZodOptional<z.ZodBoolean>;
twoWayKey: z.ZodOptional<z.ZodString>;
onDelete: z.ZodOptional<z.ZodString>;
side: z.ZodOptional<z.ZodString>;
attributes: z.ZodOptional<z.ZodArray<z.ZodString>>;
orders: z.ZodOptional<z.ZodArray<z.ZodString>>;
encrypt: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>>;
indexes: z.ZodOptional<z.ZodArray<z.ZodObject<{
key: z.ZodString;
type: z.ZodString;
status: z.ZodOptional<z.ZodString>;
attributes: z.ZodArray<z.ZodString>;
orders: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strict>>>;
}, z.core.$strict>>>;
tablesDB: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>>;
tables: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
$permissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
databaseId: z.ZodString;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
rowSecurity: z.ZodDefault<z.ZodBoolean>;
columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
key: z.ZodString;
type: z.ZodEnum<{
string: "string";
bigint: "bigint";
boolean: "boolean";
datetime: "datetime";
integer: "integer";
double: "double";
relationship: "relationship";
varchar: "varchar";
text: "text";
mediumtext: "mediumtext";
longtext: "longtext";
point: "point";
polygon: "polygon";
linestring: "linestring";
}>;
required: z.ZodOptional<z.ZodBoolean>;
array: z.ZodOptional<z.ZodBoolean>;
size: z.ZodOptional<z.ZodNumber>;
default: z.ZodOptional<z.ZodAny>;
min: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>;
max: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>;
format: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
enum: "enum";
email: "email";
ip: "ip";
url: "url";
datetime: "datetime";
}>, z.ZodLiteral<"">]>>;
elements: z.ZodOptional<z.ZodArray<z.ZodString>>;
relatedTable: z.ZodOptional<z.ZodString>;
relationType: z.ZodOptional<z.ZodString>;
twoWay: z.ZodOptional<z.ZodBoolean>;
twoWayKey: z.ZodOptional<z.ZodString>;
onDelete: z.ZodOptional<z.ZodString>;
side: z.ZodOptional<z.ZodString>;
columns: z.ZodOptional<z.ZodArray<z.ZodString>>;
orders: z.ZodOptional<z.ZodArray<z.ZodString>>;
encrypt: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>>;
indexes: z.ZodOptional<z.ZodArray<z.ZodObject<{
key: z.ZodString;
type: z.ZodString;
status: z.ZodOptional<z.ZodString>;
columns: z.ZodArray<z.ZodString>;
orders: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strict>>>;
}, z.core.$strict>>>;
buckets: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
$permissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
fileSecurity: z.ZodOptional<z.ZodBoolean>;
name: z.ZodString;
enabled: z.ZodOptional<z.ZodBoolean>;
maximumFileSize: z.ZodOptional<z.ZodNumber>;
allowedFileExtensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
compression: z.ZodOptional<z.ZodString>;
encryption: z.ZodOptional<z.ZodBoolean>;
antivirus: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>>;
teams: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
name: z.ZodString;
}, z.core.$strict>>>;
webhooks: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
name: z.ZodString;
url: z.ZodString;
events: z.ZodArray<z.ZodString>;
enabled: z.ZodOptional<z.ZodBoolean>;
tls: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>>>;
topics: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
name: z.ZodString;
subscribe: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strict>>>;
messages: z.ZodOptional<z.ZodArray<z.ZodObject<{
$id: z.ZodString;
name: z.ZodString;
emailTotal: z.ZodOptional<z.ZodNumber>;
smsTotal: z.ZodOptional<z.ZodNumber>;
pushTotal: z.ZodOptional<z.ZodNumber>;
subscribe: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strict>>>;
}, z.core.$strict>>;
auth: z.ZodOptional<z.ZodObject<{
endpoint: z.ZodOptional<z.ZodString>;
projectId: z.ZodOptional<z.ZodString>;
apiKey: z.ZodOptional<z.ZodString>;
authMode: z.ZodDefault<z.ZodEnum<{
apiKey: "apiKey";
session: "session";
auto: "auto";
}>>;
sessionCookie: z.ZodOptional<z.ZodString>;
}, z.core.$loose>>;
extensions: z.ZodOptional<z.ZodObject<{
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>;
}, z.core.$loose>>]>>;
sites: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
buckets: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
collections: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
create: "create";
update: "update";
}>>>;
filePath: z.ZodString;
basePath: z.ZodOptional<z.ZodString>;
primaryKeyField: z.ZodDefault<z.ZodString>;
idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
sourceField: z.ZodString;
fieldToSet: z.ZodOptional<z.ZodString>;
targetFieldToMatch: z.ZodOptional<z.ZodString>;
targetField: z.ZodString;
targetCollection: z.ZodString;
}, z.core.$strip>>>;
createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>;
updateMapping: z.ZodOptional<z.ZodObject<{
originalIdField: z.ZodString;
targetField: z.ZodString;
}, z.core.$strip>>;
attributeMappings: z.ZodArray<z.ZodObject<{
oldKey: z.ZodOptional<z.ZodString>;
oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
targetKey: z.ZodString;
valueToSet: z.ZodOptional<z.ZodAny>;
fileData: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
path: z.ZodString;
}, z.core.$strip>>;
converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodString>;
}, z.core.$strip>>>>;
postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
}, z.core.$strip>>>;
attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>>]>>;
tablesDB: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
tables: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
create: "create";
update: "update";
}>>>;
filePath: z.ZodString;
basePath: z.ZodOptional<z.ZodString>;
primaryKeyField: z.ZodDefault<z.ZodString>;
idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
sourceField: z.ZodString;
fieldToSet: z.ZodOptional<z.ZodString>;
targetFieldToMatch: z.ZodOptional<z.ZodString>;
targetField: z.ZodString;
targetCollection: z.ZodString;
}, z.core.$strip>>>;
createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>;
updateMapping: z.ZodOptional<z.ZodObject<{
originalIdField: z.ZodString;
targetField: z.ZodString;
}, z.core.$strip>>;
attributeMappings: z.ZodArray<z.ZodObject<{
oldKey: z.ZodOptional<z.ZodString>;
oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
targetKey: z.ZodString;
valueToSet: z.ZodOptional<z.ZodAny>;
fileData: z.ZodOptional<z.ZodObject<{
name: z.ZodString;
path: z.ZodString;
}, z.core.$strip>>;
converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>;
validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodString>;
}, z.core.$strip>>>>;
postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
action: z.ZodString;
params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
}, z.core.$strip>>>>;
}, z.core.$strip>>;
}, z.core.$strip>>>;
attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$loose>>]>>;
teams: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
webhooks: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
topics: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
messages: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>;
}, z.core.$loose>>;
apiMode: z.ZodDefault<z.ZodEnum<{
auto: "auto";
legacy: "legacy";
tablesdb: "tablesdb";
}>>;
logging: z.ZodOptional<z.ZodObject<{
enabled: z.ZodDefault<z.ZodBoolean>;
level: z.ZodDefault<z.ZodEnum<{
error: "error";
warn: "warn";
info: "info";
debug: "debug";
}>>;
logDirectory: z.ZodOptional<z.ZodString>;
console: z.ZodDefault<z.ZodBoolean>;
}, z.core.$loose>>;
enableBackups: z.ZodDefault<z.ZodBoolean>;
backupInterval: z.ZodDefault<z.ZodNumber>;
backupRetention: z.ZodDefault<z.ZodNumber>;
enableBackupCleanup: z.ZodDefault<z.ZodBoolean>;
enableMockData: z.ZodDefault<z.ZodBoolean>;
documentBucketId: z.ZodDefault<z.ZodString>;
usersCollectionName: z.ZodDefault<z.ZodString>;
schemaConfig: z.ZodOptional<z.ZodObject<{
outputDirectory: z.ZodDefault<z.ZodString>;
yamlSchemaDirectory: z.ZodDefault<z.ZodString>;
importDirectory: z.ZodDefault<z.ZodString>;
collectionsDirectory: z.ZodDefault<z.ZodString>;
tablesDirectory: z.ZodDefault<z.ZodString>;
}, z.core.$loose>>;
}, z.core.$loose>;
export type AppwriteUtilsExtension = z.infer<typeof AppwriteUtilsExtensionSchema>;
export type AppwriteUtilsExtensionInput = z.input<typeof AppwriteUtilsExtensionSchema>;
export type AuthBlock = z.infer<typeof AuthBlockSchema>;
export type LoggingBlock = z.infer<typeof LoggingBlockSchema>;
export type ResourceExtensions = z.infer<typeof ResourceExtensionsSchema>;
export type FunctionExtension = z.infer<typeof FunctionExtensionSchema>;
export type SiteExtension = z.infer<typeof SiteExtensionSchema>;
export type BucketExtension = z.infer<typeof BucketExtensionSchema>;
export type CollectionExtension = z.infer<typeof CollectionExtensionSchema>;
export type TableExtension = z.infer<typeof TableExtensionSchema>;
export type PerFunctionConfig = z.infer<typeof PerFunctionConfigSchema>;
export type PerFunctionConfigInput = z.input<typeof PerFunctionConfigSchema>;
export type PerSiteConfig = z.infer<typeof PerSiteConfigSchema>;
export type PerSiteConfigInput = z.input<typeof PerSiteConfigSchema>;
export type SchemaConfigBlock = z.infer<typeof SchemaConfigSchema>;