appwrite-utils-cli 1.5.2 → 1.6.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.
- package/CHANGELOG.md +199 -0
- package/README.md +251 -29
- package/dist/adapters/AdapterFactory.d.ts +10 -3
- package/dist/adapters/AdapterFactory.js +213 -17
- package/dist/adapters/TablesDBAdapter.js +60 -17
- package/dist/backups/operations/bucketBackup.d.ts +19 -0
- package/dist/backups/operations/bucketBackup.js +197 -0
- package/dist/backups/operations/collectionBackup.d.ts +30 -0
- package/dist/backups/operations/collectionBackup.js +201 -0
- package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
- package/dist/backups/operations/comprehensiveBackup.js +238 -0
- package/dist/backups/schemas/bucketManifest.d.ts +93 -0
- package/dist/backups/schemas/bucketManifest.js +33 -0
- package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
- package/dist/backups/schemas/comprehensiveManifest.js +32 -0
- package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
- package/dist/backups/tracking/centralizedTracking.js +274 -0
- package/dist/cli/commands/configCommands.d.ts +8 -0
- package/dist/cli/commands/configCommands.js +160 -0
- package/dist/cli/commands/databaseCommands.d.ts +13 -0
- package/dist/cli/commands/databaseCommands.js +479 -0
- package/dist/cli/commands/functionCommands.d.ts +7 -0
- package/dist/cli/commands/functionCommands.js +289 -0
- package/dist/cli/commands/schemaCommands.d.ts +7 -0
- package/dist/cli/commands/schemaCommands.js +134 -0
- package/dist/cli/commands/transferCommands.d.ts +5 -0
- package/dist/cli/commands/transferCommands.js +384 -0
- package/dist/collections/attributes.d.ts +5 -4
- package/dist/collections/attributes.js +539 -246
- package/dist/collections/indexes.js +39 -37
- package/dist/collections/methods.d.ts +2 -16
- package/dist/collections/methods.js +90 -538
- package/dist/collections/transferOperations.d.ts +7 -0
- package/dist/collections/transferOperations.js +331 -0
- package/dist/collections/wipeOperations.d.ts +16 -0
- package/dist/collections/wipeOperations.js +328 -0
- package/dist/config/configMigration.d.ts +87 -0
- package/dist/config/configMigration.js +390 -0
- package/dist/config/configValidation.d.ts +66 -0
- package/dist/config/configValidation.js +358 -0
- package/dist/config/yamlConfig.d.ts +455 -1
- package/dist/config/yamlConfig.js +145 -52
- package/dist/databases/methods.js +3 -2
- package/dist/databases/setup.d.ts +1 -2
- package/dist/databases/setup.js +9 -87
- package/dist/examples/yamlTerminologyExample.d.ts +42 -0
- package/dist/examples/yamlTerminologyExample.js +269 -0
- package/dist/functions/deployments.js +11 -10
- package/dist/functions/methods.d.ts +1 -1
- package/dist/functions/methods.js +5 -4
- package/dist/init.js +9 -9
- package/dist/interactiveCLI.d.ts +8 -17
- package/dist/interactiveCLI.js +209 -1172
- package/dist/main.js +364 -21
- package/dist/migrations/afterImportActions.js +22 -30
- package/dist/migrations/appwriteToX.js +71 -25
- package/dist/migrations/dataLoader.js +35 -26
- package/dist/migrations/importController.js +29 -30
- package/dist/migrations/relationships.js +13 -12
- package/dist/migrations/services/ImportOrchestrator.js +16 -19
- package/dist/migrations/transfer.js +46 -46
- package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +3 -1
- package/dist/migrations/yaml/YamlImportConfigLoader.js +6 -3
- package/dist/migrations/yaml/YamlImportIntegration.d.ts +9 -3
- package/dist/migrations/yaml/YamlImportIntegration.js +22 -11
- package/dist/migrations/yaml/generateImportSchemas.d.ts +14 -1
- package/dist/migrations/yaml/generateImportSchemas.js +736 -7
- package/dist/schemas/authUser.d.ts +1 -1
- package/dist/setupController.js +3 -2
- package/dist/shared/backupMetadataSchema.d.ts +94 -0
- package/dist/shared/backupMetadataSchema.js +38 -0
- package/dist/shared/backupTracking.d.ts +18 -0
- package/dist/shared/backupTracking.js +176 -0
- package/dist/shared/confirmationDialogs.js +15 -15
- package/dist/shared/errorUtils.d.ts +54 -0
- package/dist/shared/errorUtils.js +95 -0
- package/dist/shared/functionManager.js +20 -19
- package/dist/shared/indexManager.js +12 -11
- package/dist/shared/jsonSchemaGenerator.js +10 -26
- package/dist/shared/logging.d.ts +51 -0
- package/dist/shared/logging.js +70 -0
- package/dist/shared/messageFormatter.d.ts +2 -0
- package/dist/shared/messageFormatter.js +10 -0
- package/dist/shared/migrationHelpers.d.ts +6 -16
- package/dist/shared/migrationHelpers.js +24 -21
- package/dist/shared/operationLogger.d.ts +8 -1
- package/dist/shared/operationLogger.js +11 -24
- package/dist/shared/operationQueue.d.ts +28 -1
- package/dist/shared/operationQueue.js +268 -66
- package/dist/shared/operationsTable.d.ts +26 -0
- package/dist/shared/operationsTable.js +286 -0
- package/dist/shared/operationsTableSchema.d.ts +48 -0
- package/dist/shared/operationsTableSchema.js +35 -0
- package/dist/shared/relationshipExtractor.d.ts +56 -0
- package/dist/shared/relationshipExtractor.js +138 -0
- package/dist/shared/schemaGenerator.d.ts +19 -1
- package/dist/shared/schemaGenerator.js +56 -75
- package/dist/storage/backupCompression.d.ts +20 -0
- package/dist/storage/backupCompression.js +67 -0
- package/dist/storage/methods.d.ts +16 -2
- package/dist/storage/methods.js +98 -14
- package/dist/users/methods.js +9 -8
- package/dist/utils/configDiscovery.d.ts +78 -0
- package/dist/utils/configDiscovery.js +430 -0
- package/dist/utils/directoryUtils.d.ts +22 -0
- package/dist/utils/directoryUtils.js +59 -0
- package/dist/utils/getClientFromConfig.d.ts +17 -8
- package/dist/utils/getClientFromConfig.js +162 -17
- package/dist/utils/helperFunctions.d.ts +16 -2
- package/dist/utils/helperFunctions.js +19 -5
- package/dist/utils/loadConfigs.d.ts +34 -9
- package/dist/utils/loadConfigs.js +236 -316
- package/dist/utils/pathResolvers.d.ts +53 -0
- package/dist/utils/pathResolvers.js +72 -0
- package/dist/utils/projectConfig.d.ts +119 -0
- package/dist/utils/projectConfig.js +171 -0
- package/dist/utils/retryFailedPromises.js +4 -2
- package/dist/utils/sessionAuth.d.ts +48 -0
- package/dist/utils/sessionAuth.js +164 -0
- package/dist/utils/sessionPreservationExample.d.ts +1666 -0
- package/dist/utils/sessionPreservationExample.js +101 -0
- package/dist/utils/setupFiles.js +301 -41
- package/dist/utils/typeGuards.d.ts +35 -0
- package/dist/utils/typeGuards.js +57 -0
- package/dist/utils/versionDetection.js +145 -9
- package/dist/utils/yamlConverter.d.ts +53 -3
- package/dist/utils/yamlConverter.js +232 -13
- package/dist/utils/yamlLoader.d.ts +70 -0
- package/dist/utils/yamlLoader.js +263 -0
- package/dist/utilsController.d.ts +36 -3
- package/dist/utilsController.js +186 -56
- package/package.json +12 -2
- package/src/adapters/AdapterFactory.ts +263 -35
- package/src/adapters/TablesDBAdapter.ts +225 -36
- package/src/backups/operations/bucketBackup.ts +277 -0
- package/src/backups/operations/collectionBackup.ts +310 -0
- package/src/backups/operations/comprehensiveBackup.ts +342 -0
- package/src/backups/schemas/bucketManifest.ts +78 -0
- package/src/backups/schemas/comprehensiveManifest.ts +76 -0
- package/src/backups/tracking/centralizedTracking.ts +352 -0
- package/src/cli/commands/configCommands.ts +194 -0
- package/src/cli/commands/databaseCommands.ts +635 -0
- package/src/cli/commands/functionCommands.ts +379 -0
- package/src/cli/commands/schemaCommands.ts +163 -0
- package/src/cli/commands/transferCommands.ts +457 -0
- package/src/collections/attributes.ts +900 -621
- package/src/collections/attributes.ts.backup +1555 -0
- package/src/collections/indexes.ts +116 -114
- package/src/collections/methods.ts +295 -968
- package/src/collections/transferOperations.ts +516 -0
- package/src/collections/wipeOperations.ts +501 -0
- package/src/config/README.md +274 -0
- package/src/config/configMigration.ts +575 -0
- package/src/config/configValidation.ts +445 -0
- package/src/config/yamlConfig.ts +168 -55
- package/src/databases/methods.ts +3 -2
- package/src/databases/setup.ts +11 -138
- package/src/examples/yamlTerminologyExample.ts +341 -0
- package/src/functions/deployments.ts +14 -12
- package/src/functions/methods.ts +11 -11
- package/src/functions/templates/hono-typescript/README.md +286 -0
- package/src/functions/templates/hono-typescript/package.json +26 -0
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
- package/src/functions/templates/hono-typescript/src/app.ts +180 -0
- package/src/functions/templates/hono-typescript/src/context.ts +103 -0
- package/src/functions/templates/hono-typescript/src/index.ts +54 -0
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
- package/src/functions/templates/hono-typescript/tsconfig.json +20 -0
- package/src/functions/templates/typescript-node/package.json +2 -1
- package/src/functions/templates/typescript-node/src/context.ts +103 -0
- package/src/functions/templates/typescript-node/src/index.ts +18 -12
- package/src/functions/templates/uv/pyproject.toml +1 -0
- package/src/functions/templates/uv/src/context.py +125 -0
- package/src/functions/templates/uv/src/index.py +35 -5
- package/src/init.ts +9 -11
- package/src/interactiveCLI.ts +274 -1563
- package/src/main.ts +418 -24
- package/src/migrations/afterImportActions.ts +71 -44
- package/src/migrations/appwriteToX.ts +100 -34
- package/src/migrations/dataLoader.ts +48 -34
- package/src/migrations/importController.ts +44 -39
- package/src/migrations/relationships.ts +28 -18
- package/src/migrations/services/ImportOrchestrator.ts +24 -27
- package/src/migrations/transfer.ts +159 -121
- package/src/migrations/yaml/YamlImportConfigLoader.ts +11 -4
- package/src/migrations/yaml/YamlImportIntegration.ts +47 -20
- package/src/migrations/yaml/generateImportSchemas.ts +751 -12
- package/src/setupController.ts +3 -2
- package/src/shared/backupMetadataSchema.ts +93 -0
- package/src/shared/backupTracking.ts +211 -0
- package/src/shared/confirmationDialogs.ts +19 -19
- package/src/shared/errorUtils.ts +110 -0
- package/src/shared/functionManager.ts +21 -20
- package/src/shared/indexManager.ts +12 -11
- package/src/shared/jsonSchemaGenerator.ts +38 -52
- package/src/shared/logging.ts +75 -0
- package/src/shared/messageFormatter.ts +14 -1
- package/src/shared/migrationHelpers.ts +45 -38
- package/src/shared/operationLogger.ts +11 -36
- package/src/shared/operationQueue.ts +322 -93
- package/src/shared/operationsTable.ts +338 -0
- package/src/shared/operationsTableSchema.ts +60 -0
- package/src/shared/relationshipExtractor.ts +214 -0
- package/src/shared/schemaGenerator.ts +179 -219
- package/src/storage/backupCompression.ts +88 -0
- package/src/storage/methods.ts +131 -34
- package/src/users/methods.ts +11 -9
- package/src/utils/configDiscovery.ts +502 -0
- package/src/utils/directoryUtils.ts +61 -0
- package/src/utils/getClientFromConfig.ts +205 -22
- package/src/utils/helperFunctions.ts +23 -5
- package/src/utils/loadConfigs.ts +313 -345
- package/src/utils/pathResolvers.ts +81 -0
- package/src/utils/projectConfig.ts +299 -0
- package/src/utils/retryFailedPromises.ts +4 -2
- package/src/utils/sessionAuth.ts +230 -0
- package/src/utils/setupFiles.ts +322 -54
- package/src/utils/typeGuards.ts +65 -0
- package/src/utils/versionDetection.ts +218 -64
- package/src/utils/yamlConverter.ts +296 -13
- package/src/utils/yamlLoader.ts +364 -0
- package/src/utilsController.ts +314 -110
- package/tests/README.md +497 -0
- package/tests/adapters/AdapterFactory.test.ts +277 -0
- package/tests/integration/syncOperations.test.ts +463 -0
- package/tests/jest.config.js +25 -0
- package/tests/migration/configMigration.test.ts +546 -0
- package/tests/setup.ts +62 -0
- package/tests/testUtils.ts +340 -0
- package/tests/utils/loadConfigs.test.ts +350 -0
- package/tests/validation/configValidation.test.ts +412 -0
- package/src/utils/schemaStrings.ts +0 -517
@@ -27,19 +27,56 @@ export interface YamlCollectionData {
|
|
27
27
|
onDelete?: string;
|
28
28
|
side?: string;
|
29
29
|
}>;
|
30
|
+
// Table terminology support (columns is an alias for attributes)
|
31
|
+
columns?: Array<{
|
32
|
+
key: string;
|
33
|
+
type: string;
|
34
|
+
size?: number;
|
35
|
+
required?: boolean;
|
36
|
+
array?: boolean;
|
37
|
+
default?: any;
|
38
|
+
min?: number;
|
39
|
+
max?: number;
|
40
|
+
elements?: string[];
|
41
|
+
relatedTable?: string;
|
42
|
+
relationType?: string;
|
43
|
+
twoWay?: boolean;
|
44
|
+
twoWayKey?: string;
|
45
|
+
onDelete?: string;
|
46
|
+
side?: string;
|
47
|
+
}>;
|
30
48
|
indexes?: Array<{
|
31
49
|
key: string;
|
32
50
|
type: string;
|
33
51
|
attributes: string[];
|
52
|
+
columns?: string[]; // Support both terminologies
|
34
53
|
orders?: string[];
|
35
54
|
}>;
|
36
55
|
importDefs?: any[];
|
37
56
|
}
|
38
57
|
|
58
|
+
/**
|
59
|
+
* Configuration for terminology selection
|
60
|
+
*/
|
61
|
+
export interface YamlTerminologyConfig {
|
62
|
+
useTableTerminology: boolean;
|
63
|
+
entityType: 'collection' | 'table';
|
64
|
+
schemaPath?: string;
|
65
|
+
}
|
66
|
+
|
39
67
|
/**
|
40
68
|
* Converts a Collection object to YAML format with proper schema reference
|
69
|
+
* Supports both collection and table terminology based on configuration
|
41
70
|
*/
|
42
|
-
export function collectionToYaml(
|
71
|
+
export function collectionToYaml(
|
72
|
+
collection: Collection | CollectionCreate,
|
73
|
+
config: YamlTerminologyConfig = {
|
74
|
+
useTableTerminology: false,
|
75
|
+
entityType: 'collection',
|
76
|
+
schemaPath: "../.yaml_schemas/collection.schema.json"
|
77
|
+
}
|
78
|
+
): string {
|
79
|
+
const schemaPath = config.schemaPath || (config.useTableTerminology ? "../.yaml_schemas/table.schema.json" : "../.yaml_schemas/collection.schema.json");
|
43
80
|
// Convert Collection to YamlCollectionData format
|
44
81
|
const yamlData: YamlCollectionData = {
|
45
82
|
name: collection.name,
|
@@ -56,9 +93,9 @@ export function collectionToYaml(collection: Collection | CollectionCreate, sche
|
|
56
93
|
}));
|
57
94
|
}
|
58
95
|
|
59
|
-
// Convert attributes
|
96
|
+
// Convert attributes/columns based on terminology
|
60
97
|
if (collection.attributes && collection.attributes.length > 0) {
|
61
|
-
|
98
|
+
const attributeArray = collection.attributes.map(attr => {
|
62
99
|
const yamlAttr: any = {
|
63
100
|
key: attr.key,
|
64
101
|
type: attr.type,
|
@@ -81,16 +118,33 @@ export function collectionToYaml(collection: Collection | CollectionCreate, sche
|
|
81
118
|
|
82
119
|
return yamlAttr;
|
83
120
|
});
|
121
|
+
|
122
|
+
// Use appropriate terminology
|
123
|
+
if (config.useTableTerminology) {
|
124
|
+
yamlData.columns = attributeArray;
|
125
|
+
} else {
|
126
|
+
yamlData.attributes = attributeArray;
|
127
|
+
}
|
84
128
|
}
|
85
129
|
|
86
|
-
// Convert indexes
|
130
|
+
// Convert indexes with appropriate field references
|
87
131
|
if (collection.indexes && collection.indexes.length > 0) {
|
88
|
-
yamlData.indexes = collection.indexes.map(idx =>
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
132
|
+
yamlData.indexes = collection.indexes.map(idx => {
|
133
|
+
const indexData: any = {
|
134
|
+
key: idx.key,
|
135
|
+
type: idx.type,
|
136
|
+
...(idx.orders && idx.orders.length > 0 ? { orders: idx.orders } : {})
|
137
|
+
};
|
138
|
+
|
139
|
+
// Use appropriate field terminology for index references
|
140
|
+
if (config.useTableTerminology) {
|
141
|
+
indexData.columns = idx.attributes;
|
142
|
+
} else {
|
143
|
+
indexData.attributes = idx.attributes;
|
144
|
+
}
|
145
|
+
|
146
|
+
return indexData;
|
147
|
+
});
|
94
148
|
}
|
95
149
|
|
96
150
|
// Add import definitions if they exist
|
@@ -109,8 +163,11 @@ export function collectionToYaml(collection: Collection | CollectionCreate, sche
|
|
109
163
|
forceQuotes: false,
|
110
164
|
});
|
111
165
|
|
166
|
+
// Determine the appropriate schema comment based on configuration
|
167
|
+
const entityType = config.useTableTerminology ? 'Table' : 'Collection';
|
168
|
+
|
112
169
|
return `# yaml-language-server: $schema=${schemaPath}
|
113
|
-
#
|
170
|
+
# ${entityType} Definition: ${collection.name}
|
114
171
|
${yamlContent}`;
|
115
172
|
}
|
116
173
|
|
@@ -122,9 +179,235 @@ export function sanitizeFilename(name: string): string {
|
|
122
179
|
}
|
123
180
|
|
124
181
|
/**
|
125
|
-
* Generates the filename for a collection YAML file
|
182
|
+
* Generates the filename for a collection/table YAML file
|
126
183
|
*/
|
127
|
-
export function getCollectionYamlFilename(
|
184
|
+
export function getCollectionYamlFilename(
|
185
|
+
collection: Collection | CollectionCreate,
|
186
|
+
useTableTerminology = false
|
187
|
+
): string {
|
128
188
|
return `${sanitizeFilename(collection.name)}.yaml`;
|
129
189
|
}
|
130
190
|
|
191
|
+
/**
|
192
|
+
* Converts column terminology back to attribute terminology for loading
|
193
|
+
*/
|
194
|
+
export function normalizeYamlData(yamlData: YamlCollectionData): YamlCollectionData {
|
195
|
+
const normalized = { ...yamlData };
|
196
|
+
|
197
|
+
// Convert columns to attributes if present
|
198
|
+
if (yamlData.columns && !yamlData.attributes) {
|
199
|
+
normalized.attributes = yamlData.columns.map(col => ({
|
200
|
+
...col,
|
201
|
+
// Convert table-specific fields back to collection terminology
|
202
|
+
relatedCollection: (col as any).relatedTable || (col as any).relatedCollection,
|
203
|
+
}));
|
204
|
+
delete normalized.columns;
|
205
|
+
}
|
206
|
+
|
207
|
+
// Normalize index field references
|
208
|
+
if (normalized.indexes) {
|
209
|
+
normalized.indexes = normalized.indexes.map(idx => ({
|
210
|
+
...idx,
|
211
|
+
attributes: idx.columns || idx.attributes,
|
212
|
+
// Remove columns field after normalization
|
213
|
+
columns: undefined
|
214
|
+
}));
|
215
|
+
}
|
216
|
+
|
217
|
+
return normalized;
|
218
|
+
}
|
219
|
+
|
220
|
+
/**
|
221
|
+
* Determines if YAML data uses table terminology
|
222
|
+
*/
|
223
|
+
export function usesTableTerminology(yamlData: YamlCollectionData): boolean {
|
224
|
+
return !!(yamlData.columns && yamlData.columns.length > 0) ||
|
225
|
+
!!(yamlData.indexes?.some(idx => !!(idx as any).columns));
|
226
|
+
}
|
227
|
+
|
228
|
+
/**
|
229
|
+
* Converts between attribute and column terminology
|
230
|
+
*/
|
231
|
+
export function convertTerminology(
|
232
|
+
yamlData: YamlCollectionData,
|
233
|
+
toTableTerminology: boolean
|
234
|
+
): YamlCollectionData {
|
235
|
+
if (toTableTerminology) {
|
236
|
+
// Convert attributes to columns
|
237
|
+
const converted = { ...yamlData };
|
238
|
+
if (yamlData.attributes) {
|
239
|
+
converted.columns = yamlData.attributes.map(attr => ({
|
240
|
+
...attr,
|
241
|
+
relatedTable: attr.relatedCollection,
|
242
|
+
relatedCollection: undefined
|
243
|
+
}));
|
244
|
+
delete converted.attributes;
|
245
|
+
}
|
246
|
+
|
247
|
+
// Convert index references
|
248
|
+
if (converted.indexes) {
|
249
|
+
converted.indexes = converted.indexes.map(idx => ({
|
250
|
+
...idx,
|
251
|
+
columns: idx.attributes,
|
252
|
+
attributes: idx.attributes // Keep both for compatibility
|
253
|
+
}));
|
254
|
+
}
|
255
|
+
|
256
|
+
return converted;
|
257
|
+
} else {
|
258
|
+
// Convert columns to attributes (normalize)
|
259
|
+
return normalizeYamlData(yamlData);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
/**
|
264
|
+
* Generates a template YAML file for collections or tables
|
265
|
+
*/
|
266
|
+
export function generateYamlTemplate(
|
267
|
+
entityName: string,
|
268
|
+
config: YamlTerminologyConfig
|
269
|
+
): string {
|
270
|
+
const entityType = config.useTableTerminology ? 'table' : 'collection';
|
271
|
+
const fieldsKey = config.useTableTerminology ? 'columns' : 'attributes';
|
272
|
+
const relationKey = config.useTableTerminology ? 'relatedTable' : 'relatedCollection';
|
273
|
+
const indexFieldsKey = config.useTableTerminology ? 'columns' : 'attributes';
|
274
|
+
|
275
|
+
// Build template dynamically to handle computed property names
|
276
|
+
const fieldsArray = [
|
277
|
+
{
|
278
|
+
key: "id",
|
279
|
+
type: "string",
|
280
|
+
required: true,
|
281
|
+
size: 36
|
282
|
+
},
|
283
|
+
{
|
284
|
+
key: "name",
|
285
|
+
type: "string",
|
286
|
+
required: true,
|
287
|
+
size: 255
|
288
|
+
},
|
289
|
+
{
|
290
|
+
key: "description",
|
291
|
+
type: "string",
|
292
|
+
required: false,
|
293
|
+
size: 1000
|
294
|
+
},
|
295
|
+
{
|
296
|
+
key: "isActive",
|
297
|
+
type: "boolean",
|
298
|
+
required: true,
|
299
|
+
default: true
|
300
|
+
},
|
301
|
+
{
|
302
|
+
key: "createdAt",
|
303
|
+
type: "datetime",
|
304
|
+
required: true
|
305
|
+
},
|
306
|
+
{
|
307
|
+
key: "tags",
|
308
|
+
type: "string",
|
309
|
+
array: true,
|
310
|
+
required: false
|
311
|
+
},
|
312
|
+
{
|
313
|
+
key: "categoryId",
|
314
|
+
type: "relationship",
|
315
|
+
relationType: "manyToOne",
|
316
|
+
[relationKey]: "Categories",
|
317
|
+
required: false,
|
318
|
+
onDelete: "setNull"
|
319
|
+
}
|
320
|
+
];
|
321
|
+
|
322
|
+
const indexesArray = [
|
323
|
+
{
|
324
|
+
key: "name_index",
|
325
|
+
type: "key",
|
326
|
+
[indexFieldsKey]: ["name"]
|
327
|
+
},
|
328
|
+
{
|
329
|
+
key: "active_created_index",
|
330
|
+
type: "key",
|
331
|
+
[indexFieldsKey]: ["isActive", "createdAt"],
|
332
|
+
orders: ["asc", "desc"]
|
333
|
+
},
|
334
|
+
{
|
335
|
+
key: "name_fulltext",
|
336
|
+
type: "fulltext",
|
337
|
+
[indexFieldsKey]: ["name", "description"]
|
338
|
+
}
|
339
|
+
];
|
340
|
+
|
341
|
+
const template: YamlCollectionData = {
|
342
|
+
name: entityName,
|
343
|
+
id: entityName.toLowerCase().replace(/\s+/g, '_'),
|
344
|
+
documentSecurity: false,
|
345
|
+
enabled: true,
|
346
|
+
permissions: [
|
347
|
+
{
|
348
|
+
permission: "read",
|
349
|
+
target: "users"
|
350
|
+
},
|
351
|
+
{
|
352
|
+
permission: "create",
|
353
|
+
target: "users"
|
354
|
+
},
|
355
|
+
{
|
356
|
+
permission: "update",
|
357
|
+
target: "users"
|
358
|
+
},
|
359
|
+
{
|
360
|
+
permission: "delete",
|
361
|
+
target: "users"
|
362
|
+
}
|
363
|
+
],
|
364
|
+
importDefs: []
|
365
|
+
};
|
366
|
+
|
367
|
+
// Assign fields with correct property name
|
368
|
+
(template as any)[fieldsKey] = fieldsArray;
|
369
|
+
template.indexes = indexesArray as any;
|
370
|
+
|
371
|
+
// Generate YAML content
|
372
|
+
const yamlContent = yaml.dump(template, {
|
373
|
+
indent: 2,
|
374
|
+
lineWidth: 120,
|
375
|
+
sortKeys: false,
|
376
|
+
quotingType: '"',
|
377
|
+
forceQuotes: false,
|
378
|
+
});
|
379
|
+
|
380
|
+
// Add schema reference and documentation
|
381
|
+
const schemaPath = config.schemaPath ||
|
382
|
+
(config.useTableTerminology ? "../.yaml_schemas/table.schema.json" : "../.yaml_schemas/collection.schema.json");
|
383
|
+
|
384
|
+
const documentation = config.useTableTerminology
|
385
|
+
? `# Table Definition: ${entityName}\n# This file defines a table for the new TablesDB API\n#\n# Key differences from Collections:\n# - Uses 'columns' instead of 'attributes'\n# - Uses 'relatedTable' instead of 'relatedCollection'\n# - Indexes reference 'columns' instead of 'attributes'\n#\n`
|
386
|
+
: `# Collection Definition: ${entityName}\n# This file defines a collection for the legacy Databases API\n#\n# Note: For new projects, consider using TablesDB API with table definitions\n#\n`;
|
387
|
+
|
388
|
+
return `# yaml-language-server: $schema=${schemaPath}\n${documentation}${yamlContent}`;
|
389
|
+
}
|
390
|
+
|
391
|
+
/**
|
392
|
+
* Generates example YAML files for both collection and table formats
|
393
|
+
*/
|
394
|
+
export function generateExampleYamls(entityName: string): {
|
395
|
+
collection: string;
|
396
|
+
table: string;
|
397
|
+
} {
|
398
|
+
const collectionYaml = generateYamlTemplate(entityName, {
|
399
|
+
useTableTerminology: false,
|
400
|
+
entityType: 'collection'
|
401
|
+
});
|
402
|
+
|
403
|
+
const tableYaml = generateYamlTemplate(entityName, {
|
404
|
+
useTableTerminology: true,
|
405
|
+
entityType: 'table'
|
406
|
+
});
|
407
|
+
|
408
|
+
return {
|
409
|
+
collection: collectionYaml,
|
410
|
+
table: tableYaml
|
411
|
+
};
|
412
|
+
}
|
413
|
+
|