appwrite-cli 13.0.1 → 13.1.0-rc.1

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.
Files changed (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +2 -2
  3. package/cli.ts +2 -0
  4. package/dist/bundle.cjs +17551 -16864
  5. package/dist/cli.js +2 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/lib/commands/config-validations.d.ts +53 -0
  8. package/dist/lib/commands/config-validations.d.ts.map +1 -0
  9. package/dist/lib/commands/config-validations.js +130 -0
  10. package/dist/lib/commands/config-validations.js.map +1 -0
  11. package/dist/lib/commands/config.d.ts +241 -325
  12. package/dist/lib/commands/config.d.ts.map +1 -1
  13. package/dist/lib/commands/config.js +86 -107
  14. package/dist/lib/commands/config.js.map +1 -1
  15. package/dist/lib/commands/generate.d.ts +7 -0
  16. package/dist/lib/commands/generate.d.ts.map +1 -0
  17. package/dist/lib/commands/generate.js +92 -0
  18. package/dist/lib/commands/generate.js.map +1 -0
  19. package/dist/lib/commands/generators/base.d.ts +58 -0
  20. package/dist/lib/commands/generators/base.d.ts.map +1 -0
  21. package/dist/lib/commands/generators/base.js +27 -0
  22. package/dist/lib/commands/generators/base.js.map +1 -0
  23. package/dist/lib/commands/generators/index.d.ts +26 -0
  24. package/dist/lib/commands/generators/index.d.ts.map +1 -0
  25. package/dist/lib/commands/generators/index.js +55 -0
  26. package/dist/lib/commands/generators/index.js.map +1 -0
  27. package/dist/lib/commands/generators/language-detector.d.ts +42 -0
  28. package/dist/lib/commands/generators/language-detector.d.ts.map +1 -0
  29. package/dist/lib/commands/generators/language-detector.js +127 -0
  30. package/dist/lib/commands/generators/language-detector.js.map +1 -0
  31. package/dist/lib/commands/generators/typescript/databases.d.ts +36 -0
  32. package/dist/lib/commands/generators/typescript/databases.d.ts.map +1 -0
  33. package/dist/lib/commands/generators/typescript/databases.js +489 -0
  34. package/dist/lib/commands/generators/typescript/databases.js.map +1 -0
  35. package/dist/lib/commands/pull.js +3 -3
  36. package/dist/lib/commands/pull.js.map +1 -1
  37. package/dist/lib/commands/push.d.ts +6 -3
  38. package/dist/lib/commands/push.d.ts.map +1 -1
  39. package/dist/lib/commands/push.js +57 -37
  40. package/dist/lib/commands/push.js.map +1 -1
  41. package/dist/lib/commands/schema.d.ts +2 -2
  42. package/dist/lib/commands/schema.d.ts.map +1 -1
  43. package/dist/lib/commands/schema.js +2 -2
  44. package/dist/lib/commands/schema.js.map +1 -1
  45. package/dist/lib/commands/utils/attributes.d.ts +5 -0
  46. package/dist/lib/commands/utils/attributes.d.ts.map +1 -1
  47. package/dist/lib/commands/utils/attributes.js +20 -10
  48. package/dist/lib/commands/utils/attributes.js.map +1 -1
  49. package/dist/lib/commands/utils/pools.d.ts +0 -3
  50. package/dist/lib/commands/utils/pools.d.ts.map +1 -1
  51. package/dist/lib/commands/utils/pools.js +0 -34
  52. package/dist/lib/commands/utils/pools.js.map +1 -1
  53. package/dist/lib/config.d.ts.map +1 -1
  54. package/dist/lib/config.js +28 -131
  55. package/dist/lib/config.js.map +1 -1
  56. package/dist/lib/constants.d.ts +1 -1
  57. package/dist/lib/constants.d.ts.map +1 -1
  58. package/dist/lib/constants.js +1 -1
  59. package/dist/lib/constants.js.map +1 -1
  60. package/dist/lib/utils.d.ts +3 -0
  61. package/dist/lib/utils.d.ts.map +1 -1
  62. package/dist/lib/utils.js +26 -0
  63. package/dist/lib/utils.js.map +1 -1
  64. package/dist/package.json +1 -1
  65. package/install.ps1 +2 -2
  66. package/install.sh +1 -1
  67. package/lib/commands/config-validations.ts +199 -0
  68. package/lib/commands/config.ts +94 -125
  69. package/lib/commands/generate.ts +142 -0
  70. package/lib/commands/generators/base.ts +91 -0
  71. package/lib/commands/generators/index.ts +87 -0
  72. package/lib/commands/generators/language-detector.ts +163 -0
  73. package/lib/commands/generators/typescript/databases.ts +590 -0
  74. package/lib/commands/pull.ts +4 -4
  75. package/lib/commands/push.ts +97 -58
  76. package/lib/commands/schema.ts +3 -3
  77. package/lib/commands/utils/attributes.ts +31 -11
  78. package/lib/commands/utils/pools.ts +0 -67
  79. package/lib/config.ts +43 -131
  80. package/lib/constants.ts +1 -1
  81. package/lib/utils.ts +32 -0
  82. package/package.json +1 -1
  83. package/scoop/appwrite.config.json +3 -3
  84. package/dist/lib/commands/db.d.ts +0 -34
  85. package/dist/lib/commands/db.d.ts.map +0 -1
  86. package/dist/lib/commands/db.js +0 -247
  87. package/dist/lib/commands/db.js.map +0 -1
  88. package/lib/commands/db.ts +0 -324
package/dist/lib/utils.js CHANGED
@@ -163,4 +163,30 @@ export function filterBySchema(data, schema) {
163
163
  }
164
164
  return result;
165
165
  }
