appwrite-utils-cli 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/{src/adapters/index.ts → dist/adapters/index.d.ts} +0 -1
  2. package/dist/adapters/index.js +10 -0
  3. package/dist/backups/operations/bucketBackup.d.ts +19 -0
  4. package/dist/backups/operations/bucketBackup.js +197 -0
  5. package/dist/backups/operations/collectionBackup.d.ts +30 -0
  6. package/dist/backups/operations/collectionBackup.js +201 -0
  7. package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
  8. package/dist/backups/operations/comprehensiveBackup.js +238 -0
  9. package/dist/backups/schemas/bucketManifest.d.ts +93 -0
  10. package/dist/backups/schemas/bucketManifest.js +33 -0
  11. package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
  12. package/dist/backups/schemas/comprehensiveManifest.js +32 -0
  13. package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
  14. package/dist/backups/tracking/centralizedTracking.js +274 -0
  15. package/dist/cli/commands/configCommands.d.ts +8 -0
  16. package/dist/cli/commands/configCommands.js +210 -0
  17. package/dist/cli/commands/databaseCommands.d.ts +14 -0
  18. package/dist/cli/commands/databaseCommands.js +696 -0
  19. package/dist/cli/commands/functionCommands.d.ts +7 -0
  20. package/dist/cli/commands/functionCommands.js +330 -0
  21. package/dist/cli/commands/importFileCommands.d.ts +7 -0
  22. package/dist/cli/commands/importFileCommands.js +674 -0
  23. package/dist/cli/commands/schemaCommands.d.ts +7 -0
  24. package/dist/cli/commands/schemaCommands.js +169 -0
  25. package/dist/cli/commands/storageCommands.d.ts +5 -0
  26. package/dist/cli/commands/storageCommands.js +142 -0
  27. package/dist/cli/commands/transferCommands.d.ts +5 -0
  28. package/dist/cli/commands/transferCommands.js +382 -0
  29. package/dist/collections/columns.d.ts +13 -0
  30. package/dist/collections/columns.js +1339 -0
  31. package/dist/collections/indexes.d.ts +12 -0
  32. package/dist/collections/indexes.js +215 -0
  33. package/dist/collections/methods.d.ts +19 -0
  34. package/dist/collections/methods.js +605 -0
  35. package/dist/collections/tableOperations.d.ts +87 -0
  36. package/dist/collections/tableOperations.js +466 -0
  37. package/dist/collections/transferOperations.d.ts +8 -0
  38. package/dist/collections/transferOperations.js +411 -0
  39. package/dist/collections/wipeOperations.d.ts +17 -0
  40. package/dist/collections/wipeOperations.js +306 -0
  41. package/dist/databases/methods.d.ts +6 -0
  42. package/dist/databases/methods.js +35 -0
  43. package/dist/databases/setup.d.ts +5 -0
  44. package/dist/databases/setup.js +45 -0
  45. package/dist/examples/yamlTerminologyExample.d.ts +42 -0
  46. package/dist/examples/yamlTerminologyExample.js +272 -0
  47. package/dist/functions/deployments.d.ts +4 -0
  48. package/dist/functions/deployments.js +146 -0
  49. package/dist/functions/fnConfigDiscovery.d.ts +3 -0
  50. package/dist/functions/fnConfigDiscovery.js +108 -0
  51. package/dist/functions/methods.d.ts +16 -0
  52. package/dist/functions/methods.js +174 -0
  53. package/dist/init.d.ts +2 -0
  54. package/dist/init.js +57 -0
  55. package/dist/interactiveCLI.d.ts +36 -0
  56. package/dist/interactiveCLI.js +952 -0
  57. package/dist/main.d.ts +2 -0
  58. package/dist/main.js +1125 -0
  59. package/dist/migrations/afterImportActions.d.ts +17 -0
  60. package/dist/migrations/afterImportActions.js +305 -0
  61. package/dist/migrations/appwriteToX.d.ts +211 -0
  62. package/dist/migrations/appwriteToX.js +493 -0
  63. package/dist/migrations/comprehensiveTransfer.d.ts +147 -0
  64. package/dist/migrations/comprehensiveTransfer.js +1315 -0
  65. package/dist/migrations/dataLoader.d.ts +755 -0
  66. package/dist/migrations/dataLoader.js +1272 -0
  67. package/dist/migrations/importController.d.ts +25 -0
  68. package/dist/migrations/importController.js +283 -0
  69. package/dist/migrations/importDataActions.d.ts +50 -0
  70. package/dist/migrations/importDataActions.js +230 -0
  71. package/dist/migrations/relationships.d.ts +29 -0
  72. package/dist/migrations/relationships.js +203 -0
  73. package/dist/migrations/services/DataTransformationService.d.ts +55 -0
  74. package/dist/migrations/services/DataTransformationService.js +158 -0
  75. package/dist/migrations/services/FileHandlerService.d.ts +75 -0
  76. package/dist/migrations/services/FileHandlerService.js +236 -0
  77. package/dist/migrations/services/ImportOrchestrator.d.ts +99 -0
  78. package/dist/migrations/services/ImportOrchestrator.js +493 -0
  79. package/dist/migrations/services/RateLimitManager.d.ts +138 -0
  80. package/dist/migrations/services/RateLimitManager.js +279 -0
  81. package/dist/migrations/services/RelationshipResolver.d.ts +120 -0
  82. package/dist/migrations/services/RelationshipResolver.js +332 -0
  83. package/dist/migrations/services/UserMappingService.d.ts +109 -0
  84. package/dist/migrations/services/UserMappingService.js +277 -0
  85. package/dist/migrations/services/ValidationService.d.ts +74 -0
  86. package/dist/migrations/services/ValidationService.js +260 -0
  87. package/dist/migrations/transfer.d.ts +30 -0
  88. package/dist/migrations/transfer.js +661 -0
  89. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +131 -0
  90. package/dist/migrations/yaml/YamlImportConfigLoader.js +383 -0
  91. package/dist/migrations/yaml/YamlImportIntegration.d.ts +93 -0
  92. package/dist/migrations/yaml/YamlImportIntegration.js +341 -0
  93. package/dist/migrations/yaml/generateImportSchemas.d.ts +30 -0
  94. package/dist/migrations/yaml/generateImportSchemas.js +1327 -0
  95. package/dist/schemas/authUser.d.ts +24 -0
  96. package/dist/schemas/authUser.js +17 -0
  97. package/dist/setup.d.ts +2 -0
  98. package/{src/setup.ts → dist/setup.js} +0 -3
  99. package/dist/setupCommands.d.ts +58 -0
  100. package/dist/setupCommands.js +489 -0
  101. package/dist/setupController.d.ts +9 -0
  102. package/dist/setupController.js +34 -0
  103. package/dist/shared/backupMetadataSchema.d.ts +94 -0
  104. package/dist/shared/backupMetadataSchema.js +38 -0
  105. package/dist/shared/backupTracking.d.ts +18 -0
  106. package/dist/shared/backupTracking.js +176 -0
  107. package/dist/shared/confirmationDialogs.d.ts +75 -0
  108. package/dist/shared/confirmationDialogs.js +236 -0
  109. package/dist/shared/migrationHelpers.d.ts +61 -0
  110. package/dist/shared/migrationHelpers.js +145 -0
  111. package/{src/shared/operationLogger.ts → dist/shared/operationLogger.d.ts} +1 -11
  112. package/dist/shared/operationLogger.js +12 -0
  113. package/dist/shared/operationQueue.d.ts +40 -0
  114. package/dist/shared/operationQueue.js +310 -0
  115. package/dist/shared/operationsTable.d.ts +26 -0
  116. package/dist/shared/operationsTable.js +287 -0
  117. package/dist/shared/operationsTableSchema.d.ts +48 -0
  118. package/dist/shared/operationsTableSchema.js +35 -0
  119. package/dist/shared/progressManager.d.ts +62 -0
  120. package/dist/shared/progressManager.js +215 -0
  121. package/dist/shared/relationshipExtractor.d.ts +56 -0
  122. package/dist/shared/relationshipExtractor.js +138 -0
  123. package/dist/shared/selectionDialogs.d.ts +220 -0
  124. package/dist/shared/selectionDialogs.js +588 -0
  125. package/dist/storage/backupCompression.d.ts +20 -0
  126. package/dist/storage/backupCompression.js +67 -0
  127. package/dist/storage/methods.d.ts +44 -0
  128. package/dist/storage/methods.js +475 -0
  129. package/dist/storage/schemas.d.ts +842 -0
  130. package/dist/storage/schemas.js +175 -0
  131. package/dist/tables/indexManager.d.ts +65 -0
  132. package/dist/tables/indexManager.js +294 -0
  133. package/{src/types.ts → dist/types.d.ts} +1 -6
  134. package/dist/types.js +3 -0
  135. package/dist/users/methods.d.ts +16 -0
  136. package/dist/users/methods.js +276 -0
  137. package/dist/utils/configMigration.d.ts +1 -0
  138. package/dist/utils/configMigration.js +261 -0
  139. package/dist/utils/index.js +2 -0
  140. package/dist/utils/loadConfigs.d.ts +50 -0
  141. package/dist/utils/loadConfigs.js +357 -0
  142. package/dist/utils/setupFiles.d.ts +4 -0
  143. package/dist/utils/setupFiles.js +1190 -0
  144. package/dist/utilsController.d.ts +114 -0
  145. package/dist/utilsController.js +898 -0
  146. package/package.json +6 -3
  147. package/CHANGELOG.md +0 -35
  148. package/CONFIG_TODO.md +0 -1189
  149. package/SELECTION_DIALOGS.md +0 -146
  150. package/SERVICE_IMPLEMENTATION_REPORT.md +0 -462
  151. package/scripts/copy-templates.ts +0 -23
  152. package/src/backups/operations/bucketBackup.ts +0 -277
  153. package/src/backups/operations/collectionBackup.ts +0 -310
  154. package/src/backups/operations/comprehensiveBackup.ts +0 -342
  155. package/src/backups/schemas/bucketManifest.ts +0 -78
  156. package/src/backups/schemas/comprehensiveManifest.ts +0 -76
  157. package/src/backups/tracking/centralizedTracking.ts +0 -352
  158. package/src/cli/commands/configCommands.ts +0 -265
  159. package/src/cli/commands/databaseCommands.ts +0 -931
  160. package/src/cli/commands/functionCommands.ts +0 -419
  161. package/src/cli/commands/importFileCommands.ts +0 -815
  162. package/src/cli/commands/schemaCommands.ts +0 -200
  163. package/src/cli/commands/storageCommands.ts +0 -151
  164. package/src/cli/commands/transferCommands.ts +0 -454
  165. package/src/collections/attributes.ts.backup +0 -1555
  166. package/src/collections/columns.ts +0 -2025
  167. package/src/collections/indexes.ts +0 -350
  168. package/src/collections/methods.ts +0 -714
  169. package/src/collections/tableOperations.ts +0 -542
  170. package/src/collections/transferOperations.ts +0 -589
  171. package/src/collections/wipeOperations.ts +0 -449
  172. package/src/databases/methods.ts +0 -49
  173. package/src/databases/setup.ts +0 -77
  174. package/src/examples/yamlTerminologyExample.ts +0 -346
  175. package/src/functions/deployments.ts +0 -221
  176. package/src/functions/fnConfigDiscovery.ts +0 -103
  177. package/src/functions/methods.ts +0 -284
  178. package/src/init.ts +0 -62
  179. package/src/interactiveCLI.ts +0 -1201
  180. package/src/main.ts +0 -1517
  181. package/src/migrations/afterImportActions.ts +0 -579
  182. package/src/migrations/appwriteToX.ts +0 -668
  183. package/src/migrations/comprehensiveTransfer.ts +0 -2285
  184. package/src/migrations/dataLoader.ts +0 -1729
  185. package/src/migrations/importController.ts +0 -440
  186. package/src/migrations/importDataActions.ts +0 -315
  187. package/src/migrations/relationships.ts +0 -333
  188. package/src/migrations/services/DataTransformationService.ts +0 -196
  189. package/src/migrations/services/FileHandlerService.ts +0 -311
  190. package/src/migrations/services/ImportOrchestrator.ts +0 -675
  191. package/src/migrations/services/RateLimitManager.ts +0 -363
  192. package/src/migrations/services/RelationshipResolver.ts +0 -461
  193. package/src/migrations/services/UserMappingService.ts +0 -345
  194. package/src/migrations/services/ValidationService.ts +0 -349
  195. package/src/migrations/transfer.ts +0 -1113
  196. package/src/migrations/yaml/YamlImportConfigLoader.ts +0 -439
  197. package/src/migrations/yaml/YamlImportIntegration.ts +0 -446
  198. package/src/migrations/yaml/generateImportSchemas.ts +0 -1354
  199. package/src/schemas/authUser.ts +0 -23
  200. package/src/setupCommands.ts +0 -602
  201. package/src/setupController.ts +0 -43
  202. package/src/shared/backupMetadataSchema.ts +0 -93
  203. package/src/shared/backupTracking.ts +0 -211
  204. package/src/shared/confirmationDialogs.ts +0 -327
  205. package/src/shared/migrationHelpers.ts +0 -232
  206. package/src/shared/operationQueue.ts +0 -376
  207. package/src/shared/operationsTable.ts +0 -338
  208. package/src/shared/operationsTableSchema.ts +0 -60
  209. package/src/shared/progressManager.ts +0 -278
  210. package/src/shared/relationshipExtractor.ts +0 -214
  211. package/src/shared/selectionDialogs.ts +0 -802
  212. package/src/storage/backupCompression.ts +0 -88
  213. package/src/storage/methods.ts +0 -711
  214. package/src/storage/schemas.ts +0 -205
  215. package/src/tables/indexManager.ts +0 -409
  216. package/src/types/node-appwrite-tablesdb.d.ts +0 -44
  217. package/src/users/methods.ts +0 -358
  218. package/src/utils/configMigration.ts +0 -348
  219. package/src/utils/loadConfigs.ts +0 -457
  220. package/src/utils/setupFiles.ts +0 -1236
  221. package/src/utilsController.ts +0 -1263
  222. package/tests/README.md +0 -497
  223. package/tests/adapters/AdapterFactory.test.ts +0 -277
  224. package/tests/integration/syncOperations.test.ts +0 -463
  225. package/tests/jest.config.js +0 -25
  226. package/tests/migration/configMigration.test.ts +0 -546
  227. package/tests/setup.ts +0 -62
  228. package/tests/testUtils.ts +0 -340
  229. package/tests/utils/loadConfigs.test.ts +0 -350
  230. package/tests/validation/configValidation.test.ts +0 -412
  231. package/tsconfig.json +0 -44
  232. /package/{src → dist}/functions/templates/count-docs-in-collection/README.md +0 -0
  233. /package/{src → dist}/functions/templates/count-docs-in-collection/src/main.ts +0 -0
  234. /package/{src → dist}/functions/templates/count-docs-in-collection/src/request.ts +0 -0
  235. /package/{src → dist}/functions/templates/hono-typescript/README.md +0 -0
  236. /package/{src → dist}/functions/templates/hono-typescript/src/adapters/request.ts +0 -0
  237. /package/{src → dist}/functions/templates/hono-typescript/src/adapters/response.ts +0 -0
  238. /package/{src → dist}/functions/templates/hono-typescript/src/app.ts +0 -0
  239. /package/{src → dist}/functions/templates/hono-typescript/src/context.ts +0 -0
  240. /package/{src → dist}/functions/templates/hono-typescript/src/main.ts +0 -0
  241. /package/{src → dist}/functions/templates/hono-typescript/src/middleware/appwrite.ts +0 -0
  242. /package/{src → dist}/functions/templates/typescript-node/README.md +0 -0
  243. /package/{src → dist}/functions/templates/typescript-node/src/context.ts +0 -0
  244. /package/{src → dist}/functions/templates/typescript-node/src/main.ts +0 -0
  245. /package/{src → dist}/functions/templates/uv/README.md +0 -0
  246. /package/{src → dist}/functions/templates/uv/pyproject.toml +0 -0
  247. /package/{src → dist}/functions/templates/uv/src/__init__.py +0 -0
  248. /package/{src → dist}/functions/templates/uv/src/context.py +0 -0
  249. /package/{src → dist}/functions/templates/uv/src/main.py +0 -0
  250. /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
