@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,131 @@
1
+ import { z } from "zod";
2
+ import type { ImportDef } from "@njdamstra/appwrite-utils";
3
+ export declare const YamlImportConfigSchema: z.ZodObject<{
4
+ source: z.ZodObject<{
5
+ file: z.ZodString;
6
+ basePath: z.ZodOptional<z.ZodString>;
7
+ type: z.ZodDefault<z.ZodEnum<{
8
+ json: "json";
9
+ csv: "csv";
10
+ yaml: "yaml";
11
+ }>>;
12
+ }, z.core.$strip>;
13
+ target: z.ZodObject<{
14
+ collection: z.ZodString;
15
+ type: z.ZodDefault<z.ZodEnum<{
16
+ create: "create";
17
+ update: "update";
18
+ }>>;
19
+ primaryKey: z.ZodDefault<z.ZodString>;
20
+ createUsers: z.ZodDefault<z.ZodBoolean>;
21
+ }, z.core.$strip>;
22
+ mapping: z.ZodObject<{
23
+ attributes: z.ZodArray<z.ZodObject<{
24
+ oldKey: z.ZodOptional<z.ZodString>;
25
+ oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ targetKey: z.ZodString;
27
+ valueToSet: z.ZodOptional<z.ZodAny>;
28
+ fileData: z.ZodOptional<z.ZodObject<{
29
+ path: z.ZodString;
30
+ name: z.ZodString;
31
+ }, z.core.$strip>>;
32
+ converters: z.ZodDefault<z.ZodArray<z.ZodString>>;
33
+ validation: z.ZodDefault<z.ZodArray<z.ZodObject<{
34
+ rule: z.ZodString;
35
+ params: z.ZodArray<z.ZodString>;
36
+ }, z.core.$strip>>>;
37
+ afterImport: z.ZodDefault<z.ZodArray<z.ZodObject<{
38
+ action: z.ZodString;
39
+ params: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
40
+ }, z.core.$strip>>>;
41
+ }, z.core.$strip>>;
42
+ relationships: z.ZodDefault<z.ZodArray<z.ZodObject<{
43
+ sourceField: z.ZodString;
44
+ targetField: z.ZodString;
45
+ targetCollection: z.ZodString;
46
+ fieldToSet: z.ZodOptional<z.ZodString>;
47
+ targetFieldToMatch: z.ZodOptional<z.ZodString>;
48
+ }, z.core.$strip>>>;
49
+ }, z.core.$strip>;
50
+ options: z.ZodDefault<z.ZodObject<{
51
+ batchSize: z.ZodDefault<z.ZodNumber>;
52
+ skipValidation: z.ZodDefault<z.ZodBoolean>;
53
+ dryRun: z.ZodDefault<z.ZodBoolean>;
54
+ continueOnError: z.ZodDefault<z.ZodBoolean>;
55
+ updateMapping: z.ZodOptional<z.ZodObject<{
56
+ originalIdField: z.ZodString;
57
+ targetField: z.ZodString;
58
+ }, z.core.$strip>>;
59
+ }, z.core.$strip>>;
60
+ }, z.core.$strip>;
61
+ export type YamlImportConfig = z.infer<typeof YamlImportConfigSchema>;
62
+ /**
63
+ * Service for loading and converting YAML import configurations.
64
+ * Integrates with existing .appwrite YAML structure while providing
65
+ * enhanced import configuration capabilities.
66
+ */
67
+ export declare class YamlImportConfigLoader {
68
+ private appwriteFolderPath;
69
+ constructor(appwriteFolderPath: string);
70
+ /**
71
+ * Loads a YAML import configuration file.
72
+ *
73
+ * @param configPath - Path to the YAML config file relative to .appwrite/import/
74
+ * @returns Parsed and validated YAML import configuration
75
+ */
76
+ loadImportConfig(configPath: string): Promise<YamlImportConfig>;
77
+ /**
78
+ * Loads all import configurations from the .appwrite/import directory.
79
+ *
80
+ * @returns Map of collection names to their import configurations
81
+ */
82
+ loadAllImportConfigs(): Promise<Map<string, YamlImportConfig[]>>;
83
+ /**
84
+ * Converts YAML import configuration to legacy ImportDef format.
85
+ * Maintains compatibility with existing import system.
86
+ *
87
+ * @param yamlConfig - YAML import configuration
88
+ * @returns Legacy ImportDef object
89
+ */
90
+ convertToImportDef(yamlConfig: YamlImportConfig): ImportDef;
91
+ /**
92
+ * Generates a template YAML import configuration.
93
+ * Useful for getting started with YAML-based imports.
94
+ * Supports both collection and table terminology.
95
+ *
96
+ * @param collectionName - Name of the collection
97
+ * @param sourceFile - Source data file name
98
+ * @param useTableTerminology - Whether to use table terminology
99
+ * @returns YAML configuration template
100
+ */
101
+ generateTemplate(collectionName: string, sourceFile: string, useTableTerminology?: boolean): string;
102
+ /**
103
+ * Creates the import directory structure if it doesn't exist.
104
+ * Sets up the recommended directory layout for YAML import configurations.
105
+ */
106
+ createImportStructure(): Promise<void>;
107
+ /**
108
+ * Validates import configuration against collection schema.
109
+ * Ensures that all target keys exist as attributes in the collection.
110
+ *
111
+ * @param yamlConfig - YAML import configuration
112
+ * @param collectionAttributes - Collection attribute definitions
113
+ * @returns Validation errors (empty if valid)
114
+ */
115
+ validateAgainstCollection(yamlConfig: YamlImportConfig, collectionAttributes: any[]): string[];
116
+ /**
117
+ * Gets statistics about import configurations.
118
+ *
119
+ * @param configs - Map of collection configurations
120
+ * @returns Statistics object
121
+ */
122
+ getStatistics(configs: Map<string, YamlImportConfig[]>): {
123
+ totalConfigurations: number;
124
+ collectionsWithConfigs: number;
125
+ totalAttributeMappings: number;
126
+ totalRelationshipMappings: number;
127
+ configsByType: {
128
+ [type: string]: number;
129
+ };
130
+ };
131
+ }
@@ -0,0 +1,383 @@
1
+ import { z } from "zod";
2
+ import path from "path";
3
+ import fs from "fs";
4
+ import yaml from "js-yaml";
5
+ import { logger } from "../../shared/logging.js";
6
+ // YAML Import Configuration Schema
7
+ export const YamlImportConfigSchema = z.object({
8
+ source: z.object({
9
+ file: z.string().describe("Path to the data file relative to .appwrite directory"),
10
+ basePath: z.string().optional().describe("JSON path to the data array (e.g., 'RECORDS')"),
11
+ type: z.enum(["json", "csv", "yaml"]).default("json").describe("Source file type"),
12
+ }),
13
+ target: z.object({
14
+ collection: z.string().describe("Name of the target collection"),
15
+ type: z.enum(["create", "update"]).default("create").describe("Import operation type"),
16
+ primaryKey: z.string().default("id").describe("Primary key field name in source data"),
17
+ createUsers: z.boolean().default(false).describe("Whether to create user accounts"),
18
+ }),
19
+ mapping: z.object({
20
+ attributes: z.array(z.object({
21
+ // Source mapping
22
+ oldKey: z.string().optional().describe("Source field name"),
23
+ oldKeys: z.array(z.string()).optional().describe("Multiple source field names"),
24
+ // Target mapping
25
+ targetKey: z.string().describe("Target field name in collection"),
26
+ valueToSet: z.any().optional().describe("Static value to set"),
27
+ // File handling
28
+ fileData: z.object({
29
+ path: z.string().describe("File path template (supports {field} placeholders)"),
30
+ name: z.string().describe("File name template (supports {field} placeholders)"),
31
+ }).optional(),
32
+ // Data transformation
33
+ converters: z.array(z.string()).default([]).describe("Converter function names"),
34
+ // Validation
35
+ validation: z.array(z.object({
36
+ rule: z.string().describe("Validation rule name"),
37
+ params: z.array(z.string()).describe("Validation parameters with {field} placeholders"),
38
+ })).default([]).describe("Validation rules"),
39
+ // Post-import actions
40
+ afterImport: z.array(z.object({
41
+ action: z.string().describe("Action name"),
42
+ params: z.array(z.union([z.string(), z.record(z.string(), z.any())])).describe("Action parameters"),
43
+ })).default([]).describe("Actions to execute after import"),
44
+ })).describe("Field mapping configuration"),
45
+ relationships: z.array(z.object({
46
+ sourceField: z.string().describe("Source field containing old ID"),
47
+ targetField: z.string().describe("Target field to set new ID"),
48
+ targetCollection: z.string().describe("Collection to find new ID in"),
49
+ fieldToSet: z.string().optional().describe("Field to set (defaults to sourceField)"),
50
+ targetFieldToMatch: z.string().optional().describe("Field to match in target collection"),
51
+ })).default([]).describe("Relationship mappings"),
52
+ }),
53
+ options: z.object({
54
+ batchSize: z.number().min(1).max(1000).default(50).describe("Batch size for processing"),
55
+ skipValidation: z.boolean().default(false).describe("Skip data validation"),
56
+ dryRun: z.boolean().default(false).describe("Perform dry run without actual import"),
57
+ continueOnError: z.boolean().default(true).describe("Continue processing if individual items fail"),
58
+ updateMapping: z.object({
59
+ originalIdField: z.string().describe("Field in source data for matching"),
60
+ targetField: z.string().describe("Field in collection to match against"),
61
+ }).optional().describe("Configuration for update operations"),
62
+ }).default(() => ({
63
+ batchSize: 50,
64
+ skipValidation: false,
65
+ dryRun: false,
66
+ continueOnError: true
67
+ })),
68
+ });
69
+ /**
70
+ * Service for loading and converting YAML import configurations.
71
+ * Integrates with existing .appwrite YAML structure while providing
72
+ * enhanced import configuration capabilities.
73
+ */
74
+ export class YamlImportConfigLoader {
75
+ appwriteFolderPath;
76
+ constructor(appwriteFolderPath) {
77
+ this.appwriteFolderPath = appwriteFolderPath;
78
+ }
79
+ /**
80
+ * Loads a YAML import configuration file.
81
+ *
82
+ * @param configPath - Path to the YAML config file relative to .appwrite/import/
83
+ * @returns Parsed and validated YAML import configuration
84
+ */
85
+ async loadImportConfig(configPath) {
86
+ const fullPath = path.resolve(this.appwriteFolderPath, "import", configPath);
87
+ if (!fs.existsSync(fullPath)) {
88
+ throw new Error(`Import configuration file not found: ${fullPath}`);
89
+ }
90
+ try {
91
+ const yamlContent = fs.readFileSync(fullPath, "utf8");
92
+ const rawConfig = yaml.load(yamlContent);
93
+ // Validate against schema
94
+ const validatedConfig = YamlImportConfigSchema.parse(rawConfig);
95
+ logger.info(`Loaded import configuration: ${configPath}`);
96
+ return validatedConfig;
97
+ }
98
+ catch (error) {
99
+ if (error instanceof z.ZodError) {
100
+ const errorMessages = error.issues.map(err => `${err.path.join('.')}: ${err.message}`);
101
+ throw new Error(`Invalid import configuration in ${configPath}:\n${errorMessages.join('\n')}`);
102
+ }
103
+ throw new Error(`Failed to load import configuration ${configPath}: ${error}`);
104
+ }
105
+ }
106
+ /**
107
+ * Loads all import configurations from the .appwrite/import directory.
108
+ *
109
+ * @returns Map of collection names to their import configurations
110
+ */
111
+ async loadAllImportConfigs() {
112
+ const importDir = path.join(this.appwriteFolderPath, "import");
113
+ const configs = new Map();
114
+ if (!fs.existsSync(importDir)) {
115
+ logger.info("No import directory found, skipping YAML import configurations");
116
+ return configs;
117
+ }
118
+ try {
119
+ const files = fs.readdirSync(importDir, { withFileTypes: true });
120
+ for (const file of files) {
121
+ if (file.isFile() && file.name.endsWith('.yaml')) {
122
+ try {
123
+ const config = await this.loadImportConfig(file.name);
124
+ const collectionName = config.target.collection;
125
+ if (!configs.has(collectionName)) {
126
+ configs.set(collectionName, []);
127
+ }
128
+ configs.get(collectionName).push(config);
129
+ }
130
+ catch (error) {
131
+ logger.error(`Failed to load import config ${file.name}:`, error);
132
+ }
133
+ }
134
+ }
135
+ logger.info(`Loaded import configurations for ${configs.size} collections`);
136
+ return configs;
137
+ }
138
+ catch (error) {
139
+ logger.error("Failed to scan import directory:", error);
140
+ return configs;
141
+ }
142
+ }
143
+ /**
144
+ * Converts YAML import configuration to legacy ImportDef format.
145
+ * Maintains compatibility with existing import system.
146
+ *
147
+ * @param yamlConfig - YAML import configuration
148
+ * @returns Legacy ImportDef object
149
+ */
150
+ convertToImportDef(yamlConfig) {
151
+ const attributeMappings = yamlConfig.mapping.attributes.map(attr => ({
152
+ oldKey: attr.oldKey,
153
+ oldKeys: attr.oldKeys,
154
+ targetKey: attr.targetKey,
155
+ valueToSet: attr.valueToSet,
156
+ fileData: attr.fileData,
157
+ converters: attr.converters,
158
+ validationActions: attr.validation.map(v => ({
159
+ action: v.rule,
160
+ params: v.params,
161
+ })),
162
+ postImportActions: attr.afterImport.map(a => ({
163
+ action: a.action,
164
+ params: a.params,
165
+ })),
166
+ }));
167
+ const idMappings = yamlConfig.mapping.relationships.map(rel => ({
168
+ sourceField: rel.sourceField,
169
+ targetField: rel.targetField,
170
+ targetCollection: rel.targetCollection,
171
+ fieldToSet: rel.fieldToSet,
172
+ targetFieldToMatch: rel.targetFieldToMatch,
173
+ }));
174
+ return {
175
+ type: yamlConfig.target.type,
176
+ filePath: yamlConfig.source.file,
177
+ basePath: yamlConfig.source.basePath,
178
+ primaryKeyField: yamlConfig.target.primaryKey,
179
+ createUsers: yamlConfig.target.createUsers,
180
+ attributeMappings,
181
+ idMappings: idMappings.length > 0 ? idMappings : undefined,
182
+ updateMapping: yamlConfig.options.updateMapping,
183
+ };
184
+ }
185
+ /**
186
+ * Generates a template YAML import configuration.
187
+ * Useful for getting started with YAML-based imports.
188
+ * Supports both collection and table terminology.
189
+ *
190
+ * @param collectionName - Name of the collection
191
+ * @param sourceFile - Source data file name
192
+ * @param useTableTerminology - Whether to use table terminology
193
+ * @returns YAML configuration template
194
+ */
195
+ generateTemplate(collectionName, sourceFile, useTableTerminology = false) {
196
+ const entityType = useTableTerminology ? 'table' : 'collection';
197
+ const template = {
198
+ source: {
199
+ file: `importData/${sourceFile}`,
200
+ basePath: "RECORDS",
201
+ type: "json"
202
+ },
203
+ target: {
204
+ [entityType]: collectionName,
205
+ type: "create",
206
+ primaryKey: "id",
207
+ createUsers: false
208
+ },
209
+ mapping: {
210
+ attributes: [
211
+ {
212
+ oldKey: "id",
213
+ targetKey: "id",
214
+ converters: ["anyToString"]
215
+ },
216
+ {
217
+ oldKey: "name",
218
+ targetKey: "name",
219
+ converters: ["anyToString"],
220
+ validation: [
221
+ {
222
+ rule: "required",
223
+ params: ["{name}"]
224
+ }
225
+ ]
226
+ },
227
+ {
228
+ oldKey: "avatar_url",
229
+ targetKey: "avatar",
230
+ fileData: {
231
+ path: "{avatar_url}",
232
+ name: "{name}_avatar"
233
+ },
234
+ afterImport: [
235
+ {
236
+ action: "createFileAndUpdateField",
237
+ params: ["{dbId}", "{collId}", "{docId}", "avatar", "{bucketId}", "{filePath}", "{fileName}"]
238
+ }
239
+ ]
240
+ }
241
+ ],
242
+ relationships: [
243
+ {
244
+ sourceField: "user_id",
245
+ targetField: "userId",
246
+ [useTableTerminology ? 'targetTable' : 'targetCollection']: "Users"
247
+ }
248
+ ]
249
+ },
250
+ options: {
251
+ batchSize: 50,
252
+ skipValidation: false,
253
+ dryRun: false,
254
+ continueOnError: true
255
+ }
256
+ };
257
+ return yaml.dump(template, {
258
+ indent: 2,
259
+ lineWidth: 120,
260
+ sortKeys: false,
261
+ });
262
+ }
263
+ /**
264
+ * Creates the import directory structure if it doesn't exist.
265
+ * Sets up the recommended directory layout for YAML import configurations.
266
+ */
267
+ async createImportStructure() {
268
+ const importDir = path.join(this.appwriteFolderPath, "import");
269
+ const collectionsDir = path.join(importDir, "collections");
270
+ const templatesDir = path.join(importDir, "templates");
271
+ // Create directories
272
+ for (const dir of [importDir, collectionsDir, templatesDir]) {
273
+ if (!fs.existsSync(dir)) {
274
+ fs.mkdirSync(dir, { recursive: true });
275
+ logger.info(`Created directory: ${dir}`);
276
+ }
277
+ }
278
+ // Create README file
279
+ const readmePath = path.join(importDir, "README.md");
280
+ if (!fs.existsSync(readmePath)) {
281
+ const readmeContent = `# Import Configurations
282
+
283
+ This directory contains YAML-based import configurations for the Appwrite Utils CLI.
284
+
285
+ ## Structure
286
+
287
+ - \`collections/\` - Collection-specific import configurations
288
+ - \`templates/\` - Template configurations for reference
289
+ - \`*.yaml\` - Individual import configuration files
290
+
291
+ ## Configuration Format
292
+
293
+ Each YAML file defines:
294
+ - **source**: Data source configuration (file, type, basePath)
295
+ - **target**: Target collection and operation type
296
+ - **mapping**: Field mappings, transformations, and relationships
297
+ - **options**: Import options (batch size, validation, etc.)
298
+
299
+ ## Example
300
+
301
+ \`\`\`yaml
302
+ source:
303
+ file: "importData/users.json"
304
+ basePath: "RECORDS"
305
+ type: "json"
306
+
307
+ target:
308
+ collection: "Users"
309
+ type: "create"
310
+ primaryKey: "id"
311
+ createUsers: true
312
+
313
+ mapping:
314
+ attributes:
315
+ - oldKey: "user_id"
316
+ targetKey: "userId"
317
+ converters: ["anyToString"]
318
+ - oldKey: "profile_image"
319
+ targetKey: "avatar"
320
+ fileData:
321
+ path: "assets/profiles/{user_id}.jpg"
322
+ name: "{firstName}_{lastName}_avatar"
323
+
324
+ options:
325
+ batchSize: 50
326
+ continueOnError: true
327
+ \`\`\`
328
+
329
+ ## Usage
330
+
331
+ The CLI will automatically detect and load YAML import configurations during the import process.
332
+ `;
333
+ fs.writeFileSync(readmePath, readmeContent);
334
+ logger.info(`Created README: ${readmePath}`);
335
+ }
336
+ }
337
+ /**
338
+ * Validates import configuration against collection schema.
339
+ * Ensures that all target keys exist as attributes in the collection.
340
+ *
341
+ * @param yamlConfig - YAML import configuration
342
+ * @param collectionAttributes - Collection attribute definitions
343
+ * @returns Validation errors (empty if valid)
344
+ */
345
+ validateAgainstCollection(yamlConfig, collectionAttributes) {
346
+ const errors = [];
347
+ const attributeKeys = new Set(collectionAttributes.map(attr => attr.key));
348
+ for (const mapping of yamlConfig.mapping.attributes) {
349
+ if (!attributeKeys.has(mapping.targetKey)) {
350
+ errors.push(`Target key '${mapping.targetKey}' not found in collection attributes`);
351
+ }
352
+ }
353
+ return errors;
354
+ }
355
+ /**
356
+ * Gets statistics about import configurations.
357
+ *
358
+ * @param configs - Map of collection configurations
359
+ * @returns Statistics object
360
+ */
361
+ getStatistics(configs) {
362
+ let totalConfigurations = 0;
363
+ let totalAttributeMappings = 0;
364
+ let totalRelationshipMappings = 0;
365
+ const configsByType = {};
366
+ for (const [collectionName, collectionConfigs] of configs.entries()) {
367
+ totalConfigurations += collectionConfigs.length;
368
+ for (const config of collectionConfigs) {
369
+ totalAttributeMappings += config.mapping.attributes.length;
370
+ totalRelationshipMappings += config.mapping.relationships.length;
371
+ const type = config.target.type;
372
+ configsByType[type] = (configsByType[type] || 0) + 1;
373
+ }
374
+ }
375
+ return {
376
+ totalConfigurations,
377
+ collectionsWithConfigs: configs.size,
378
+ totalAttributeMappings,
379
+ totalRelationshipMappings,
380
+ configsByType,
381
+ };
382
+ }
383
+ }
@@ -0,0 +1,93 @@
1
+ import type { CollectionCreate, ImportDef } from "@njdamstra/appwrite-utils";
2
+ /**
3
+ * Integration service that bridges YAML import configurations with the existing import system.
4
+ * Provides seamless integration between new YAML configs and legacy TypeScript collection definitions.
5
+ */
6
+ export declare class YamlImportIntegration {
7
+ private configLoader;
8
+ private appwriteFolderPath;
9
+ constructor(appwriteFolderPath: string);
10
+ /**
11
+ * Initializes the YAML import system.
12
+ * Creates necessary directories, schemas, and example files.
13
+ */
14
+ initialize(): Promise<void>;
15
+ /**
16
+ * Merges YAML import configurations with existing collection definitions.
17
+ * Allows collections to have both TypeScript and YAML import definitions.
18
+ *
19
+ * @param collections - Existing collection configurations
20
+ * @returns Collections with merged import definitions
21
+ */
22
+ mergeWithCollections(collections: CollectionCreate[]): Promise<CollectionCreate[]>;
23
+ /**
24
+ * Validates YAML import configurations against existing collection schemas.
25
+ * Ensures that all target fields exist in the collection definitions.
26
+ *
27
+ * @param collections - Collection definitions to validate against
28
+ * @returns Validation results with errors and warnings
29
+ */
30
+ validateConfigurations(collections: CollectionCreate[]): Promise<{
31
+ isValid: boolean;
32
+ errors: string[];
33
+ warnings: string[];
34
+ }>;
35
+ /**
36
+ * Validates that source files exist for import configurations.
37
+ */
38
+ private validateSourceFiles;
39
+ /**
40
+ * Validates that converter functions are available.
41
+ */
42
+ private validateConverters;
43
+ /**
44
+ * Generates a YAML import configuration from an existing ImportDef.
45
+ * Useful for migrating TypeScript configurations to YAML.
46
+ * Supports both collection and table terminology.
47
+ *
48
+ * @param importDef - Existing ImportDef to convert
49
+ * @param collectionName - Name of the collection
50
+ * @param useTableTerminology - Whether to use table terminology
51
+ * @returns YAML configuration string
52
+ */
53
+ convertImportDefToYaml(importDef: ImportDef, collectionName: string, useTableTerminology?: boolean): string;
54
+ /**
55
+ * Exports existing TypeScript import configurations to YAML files.
56
+ * Helps migrate from TypeScript to YAML-based configurations.
57
+ * Supports both collection and table terminology.
58
+ *
59
+ * @param collections - Collections with existing import definitions
60
+ * @param useTableTerminology - Whether to use table terminology
61
+ */
62
+ exportToYaml(collections: CollectionCreate[], useTableTerminology?: boolean): Promise<void>;
63
+ /**
64
+ * Gets statistics about YAML import configurations.
65
+ */
66
+ getStatistics(): Promise<{
67
+ hasYamlConfigs: boolean;
68
+ totalConfigurations: number;
69
+ collectionsWithConfigs: number;
70
+ configurationsByType: {
71
+ [type: string]: number;
72
+ };
73
+ totalAttributeMappings: number;
74
+ totalRelationshipMappings: number;
75
+ }>;
76
+ /**
77
+ * Creates a new YAML import configuration from a template.
78
+ * Supports both collection and table terminology.
79
+ *
80
+ * @param collectionName - Name of the collection
81
+ * @param sourceFile - Source data file name
82
+ * @param useTableTerminology - Whether to use table terminology
83
+ * @param outputPath - Output file path (optional)
84
+ */
85
+ createFromTemplate(collectionName: string, sourceFile: string, useTableTerminology?: boolean, outputPath?: string): Promise<string>;
86
+ /**
87
+ * Checks if YAML import system is properly set up.
88
+ */
89
+ isSetupComplete(): Promise<{
90
+ isComplete: boolean;
91
+ missingComponents: string[];
92
+ }>;
93
+ }