166
+ export function toPascalCase(str) {
167
+ return str
168
+ .replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ""))
169
+ .replace(/^(.)/, (char) => char.toUpperCase());
170
+ }
171
+ export function toUpperSnakeCase(str) {
172
+ return str
173
+ .replace(/([a-z])([A-Z])/g, "$1_$2")
174
+ .replace(/[-\s]+/g, "_")
175
+ .toUpperCase();
176
+ }
177
+ export function sanitizeEnumKey(key) {
178
+ let sanitized = toUpperSnakeCase(key)
179
+ .replace(/[^A-Z0-9_]/gi, "_") // Replace non-alphanumeric with underscores
180
+ .replace(/_+/g, "_") // Collapse consecutive underscores
181
+ .replace(/^_+|_+$/g, ""); // Trim leading/trailing underscores
182
+ // Prefix with underscore if starts with a digit
183
+ if (/^[0-9]/.test(sanitized)) {
184
+ sanitized = "_" + sanitized;
185
+ }
186
+ // Fallback if empty after sanitization
187
+ if (!sanitized) {
188
+ sanitized = "_VALUE";
189
+ }
190
+ return sanitized;
191
+ }
166
192
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "type": "module",
4
4
  "homepage": "https://appwrite.io/support",
5
5
  "description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
6
- "version": "13.0.1",
6
+ "version": "13.1.0-rc.1",
7
7
  "license": "BSD-3-Clause",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
package/install.ps1 CHANGED
@@ -13,8 +13,8 @@
13
13
  # You can use "View source" of this page to see the full script.
14
14
 
15
15
  # REPO
16
- $GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.0.1/appwrite-cli-win-x64.exe"
17
- $GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.0.1/appwrite-cli-win-arm64.exe"
16
+ $GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.1.0-rc.1/appwrite-cli-win-x64.exe"
17
+ $GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.1.0-rc.1/appwrite-cli-win-arm64.exe"
18
18
 
19
19
  $APPWRITE_BINARY_NAME = "appwrite.exe"
20
20
 
