@njdamstra/appwrite-utils-cli 1.8.9

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 (392) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1133 -0
  3. package/dist/adapters/AdapterFactory.d.ts +94 -0
  4. package/dist/adapters/AdapterFactory.js +405 -0
  5. package/dist/adapters/DatabaseAdapter.d.ts +233 -0
  6. package/dist/adapters/DatabaseAdapter.js +50 -0
  7. package/dist/adapters/LegacyAdapter.d.ts +50 -0
  8. package/dist/adapters/LegacyAdapter.js +612 -0
  9. package/dist/adapters/TablesDBAdapter.d.ts +45 -0
  10. package/dist/adapters/TablesDBAdapter.js +571 -0
  11. package/dist/adapters/index.d.ts +11 -0
  12. package/dist/adapters/index.js +12 -0
  13. package/dist/backups/operations/bucketBackup.d.ts +19 -0
  14. package/dist/backups/operations/bucketBackup.js +197 -0
  15. package/dist/backups/operations/collectionBackup.d.ts +30 -0
  16. package/dist/backups/operations/collectionBackup.js +201 -0
  17. package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
  18. package/dist/backups/operations/comprehensiveBackup.js +238 -0
  19. package/dist/backups/schemas/bucketManifest.d.ts +93 -0
  20. package/dist/backups/schemas/bucketManifest.js +33 -0
  21. package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
  22. package/dist/backups/schemas/comprehensiveManifest.js +32 -0
  23. package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
  24. package/dist/backups/tracking/centralizedTracking.js +274 -0
  25. package/dist/cli/commands/configCommands.d.ts +8 -0
  26. package/dist/cli/commands/configCommands.js +166 -0
  27. package/dist/cli/commands/databaseCommands.d.ts +13 -0
  28. package/dist/cli/commands/databaseCommands.js +554 -0
  29. package/dist/cli/commands/functionCommands.d.ts +7 -0
  30. package/dist/cli/commands/functionCommands.js +330 -0
  31. package/dist/cli/commands/schemaCommands.d.ts +7 -0
  32. package/dist/cli/commands/schemaCommands.js +169 -0
  33. package/dist/cli/commands/storageCommands.d.ts +5 -0
  34. package/dist/cli/commands/storageCommands.js +143 -0
  35. package/dist/cli/commands/transferCommands.d.ts +5 -0
  36. package/dist/cli/commands/transferCommands.js +384 -0
  37. package/dist/collections/attributes.d.ts +13 -0
  38. package/dist/collections/attributes.js +1364 -0
  39. package/dist/collections/indexes.d.ts +12 -0
  40. package/dist/collections/indexes.js +217 -0
  41. package/dist/collections/methods.d.ts +19 -0
  42. package/dist/collections/methods.js +682 -0
  43. package/dist/collections/tableOperations.d.ts +86 -0
  44. package/dist/collections/tableOperations.js +434 -0
  45. package/dist/collections/transferOperations.d.ts +8 -0
  46. package/dist/collections/transferOperations.js +412 -0
  47. package/dist/collections/wipeOperations.d.ts +16 -0
  48. package/dist/collections/wipeOperations.js +233 -0
  49. package/dist/config/ConfigManager.d.ts +445 -0
  50. package/dist/config/ConfigManager.js +625 -0
  51. package/dist/config/configMigration.d.ts +87 -0
  52. package/dist/config/configMigration.js +390 -0
  53. package/dist/config/configValidation.d.ts +66 -0
  54. package/dist/config/configValidation.js +358 -0
  55. package/dist/config/index.d.ts +8 -0
  56. package/dist/config/index.js +7 -0
  57. package/dist/config/services/ConfigDiscoveryService.d.ts +126 -0
  58. package/dist/config/services/ConfigDiscoveryService.js +374 -0
  59. package/dist/config/services/ConfigLoaderService.d.ts +129 -0
  60. package/dist/config/services/ConfigLoaderService.js +540 -0
  61. package/dist/config/services/ConfigMergeService.d.ts +208 -0
  62. package/dist/config/services/ConfigMergeService.js +308 -0
  63. package/dist/config/services/ConfigValidationService.d.ts +214 -0
  64. package/dist/config/services/ConfigValidationService.js +310 -0
  65. package/dist/config/services/SessionAuthService.d.ts +225 -0
  66. package/dist/config/services/SessionAuthService.js +456 -0
  67. package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +1 -0
  68. package/dist/config/services/__tests__/ConfigMergeService.test.js +271 -0
  69. package/dist/config/services/index.d.ts +13 -0
  70. package/dist/config/services/index.js +10 -0
  71. package/dist/config/yamlConfig.d.ts +722 -0
  72. package/dist/config/yamlConfig.js +702 -0
  73. package/dist/databases/methods.d.ts +6 -0
  74. package/dist/databases/methods.js +35 -0
  75. package/dist/databases/setup.d.ts +5 -0
  76. package/dist/databases/setup.js +45 -0
  77. package/dist/examples/yamlTerminologyExample.d.ts +42 -0
  78. package/dist/examples/yamlTerminologyExample.js +272 -0
  79. package/dist/functions/deployments.d.ts +4 -0
  80. package/dist/functions/deployments.js +146 -0
  81. package/dist/functions/fnConfigDiscovery.d.ts +3 -0
  82. package/dist/functions/fnConfigDiscovery.js +108 -0
  83. package/dist/functions/methods.d.ts +16 -0
  84. package/dist/functions/methods.js +162 -0
  85. package/dist/functions/pathResolution.d.ts +37 -0
  86. package/dist/functions/pathResolution.js +185 -0
  87. package/dist/functions/templates/count-docs-in-collection/README.md +54 -0
  88. package/dist/functions/templates/count-docs-in-collection/src/main.ts +159 -0
  89. package/dist/functions/templates/count-docs-in-collection/src/request.ts +9 -0
  90. package/dist/functions/templates/hono-typescript/README.md +286 -0
  91. package/dist/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
  92. package/dist/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
  93. package/dist/functions/templates/hono-typescript/src/app.ts +180 -0
  94. package/dist/functions/templates/hono-typescript/src/context.ts +103 -0
  95. package/dist/functions/templates/hono-typescript/src/index.ts +54 -0
  96. package/dist/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
  97. package/dist/functions/templates/typescript-node/README.md +32 -0
  98. package/dist/functions/templates/typescript-node/src/context.ts +103 -0
  99. package/dist/functions/templates/typescript-node/src/index.ts +29 -0
  100. package/dist/functions/templates/uv/README.md +31 -0
  101. package/dist/functions/templates/uv/pyproject.toml +30 -0
  102. package/dist/functions/templates/uv/src/__init__.py +0 -0
  103. package/dist/functions/templates/uv/src/context.py +125 -0
  104. package/dist/functions/templates/uv/src/index.py +46 -0
  105. package/dist/init.d.ts +2 -0
  106. package/dist/init.js +57 -0
  107. package/dist/interactiveCLI.d.ts +31 -0
  108. package/dist/interactiveCLI.js +898 -0
  109. package/dist/main.d.ts +2 -0
  110. package/dist/main.js +1172 -0
  111. package/dist/migrations/afterImportActions.d.ts +17 -0
  112. package/dist/migrations/afterImportActions.js +306 -0
  113. package/dist/migrations/appwriteToX.d.ts +211 -0
  114. package/dist/migrations/appwriteToX.js +491 -0
  115. package/dist/migrations/comprehensiveTransfer.d.ts +147 -0
  116. package/dist/migrations/comprehensiveTransfer.js +1317 -0
  117. package/dist/migrations/dataLoader.d.ts +753 -0
  118. package/dist/migrations/dataLoader.js +1250 -0
  119. package/dist/migrations/importController.d.ts +23 -0
  120. package/dist/migrations/importController.js +268 -0
  121. package/dist/migrations/importDataActions.d.ts +50 -0
  122. package/dist/migrations/importDataActions.js +230 -0
  123. package/dist/migrations/relationships.d.ts +29 -0
  124. package/dist/migrations/relationships.js +204 -0
  125. package/dist/migrations/services/DataTransformationService.d.ts +55 -0
  126. package/dist/migrations/services/DataTransformationService.js +158 -0
  127. package/dist/migrations/services/FileHandlerService.d.ts +75 -0
  128. package/dist/migrations/services/FileHandlerService.js +236 -0
  129. package/dist/migrations/services/ImportOrchestrator.d.ts +97 -0
  130. package/dist/migrations/services/ImportOrchestrator.js +485 -0
  131. package/dist/migrations/services/RateLimitManager.d.ts +138 -0
  132. package/dist/migrations/services/RateLimitManager.js +279 -0
  133. package/dist/migrations/services/RelationshipResolver.d.ts +120 -0
  134. package/dist/migrations/services/RelationshipResolver.js +332 -0
  135. package/dist/migrations/services/UserMappingService.d.ts +109 -0
  136. package/dist/migrations/services/UserMappingService.js +277 -0
  137. package/dist/migrations/services/ValidationService.d.ts +74 -0
  138. package/dist/migrations/services/ValidationService.js +260 -0
  139. package/dist/migrations/transfer.d.ts +26 -0
  140. package/dist/migrations/transfer.js +608 -0
  141. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +131 -0
  142. package/dist/migrations/yaml/YamlImportConfigLoader.js +383 -0
  143. package/dist/migrations/yaml/YamlImportIntegration.d.ts +93 -0
  144. package/dist/migrations/yaml/YamlImportIntegration.js +341 -0
  145. package/dist/migrations/yaml/generateImportSchemas.d.ts +30 -0
  146. package/dist/migrations/yaml/generateImportSchemas.js +1327 -0
  147. package/dist/schemas/authUser.d.ts +24 -0
  148. package/dist/schemas/authUser.js +17 -0
  149. package/dist/setup.d.ts +2 -0
  150. package/dist/setup.js +5 -0
  151. package/dist/setupCommands.d.ts +58 -0
  152. package/dist/setupCommands.js +490 -0
  153. package/dist/setupController.d.ts +9 -0
  154. package/dist/setupController.js +34 -0
  155. package/dist/shared/attributeMapper.d.ts +20 -0
  156. package/dist/shared/attributeMapper.js +203 -0
  157. package/dist/shared/backupMetadataSchema.d.ts +94 -0
  158. package/dist/shared/backupMetadataSchema.js +38 -0
  159. package/dist/shared/backupTracking.d.ts +18 -0
  160. package/dist/shared/backupTracking.js +176 -0
  161. package/dist/shared/confirmationDialogs.d.ts +75 -0
  162. package/dist/shared/confirmationDialogs.js +236 -0
  163. package/dist/shared/errorUtils.d.ts +54 -0
  164. package/dist/shared/errorUtils.js +95 -0
  165. package/dist/shared/functionManager.d.ts +48 -0
  166. package/dist/shared/functionManager.js +336 -0
  167. package/dist/shared/indexManager.d.ts +24 -0
  168. package/dist/shared/indexManager.js +151 -0
  169. package/dist/shared/jsonSchemaGenerator.d.ts +50 -0
  170. package/dist/shared/jsonSchemaGenerator.js +290 -0
  171. package/dist/shared/logging.d.ts +61 -0
  172. package/dist/shared/logging.js +116 -0
  173. package/dist/shared/messageFormatter.d.ts +39 -0
  174. package/dist/shared/messageFormatter.js +162 -0
  175. package/dist/shared/migrationHelpers.d.ts +61 -0
  176. package/dist/shared/migrationHelpers.js +145 -0
  177. package/dist/shared/operationLogger.d.ts +10 -0
  178. package/dist/shared/operationLogger.js +12 -0
  179. package/dist/shared/operationQueue.d.ts +40 -0
  180. package/dist/shared/operationQueue.js +311 -0
  181. package/dist/shared/operationsTable.d.ts +26 -0
  182. package/dist/shared/operationsTable.js +286 -0
  183. package/dist/shared/operationsTableSchema.d.ts +48 -0
  184. package/dist/shared/operationsTableSchema.js +35 -0
  185. package/dist/shared/progressManager.d.ts +62 -0
  186. package/dist/shared/progressManager.js +215 -0
  187. package/dist/shared/pydanticModelGenerator.d.ts +17 -0
  188. package/dist/shared/pydanticModelGenerator.js +615 -0
  189. package/dist/shared/relationshipExtractor.d.ts +56 -0
  190. package/dist/shared/relationshipExtractor.js +138 -0
  191. package/dist/shared/schemaGenerator.d.ts +40 -0
  192. package/dist/shared/schemaGenerator.js +556 -0
  193. package/dist/shared/selectionDialogs.d.ts +214 -0
  194. package/dist/shared/selectionDialogs.js +544 -0
  195. package/dist/storage/backupCompression.d.ts +20 -0
  196. package/dist/storage/backupCompression.js +67 -0
  197. package/dist/storage/methods.d.ts +32 -0
  198. package/dist/storage/methods.js +472 -0
  199. package/dist/storage/schemas.d.ts +842 -0
  200. package/dist/storage/schemas.js +175 -0
  201. package/dist/types.d.ts +4 -0
  202. package/dist/types.js +3 -0
  203. package/dist/users/methods.d.ts +16 -0
  204. package/dist/users/methods.js +277 -0
  205. package/dist/utils/ClientFactory.d.ts +87 -0
  206. package/dist/utils/ClientFactory.js +212 -0
  207. package/dist/utils/configDiscovery.d.ts +78 -0
  208. package/dist/utils/configDiscovery.js +472 -0
  209. package/dist/utils/configMigration.d.ts +1 -0
  210. package/dist/utils/configMigration.js +261 -0
  211. package/dist/utils/constantsGenerator.d.ts +31 -0
  212. package/dist/utils/constantsGenerator.js +321 -0
  213. package/dist/utils/dataConverters.d.ts +46 -0
  214. package/dist/utils/dataConverters.js +139 -0
  215. package/dist/utils/directoryUtils.d.ts +22 -0
  216. package/dist/utils/directoryUtils.js +59 -0
  217. package/dist/utils/getClientFromConfig.d.ts +39 -0
  218. package/dist/utils/getClientFromConfig.js +199 -0
  219. package/dist/utils/helperFunctions.d.ts +63 -0
  220. package/dist/utils/helperFunctions.js +156 -0
  221. package/dist/utils/index.d.ts +2 -0
  222. package/dist/utils/index.js +2 -0
  223. package/dist/utils/loadConfigs.d.ts +50 -0
  224. package/dist/utils/loadConfigs.js +358 -0
  225. package/dist/utils/pathResolvers.d.ts +53 -0
  226. package/dist/utils/pathResolvers.js +72 -0
  227. package/dist/utils/projectConfig.d.ts +119 -0
  228. package/dist/utils/projectConfig.js +171 -0
  229. package/dist/utils/retryFailedPromises.d.ts +2 -0
  230. package/dist/utils/retryFailedPromises.js +23 -0
  231. package/dist/utils/sessionAuth.d.ts +48 -0
  232. package/dist/utils/sessionAuth.js +164 -0
  233. package/dist/utils/setupFiles.d.ts +4 -0
  234. package/dist/utils/setupFiles.js +1192 -0
  235. package/dist/utils/typeGuards.d.ts +35 -0
  236. package/dist/utils/typeGuards.js +57 -0
  237. package/dist/utils/validationRules.d.ts +43 -0
  238. package/dist/utils/validationRules.js +42 -0
  239. package/dist/utils/versionDetection.d.ts +58 -0
  240. package/dist/utils/versionDetection.js +251 -0
  241. package/dist/utils/yamlConverter.d.ts +100 -0
  242. package/dist/utils/yamlConverter.js +428 -0
  243. package/dist/utils/yamlLoader.d.ts +70 -0
  244. package/dist/utils/yamlLoader.js +267 -0
  245. package/dist/utilsController.d.ts +106 -0
  246. package/dist/utilsController.js +863 -0
  247. package/package.json +75 -0
  248. package/scripts/copy-templates.ts +23 -0
  249. package/src/adapters/AdapterFactory.ts +510 -0
  250. package/src/adapters/DatabaseAdapter.ts +306 -0
  251. package/src/adapters/LegacyAdapter.ts +841 -0
  252. package/src/adapters/TablesDBAdapter.ts +773 -0
  253. package/src/adapters/index.ts +37 -0
  254. package/src/backups/operations/bucketBackup.ts +277 -0
  255. package/src/backups/operations/collectionBackup.ts +310 -0
  256. package/src/backups/operations/comprehensiveBackup.ts +342 -0
  257. package/src/backups/schemas/bucketManifest.ts +78 -0
  258. package/src/backups/schemas/comprehensiveManifest.ts +76 -0
  259. package/src/backups/tracking/centralizedTracking.ts +352 -0
  260. package/src/cli/commands/configCommands.ts +201 -0
  261. package/src/cli/commands/databaseCommands.ts +749 -0
  262. package/src/cli/commands/functionCommands.ts +418 -0
  263. package/src/cli/commands/schemaCommands.ts +200 -0
  264. package/src/cli/commands/storageCommands.ts +152 -0
  265. package/src/cli/commands/transferCommands.ts +457 -0
  266. package/src/collections/attributes.ts +2054 -0
  267. package/src/collections/attributes.ts.backup +1555 -0
  268. package/src/collections/indexes.ts +352 -0
  269. package/src/collections/methods.ts +745 -0
  270. package/src/collections/tableOperations.ts +506 -0
  271. package/src/collections/transferOperations.ts +590 -0
  272. package/src/collections/wipeOperations.ts +346 -0
  273. package/src/config/ConfigManager.ts +808 -0
  274. package/src/config/README.md +274 -0
  275. package/src/config/configMigration.ts +575 -0
  276. package/src/config/configValidation.ts +445 -0
  277. package/src/config/index.ts +10 -0
  278. package/src/config/services/ConfigDiscoveryService.ts +463 -0
  279. package/src/config/services/ConfigLoaderService.ts +740 -0
  280. package/src/config/services/ConfigMergeService.ts +388 -0
  281. package/src/config/services/ConfigValidationService.ts +394 -0
  282. package/src/config/services/SessionAuthService.ts +565 -0
  283. package/src/config/services/__tests__/ConfigMergeService.test.ts +351 -0
  284. package/src/config/services/index.ts +29 -0
  285. package/src/config/yamlConfig.ts +761 -0
  286. package/src/databases/methods.ts +49 -0
  287. package/src/databases/setup.ts +77 -0
  288. package/src/examples/yamlTerminologyExample.ts +346 -0
  289. package/src/functions/deployments.ts +220 -0
  290. package/src/functions/fnConfigDiscovery.ts +103 -0
  291. package/src/functions/methods.ts +271 -0
  292. package/src/functions/pathResolution.ts +227 -0
  293. package/src/functions/templates/count-docs-in-collection/README.md +54 -0
  294. package/src/functions/templates/count-docs-in-collection/src/main.ts +159 -0
  295. package/src/functions/templates/count-docs-in-collection/src/request.ts +9 -0
  296. package/src/functions/templates/hono-typescript/README.md +286 -0
  297. package/src/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
  298. package/src/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
  299. package/src/functions/templates/hono-typescript/src/app.ts +180 -0
  300. package/src/functions/templates/hono-typescript/src/context.ts +103 -0
  301. package/src/functions/templates/hono-typescript/src/index.ts +54 -0
  302. package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
  303. package/src/functions/templates/typescript-node/README.md +32 -0
  304. package/src/functions/templates/typescript-node/src/context.ts +103 -0
  305. package/src/functions/templates/typescript-node/src/index.ts +29 -0
  306. package/src/functions/templates/uv/README.md +31 -0
  307. package/src/functions/templates/uv/pyproject.toml +30 -0
  308. package/src/functions/templates/uv/src/__init__.py +0 -0
  309. package/src/functions/templates/uv/src/context.py +125 -0
  310. package/src/functions/templates/uv/src/index.py +46 -0
  311. package/src/init.ts +62 -0
  312. package/src/interactiveCLI.ts +1136 -0
  313. package/src/main.ts +1661 -0
  314. package/src/migrations/afterImportActions.ts +580 -0
  315. package/src/migrations/appwriteToX.ts +664 -0
  316. package/src/migrations/comprehensiveTransfer.ts +2285 -0
  317. package/src/migrations/dataLoader.ts +1702 -0
  318. package/src/migrations/importController.ts +428 -0
  319. package/src/migrations/importDataActions.ts +315 -0
  320. package/src/migrations/relationships.ts +334 -0
  321. package/src/migrations/services/DataTransformationService.ts +196 -0
  322. package/src/migrations/services/FileHandlerService.ts +311 -0
  323. package/src/migrations/services/ImportOrchestrator.ts +666 -0
  324. package/src/migrations/services/RateLimitManager.ts +363 -0
  325. package/src/migrations/services/RelationshipResolver.ts +461 -0
  326. package/src/migrations/services/UserMappingService.ts +345 -0
  327. package/src/migrations/services/ValidationService.ts +349 -0
  328. package/src/migrations/transfer.ts +1068 -0
  329. package/src/migrations/yaml/YamlImportConfigLoader.ts +439 -0
  330. package/src/migrations/yaml/YamlImportIntegration.ts +446 -0
  331. package/src/migrations/yaml/generateImportSchemas.ts +1354 -0
  332. package/src/schemas/authUser.ts +23 -0
  333. package/src/setup.ts +8 -0
  334. package/src/setupCommands.ts +603 -0
  335. package/src/setupController.ts +43 -0
  336. package/src/shared/attributeMapper.ts +229 -0
  337. package/src/shared/backupMetadataSchema.ts +93 -0
  338. package/src/shared/backupTracking.ts +211 -0
  339. package/src/shared/confirmationDialogs.ts +327 -0
  340. package/src/shared/errorUtils.ts +110 -0
  341. package/src/shared/functionManager.ts +525 -0
  342. package/src/shared/indexManager.ts +254 -0
  343. package/src/shared/jsonSchemaGenerator.ts +383 -0
  344. package/src/shared/logging.ts +149 -0
  345. package/src/shared/messageFormatter.ts +208 -0
  346. package/src/shared/migrationHelpers.ts +232 -0
  347. package/src/shared/operationLogger.ts +20 -0
  348. package/src/shared/operationQueue.ts +377 -0
  349. package/src/shared/operationsTable.ts +338 -0
  350. package/src/shared/operationsTableSchema.ts +60 -0
  351. package/src/shared/progressManager.ts +278 -0
  352. package/src/shared/pydanticModelGenerator.ts +618 -0
  353. package/src/shared/relationshipExtractor.ts +214 -0
  354. package/src/shared/schemaGenerator.ts +644 -0
  355. package/src/shared/selectionDialogs.ts +749 -0
  356. package/src/storage/backupCompression.ts +88 -0
  357. package/src/storage/methods.ts +698 -0
  358. package/src/storage/schemas.ts +205 -0
  359. package/src/types/node-appwrite-tablesdb.d.ts +44 -0
  360. package/src/types.ts +9 -0
  361. package/src/users/methods.ts +359 -0
  362. package/src/utils/ClientFactory.ts +240 -0
  363. package/src/utils/configDiscovery.ts +557 -0
  364. package/src/utils/configMigration.ts +348 -0
  365. package/src/utils/constantsGenerator.ts +369 -0
  366. package/src/utils/dataConverters.ts +159 -0
  367. package/src/utils/directoryUtils.ts +61 -0
  368. package/src/utils/getClientFromConfig.ts +257 -0
  369. package/src/utils/helperFunctions.ts +228 -0
  370. package/src/utils/index.ts +2 -0
  371. package/src/utils/loadConfigs.ts +449 -0
  372. package/src/utils/pathResolvers.ts +81 -0
  373. package/src/utils/projectConfig.ts +299 -0
  374. package/src/utils/retryFailedPromises.ts +29 -0
  375. package/src/utils/sessionAuth.ts +230 -0
  376. package/src/utils/setupFiles.ts +1238 -0
  377. package/src/utils/typeGuards.ts +65 -0
  378. package/src/utils/validationRules.ts +88 -0
  379. package/src/utils/versionDetection.ts +292 -0
  380. package/src/utils/yamlConverter.ts +542 -0
  381. package/src/utils/yamlLoader.ts +371 -0
  382. package/src/utilsController.ts +1203 -0
  383. package/tests/README.md +497 -0
  384. package/tests/adapters/AdapterFactory.test.ts +277 -0
  385. package/tests/integration/syncOperations.test.ts +463 -0
  386. package/tests/jest.config.js +25 -0
  387. package/tests/migration/configMigration.test.ts +546 -0
  388. package/tests/setup.ts +62 -0
  389. package/tests/testUtils.ts +340 -0
  390. package/tests/utils/loadConfigs.test.ts +350 -0
  391. package/tests/validation/configValidation.test.ts +412 -0
  392. package/tsconfig.json +44 -0
