appwrite-utils-cli 1.5.1 → 1.6.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.
Files changed (233) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/README.md +251 -29
  3. package/dist/adapters/AdapterFactory.d.ts +10 -3
  4. package/dist/adapters/AdapterFactory.js +213 -17
  5. package/dist/adapters/TablesDBAdapter.js +60 -17
  6. package/dist/backups/operations/bucketBackup.d.ts +19 -0
  7. package/dist/backups/operations/bucketBackup.js +197 -0
  8. package/dist/backups/operations/collectionBackup.d.ts +30 -0
  9. package/dist/backups/operations/collectionBackup.js +201 -0
  10. package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
  11. package/dist/backups/operations/comprehensiveBackup.js +238 -0
  12. package/dist/backups/schemas/bucketManifest.d.ts +93 -0
  13. package/dist/backups/schemas/bucketManifest.js +33 -0
  14. package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
  15. package/dist/backups/schemas/comprehensiveManifest.js +32 -0
  16. package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
  17. package/dist/backups/tracking/centralizedTracking.js +274 -0
  18. package/dist/cli/commands/configCommands.d.ts +8 -0
  19. package/dist/cli/commands/configCommands.js +160 -0
  20. package/dist/cli/commands/databaseCommands.d.ts +13 -0
  21. package/dist/cli/commands/databaseCommands.js +478 -0
  22. package/dist/cli/commands/functionCommands.d.ts +7 -0
  23. package/dist/cli/commands/functionCommands.js +289 -0
  24. package/dist/cli/commands/schemaCommands.d.ts +7 -0
  25. package/dist/cli/commands/schemaCommands.js +134 -0
  26. package/dist/cli/commands/transferCommands.d.ts +5 -0
  27. package/dist/cli/commands/transferCommands.js +384 -0
  28. package/dist/collections/attributes.d.ts +5 -4
  29. package/dist/collections/attributes.js +539 -246
  30. package/dist/collections/indexes.js +39 -37
  31. package/dist/collections/methods.d.ts +2 -16
  32. package/dist/collections/methods.js +90 -538
  33. package/dist/collections/transferOperations.d.ts +7 -0
  34. package/dist/collections/transferOperations.js +331 -0
  35. package/dist/collections/wipeOperations.d.ts +16 -0
  36. package/dist/collections/wipeOperations.js +328 -0
  37. package/dist/config/configMigration.d.ts +87 -0
  38. package/dist/config/configMigration.js +390 -0
  39. package/dist/config/configValidation.d.ts +66 -0
  40. package/dist/config/configValidation.js +358 -0
  41. package/dist/config/yamlConfig.d.ts +455 -1
  42. package/dist/config/yamlConfig.js +145 -52
  43. package/dist/databases/methods.js +3 -2
  44. package/dist/databases/setup.d.ts +1 -2
  45. package/dist/databases/setup.js +9 -87
  46. package/dist/examples/yamlTerminologyExample.d.ts +42 -0
  47. package/dist/examples/yamlTerminologyExample.js +269 -0
  48. package/dist/functions/deployments.js +11 -10
  49. package/dist/functions/methods.d.ts +1 -1
  50. package/dist/functions/methods.js +5 -4
  51. package/dist/init.js +9 -9
  52. package/dist/interactiveCLI.d.ts +8 -17
  53. package/dist/interactiveCLI.js +186 -1171
  54. package/dist/main.js +364 -21
  55. package/dist/migrations/afterImportActions.js +22 -30
  56. package/dist/migrations/appwriteToX.js +71 -25
  57. package/dist/migrations/dataLoader.js +35 -26
  58. package/dist/migrations/importController.js +29 -30
  59. package/dist/migrations/relationships.js +13 -12
  60. package/dist/migrations/services/ImportOrchestrator.js +16 -19
  61. package/dist/migrations/transfer.js +46 -46
  62. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +3 -1
  63. package/dist/migrations/yaml/YamlImportConfigLoader.js +6 -3
  64. package/dist/migrations/yaml/YamlImportIntegration.d.ts +9 -3
  65. package/dist/migrations/yaml/YamlImportIntegration.js +22 -11
  66. package/dist/migrations/yaml/generateImportSchemas.d.ts +14 -1
  67. package/dist/migrations/yaml/generateImportSchemas.js +736 -7
  68. package/dist/schemas/authUser.d.ts +1 -1
  69. package/dist/setupController.js +3 -2
  70. package/dist/shared/backupMetadataSchema.d.ts +94 -0
  71. package/dist/shared/backupMetadataSchema.js +38 -0
  72. package/dist/shared/backupTracking.d.ts +18 -0
  73. package/dist/shared/backupTracking.js +176 -0
  74. package/dist/shared/confirmationDialogs.js +15 -15
  75. package/dist/shared/errorUtils.d.ts +54 -0
  76. package/dist/shared/errorUtils.js +95 -0
  77. package/dist/shared/functionManager.js +20 -19
  78. package/dist/shared/indexManager.js +12 -11
  79. package/dist/shared/jsonSchemaGenerator.js +10 -26
  80. package/dist/shared/logging.d.ts +51 -0
  81. package/dist/shared/logging.js +70 -0
  82. package/dist/shared/messageFormatter.d.ts +2 -0
  83. package/dist/shared/messageFormatter.js +10 -0
  84. package/dist/shared/migrationHelpers.d.ts +6 -16
  85. package/dist/shared/migrationHelpers.js +24 -21
  86. package/dist/shared/operationLogger.d.ts +8 -1
  87. package/dist/shared/operationLogger.js +11 -24
  88. package/dist/shared/operationQueue.d.ts +28 -1
  89. package/dist/shared/operationQueue.js +268 -66
  90. package/dist/shared/operationsTable.d.ts +26 -0
  91. package/dist/shared/operationsTable.js +286 -0
  92. package/dist/shared/operationsTableSchema.d.ts +48 -0
  93. package/dist/shared/operationsTableSchema.js +35 -0
  94. package/dist/shared/relationshipExtractor.d.ts +56 -0
  95. package/dist/shared/relationshipExtractor.js +138 -0
  96. package/dist/shared/schemaGenerator.d.ts +19 -1
  97. package/dist/shared/schemaGenerator.js +56 -75
  98. package/dist/storage/backupCompression.d.ts +20 -0
  99. package/dist/storage/backupCompression.js +67 -0
  100. package/dist/storage/methods.d.ts +16 -2
  101. package/dist/storage/methods.js +98 -14
  102. package/dist/users/methods.js +9 -8
  103. package/dist/utils/configDiscovery.d.ts +78 -0
  104. package/dist/utils/configDiscovery.js +430 -0
  105. package/dist/utils/directoryUtils.d.ts +22 -0
  106. package/dist/utils/directoryUtils.js +59 -0
  107. package/dist/utils/getClientFromConfig.d.ts +17 -8
  108. package/dist/utils/getClientFromConfig.js +162 -17
  109. package/dist/utils/helperFunctions.d.ts +16 -2
  110. package/dist/utils/helperFunctions.js +19 -5
  111. package/dist/utils/loadConfigs.d.ts +34 -9
  112. package/dist/utils/loadConfigs.js +236 -316
  113. package/dist/utils/pathResolvers.d.ts +53 -0
  114. package/dist/utils/pathResolvers.js +72 -0
  115. package/dist/utils/projectConfig.d.ts +119 -0
  116. package/dist/utils/projectConfig.js +171 -0
  117. package/dist/utils/retryFailedPromises.js +4 -2
  118. package/dist/utils/sessionAuth.d.ts +48 -0
  119. package/dist/utils/sessionAuth.js +164 -0
  120. package/dist/utils/sessionPreservationExample.d.ts +1666 -0
  121. package/dist/utils/sessionPreservationExample.js +101 -0
  122. package/dist/utils/setupFiles.js +301 -41
  123. package/dist/utils/typeGuards.d.ts +35 -0
  124. package/dist/utils/typeGuards.js +57 -0
  125. package/dist/utils/versionDetection.js +145 -9
  126. package/dist/utils/yamlConverter.d.ts +53 -3
  127. package/dist/utils/yamlConverter.js +232 -13
  128. package/dist/utils/yamlLoader.d.ts +70 -0
  129. package/dist/utils/yamlLoader.js +263 -0
  130. package/dist/utilsController.d.ts +36 -3
  131. package/dist/utilsController.js +186 -56
  132. package/package.json +12 -2
  133. package/src/adapters/AdapterFactory.ts +263 -35
  134. package/src/adapters/TablesDBAdapter.ts +225 -36
  135. package/src/backups/operations/bucketBackup.ts +277 -0
  136. package/src/backups/operations/collectionBackup.ts +310 -0
  137. package/src/backups/operations/comprehensiveBackup.ts +342 -0
  138. package/src/backups/schemas/bucketManifest.ts +78 -0
  139. package/src/backups/schemas/comprehensiveManifest.ts +76 -0
  140. package/src/backups/tracking/centralizedTracking.ts +352 -0
  141. package/src/cli/commands/configCommands.ts +194 -0
  142. package/src/cli/commands/databaseCommands.ts +635 -0
  143. package/src/cli/commands/functionCommands.ts +379 -0
  144. package/src/cli/commands/schemaCommands.ts +163 -0
  145. package/src/cli/commands/transferCommands.ts +457 -0
  146. package/src/collections/attributes.ts +900 -621
  147. package/src/collections/attributes.ts.backup +1555 -0
  148. package/src/collections/indexes.ts +116 -114
  149. package/src/collections/methods.ts +295 -968
  150. package/src/collections/transferOperations.ts +516 -0
  151. package/src/collections/wipeOperations.ts +501 -0
  152. package/src/config/README.md +274 -0
  153. package/src/config/configMigration.ts +575 -0
  154. package/src/config/configValidation.ts +445 -0
  155. package/src/config/yamlConfig.ts +168 -55
  156. package/src/databases/methods.ts +3 -2
  157. package/src/databases/setup.ts +11 -138
  158. package/src/examples/yamlTerminologyExample.ts +341 -0
  159. package/src/functions/deployments.ts +14 -12
  160. package/src/functions/methods.ts +11 -11
  161. package/src/functions/templates/hono-typescript/README.md +286 -0
  162. package/src/functions/templates/hono-typescript/package.json +26 -0
  163. package/src/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
  164. package/src/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
  165. package/src/functions/templates/hono-typescript/src/app.ts +180 -0
  166. package/src/functions/templates/hono-typescript/src/context.ts +103 -0
  167. package/src/functions/templates/hono-typescript/src/index.ts +54 -0
  168. package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
  169. package/src/functions/templates/hono-typescript/tsconfig.json +20 -0
  170. package/src/functions/templates/typescript-node/package.json +2 -1
  171. package/src/functions/templates/typescript-node/src/context.ts +103 -0
  172. package/src/functions/templates/typescript-node/src/index.ts +18 -12
  173. package/src/functions/templates/uv/pyproject.toml +1 -0
  174. package/src/functions/templates/uv/src/context.py +125 -0
  175. package/src/functions/templates/uv/src/index.py +35 -5
  176. package/src/init.ts +9 -11
  177. package/src/interactiveCLI.ts +276 -1591
  178. package/src/main.ts +418 -24
  179. package/src/migrations/afterImportActions.ts +71 -44
  180. package/src/migrations/appwriteToX.ts +100 -34
  181. package/src/migrations/dataLoader.ts +48 -34
  182. package/src/migrations/importController.ts +44 -39
  183. package/src/migrations/relationships.ts +28 -18
  184. package/src/migrations/services/ImportOrchestrator.ts +24 -27
  185. package/src/migrations/transfer.ts +159 -121
  186. package/src/migrations/yaml/YamlImportConfigLoader.ts +11 -4
  187. package/src/migrations/yaml/YamlImportIntegration.ts +47 -20
  188. package/src/migrations/yaml/generateImportSchemas.ts +751 -12
  189. package/src/setupController.ts +3 -2
  190. package/src/shared/backupMetadataSchema.ts +93 -0
  191. package/src/shared/backupTracking.ts +211 -0
  192. package/src/shared/confirmationDialogs.ts +19 -19
  193. package/src/shared/errorUtils.ts +110 -0
  194. package/src/shared/functionManager.ts +21 -20
  195. package/src/shared/indexManager.ts +12 -11
  196. package/src/shared/jsonSchemaGenerator.ts +38 -52
  197. package/src/shared/logging.ts +75 -0
  198. package/src/shared/messageFormatter.ts +14 -1
  199. package/src/shared/migrationHelpers.ts +45 -38
  200. package/src/shared/operationLogger.ts +11 -36
  201. package/src/shared/operationQueue.ts +322 -93
  202. package/src/shared/operationsTable.ts +338 -0
  203. package/src/shared/operationsTableSchema.ts +60 -0
  204. package/src/shared/relationshipExtractor.ts +214 -0
  205. package/src/shared/schemaGenerator.ts +179 -219
  206. package/src/storage/backupCompression.ts +88 -0
  207. package/src/storage/methods.ts +131 -34
  208. package/src/users/methods.ts +11 -9
  209. package/src/utils/configDiscovery.ts +502 -0
  210. package/src/utils/directoryUtils.ts +61 -0
  211. package/src/utils/getClientFromConfig.ts +205 -22
  212. package/src/utils/helperFunctions.ts +23 -5
  213. package/src/utils/loadConfigs.ts +313 -345
  214. package/src/utils/pathResolvers.ts +81 -0
  215. package/src/utils/projectConfig.ts +299 -0
  216. package/src/utils/retryFailedPromises.ts +4 -2
  217. package/src/utils/sessionAuth.ts +230 -0
  218. package/src/utils/setupFiles.ts +322 -54
  219. package/src/utils/typeGuards.ts +65 -0
  220. package/src/utils/versionDetection.ts +218 -64
  221. package/src/utils/yamlConverter.ts +296 -13
  222. package/src/utils/yamlLoader.ts +364 -0
  223. package/src/utilsController.ts +314 -110
  224. package/tests/README.md +497 -0
  225. package/tests/adapters/AdapterFactory.test.ts +277 -0
  226. package/tests/integration/syncOperations.test.ts +463 -0
  227. package/tests/jest.config.js +25 -0
  228. package/tests/migration/configMigration.test.ts +546 -0
  229. package/tests/setup.ts +62 -0
  230. package/tests/testUtils.ts +340 -0
  231. package/tests/utils/loadConfigs.test.ts +350 -0
  232. package/tests/validation/configValidation.test.ts +412 -0
  233. package/src/utils/schemaStrings.ts +0 -517
