@njdamstra/appwrite-utils-cli 1.8.9 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CONFIG_TODO.md +1189 -0
  3. package/SELECTION_DIALOGS.md +146 -0
  4. package/SERVICE_IMPLEMENTATION_REPORT.md +462 -0
  5. package/dist/adapters/index.d.ts +7 -8
  6. package/dist/adapters/index.js +7 -9
  7. package/dist/backups/operations/bucketBackup.js +2 -2
  8. package/dist/backups/operations/collectionBackup.d.ts +1 -1
  9. package/dist/backups/operations/collectionBackup.js +3 -3
  10. package/dist/backups/operations/comprehensiveBackup.d.ts +1 -1
  11. package/dist/backups/operations/comprehensiveBackup.js +2 -2
  12. package/dist/backups/tracking/centralizedTracking.d.ts +1 -1
  13. package/dist/backups/tracking/centralizedTracking.js +2 -2
  14. package/dist/cli/commands/configCommands.js +51 -7
  15. package/dist/cli/commands/databaseCommands.d.ts +1 -0
  16. package/dist/cli/commands/databaseCommands.js +119 -9
  17. package/dist/cli/commands/functionCommands.js +3 -3
  18. package/dist/cli/commands/importFileCommands.d.ts +7 -0
  19. package/dist/cli/commands/importFileCommands.js +674 -0
  20. package/dist/cli/commands/schemaCommands.js +3 -3
  21. package/dist/cli/commands/storageCommands.js +2 -3
  22. package/dist/cli/commands/transferCommands.js +3 -5
  23. package/dist/collections/attributes.d.ts +1 -1
  24. package/dist/collections/attributes.js +85 -35
  25. package/dist/collections/indexes.js +2 -4
  26. package/dist/collections/methods.d.ts +1 -1
  27. package/dist/collections/methods.js +111 -192
  28. package/dist/collections/tableOperations.d.ts +1 -0
  29. package/dist/collections/tableOperations.js +90 -23
  30. package/dist/collections/transferOperations.d.ts +1 -1
  31. package/dist/collections/transferOperations.js +3 -4
  32. package/dist/collections/wipeOperations.d.ts +4 -3
  33. package/dist/collections/wipeOperations.js +112 -39
  34. package/dist/databases/methods.js +2 -2
  35. package/dist/databases/setup.js +2 -2
  36. package/dist/examples/yamlTerminologyExample.js +2 -2
  37. package/dist/functions/deployments.d.ts +1 -1
  38. package/dist/functions/deployments.js +5 -5
  39. package/dist/functions/fnConfigDiscovery.js +2 -2
  40. package/dist/functions/methods.js +16 -4
  41. package/dist/init.js +1 -1
  42. package/dist/interactiveCLI.d.ts +6 -1
  43. package/dist/interactiveCLI.js +64 -10
  44. package/dist/main.js +130 -177
  45. package/dist/migrations/afterImportActions.js +2 -3
  46. package/dist/migrations/appwriteToX.d.ts +97 -1
  47. package/dist/migrations/appwriteToX.js +9 -7
  48. package/dist/migrations/comprehensiveTransfer.js +3 -5
  49. package/dist/migrations/dataLoader.d.ts +194 -2
  50. package/dist/migrations/dataLoader.js +2 -5
  51. package/dist/migrations/importController.js +3 -4
  52. package/dist/migrations/importDataActions.js +3 -3
  53. package/dist/migrations/relationships.js +1 -2
  54. package/dist/migrations/services/DataTransformationService.js +2 -2
  55. package/dist/migrations/services/FileHandlerService.js +1 -1
  56. package/dist/migrations/services/ImportOrchestrator.js +4 -4
  57. package/dist/migrations/services/RateLimitManager.js +1 -1
  58. package/dist/migrations/services/RelationshipResolver.js +1 -1
  59. package/dist/migrations/services/UserMappingService.js +1 -1
  60. package/dist/migrations/services/ValidationService.js +1 -1
  61. package/dist/migrations/transfer.d.ts +8 -4
  62. package/dist/migrations/transfer.js +106 -55
  63. package/dist/migrations/yaml/YamlImportConfigLoader.js +1 -1
  64. package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
  65. package/dist/migrations/yaml/generateImportSchemas.js +1 -1
  66. package/dist/setupCommands.d.ts +1 -1
  67. package/dist/setupCommands.js +5 -6
  68. package/dist/setupController.js +1 -1
  69. package/dist/shared/backupTracking.d.ts +1 -1
  70. package/dist/shared/backupTracking.js +2 -2
  71. package/dist/shared/confirmationDialogs.js +1 -1
  72. package/dist/shared/migrationHelpers.d.ts +1 -1
  73. package/dist/shared/migrationHelpers.js +3 -3
  74. package/dist/shared/operationQueue.d.ts +1 -1
  75. package/dist/shared/operationQueue.js +2 -3
  76. package/dist/shared/operationsTable.d.ts +1 -1
  77. package/dist/shared/operationsTable.js +2 -2
  78. package/dist/shared/progressManager.js +1 -1
  79. package/dist/shared/selectionDialogs.js +9 -8
  80. package/dist/storage/methods.js +4 -4
  81. package/dist/storage/schemas.d.ts +386 -2
  82. package/dist/tables/indexManager.d.ts +65 -0
  83. package/dist/tables/indexManager.js +294 -0
  84. package/dist/types.d.ts +2 -2
  85. package/dist/types.js +1 -1
  86. package/dist/users/methods.js +2 -3
  87. package/dist/utils/configMigration.js +1 -1
  88. package/dist/utils/index.d.ts +1 -1
  89. package/dist/utils/index.js +1 -1
  90. package/dist/utils/loadConfigs.d.ts +2 -2
  91. package/dist/utils/loadConfigs.js +6 -7
  92. package/dist/utils/setupFiles.js +5 -7
  93. package/dist/utilsController.d.ts +15 -8
  94. package/dist/utilsController.js +57 -28
  95. package/package.json +8 -4
  96. package/src/adapters/index.ts +8 -34
  97. package/src/backups/operations/bucketBackup.ts +2 -2
  98. package/src/backups/operations/collectionBackup.ts +4 -4
  99. package/src/backups/operations/comprehensiveBackup.ts +3 -3
  100. package/src/backups/tracking/centralizedTracking.ts +3 -3
  101. package/src/cli/commands/configCommands.ts +72 -8
  102. package/src/cli/commands/databaseCommands.ts +161 -9
  103. package/src/cli/commands/functionCommands.ts +4 -3
  104. package/src/cli/commands/importFileCommands.ts +815 -0
  105. package/src/cli/commands/schemaCommands.ts +3 -3
  106. package/src/cli/commands/storageCommands.ts +2 -3
  107. package/src/cli/commands/transferCommands.ts +3 -6
  108. package/src/collections/attributes.ts +155 -39
  109. package/src/collections/indexes.ts +5 -7
  110. package/src/collections/methods.ts +115 -150
  111. package/src/collections/tableOperations.ts +92 -21
  112. package/src/collections/transferOperations.ts +4 -5
  113. package/src/collections/wipeOperations.ts +154 -51
  114. package/src/databases/methods.ts +2 -2
  115. package/src/databases/setup.ts +2 -2
  116. package/src/examples/yamlTerminologyExample.ts +2 -2
  117. package/src/functions/deployments.ts +6 -5
  118. package/src/functions/fnConfigDiscovery.ts +2 -2
  119. package/src/functions/methods.ts +19 -6
  120. package/src/init.ts +1 -1
  121. package/src/interactiveCLI.ts +78 -13
  122. package/src/main.ts +143 -287
  123. package/src/migrations/afterImportActions.ts +2 -3
  124. package/src/migrations/appwriteToX.ts +12 -8
  125. package/src/migrations/comprehensiveTransfer.ts +6 -6
  126. package/src/migrations/dataLoader.ts +2 -5
  127. package/src/migrations/importController.ts +3 -4
  128. package/src/migrations/importDataActions.ts +3 -3
  129. package/src/migrations/relationships.ts +1 -2
  130. package/src/migrations/services/DataTransformationService.ts +2 -2
  131. package/src/migrations/services/FileHandlerService.ts +1 -1
  132. package/src/migrations/services/ImportOrchestrator.ts +4 -4
  133. package/src/migrations/services/RateLimitManager.ts +1 -1
  134. package/src/migrations/services/RelationshipResolver.ts +1 -1
  135. package/src/migrations/services/UserMappingService.ts +1 -1
  136. package/src/migrations/services/ValidationService.ts +1 -1
  137. package/src/migrations/transfer.ts +126 -83
  138. package/src/migrations/yaml/YamlImportConfigLoader.ts +1 -1
  139. package/src/migrations/yaml/YamlImportIntegration.ts +2 -2
  140. package/src/migrations/yaml/generateImportSchemas.ts +1 -1
  141. package/src/setupCommands.ts +5 -6
  142. package/src/setupController.ts +1 -1
  143. package/src/shared/backupTracking.ts +3 -3
  144. package/src/shared/confirmationDialogs.ts +1 -1
  145. package/src/shared/migrationHelpers.ts +4 -4
  146. package/src/shared/operationQueue.ts +3 -4
  147. package/src/shared/operationsTable.ts +3 -3
  148. package/src/shared/progressManager.ts +1 -1
  149. package/src/shared/selectionDialogs.ts +9 -8
  150. package/src/storage/methods.ts +4 -4
  151. package/src/tables/indexManager.ts +409 -0
  152. package/src/types.ts +2 -2
  153. package/src/users/methods.ts +2 -3
  154. package/src/utils/configMigration.ts +1 -1
  155. package/src/utils/index.ts +1 -1
  156. package/src/utils/loadConfigs.ts +15 -7
  157. package/src/utils/setupFiles.ts +5 -7
  158. package/src/utilsController.ts +86 -32
  159. package/dist/adapters/AdapterFactory.d.ts +0 -94
  160. package/dist/adapters/AdapterFactory.js +0 -405
  161. package/dist/adapters/DatabaseAdapter.d.ts +0 -233
  162. package/dist/adapters/DatabaseAdapter.js +0 -50
  163. package/dist/adapters/LegacyAdapter.d.ts +0 -50
  164. package/dist/adapters/LegacyAdapter.js +0 -612
  165. package/dist/adapters/TablesDBAdapter.d.ts +0 -45
  166. package/dist/adapters/TablesDBAdapter.js +0 -571
  167. package/dist/config/ConfigManager.d.ts +0 -445
  168. package/dist/config/ConfigManager.js +0 -625
  169. package/dist/config/configMigration.d.ts +0 -87
  170. package/dist/config/configMigration.js +0 -390
  171. package/dist/config/configValidation.d.ts +0 -66
  172. package/dist/config/configValidation.js +0 -358
  173. package/dist/config/index.d.ts +0 -8
  174. package/dist/config/index.js +0 -7
  175. package/dist/config/services/ConfigDiscoveryService.d.ts +0 -126
  176. package/dist/config/services/ConfigDiscoveryService.js +0 -374
  177. package/dist/config/services/ConfigLoaderService.d.ts +0 -129
  178. package/dist/config/services/ConfigLoaderService.js +0 -540
  179. package/dist/config/services/ConfigMergeService.d.ts +0 -208
  180. package/dist/config/services/ConfigMergeService.js +0 -308
  181. package/dist/config/services/ConfigValidationService.d.ts +0 -214
  182. package/dist/config/services/ConfigValidationService.js +0 -310
  183. package/dist/config/services/SessionAuthService.d.ts +0 -225
  184. package/dist/config/services/SessionAuthService.js +0 -456
  185. package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +0 -1
  186. package/dist/config/services/__tests__/ConfigMergeService.test.js +0 -271
  187. package/dist/config/services/index.d.ts +0 -13
  188. package/dist/config/services/index.js +0 -10
  189. package/dist/config/yamlConfig.d.ts +0 -722
  190. package/dist/config/yamlConfig.js +0 -702
  191. package/dist/functions/pathResolution.d.ts +0 -37
  192. package/dist/functions/pathResolution.js +0 -185
  193. package/dist/shared/attributeMapper.d.ts +0 -20
  194. package/dist/shared/attributeMapper.js +0 -203
  195. package/dist/shared/errorUtils.d.ts +0 -54
  196. package/dist/shared/errorUtils.js +0 -95
  197. package/dist/shared/functionManager.d.ts +0 -48
  198. package/dist/shared/functionManager.js +0 -336
  199. package/dist/shared/indexManager.d.ts +0 -24
  200. package/dist/shared/indexManager.js +0 -151
  201. package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
  202. package/dist/shared/jsonSchemaGenerator.js +0 -290
  203. package/dist/shared/logging.d.ts +0 -61
  204. package/dist/shared/logging.js +0 -116
  205. package/dist/shared/messageFormatter.d.ts +0 -39
  206. package/dist/shared/messageFormatter.js +0 -162
  207. package/dist/shared/pydanticModelGenerator.d.ts +0 -17
  208. package/dist/shared/pydanticModelGenerator.js +0 -615
  209. package/dist/shared/schemaGenerator.d.ts +0 -40
  210. package/dist/shared/schemaGenerator.js +0 -556
  211. package/dist/utils/ClientFactory.d.ts +0 -87
  212. package/dist/utils/ClientFactory.js +0 -212
  213. package/dist/utils/configDiscovery.d.ts +0 -78
  214. package/dist/utils/configDiscovery.js +0 -472
  215. package/dist/utils/constantsGenerator.d.ts +0 -31
  216. package/dist/utils/constantsGenerator.js +0 -321
  217. package/dist/utils/dataConverters.d.ts +0 -46
  218. package/dist/utils/dataConverters.js +0 -139
  219. package/dist/utils/directoryUtils.d.ts +0 -22
  220. package/dist/utils/directoryUtils.js +0 -59
  221. package/dist/utils/getClientFromConfig.d.ts +0 -39
  222. package/dist/utils/getClientFromConfig.js +0 -199
  223. package/dist/utils/helperFunctions.d.ts +0 -63
  224. package/dist/utils/helperFunctions.js +0 -156
  225. package/dist/utils/pathResolvers.d.ts +0 -53
  226. package/dist/utils/pathResolvers.js +0 -72
  227. package/dist/utils/projectConfig.d.ts +0 -119
  228. package/dist/utils/projectConfig.js +0 -171
  229. package/dist/utils/retryFailedPromises.d.ts +0 -2
  230. package/dist/utils/retryFailedPromises.js +0 -23
  231. package/dist/utils/sessionAuth.d.ts +0 -48
  232. package/dist/utils/sessionAuth.js +0 -164
  233. package/dist/utils/typeGuards.d.ts +0 -35
  234. package/dist/utils/typeGuards.js +0 -57
  235. package/dist/utils/validationRules.d.ts +0 -43
  236. package/dist/utils/validationRules.js +0 -42
  237. package/dist/utils/versionDetection.d.ts +0 -58
  238. package/dist/utils/versionDetection.js +0 -251
  239. package/dist/utils/yamlConverter.d.ts +0 -100
  240. package/dist/utils/yamlConverter.js +0 -428
  241. package/dist/utils/yamlLoader.d.ts +0 -70
  242. package/dist/utils/yamlLoader.js +0 -267
  243. package/src/adapters/AdapterFactory.ts +0 -510
  244. package/src/adapters/DatabaseAdapter.ts +0 -306
  245. package/src/adapters/LegacyAdapter.ts +0 -841
  246. package/src/adapters/TablesDBAdapter.ts +0 -773
  247. package/src/config/ConfigManager.ts +0 -808
  248. package/src/config/README.md +0 -274
  249. package/src/config/configMigration.ts +0 -575
  250. package/src/config/configValidation.ts +0 -445
  251. package/src/config/index.ts +0 -10
  252. package/src/config/services/ConfigDiscoveryService.ts +0 -463
  253. package/src/config/services/ConfigLoaderService.ts +0 -740
  254. package/src/config/services/ConfigMergeService.ts +0 -388
  255. package/src/config/services/ConfigValidationService.ts +0 -394
  256. package/src/config/services/SessionAuthService.ts +0 -565
  257. package/src/config/services/__tests__/ConfigMergeService.test.ts +0 -351
  258. package/src/config/services/index.ts +0 -29
  259. package/src/config/yamlConfig.ts +0 -761
  260. package/src/functions/pathResolution.ts +0 -227
  261. package/src/shared/attributeMapper.ts +0 -229
  262. package/src/shared/errorUtils.ts +0 -110
  263. package/src/shared/functionManager.ts +0 -525
  264. package/src/shared/indexManager.ts +0 -254
  265. package/src/shared/jsonSchemaGenerator.ts +0 -383
  266. package/src/shared/logging.ts +0 -149
  267. package/src/shared/messageFormatter.ts +0 -208
  268. package/src/shared/pydanticModelGenerator.ts +0 -618
  269. package/src/shared/schemaGenerator.ts +0 -644
  270. package/src/utils/ClientFactory.ts +0 -240
  271. package/src/utils/configDiscovery.ts +0 -557
  272. package/src/utils/constantsGenerator.ts +0 -369
  273. package/src/utils/dataConverters.ts +0 -159
  274. package/src/utils/directoryUtils.ts +0 -61
  275. package/src/utils/getClientFromConfig.ts +0 -257
  276. package/src/utils/helperFunctions.ts +0 -228
  277. package/src/utils/pathResolvers.ts +0 -81
  278. package/src/utils/projectConfig.ts +0 -299
  279. package/src/utils/retryFailedPromises.ts +0 -29
  280. package/src/utils/sessionAuth.ts +0 -230
  281. package/src/utils/typeGuards.ts +0 -65
  282. package/src/utils/validationRules.ts +0 -88
  283. package/src/utils/versionDetection.ts +0 -292
  284. package/src/utils/yamlConverter.ts +0 -542
  285. package/src/utils/yamlLoader.ts +0 -371
