appwrite-utils-cli 0.10.85 → 1.0.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 (178) hide show
  1. package/.appwrite/.yaml_schemas/appwrite-config.schema.json +380 -0
  2. package/.appwrite/.yaml_schemas/collection.schema.json +255 -0
  3. package/.appwrite/collections/Categories.yaml +182 -0
  4. package/.appwrite/collections/ExampleCollection.yaml +36 -0
  5. package/.appwrite/collections/Posts.yaml +227 -0
  6. package/.appwrite/collections/Users.yaml +149 -0
  7. package/.appwrite/config.yaml +109 -0
  8. package/.appwrite/import/README.md +148 -0
  9. package/.appwrite/import/categories-import.yaml +129 -0
  10. package/.appwrite/import/posts-import.yaml +208 -0
  11. package/.appwrite/import/users-import.yaml +130 -0
  12. package/.appwrite/importData/categories.json +194 -0
  13. package/.appwrite/importData/posts.json +270 -0
  14. package/.appwrite/importData/users.json +220 -0
  15. package/.appwrite/schemas/categories.json +128 -0
  16. package/.appwrite/schemas/exampleCollection.json +52 -0
  17. package/.appwrite/schemas/posts.json +173 -0
  18. package/.appwrite/schemas/users.json +125 -0
  19. package/README.md +261 -33
  20. package/dist/collections/attributes.js +3 -2
  21. package/dist/collections/methods.js +56 -38
  22. package/dist/config/yamlConfig.d.ts +501 -0
  23. package/dist/config/yamlConfig.js +452 -0
  24. package/dist/databases/setup.d.ts +6 -0
  25. package/dist/databases/setup.js +119 -0
  26. package/dist/functions/methods.d.ts +1 -1
  27. package/dist/functions/methods.js +5 -2
  28. package/dist/functions/openapi.d.ts +4 -0
  29. package/dist/functions/openapi.js +60 -0
  30. package/dist/interactiveCLI.d.ts +5 -0
  31. package/dist/interactiveCLI.js +196 -52
  32. package/dist/main.js +91 -30
  33. package/dist/migrations/afterImportActions.js +2 -2
  34. package/dist/migrations/appwriteToX.d.ts +10 -0
  35. package/dist/migrations/appwriteToX.js +15 -4
  36. package/dist/migrations/backup.d.ts +16 -16
  37. package/dist/migrations/dataLoader.d.ts +83 -1
  38. package/dist/migrations/dataLoader.js +4 -4
  39. package/dist/migrations/importController.js +25 -18
  40. package/dist/migrations/importDataActions.js +2 -2
  41. package/dist/migrations/logging.d.ts +9 -1
  42. package/dist/migrations/logging.js +41 -22
  43. package/dist/migrations/migrationHelper.d.ts +4 -4
  44. package/dist/migrations/relationships.js +1 -1
  45. package/dist/migrations/services/DataTransformationService.d.ts +55 -0
  46. package/dist/migrations/services/DataTransformationService.js +158 -0
  47. package/dist/migrations/services/FileHandlerService.d.ts +75 -0
  48. package/dist/migrations/services/FileHandlerService.js +236 -0
  49. package/dist/migrations/services/ImportOrchestrator.d.ts +97 -0
  50. package/dist/migrations/services/ImportOrchestrator.js +488 -0
  51. package/dist/migrations/services/RateLimitManager.d.ts +138 -0
  52. package/dist/migrations/services/RateLimitManager.js +279 -0
  53. package/dist/migrations/services/RelationshipResolver.d.ts +120 -0
  54. package/dist/migrations/services/RelationshipResolver.js +332 -0
  55. package/dist/migrations/services/UserMappingService.d.ts +109 -0
  56. package/dist/migrations/services/UserMappingService.js +277 -0
  57. package/dist/migrations/services/ValidationService.d.ts +74 -0
  58. package/dist/migrations/services/ValidationService.js +260 -0
  59. package/dist/migrations/transfer.d.ts +0 -6
  60. package/dist/migrations/transfer.js +16 -132
  61. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +384 -0
  62. package/dist/migrations/yaml/YamlImportConfigLoader.js +375 -0
  63. package/dist/migrations/yaml/YamlImportIntegration.d.ts +87 -0
  64. package/dist/migrations/yaml/YamlImportIntegration.js +330 -0
  65. package/dist/migrations/yaml/generateImportSchemas.d.ts +17 -0
  66. package/dist/migrations/yaml/generateImportSchemas.js +575 -0
  67. package/dist/schemas/authUser.d.ts +9 -9
  68. package/dist/shared/attributeManager.d.ts +17 -0
  69. package/dist/shared/attributeManager.js +273 -0
  70. package/dist/shared/confirmationDialogs.d.ts +75 -0
  71. package/dist/shared/confirmationDialogs.js +236 -0
  72. package/dist/shared/functionManager.d.ts +48 -0
  73. package/dist/shared/functionManager.js +322 -0
  74. package/dist/shared/indexManager.d.ts +24 -0
  75. package/dist/shared/indexManager.js +150 -0
  76. package/dist/shared/jsonSchemaGenerator.d.ts +51 -0
  77. package/dist/shared/jsonSchemaGenerator.js +313 -0
  78. package/dist/shared/logging.d.ts +10 -0
  79. package/dist/shared/logging.js +46 -0
  80. package/dist/shared/messageFormatter.d.ts +37 -0
  81. package/dist/shared/messageFormatter.js +152 -0
  82. package/dist/shared/migrationHelpers.d.ts +173 -0
  83. package/dist/shared/migrationHelpers.js +142 -0
  84. package/dist/shared/operationLogger.d.ts +3 -0
  85. package/dist/shared/operationLogger.js +25 -0
  86. package/dist/shared/operationQueue.d.ts +13 -0
  87. package/dist/shared/operationQueue.js +79 -0
  88. package/dist/shared/progressManager.d.ts +62 -0
  89. package/dist/shared/progressManager.js +215 -0
  90. package/dist/shared/schemaGenerator.d.ts +18 -0
  91. package/dist/shared/schemaGenerator.js +523 -0
  92. package/dist/storage/methods.d.ts +3 -1
  93. package/dist/storage/methods.js +144 -55
  94. package/dist/storage/schemas.d.ts +56 -16
  95. package/dist/types.d.ts +2 -2
  96. package/dist/types.js +1 -1
  97. package/dist/users/methods.d.ts +16 -0
  98. package/dist/users/methods.js +276 -0
  99. package/dist/utils/configMigration.d.ts +1 -0
  100. package/dist/utils/configMigration.js +156 -0
  101. package/dist/utils/dataConverters.d.ts +46 -0
  102. package/dist/utils/dataConverters.js +139 -0
  103. package/dist/utils/loadConfigs.d.ts +15 -4
  104. package/dist/utils/loadConfigs.js +377 -51
  105. package/dist/utils/schemaStrings.js +2 -1
  106. package/dist/utils/setupFiles.d.ts +2 -1
  107. package/dist/utils/setupFiles.js +723 -28
  108. package/dist/utils/validationRules.d.ts +43 -0
  109. package/dist/utils/validationRules.js +42 -0
  110. package/dist/utils/yamlConverter.d.ts +48 -0
  111. package/dist/utils/yamlConverter.js +98 -0
  112. package/dist/utilsController.js +65 -43
  113. package/package.json +19 -15
  114. package/src/collections/attributes.ts +3 -2
  115. package/src/collections/methods.ts +85 -51
  116. package/src/config/yamlConfig.ts +488 -0
  117. package/src/{migrations/setupDatabase.ts → databases/setup.ts} +11 -5
  118. package/src/functions/methods.ts +8 -4
  119. package/src/functions/templates/count-docs-in-collection/package.json +25 -0
  120. package/src/functions/templates/count-docs-in-collection/tsconfig.json +28 -0
  121. package/src/functions/templates/typescript-node/package.json +24 -0
  122. package/src/functions/templates/typescript-node/tsconfig.json +28 -0
  123. package/src/functions/templates/uv/README.md +31 -0
  124. package/src/functions/templates/uv/pyproject.toml +29 -0
  125. package/src/interactiveCLI.ts +230 -63
  126. package/src/main.ts +111 -37
  127. package/src/migrations/afterImportActions.ts +2 -2
  128. package/src/migrations/appwriteToX.ts +17 -4
  129. package/src/migrations/dataLoader.ts +4 -4
  130. package/src/migrations/importController.ts +30 -22
  131. package/src/migrations/importDataActions.ts +2 -2
  132. package/src/migrations/relationships.ts +1 -1
  133. package/src/migrations/services/DataTransformationService.ts +196 -0
  134. package/src/migrations/services/FileHandlerService.ts +311 -0
  135. package/src/migrations/services/ImportOrchestrator.ts +669 -0
  136. package/src/migrations/services/RateLimitManager.ts +363 -0
  137. package/src/migrations/services/RelationshipResolver.ts +461 -0
  138. package/src/migrations/services/UserMappingService.ts +345 -0
  139. package/src/migrations/services/ValidationService.ts +349 -0
  140. package/src/migrations/transfer.ts +22 -228
  141. package/src/migrations/yaml/YamlImportConfigLoader.ts +427 -0
  142. package/src/migrations/yaml/YamlImportIntegration.ts +419 -0
  143. package/src/migrations/yaml/generateImportSchemas.ts +589 -0
  144. package/src/shared/attributeManager.ts +429 -0
  145. package/src/shared/confirmationDialogs.ts +327 -0
  146. package/src/shared/functionManager.ts +515 -0
  147. package/src/shared/indexManager.ts +253 -0
  148. package/src/shared/jsonSchemaGenerator.ts +403 -0
  149. package/src/shared/logging.ts +74 -0
  150. package/src/shared/messageFormatter.ts +195 -0
  151. package/src/{migrations/migrationHelper.ts → shared/migrationHelpers.ts} +22 -4
  152. package/src/{migrations/helper.ts → shared/operationLogger.ts} +7 -2
  153. package/src/{migrations/queue.ts → shared/operationQueue.ts} +1 -1
  154. package/src/shared/progressManager.ts +278 -0
  155. package/src/{migrations/schemaStrings.ts → shared/schemaGenerator.ts} +71 -17
  156. package/src/storage/methods.ts +199 -78
  157. package/src/types.ts +2 -2
  158. package/src/{migrations/users.ts → users/methods.ts} +2 -2
  159. package/src/utils/configMigration.ts +212 -0
  160. package/src/utils/loadConfigs.ts +414 -52
  161. package/src/utils/schemaStrings.ts +2 -1
  162. package/src/utils/setupFiles.ts +742 -40
  163. package/src/{migrations → utils}/validationRules.ts +1 -1
  164. package/src/utils/yamlConverter.ts +131 -0
  165. package/src/utilsController.ts +75 -54
  166. package/src/functions/templates/poetry/README.md +0 -30
  167. package/src/functions/templates/poetry/pyproject.toml +0 -16
  168. package/src/migrations/attributes.ts +0 -561
  169. package/src/migrations/backup.ts +0 -205
  170. package/src/migrations/databases.ts +0 -39
  171. package/src/migrations/dbHelpers.ts +0 -92
  172. package/src/migrations/indexes.ts +0 -40
  173. package/src/migrations/logging.ts +0 -29
  174. package/src/migrations/storage.ts +0 -538
  175. /package/src/{migrations → functions}/openapi.ts +0 -0
  176. /package/src/functions/templates/{poetry → uv}/src/__init__.py +0 -0
  177. /package/src/functions/templates/{poetry → uv}/src/index.py +0 -0
  178. /package/src/{migrations/converters.ts → utils/dataConverters.ts} +0 -0