@@ -0,0 +1,274 @@
1
+ # Configuration Validation & Migration Utilities
2
+
3
+ This module provides comprehensive validation and migration utilities for the enhanced collections/tables dual config schema in appwrite-utils-cli.
4
+
5
+ ## Features
6
+
7
+ ### Configuration Validation
8
+ - **Naming Conflict Detection**: Detects conflicts between collections and tables
9
+ - **Database Reference Validation**: Validates database ID references
10
+ - **Schema Consistency Checks**: Ensures internal consistency and best practices
11
+ - **Strict Mode**: Option to treat warnings as errors for CI/CD pipelines
12
+
13
+ ### Migration Utilities
14
+ - **Collections to Tables Migration**: Convert collections to tables format for TablesDB API compatibility
15
+ - **Multiple Migration Strategies**: Full migration, dual format, incremental, and tables-only
16
+ - **Migration Planning**: Analyze changes before execution
17
+ - **Backup Support**: Automatic backup creation during migration
18
+ - **Validation Integration**: Validate results after migration
19
+
20
+ ## Usage
21
+
22
+ ### CLI Commands
23
+
24
+ #### Validate Configuration
25
+ ```bash
26
+ # Basic validation
27
+ npx appwrite-migrate --validate
28
+
29
+ # Strict validation (warnings become errors)
30
+ npx appwrite-migrate --validate-strict
31
+
32
+ # Migrate collections to tables
33
+ npx appwrite-migrate --migrate-collections-to-tables
34
+ ```
35
+
36
+ #### Interactive CLI
37
+ ```bash
38
+ # Launch interactive mode
39
+ npx appwrite-migrate --it
40
+
41
+ # Select from menu:
42
+ # ✅ Validate configuration (collections/tables conflicts)
43
+ # 🔀 Migrate collections to tables format
44
+ ```
45
+
46
+ ### Programmatic Usage
47
+
48
+ #### Configuration Validation
49
+
50
+ ```typescript
51
+ import { validateCollectionsTablesConfig, reportValidationResults } from "./configValidation.js";
52
+ import { loadConfig } from "../utils/loadConfigs.js";
53
+
54
+ // Load and validate configuration
55
+ const config = await loadConfig(".", { validate: true, reportValidation: true });
56
+
57
+ // Manual validation
58
+ const validation = validateCollectionsTablesConfig(config);
59
+ reportValidationResults(validation, { verbose: true });
60
+
61
+ if (!validation.isValid) {
62
+ console.error(`Found ${validation.errors.length} validation errors`);
63
+ process.exit(1);
64
+ }
65
+ ```
66
+
67
+ #### Collections to Tables Migration
68
+
69
+ ```typescript
70
+ import {
71
+ createMigrationPlan,
72
+ executeMigrationPlan,
73
+ migrateCollectionsToTables
74
+ } from "./configMigration.js";
75
+
76
+ // Simple migration
77
+ const result = migrateCollectionsToTables(config, {
78
+ strategy: "full_migration",
79
+ validateResult: true,
80
+ dryRun: false
81
+ });
82
+
83
+ // Advanced migration with planning
84
+ const plan = createMigrationPlan(config, "dual_format");
85
+ console.log(`Will migrate ${plan.collectionsToMigrate.length} collections`);
86
+
87
+ const result = executeMigrationPlan(config, plan, {
88
+ validateResult: true,
89
+ backupConfig: true
90
+ });
91
+ ```
92
+
93
+ ## Validation Rules
94
+
95
+ ### Naming Conflicts
96
+ - **Collection/Table Names**: Same names cannot exist in both arrays
97
+ - **Collection/Table IDs**: Same IDs cannot exist in both arrays
98
+ - **Within Arrays**: No duplicate names or IDs within the same array
99
+
100
+ ### Database References
101
+ - **Valid Database IDs**: All referenced database IDs must exist in databases array
102
+ - **Optional References**: Missing databaseId is allowed for backward compatibility
103
+
104
+ ### Schema Consistency
105
+ - **Mixed Usage Warning**: Using both collections and tables with auto API mode
106
+ - **Migration Suggestions**: Recommends migrating to tables for newer Appwrite versions
107
+ - **Relationship Validation**: Checks relationship attributes for potential issues
108
+
109
+ ## Migration Strategies
110
+
111
+ ### Full Migration
112
+ - Converts all collections to tables
113
+ - Removes collections array
114
+ - Best for new projects moving to TablesDB API
115
+
116
+ ### Dual Format
117
+ - Keeps both collections and tables
118
+ - Useful for gradual transition
119
+ - Higher maintenance overhead
120
+
121
+ ### Incremental
122
+ - Migrates specific collections only
123
+ - Good for large projects
124
+ - Allows staged migration
125
+
126
+ ### Tables Only
127
+ - Creates tables-only configuration
128
+ - Removes collections array entirely
129
+ - Clean slate approach
130
+
131
+ ## Error Types
132
+
133
+ ### Validation Errors
134
+ - `naming_conflict`: Same names/IDs in collections and tables
135
+ - `invalid_database_reference`: References to non-existent databases
136
+ - `missing_required_field`: Missing required fields in definitions
137
+ - `schema_inconsistency`: Configuration inconsistencies
138
+ - `duplicate_definition`: Duplicates within same array
139
+
140
+ ### Migration Warnings
141
+ - Complex relationships requiring manual review
142
+ - Large migrations requiring careful testing
143
+ - API mode configuration recommendations
144
+
145
+ ## Configuration Examples
146
+
147
+ ### Valid Dual Configuration
148
+ ```typescript
149
+ const config: AppwriteConfig = {
150
+ // ... other config
151
+ collections: [
152
+ {
153
+ name: "Users",
154
+ $id: "users",
155
+ // ... collection definition
156
+ }
157
+ ],
158
+ tables: [
159
+ {
160
+ name: "Products", // Different name - no conflict
161
+ tableId: "products",
162
+ // ... table definition
163
+ }
164
+ ],
165
+ apiMode: "auto" // Will handle both APIs
166
+ };
167
+ ```
168
+
169
+ ### Configuration with Conflicts (Invalid)
170
+ ```typescript
171
+ const config: AppwriteConfig = {
172
+ // ... other config
173
+ collections: [
174
+ {
175
+ name: "Users",
176
+ $id: "users",
177
+ // ... collection definition
178
+ }
179
+ ],
180
+ tables: [
181
+ {
182
+ name: "Users", // ❌ Conflict: same name as collection
183
+ tableId: "users", // ❌ Conflict: same ID as collection
184
+ // ... table definition
185
+ }
186
+ ]
187
+ };
188
+ ```
189
+
190
+ ## Integration with Existing Workflows
191
+
192
+ ### Config Loading
193
+ ```typescript
194
+ // Automatic validation during config loading
195
+ const config = await loadConfig(".", {
196
+ validate: true,
197
+ strictMode: false,
198
+ reportValidation: true
199
+ });
200
+ ```
201
+
202
+ ### UtilsController Integration
203
+ ```typescript
204
+ const controller = new UtilsController(process.cwd());
205
+
206
+ // Initialize with validation
207
+ await controller.init({ validate: true, strictMode: false });
208
+
209
+ // Manual validation
210
+ const validation = await controller.validateConfiguration();
211
+ ```
212
+
213
+ ### CLI Integration
214
+ ```typescript
215
+ // Interactive CLI includes validation and migration options
216
+ const cli = new InteractiveCLI(process.cwd());
217
+ await cli.run();
218
+
219
+ // Options:
220
+ // ✅ Validate configuration (collections/tables conflicts)
221
+ // 🔀 Migrate collections to tables format
222
+ ```
223
+
224
+ ## Best Practices
225
+
226
+ 1. **Always Validate**: Run validation before deploying configurations
227
+ 2. **Use Strict Mode in CI**: Catch warnings early in automated pipelines
228
+ 3. **Plan Migrations**: Use migration planning to understand changes
229
+ 4. **Backup First**: Create backups before major migrations
230
+ 5. **Test Incrementally**: Use incremental migration for large projects
231
+ 6. **Monitor API Mode**: Set explicit apiMode after migration
232
+
233
+ ## Troubleshooting
234
+
235
+ ### Common Issues
236
+
237
+ #### Naming Conflicts
238
+ ```bash
239
+ Error: Naming conflict detected: 'Users'
240
+ Details: Table 'Users' has the same name as a collection
241
+ Suggestion: Rename one of the conflicting items to avoid confusion
242
+ ```
243
+ **Solution**: Rename either the collection or table to have unique names.
244
+
245
+ #### Invalid Database References
246
+ ```bash
247
+ Error: Collection 'Posts' references invalid database 'blog'
248
+ Details: Database 'blog' is not defined in the databases array
249
+ Suggestion: Add database with $id 'blog' to the databases array
250
+ ```
251
+ **Solution**: Add the referenced database to the databases array.
252
+
253
+ #### Migration Complexity Warnings
254
+ ```bash
255
+ Warning: Large migration may require careful testing and staged deployment
256
+ Recommendation: Consider incremental migration for large projects
257
+ ```
258
+ **Solution**: Use incremental migration strategy or break into smaller batches.
259
+
260
+ ### Debug Mode
261
+ Enable verbose logging to see detailed validation and migration information:
262
+
263
+ ```typescript
264
+ // Enable verbose validation reporting
265
+ reportValidationResults(validation, { verbose: true });
266
+
267
+ // Enable detailed migration logging
268
+ const result = executeMigrationPlan(config, plan, {
269
+ validateResult: true,
270
+ dryRun: true // Test first
271
+ });
272
+ ```
273
+
274
+ This comprehensive validation and migration system ensures smooth transitions between collections and tables while maintaining data integrity and configuration consistency.