package/install.sh CHANGED
@@ -96,7 +96,7 @@ printSuccess() {
96
96
  downloadBinary() {
97
97
  echo "[2/4] Downloading executable for $OS ($ARCH) ..."
98
98
 
99
- GITHUB_LATEST_VERSION="13.0.1"
99
+ GITHUB_LATEST_VERSION="13.1.0-rc.1"
100
100
  GITHUB_FILE="appwrite-cli-${OS}-${ARCH}"
101
101
  GITHUB_URL="https://github.com/$GITHUB_REPOSITORY_NAME/releases/download/$GITHUB_LATEST_VERSION/$GITHUB_FILE"
102
102
 
@@ -0,0 +1,199 @@
1
+ import { z } from "zod";
2
+
3
+ // ============================================================================
4
+ // Attribute Validations
5
+ // ============================================================================
6
+
7
+ /**
8
+ * Validates that when 'required' is true, 'default' must be null
9
+ */
10
+ export const validateRequiredDefault = (data: {
11
+ required?: boolean;
12
+ default?: any;
13
+ }) => {
14
+ if (data.required === true && data.default !== null) {
15
+ return false;
16
+ }
17
+ return true;
18
+ };
19
+
20
+ /**
21
+ * Validates that string type attributes must have a size defined
22
+ */
23
+ export const validateStringSize = (data: {
24
+ type: string;
25
+ size?: number | null;
26
+ }) => {
27
+ if (
28
+ data.type === "string" &&
29
+ (data.size === undefined || data.size === null)
30
+ ) {
31
+ return false;
32
+ }
33
+ return true;
34
+ };
35
+
36
+ // ============================================================================
37
+ // Collection & Table Validations
38
+ // ============================================================================
39
+
40
+ interface AttributeOrColumn {
41
+ key: string;
42
+ }
43
+
44
+ interface Index {
45
+ key: string;
46
+ }
47
+
48
+ interface CollectionOrTableData {
49
+ attributes?: AttributeOrColumn[];
50
+ columns?: AttributeOrColumn[];
51
+ indexes?: Index[];
52
+ }
53
+
54
+ /**
55
+ * Validates duplicate keys in attributes/columns and indexes
56
+ */
57
+ export const validateContainerDuplicates = (
58
+ data: CollectionOrTableData,
59
+ ctx: z.RefinementCtx,
60
+ ) => {
61
+ const items = data.attributes || data.columns || [];
62
+ const itemType = data.attributes ? "Attribute" : "Column";
63
+ const itemPath = data.attributes ? "attributes" : "columns";
64
+
65
+ // Validate duplicate item keys
66
+ if (items.length > 0) {
67
+ const seenKeys = new Set<string>();
68
+
69
+ items.forEach((item, index) => {
70
+ if (seenKeys.has(item.key)) {
71
+ ctx.addIssue({
72
+ code: z.ZodIssueCode.custom,
73
+ message: `${itemType} with the key '${item.key}' already exists. ${itemType} keys must be unique, try again with a different key.`,
74
+ path: [itemPath, index, "key"],
75
+ });
76
+ } else {
77
+ seenKeys.add(item.key);
78
+ }
79
+ });
80
+ }
81
+
82
+ // Validate duplicate index keys
83
+ if (data.indexes && data.indexes.length > 0) {
84
+ const seenKeys = new Set<string>();
85
+
86
+ data.indexes.forEach((index, indexPos) => {
87
+ if (seenKeys.has(index.key)) {
88
+ ctx.addIssue({
89
+ code: z.ZodIssueCode.custom,
90
+ message: `Index with the key '${index.key}' already exists. Index keys must be unique, try again with a different key.`,
91
+ path: ["indexes", indexPos, "key"],
92
+ });
93
+ } else {
94
+ seenKeys.add(index.key);
95
+ }
96
+ });
97
+ }
98
+ };
99
+
100
+ // ============================================================================
101
+ // Config Validations
102
+ // ============================================================================
103
+
104
+ interface RelationshipItem {
105
+ key: string;
106
+ type: string;
107
+ relatedTable?: string;
108
+ relatedCollection?: string;
109
+ }
110
+
111
+ interface ContainerWithDatabase {
112
+ $id: string;
113
+ name: string;
114
+ databaseId: string;
115
+ columns?: RelationshipItem[];
116
+ attributes?: RelationshipItem[];
117
+ }
118
+
119
+ interface ConfigData {
120
+ tables?: ContainerWithDatabase[];
121
+ collections?: ContainerWithDatabase[];
122
+ }
123
+
124
+ /**
125
+ * Validates cross-database relationships
126
+ */
127
+ export const validateCrossDatabase = (
128
+ data: ConfigData,
129
+ ctx: z.RefinementCtx,
130
+ ) => {
131
+ // Validate cross-database relationships for tables
132
+ if (data.tables && data.tables.length > 0) {
133
+ // Build a map of table IDs to their database IDs
134
+ const tableDatabaseMap = new Map<string, string>();
135
+ for (const table of data.tables) {
136
+ tableDatabaseMap.set(table.$id, table.databaseId);
137
+ }
138
+
139
+ // Check each table's relationship columns
140
+ data.tables.forEach((table, tableIndex) => {
141
+ const columns = table.columns || [];
142
+ columns.forEach((column, columnIndex) => {
143
+ if (column.type === "relationship" && column.relatedTable) {
144
+ const relatedDatabaseId = tableDatabaseMap.get(column.relatedTable);
145
+ if (relatedDatabaseId && relatedDatabaseId !== table.databaseId) {
146
+ ctx.addIssue({
147
+ code: z.ZodIssueCode.custom,
148
+ message: `Invalid cross-database relationship: Table '${table.name}' (database: '${table.databaseId}') has relationship '${column.key}' pointing to table '${column.relatedTable}' which is in database '${relatedDatabaseId}'. Appwrite only supports relationships within the same database.`,
149
+ path: [
150
+ "tables",
151
+ tableIndex,
152
+ "columns",
153
+ columnIndex,
154
+ "relatedTable",
155
+ ],
156
+ });
157
+ }
158
+ }
159
+ });
160
+ });
161
+ }
162
+
163
+ // Validate cross-database relationships for collections (legacy)
164
+ if (data.collections && data.collections.length > 0) {
165
+ // Build a map of collection IDs to their database IDs
166
+ const collectionDatabaseMap = new Map<string, string>();
167
+ for (const collection of data.collections) {
168
+ collectionDatabaseMap.set(collection.$id, collection.databaseId);
169
+ }
170
+
171
+ // Check each collection's relationship attributes
172
+ data.collections.forEach((collection, collectionIndex) => {
173
+ const attributes = collection.attributes || [];
174
+ attributes.forEach((attribute, attributeIndex) => {
175
+ if (attribute.type === "relationship" && attribute.relatedCollection) {
176
+ const relatedDatabaseId = collectionDatabaseMap.get(
177
+ attribute.relatedCollection,
178
+ );
179
+ if (
180
+ relatedDatabaseId &&
181
+ relatedDatabaseId !== collection.databaseId
182
+ ) {
183
+ ctx.addIssue({
184
+ code: z.ZodIssueCode.custom,
185
+ message: `Invalid cross-database relationship: Collection '${collection.name}' (database: '${collection.databaseId}') has relationship '${attribute.key}' pointing to collection '${attribute.relatedCollection}' which is in database '${relatedDatabaseId}'. Appwrite only supports relationships within the same database.`,
186
+ path: [
187
+ "collections",
188
+ collectionIndex,
189
+ "attributes",
190
+ attributeIndex,
191
+ "relatedCollection",
192
+ ],
193
+ });
194
+ }
195
+ }
196
+ });
197
+ });
198
+ }
199
+ };
@@ -1,7 +1,13 @@
1
1
  import { z } from "zod";
2
+ import {
3
+ validateRequiredDefault,
4
+ validateStringSize,
5
+ validateContainerDuplicates,
6
+ validateCrossDatabase,
7
+ } from "./config-validations.js";
2
8
 
3
9
  // ============================================================================
4
- // Internal Helpers (not exported)
10
+ // Internal Helpers
5
11
  // ============================================================================
6
12
 
7
13
  const INT64_MIN = BigInt("-9223372036854775808");
@@ -65,29 +71,6 @@ const MockNumberSchema = z
65
71
  })