@@ -0,0 +1,380 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://appwrite-utils.dev/schemas/appwrite-config.schema.json",
4
+ "title": "Appwrite Configuration",
5
+ "description": "Schema for Appwrite project configuration in YAML",
6
+ "type": "object",
7
+ "properties": {
8
+ "appwrite": {
9
+ "type": "object",
10
+ "description": "Appwrite connection settings",
11
+ "properties": {
12
+ "endpoint": {
13
+ "type": "string",
14
+ "default": "https://cloud.appwrite.io/v1",
15
+ "description": "Appwrite server endpoint URL"
16
+ },
17
+ "project": {
18
+ "type": "string",
19
+ "description": "Appwrite project ID"
20
+ },
21
+ "key": {
22
+ "type": "string",
23
+ "description": "Appwrite API key with appropriate permissions"
24
+ }
25
+ },
26
+ "required": [
27
+ "project",
28
+ "key"
29
+ ],
30
+ "additionalProperties": false
31
+ },
32
+ "logging": {
33
+ "type": "object",
34
+ "description": "Logging configuration",
35
+ "properties": {
36
+ "enabled": {
37
+ "type": "boolean",
38
+ "default": false,
39
+ "description": "Enable file logging"
40
+ },
41
+ "level": {
42
+ "type": "string",
43
+ "enum": [
44
+ "error",
45
+ "warn",
46
+ "info",
47
+ "debug"
48
+ ],
49
+ "default": "info",
50
+ "description": "Logging level"
51
+ },
52
+ "directory": {
53
+ "type": "string",
54
+ "description": "Custom log directory path (optional)"
55
+ },
56
+ "console": {
57
+ "type": "boolean",
58
+ "default": false,
59
+ "description": "Enable console logging"
60
+ }
61
+ },
62
+ "additionalProperties": false
63
+ },
64
+ "backups": {
65
+ "type": "object",
66
+ "description": "Backup configuration",
67
+ "properties": {
68
+ "enabled": {
69
+ "type": "boolean",
70
+ "default": true,
71
+ "description": "Enable automatic backups"
72
+ },
73
+ "interval": {
74
+ "type": "number",
75
+ "default": 3600,
76
+ "description": "Backup interval in seconds"
77
+ },
78
+ "retention": {
79
+ "type": "number",
80
+ "default": 30,
81
+ "description": "Backup retention in days"
82
+ },
83
+ "cleanup": {
84
+ "type": "boolean",
85
+ "default": true,
86
+ "description": "Enable automatic backup cleanup"
87
+ }
88
+ },
89
+ "additionalProperties": false
90
+ },
91
+ "data": {
92
+ "type": "object",
93
+ "description": "Data management settings",
94
+ "properties": {
95
+ "enableMockData": {
96
+ "type": "boolean",
97
+ "default": false,
98
+ "description": "Enable mock data generation"
99
+ },
100
+ "documentBucketId": {
101
+ "type": "string",
102
+ "default": "documents",
103
+ "description": "Default bucket ID for document attachments"
104
+ },
105
+ "usersCollectionName": {
106
+ "type": "string",
107
+ "default": "Members",
108
+ "description": "Name of the users/members collection"
109
+ },
110
+ "importDirectory": {
111
+ "type": "string",
112
+ "default": "importData",
113
+ "description": "Directory containing import data files"
114
+ }
115
+ },
116
+ "additionalProperties": false
117
+ },
118
+ "schemas": {
119
+ "type": "object",
120
+ "description": "Schema generation settings",
121
+ "properties": {
122
+ "outputDirectory": {
123
+ "type": "string",
124
+ "default": "schemas",
125
+ "description": "Directory where generated schemas are saved"
126
+ },
127
+ "yamlSchemaDirectory": {
128
+ "type": "string",
129
+ "default": ".yaml_schemas",
130
+ "description": "Directory containing YAML validation schemas"
131
+ }
132
+ },
133
+ "additionalProperties": false
134
+ },
135
+ "migrations": {
136
+ "type": "object",
137
+ "description": "Migration settings",
138
+ "properties": {
139
+ "enabled": {
140
+ "type": "boolean",
141
+ "default": true,
142
+ "description": "Enable migration tracking database"
143
+ }
144
+ },
145
+ "additionalProperties": false
146
+ },
147
+ "databases": {
148
+ "type": "array",
149
+ "description": "Database configurations",
150
+ "items": {
151
+ "type": "object",
152
+ "properties": {
153
+ "id": {
154
+ "type": "string",
155
+ "description": "Database ID",
156
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,35}$"
157
+ },
158
+ "name": {
159
+ "type": "string",
160
+ "description": "Database display name"
161
+ },
162
+ "bucket": {
163
+ "type": "object",
164
+ "description": "Associated storage bucket",
165
+ "properties": {
166
+ "id": {
167
+ "type": "string",
168
+ "description": "Bucket ID"
169
+ },
170
+ "name": {
171
+ "type": "string",
172
+ "description": "Bucket display name"
173
+ },
174
+ "permissions": {
175
+ "type": "array",
176
+ "items": {
177
+ "type": "string"
178
+ },
179
+ "description": "Bucket permissions"
180
+ },
181
+ "fileSecurity": {
182
+ "type": "boolean",
183
+ "description": "Enable file-level security"
184
+ },
185
+ "enabled": {
186
+ "type": "boolean",
187
+ "default": true,
188
+ "description": "Enable the bucket"
189
+ },
190
+ "maximumFileSize": {
191
+ "type": "number",
192
+ "default": 30000000,
193
+ "description": "Maximum file size in bytes"
194
+ },
195
+ "allowedFileExtensions": {
196
+ "type": "array",
197
+ "items": {
198
+ "type": "string"
199
+ },
200
+ "description": "Allowed file extensions (empty = all allowed)"
201
+ },
202
+ "compression": {
203
+ "type": "string",
204
+ "enum": [
205
+ "none",
206
+ "gzip",
207
+ "zstd"
208
+ ],
209
+ "default": "none",
210
+ "description": "Compression algorithm"
211
+ },
212
+ "encryption": {
213
+ "type": "boolean",
214
+ "default": false,
215
+ "description": "Enable file encryption"
216
+ },
217
+ "antivirus": {
218
+ "type": "boolean",
219
+ "default": false,
220
+ "description": "Enable antivirus scanning"
221
+ }
222
+ },
223
+ "required": [
224
+ "id",
225
+ "name"
226
+ ],
227
+ "additionalProperties": false
228
+ }
229
+ },
230
+ "required": [
231
+ "id",
232
+ "name"
233
+ ],
234
+ "additionalProperties": false
235
+ }
236
+ },
237
+ "buckets": {
238
+ "type": "array",
239
+ "description": "Global storage buckets",
240
+ "items": {
241
+ "type": "object",
242
+ "properties": {
243
+ "id": {
244
+ "type": "string",
245
+ "description": "Bucket ID"
246
+ },
247
+ "name": {
248
+ "type": "string",
249
+ "description": "Bucket display name"
250
+ },
251
+ "permissions": {
252
+ "type": "array",
253
+ "items": {
254
+ "type": "string"
255
+ },
256
+ "description": "Bucket permissions"
257
+ },
258
+ "fileSecurity": {
259
+ "type": "boolean",
260
+ "description": "Enable file-level security"
261
+ },
262
+ "enabled": {
263
+ "type": "boolean",
264
+ "default": true,
265
+ "description": "Enable the bucket"
266
+ },
267
+ "maximumFileSize": {
268
+ "type": "number",
269
+ "default": 30000000,
270
+ "description": "Maximum file size in bytes"
271
+ },
272
+ "allowedFileExtensions": {
273
+ "type": "array",
274
+ "items": {
275
+ "type": "string"
276
+ },
277
+ "description": "Allowed file extensions (empty = all allowed)"
278
+ },
279
+ "compression": {
280
+ "type": "string",
281
+ "enum": [
282
+ "none",
283
+ "gzip",
284
+ "zstd"
285
+ ],
286
+ "default": "none",
287
+ "description": "Compression algorithm"
288
+ },
289
+ "encryption": {
290
+ "type": "boolean",
291
+ "default": false,
292
+ "description": "Enable file encryption"
293
+ },
294
+ "antivirus": {
295
+ "type": "boolean",
296
+ "default": false,
297
+ "description": "Enable antivirus scanning"
298
+ }
299
+ },
300
+ "required": [
301
+ "id",
302
+ "name"
303
+ ],
304
+ "additionalProperties": false
305
+ }
306
+ },
307
+ "functions": {
308
+ "type": "array",
309
+ "description": "Appwrite Functions",
310
+ "items": {
311
+ "type": "object",
312
+ "properties": {
313
+ "id": {
314
+ "type": "string",
315
+ "description": "Function ID"
316
+ },
317
+ "name": {
318
+ "type": "string",
319
+ "description": "Function name"
320
+ },
321
+ "runtime": {
322
+ "type": "string",
323
+ "description": "Runtime environment"
324
+ },
325
+ "execute": {
326
+ "type": "array",
327
+ "items": {
328
+ "type": "string"
329
+ },
330
+ "description": "Execution permissions"
331
+ },
332
+ "events": {
333
+ "type": "array",
334
+ "items": {
335
+ "type": "string"
336
+ },
337
+ "description": "Event triggers"
338
+ },
339
+ "schedule": {
340
+ "type": "string",
341
+ "description": "Cron schedule"
342
+ },
343
+ "timeout": {
344
+ "type": "number",
345
+ "default": 15,
346
+ "description": "Execution timeout in seconds"
347
+ },
348
+ "enabled": {
349
+ "type": "boolean",
350
+ "default": true,
351
+ "description": "Enable the function"
352
+ },
353
+ "logging": {
354
+ "type": "boolean",
355
+ "default": true,
356
+ "description": "Enable function logging"
357
+ },
358
+ "entrypoint": {
359
+ "type": "string",
360
+ "description": "Function entrypoint file"
361
+ },
362
+ "commands": {
363
+ "type": "string",
364
+ "description": "Build commands"
365
+ }
366
+ },
367
+ "required": [
368
+ "id",
369
+ "name",
370
+ "runtime"
371
+ ],
372
+ "additionalProperties": false
373
+ }
374
+ }
375
+ },
376
+ "required": [
377
+ "appwrite"
378
+ ],
379
+ "additionalProperties": false
380
+ }
@@ -0,0 +1,255 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://appwrite-utils.dev/schemas/collection.schema.json",
4
+ "title": "Appwrite Collection Definition",
5
+ "description": "Schema for defining Appwrite collections in YAML",
6
+ "type": "object",
7
+ "properties": {
8
+ "name": {
9
+ "type": "string",
10
+ "description": "The name of the collection"
11
+ },
12
+ "id": {
13
+ "type": "string",
14
+ "description": "The ID of the collection (optional, auto-generated if not provided)",
15
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,35}$"
16
+ },
17
+ "documentSecurity": {
18
+ "type": "boolean",
19
+ "default": false,
20
+ "description": "Enable document-level permissions"
21
+ },
22
+ "enabled": {
23
+ "type": "boolean",
24
+ "default": true,
25
+ "description": "Whether the collection is enabled"
26
+ },
27
+ "permissions": {
28
+ "type": "array",
29
+ "description": "Collection-level permissions",
30
+ "items": {
31
+ "type": "object",
32
+ "properties": {
33
+ "permission": {
34
+ "type": "string",
35
+ "enum": [
36
+ "read",
37
+ "create",
38
+ "update",
39
+ "delete"
40
+ ],
41
+ "description": "The permission type"
42
+ },
43
+ "target": {
44
+ "type": "string",
45
+ "description": "Permission target (e.g., 'any', 'users', 'users/verified', 'label:admin')"
46
+ }
47
+ },
48
+ "required": [
49
+ "permission",
50
+ "target"
51
+ ],
52
+ "additionalProperties": false
53
+ }
54
+ },
55
+ "attributes": {
56
+ "type": "array",
57
+ "description": "Collection attributes (fields)",
58
+ "items": {
59
+ "type": "object",
60
+ "properties": {
61
+ "key": {
62
+ "type": "string",
63
+ "description": "Attribute name",
64
+ "pattern": "^[a-zA-Z][a-zA-Z0-9]*$"
65
+ },
66
+ "type": {
67
+ "type": "string",
68
+ "enum": [
69
+ "string",
70
+ "integer",
71
+ "float",
72
+ "boolean",
73
+ "datetime",
74
+ "email",
75
+ "ip",
76
+ "url",
77
+ "enum",
78
+ "relationship"
79
+ ],
80
+ "description": "Attribute data type"
81
+ },
82
+ "size": {
83
+ "type": "number",
84
+ "description": "Maximum size for string attributes",
85
+ "minimum": 1,
86
+ "maximum": 1073741824
87
+ },
88
+ "required": {
89
+ "type": "boolean",
90
+ "default": false,
91
+ "description": "Whether the attribute is required"
92
+ },
93
+ "array": {
94
+ "type": "boolean",
95
+ "default": false,
96
+ "description": "Whether the attribute is an array"
97
+ },
98
+ "default": {
99
+ "description": "Default value for the attribute"
100
+ },
101
+ "description": {
102
+ "type": "string",
103
+ "description": "Attribute description"
104
+ },
105
+ "min": {
106
+ "type": "number",
107
+ "description": "Minimum value for numeric attributes"
108
+ },
109
+ "max": {
110
+ "type": "number",
111
+ "description": "Maximum value for numeric attributes"
112
+ },
113
+ "elements": {
114
+ "type": "array",
115
+ "items": {
116
+ "type": "string"
117
+ },
118
+ "description": "Allowed values for enum attributes"
119
+ },
120
+ "relatedCollection": {
121
+ "type": "string",
122
+ "description": "Related collection name for relationship attributes"
123
+ },
124
+ "relationType": {
125
+ "type": "string",
126
+ "enum": [
127
+ "oneToOne",
128
+ "oneToMany",
129
+ "manyToOne",
130
+ "manyToMany"
131
+ ],
132
+ "description": "Type of relationship"
133
+ },
134
+ "twoWay": {
135
+ "type": "boolean",
136
+ "description": "Whether the relationship is bidirectional"
137
+ },
138
+ "twoWayKey": {
139
+ "type": "string",
140
+ "description": "Key name for the reverse relationship"
141
+ },
142
+ "onDelete": {
143
+ "type": "string",
144
+ "enum": [
145
+ "cascade",
146
+ "restrict",
147
+ "setNull"
148
+ ],
149
+ "description": "Action to take when related document is deleted"
150
+ },
151
+ "side": {
152
+ "type": "string",
153
+ "enum": [
154
+ "parent",
155
+ "child"
156
+ ],
157
+ "description": "Side of the relationship"
158
+ }
159
+ },
160
+ "required": [
161
+ "key",
162
+ "type"
163
+ ],
164
+ "additionalProperties": false,
165
+ "allOf": [
166
+ {
167
+ "if": {
168
+ "properties": {
169
+ "type": {
170
+ "const": "enum"
171
+ }
172
+ }
173
+ },
174
+ "then": {
175
+ "required": [
176
+ "elements"
177
+ ]
178
+ }
179
+ },
180
+ {
181
+ "if": {
182
+ "properties": {
183
+ "type": {
184
+ "const": "relationship"
185
+ }
186
+ }
187
+ },
188
+ "then": {
189
+ "required": [
190
+ "relatedCollection",
191
+ "relationType"
192
+ ]
193
+ }
194
+ }
195
+ ]
196
+ }
197
+ },
198
+ "indexes": {
199
+ "type": "array",
200
+ "description": "Database indexes for the collection",
201
+ "items": {
202
+ "type": "object",
203
+ "properties": {
204
+ "key": {
205
+ "type": "string",
206
+ "description": "Index name"
207
+ },
208
+ "type": {
209
+ "type": "string",
210
+ "enum": [
211
+ "key",
212
+ "fulltext",
213
+ "unique"
214
+ ],
215
+ "description": "Index type"
216
+ },
217
+ "attributes": {
218
+ "type": "array",
219
+ "items": {
220
+ "type": "string"
221
+ },
222
+ "description": "Attributes to index",
223
+ "minItems": 1
224
+ },
225
+ "orders": {
226
+ "type": "array",
227
+ "items": {
228
+ "type": "string",
229
+ "enum": [
230
+ "ASC",
231
+ "DESC"
232
+ ]
233
+ },
234
+ "description": "Sort order for each attribute"
235
+ }
236
+ },
237
+ "required": [
238
+ "key",
239
+ "type",
240
+ "attributes"
241
+ ],
242
+ "additionalProperties": false
243
+ }
244
+ },
245
+ "importDefs": {
246
+ "type": "array",
247
+ "description": "Import definitions for data migration",
248
+ "default": []
249
+ }
250
+ },
251
+ "required": [
252
+ "name"
253
+ ],
254
+ "additionalProperties": false
255
+ }