appwrite-utils-cli 1.6.3 → 1.6.5

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 (59) hide show
  1. package/CONFIG_TODO.md +1189 -0
  2. package/SERVICE_IMPLEMENTATION_REPORT.md +462 -0
  3. package/dist/cli/commands/configCommands.js +7 -1
  4. package/dist/collections/attributes.js +102 -30
  5. package/dist/collections/indexes.js +6 -1
  6. package/dist/collections/methods.js +4 -5
  7. package/dist/config/ConfigManager.d.ts +445 -0
  8. package/dist/config/ConfigManager.js +625 -0
  9. package/dist/config/index.d.ts +8 -0
  10. package/dist/config/index.js +7 -0
  11. package/dist/config/services/ConfigDiscoveryService.d.ts +126 -0
  12. package/dist/config/services/ConfigDiscoveryService.js +374 -0
  13. package/dist/config/services/ConfigLoaderService.d.ts +105 -0
  14. package/dist/config/services/ConfigLoaderService.js +410 -0
  15. package/dist/config/services/ConfigMergeService.d.ts +208 -0
  16. package/dist/config/services/ConfigMergeService.js +307 -0
  17. package/dist/config/services/ConfigValidationService.d.ts +214 -0
  18. package/dist/config/services/ConfigValidationService.js +310 -0
  19. package/dist/config/services/SessionAuthService.d.ts +225 -0
  20. package/dist/config/services/SessionAuthService.js +456 -0
  21. package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +1 -0
  22. package/dist/config/services/__tests__/ConfigMergeService.test.js +271 -0
  23. package/dist/config/services/index.d.ts +13 -0
  24. package/dist/config/services/index.js +10 -0
  25. package/dist/interactiveCLI.js +8 -6
  26. package/dist/main.js +14 -19
  27. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +1 -1
  28. package/dist/shared/operationQueue.js +1 -1
  29. package/dist/utils/ClientFactory.d.ts +87 -0
  30. package/dist/utils/ClientFactory.js +164 -0
  31. package/dist/utils/getClientFromConfig.js +4 -3
  32. package/dist/utils/helperFunctions.d.ts +1 -0
  33. package/dist/utils/helperFunctions.js +21 -5
  34. package/dist/utils/yamlConverter.d.ts +2 -2
  35. package/dist/utils/yamlConverter.js +2 -2
  36. package/dist/utilsController.d.ts +18 -15
  37. package/dist/utilsController.js +83 -131
  38. package/package.json +1 -1
  39. package/src/cli/commands/configCommands.ts +8 -1
  40. package/src/collections/attributes.ts +118 -31
  41. package/src/collections/indexes.ts +7 -1
  42. package/src/collections/methods.ts +4 -6
  43. package/src/config/ConfigManager.ts +808 -0
  44. package/src/config/index.ts +10 -0
  45. package/src/config/services/ConfigDiscoveryService.ts +463 -0
  46. package/src/config/services/ConfigLoaderService.ts +560 -0
  47. package/src/config/services/ConfigMergeService.ts +386 -0
  48. package/src/config/services/ConfigValidationService.ts +394 -0
  49. package/src/config/services/SessionAuthService.ts +565 -0
  50. package/src/config/services/__tests__/ConfigMergeService.test.ts +351 -0
  51. package/src/config/services/index.ts +29 -0
  52. package/src/interactiveCLI.ts +9 -7
  53. package/src/main.ts +14 -24
  54. package/src/shared/operationQueue.ts +1 -1
  55. package/src/utils/ClientFactory.ts +186 -0
  56. package/src/utils/getClientFromConfig.ts +4 -3
  57. package/src/utils/helperFunctions.ts +27 -7
  58. package/src/utils/yamlConverter.ts +4 -4
  59. package/src/utilsController.ts +99 -187
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Result of discovering configuration files or collections/tables
3
+ */
4
+ export interface DiscoveryResult {
5
+ found: boolean;
6
+ path?: string;
7
+ type: "yaml" | "typescript" | "json" | "none";
8
+ files?: string[];
9
+ }
10
+ /**
11
+ * Service for discovering Appwrite configuration files and collection/table definitions.
12
+ *
13
+ * Search Priority:
14
+ * 1. YAML configs (.appwrite/config.yaml, .appwrite/config.yml, etc.)
15
+ * 2. TypeScript configs (appwriteConfig.ts)
16
+ * 3. JSON configs (appwrite.json, appwrite.config.json)
17
+ *
18
+ * Features:
19
+ * - Searches up directory tree (max 5 levels)
20
+ * - Ignores common directories (node_modules, .git, etc.)
21
+ * - Discovers both collections/ and tables/ directories
22
+ * - Recursive subdirectory scanning for .appwrite folders
23
+ */
24
+ export declare class ConfigDiscoveryService {
25
+ /**
26
+ * YAML configuration file names to search for
27
+ */
28
+ private readonly YAML_FILENAMES;
29
+ /**
30
+ * TypeScript configuration file names to search for
31
+ */
32
+ private readonly TS_FILENAMES;
33
+ /**
34
+ * JSON configuration file names to search for
35
+ */
36
+ private readonly JSON_FILENAMES;
37
+ /**
38
+ * Maximum levels to search up the directory tree
39
+ */
40
+ private readonly MAX_SEARCH_DEPTH;
41
+ /**
42
+ * Finds any configuration file with priority: YAML → TypeScript → JSON
43
+ * @param startDir The directory to start searching from
44
+ * @returns Path to the configuration file or null if not found
45
+ */
46
+ findConfig(startDir: string): string | null;
47
+ /**
48
+ * Finds YAML configuration files
49
+ * Searches current directory, subdirectories, and parent directory
50
+ * @param startDir The directory to start searching from
51
+ * @returns Path to the YAML config file or null if not found
52
+ */
53
+ findYamlConfig(startDir: string): string | null;
54
+ /**
55
+ * Recursively searches for YAML configs in .appwrite subdirectories
56
+ * @param dir The directory to search
57
+ * @param depth Current search depth
58
+ * @returns Path to YAML config or null
59
+ */
60
+ private findYamlConfigRecursive;
61
+ /**
62
+ * Finds TypeScript configuration files (appwriteConfig.ts)
63
+ * @param startDir The directory to start searching from
64
+ * @returns Path to the TypeScript config file or null if not found
65
+ */
66
+ findTypeScriptConfig(startDir: string): string | null;
67
+ /**
68
+ * Recursively searches for TypeScript configuration files
69
+ * @param dir The directory to search
70
+ * @param depth Current search depth
71
+ * @returns Path to TypeScript config or null
72
+ */
73
+ private findTypeScriptConfigRecursive;
74
+ /**
75
+ * Finds project configuration JSON files (appwrite.json, appwrite.config.json)
76
+ * Searches up to 5 levels up the directory tree
77
+ * @param startDir The directory to start searching from
78
+ * @returns Path to the JSON config file or null if not found
79
+ */
80
+ findProjectConfig(startDir?: string): string | null;
81
+ /**
82
+ * Discovers collection YAML files in a collections/ directory
83
+ * @param collectionsDir Path to the collections directory
84
+ * @returns Discovery result with file paths
85
+ */
86
+ discoverCollections(collectionsDir: string): Promise<DiscoveryResult>;
87
+ /**
88
+ * Discovers table YAML files in a tables/ directory
89
+ * @param tablesDir Path to the tables directory
90
+ * @returns Discovery result with file paths
91
+ */
92
+ discoverTables(tablesDir: string): Promise<DiscoveryResult>;
93
+ /**
94
+ * Finds the .appwrite configuration directory
95
+ * @param startDir The directory to start searching from
96
+ * @returns Path to .appwrite directory or null if not found
97
+ */
98
+ findAppwriteDirectory(startDir: string): string | null;
99
+ /**
100
+ * Finds the functions directory
101
+ * @param startDir The directory to start searching from
102
+ * @returns Path to functions directory or null if not found
103
+ */
104
+ findFunctionsDirectory(startDir: string): string | null;
105
+ /**
106
+ * Recursively searches for the functions directory
107
+ * @param dir The directory to search
108
+ * @param depth Current search depth
109
+ * @returns Path to functions directory or null
110
+ */
111
+ private findFunctionsDirectoryRecursive;
112
+ /**
113
+ * Gets a summary of all discoverable configuration files
114
+ * Useful for debugging configuration issues
115
+ * @param startDir The directory to start searching from
116
+ * @returns Object containing paths to all discovered config types
117
+ */
118
+ getConfigurationSummary(startDir: string): {
119
+ yaml: string | null;
120
+ typescript: string | null;
121
+ json: string | null;
122
+ appwriteDirectory: string | null;
123
+ functionsDirectory: string | null;
124
+ selectedConfig: string | null;
125
+ };
126
+ }
@@ -0,0 +1,374 @@
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
+ }
@@ -0,0 +1,105 @@
1
+ import type { AppwriteConfig, Collection } from "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
+ * Loads configuration from a discovered path, auto-detecting the type
35
+ * @param configPath Path to the configuration file
36
+ * @param sessionOptions Optional session preservation options
37
+ * @returns Parsed AppwriteConfig
38
+ */
39
+ loadFromPath(configPath: string, sessionOptions?: YamlSessionOptions): Promise<AppwriteConfig>;
40
+ /**
41
+ * Loads a YAML configuration file
42
+ * @param yamlPath Path to the YAML config file
43
+ * @param sessionOptions Optional session preservation options
44
+ * @returns Parsed AppwriteConfig
45
+ */
46
+ loadYaml(yamlPath: string, sessionOptions?: YamlSessionOptions): Promise<AppwriteConfig>;
47
+ /**
48
+ * Loads a TypeScript configuration file
49
+ * @param tsPath Path to the TypeScript config file
50
+ * @returns Parsed AppwriteConfig
51
+ */
52
+ loadTypeScript(tsPath: string): Promise<AppwriteConfig>;
53
+ /**
54
+ * Loads an appwrite.json project configuration file
55
+ * Converts projectId → appwriteProject and detects API mode
56
+ * @param jsonPath Path to the JSON config file
57
+ * @returns Partial AppwriteConfig (requires merging with defaults)
58
+ */
59
+ loadProjectConfig(jsonPath: string): Promise<Partial<AppwriteConfig>>;
60
+ /**
61
+ * Loads all collections from a collections/ directory
62
+ * Supports both YAML (.yaml, .yml) and TypeScript (.ts) files
63
+ * @param collectionsDir Path to the collections directory
64
+ * @param options Loading options
65
+ * @returns Array of loaded Collection objects
66
+ */
67
+ loadCollections(collectionsDir: string, options?: CollectionLoadOptions): Promise<Collection[]>;
68
+ /**
69
+ * Loads all tables from a tables/ directory
70
+ * Supports both YAML (.yaml, .yml) and TypeScript (.ts) files
71
+ * @param tablesDir Path to the tables directory
72
+ * @param options Loading options
73
+ * @returns Array of loaded table objects
74
+ */
75
+ loadTables(tablesDir: string, options?: CollectionLoadOptions): Promise<any[]>;
76
+ /**
77
+ * Loads collections and tables with conflict detection
78
+ * Collections take priority over tables when names conflict
79
+ * @param collectionsDir Path to collections directory
80
+ * @param tablesDir Path to tables directory
81
+ * @returns Object containing combined arrays and conflict information
82
+ */
83
+ loadCollectionsAndTables(collectionsDir: string, tablesDir: string): Promise<{
84
+ items: Collection[];
85
+ fromCollections: number;
86
+ fromTables: number;
87
+ conflicts: Array<{
88
+ name: string;
89
+ source1: string;
90
+ source2: string;
91
+ }>;
92
+ }>;
93
+ /**
94
+ * Validates that a configuration file can be loaded
95
+ * @param configPath Path to the configuration file
96
+ * @returns True if the file can be loaded, false otherwise
97
+ */
98
+ canLoadConfig(configPath: string): boolean;
99
+ /**
100
+ * Gets the type of a configuration file
101
+ * @param configPath Path to the configuration file
102
+ * @returns Configuration type or null if unknown
103
+ */
104
+ getConfigType(configPath: string): "yaml" | "typescript" | "json" | null;
105
+ }