@@ -1,374 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { MessageFormatter } from "../../shared/messageFormatter.js";
4
- import { shouldIgnoreDirectory } from "../../utils/directoryUtils.js";
5
- /**
6
- * Service for discovering Appwrite configuration files and collection/table definitions.
7
- *
8
- * Search Priority:
9
- * 1. YAML configs (.appwrite/config.yaml, .appwrite/config.yml, etc.)
10
- * 2. TypeScript configs (appwriteConfig.ts)
11
- * 3. JSON configs (appwrite.json, appwrite.config.json)
12
- *
13
- * Features:
14
- * - Searches up directory tree (max 5 levels)
15
- * - Ignores common directories (node_modules, .git, etc.)
16
- * - Discovers both collections/ and tables/ directories
17
- * - Recursive subdirectory scanning for .appwrite folders
18
- */
19
- export class ConfigDiscoveryService {
20
- /**
21
- * YAML configuration file names to search for
22
- */
23
- YAML_FILENAMES = [
24
- ".appwrite/config.yaml",
25
- ".appwrite/config.yml",
26
- ".appwrite/appwriteConfig.yaml",
27
- ".appwrite/appwriteConfig.yml",
28
- "appwrite.yaml",
29
- "appwrite.yml",
30
- ];
31
- /**
32
- * TypeScript configuration file names to search for
33
- */
34
- TS_FILENAMES = ["appwriteConfig.ts"];
35
- /**
36
- * JSON configuration file names to search for
37
- */
38
- JSON_FILENAMES = ["appwrite.json", "appwrite.config.json"];
39
- /**
40
- * Maximum levels to search up the directory tree
41
- */
42
- MAX_SEARCH_DEPTH = 5;
43
- /**
44
- * Finds any configuration file with priority: YAML → TypeScript → JSON
45
- * @param startDir The directory to start searching from
46
- * @returns Path to the configuration file or null if not found
47
- */
48
- findConfig(startDir) {
49
- // Try YAML first (highest priority)
50
- const yamlConfig = this.findYamlConfig(startDir);
51
- if (yamlConfig) {
52
- return yamlConfig;
53
- }
54
- // Try TypeScript second
55
- const tsConfig = this.findTypeScriptConfig(startDir);
56
- if (tsConfig) {
57
- return tsConfig;
58
- }
59
- // Try JSON last (lowest priority)
60
- const jsonConfig = this.findProjectConfig(startDir);
61
- if (jsonConfig) {
62
- return jsonConfig;
63
- }
64
- return null;
65
- }
66
- /**
67
- * Finds YAML configuration files
68
- * Searches current directory, subdirectories, and parent directory
69
- * @param startDir The directory to start searching from
70
- * @returns Path to the YAML config file or null if not found
71
- */
72
- findYamlConfig(startDir) {
73
- // First check current directory for YAML configs
74
- for (const fileName of this.YAML_FILENAMES) {
75
- const configPath = path.join(startDir, fileName);
76
- if (fs.existsSync(configPath)) {
77
- return configPath;
78
- }
79
- }
80
- // Recursively search subdirectories for .appwrite folders
81
- const yamlConfigInSubdirs = this.findYamlConfigRecursive(startDir);
82
- if (yamlConfigInSubdirs) {
83
- return yamlConfigInSubdirs;
84
- }
85
- // Check one level up to avoid infinite traversal
86
- const parentDir = path.dirname(startDir);
87
- if (parentDir !== startDir && path.basename(parentDir) !== "node_modules") {
88
- for (const fileName of this.YAML_FILENAMES) {
89
- const configPath = path.join(parentDir, fileName);
90
- if (fs.existsSync(configPath)) {
91
- return configPath;
92
- }
93
- }
94
- }
95
- return null;
96
- }
97
- /**
98
- * Recursively searches for YAML configs in .appwrite subdirectories
99
- * @param dir The directory to search
100
- * @param depth Current search depth
101
- * @returns Path to YAML config or null
102
- */
103
- findYamlConfigRecursive(dir, depth = 0) {
104
- // Limit search depth to prevent infinite recursion
105
- if (depth > this.MAX_SEARCH_DEPTH) {
106
- return null;
107
- }
108
- if (shouldIgnoreDirectory(path.basename(dir))) {
109
- return null;
110
- }
111
- try {
112
- const entries = fs.readdirSync(dir, { withFileTypes: true });
113
- for (const entry of entries) {
114
- if (entry.isDirectory() && !shouldIgnoreDirectory(entry.name)) {
115
- const fullPath = path.join(dir, entry.name);
116
- // Check if this is an .appwrite directory
117
- if (entry.name === ".appwrite") {
118
- const configPaths = [
119
- path.join(fullPath, "config.yaml"),
120
- path.join(fullPath, "config.yml"),
121
- path.join(fullPath, "appwriteConfig.yaml"),
122
- path.join(fullPath, "appwriteConfig.yml"),
123
- ];
124
- for (const configPath of configPaths) {
125
- if (fs.existsSync(configPath)) {
126
- return configPath;
127
- }
128
- }
129
- }
130
- // Recurse into other directories with increased depth
131
- const result = this.findYamlConfigRecursive(fullPath, depth + 1);
132
- if (result)
133
- return result;
134
- }
135
- }
136
- }
137
- catch (error) {
138
- // Ignore directory access errors
139
- }
140
- return null;
141
- }
142
- /**
143
- * Finds TypeScript configuration files (appwriteConfig.ts)
144
- * @param startDir The directory to start searching from
145
- * @returns Path to the TypeScript config file or null if not found
146
- */
147
- findTypeScriptConfig(startDir) {
148
- return this.findTypeScriptConfigRecursive(startDir);
149
- }
150
- /**
151
- * Recursively searches for TypeScript configuration files
152
- * @param dir The directory to search
153
- * @param depth Current search depth
154
- * @returns Path to TypeScript config or null
155
- */
156
- findTypeScriptConfigRecursive(dir, depth = 0) {
157
- // Limit search depth to prevent infinite recursion
158
- if (depth > 10) {
159
- return null;
160
- }
161
- if (shouldIgnoreDirectory(path.basename(dir))) {
162
- return null;
163
- }
164
- try {
165
- const entries = fs.readdirSync(dir, { withFileTypes: true });
166
- // First check current directory for appwriteConfig.ts
167
- for (const entry of entries) {
168
- if (entry.isFile() && this.TS_FILENAMES.includes(entry.name)) {
169
- return path.join(dir, entry.name);
170
- }
171
- }
172
- // Then search subdirectories
173
- for (const entry of entries) {
174
- if (entry.isDirectory() && !shouldIgnoreDirectory(entry.name)) {
175
- const result = this.findTypeScriptConfigRecursive(path.join(dir, entry.name), depth + 1);
176
- if (result)
177
- return result;
178
- }
179
- }
180
- }
181
- catch (error) {
182
- // Ignore directory access errors
183
- }
184
- return null;
185
- }
186
- /**
187
- * Finds project configuration JSON files (appwrite.json, appwrite.config.json)
188
- * Searches up to 5 levels up the directory tree
189
- * @param startDir The directory to start searching from
190
- * @returns Path to the JSON config file or null if not found
191
- */
192
- findProjectConfig(startDir = process.cwd()) {
193
- let currentDir = startDir;
194
- // Search up to MAX_SEARCH_DEPTH levels up the directory tree
195
- for (let i = 0; i < this.MAX_SEARCH_DEPTH; i++) {
196
- for (const configName of this.JSON_FILENAMES) {
197
- const configPath = path.join(currentDir, configName);
198
- if (fs.existsSync(configPath)) {
199
- return configPath;
200
- }
201
- }
202
- const parentDir = path.dirname(currentDir);
203
- if (parentDir === currentDir) {
204
- break; // Reached filesystem root
205
- }
206
- currentDir = parentDir;
207
- }
208
- return null;
209
- }
210
- /**
211
- * Discovers collection YAML files in a collections/ directory
212
- * @param collectionsDir Path to the collections directory
213
- * @returns Discovery result with file paths
214
- */
215
- async discoverCollections(collectionsDir) {
216
- if (!fs.existsSync(collectionsDir)) {
217
- return {
218
- found: false,
219
- type: "none",
220
- files: [],
221
- };
222
- }
223
- try {
224
- const files = fs.readdirSync(collectionsDir);
225
- const collectionFiles = files.filter((file) => (file.endsWith(".yaml") ||
226
- file.endsWith(".yml") ||
227
- file.endsWith(".ts")) &&
228
- file !== "index.ts");
229
- if (collectionFiles.length === 0) {
230
- return {
231
- found: false,
232
- type: "none",
233
- files: [],
234
- };
235
- }
236
- MessageFormatter.success(`Discovered ${collectionFiles.length} collection file(s) in ${collectionsDir}`, { prefix: "Discovery" });
237
- return {
238
- found: true,
239
- path: collectionsDir,
240
- type: "yaml",
241
- files: collectionFiles,
242
- };
243
- }
244
- catch (error) {
245
- MessageFormatter.error(`Error discovering collections in ${collectionsDir}`, error instanceof Error ? error : undefined, { prefix: "Discovery" });
246
- return {
247
- found: false,
248
- type: "none",
249
- files: [],
250
- };
251
- }
252
- }
253
- /**
254
- * Discovers table YAML files in a tables/ directory
255
- * @param tablesDir Path to the tables directory
256
- * @returns Discovery result with file paths
257
- */
258
- async discoverTables(tablesDir) {
259
- if (!fs.existsSync(tablesDir)) {
260
- return {
261
- found: false,
262
- type: "none",
263
- files: [],
264
- };
265
- }
266
- try {
267
- const files = fs.readdirSync(tablesDir);
268
- const tableFiles = files.filter((file) => (file.endsWith(".yaml") ||
269
- file.endsWith(".yml") ||
270
- file.endsWith(".ts")) &&
271
- file !== "index.ts");
272
- if (tableFiles.length === 0) {
273
- return {
274
- found: false,
275
- type: "none",
276
- files: [],
277
- };
278
- }
279
- MessageFormatter.success(`Discovered ${tableFiles.length} table file(s) in ${tablesDir}`, { prefix: "Discovery" });
280
- return {
281
- found: true,
282
- path: tablesDir,
283
- type: "yaml",
284
- files: tableFiles,
285
- };
286
- }
287
- catch (error) {
288
- MessageFormatter.error(`Error discovering tables in ${tablesDir}`, error instanceof Error ? error : undefined, { prefix: "Discovery" });
289
- return {
290
- found: false,
291
- type: "none",
292
- files: [],
293
- };
294
- }
295
- }
296
- /**
297
- * Finds the .appwrite configuration directory
298
- * @param startDir The directory to start searching from
299
- * @returns Path to .appwrite directory or null if not found
300
- */
301
- findAppwriteDirectory(startDir) {
302
- let currentDir = startDir;
303
- // Search up to MAX_SEARCH_DEPTH levels up the directory tree
304
- for (let i = 0; i < this.MAX_SEARCH_DEPTH; i++) {
305
- const appwriteDir = path.join(currentDir, ".appwrite");
306
- if (fs.existsSync(appwriteDir) && fs.statSync(appwriteDir).isDirectory()) {
307
- return appwriteDir;
308
- }
309
- const parentDir = path.dirname(currentDir);
310
- if (parentDir === currentDir) {
311
- break; // Reached filesystem root
312
- }
313
- currentDir = parentDir;
314
- }
315
- return null;
316
- }
317
- /**
318
- * Finds the functions directory
319
- * @param startDir The directory to start searching from
320
- * @returns Path to functions directory or null if not found
321
- */
322
- findFunctionsDirectory(startDir) {
323
- return this.findFunctionsDirectoryRecursive(startDir);
324
- }
325
- /**
326
- * Recursively searches for the functions directory
327
- * @param dir The directory to search
328
- * @param depth Current search depth
329
- * @returns Path to functions directory or null
330
- */
331
- findFunctionsDirectoryRecursive(dir, depth = 0) {
332
- // Limit search depth to prevent infinite recursion
333
- if (depth > this.MAX_SEARCH_DEPTH) {
334
- return null;
335
- }
336
- if (shouldIgnoreDirectory(path.basename(dir))) {
337
- return null;
338
- }
339
- try {
340
- const files = fs.readdirSync(dir, { withFileTypes: true });
341
- for (const entry of files) {
342
- if (!entry.isDirectory() || shouldIgnoreDirectory(entry.name)) {
343
- continue;
344
- }
345
- if (entry.name === "functions") {
346
- return path.join(dir, entry.name);
347
- }
348
- const result = this.findFunctionsDirectoryRecursive(path.join(dir, entry.name), depth + 1);
349
- if (result)
350
- return result;
351
- }
352
- }
353
- catch (error) {
354
- // Ignore directory access errors
355
- }
356
- return null;
357
- }
358
- /**
359
- * Gets a summary of all discoverable configuration files
360
- * Useful for debugging configuration issues
361
- * @param startDir The directory to start searching from
362
- * @returns Object containing paths to all discovered config types
363
- */
364
- getConfigurationSummary(startDir) {
365
- return {
366
- yaml: this.findYamlConfig(startDir),
367
- typescript: this.findTypeScriptConfig(startDir),
368
- json: this.findProjectConfig(startDir),
369
- appwriteDirectory: this.findAppwriteDirectory(startDir),
370
- functionsDirectory: this.findFunctionsDirectory(startDir),
371
- selectedConfig: this.findConfig(startDir),
372
- };
373
- }
374
- }
@@ -1,129 +0,0 @@
1
- import type { AppwriteConfig, Collection } from "@njdamstra/appwrite-utils";
2
- import { type YamlSessionOptions } from "../yamlConfig.js";
3
- /**
4
- * Options for loading collections or tables
5
- */
6
- export interface CollectionLoadOptions {
7
- /**
8
- * Whether to mark loaded items as coming from tables directory
9
- */
10
- markAsTablesDir?: boolean;
11
- /**
12
- * Set of existing collection names to check for conflicts
13
- */
14
- existingNames?: Set<string>;
15
- }
16
- /**
17
- * Service for loading and parsing Appwrite configuration files.
18
- *
19
- * Supports:
20
- * - YAML configuration files (.appwrite/config.yaml)
21
- * - TypeScript configuration files (appwriteConfig.ts)
22
- * - JSON project configuration files (appwrite.json)
23
- * - Collection and table YAML/TypeScript definitions
24
- *
25
- * Features:
26
- * - Auto-detects configuration file type
27
- * - Converts between different configuration formats
28
- * - Loads collections and tables from directories
29
- * - Handles session preservation
30
- * - Validates and normalizes configuration data
31
- */
32
- export declare class ConfigLoaderService {
33
- /**
34
- * Normalizes function dirPath to absolute path
35
- * @param func Function configuration object
36
- * @param configDir Directory containing the config file
37
- * @returns Function with normalized dirPath
38
- */
39
- private normalizeFunctionPath;
40
- /**
41
- * Loads configuration from a discovered path, auto-detecting the type
42
- * @param configPath Path to the configuration file
43
- * @param sessionOptions Optional session preservation options
44
- * @returns Parsed AppwriteConfig
45
- */
46
- loadFromPath(configPath: string, sessionOptions?: YamlSessionOptions): Promise<AppwriteConfig>;
47
- /**
48
- * Loads a YAML configuration file
49
- * @param yamlPath Path to the YAML config file
50
- * @param sessionOptions Optional session preservation options
51
- * @returns Parsed AppwriteConfig
52
- */
53
- loadYaml(yamlPath: string, sessionOptions?: YamlSessionOptions): Promise<AppwriteConfig>;
54
- /**
55
- * Loads a TypeScript configuration file
56
- * @param tsPath Path to the TypeScript config file
57
- * @returns Parsed AppwriteConfig
58
- */
59
- loadTypeScript(tsPath: string): Promise<AppwriteConfig>;
60
- /**
61
- * Loads an appwrite.json project configuration file
62
- * Converts projectId → appwriteProject and detects API mode
63
- * @param jsonPath Path to the JSON config file
64
- * @returns Partial AppwriteConfig (requires merging with defaults)
65
- */
66
- loadProjectConfig(jsonPath: string): Promise<Partial<AppwriteConfig>>;
67
- /**
68
- * Loads all collections from a collections/ directory
69
- * Supports both YAML (.yaml, .yml) and TypeScript (.ts) files
70
- * @param collectionsDir Path to the collections directory
71
- * @param options Loading options
72
- * @returns Array of loaded Collection objects
73
- */
74
- loadCollections(collectionsDir: string, options?: CollectionLoadOptions): Promise<Collection[]>;
75
- /**
76
- * Loads all tables from a tables/ directory
77
- * Supports both YAML (.yaml, .yml) and TypeScript (.ts) files
78
- * @param tablesDir Path to the tables directory
79
- * @param options Loading options
80
- * @returns Array of loaded table objects
81
- */
82
- loadTables(tablesDir: string, options?: CollectionLoadOptions): Promise<any[]>;
83
- /**
84
- * Loads collections and tables with conflict detection
85
- * Collections take priority over tables when names conflict
86
- * @param collectionsDir Path to collections directory
87
- * @param tablesDir Path to tables directory
88
- * @returns Object containing combined arrays and conflict information
89
- */
90
- loadCollectionsAndTables(collectionsDir: string, tablesDir: string): Promise<{
91
- items: Collection[];
92
- fromCollections: number;
93
- fromTables: number;
94
- conflicts: Array<{
95
- name: string;
96
- source1: string;
97
- source2: string;
98
- }>;
99
- }>;
100
- /**
101
- * Loads tables first (higher priority), then collections (backward compatibility)
102
- * Used for TablesDB projects (>= 1.8.0)
103
- * @param tablesDir Path to the tables directory
104
- * @param collectionsDir Path to the collections directory
105
- * @returns Loading result with items, counts, and conflicts
106
- */
107
- loadTablesFirst(tablesDir: string, collectionsDir: string): Promise<{
108
- items: Collection[];
109
- fromCollections: number;
110
- fromTables: number;
111
- conflicts: Array<{
112
- name: string;
113
- source1: string;
114
- source2: string;
115
- }>;
116
- }>;
117
- /**
118
- * Validates that a configuration file can be loaded
119
- * @param configPath Path to the configuration file
120
- * @returns True if the file can be loaded, false otherwise
121
- */
122
- canLoadConfig(configPath: string): boolean;
123
- /**
124
- * Gets the type of a configuration file
125
- * @param configPath Path to the configuration file
126
- * @returns Configuration type or null if unknown
127
- */
128
- getConfigType(configPath: string): "yaml" | "typescript" | "json" | null;
129
- }