66
72
  .strict();
67
73
 
68
- // ============================================================================
69
- // Config Schema
70
- // ============================================================================
71
-
72
- const ConfigSchema = z
73
- .object({
74
- projectId: z.string(),
75
- projectName: z.string().optional(),
76
- endpoint: z.string().optional(),
77
- settings: z.lazy(() => SettingsSchema).optional(),
78
- functions: z.array(z.lazy(() => FunctionSchema)).optional(),
79
- sites: z.array(z.lazy(() => SiteSchema)).optional(),
80
- databases: z.array(z.lazy(() => DatabaseSchema)).optional(),
81
- collections: z.array(z.lazy(() => CollectionSchema)).optional(),
82
- tablesDB: z.array(z.lazy(() => DatabaseSchema)).optional(),
83
- tables: z.array(z.lazy(() => TablesDBSchema)).optional(),
84
- topics: z.array(z.lazy(() => TopicSchema)).optional(),
85
- teams: z.array(z.lazy(() => TeamSchema)).optional(),
86
- buckets: z.array(z.lazy(() => BucketSchema)).optional(),
87
- messages: z.array(z.lazy(() => MessageSchema)).optional(),
88
- })
89
- .strict();
90
-
91
74
  // ============================================================================
92
75
  // Project Settings
93
76
  // ============================================================================
