chirag-appwrite-cli 0.3.0 → 0.3.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/dist/bundle.cjs +169 -102
- package/dist/lib/commands/generators/databases.d.ts +11 -1
- package/dist/lib/commands/generators/databases.d.ts.map +1 -1
- package/dist/lib/commands/generators/databases.js +173 -103
- package/dist/lib/commands/generators/databases.js.map +1 -1
- package/dist/package.json +1 -1
- package/lib/commands/generators/databases.ts +180 -112
- package/package.json +1 -1
package/dist/bundle.cjs
CHANGED
|
@@ -94643,6 +94643,20 @@ var DatabasesGenerator = class {
|
|
|
94643
94643
|
getFields(entity) {
|
|
94644
94644
|
return "columns" in entity ? entity.columns : entity.attributes;
|
|
94645
94645
|
}
|
|
94646
|
+
/**
|
|
94647
|
+
* Checks if an entity has relationship columns.
|
|
94648
|
+
* Used to disable bulk methods for tables with relationships.
|
|
94649
|
+
*
|
|
94650
|
+
* TODO: Remove this restriction when bulk operations support relationships.
|
|
94651
|
+
* To enable bulk methods for all tables, simply return false here:
|
|
94652
|
+
* return false;
|
|
94653
|
+
*/
|
|
94654
|
+
hasRelationshipColumns(entity) {
|
|
94655
|
+
const fields = this.getFields(entity);
|
|
94656
|
+
if (!fields)
|
|
94657
|
+
return false;
|
|
94658
|
+
return fields.some((field) => field.type === "relationship");
|
|
94659
|
+
}
|
|
94646
94660
|
generateTableType(entity, entities) {
|
|
94647
94661
|
const fields = this.getFields(entity);
|
|
94648
94662
|
if (!fields)
|
|
@@ -94753,7 +94767,7 @@ export type QueryBuilder<T> = {
|
|
|
94753
94767
|
}`;
|
|
94754
94768
|
}
|
|
94755
94769
|
generateDatabaseTablesType(entitiesByDb, appwriteDep) {
|
|
94756
|
-
const
|
|
94770
|
+
const supportsBulk = this.supportsBulkMethods(appwriteDep);
|
|
94757
94771
|
const dbReturnTypes = Array.from(entitiesByDb.entries()).map(([dbId, dbEntities]) => {
|
|
94758
94772
|
const tableTypes = dbEntities.map((entity) => {
|
|
94759
94773
|
const typeName = toPascalCase(entity.name);
|
|
@@ -94762,10 +94776,11 @@ export type QueryBuilder<T> = {
|
|
|
94762
94776
|
update: (id: string, data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { permissions?: Permission[]; transactionId?: string }) => Promise<${typeName}>;
|
|
94763
94777
|
delete: (id: string, options?: { transactionId?: string }) => Promise<void>;
|
|
94764
94778
|
list: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[] }) => Promise<{ total: number; rows: ${typeName}[] }>;`;
|
|
94765
|
-
const
|
|
94766
|
-
|
|
94767
|
-
|
|
94768
|
-
|
|
94779
|
+
const canUseBulkMethods = supportsBulk && !this.hasRelationshipColumns(entity);
|
|
94780
|
+
const bulkMethods = canUseBulkMethods ? `
|
|
94781
|
+
createMany: (rows: Array<Omit<${typeName}, keyof Models.Row> & { $id?: string; $permissions?: string[] }>, options?: { transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;
|
|
94782
|
+
updateMany: (data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { queries?: (q: QueryBuilder<${typeName}>) => string[]; transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;
|
|
94783
|
+
deleteMany: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[]; transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;` : "";
|
|
94769
94784
|
return ` '${entity.name}': {
|
|
94770
94785
|
${baseMethods}${bulkMethods}
|
|
94771
94786
|
}`;
|
|
@@ -94809,19 +94824,19 @@ ${dbReturnTypes}
|
|
|
94809
94824
|
}
|
|
94810
94825
|
generateQueryBuilder() {
|
|
94811
94826
|
return `const createQueryBuilder = <T>(): QueryBuilder<T> => ({
|
|
94812
|
-
equal: (field, value) => Query.equal(String(field), value),
|
|
94813
|
-
notEqual: (field, value) => Query.notEqual(String(field), value),
|
|
94814
|
-
lessThan: (field, value) => Query.lessThan(String(field), value),
|
|
94815
|
-
lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value),
|
|
94816
|
-
greaterThan: (field, value) => Query.greaterThan(String(field), value),
|
|
94817
|
-
greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value),
|
|
94818
|
-
contains: (field, value) => Query.contains(String(field), value),
|
|
94827
|
+
equal: (field, value) => Query.equal(String(field), value as any),
|
|
94828
|
+
notEqual: (field, value) => Query.notEqual(String(field), value as any),
|
|
94829
|
+
lessThan: (field, value) => Query.lessThan(String(field), value as any),
|
|
94830
|
+
lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),
|
|
94831
|
+
greaterThan: (field, value) => Query.greaterThan(String(field), value as any),
|
|
94832
|
+
greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),
|
|
94833
|
+
contains: (field, value) => Query.contains(String(field), value as any),
|
|
94819
94834
|
search: (field, value) => Query.search(String(field), value),
|
|
94820
94835
|
isNull: (field) => Query.isNull(String(field)),
|
|
94821
94836
|
isNotNull: (field) => Query.isNotNull(String(field)),
|
|
94822
94837
|
startsWith: (field, value) => Query.startsWith(String(field), value),
|
|
94823
94838
|
endsWith: (field, value) => Query.endsWith(String(field), value),
|
|
94824
|
-
between: (field, start, end) => Query.between(String(field), start, end),
|
|
94839
|
+
between: (field, start, end) => Query.between(String(field), start as any, end as any),
|
|
94825
94840
|
select: (fields) => Query.select(fields.map(String)),
|
|
94826
94841
|
orderAsc: (field) => Query.orderAsc(String(field)),
|
|
94827
94842
|
orderDesc: (field) => Query.orderDesc(String(field)),
|
|
@@ -94833,84 +94848,30 @@ ${dbReturnTypes}
|
|
|
94833
94848
|
and: (...queries) => Query.and(queries),
|
|
94834
94849
|
})`;
|
|
94835
94850
|
}
|
|
94836
|
-
|
|
94837
|
-
const
|
|
94838
|
-
|
|
94839
|
-
|
|
94840
|
-
|
|
94841
|
-
|
|
94842
|
-
tablesDB.createRow<${typeName}>({
|
|
94843
|
-
databaseId: '${dbId}',
|
|
94844
|
-
tableId: '${entity.$id}',
|
|
94845
|
-
rowId: options?.rowId ?? ID.unique(),
|
|
94846
|
-
data,
|
|
94847
|
-
permissions: options?.permissions?.map((p) => p.toString()),
|
|
94848
|
-
transactionId: options?.transactionId,
|
|
94849
|
-
}),
|
|
94850
|
-
get: (id: string) =>
|
|
94851
|
-
tablesDB.getRow<${typeName}>({
|
|
94852
|
-
databaseId: '${dbId}',
|
|
94853
|
-
tableId: '${entity.$id}',
|
|
94854
|
-
rowId: id,
|
|
94855
|
-
}),
|
|
94856
|
-
update: (id: string, data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { permissions?: Permission[]; transactionId?: string }) =>
|
|
94857
|
-
tablesDB.updateRow<${typeName}>({
|
|
94858
|
-
databaseId: '${dbId}',
|
|
94859
|
-
tableId: '${entity.$id}',
|
|
94860
|
-
rowId: id,
|
|
94861
|
-
data,
|
|
94862
|
-
...(options?.permissions ? { permissions: options.permissions.map((p) => p.toString()) } : {}),
|
|
94863
|
-
transactionId: options?.transactionId,
|
|
94864
|
-
}),
|
|
94865
|
-
delete: async (id: string, options?: { transactionId?: string }) => {
|
|
94866
|
-
await tablesDB.deleteRow({
|
|
94867
|
-
databaseId: '${dbId}',
|
|
94868
|
-
tableId: '${entity.$id}',
|
|
94869
|
-
rowId: id,
|
|
94870
|
-
transactionId: options?.transactionId,
|
|
94871
|
-
});
|
|
94872
|
-
},
|
|
94873
|
-
list: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[] }) =>
|
|
94874
|
-
tablesDB.listRows<${typeName}>({
|
|
94875
|
-
databaseId: '${dbId}',
|
|
94876
|
-
tableId: '${entity.$id}',
|
|
94877
|
-
queries: options?.queries?.(createQueryBuilder<${typeName}>()),
|
|
94878
|
-
}),`;
|
|
94879
|
-
const bulkMethods = hasBulkMethods ? `
|
|
94880
|
-
createMany: (rows: Array<{ data: Omit<${typeName}, keyof Models.Row>; rowId?: string; permissions?: Permission[] }>, options?: { transactionId?: string }) =>
|
|
94881
|
-
tablesDB.createRows<${typeName}>({
|
|
94882
|
-
databaseId: '${dbId}',
|
|
94883
|
-
tableId: '${entity.$id}',
|
|
94884
|
-
rows: rows.map((row) => ({
|
|
94885
|
-
rowId: row.rowId ?? ID.unique(),
|
|
94886
|
-
data: row.data,
|
|
94887
|
-
permissions: row.permissions?.map((p) => p.toString()),
|
|
94888
|
-
})),
|
|
94889
|
-
transactionId: options?.transactionId,
|
|
94890
|
-
}),
|
|
94891
|
-
updateMany: (rows: Array<{ rowId: string; data: Partial<Omit<${typeName}, keyof Models.Row>>; permissions?: Permission[] }>, options?: { transactionId?: string }) =>
|
|
94892
|
-
tablesDB.updateRows<${typeName}>({
|
|
94893
|
-
databaseId: '${dbId}',
|
|
94894
|
-
tableId: '${entity.$id}',
|
|
94895
|
-
rows: rows.map((row) => ({
|
|
94896
|
-
rowId: row.rowId,
|
|
94897
|
-
data: row.data,
|
|
94898
|
-
permissions: row.permissions?.map((p) => p.toString()),
|
|
94899
|
-
})),
|
|
94900
|
-
transactionId: options?.transactionId,
|
|
94901
|
-
}),
|
|
94902
|
-
deleteMany: async (rowIds: string[], options?: { transactionId?: string }) => {
|
|
94903
|
-
await tablesDB.deleteRows({
|
|
94904
|
-
databaseId: '${dbId}',
|
|
94905
|
-
tableId: '${entity.$id}',
|
|
94906
|
-
rows: rowIds.map((rowId) => ({ rowId })),
|
|
94907
|
-
transactionId: options?.transactionId,
|
|
94908
|
-
});
|
|
94909
|
-
},` : "";
|
|
94910
|
-
return ` '${entityName}': {
|
|
94911
|
-
${baseMethods}${bulkMethods}
|
|
94912
|
-
}`;
|
|
94851
|
+
generateTableIdMap(entitiesByDb) {
|
|
94852
|
+
const dbMappings = Array.from(entitiesByDb.entries()).map(([dbId, dbEntities]) => {
|
|
94853
|
+
const tableMappings = dbEntities.map((entity) => ` '${entity.name}': '${entity.$id}'`).join(",\n");
|
|
94854
|
+
return ` '${dbId}': {
|
|
94855
|
+
${tableMappings}
|
|
94856
|
+
}`;
|
|
94913
94857
|
}).join(",\n");
|
|
94858
|
+
return `const tableIdMap: Record<string, Record<string, string>> = {
|
|
94859
|
+
${dbMappings}
|
|
94860
|
+
}`;
|
|
94861
|
+
}
|
|
94862
|
+
generateTablesWithRelationships(entitiesByDb) {
|
|
94863
|
+
const tablesWithRelationships = [];
|
|
94864
|
+
for (const [dbId, dbEntities] of entitiesByDb.entries()) {
|
|
94865
|
+
for (const entity of dbEntities) {
|
|
94866
|
+
if (this.hasRelationshipColumns(entity)) {
|
|
94867
|
+
tablesWithRelationships.push(`'${dbId}:${entity.name}'`);
|
|
94868
|
+
}
|
|
94869
|
+
}
|
|
94870
|
+
}
|
|
94871
|
+
if (tablesWithRelationships.length === 0) {
|
|
94872
|
+
return `const tablesWithRelationships = new Set<string>()`;
|
|
94873
|
+
}
|
|
94874
|
+
return `const tablesWithRelationships = new Set<string>([${tablesWithRelationships.join(", ")}])`;
|
|
94914
94875
|
}
|
|
94915
94876
|
generateDatabasesFile(config2) {
|
|
94916
94877
|
const entities = config2.tables?.length ? config2.tables : config2.collections;
|
|
@@ -94918,27 +94879,133 @@ ${baseMethods}${bulkMethods}
|
|
|
94918
94879
|
return "// No tables or collections found in configuration\n";
|
|
94919
94880
|
}
|
|
94920
94881
|
const entitiesByDb = this.groupEntitiesByDb(entities);
|
|
94921
|
-
const typeNames = entities.map((e) => toPascalCase(e.name));
|
|
94922
94882
|
const appwriteDep = this.getAppwriteDependency();
|
|
94923
|
-
const
|
|
94924
|
-
|
|
94925
|
-
|
|
94926
|
-
|
|
94927
|
-
|
|
94883
|
+
const supportsBulk = this.supportsBulkMethods(appwriteDep);
|
|
94884
|
+
const bulkMethodsCode = supportsBulk ? `
|
|
94885
|
+
createMany: (rows: any[], options?: { transactionId?: string }) =>
|
|
94886
|
+
tablesDB.createRows({
|
|
94887
|
+
databaseId,
|
|
94888
|
+
tableId,
|
|
94889
|
+
rows,
|
|
94890
|
+
transactionId: options?.transactionId,
|
|
94891
|
+
}),
|
|
94892
|
+
updateMany: (data: any, options?: { queries?: (q: any) => string[]; transactionId?: string }) =>
|
|
94893
|
+
tablesDB.updateRows({
|
|
94894
|
+
databaseId,
|
|
94895
|
+
tableId,
|
|
94896
|
+
data,
|
|
94897
|
+
queries: options?.queries?.(createQueryBuilder()),
|
|
94898
|
+
transactionId: options?.transactionId,
|
|
94899
|
+
}),
|
|
94900
|
+
deleteMany: (options?: { queries?: (q: any) => string[]; transactionId?: string }) =>
|
|
94901
|
+
tablesDB.deleteRows({
|
|
94902
|
+
databaseId,
|
|
94903
|
+
tableId,
|
|
94904
|
+
queries: options?.queries?.(createQueryBuilder()),
|
|
94905
|
+
transactionId: options?.transactionId,
|
|
94906
|
+
}),` : "";
|
|
94907
|
+
const hasBulkCheck = supportsBulk ? `const hasBulkMethods = (dbId: string, tableName: string) => !tablesWithRelationships.has(\`\${dbId}:\${tableName}\`);` : "";
|
|
94928
94908
|
return `import { Client, TablesDB, ID, Query, type Models, Permission } from '${appwriteDep}';
|
|
94929
|
-
import type {
|
|
94909
|
+
import type { DatabaseId, DatabaseTables, QueryBuilder } from './types.js';
|
|
94930
94910
|
|
|
94931
94911
|
${this.generateQueryBuilder()};
|
|
94932
94912
|
|
|
94933
|
-
|
|
94934
|
-
|
|
94913
|
+
${this.generateTableIdMap(entitiesByDb)};
|
|
94914
|
+
|
|
94915
|
+
${this.generateTablesWithRelationships(entitiesByDb)};
|
|
94935
94916
|
|
|
94936
|
-
|
|
94937
|
-
|
|
94917
|
+
function createTableApi<T extends Models.Row>(
|
|
94918
|
+
tablesDB: TablesDB,
|
|
94919
|
+
databaseId: string,
|
|
94920
|
+
tableId: string,
|
|
94921
|
+
) {
|
|
94922
|
+
return {
|
|
94923
|
+
create: (data: any, options?: { rowId?: string; permissions?: Permission[]; transactionId?: string }) =>
|
|
94924
|
+
tablesDB.createRow<T>({
|
|
94925
|
+
databaseId,
|
|
94926
|
+
tableId,
|
|
94927
|
+
rowId: options?.rowId ?? ID.unique(),
|
|
94928
|
+
data,
|
|
94929
|
+
permissions: options?.permissions?.map((p) => p.toString()),
|
|
94930
|
+
transactionId: options?.transactionId,
|
|
94931
|
+
}),
|
|
94932
|
+
get: (id: string) =>
|
|
94933
|
+
tablesDB.getRow<T>({
|
|
94934
|
+
databaseId,
|
|
94935
|
+
tableId,
|
|
94936
|
+
rowId: id,
|
|
94937
|
+
}),
|
|
94938
|
+
update: (id: string, data: any, options?: { permissions?: Permission[]; transactionId?: string }) =>
|
|
94939
|
+
tablesDB.updateRow<T>({
|
|
94940
|
+
databaseId,
|
|
94941
|
+
tableId,
|
|
94942
|
+
rowId: id,
|
|
94943
|
+
data,
|
|
94944
|
+
...(options?.permissions ? { permissions: options.permissions.map((p) => p.toString()) } : {}),
|
|
94945
|
+
transactionId: options?.transactionId,
|
|
94946
|
+
}),
|
|
94947
|
+
delete: async (id: string, options?: { transactionId?: string }) => {
|
|
94948
|
+
await tablesDB.deleteRow({
|
|
94949
|
+
databaseId,
|
|
94950
|
+
tableId,
|
|
94951
|
+
rowId: id,
|
|
94952
|
+
transactionId: options?.transactionId,
|
|
94953
|
+
});
|
|
94954
|
+
},
|
|
94955
|
+
list: (options?: { queries?: (q: any) => string[] }) =>
|
|
94956
|
+
tablesDB.listRows<T>({
|
|
94957
|
+
databaseId,
|
|
94958
|
+
tableId,
|
|
94959
|
+
queries: options?.queries?.(createQueryBuilder<T>()),
|
|
94960
|
+
}),${bulkMethodsCode}
|
|
94938
94961
|
};
|
|
94962
|
+
}
|
|
94963
|
+
|
|
94964
|
+
${hasBulkCheck}
|
|
94965
|
+
|
|
94966
|
+
function createDatabaseProxy<D extends DatabaseId>(
|
|
94967
|
+
tablesDB: TablesDB,
|
|
94968
|
+
databaseId: D,
|
|
94969
|
+
): DatabaseTables[D] {
|
|
94970
|
+
const tableApiCache = new Map<string, ReturnType<typeof createTableApi>>();
|
|
94971
|
+
|
|
94972
|
+
return new Proxy({} as DatabaseTables[D], {
|
|
94973
|
+
get(_target, tableName: string) {
|
|
94974
|
+
if (typeof tableName === 'symbol') return undefined;
|
|
94975
|
+
|
|
94976
|
+
if (!tableApiCache.has(tableName)) {
|
|
94977
|
+
const tableId = tableIdMap[databaseId]?.[tableName];
|
|
94978
|
+
if (!tableId) return undefined;
|
|
94979
|
+
|
|
94980
|
+
const api = createTableApi(tablesDB, databaseId, tableId);
|
|
94981
|
+
${supportsBulk ? `
|
|
94982
|
+
// Remove bulk methods for tables with relationships
|
|
94983
|
+
if (!hasBulkMethods(databaseId, tableName)) {
|
|
94984
|
+
delete (api as any).createMany;
|
|
94985
|
+
delete (api as any).updateMany;
|
|
94986
|
+
delete (api as any).deleteMany;
|
|
94987
|
+
}` : ""}
|
|
94988
|
+
tableApiCache.set(tableName, api);
|
|
94989
|
+
}
|
|
94990
|
+
return tableApiCache.get(tableName);
|
|
94991
|
+
},
|
|
94992
|
+
has(_target, tableName: string) {
|
|
94993
|
+
return typeof tableName === 'string' && tableName in (tableIdMap[databaseId] ?? {});
|
|
94994
|
+
},
|
|
94995
|
+
});
|
|
94996
|
+
}
|
|
94997
|
+
|
|
94998
|
+
export const createDatabases = (client: Client) => {
|
|
94999
|
+
const tablesDB = new TablesDB(client);
|
|
95000
|
+
const dbCache = new Map<DatabaseId, DatabaseTables[DatabaseId]>();
|
|
94939
95001
|
|
|
94940
95002
|
return {
|
|
94941
|
-
from: <T extends DatabaseId>(databaseId: T): DatabaseTables[T] =>
|
|
95003
|
+
from: <T extends DatabaseId>(databaseId: T): DatabaseTables[T] => {
|
|
95004
|
+
if (!dbCache.has(databaseId)) {
|
|
95005
|
+
dbCache.set(databaseId, createDatabaseProxy(tablesDB, databaseId));
|
|
95006
|
+
}
|
|
95007
|
+
return dbCache.get(databaseId) as DatabaseTables[T];
|
|
95008
|
+
},
|
|
94942
95009
|
};
|
|
94943
95010
|
};
|
|
94944
95011
|
`;
|
|
@@ -7,6 +7,15 @@ export interface GenerateResult {
|
|
|
7
7
|
export declare class DatabasesGenerator {
|
|
8
8
|
private getType;
|
|
9
9
|
private getFields;
|
|
10
|
+
/**
|
|
11
|
+
* Checks if an entity has relationship columns.
|
|
12
|
+
* Used to disable bulk methods for tables with relationships.
|
|
13
|
+
*
|
|
14
|
+
* TODO: Remove this restriction when bulk operations support relationships.
|
|
15
|
+
* To enable bulk methods for all tables, simply return false here:
|
|
16
|
+
* return false;
|
|
17
|
+
*/
|
|
18
|
+
private hasRelationshipColumns;
|
|
10
19
|
private generateTableType;
|
|
11
20
|
private generateEnums;
|
|
12
21
|
private groupEntitiesByDb;
|
|
@@ -16,7 +25,8 @@ export declare class DatabasesGenerator {
|
|
|
16
25
|
private generateDatabaseTablesType;
|
|
17
26
|
generateTypesFile(config: ConfigType): string;
|
|
18
27
|
private generateQueryBuilder;
|
|
19
|
-
private
|
|
28
|
+
private generateTableIdMap;
|
|
29
|
+
private generateTablesWithRelationships;
|
|
20
30
|
generateDatabasesFile(config: ConfigType): string;
|
|
21
31
|
generateIndexFile(): string;
|
|
22
32
|
generate(config: ConfigType): Promise<GenerateResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../../../lib/commands/generators/databases.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO;IA0Df,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,wBAAwB;IAqChC,OAAO,CAAC,0BAA0B;
|
|
1
|
+
{"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../../../lib/commands/generators/databases.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAG3D,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO;IA0Df,OAAO,CAAC,SAAS;IAQjB;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,qBAAqB;IAoC7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,wBAAwB;IAqChC,OAAO,CAAC,0BAA0B;IAmClC,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAsC7C,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,+BAA+B;IAkBvC,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAmJjD,iBAAiB,IAAI,MAAM;IAarB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IA4BrD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB3E"}
|
|
@@ -52,6 +52,20 @@ export class DatabasesGenerator {
|
|
|
52
52
|
? entity.columns
|
|
53
53
|
: entity.attributes;
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Checks if an entity has relationship columns.
|
|
57
|
+
* Used to disable bulk methods for tables with relationships.
|
|
58
|
+
*
|
|
59
|
+
* TODO: Remove this restriction when bulk operations support relationships.
|
|
60
|
+
* To enable bulk methods for all tables, simply return false here:
|
|
61
|
+
* return false;
|
|
62
|
+
*/
|
|
63
|
+
hasRelationshipColumns(entity) {
|
|
64
|
+
const fields = this.getFields(entity);
|
|
65
|
+
if (!fields)
|
|
66
|
+
return false;
|
|
67
|
+
return fields.some((field) => field.type === "relationship");
|
|
68
|
+
}
|
|
55
69
|
generateTableType(entity, entities) {
|
|
56
70
|
const fields = this.getFields(entity);
|
|
57
71
|
if (!fields)
|
|
@@ -166,7 +180,7 @@ export type QueryBuilder<T> = {
|
|
|
166
180
|
}`;
|
|
167
181
|
}
|
|
168
182
|
generateDatabaseTablesType(entitiesByDb, appwriteDep) {
|
|
169
|
-
const
|
|
183
|
+
const supportsBulk = this.supportsBulkMethods(appwriteDep);
|
|
170
184
|
const dbReturnTypes = Array.from(entitiesByDb.entries())
|
|
171
185
|
.map(([dbId, dbEntities]) => {
|
|
172
186
|
const tableTypes = dbEntities
|
|
@@ -177,11 +191,13 @@ export type QueryBuilder<T> = {
|
|
|
177
191
|
update: (id: string, data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { permissions?: Permission[]; transactionId?: string }) => Promise<${typeName}>;
|
|
178
192
|
delete: (id: string, options?: { transactionId?: string }) => Promise<void>;
|
|
179
193
|
list: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[] }) => Promise<{ total: number; rows: ${typeName}[] }>;`;
|
|
180
|
-
|
|
194
|
+
// Bulk methods not supported for tables with relationship columns (see hasRelationshipColumns)
|
|
195
|
+
const canUseBulkMethods = supportsBulk && !this.hasRelationshipColumns(entity);
|
|
196
|
+
const bulkMethods = canUseBulkMethods
|
|
181
197
|
? `
|
|
182
|
-
createMany: (rows: Array<
|
|
183
|
-
updateMany: (
|
|
184
|
-
deleteMany: (
|
|
198
|
+
createMany: (rows: Array<Omit<${typeName}, keyof Models.Row> & { $id?: string; $permissions?: string[] }>, options?: { transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;
|
|
199
|
+
updateMany: (data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { queries?: (q: QueryBuilder<${typeName}>) => string[]; transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;
|
|
200
|
+
deleteMany: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[]; transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;`
|
|
185
201
|
: "";
|
|
186
202
|
return ` '${entity.name}': {\n${baseMethods}${bulkMethods}\n }`;
|
|
187
203
|
})
|
|
@@ -224,19 +240,19 @@ export type QueryBuilder<T> = {
|
|
|
224
240
|
}
|
|
225
241
|
generateQueryBuilder() {
|
|
226
242
|
return `const createQueryBuilder = <T>(): QueryBuilder<T> => ({
|
|
227
|
-
equal: (field, value) => Query.equal(String(field), value),
|
|
228
|
-
notEqual: (field, value) => Query.notEqual(String(field), value),
|
|
229
|
-
lessThan: (field, value) => Query.lessThan(String(field), value),
|
|
230
|
-
lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value),
|
|
231
|
-
greaterThan: (field, value) => Query.greaterThan(String(field), value),
|
|
232
|
-
greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value),
|
|
233
|
-
contains: (field, value) => Query.contains(String(field), value),
|
|
243
|
+
equal: (field, value) => Query.equal(String(field), value as any),
|
|
244
|
+
notEqual: (field, value) => Query.notEqual(String(field), value as any),
|
|
245
|
+
lessThan: (field, value) => Query.lessThan(String(field), value as any),
|
|
246
|
+
lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),
|
|
247
|
+
greaterThan: (field, value) => Query.greaterThan(String(field), value as any),
|
|
248
|
+
greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),
|
|
249
|
+
contains: (field, value) => Query.contains(String(field), value as any),
|
|
234
250
|
search: (field, value) => Query.search(String(field), value),
|
|
235
251
|
isNull: (field) => Query.isNull(String(field)),
|
|
236
252
|
isNotNull: (field) => Query.isNotNull(String(field)),
|
|
237
253
|
startsWith: (field, value) => Query.startsWith(String(field), value),
|
|
238
254
|
endsWith: (field, value) => Query.endsWith(String(field), value),
|
|
239
|
-
between: (field, start, end) => Query.between(String(field), start, end),
|
|
255
|
+
between: (field, start, end) => Query.between(String(field), start as any, end as any),
|
|
240
256
|
select: (fields) => Query.select(fields.map(String)),
|
|
241
257
|
orderAsc: (field) => Query.orderAsc(String(field)),
|
|
242
258
|
orderDesc: (field) => Query.orderDesc(String(field)),
|
|
@@ -248,86 +264,30 @@ export type QueryBuilder<T> = {
|
|
|
248
264
|
and: (...queries) => Query.and(queries),
|
|
249
265
|
})`;
|
|
250
266
|
}
|
|
251
|
-
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
tablesDB.createRow<${typeName}>({
|
|
259
|
-
databaseId: '${dbId}',
|
|
260
|
-
tableId: '${entity.$id}',
|
|
261
|
-
rowId: options?.rowId ?? ID.unique(),
|
|
262
|
-
data,
|
|
263
|
-
permissions: options?.permissions?.map((p) => p.toString()),
|
|
264
|
-
transactionId: options?.transactionId,
|
|
265
|
-
}),
|
|
266
|
-
get: (id: string) =>
|
|
267
|
-
tablesDB.getRow<${typeName}>({
|
|
268
|
-
databaseId: '${dbId}',
|
|
269
|
-
tableId: '${entity.$id}',
|
|
270
|
-
rowId: id,
|
|
271
|
-
}),
|
|
272
|
-
update: (id: string, data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { permissions?: Permission[]; transactionId?: string }) =>
|
|
273
|
-
tablesDB.updateRow<${typeName}>({
|
|
274
|
-
databaseId: '${dbId}',
|
|
275
|
-
tableId: '${entity.$id}',
|
|
276
|
-
rowId: id,
|
|
277
|
-
data,
|
|
278
|
-
...(options?.permissions ? { permissions: options.permissions.map((p) => p.toString()) } : {}),
|
|
279
|
-
transactionId: options?.transactionId,
|
|
280
|
-
}),
|
|
281
|
-
delete: async (id: string, options?: { transactionId?: string }) => {
|
|
282
|
-
await tablesDB.deleteRow({
|
|
283
|
-
databaseId: '${dbId}',
|
|
284
|
-
tableId: '${entity.$id}',
|
|
285
|
-
rowId: id,
|
|
286
|
-
transactionId: options?.transactionId,
|
|
287
|
-
});
|
|
288
|
-
},
|
|
289
|
-
list: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[] }) =>
|
|
290
|
-
tablesDB.listRows<${typeName}>({
|
|
291
|
-
databaseId: '${dbId}',
|
|
292
|
-
tableId: '${entity.$id}',
|
|
293
|
-
queries: options?.queries?.(createQueryBuilder<${typeName}>()),
|
|
294
|
-
}),`;
|
|
295
|
-
const bulkMethods = hasBulkMethods
|
|
296
|
-
? `
|
|
297
|
-
createMany: (rows: Array<{ data: Omit<${typeName}, keyof Models.Row>; rowId?: string; permissions?: Permission[] }>, options?: { transactionId?: string }) =>
|
|
298
|
-
tablesDB.createRows<${typeName}>({
|
|
299
|
-
databaseId: '${dbId}',
|
|
300
|
-
tableId: '${entity.$id}',
|
|
301
|
-
rows: rows.map((row) => ({
|
|
302
|
-
rowId: row.rowId ?? ID.unique(),
|
|
303
|
-
data: row.data,
|
|
304
|
-
permissions: row.permissions?.map((p) => p.toString()),
|
|
305
|
-
})),
|
|
306
|
-
transactionId: options?.transactionId,
|
|
307
|
-
}),
|
|
308
|
-
updateMany: (rows: Array<{ rowId: string; data: Partial<Omit<${typeName}, keyof Models.Row>>; permissions?: Permission[] }>, options?: { transactionId?: string }) =>
|
|
309
|
-
tablesDB.updateRows<${typeName}>({
|
|
310
|
-
databaseId: '${dbId}',
|
|
311
|
-
tableId: '${entity.$id}',
|
|
312
|
-
rows: rows.map((row) => ({
|
|
313
|
-
rowId: row.rowId,
|
|
314
|
-
data: row.data,
|
|
315
|
-
permissions: row.permissions?.map((p) => p.toString()),
|
|
316
|
-
})),
|
|
317
|
-
transactionId: options?.transactionId,
|
|
318
|
-
}),
|
|
319
|
-
deleteMany: async (rowIds: string[], options?: { transactionId?: string }) => {
|
|
320
|
-
await tablesDB.deleteRows({
|
|
321
|
-
databaseId: '${dbId}',
|
|
322
|
-
tableId: '${entity.$id}',
|
|
323
|
-
rows: rowIds.map((rowId) => ({ rowId })),
|
|
324
|
-
transactionId: options?.transactionId,
|
|
325
|
-
});
|
|
326
|
-
},`
|
|
327
|
-
: "";
|
|
328
|
-
return ` '${entityName}': {\n${baseMethods}${bulkMethods}\n }`;
|
|
267
|
+
generateTableIdMap(entitiesByDb) {
|
|
268
|
+
const dbMappings = Array.from(entitiesByDb.entries())
|
|
269
|
+
.map(([dbId, dbEntities]) => {
|
|
270
|
+
const tableMappings = dbEntities
|
|
271
|
+
.map((entity) => ` '${entity.name}': '${entity.$id}'`)
|
|
272
|
+
.join(",\n");
|
|
273
|
+
return ` '${dbId}': {\n${tableMappings}\n }`;
|
|
329
274
|
})
|
|
330
275
|
.join(",\n");
|
|
276
|
+
return `const tableIdMap: Record<string, Record<string, string>> = {\n${dbMappings}\n}`;
|
|
277
|
+
}
|
|
278
|
+
generateTablesWithRelationships(entitiesByDb) {
|
|
279
|
+
const tablesWithRelationships = [];
|
|
280
|
+
for (const [dbId, dbEntities] of entitiesByDb.entries()) {
|
|
281
|
+
for (const entity of dbEntities) {
|
|
282
|
+
if (this.hasRelationshipColumns(entity)) {
|
|
283
|
+
tablesWithRelationships.push(`'${dbId}:${entity.name}'`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (tablesWithRelationships.length === 0) {
|
|
288
|
+
return `const tablesWithRelationships = new Set<string>()`;
|
|
289
|
+
}
|
|
290
|
+
return `const tablesWithRelationships = new Set<string>([${tablesWithRelationships.join(", ")}])`;
|
|
331
291
|
}
|
|
332
292
|
generateDatabasesFile(config) {
|
|
333
293
|
const entities = config.tables?.length ? config.tables : config.collections;
|
|
@@ -335,27 +295,137 @@ export type QueryBuilder<T> = {
|
|
|
335
295
|
return "// No tables or collections found in configuration\n";
|
|
336
296
|
}
|
|
337
297
|
const entitiesByDb = this.groupEntitiesByDb(entities);
|
|
338
|
-
const typeNames = entities.map((e) => toPascalCase(e.name));
|
|
339
298
|
const appwriteDep = this.getAppwriteDependency();
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
299
|
+
const supportsBulk = this.supportsBulkMethods(appwriteDep);
|
|
300
|
+
const bulkMethodsCode = supportsBulk
|
|
301
|
+
? `
|
|
302
|
+
createMany: (rows: any[], options?: { transactionId?: string }) =>
|
|
303
|
+
tablesDB.createRows({
|
|
304
|
+
databaseId,
|
|
305
|
+
tableId,
|
|
306
|
+
rows,
|
|
307
|
+
transactionId: options?.transactionId,
|
|
308
|
+
}),
|
|
309
|
+
updateMany: (data: any, options?: { queries?: (q: any) => string[]; transactionId?: string }) =>
|
|
310
|
+
tablesDB.updateRows({
|
|
311
|
+
databaseId,
|
|
312
|
+
tableId,
|
|
313
|
+
data,
|
|
314
|
+
queries: options?.queries?.(createQueryBuilder()),
|
|
315
|
+
transactionId: options?.transactionId,
|
|
316
|
+
}),
|
|
317
|
+
deleteMany: (options?: { queries?: (q: any) => string[]; transactionId?: string }) =>
|
|
318
|
+
tablesDB.deleteRows({
|
|
319
|
+
databaseId,
|
|
320
|
+
tableId,
|
|
321
|
+
queries: options?.queries?.(createQueryBuilder()),
|
|
322
|
+
transactionId: options?.transactionId,
|
|
323
|
+
}),`
|
|
324
|
+
: "";
|
|
325
|
+
const hasBulkCheck = supportsBulk
|
|
326
|
+
? `const hasBulkMethods = (dbId: string, tableName: string) => !tablesWithRelationships.has(\`\${dbId}:\${tableName}\`);`
|
|
327
|
+
: "";
|
|
345
328
|
return `import { Client, TablesDB, ID, Query, type Models, Permission } from '${appwriteDep}';
|
|
346
|
-
import type {
|
|
329
|
+
import type { DatabaseId, DatabaseTables, QueryBuilder } from './types.js';
|
|
347
330
|
|
|
348
331
|
${this.generateQueryBuilder()};
|
|
349
332
|
|
|
350
|
-
|
|
351
|
-
|
|
333
|
+
${this.generateTableIdMap(entitiesByDb)};
|
|
334
|
+
|
|
335
|
+
${this.generateTablesWithRelationships(entitiesByDb)};
|
|
352
336
|
|
|
353
|
-
|
|
354
|
-
|
|
337
|
+
function createTableApi<T extends Models.Row>(
|
|
338
|
+
tablesDB: TablesDB,
|
|
339
|
+
databaseId: string,
|
|
340
|
+
tableId: string,
|
|
341
|
+
) {
|
|
342
|
+
return {
|
|
343
|
+
create: (data: any, options?: { rowId?: string; permissions?: Permission[]; transactionId?: string }) =>
|
|
344
|
+
tablesDB.createRow<T>({
|
|
345
|
+
databaseId,
|
|
346
|
+
tableId,
|
|
347
|
+
rowId: options?.rowId ?? ID.unique(),
|
|
348
|
+
data,
|
|
349
|
+
permissions: options?.permissions?.map((p) => p.toString()),
|
|
350
|
+
transactionId: options?.transactionId,
|
|
351
|
+
}),
|
|
352
|
+
get: (id: string) =>
|
|
353
|
+
tablesDB.getRow<T>({
|
|
354
|
+
databaseId,
|
|
355
|
+
tableId,
|
|
356
|
+
rowId: id,
|
|
357
|
+
}),
|
|
358
|
+
update: (id: string, data: any, options?: { permissions?: Permission[]; transactionId?: string }) =>
|
|
359
|
+
tablesDB.updateRow<T>({
|
|
360
|
+
databaseId,
|
|
361
|
+
tableId,
|
|
362
|
+
rowId: id,
|
|
363
|
+
data,
|
|
364
|
+
...(options?.permissions ? { permissions: options.permissions.map((p) => p.toString()) } : {}),
|
|
365
|
+
transactionId: options?.transactionId,
|
|
366
|
+
}),
|
|
367
|
+
delete: async (id: string, options?: { transactionId?: string }) => {
|
|
368
|
+
await tablesDB.deleteRow({
|
|
369
|
+
databaseId,
|
|
370
|
+
tableId,
|
|
371
|
+
rowId: id,
|
|
372
|
+
transactionId: options?.transactionId,
|
|
373
|
+
});
|
|
374
|
+
},
|
|
375
|
+
list: (options?: { queries?: (q: any) => string[] }) =>
|
|
376
|
+
tablesDB.listRows<T>({
|
|
377
|
+
databaseId,
|
|
378
|
+
tableId,
|
|
379
|
+
queries: options?.queries?.(createQueryBuilder<T>()),
|
|
380
|
+
}),${bulkMethodsCode}
|
|
355
381
|
};
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
${hasBulkCheck}
|
|
385
|
+
|
|
386
|
+
function createDatabaseProxy<D extends DatabaseId>(
|
|
387
|
+
tablesDB: TablesDB,
|
|
388
|
+
databaseId: D,
|
|
389
|
+
): DatabaseTables[D] {
|
|
390
|
+
const tableApiCache = new Map<string, ReturnType<typeof createTableApi>>();
|
|
391
|
+
|
|
392
|
+
return new Proxy({} as DatabaseTables[D], {
|
|
393
|
+
get(_target, tableName: string) {
|
|
394
|
+
if (typeof tableName === 'symbol') return undefined;
|
|
395
|
+
|
|
396
|
+
if (!tableApiCache.has(tableName)) {
|
|
397
|
+
const tableId = tableIdMap[databaseId]?.[tableName];
|
|
398
|
+
if (!tableId) return undefined;
|
|
399
|
+
|
|
400
|
+
const api = createTableApi(tablesDB, databaseId, tableId);
|
|
401
|
+
${supportsBulk ? `
|
|
402
|
+
// Remove bulk methods for tables with relationships
|
|
403
|
+
if (!hasBulkMethods(databaseId, tableName)) {
|
|
404
|
+
delete (api as any).createMany;
|
|
405
|
+
delete (api as any).updateMany;
|
|
406
|
+
delete (api as any).deleteMany;
|
|
407
|
+
}` : ""}
|
|
408
|
+
tableApiCache.set(tableName, api);
|
|
409
|
+
}
|
|
410
|
+
return tableApiCache.get(tableName);
|
|
411
|
+
},
|
|
412
|
+
has(_target, tableName: string) {
|
|
413
|
+
return typeof tableName === 'string' && tableName in (tableIdMap[databaseId] ?? {});
|
|
414
|
+
},
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
export const createDatabases = (client: Client) => {
|
|
419
|
+
const tablesDB = new TablesDB(client);
|
|
420
|
+
const dbCache = new Map<DatabaseId, DatabaseTables[DatabaseId]>();
|
|
356
421
|
|
|
357
422
|
return {
|
|
358
|
-
from: <T extends DatabaseId>(databaseId: T): DatabaseTables[T] =>
|
|
423
|
+
from: <T extends DatabaseId>(databaseId: T): DatabaseTables[T] => {
|
|
424
|
+
if (!dbCache.has(databaseId)) {
|
|
425
|
+
dbCache.set(databaseId, createDatabaseProxy(tablesDB, databaseId));
|
|
426
|
+
}
|
|
427
|
+
return dbCache.get(databaseId) as DatabaseTables[T];
|
|
428
|
+
},
|
|
359
429
|
};
|
|
360
430
|
};
|
|
361
431
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"databases.js","sourceRoot":"","sources":["../../../../lib/commands/generators/databases.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"databases.js","sourceRoot":"","sources":["../../../../lib/commands/generators/databases.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -84,6 +84,20 @@ export class DatabasesGenerator {
|
|
|
84
84
|
: (entity as NonNullable<ConfigType["collections"]>[number]).attributes;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Checks if an entity has relationship columns.
|
|
89
|
+
* Used to disable bulk methods for tables with relationships.
|
|
90
|
+
*
|
|
91
|
+
* TODO: Remove this restriction when bulk operations support relationships.
|
|
92
|
+
* To enable bulk methods for all tables, simply return false here:
|
|
93
|
+
* return false;
|
|
94
|
+
*/
|
|
95
|
+
private hasRelationshipColumns(entity: Entity): boolean {
|
|
96
|
+
const fields = this.getFields(entity);
|
|
97
|
+
if (!fields) return false;
|
|
98
|
+
return fields.some((field) => field.type === "relationship");
|
|
99
|
+
}
|
|
100
|
+
|
|
87
101
|
private generateTableType(entity: Entity, entities: Entities): string {
|
|
88
102
|
const fields = this.getFields(entity);
|
|
89
103
|
if (!fields) return "";
|
|
@@ -222,7 +236,7 @@ export type QueryBuilder<T> = {
|
|
|
222
236
|
entitiesByDb: Map<string, Entity[]>,
|
|
223
237
|
appwriteDep: string,
|
|
224
238
|
): string {
|
|
225
|
-
const
|
|
239
|
+
const supportsBulk = this.supportsBulkMethods(appwriteDep);
|
|
226
240
|
const dbReturnTypes = Array.from(entitiesByDb.entries())
|
|
227
241
|
.map(([dbId, dbEntities]) => {
|
|
228
242
|
const tableTypes = dbEntities
|
|
@@ -234,11 +248,13 @@ export type QueryBuilder<T> = {
|
|
|
234
248
|
delete: (id: string, options?: { transactionId?: string }) => Promise<void>;
|
|
235
249
|
list: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[] }) => Promise<{ total: number; rows: ${typeName}[] }>;`;
|
|
236
250
|
|
|
237
|
-
|
|
251
|
+
// Bulk methods not supported for tables with relationship columns (see hasRelationshipColumns)
|
|
252
|
+
const canUseBulkMethods = supportsBulk && !this.hasRelationshipColumns(entity);
|
|
253
|
+
const bulkMethods = canUseBulkMethods
|
|
238
254
|
? `
|
|
239
|
-
createMany: (rows: Array<
|
|
240
|
-
updateMany: (
|
|
241
|
-
deleteMany: (
|
|
255
|
+
createMany: (rows: Array<Omit<${typeName}, keyof Models.Row> & { $id?: string; $permissions?: string[] }>, options?: { transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;
|
|
256
|
+
updateMany: (data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { queries?: (q: QueryBuilder<${typeName}>) => string[]; transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;
|
|
257
|
+
deleteMany: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[]; transactionId?: string }) => Promise<{ total: number; rows: ${typeName}[] }>;`
|
|
242
258
|
: "";
|
|
243
259
|
|
|
244
260
|
return ` '${entity.name}': {\n${baseMethods}${bulkMethods}\n }`;
|
|
@@ -291,19 +307,19 @@ export type QueryBuilder<T> = {
|
|
|
291
307
|
|
|
292
308
|
private generateQueryBuilder(): string {
|
|
293
309
|
return `const createQueryBuilder = <T>(): QueryBuilder<T> => ({
|
|
294
|
-
equal: (field, value) => Query.equal(String(field), value),
|
|
295
|
-
notEqual: (field, value) => Query.notEqual(String(field), value),
|
|
296
|
-
lessThan: (field, value) => Query.lessThan(String(field), value),
|
|
297
|
-
lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value),
|
|
298
|
-
greaterThan: (field, value) => Query.greaterThan(String(field), value),
|
|
299
|
-
greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value),
|
|
300
|
-
contains: (field, value) => Query.contains(String(field), value),
|
|
310
|
+
equal: (field, value) => Query.equal(String(field), value as any),
|
|
311
|
+
notEqual: (field, value) => Query.notEqual(String(field), value as any),
|
|
312
|
+
lessThan: (field, value) => Query.lessThan(String(field), value as any),
|
|
313
|
+
lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),
|
|
314
|
+
greaterThan: (field, value) => Query.greaterThan(String(field), value as any),
|
|
315
|
+
greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),
|
|
316
|
+
contains: (field, value) => Query.contains(String(field), value as any),
|
|
301
317
|
search: (field, value) => Query.search(String(field), value),
|
|
302
318
|
isNull: (field) => Query.isNull(String(field)),
|
|
303
319
|
isNotNull: (field) => Query.isNotNull(String(field)),
|
|
304
320
|
startsWith: (field, value) => Query.startsWith(String(field), value),
|
|
305
321
|
endsWith: (field, value) => Query.endsWith(String(field), value),
|
|
306
|
-
between: (field, start, end) => Query.between(String(field), start, end),
|
|
322
|
+
between: (field, start, end) => Query.between(String(field), start as any, end as any),
|
|
307
323
|
select: (fields) => Query.select(fields.map(String)),
|
|
308
324
|
orderAsc: (field) => Query.orderAsc(String(field)),
|
|
309
325
|
orderDesc: (field) => Query.orderDesc(String(field)),
|
|
@@ -316,94 +332,35 @@ export type QueryBuilder<T> = {
|
|
|
316
332
|
})`;
|
|
317
333
|
}
|
|
318
334
|
|
|
319
|
-
private
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
return dbEntities
|
|
327
|
-
.map((entity) => {
|
|
328
|
-
const entityName = entity.name;
|
|
329
|
-
const typeName = toPascalCase(entity.name);
|
|
330
|
-
|
|
331
|
-
const baseMethods = ` create: (data: Omit<${typeName}, keyof Models.Row>, options?: { rowId?: string; permissions?: Permission[]; transactionId?: string }) =>
|
|
332
|
-
tablesDB.createRow<${typeName}>({
|
|
333
|
-
databaseId: '${dbId}',
|
|
334
|
-
tableId: '${entity.$id}',
|
|
335
|
-
rowId: options?.rowId ?? ID.unique(),
|
|
336
|
-
data,
|
|
337
|
-
permissions: options?.permissions?.map((p) => p.toString()),
|
|
338
|
-
transactionId: options?.transactionId,
|
|
339
|
-
}),
|
|
340
|
-
get: (id: string) =>
|
|
341
|
-
tablesDB.getRow<${typeName}>({
|
|
342
|
-
databaseId: '${dbId}',
|
|
343
|
-
tableId: '${entity.$id}',
|
|
344
|
-
rowId: id,
|
|
345
|
-
}),
|
|
346
|
-
update: (id: string, data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { permissions?: Permission[]; transactionId?: string }) =>
|
|
347
|
-
tablesDB.updateRow<${typeName}>({
|
|
348
|
-
databaseId: '${dbId}',
|
|
349
|
-
tableId: '${entity.$id}',
|
|
350
|
-
rowId: id,
|
|
351
|
-
data,
|
|
352
|
-
...(options?.permissions ? { permissions: options.permissions.map((p) => p.toString()) } : {}),
|
|
353
|
-
transactionId: options?.transactionId,
|
|
354
|
-
}),
|
|
355
|
-
delete: async (id: string, options?: { transactionId?: string }) => {
|
|
356
|
-
await tablesDB.deleteRow({
|
|
357
|
-
databaseId: '${dbId}',
|
|
358
|
-
tableId: '${entity.$id}',
|
|
359
|
-
rowId: id,
|
|
360
|
-
transactionId: options?.transactionId,
|
|
361
|
-
});
|
|
362
|
-
},
|
|
363
|
-
list: (options?: { queries?: (q: QueryBuilder<${typeName}>) => string[] }) =>
|
|
364
|
-
tablesDB.listRows<${typeName}>({
|
|
365
|
-
databaseId: '${dbId}',
|
|
366
|
-
tableId: '${entity.$id}',
|
|
367
|
-
queries: options?.queries?.(createQueryBuilder<${typeName}>()),
|
|
368
|
-
}),`;
|
|
369
|
-
|
|
370
|
-
const bulkMethods = hasBulkMethods
|
|
371
|
-
? `
|
|
372
|
-
createMany: (rows: Array<{ data: Omit<${typeName}, keyof Models.Row>; rowId?: string; permissions?: Permission[] }>, options?: { transactionId?: string }) =>
|
|
373
|
-
tablesDB.createRows<${typeName}>({
|
|
374
|
-
databaseId: '${dbId}',
|
|
375
|
-
tableId: '${entity.$id}',
|
|
376
|
-
rows: rows.map((row) => ({
|
|
377
|
-
rowId: row.rowId ?? ID.unique(),
|
|
378
|
-
data: row.data,
|
|
379
|
-
permissions: row.permissions?.map((p) => p.toString()),
|
|
380
|
-
})),
|
|
381
|
-
transactionId: options?.transactionId,
|
|
382
|
-
}),
|
|
383
|
-
updateMany: (rows: Array<{ rowId: string; data: Partial<Omit<${typeName}, keyof Models.Row>>; permissions?: Permission[] }>, options?: { transactionId?: string }) =>
|
|
384
|
-
tablesDB.updateRows<${typeName}>({
|
|
385
|
-
databaseId: '${dbId}',
|
|
386
|
-
tableId: '${entity.$id}',
|
|
387
|
-
rows: rows.map((row) => ({
|
|
388
|
-
rowId: row.rowId,
|
|
389
|
-
data: row.data,
|
|
390
|
-
permissions: row.permissions?.map((p) => p.toString()),
|
|
391
|
-
})),
|
|
392
|
-
transactionId: options?.transactionId,
|
|
393
|
-
}),
|
|
394
|
-
deleteMany: async (rowIds: string[], options?: { transactionId?: string }) => {
|
|
395
|
-
await tablesDB.deleteRows({
|
|
396
|
-
databaseId: '${dbId}',
|
|
397
|
-
tableId: '${entity.$id}',
|
|
398
|
-
rows: rowIds.map((rowId) => ({ rowId })),
|
|
399
|
-
transactionId: options?.transactionId,
|
|
400
|
-
});
|
|
401
|
-
},`
|
|
402
|
-
: "";
|
|
403
|
-
|
|
404
|
-
return ` '${entityName}': {\n${baseMethods}${bulkMethods}\n }`;
|
|
335
|
+
private generateTableIdMap(entitiesByDb: Map<string, Entity[]>): string {
|
|
336
|
+
const dbMappings = Array.from(entitiesByDb.entries())
|
|
337
|
+
.map(([dbId, dbEntities]) => {
|
|
338
|
+
const tableMappings = dbEntities
|
|
339
|
+
.map((entity) => ` '${entity.name}': '${entity.$id}'`)
|
|
340
|
+
.join(",\n");
|
|
341
|
+
return ` '${dbId}': {\n${tableMappings}\n }`;
|
|
405
342
|
})
|
|
406
343
|
.join(",\n");
|
|
344
|
+
|
|
345
|
+
return `const tableIdMap: Record<string, Record<string, string>> = {\n${dbMappings}\n}`;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
private generateTablesWithRelationships(entitiesByDb: Map<string, Entity[]>): string {
|
|
349
|
+
const tablesWithRelationships: string[] = [];
|
|
350
|
+
|
|
351
|
+
for (const [dbId, dbEntities] of entitiesByDb.entries()) {
|
|
352
|
+
for (const entity of dbEntities) {
|
|
353
|
+
if (this.hasRelationshipColumns(entity)) {
|
|
354
|
+
tablesWithRelationships.push(`'${dbId}:${entity.name}'`);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (tablesWithRelationships.length === 0) {
|
|
360
|
+
return `const tablesWithRelationships = new Set<string>()`;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return `const tablesWithRelationships = new Set<string>([${tablesWithRelationships.join(", ")}])`;
|
|
407
364
|
}
|
|
408
365
|
|
|
409
366
|
generateDatabasesFile(config: ConfigType): string {
|
|
@@ -414,29 +371,140 @@ export type QueryBuilder<T> = {
|
|
|
414
371
|
}
|
|
415
372
|
|
|
416
373
|
const entitiesByDb = this.groupEntitiesByDb(entities);
|
|
417
|
-
const typeNames = entities.map((e) => toPascalCase(e.name));
|
|
418
374
|
const appwriteDep = this.getAppwriteDependency();
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
.
|
|
375
|
+
const supportsBulk = this.supportsBulkMethods(appwriteDep);
|
|
376
|
+
|
|
377
|
+
const bulkMethodsCode = supportsBulk
|
|
378
|
+
? `
|
|
379
|
+
createMany: (rows: any[], options?: { transactionId?: string }) =>
|
|
380
|
+
tablesDB.createRows({
|
|
381
|
+
databaseId,
|
|
382
|
+
tableId,
|
|
383
|
+
rows,
|
|
384
|
+
transactionId: options?.transactionId,
|
|
385
|
+
}),
|
|
386
|
+
updateMany: (data: any, options?: { queries?: (q: any) => string[]; transactionId?: string }) =>
|
|
387
|
+
tablesDB.updateRows({
|
|
388
|
+
databaseId,
|
|
389
|
+
tableId,
|
|
390
|
+
data,
|
|
391
|
+
queries: options?.queries?.(createQueryBuilder()),
|
|
392
|
+
transactionId: options?.transactionId,
|
|
393
|
+
}),
|
|
394
|
+
deleteMany: (options?: { queries?: (q: any) => string[]; transactionId?: string }) =>
|
|
395
|
+
tablesDB.deleteRows({
|
|
396
|
+
databaseId,
|
|
397
|
+
tableId,
|
|
398
|
+
queries: options?.queries?.(createQueryBuilder()),
|
|
399
|
+
transactionId: options?.transactionId,
|
|
400
|
+
}),`
|
|
401
|
+
: "";
|
|
402
|
+
|
|
403
|
+
const hasBulkCheck = supportsBulk
|
|
404
|
+
? `const hasBulkMethods = (dbId: string, tableName: string) => !tablesWithRelationships.has(\`\${dbId}:\${tableName}\`);`
|
|
405
|
+
: "";
|
|
425
406
|
|
|
426
407
|
return `import { Client, TablesDB, ID, Query, type Models, Permission } from '${appwriteDep}';
|
|
427
|
-
import type {
|
|
408
|
+
import type { DatabaseId, DatabaseTables, QueryBuilder } from './types.js';
|
|
428
409
|
|
|
429
410
|
${this.generateQueryBuilder()};
|
|
430
411
|
|
|
431
|
-
|
|
432
|
-
const tablesDB = new TablesDB(client);
|
|
412
|
+
${this.generateTableIdMap(entitiesByDb)};
|
|
433
413
|
|
|
434
|
-
|
|
435
|
-
|
|
414
|
+
${this.generateTablesWithRelationships(entitiesByDb)};
|
|
415
|
+
|
|
416
|
+
function createTableApi<T extends Models.Row>(
|
|
417
|
+
tablesDB: TablesDB,
|
|
418
|
+
databaseId: string,
|
|
419
|
+
tableId: string,
|
|
420
|
+
) {
|
|
421
|
+
return {
|
|
422
|
+
create: (data: any, options?: { rowId?: string; permissions?: Permission[]; transactionId?: string }) =>
|
|
423
|
+
tablesDB.createRow<T>({
|
|
424
|
+
databaseId,
|
|
425
|
+
tableId,
|
|
426
|
+
rowId: options?.rowId ?? ID.unique(),
|
|
427
|
+
data,
|
|
428
|
+
permissions: options?.permissions?.map((p) => p.toString()),
|
|
429
|
+
transactionId: options?.transactionId,
|
|
430
|
+
}),
|
|
431
|
+
get: (id: string) =>
|
|
432
|
+
tablesDB.getRow<T>({
|
|
433
|
+
databaseId,
|
|
434
|
+
tableId,
|
|
435
|
+
rowId: id,
|
|
436
|
+
}),
|
|
437
|
+
update: (id: string, data: any, options?: { permissions?: Permission[]; transactionId?: string }) =>
|
|
438
|
+
tablesDB.updateRow<T>({
|
|
439
|
+
databaseId,
|
|
440
|
+
tableId,
|
|
441
|
+
rowId: id,
|
|
442
|
+
data,
|
|
443
|
+
...(options?.permissions ? { permissions: options.permissions.map((p) => p.toString()) } : {}),
|
|
444
|
+
transactionId: options?.transactionId,
|
|
445
|
+
}),
|
|
446
|
+
delete: async (id: string, options?: { transactionId?: string }) => {
|
|
447
|
+
await tablesDB.deleteRow({
|
|
448
|
+
databaseId,
|
|
449
|
+
tableId,
|
|
450
|
+
rowId: id,
|
|
451
|
+
transactionId: options?.transactionId,
|
|
452
|
+
});
|
|
453
|
+
},
|
|
454
|
+
list: (options?: { queries?: (q: any) => string[] }) =>
|
|
455
|
+
tablesDB.listRows<T>({
|
|
456
|
+
databaseId,
|
|
457
|
+
tableId,
|
|
458
|
+
queries: options?.queries?.(createQueryBuilder<T>()),
|
|
459
|
+
}),${bulkMethodsCode}
|
|
436
460
|
};
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
${hasBulkCheck}
|
|
464
|
+
|
|
465
|
+
function createDatabaseProxy<D extends DatabaseId>(
|
|
466
|
+
tablesDB: TablesDB,
|
|
467
|
+
databaseId: D,
|
|
468
|
+
): DatabaseTables[D] {
|
|
469
|
+
const tableApiCache = new Map<string, ReturnType<typeof createTableApi>>();
|
|
470
|
+
|
|
471
|
+
return new Proxy({} as DatabaseTables[D], {
|
|
472
|
+
get(_target, tableName: string) {
|
|
473
|
+
if (typeof tableName === 'symbol') return undefined;
|
|
474
|
+
|
|
475
|
+
if (!tableApiCache.has(tableName)) {
|
|
476
|
+
const tableId = tableIdMap[databaseId]?.[tableName];
|
|
477
|
+
if (!tableId) return undefined;
|
|
478
|
+
|
|
479
|
+
const api = createTableApi(tablesDB, databaseId, tableId);
|
|
480
|
+
${supportsBulk ? `
|
|
481
|
+
// Remove bulk methods for tables with relationships
|
|
482
|
+
if (!hasBulkMethods(databaseId, tableName)) {
|
|
483
|
+
delete (api as any).createMany;
|
|
484
|
+
delete (api as any).updateMany;
|
|
485
|
+
delete (api as any).deleteMany;
|
|
486
|
+
}` : ""}
|
|
487
|
+
tableApiCache.set(tableName, api);
|
|
488
|
+
}
|
|
489
|
+
return tableApiCache.get(tableName);
|
|
490
|
+
},
|
|
491
|
+
has(_target, tableName: string) {
|
|
492
|
+
return typeof tableName === 'string' && tableName in (tableIdMap[databaseId] ?? {});
|
|
493
|
+
},
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
export const createDatabases = (client: Client) => {
|
|
498
|
+
const tablesDB = new TablesDB(client);
|
|
499
|
+
const dbCache = new Map<DatabaseId, DatabaseTables[DatabaseId]>();
|
|
437
500
|
|
|
438
501
|
return {
|
|
439
|
-
from: <T extends DatabaseId>(databaseId: T): DatabaseTables[T] =>
|
|
502
|
+
from: <T extends DatabaseId>(databaseId: T): DatabaseTables[T] => {
|
|
503
|
+
if (!dbCache.has(databaseId)) {
|
|
504
|
+
dbCache.set(databaseId, createDatabaseProxy(tablesDB, databaseId));
|
|
505
|
+
}
|
|
506
|
+
return dbCache.get(databaseId) as DatabaseTables[T];
|
|
507
|
+
},
|
|
440
508
|
};
|
|
441
509
|
};
|
|
442
510
|
`;
|