@@ -1,412 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { jest } from '@jest/globals';
4
- import { TestUtils } from '../testUtils';
5
- import { loadConfig, loadConfigWithPath } from '../../src/utils/loadConfigs';
6
-
7
- // Mock validation functions
8
- jest.mock('../../src/config/configValidation', () => ({
9
- validateCollectionsTablesConfig: jest.fn(),
10
- reportValidationResults: jest.fn(),
11
- }));
12
-
13
- import { validateCollectionsTablesConfig, reportValidationResults } from '../../src/config/configValidation';
14
-
15
- describe('Configuration Validation Tests', () => {
16
- let testDir: string;
17
-
18
- beforeEach(() => {
19
- jest.clearAllMocks();
20
- });
21
-
22
- afterEach(() => {
23
- TestUtils.cleanup();
24
- });
25
-
26
- describe('Basic Validation', () => {
27
- it('should validate configuration when validation is enabled', async () => {
28
- testDir = TestUtils.createTestProject({
29
- hasCollections: true,
30
- hasTables: true,
31
- });
32
-
33
- const mockValidation = {
34
- isValid: true,
35
- errors: [],
36
- warnings: [],
37
- };
38
-
39
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
40
-
41
- const result = await loadConfigWithPath(testDir, { validate: true });
42
-
43
- expect(validateCollectionsTablesConfig).toHaveBeenCalledWith(result.config);
44
- expect(result.validation).toEqual(mockValidation);
45
- expect(reportValidationResults).toHaveBeenCalledWith(mockValidation, { verbose: true });
46
- });
47
-
48
- it('should skip validation when disabled', async () => {
49
- testDir = TestUtils.createTestProject({ hasCollections: true });
50
-
51
- const config = await loadConfig(testDir, { validate: false });
52
-
53
- expect(validateCollectionsTablesConfig).not.toHaveBeenCalled();
54
- expect(reportValidationResults).not.toHaveBeenCalled();
55
- expect(config).toBeDefined();
56
- });
57
-
58
- it('should report validation warnings', async () => {
59
- testDir = TestUtils.createTestProject({ hasCollections: true });
60
-
61
- const mockValidation = {
62
- isValid: true,
63
- errors: [],
64
- warnings: [
65
- {
66
- type: 'naming_convention',
67
- message: 'Collection name should use PascalCase',
68
- item: 'test-collection',
69
- severity: 'warning' as const,
70
- }
71
- ],
72
- };
73
-
74
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
75
-
76
- const result = await loadConfigWithPath(testDir, {
77
- validate: true,
78
- reportValidation: true,
79
- });
80
-
81
- expect(result.validation?.warnings).toHaveLength(1);
82
- expect(reportValidationResults).toHaveBeenCalledWith(mockValidation, { verbose: true });
83
- });
84
- });
85
-
86
- describe('Strict Mode Validation', () => {
87
- it('should treat warnings as errors in strict mode', async () => {
88
- testDir = TestUtils.createTestProject({ hasCollections: true });
89
-
90
- const mockValidation = {
91
- isValid: true,
92
- errors: [],
93
- warnings: [
94
- {
95
- type: 'naming_convention',
96
- message: 'Collection name should use PascalCase',
97
- item: 'test-collection',
98
- severity: 'warning' as const,
99
- }
100
- ],
101
- };
102
-
103
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
104
-
105
- await expect(
106
- loadConfigWithPath(testDir, {
107
- validate: true,
108
- strictMode: true,
109
- })
110
- ).rejects.toThrow('Configuration validation failed in strict mode');
111
-
112
- expect(validateCollectionsTablesConfig).toHaveBeenCalled();
113
- });
114
-
115
- it('should pass strict mode when no warnings', async () => {
116
- testDir = TestUtils.createTestProject({ hasCollections: true });
117
-
118
- const mockValidation = {
119
- isValid: true,
120
- errors: [],
121
- warnings: [],
122
- };
123
-
124
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
125
-
126
- const result = await loadConfigWithPath(testDir, {
127
- validate: true,
128
- strictMode: true,
129
- });
130
-
131
- expect(result.validation?.isValid).toBe(true);
132
- expect(result.config).toBeDefined();
133
- });
134
-
135
- it('should fail strict mode on validation errors', async () => {
136
- testDir = TestUtils.createTestProject({ hasCollections: true });
137
-
138
- const mockValidation = {
139
- isValid: false,
140
- errors: [
141
- {
142
- type: 'missing_required_field',
143
- message: 'Collection ID is required',
144
- item: 'test-collection',
145
- severity: 'error' as const,
146
- }
147
- ],
148
- warnings: [],
149
- };
150
-
151
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
152
-
153
- await expect(
154
- loadConfigWithPath(testDir, {
155
- validate: true,
156
- strictMode: true,
157
- })
158
- ).rejects.toThrow('Configuration validation failed in strict mode');
159
- });
160
- });
161
-
162
- describe('Dual Schema Validation', () => {
163
- it('should validate naming conflicts between collections and tables', async () => {
164
- testDir = TestUtils.createTestProject({
165
- hasCollections: true,
166
- hasTables: true,
167
- hasConflicts: true,
168
- });
169
-
170
- const mockValidation = {
171
- isValid: false,
172
- errors: [
173
- {
174
- type: 'naming_conflict',
175
- message: 'Duplicate name found between collections/ and tables/ directories',
176
- item: 'TestCollection',
177
- severity: 'error' as const,
178
- }
179
- ],
180
- warnings: [],
181
- };
182
-
183
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
184
-
185
- const result = await loadConfigWithPath(testDir, { validate: true });
186
-
187
- expect(result.validation?.errors).toHaveLength(1);
188
- expect(result.validation?.errors[0].type).toBe('naming_conflict');
189
- });
190
-
191
- it('should validate table-specific fields', async () => {
192
- testDir = TestUtils.createTestProject({ hasTables: true });
193
-
194
- const mockValidation = {
195
- isValid: false,
196
- errors: [
197
- {
198
- type: 'missing_table_field',
199
- message: 'Table must have tableId and databaseId fields',
200
- item: 'test-table',
201
- severity: 'error' as const,
202
- }
203
- ],
204
- warnings: [],
205
- };
206
-
207
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
208
-
209
- const result = await loadConfigWithPath(testDir, { validate: true });
210
-
211
- expect(result.validation?.errors).toHaveLength(1);
212
- expect(result.validation?.errors[0].type).toBe('missing_table_field');
213
- });
214
-
215
- it('should validate attribute compatibility between APIs', async () => {
216
- testDir = TestUtils.createTestProject({
217
- hasCollections: true,
218
- hasTables: true,
219
- });
220
-
221
- const mockValidation = {
222
- isValid: true,
223
- errors: [],
224
- warnings: [
225
- {
226
- type: 'api_compatibility',
227
- message: 'Some attributes may not be compatible between Database and TablesDB APIs',
228
- item: 'test-collection',
229
- severity: 'warning' as const,
230
- }
231
- ],
232
- };
233
-
234
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
235
-
236
- const result = await loadConfigWithPath(testDir, { validate: true });
237
-
238
- expect(result.validation?.warnings).toHaveLength(1);
239
- expect(result.validation?.warnings[0].type).toBe('api_compatibility');
240
- });
241
- });
242
-
243
- describe('YAML Validation', () => {
244
- it('should validate YAML schema compliance', async () => {
245
- testDir = TestUtils.createTestProject({
246
- hasCollections: true,
247
- useYaml: true,
248
- });
249
-
250
- const mockValidation = {
251
- isValid: false,
252
- errors: [
253
- {
254
- type: 'schema_validation',
255
- message: 'Invalid YAML schema: missing required field "name"',
256
- item: 'TestCollection.yaml',
257
- severity: 'error' as const,
258
- }
259
- ],
260
- warnings: [],
261
- };
262
-
263
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
264
-
265
- const result = await loadConfigWithPath(testDir, { validate: true });
266
-
267
- expect(result.validation?.errors).toHaveLength(1);
268
- expect(result.validation?.errors[0].type).toBe('schema_validation');
269
- });
270
-
271
- it('should validate mixed YAML and TypeScript configurations', async () => {
272
- testDir = TestUtils.createTestProject({ hasCollections: true });
273
-
274
- // Add YAML table
275
- const tablesDir = path.join(testDir, 'tables');
276
- fs.mkdirSync(tablesDir);
277
- fs.writeFileSync(
278
- path.join(tablesDir, 'YamlTable.yaml'),
279
- 'name: YamlTable\ntableId: yaml-table\n'
280
- );
281
-
282
- const mockValidation = {
283
- isValid: true,
284
- errors: [],
285
- warnings: [
286
- {
287
- type: 'mixed_formats',
288
- message: 'Using both YAML and TypeScript configuration files',
289
- item: 'project',
290
- severity: 'warning' as const,
291
- }
292
- ],
293
- };
294
-
295
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
296
-
297
- const result = await loadConfigWithPath(testDir, { validate: true });
298
-
299
- expect(result.validation?.warnings).toHaveLength(1);
300
- expect(result.validation?.warnings[0].type).toBe('mixed_formats');
301
- });
302
- });
303
-
304
- describe('Performance Validation', () => {
305
- it('should handle validation of large configurations efficiently', async () => {
306
- testDir = TestUtils.createTempDir();
307
-
308
- // Create config with many collections
309
- const config = TestUtils.createTestAppwriteConfig();
310
- config.collections = Array.from({ length: 500 }, (_, i) =>
311
- TestUtils.createTestCollection({
312
- name: `Collection${i}`,
313
- $id: `collection-${i}`,
314
- })
315
- );
316
-
317
- fs.writeFileSync(
318
- path.join(testDir, 'appwriteConfig.ts'),
319
- `export default ${JSON.stringify(config, null, 2)};`
320
- );
321
-
322
- const mockValidation = {
323
- isValid: true,
324
- errors: [],
325
- warnings: Array.from({ length: 100 }, (_, i) => ({
326
- type: 'performance' as const,
327
- message: `Collection${i} could be optimized`,
328
- item: `collection-${i}`,
329
- severity: 'warning' as const,
330
- })),
331
- };
332
-
333
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
334
-
335
- const startTime = Date.now();
336
- const result = await loadConfigWithPath(testDir, { validate: true });
337
- const validationTime = Date.now() - startTime;
338
-
339
- expect(validationTime).toBeLessThan(5000); // Should complete within 5 seconds
340
- expect(result.validation?.warnings).toHaveLength(100);
341
- });
342
- });
343
-
344
- describe('Migration Validation', () => {
345
- it('should validate configuration during migration from collections to dual schema', async () => {
346
- testDir = TestUtils.createTempDir();
347
-
348
- // Create legacy collections-only setup
349
- const config = TestUtils.createTestAppwriteConfig();
350
- fs.writeFileSync(
351
- path.join(testDir, 'appwriteConfig.ts'),
352
- `export default ${JSON.stringify(config, null, 2)};`
353
- );
354
-
355
- const collectionsDir = path.join(testDir, 'collections');
356
- fs.mkdirSync(collectionsDir);
357
-
358
- const collection = TestUtils.createTestCollection();
359
- fs.writeFileSync(
360
- path.join(collectionsDir, 'TestCollection.ts'),
361
- `export default ${JSON.stringify(collection, null, 2)};`
362
- );
363
-
364
- const mockValidation = {
365
- isValid: true,
366
- errors: [],
367
- warnings: [
368
- {
369
- type: 'migration_recommendation',
370
- message: 'Consider migrating to dual schema structure for better TablesDB support',
371
- item: 'project',
372
- severity: 'warning' as const,
373
- }
374
- ],
375
- };
376
-
377
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
378
-
379
- const result = await loadConfigWithPath(testDir, { validate: true });
380
-
381
- expect(result.validation?.warnings).toHaveLength(1);
382
- expect(result.validation?.warnings[0].type).toBe('migration_recommendation');
383
- });
384
-
385
- it('should validate that migrated configurations maintain compatibility', async () => {
386
- testDir = TestUtils.createTestProject({
387
- hasCollections: true,
388
- hasTables: true,
389
- });
390
-
391
- const mockValidation = {
392
- isValid: true,
393
- errors: [],
394
- warnings: [
395
- {
396
- type: 'compatibility_check',
397
- message: 'Verify that all collections work correctly with TablesDB API',
398
- item: 'TestCollection',
399
- severity: 'warning' as const,
400
- }
401
- ],
402
- };
403
-
404
- (validateCollectionsTablesConfig as jest.Mock).mockReturnValue(mockValidation);
405
-
406
- const result = await loadConfigWithPath(testDir, { validate: true });
407
-
408
- expect(result.validation?.warnings).toHaveLength(1);
409
- expect(result.validation?.warnings[0].type).toBe('compatibility_check');
410
- });
411
- });
412
- });
package/tsconfig.json DELETED
@@ -1,44 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- // Enable latest features
4
- "target": "ESNext",
5
- "module": "NodeNext",
6
- "lib": ["ESNext"],
7
- "moduleDetection": "force",
8
- "jsx": "react-jsx",
9
- "allowJs": true,
10
- "allowArbitraryExtensions": true,
11
- "allowSyntheticDefaultImports": true,
12
- "resolveJsonModule": true,
13
-
14
- // NodeNext mode
15
- "moduleResolution": "NodeNext",
16
- "verbatimModuleSyntax": true,
17
- "noEmit": false,
18
- "emitDeclarationOnly": false,
19
-
20
- // Best practices
21
- "strict": true,
22
- "skipLibCheck": true,
23
- "noFallthroughCasesInSwitch": true,
24
-
25
- // Some stricter flags (disabled by default)
26
- "noUnusedLocals": false,
27
- "noUnusedParameters": false,
28
- "noPropertyAccessFromIndexSignature": false,
29
- "baseUrl": ".",
30
- "esModuleInterop": true,
31
- "outDir": "./dist",
32
- "rootDir": "./src",
33
- "declaration": true
34
- },
35
- "include": ["src/**/*"],
36
- "exclude": [
37
- "node_modules",
38
- "dist",
39
- "src/appwrite",
40
- "src/functions/templates",
41
- "src/_test/appwrite",
42
- "example/*"
43
- ]
44
- }
File without changes
File without changes