@@ -206,7 +189,7 @@ const DatabaseSchema = z
206
189
  // Collections (legacy)
207
190
  // ============================================================================
208
191
 
209
- const AttributeSchemaBase = z
192
+ const AttributeSchema = z
210
193
  .object({
211
194
  key: z.string(),
212
195
  type: z.enum([
@@ -234,6 +217,7 @@ const AttributeSchemaBase = z
234
217
  .optional(),
235
218
  elements: z.array(z.string()).optional(),
236
219
  relatedCollection: z.string().optional(),
220
+ relatedTable: z.string().optional(),
237
221
  relationType: z.string().optional(),
238
222
  twoWay: z.boolean().optional(),
239
223
  twoWayKey: z.string().optional(),
@@ -243,34 +227,15 @@ const AttributeSchemaBase = z
243
227
  orders: z.array(z.string()).optional(),
244
228
  encrypt: z.boolean().optional(),
245
229
  })
246
- .strict();
247
-
248
- const AttributeSchema = AttributeSchemaBase.refine(
249
- (data) => {
250
- if (data.required === true && data.default !== null) {
251
- return false;
252
- }
253
- return true;
254
- },
255
- {
230
+ .strict()
231
+ .refine(validateRequiredDefault, {
256
232
  message: "When 'required' is true, 'default' must be null",
257
233
  path: ["default"],
258
- },
259
- ).refine(
260
- (data) => {
261
- if (
262
- data.type === "string" &&
263
- (data.size === undefined || data.size === null)
264
- ) {
265
- return false;
266
- }
267
- return true;
268
- },
269
- {
234
+ })
235
+ .refine(validateStringSize, {
270
236
  message: "When 'type' is 'string', 'size' must be defined",
271
237
  path: ["size"],
272
- },
273
- );
238
+ });
274
239
 
275
240
  const IndexSchema = z
276
241
  .object({
@@ -294,46 +259,60 @@ const CollectionSchema = z
294
259
  indexes: z.array(IndexSchema).optional(),
295
260
  })
296
261
  .strict()
297
- .superRefine((data, ctx) => {
298
- if (data.attributes && data.attributes.length > 0) {
299
- const seenKeys = new Set<string>();
300
-
301
- data.attributes.forEach((attr, index) => {
302
- if (seenKeys.has(attr.key)) {
303
- ctx.addIssue({
304
- code: z.ZodIssueCode.custom,
305
- message: `Attribute with the key '${attr.key}' already exists. Attribute keys must be unique, try again with a different key.`,
306
- path: ["attributes", index, "key"],
307
- });
308
- } else {
309
- seenKeys.add(attr.key);
310
- }
311
- });
312
- }
313
-
314
- if (data.indexes && data.indexes.length > 0) {
315
- const seenKeys = new Set<string>();
316
-
317
- data.indexes.forEach((index, indexPos) => {
318
- if (seenKeys.has(index.key)) {
319
- ctx.addIssue({
320
- code: z.ZodIssueCode.custom,
321
- message: `Index with the key '${index.key}' already exists. Index keys must be unique, try again with a different key.`,
322
- path: ["indexes", indexPos, "key"],
323
- });
324
- } else {
325
- seenKeys.add(index.key);
326
- }
327
- });
328
- }
329
- });
262
+ .superRefine(validateContainerDuplicates);
330
263
 
331
264
  // ============================================================================
332
265
  // Tables
333
266
  // ============================================================================
334
267
 
335
- const ColumnSchema = AttributeSchema;
336
- const ColumnSchemaBase = AttributeSchemaBase;
268
+ const ColumnSchema = z
269
+ .object({
270
+ key: z.string(),
271
+ type: z.enum([
272
+ "string",
273
+ "integer",
274
+ "double",
275
+ "boolean",
276
+ "datetime",
277
+ "relationship",
278
+ "linestring",
279
+ "point",
280
+ "polygon",
281
+ ]),
282
+ required: z.boolean().optional(),
283
+ array: z.boolean().optional(),
284
+ size: z.number().optional(),
285
+ default: z.any().optional(),
286
+ min: int64Schema,
287
+ max: int64Schema,
288
+ format: z
289
+ .union([
290
+ z.enum(["email", "enum", "url", "ip", "datetime"]),
291
+ z.literal(""),
292
+ ])
293
+ .optional(),
294
+ elements: z.array(z.string()).optional(),
295
+ // For tables, relationship uses relatedTable instead of relatedCollection
296
+ relatedTable: z.string().optional(),
297
+ relationType: z.string().optional(),
298
+ twoWay: z.boolean().optional(),
299
+ twoWayKey: z.string().optional(),
300
+ onDelete: z.string().optional(),
301
+ side: z.string().optional(),
302
+ // For table indexes, uses columns instead of attributes
303
+ columns: z.array(z.string()).optional(),
304
+ orders: z.array(z.string()).optional(),
305
+ encrypt: z.boolean().optional(),
306
+ })
307
+ .strict()
308
+ .refine(validateRequiredDefault, {
309
+ message: "When 'required' is true, 'default' must be null",
310
+ path: ["default"],
311
+ })
312
+ .refine(validateStringSize, {
313
+ message: "When 'type' is 'string', 'size' must be defined",
314
+ path: ["size"],
315
+ });
337
316
 
338
317
  const IndexTableSchema = z
339
318
  .object({
@@ -345,7 +324,7 @@ const IndexTableSchema = z
345
324
  })
346
325
  .strict();
347
326
 
348
- const TablesDBSchemaBase = z
327
+ const TableSchema = z
349
328
  .object({
350
329
  $id: z.string(),
351
330
  $permissions: z.array(z.string()).optional(),
@@ -356,41 +335,8 @@ const TablesDBSchemaBase = z
356
335
  columns: z.array(ColumnSchema).optional(),
357
336
  indexes: z.array(IndexTableSchema).optional(),
358
337
  })
359
- .strict();
360
-
361
- const TablesDBSchema = TablesDBSchemaBase.superRefine((data, ctx) => {
362
- if (data.columns && data.columns.length > 0) {
363
- const seenKeys = new Set<string>();
364
-
365
- data.columns.forEach((col, index) => {
366
- if (seenKeys.has(col.key)) {
367
- ctx.addIssue({
368
- code: z.ZodIssueCode.custom,
369
- message: `Column with the key '${col.key}' already exists. Column keys must be unique, try again with a different key.`,
370
- path: ["columns", index, "key"],
371
- });
372
- } else {
373
- seenKeys.add(col.key);
374
- }
375
- });
376
- }
377
-
378
- if (data.indexes && data.indexes.length > 0) {
379
- const seenKeys = new Set<string>();
380
-
381
- data.indexes.forEach((index, indexPos) => {
382
- if (seenKeys.has(index.key)) {
383
- ctx.addIssue({
384
- code: z.ZodIssueCode.custom,
385
- message: `Index with the key '${index.key}' already exists. Index keys must be unique, try again with a different key.`,
386
- path: ["indexes", indexPos, "key"],
387
- });
388
- } else {
389
- seenKeys.add(index.key);
390
- }
391
- });
392
- }
393
- });
338
+ .strict()
339
+ .superRefine(validateContainerDuplicates);
394
340
 
395
341
  // ============================================================================
396
342
  // Topics
@@ -450,7 +396,31 @@ const BucketSchema = z
450
396
  .strict();
451
397
 
452
398
  // ============================================================================
453
- // Type Exports (inferred from Zod schemas - single source of truth)
399
+ // Config Schema
400
+ // ============================================================================
401
+
402
+ const ConfigSchema = z
403
+ .object({
404
+ projectId: z.string(),
405
+ projectName: z.string().optional(),
406
+ endpoint: z.string().optional(),
407
+ settings: z.lazy(() => SettingsSchema).optional(),
408
+ functions: z.array(z.lazy(() => FunctionSchema)).optional(),
409
+ sites: z.array(z.lazy(() => SiteSchema)).optional(),
410
+ databases: z.array(z.lazy(() => DatabaseSchema)).optional(),
411
+ collections: z.array(z.lazy(() => CollectionSchema)).optional(),
412
+ tablesDB: z.array(z.lazy(() => DatabaseSchema)).optional(),
413
+ tables: z.array(z.lazy(() => TableSchema)).optional(),
414
+ topics: z.array(z.lazy(() => TopicSchema)).optional(),
415
+ teams: z.array(z.lazy(() => TeamSchema)).optional(),
416
+ buckets: z.array(z.lazy(() => BucketSchema)).optional(),
417
+ messages: z.array(z.lazy(() => MessageSchema)).optional(),
418
+ })
419
+ .strict()
420
+ .superRefine(validateCrossDatabase);
421
+
422
+ // ============================================================================
423
+ // Type Exports
454
424
  // ============================================================================
455
425
 
456
426
  export type ConfigType = z.infer<typeof ConfigSchema>;
@@ -461,7 +431,7 @@ export type DatabaseType = z.infer<typeof DatabaseSchema>;
461
431
  export type CollectionType = z.infer<typeof CollectionSchema>;
462
432
  export type AttributeType = z.infer<typeof AttributeSchema>;
463
433
  export type IndexType = z.infer<typeof IndexSchema>;
464
- export type TableType = z.infer<typeof TablesDBSchema>;
434
+ export type TableType = z.infer<typeof TableSchema>;
465
435
  export type ColumnType = z.infer<typeof ColumnSchema>;
466
436
  export type TableIndexType = z.infer<typeof IndexTableSchema>;
467
437
  export type TopicType = z.infer<typeof TopicSchema>;
@@ -474,6 +444,7 @@ export type BucketType = z.infer<typeof BucketSchema>;
474
444
  // ============================================================================
475
445
 
476
446
  export {
447
+ /** Config */
477
448
  ConfigSchema,
478
449
 
479
450
  /** Project Settings */
@@ -492,10 +463,8 @@ export {
492
463
  IndexSchema,
493
464
 
494
465
  /** Tables */
495
- TablesDBSchema,
496
- TablesDBSchemaBase,
466
+ TableSchema,
497
467
  ColumnSchema,
498
- ColumnSchemaBase,
499
468
  IndexTableSchema,
500
469
 
501
470
  /** Topics */