@@ -0,0 +1,203 @@
1
+ function ensureNumber(n) {
2
+ if (n === null || n === undefined)
3
+ return undefined;
4
+ const num = Number(n);
5
+ return Number.isFinite(num) ? num : undefined;
6
+ }
7
+ /**
8
+ * Map a schema Attribute into DatabaseAdapter CreateAttributeParams
9
+ * Only includes fields valid for the specific type to satisfy TS unions.
10
+ * Also normalizes min/max ordering for numeric types to avoid server errors.
11
+ */
12
+ export function mapToCreateAttributeParams(attr, base) {
13
+ const type = String(attr.type || "").toLowerCase();
14
+ const required = !!attr.required;
15
+ const array = !!attr.array;
16
+ const xdefault = attr.xdefault;
17
+ const encrypt = attr.encrypt;
18
+ // Numeric helpers
19
+ const rawMin = ensureNumber(attr.min);
20
+ const rawMax = ensureNumber(attr.max);
21
+ let min = rawMin;
22
+ let max = rawMax;
23
+ if (min !== undefined && max !== undefined && min >= max) {
24
+ // Swap to satisfy server-side validation
25
+ const tmp = min;
26
+ min = Math.min(min, max);
27
+ max = Math.max(tmp, max);
28
+ if (min === max) {
29
+ // If still equal, unset max to avoid error
30
+ max = undefined;
31
+ }
32
+ }
33
+ switch (type) {
34
+ case "string":
35
+ return {
36
+ databaseId: base.databaseId,
37
+ tableId: base.tableId,
38
+ key: attr.key,
39
+ type,
40
+ size: attr.size ?? 255,
41
+ required,
42
+ default: xdefault,
43
+ array,
44
+ encrypt: !!encrypt,
45
+ };
46
+ case "integer":
47
+ return {
48
+ databaseId: base.databaseId,
49
+ tableId: base.tableId,
50
+ key: attr.key,
51
+ type,
52
+ required,
53
+ default: xdefault,
54
+ array,
55
+ min,
56
+ max,
57
+ };
58
+ case "double":
59
+ case "float":
60
+ return {
61
+ databaseId: base.databaseId,
62
+ tableId: base.tableId,
63
+ key: attr.key,
64
+ type,
65
+ required,
66
+ default: xdefault,
67
+ array,
68
+ min,
69
+ max,
70
+ };
71
+ case "boolean":
72
+ return {
73
+ databaseId: base.databaseId,
74
+ tableId: base.tableId,
75
+ key: attr.key,
76
+ type,
77
+ required,
78
+ default: xdefault,
79
+ array,
80
+ };
81
+ case "datetime":
82
+ case "email":
83
+ case "ip":
84
+ case "url":
85
+ return {
86
+ databaseId: base.databaseId,
87
+ tableId: base.tableId,
88
+ key: attr.key,
89
+ type,
90
+ required,
91
+ default: xdefault,
92
+ array,
93
+ };
94
+ case "enum":
95
+ {
96
+ const elements = attr.elements;
97
+ if (!Array.isArray(elements) || elements.length === 0) {
98
+ // Creating an enum without elements is invalid – fail fast with clear messaging
99
+ throw new Error(`Enum attribute '${attr.key}' requires a non-empty 'elements' array for creation`);
100
+ }
101
+ }
102
+ return {
103
+ databaseId: base.databaseId,
104
+ tableId: base.tableId,
105
+ key: attr.key,
106
+ type,
107
+ required,
108
+ default: xdefault,
109
+ array,
110
+ elements: attr.elements,
111
+ };
112
+ case "relationship": {
113
+ // Relationship attributes require related collection and metadata
114
+ return {
115
+ databaseId: base.databaseId,
116
+ tableId: base.tableId,
117
+ key: attr.key,
118
+ type,
119
+ relatedCollection: attr.relatedCollection,
120
+ relationType: attr.relationType,
121
+ twoWay: attr.twoWay,
122
+ twoWayKey: attr.twoWayKey,
123
+ onDelete: attr.onDelete,
124
+ side: attr.side,
125
+ };
126
+ }
127
+ default:
128
+ return {
129
+ databaseId: base.databaseId,
130
+ tableId: base.tableId,
131
+ key: attr.key,
132
+ type,
133
+ required,
134
+ };
135
+ }
136
+ }
137
+ /**
138
+ * Map a schema Attribute into DatabaseAdapter UpdateAttributeParams
139
+ * Omits fields that are not explicitly provided, and guards enum updates
140
+ * so we never send an empty elements array (preserve existing on server).
141
+ */
142
+ export function mapToUpdateAttributeParams(attr, base) {
143
+ const type = String(attr.type || "").toLowerCase();
144
+ const params = {
145
+ databaseId: base.databaseId,
146
+ tableId: base.tableId,
147
+ key: attr.key,
148
+ };
149
+ const setIfDefined = (key, value) => {
150
+ if (value !== undefined)
151
+ params[key] = value;
152
+ };
153
+ // Common fields
154
+ setIfDefined("type", type);
155
+ setIfDefined("required", attr.required);
156
+ // Only send default if explicitly provided and not on required
157
+ if (!attr.required && attr.xdefault !== undefined) {
158
+ setIfDefined("default", attr.xdefault);
159
+ }
160
+ setIfDefined("array", attr.array);
161
+ // encrypt only applies to string types
162
+ if (type === "string")
163
+ setIfDefined("encrypt", attr.encrypt);
164
+ // Numeric normalization
165
+ const toNum = (n) => (n === null || n === undefined ? undefined : (Number(n)));
166
+ let min = toNum(attr.min);
167
+ let max = toNum(attr.max);
168
+ if (min !== undefined && max !== undefined && min >= max) {
169
+ const tmp = min;
170
+ min = Math.min(min, max);
171
+ max = Math.max(tmp, max);
172
+ if (min === max)
173
+ max = undefined;
174
+ }
175
+ switch (type) {
176
+ case "string":
177
+ setIfDefined("size", attr.size);
178
+ break;
179
+ case "integer":
180
+ case "float":
181
+ case "double":
182
+ setIfDefined("min", min);
183
+ setIfDefined("max", max);
184
+ break;
185
+ case "enum": {
186
+ const elements = attr.elements;
187
+ if (Array.isArray(elements) && elements.length > 0) {
188
+ // Only include when non-empty; otherwise preserve existing on server
189
+ setIfDefined("elements", elements);
190
+ }
191
+ break;
192
+ }
193
+ case "relationship": {
194
+ setIfDefined("relatedCollection", attr.relatedCollection);
195
+ setIfDefined("relationType", attr.relationType);
196
+ setIfDefined("twoWay", attr.twoWay);
197
+ setIfDefined("twoWayKey", attr.twoWayKey);
198
+ setIfDefined("onDelete", attr.onDelete);
199
+ break;
200
+ }
201
+ }
202
+ return params;
203
+ }
@@ -0,0 +1,94 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Schema for centralized backup tracking table (_appwrite_backups)
4
+ *
5
+ * Tracks all backups created for databases, buckets, and comprehensive backups
6
+ */
7
+ export type BackupType = 'database' | 'bucket' | 'comprehensive';
8
+ export type BackupFormat = 'json' | 'zip';
9
+ export type BackupStatus = 'completed' | 'partial' | 'failed';
10
+ export type RestorationStatus = 'completed' | 'partial' | 'failed' | 'not_restored';
11
+ export declare const BACKUP_TYPES: readonly ["database", "bucket", "comprehensive"];
12
+ export declare const BACKUP_FORMATS: readonly ["json", "zip"];
13
+ export declare const BACKUP_STATUSES: readonly ["completed", "partial", "failed"];
14
+ export declare const RESTORATION_STATUSES: readonly ["completed", "partial", "failed", "not_restored"];
15
+ export declare const BackupTypeSchema: z.ZodEnum<{
16
+ bucket: "bucket";
17
+ database: "database";
18
+ comprehensive: "comprehensive";
19
+ }>;
20
+ export declare const BackupFormatSchema: z.ZodEnum<{
21
+ json: "json";
22
+ zip: "zip";
23
+ }>;
24
+ export declare const BackupStatusSchema: z.ZodEnum<{
25
+ completed: "completed";
26
+ failed: "failed";
27
+ partial: "partial";
28
+ }>;
29
+ export declare const RestorationStatusSchema: z.ZodEnum<{
30
+ completed: "completed";
31
+ failed: "failed";
32
+ partial: "partial";
33
+ not_restored: "not_restored";
34
+ }>;
35
+ export interface BackupMetadata {
36
+ $id: string;
37
+ $createdAt: string;
38
+ $updatedAt: string;
39
+ backupType: BackupType;
40
+ backupId: string;
41
+ manifestFileId?: string;
42
+ format: BackupFormat;
43
+ sizeBytes: number;
44
+ databaseId?: string;
45
+ bucketId?: string;
46
+ comprehensiveBackupId?: string;
47
+ collections?: number;
48
+ documents?: number;
49
+ fileCount?: number;
50
+ status: BackupStatus;
51
+ error?: string;
52
+ restoredAt?: string;
53
+ restorationStatus: RestorationStatus;
54
+ restorationError?: string;
55
+ }
56
+ export declare const BackupMetadataSchema: z.ZodObject<{
57
+ $id: z.ZodString;
58
+ $createdAt: z.ZodString;
59
+ $updatedAt: z.ZodString;
60
+ backupType: z.ZodEnum<{
61
+ bucket: "bucket";
62
+ database: "database";
63
+ comprehensive: "comprehensive";
64
+ }>;
65
+ backupId: z.ZodString;
66
+ manifestFileId: z.ZodOptional<z.ZodString>;
67
+ format: z.ZodEnum<{
68
+ json: "json";
69
+ zip: "zip";
70
+ }>;
71
+ sizeBytes: z.ZodNumber;
72
+ databaseId: z.ZodOptional<z.ZodString>;
73
+ bucketId: z.ZodOptional<z.ZodString>;
74
+ comprehensiveBackupId: z.ZodOptional<z.ZodString>;
75
+ collections: z.ZodOptional<z.ZodNumber>;
76
+ documents: z.ZodOptional<z.ZodNumber>;
77
+ fileCount: z.ZodOptional<z.ZodNumber>;
78
+ status: z.ZodEnum<{
79
+ completed: "completed";
80
+ failed: "failed";
81
+ partial: "partial";
82
+ }>;
83
+ error: z.ZodOptional<z.ZodString>;
84
+ restoredAt: z.ZodOptional<z.ZodString>;
85
+ restorationStatus: z.ZodDefault<z.ZodEnum<{
86
+ completed: "completed";
87
+ failed: "failed";
88
+ partial: "partial";
89
+ not_restored: "not_restored";
90
+ }>>;
91
+ restorationError: z.ZodOptional<z.ZodString>;
92
+ }, z.core.$strip>;
93
+ export declare const BACKUP_TABLE_ID = "appwrite_backups";
94
+ export declare const BACKUP_TABLE_NAME = "Backup Tracking";
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ export const BACKUP_TYPES = ['database', 'bucket', 'comprehensive'];
3
+ export const BACKUP_FORMATS = ['json', 'zip'];
4
+ export const BACKUP_STATUSES = ['completed', 'partial', 'failed'];
5
+ export const RESTORATION_STATUSES = ['completed', 'partial', 'failed', 'not_restored'];
6
+ export const BackupTypeSchema = z.enum(['database', 'bucket', 'comprehensive']);
7
+ export const BackupFormatSchema = z.enum(['json', 'zip']);
8
+ export const BackupStatusSchema = z.enum(['completed', 'partial', 'failed']);
9
+ export const RestorationStatusSchema = z.enum(['completed', 'partial', 'failed', 'not_restored']);
10
+ export const BackupMetadataSchema = z.object({
11
+ $id: z.string(),
12
+ $createdAt: z.string(),
13
+ $updatedAt: z.string(),
14
+ // Core backup info
15
+ backupType: BackupTypeSchema,
16
+ backupId: z.string(),
17
+ manifestFileId: z.string().optional(),
18
+ format: BackupFormatSchema,
19
+ sizeBytes: z.number(),
20
+ // Resource identification
21
+ databaseId: z.string().optional(),
22
+ bucketId: z.string().optional(),
23
+ comprehensiveBackupId: z.string().optional(),
24
+ // Database-specific metrics
25
+ collections: z.number().optional(),
26
+ documents: z.number().optional(),
27
+ // Bucket-specific metrics
28
+ fileCount: z.number().optional(),
29
+ // Status tracking
30
+ status: BackupStatusSchema,
31
+ error: z.string().optional(),
32
+ // Restoration tracking
33
+ restoredAt: z.string().optional(),
34
+ restorationStatus: RestorationStatusSchema.default('not_restored'),
35
+ restorationError: z.string().optional()
36
+ });
37
+ export const BACKUP_TABLE_ID = "appwrite_backups";
38
+ export const BACKUP_TABLE_NAME = "Backup Tracking";
@@ -0,0 +1,18 @@
1
+ import type { DatabaseAdapter } from "../adapters/DatabaseAdapter.js";
2
+ import { type BackupMetadata } from "./backupMetadataSchema.js";
3
+ /**
4
+ * Creates the backup tracking table in the specified database
5
+ */
6
+ export declare function createBackupTrackingTable(db: DatabaseAdapter, databaseId: string): Promise<void>;
7
+ /**
8
+ * Records backup metadata in the tracking table
9
+ */
10
+ export declare function recordBackup(db: DatabaseAdapter, databaseId: string, metadata: Omit<BackupMetadata, '$id' | '$createdAt' | '$updatedAt'>): Promise<BackupMetadata>;
11
+ /**
12
+ * Lists all backups for a database, sorted by creation date (newest first)
13
+ */
14
+ export declare function listBackups(db: DatabaseAdapter, databaseId: string): Promise<BackupMetadata[]>;
15
+ /**
16
+ * Gets the most recent backup for a database
17
+ */
18
+ export declare function getLastBackup(db: DatabaseAdapter, databaseId: string): Promise<BackupMetadata | null>;
@@ -0,0 +1,176 @@
1
+ import { logger } from "./logging.js";
2
+ import { tryAwaitWithRetry } from "../utils/helperFunctions.js";
3
+ import { Query, ID } from "node-appwrite";
4
+ import { BACKUP_TABLE_ID, BACKUP_TABLE_NAME, BackupMetadataSchema } from "./backupMetadataSchema.js";
5
+ /**
6
+ * Checks if backup tracking table exists in database
7
+ */
8
+ async function tableExists(db, databaseId) {
9
+ try {
10
+ await db.getTable({ databaseId, tableId: BACKUP_TABLE_ID });
11
+ return true;
12
+ }
13
+ catch (error) {
14
+ return false;
15
+ }
16
+ }
17
+ /**
18
+ * Creates the backup tracking table in the specified database
19
+ */
20
+ export async function createBackupTrackingTable(db, databaseId) {
21
+ // Check if table already exists
22
+ const exists = await tableExists(db, databaseId);
23
+ if (exists) {
24
+ logger.debug("Backup tracking table already exists", {
25
+ databaseId,
26
+ tableId: BACKUP_TABLE_ID
27
+ });
28
+ return;
29
+ }
30
+ logger.info("Creating backup tracking table", {
31
+ databaseId,
32
+ tableId: BACKUP_TABLE_ID
33
+ });
34
+ // Create table
35
+ await tryAwaitWithRetry(async () => {
36
+ await db.createTable({
37
+ databaseId,
38
+ id: BACKUP_TABLE_ID,
39
+ name: BACKUP_TABLE_NAME
40
+ });
41
+ });
42
+ // Create attributes
43
+ const attributes = [
44
+ {
45
+ key: "backupId",
46
+ type: "string",
47
+ size: 50,
48
+ required: true
49
+ },
50
+ {
51
+ key: "databaseId",
52
+ type: "string",
53
+ size: 50,
54
+ required: true
55
+ },
56
+ {
57
+ key: "sizeBytes",
58
+ type: "integer",
59
+ required: true
60
+ },
61
+ {
62
+ key: "collections",
63
+ type: "integer",
64
+ required: true
65
+ },
66
+ {
67
+ key: "documents",
68
+ type: "integer",
69
+ required: true
70
+ },
71
+ {
72
+ key: "format",
73
+ type: "enum",
74
+ elements: ["json", "zip"],
75
+ required: true
76
+ },
77
+ {
78
+ key: "status",
79
+ type: "enum",
80
+ elements: ["completed", "failed"],
81
+ required: true
82
+ },
83
+ {
84
+ key: "error",
85
+ type: "string",
86
+ size: 10000,
87
+ required: false
88
+ }
89
+ ];
90
+ for (const attr of attributes) {
91
+ await tryAwaitWithRetry(async () => {
92
+ await db.createAttribute({
93
+ databaseId,
94
+ tableId: BACKUP_TABLE_ID,
95
+ ...attr
96
+ });
97
+ });
98
+ }
99
+ logger.info("Backup tracking table created successfully", {
100
+ databaseId,
101
+ tableId: BACKUP_TABLE_ID
102
+ });
103
+ }
104
+ /**
105
+ * Records backup metadata in the tracking table
106
+ */
107
+ export async function recordBackup(db, databaseId, metadata) {
108
+ // Ensure tracking table exists
109
+ await createBackupTrackingTable(db, databaseId);
110
+ // Create backup record
111
+ const result = await db.createRow({
112
+ databaseId,
113
+ tableId: BACKUP_TABLE_ID,
114
+ id: ID.unique(),
115
+ data: {
116
+ backupId: metadata.backupId,
117
+ databaseId: metadata.databaseId,
118
+ sizeBytes: metadata.sizeBytes,
119
+ collections: metadata.collections,
120
+ documents: metadata.documents,
121
+ format: metadata.format,
122
+ status: metadata.status,
123
+ error: metadata.error
124
+ }
125
+ });
126
+ logger.info("Recorded backup metadata", {
127
+ backupId: metadata.backupId,
128
+ databaseId: metadata.databaseId,
129
+ format: metadata.format
130
+ });
131
+ return result.data;
132
+ }
133
+ /**
134
+ * Lists all backups for a database, sorted by creation date (newest first)
135
+ */
136
+ export async function listBackups(db, databaseId) {
137
+ try {
138
+ const result = await db.listRows({
139
+ databaseId,
140
+ tableId: BACKUP_TABLE_ID,
141
+ queries: [
142
+ Query.orderDesc("$createdAt"),
143
+ Query.limit(100) // Limit to last 100 backups
144
+ ]
145
+ });
146
+ return (result.rows || []);
147
+ }
148
+ catch (error) {
149
+ // Table might not exist yet
150
+ logger.debug("No backup tracking table found", { databaseId });
151
+ return [];
152
+ }
153
+ }
154
+ /**
155
+ * Gets the most recent backup for a database
156
+ */
157
+ export async function getLastBackup(db, databaseId) {
158
+ try {
159
+ const result = await db.listRows({
160
+ databaseId,
161
+ tableId: BACKUP_TABLE_ID,
162
+ queries: [
163
+ Query.orderDesc("$createdAt"),
164
+ Query.limit(1)
165
+ ]
166
+ });
167
+ if (result.rows && result.rows.length > 0) {
168
+ return result.rows[0];
169
+ }
170
+ return null;
171
+ }
172
+ catch (error) {
173
+ logger.debug("No backup found or table doesn't exist", { databaseId });
174
+ return null;
175
+ }
176
+ }
@@ -0,0 +1,75 @@
1
+ export interface DestructiveOperationOptions {
2
+ operation: string;
3
+ targets: string[];
4
+ consequences?: string[];
5
+ requireExplicitConfirmation?: boolean;
6
+ confirmationText?: string;
7
+ skipConfirmation?: boolean;
8
+ }
9
+ export interface BackupPromptOptions {
10
+ operation: string;
11
+ targets: string[];
12
+ recommendBackup?: boolean;
13
+ backupMessage?: string;
14
+ }
15
+ export declare class ConfirmationDialogs {
16
+ /**
17
+ * Shows a confirmation dialog for destructive operations
18
+ */
19
+ static confirmDestructiveOperation(options: DestructiveOperationOptions): Promise<boolean>;
20
+ /**
21
+ * Prompts user about creating a backup before a destructive operation
22
+ */
23
+ static promptForBackup(options: BackupPromptOptions): Promise<'yes' | 'no' | 'skip'>;
24
+ /**
25
+ * Shows a final confirmation before proceeding with an operation
26
+ */
27
+ static finalConfirmation(operation: string, details?: string[]): Promise<boolean>;
28
+ /**
29
+ * Specialized confirmation for database wiping
30
+ */
31
+ static confirmDatabaseWipe(databaseNames: string[], options?: {
32
+ includeStorage?: boolean;
33
+ includeUsers?: boolean;
34
+ skipConfirmation?: boolean;
35
+ }): Promise<boolean>;
36
+ /**
37
+ * Specialized confirmation for collection wiping
38
+ */
39
+ static confirmCollectionWipe(databaseName: string, collectionNames: string[], options?: {
40
+ skipConfirmation?: boolean;
41
+ }): Promise<boolean>;
42
+ /**
43
+ * Specialized confirmation for function deployment
44
+ */
45
+ static confirmFunctionDeployment(functionNames: string[], options?: {
46
+ isProduction?: boolean;
47
+ hasBreakingChanges?: boolean;
48
+ skipConfirmation?: boolean;
49
+ }): Promise<boolean>;
50
+ /**
51
+ * Shows operation summary and asks for final confirmation
52
+ */
53
+ static showOperationSummary(title: string, summary: Record<string, string | number | string[]>, options?: {
54
+ confirmationRequired?: boolean;
55
+ warningMessage?: string;
56
+ }): Promise<boolean>;
57
+ /**
58
+ * Interactive selection with confirmation
59
+ */
60
+ static selectWithConfirmation<T>(items: T[], options: {
61
+ message: string;
62
+ displayProperty?: keyof T;
63
+ multiSelect?: boolean;
64
+ confirmMessage?: string;
65
+ validator?: (selection: T[]) => string | true;
66
+ }): Promise<T[]>;
67
+ /**
68
+ * Confirms overwriting an existing file or directory
69
+ */
70
+ static confirmOverwrite(target: string): Promise<boolean>;
71
+ /**
72
+ * Confirms removal of a file
73
+ */
74
+ static confirmRemoval(target: string): Promise<boolean>;
75
+ }