appwrite-cli 13.3.0 → 13.3.2
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 +9 -0
- package/README.md +2 -2
- package/dist/bundle-win-arm64.mjs +45 -22
- package/dist/cli.cjs +45 -22
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -21
- package/dist/lib/commands/generate.d.ts.map +1 -1
- package/dist/lib/commands/generators/typescript/databases.d.ts.map +1 -1
- package/dist/lib/constants.d.ts +1 -1
- package/dist/lib/parser.d.ts +1 -1
- package/dist/lib/parser.d.ts.map +1 -1
- package/dist/lib/shared/typescript-type-utils.d.ts +5 -0
- package/dist/lib/shared/typescript-type-utils.d.ts.map +1 -1
- package/index.ts +17 -0
- package/install.ps1 +2 -2
- package/install.sh +1 -1
- package/lib/commands/generate.ts +4 -2
- package/lib/commands/generators/typescript/databases.ts +9 -5
- package/lib/commands/generators/typescript/templates/databases.ts.hbs +3 -3
- package/lib/commands/generators/typescript/templates/index.ts.hbs +2 -2
- package/lib/constants.ts +1 -1
- package/lib/parser.ts +17 -7
- package/lib/shared/typescript-type-utils.ts +26 -0
- package/package.json +1 -1
- package/scoop/appwrite.config.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 13.3.2
|
|
4
|
+
|
|
5
|
+
- Fix handle null rows in table parser
|
|
6
|
+
- Export config zod schemas
|
|
7
|
+
|
|
8
|
+
## 13.3.1
|
|
9
|
+
|
|
10
|
+
- Fix generated TS imports to auto-detect ESM vs non-ESM
|
|
11
|
+
|
|
3
12
|
## 13.3.0
|
|
4
13
|
|
|
5
14
|
- Support type generation for text/varchar/mediumtext/longtext attributes
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ Once the installation is complete, you can verify the install using
|
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
31
|
$ appwrite -v
|
|
32
|
-
13.3.
|
|
32
|
+
13.3.2
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
### Install using prebuilt binaries
|
|
@@ -60,7 +60,7 @@ $ scoop install https://raw.githubusercontent.com/appwrite/sdk-for-cli/master/sc
|
|
|
60
60
|
Once the installation completes, you can verify your install using
|
|
61
61
|
```
|
|
62
62
|
$ appwrite -v
|
|
63
|
-
13.3.
|
|
63
|
+
13.3.2
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
## Getting Started
|
|
@@ -21981,7 +21981,6 @@ var require_safe_buffer = __commonJS({
|
|
|
21981
21981
|
function SafeBuffer(arg, encodingOrOffset, length) {
|
|
21982
21982
|
return Buffer2(arg, encodingOrOffset, length);
|
|
21983
21983
|
}
|
|
21984
|
-
SafeBuffer.prototype = Object.create(Buffer2.prototype);
|
|
21985
21984
|
copyProps(Buffer2, SafeBuffer);
|
|
21986
21985
|
SafeBuffer.from = function(arg, encodingOrOffset, length) {
|
|
21987
21986
|
if (typeof arg === "number") {
|
|
@@ -93398,7 +93397,7 @@ var package_default = {
|
|
|
93398
93397
|
type: "module",
|
|
93399
93398
|
homepage: "https://appwrite.io/support",
|
|
93400
93399
|
description: "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
|
|
93401
|
-
version: "13.3.
|
|
93400
|
+
version: "13.3.2",
|
|
93402
93401
|
license: "BSD-3-Clause",
|
|
93403
93402
|
main: "dist/index.js",
|
|
93404
93403
|
types: "dist/index.d.ts",
|
|
@@ -107662,7 +107661,7 @@ import childProcess from "child_process";
|
|
|
107662
107661
|
// lib/constants.ts
|
|
107663
107662
|
var SDK_TITLE = "Appwrite";
|
|
107664
107663
|
var SDK_TITLE_LOWER = "appwrite";
|
|
107665
|
-
var SDK_VERSION = "13.3.
|
|
107664
|
+
var SDK_VERSION = "13.3.2";
|
|
107666
107665
|
var SDK_NAME = "Command Line";
|
|
107667
107666
|
var SDK_PLATFORM = "console";
|
|
107668
107667
|
var SDK_LANGUAGE = "cli";
|
|
@@ -134308,14 +134307,21 @@ var drawTable = (data) => {
|
|
|
134308
134307
|
console.log("[]");
|
|
134309
134308
|
return;
|
|
134310
134309
|
}
|
|
134311
|
-
const
|
|
134310
|
+
const rows = data.map(
|
|
134311
|
+
(item) => item && typeof item === "object" && !Array.isArray(item) ? item : {}
|
|
134312
|
+
);
|
|
134313
|
+
const obj = rows.reduce((res, item) => ({ ...res, ...item }), {});
|
|
134312
134314
|
const keys = Object.keys(obj);
|
|
134315
|
+
if (keys.length === 0) {
|
|
134316
|
+
drawJSON(data);
|
|
134317
|
+
return;
|
|
134318
|
+
}
|
|
134313
134319
|
const def = keys.reduce((result, key) => {
|
|
134314
134320
|
result[key] = "-";
|
|
134315
134321
|
return result;
|
|
134316
134322
|
}, {});
|
|
134317
|
-
|
|
134318
|
-
const columns = Object.keys(
|
|
134323
|
+
const normalizedData = rows.map((item) => ({ ...def, ...item }));
|
|
134324
|
+
const columns = Object.keys(normalizedData[0]);
|
|
134319
134325
|
const table = new import_cli_table3.default({
|
|
134320
134326
|
head: columns.map((c) => import_chalk.default.cyan.italic.bold(c)),
|
|
134321
134327
|
chars: {
|
|
@@ -134336,10 +134342,10 @@ var drawTable = (data) => {
|
|
|
134336
134342
|
middle: import_chalk.default.cyan("\u2502")
|
|
134337
134343
|
}
|
|
134338
134344
|
});
|
|
134339
|
-
|
|
134345
|
+
normalizedData.forEach((row) => {
|
|
134340
134346
|
const rowValues = [];
|
|
134341
|
-
for (const key
|
|
134342
|
-
if (row[key]
|
|
134347
|
+
for (const key of columns) {
|
|
134348
|
+
if (row[key] == null) {
|
|
134343
134349
|
rowValues.push("-");
|
|
134344
134350
|
} else if (Array.isArray(row[key])) {
|
|
134345
134351
|
rowValues.push(JSON.stringify(row[key]));
|
|
@@ -138158,6 +138164,22 @@ function getAppwriteDependency() {
|
|
|
138158
138164
|
}
|
|
138159
138165
|
return "appwrite";
|
|
138160
138166
|
}
|
|
138167
|
+
function detectImportExtension(cwd = process.cwd()) {
|
|
138168
|
+
try {
|
|
138169
|
+
const pkgPath = path6.resolve(cwd, "package.json");
|
|
138170
|
+
if (fs7.existsSync(pkgPath)) {
|
|
138171
|
+
const pkg = JSON.parse(fs7.readFileSync(pkgPath, "utf-8"));
|
|
138172
|
+
if (pkg.type === "module") {
|
|
138173
|
+
return ".js";
|
|
138174
|
+
}
|
|
138175
|
+
}
|
|
138176
|
+
if (fs7.existsSync(path6.resolve(cwd, "deno.json")) || fs7.existsSync(path6.resolve(cwd, "deno.jsonc"))) {
|
|
138177
|
+
return ".ts";
|
|
138178
|
+
}
|
|
138179
|
+
} catch {
|
|
138180
|
+
}
|
|
138181
|
+
return "";
|
|
138182
|
+
}
|
|
138161
138183
|
function supportsServerSideMethods(appwriteDep, override = "auto") {
|
|
138162
138184
|
if (override === "true") return true;
|
|
138163
138185
|
if (override === "false") return false;
|
|
@@ -143744,10 +143766,10 @@ var BaseDatabasesGenerator = class {
|
|
|
143744
143766
|
var types_ts_default = "import { type Models } from '{{appwriteDep}}';\n\n{{{ENUMS}}}{{{TYPES}}}\ndeclare const __roleStringBrand: unique symbol;\nexport type RoleString = string & { readonly [__roleStringBrand]: never };\n\nexport type RoleBuilder = {\n any: () => RoleString;\n user: (userId: string, status?: string) => RoleString;\n users: (status?: string) => RoleString;\n guests: () => RoleString;\n team: (teamId: string, role?: string) => RoleString;\n member: (memberId: string) => RoleString;\n label: (label: string) => RoleString;\n}\n\nexport type PermissionBuilder = {\n read: (role: RoleString) => string;\n write: (role: RoleString) => string;\n create: (role: RoleString) => string;\n update: (role: RoleString) => string;\n delete: (role: RoleString) => string;\n}\n\nexport type PermissionCallback = (permission: PermissionBuilder, role: RoleBuilder) => string[];\n\nexport type QueryValue = string | number | boolean;\n\nexport type ExtractQueryValue<T> = T extends (infer U)[]\n ? U extends QueryValue ? U : never\n : T extends QueryValue | null ? NonNullable<T> : never;\n\nexport type QueryableKeys<T> = {\n [K in keyof T]: ExtractQueryValue<T[K]> extends never ? never : K;\n}[keyof T];\n\nexport type QueryBuilder<T> = {\n equal: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n notEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n lessThan: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n lessThanEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n greaterThan: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n greaterThanEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n contains: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n search: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n isNull: <K extends QueryableKeys<T>>(field: K) => string;\n isNotNull: <K extends QueryableKeys<T>>(field: K) => string;\n startsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n endsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n between: <K extends QueryableKeys<T>>(field: K, start: ExtractQueryValue<T[K]>, end: ExtractQueryValue<T[K]>) => string;\n select: <K extends keyof T>(fields: K[]) => string;\n orderAsc: <K extends keyof T>(field: K) => string;\n orderDesc: <K extends keyof T>(field: K) => string;\n limit: (value: number) => string;\n offset: (value: number) => string;\n cursorAfter: (documentId: string) => string;\n cursorBefore: (documentId: string) => string;\n or: (...queries: string[]) => string;\n and: (...queries: string[]) => string;\n}\n\nexport type DatabaseId = {{{databaseIdType}}};\n\n{{{DATABASE_TABLES_TYPE}}}\n";
|
|
143745
143767
|
|
|
143746
143768
|
// lib/commands/generators/typescript/templates/databases.ts.hbs
|
|
143747
|
-
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from \'./types.js\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants.js\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants.js\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as any),\n notEqual: (field, value) => Query.notEqual(String(field), value as any),\n lessThan: (field, value) => Query.lessThan(String(field), value as any),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as any),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),\n contains: (field, value) => Query.contains(String(field), value as any),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as any, end as any),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: any, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: any, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: any) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: any[]; indexes?: any[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name ?? tableId, // TODO: remove this fallback once fixed in other SDKs\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
143769
|
+
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from \'./types{{importExt}}\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants{{importExt}}\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants{{importExt}}\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as any),\n notEqual: (field, value) => Query.notEqual(String(field), value as any),\n lessThan: (field, value) => Query.lessThan(String(field), value as any),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as any),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),\n contains: (field, value) => Query.contains(String(field), value as any),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as any, end as any),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: any, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: any, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: any) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: any[]; indexes?: any[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name ?? tableId, // TODO: remove this fallback once fixed in other SDKs\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
143748
143770
|
|
|
143749
143771
|
// lib/commands/generators/typescript/templates/index.ts.hbs
|
|
143750
|
-
var index_ts_default = '/**\n * {{sdkTitle}} Generated SDK\n *\n * This file is auto-generated. Do not edit manually.\n * Re-run `{{executableName}} generate` to regenerate.\n */\n\nexport { databases } from "./databases
|
|
143772
|
+
var index_ts_default = '/**\n * {{sdkTitle}} Generated SDK\n *\n * This file is auto-generated. Do not edit manually.\n * Re-run `{{executableName}} generate` to regenerate.\n */\n\nexport { databases } from "./databases{{importExt}}";\nexport * from "./types{{importExt}}";\n';
|
|
143751
143773
|
|
|
143752
143774
|
// lib/commands/generators/typescript/templates/constants.ts.hbs
|
|
143753
143775
|
var constants_ts_default = "/**\n * {{sdkTitle}} Configuration Constants\n *\n * This file contains configuration for the generated SDK.\n * You may modify these values as needed.\n */\n\nexport const PROJECT_ID = '{{projectId}}';\nexport const ENDPOINT = '{{endpoint}}';\n{{#if requiresApiKey}}\n\n/**\n * API Key is required for server-side operations\n * Set the APPWRITE_API_KEY environment variable or replace this value directly.\n */\nexport const API_KEY = process.env.APPWRITE_API_KEY ?? '';\n{{/if}}\n";
|
|
@@ -144016,7 +144038,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144016
144038
|
delete (api as any).deleteMany;
|
|
144017
144039
|
}`;
|
|
144018
144040
|
}
|
|
144019
|
-
generateDatabasesFile(config2) {
|
|
144041
|
+
generateDatabasesFile(config2, importExt) {
|
|
144020
144042
|
const entities = config2.tables?.length ? config2.tables : config2.collections;
|
|
144021
144043
|
if (!entities || entities.length === 0) {
|
|
144022
144044
|
return "// No tables or collections found in configuration\n";
|
|
@@ -144030,6 +144052,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144030
144052
|
return databasesTemplate({
|
|
144031
144053
|
appwriteDep,
|
|
144032
144054
|
supportsServerSide,
|
|
144055
|
+
importExt,
|
|
144033
144056
|
TABLE_ID_MAP: this.generateTableIdMap(entitiesByDb),
|
|
144034
144057
|
TABLES_WITH_RELATIONSHIPS: this.generateTablesWithRelationships(entitiesByDb),
|
|
144035
144058
|
BULK_METHODS: this.generateBulkMethods(supportsServerSide),
|
|
@@ -144037,10 +144060,11 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144037
144060
|
BULK_REMOVAL: this.generateBulkRemoval(supportsServerSide)
|
|
144038
144061
|
});
|
|
144039
144062
|
}
|
|
144040
|
-
generateIndexFile() {
|
|
144063
|
+
generateIndexFile(importExt) {
|
|
144041
144064
|
return indexTemplate({
|
|
144042
144065
|
sdkTitle: SDK_TITLE,
|
|
144043
|
-
executableName: EXECUTABLE_NAME
|
|
144066
|
+
executableName: EXECUTABLE_NAME,
|
|
144067
|
+
importExt
|
|
144044
144068
|
});
|
|
144045
144069
|
}
|
|
144046
144070
|
generateConstantsFile(config2) {
|
|
@@ -144060,6 +144084,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144060
144084
|
if (!config2.projectId) {
|
|
144061
144085
|
throw new Error("Project ID is required in configuration");
|
|
144062
144086
|
}
|
|
144087
|
+
const importExt = detectImportExtension();
|
|
144063
144088
|
const files = /* @__PURE__ */ new Map();
|
|
144064
144089
|
const hasEntities = config2.tables && config2.tables.length > 0 || config2.collections && config2.collections.length > 0;
|
|
144065
144090
|
if (!hasEntities) {
|
|
@@ -144074,13 +144099,13 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144074
144099
|
"types.ts",
|
|
144075
144100
|
"// No tables or collections found in configuration\n"
|
|
144076
144101
|
);
|
|
144077
|
-
files.set("index.ts", this.generateIndexFile());
|
|
144102
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
144078
144103
|
files.set("constants.ts", this.generateConstantsFile(config2));
|
|
144079
144104
|
return { files };
|
|
144080
144105
|
}
|
|
144081
144106
|
files.set("types.ts", this.generateTypesFile(config2));
|
|
144082
|
-
files.set("databases.ts", this.generateDatabasesFile(config2));
|
|
144083
|
-
files.set("index.ts", this.generateIndexFile());
|
|
144107
|
+
files.set("databases.ts", this.generateDatabasesFile(config2, importExt));
|
|
144108
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
144084
144109
|
files.set("constants.ts", this.generateConstantsFile(config2));
|
|
144085
144110
|
return { files };
|
|
144086
144111
|
}
|
|
@@ -144199,10 +144224,11 @@ Use --language to specify the target language. Supported: ${supported}`
|
|
|
144199
144224
|
const firstEntity = entities?.[0];
|
|
144200
144225
|
const dbId = firstEntity?.databaseId ?? "databaseId";
|
|
144201
144226
|
const tableName = firstEntity?.name ?? "tableName";
|
|
144227
|
+
const importExt = detectImportExtension();
|
|
144202
144228
|
console.log("");
|
|
144203
144229
|
log(`Import the generated SDK in your project:`);
|
|
144204
144230
|
console.log(
|
|
144205
|
-
` import { databases } from "./${outputDir}/${SDK_TITLE_LOWER}/index
|
|
144231
|
+
` import { databases } from "./${outputDir}/${SDK_TITLE_LOWER}/index${importExt}";`
|
|
144206
144232
|
);
|
|
144207
144233
|
console.log("");
|
|
144208
144234
|
log(`Configure your SDK constants:`);
|
|
@@ -144239,7 +144265,7 @@ var generate = new Command("generate").description(
|
|
|
144239
144265
|
`
|
|
144240
144266
|
Example:
|
|
144241
144267
|
Import the generated SDK in your project:
|
|
144242
|
-
import { databases } from "./generated/${SDK_TITLE_LOWER}/index
|
|
144268
|
+
import { databases } from "./generated/${SDK_TITLE_LOWER}/index${detectImportExtension()}";
|
|
144243
144269
|
|
|
144244
144270
|
Configure your SDK constants:
|
|
144245
144271
|
set values in ./generated/${SDK_TITLE_LOWER}/constants.ts
|
|
@@ -147975,9 +148001,6 @@ if (process.argv.includes("-v") || process.argv.includes("--version")) {
|
|
|
147975
148001
|
}
|
|
147976
148002
|
/*! Bundled license information:
|
|
147977
148003
|
|
|
147978
|
-
safe-buffer/index.js:
|
|
147979
|
-
(*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
|
|
147980
|
-
|
|
147981
148004
|
undici/lib/fetch/body.js:
|
|
147982
148005
|
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
|
147983
148006
|
|
package/dist/cli.cjs
CHANGED
|
@@ -21975,7 +21975,6 @@ var require_safe_buffer = __commonJS({
|
|
|
21975
21975
|
function SafeBuffer(arg, encodingOrOffset, length) {
|
|
21976
21976
|
return Buffer2(arg, encodingOrOffset, length);
|
|
21977
21977
|
}
|
|
21978
|
-
SafeBuffer.prototype = Object.create(Buffer2.prototype);
|
|
21979
21978
|
copyProps(Buffer2, SafeBuffer);
|
|
21980
21979
|
SafeBuffer.from = function(arg, encodingOrOffset, length) {
|
|
21981
21980
|
if (typeof arg === "number") {
|
|
@@ -93392,7 +93391,7 @@ var package_default = {
|
|
|
93392
93391
|
type: "module",
|
|
93393
93392
|
homepage: "https://appwrite.io/support",
|
|
93394
93393
|
description: "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
|
|
93395
|
-
version: "13.3.
|
|
93394
|
+
version: "13.3.2",
|
|
93396
93395
|
license: "BSD-3-Clause",
|
|
93397
93396
|
main: "dist/index.js",
|
|
93398
93397
|
types: "dist/index.d.ts",
|
|
@@ -107656,7 +107655,7 @@ var import_undici = __toESM(require_undici(), 1);
|
|
|
107656
107655
|
// lib/constants.ts
|
|
107657
107656
|
var SDK_TITLE = "Appwrite";
|
|
107658
107657
|
var SDK_TITLE_LOWER = "appwrite";
|
|
107659
|
-
var SDK_VERSION = "13.3.
|
|
107658
|
+
var SDK_VERSION = "13.3.2";
|
|
107660
107659
|
var SDK_NAME = "Command Line";
|
|
107661
107660
|
var SDK_PLATFORM = "console";
|
|
107662
107661
|
var SDK_LANGUAGE = "cli";
|
|
@@ -134302,14 +134301,21 @@ var drawTable = (data) => {
|
|
|
134302
134301
|
console.log("[]");
|
|
134303
134302
|
return;
|
|
134304
134303
|
}
|
|
134305
|
-
const
|
|
134304
|
+
const rows = data.map(
|
|
134305
|
+
(item) => item && typeof item === "object" && !Array.isArray(item) ? item : {}
|
|
134306
|
+
);
|
|
134307
|
+
const obj = rows.reduce((res, item) => ({ ...res, ...item }), {});
|
|
134306
134308
|
const keys = Object.keys(obj);
|
|
134309
|
+
if (keys.length === 0) {
|
|
134310
|
+
drawJSON(data);
|
|
134311
|
+
return;
|
|
134312
|
+
}
|
|
134307
134313
|
const def = keys.reduce((result, key) => {
|
|
134308
134314
|
result[key] = "-";
|
|
134309
134315
|
return result;
|
|
134310
134316
|
}, {});
|
|
134311
|
-
|
|
134312
|
-
const columns = Object.keys(
|
|
134317
|
+
const normalizedData = rows.map((item) => ({ ...def, ...item }));
|
|
134318
|
+
const columns = Object.keys(normalizedData[0]);
|
|
134313
134319
|
const table = new import_cli_table3.default({
|
|
134314
134320
|
head: columns.map((c) => import_chalk.default.cyan.italic.bold(c)),
|
|
134315
134321
|
chars: {
|
|
@@ -134330,10 +134336,10 @@ var drawTable = (data) => {
|
|
|
134330
134336
|
middle: import_chalk.default.cyan("\u2502")
|
|
134331
134337
|
}
|
|
134332
134338
|
});
|
|
134333
|
-
|
|
134339
|
+
normalizedData.forEach((row) => {
|
|
134334
134340
|
const rowValues = [];
|
|
134335
|
-
for (const key
|
|
134336
|
-
if (row[key]
|
|
134341
|
+
for (const key of columns) {
|
|
134342
|
+
if (row[key] == null) {
|
|
134337
134343
|
rowValues.push("-");
|
|
134338
134344
|
} else if (Array.isArray(row[key])) {
|
|
134339
134345
|
rowValues.push(JSON.stringify(row[key]));
|
|
@@ -138152,6 +138158,22 @@ function getAppwriteDependency() {
|
|
|
138152
138158
|
}
|
|
138153
138159
|
return "appwrite";
|
|
138154
138160
|
}
|
|
138161
|
+
function detectImportExtension(cwd = process.cwd()) {
|
|
138162
|
+
try {
|
|
138163
|
+
const pkgPath = path6.resolve(cwd, "package.json");
|
|
138164
|
+
if (fs7.existsSync(pkgPath)) {
|
|
138165
|
+
const pkg = JSON.parse(fs7.readFileSync(pkgPath, "utf-8"));
|
|
138166
|
+
if (pkg.type === "module") {
|
|
138167
|
+
return ".js";
|
|
138168
|
+
}
|
|
138169
|
+
}
|
|
138170
|
+
if (fs7.existsSync(path6.resolve(cwd, "deno.json")) || fs7.existsSync(path6.resolve(cwd, "deno.jsonc"))) {
|
|
138171
|
+
return ".ts";
|
|
138172
|
+
}
|
|
138173
|
+
} catch {
|
|
138174
|
+
}
|
|
138175
|
+
return "";
|
|
138176
|
+
}
|
|
138155
138177
|
function supportsServerSideMethods(appwriteDep, override = "auto") {
|
|
138156
138178
|
if (override === "true") return true;
|
|
138157
138179
|
if (override === "false") return false;
|
|
@@ -143738,10 +143760,10 @@ var BaseDatabasesGenerator = class {
|
|
|
143738
143760
|
var types_ts_default = "import { type Models } from '{{appwriteDep}}';\n\n{{{ENUMS}}}{{{TYPES}}}\ndeclare const __roleStringBrand: unique symbol;\nexport type RoleString = string & { readonly [__roleStringBrand]: never };\n\nexport type RoleBuilder = {\n any: () => RoleString;\n user: (userId: string, status?: string) => RoleString;\n users: (status?: string) => RoleString;\n guests: () => RoleString;\n team: (teamId: string, role?: string) => RoleString;\n member: (memberId: string) => RoleString;\n label: (label: string) => RoleString;\n}\n\nexport type PermissionBuilder = {\n read: (role: RoleString) => string;\n write: (role: RoleString) => string;\n create: (role: RoleString) => string;\n update: (role: RoleString) => string;\n delete: (role: RoleString) => string;\n}\n\nexport type PermissionCallback = (permission: PermissionBuilder, role: RoleBuilder) => string[];\n\nexport type QueryValue = string | number | boolean;\n\nexport type ExtractQueryValue<T> = T extends (infer U)[]\n ? U extends QueryValue ? U : never\n : T extends QueryValue | null ? NonNullable<T> : never;\n\nexport type QueryableKeys<T> = {\n [K in keyof T]: ExtractQueryValue<T[K]> extends never ? never : K;\n}[keyof T];\n\nexport type QueryBuilder<T> = {\n equal: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n notEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n lessThan: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n lessThanEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n greaterThan: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n greaterThanEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n contains: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n search: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n isNull: <K extends QueryableKeys<T>>(field: K) => string;\n isNotNull: <K extends QueryableKeys<T>>(field: K) => string;\n startsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n endsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n between: <K extends QueryableKeys<T>>(field: K, start: ExtractQueryValue<T[K]>, end: ExtractQueryValue<T[K]>) => string;\n select: <K extends keyof T>(fields: K[]) => string;\n orderAsc: <K extends keyof T>(field: K) => string;\n orderDesc: <K extends keyof T>(field: K) => string;\n limit: (value: number) => string;\n offset: (value: number) => string;\n cursorAfter: (documentId: string) => string;\n cursorBefore: (documentId: string) => string;\n or: (...queries: string[]) => string;\n and: (...queries: string[]) => string;\n}\n\nexport type DatabaseId = {{{databaseIdType}}};\n\n{{{DATABASE_TABLES_TYPE}}}\n";
|
|
143739
143761
|
|
|
143740
143762
|
// lib/commands/generators/typescript/templates/databases.ts.hbs
|
|
143741
|
-
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from \'./types.js\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants.js\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants.js\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as any),\n notEqual: (field, value) => Query.notEqual(String(field), value as any),\n lessThan: (field, value) => Query.lessThan(String(field), value as any),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as any),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),\n contains: (field, value) => Query.contains(String(field), value as any),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as any, end as any),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: any, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: any, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: any) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: any[]; indexes?: any[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name ?? tableId, // TODO: remove this fallback once fixed in other SDKs\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
143763
|
+
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from \'./types{{importExt}}\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants{{importExt}}\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants{{importExt}}\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as any),\n notEqual: (field, value) => Query.notEqual(String(field), value as any),\n lessThan: (field, value) => Query.lessThan(String(field), value as any),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as any),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),\n contains: (field, value) => Query.contains(String(field), value as any),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as any, end as any),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: any, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: any, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: any) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: any[]; indexes?: any[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name ?? tableId, // TODO: remove this fallback once fixed in other SDKs\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
143742
143764
|
|
|
143743
143765
|
// lib/commands/generators/typescript/templates/index.ts.hbs
|
|
143744
|
-
var index_ts_default = '/**\n * {{sdkTitle}} Generated SDK\n *\n * This file is auto-generated. Do not edit manually.\n * Re-run `{{executableName}} generate` to regenerate.\n */\n\nexport { databases } from "./databases
|
|
143766
|
+
var index_ts_default = '/**\n * {{sdkTitle}} Generated SDK\n *\n * This file is auto-generated. Do not edit manually.\n * Re-run `{{executableName}} generate` to regenerate.\n */\n\nexport { databases } from "./databases{{importExt}}";\nexport * from "./types{{importExt}}";\n';
|
|
143745
143767
|
|
|
143746
143768
|
// lib/commands/generators/typescript/templates/constants.ts.hbs
|
|
143747
143769
|
var constants_ts_default = "/**\n * {{sdkTitle}} Configuration Constants\n *\n * This file contains configuration for the generated SDK.\n * You may modify these values as needed.\n */\n\nexport const PROJECT_ID = '{{projectId}}';\nexport const ENDPOINT = '{{endpoint}}';\n{{#if requiresApiKey}}\n\n/**\n * API Key is required for server-side operations\n * Set the APPWRITE_API_KEY environment variable or replace this value directly.\n */\nexport const API_KEY = process.env.APPWRITE_API_KEY ?? '';\n{{/if}}\n";
|
|
@@ -144010,7 +144032,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144010
144032
|
delete (api as any).deleteMany;
|
|
144011
144033
|
}`;
|
|
144012
144034
|
}
|
|
144013
|
-
generateDatabasesFile(config2) {
|
|
144035
|
+
generateDatabasesFile(config2, importExt) {
|
|
144014
144036
|
const entities = config2.tables?.length ? config2.tables : config2.collections;
|
|
144015
144037
|
if (!entities || entities.length === 0) {
|
|
144016
144038
|
return "// No tables or collections found in configuration\n";
|
|
@@ -144024,6 +144046,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144024
144046
|
return databasesTemplate({
|
|
144025
144047
|
appwriteDep,
|
|
144026
144048
|
supportsServerSide,
|
|
144049
|
+
importExt,
|
|
144027
144050
|
TABLE_ID_MAP: this.generateTableIdMap(entitiesByDb),
|
|
144028
144051
|
TABLES_WITH_RELATIONSHIPS: this.generateTablesWithRelationships(entitiesByDb),
|
|
144029
144052
|
BULK_METHODS: this.generateBulkMethods(supportsServerSide),
|
|
@@ -144031,10 +144054,11 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144031
144054
|
BULK_REMOVAL: this.generateBulkRemoval(supportsServerSide)
|
|
144032
144055
|
});
|
|
144033
144056
|
}
|
|
144034
|
-
generateIndexFile() {
|
|
144057
|
+
generateIndexFile(importExt) {
|
|
144035
144058
|
return indexTemplate({
|
|
144036
144059
|
sdkTitle: SDK_TITLE,
|
|
144037
|
-
executableName: EXECUTABLE_NAME
|
|
144060
|
+
executableName: EXECUTABLE_NAME,
|
|
144061
|
+
importExt
|
|
144038
144062
|
});
|
|
144039
144063
|
}
|
|
144040
144064
|
generateConstantsFile(config2) {
|
|
@@ -144054,6 +144078,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144054
144078
|
if (!config2.projectId) {
|
|
144055
144079
|
throw new Error("Project ID is required in configuration");
|
|
144056
144080
|
}
|
|
144081
|
+
const importExt = detectImportExtension();
|
|
144057
144082
|
const files = /* @__PURE__ */ new Map();
|
|
144058
144083
|
const hasEntities = config2.tables && config2.tables.length > 0 || config2.collections && config2.collections.length > 0;
|
|
144059
144084
|
if (!hasEntities) {
|
|
@@ -144068,13 +144093,13 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
144068
144093
|
"types.ts",
|
|
144069
144094
|
"// No tables or collections found in configuration\n"
|
|
144070
144095
|
);
|
|
144071
|
-
files.set("index.ts", this.generateIndexFile());
|
|
144096
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
144072
144097
|
files.set("constants.ts", this.generateConstantsFile(config2));
|
|
144073
144098
|
return { files };
|
|
144074
144099
|
}
|
|
144075
144100
|
files.set("types.ts", this.generateTypesFile(config2));
|
|
144076
|
-
files.set("databases.ts", this.generateDatabasesFile(config2));
|
|
144077
|
-
files.set("index.ts", this.generateIndexFile());
|
|
144101
|
+
files.set("databases.ts", this.generateDatabasesFile(config2, importExt));
|
|
144102
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
144078
144103
|
files.set("constants.ts", this.generateConstantsFile(config2));
|
|
144079
144104
|
return { files };
|
|
144080
144105
|
}
|
|
@@ -144193,10 +144218,11 @@ Use --language to specify the target language. Supported: ${supported}`
|
|
|
144193
144218
|
const firstEntity = entities?.[0];
|
|
144194
144219
|
const dbId = firstEntity?.databaseId ?? "databaseId";
|
|
144195
144220
|
const tableName = firstEntity?.name ?? "tableName";
|
|
144221
|
+
const importExt = detectImportExtension();
|
|
144196
144222
|
console.log("");
|
|
144197
144223
|
log(`Import the generated SDK in your project:`);
|
|
144198
144224
|
console.log(
|
|
144199
|
-
` import { databases } from "./${outputDir}/${SDK_TITLE_LOWER}/index
|
|
144225
|
+
` import { databases } from "./${outputDir}/${SDK_TITLE_LOWER}/index${importExt}";`
|
|
144200
144226
|
);
|
|
144201
144227
|
console.log("");
|
|
144202
144228
|
log(`Configure your SDK constants:`);
|
|
@@ -144233,7 +144259,7 @@ var generate = new Command("generate").description(
|
|
|
144233
144259
|
`
|
|
144234
144260
|
Example:
|
|
144235
144261
|
Import the generated SDK in your project:
|
|
144236
|
-
import { databases } from "./generated/${SDK_TITLE_LOWER}/index
|
|
144262
|
+
import { databases } from "./generated/${SDK_TITLE_LOWER}/index${detectImportExtension()}";
|
|
144237
144263
|
|
|
144238
144264
|
Configure your SDK constants:
|
|
144239
144265
|
set values in ./generated/${SDK_TITLE_LOWER}/constants.ts
|
|
@@ -147969,9 +147995,6 @@ if (process.argv.includes("-v") || process.argv.includes("--version")) {
|
|
|
147969
147995
|
}
|
|
147970
147996
|
/*! Bundled license information:
|
|
147971
147997
|
|
|
147972
|
-
safe-buffer/index.js:
|
|
147973
|
-
(*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
|
|
147974
|
-
|
|
147975
147998
|
undici/lib/fetch/body.js:
|
|
147976
147999
|
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
|
147977
148000
|
|
package/dist/index.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ import { Pull } from "./lib/commands/pull.js";
|
|
|
8
8
|
import { Schema } from "./lib/commands/schema.js";
|
|
9
9
|
export { Schema, Push, Pull };
|
|
10
10
|
export type { ConfigType, SettingsType, FunctionType, SiteType, DatabaseType, CollectionType, TableType, TopicType, TeamType, MessageType, BucketType, AttributeType, IndexType, ColumnType, TableIndexType, } from "./lib/commands/config.js";
|
|
11
|
+
export { ConfigSchema, SettingsSchema, SiteSchema, FunctionSchema, DatabaseSchema, CollectionSchema, AttributeSchema, IndexSchema, TableSchema, ColumnSchema, IndexTableSchema, TopicSchema, TeamSchema, MessageSchema, BucketSchema, } from "./lib/commands/config.js";
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19605,7 +19605,6 @@ var require_safe_buffer = __commonJS({
|
|
|
19605
19605
|
function SafeBuffer(arg, encodingOrOffset, length) {
|
|
19606
19606
|
return Buffer2(arg, encodingOrOffset, length);
|
|
19607
19607
|
}
|
|
19608
|
-
SafeBuffer.prototype = Object.create(Buffer2.prototype);
|
|
19609
19608
|
copyProps(Buffer2, SafeBuffer);
|
|
19610
19609
|
SafeBuffer.from = function(arg, encodingOrOffset, length) {
|
|
19611
19610
|
if (typeof arg === "number") {
|
|
@@ -70688,7 +70687,7 @@ var id_default = ID;
|
|
|
70688
70687
|
// lib/constants.ts
|
|
70689
70688
|
var SDK_TITLE = "Appwrite";
|
|
70690
70689
|
var SDK_TITLE_LOWER = "appwrite";
|
|
70691
|
-
var SDK_VERSION = "13.3.
|
|
70690
|
+
var SDK_VERSION = "13.3.2";
|
|
70692
70691
|
var SDK_LOGO = "\n _ _ _ ___ __ _____\n /_\\ _ __ _ ____ ___ __(_) |_ ___ / __\\ / / \\_ \\\n //_\\\\| '_ \\| '_ \\ \\ /\\ / / '__| | __/ _ \\ / / / / / /\\/\n / _ \\ |_) | |_) \\ V V /| | | | || __/ / /___/ /___/\\/ /_\n \\_/ \\_/ .__/| .__/ \\_/\\_/ |_| |_|\\__\\___| \\____/\\____/\\____/\n |_| |_|\n\n";
|
|
70693
70692
|
var EXECUTABLE_NAME = "appwrite";
|
|
70694
70693
|
var NPM_PACKAGE_NAME = "appwrite-cli";
|
|
@@ -106401,7 +106400,7 @@ var package_default = {
|
|
|
106401
106400
|
type: "module",
|
|
106402
106401
|
homepage: "https://appwrite.io/support",
|
|
106403
106402
|
description: "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
|
|
106404
|
-
version: "13.3.
|
|
106403
|
+
version: "13.3.2",
|
|
106405
106404
|
license: "BSD-3-Clause",
|
|
106406
106405
|
main: "dist/index.js",
|
|
106407
106406
|
types: "dist/index.d.ts",
|
|
@@ -106487,14 +106486,21 @@ var drawTable = (data) => {
|
|
|
106487
106486
|
console.log("[]");
|
|
106488
106487
|
return;
|
|
106489
106488
|
}
|
|
106490
|
-
const
|
|
106489
|
+
const rows = data.map(
|
|
106490
|
+
(item) => item && typeof item === "object" && !Array.isArray(item) ? item : {}
|
|
106491
|
+
);
|
|
106492
|
+
const obj = rows.reduce((res, item) => ({ ...res, ...item }), {});
|
|
106491
106493
|
const keys = Object.keys(obj);
|
|
106494
|
+
if (keys.length === 0) {
|
|
106495
|
+
drawJSON(data);
|
|
106496
|
+
return;
|
|
106497
|
+
}
|
|
106492
106498
|
const def = keys.reduce((result, key) => {
|
|
106493
106499
|
result[key] = "-";
|
|
106494
106500
|
return result;
|
|
106495
106501
|
}, {});
|
|
106496
|
-
|
|
106497
|
-
const columns = Object.keys(
|
|
106502
|
+
const normalizedData = rows.map((item) => ({ ...def, ...item }));
|
|
106503
|
+
const columns = Object.keys(normalizedData[0]);
|
|
106498
106504
|
const table = new import_cli_table3.default({
|
|
106499
106505
|
head: columns.map((c) => import_chalk2.default.cyan.italic.bold(c)),
|
|
106500
106506
|
chars: {
|
|
@@ -106515,10 +106521,10 @@ var drawTable = (data) => {
|
|
|
106515
106521
|
middle: import_chalk2.default.cyan("\u2502")
|
|
106516
106522
|
}
|
|
106517
106523
|
});
|
|
106518
|
-
|
|
106524
|
+
normalizedData.forEach((row) => {
|
|
106519
106525
|
const rowValues = [];
|
|
106520
|
-
for (const key
|
|
106521
|
-
if (row[key]
|
|
106526
|
+
for (const key of columns) {
|
|
106527
|
+
if (row[key] == null) {
|
|
106522
106528
|
rowValues.push("-");
|
|
106523
106529
|
} else if (Array.isArray(row[key])) {
|
|
106524
106530
|
rowValues.push(JSON.stringify(row[key]));
|
|
@@ -106532,6 +106538,9 @@ var drawTable = (data) => {
|
|
|
106532
106538
|
});
|
|
106533
106539
|
console.log(table.toString());
|
|
106534
106540
|
};
|
|
106541
|
+
var drawJSON = (data) => {
|
|
106542
|
+
console.log(JSON.stringify(data, null, 2));
|
|
106543
|
+
};
|
|
106535
106544
|
var parseError = (err) => {
|
|
106536
106545
|
if (cliConfig.report) {
|
|
106537
106546
|
(async () => {
|
|
@@ -111335,6 +111344,22 @@ function getAppwriteDependency() {
|
|
|
111335
111344
|
}
|
|
111336
111345
|
return "appwrite";
|
|
111337
111346
|
}
|
|
111347
|
+
function detectImportExtension(cwd = process.cwd()) {
|
|
111348
|
+
try {
|
|
111349
|
+
const pkgPath = path4.resolve(cwd, "package.json");
|
|
111350
|
+
if (fs5.existsSync(pkgPath)) {
|
|
111351
|
+
const pkg = JSON.parse(fs5.readFileSync(pkgPath, "utf-8"));
|
|
111352
|
+
if (pkg.type === "module") {
|
|
111353
|
+
return ".js";
|
|
111354
|
+
}
|
|
111355
|
+
}
|
|
111356
|
+
if (fs5.existsSync(path4.resolve(cwd, "deno.json")) || fs5.existsSync(path4.resolve(cwd, "deno.jsonc"))) {
|
|
111357
|
+
return ".ts";
|
|
111358
|
+
}
|
|
111359
|
+
} catch {
|
|
111360
|
+
}
|
|
111361
|
+
return "";
|
|
111362
|
+
}
|
|
111338
111363
|
function supportsServerSideMethods(appwriteDep, override = "auto") {
|
|
111339
111364
|
if (override === "true") return true;
|
|
111340
111365
|
if (override === "false") return false;
|
|
@@ -111455,10 +111480,10 @@ var BaseDatabasesGenerator = class {
|
|
|
111455
111480
|
var types_ts_default = "import { type Models } from '{{appwriteDep}}';\n\n{{{ENUMS}}}{{{TYPES}}}\ndeclare const __roleStringBrand: unique symbol;\nexport type RoleString = string & { readonly [__roleStringBrand]: never };\n\nexport type RoleBuilder = {\n any: () => RoleString;\n user: (userId: string, status?: string) => RoleString;\n users: (status?: string) => RoleString;\n guests: () => RoleString;\n team: (teamId: string, role?: string) => RoleString;\n member: (memberId: string) => RoleString;\n label: (label: string) => RoleString;\n}\n\nexport type PermissionBuilder = {\n read: (role: RoleString) => string;\n write: (role: RoleString) => string;\n create: (role: RoleString) => string;\n update: (role: RoleString) => string;\n delete: (role: RoleString) => string;\n}\n\nexport type PermissionCallback = (permission: PermissionBuilder, role: RoleBuilder) => string[];\n\nexport type QueryValue = string | number | boolean;\n\nexport type ExtractQueryValue<T> = T extends (infer U)[]\n ? U extends QueryValue ? U : never\n : T extends QueryValue | null ? NonNullable<T> : never;\n\nexport type QueryableKeys<T> = {\n [K in keyof T]: ExtractQueryValue<T[K]> extends never ? never : K;\n}[keyof T];\n\nexport type QueryBuilder<T> = {\n equal: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n notEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n lessThan: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n lessThanEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n greaterThan: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n greaterThanEqual: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n contains: <K extends QueryableKeys<T>>(field: K, value: ExtractQueryValue<T[K]>) => string;\n search: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n isNull: <K extends QueryableKeys<T>>(field: K) => string;\n isNotNull: <K extends QueryableKeys<T>>(field: K) => string;\n startsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n endsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n between: <K extends QueryableKeys<T>>(field: K, start: ExtractQueryValue<T[K]>, end: ExtractQueryValue<T[K]>) => string;\n select: <K extends keyof T>(fields: K[]) => string;\n orderAsc: <K extends keyof T>(field: K) => string;\n orderDesc: <K extends keyof T>(field: K) => string;\n limit: (value: number) => string;\n offset: (value: number) => string;\n cursorAfter: (documentId: string) => string;\n cursorBefore: (documentId: string) => string;\n or: (...queries: string[]) => string;\n and: (...queries: string[]) => string;\n}\n\nexport type DatabaseId = {{{databaseIdType}}};\n\n{{{DATABASE_TABLES_TYPE}}}\n";
|
|
111456
111481
|
|
|
111457
111482
|
// lib/commands/generators/typescript/templates/databases.ts.hbs
|
|
111458
|
-
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from \'./types.js\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants.js\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants.js\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as any),\n notEqual: (field, value) => Query.notEqual(String(field), value as any),\n lessThan: (field, value) => Query.lessThan(String(field), value as any),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as any),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),\n contains: (field, value) => Query.contains(String(field), value as any),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as any, end as any),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: any, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: any, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: any) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: any[]; indexes?: any[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name ?? tableId, // TODO: remove this fallback once fixed in other SDKs\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
111483
|
+
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from \'./types{{importExt}}\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants{{importExt}}\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants{{importExt}}\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as any),\n notEqual: (field, value) => Query.notEqual(String(field), value as any),\n lessThan: (field, value) => Query.lessThan(String(field), value as any),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as any),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as any),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as any),\n contains: (field, value) => Query.contains(String(field), value as any),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as any, end as any),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: any, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: any, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: any) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: any[]; indexes?: any[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name ?? tableId, // TODO: remove this fallback once fixed in other SDKs\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
111459
111484
|
|
|
111460
111485
|
// lib/commands/generators/typescript/templates/index.ts.hbs
|
|
111461
|
-
var index_ts_default = '/**\n * {{sdkTitle}} Generated SDK\n *\n * This file is auto-generated. Do not edit manually.\n * Re-run `{{executableName}} generate` to regenerate.\n */\n\nexport { databases } from "./databases
|
|
111486
|
+
var index_ts_default = '/**\n * {{sdkTitle}} Generated SDK\n *\n * This file is auto-generated. Do not edit manually.\n * Re-run `{{executableName}} generate` to regenerate.\n */\n\nexport { databases } from "./databases{{importExt}}";\nexport * from "./types{{importExt}}";\n';
|
|
111462
111487
|
|
|
111463
111488
|
// lib/commands/generators/typescript/templates/constants.ts.hbs
|
|
111464
111489
|
var constants_ts_default = "/**\n * {{sdkTitle}} Configuration Constants\n *\n * This file contains configuration for the generated SDK.\n * You may modify these values as needed.\n */\n\nexport const PROJECT_ID = '{{projectId}}';\nexport const ENDPOINT = '{{endpoint}}';\n{{#if requiresApiKey}}\n\n/**\n * API Key is required for server-side operations\n * Set the APPWRITE_API_KEY environment variable or replace this value directly.\n */\nexport const API_KEY = process.env.APPWRITE_API_KEY ?? '';\n{{/if}}\n";
|
|
@@ -111727,7 +111752,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
111727
111752
|
delete (api as any).deleteMany;
|
|
111728
111753
|
}`;
|
|
111729
111754
|
}
|
|
111730
|
-
generateDatabasesFile(config2) {
|
|
111755
|
+
generateDatabasesFile(config2, importExt) {
|
|
111731
111756
|
const entities = config2.tables?.length ? config2.tables : config2.collections;
|
|
111732
111757
|
if (!entities || entities.length === 0) {
|
|
111733
111758
|
return "// No tables or collections found in configuration\n";
|
|
@@ -111741,6 +111766,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
111741
111766
|
return databasesTemplate({
|
|
111742
111767
|
appwriteDep,
|
|
111743
111768
|
supportsServerSide,
|
|
111769
|
+
importExt,
|
|
111744
111770
|
TABLE_ID_MAP: this.generateTableIdMap(entitiesByDb),
|
|
111745
111771
|
TABLES_WITH_RELATIONSHIPS: this.generateTablesWithRelationships(entitiesByDb),
|
|
111746
111772
|
BULK_METHODS: this.generateBulkMethods(supportsServerSide),
|
|
@@ -111748,10 +111774,11 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
111748
111774
|
BULK_REMOVAL: this.generateBulkRemoval(supportsServerSide)
|
|
111749
111775
|
});
|
|
111750
111776
|
}
|
|
111751
|
-
generateIndexFile() {
|
|
111777
|
+
generateIndexFile(importExt) {
|
|
111752
111778
|
return indexTemplate({
|
|
111753
111779
|
sdkTitle: SDK_TITLE,
|
|
111754
|
-
executableName: EXECUTABLE_NAME
|
|
111780
|
+
executableName: EXECUTABLE_NAME,
|
|
111781
|
+
importExt
|
|
111755
111782
|
});
|
|
111756
111783
|
}
|
|
111757
111784
|
generateConstantsFile(config2) {
|
|
@@ -111771,6 +111798,7 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
111771
111798
|
if (!config2.projectId) {
|
|
111772
111799
|
throw new Error("Project ID is required in configuration");
|
|
111773
111800
|
}
|
|
111801
|
+
const importExt = detectImportExtension();
|
|
111774
111802
|
const files = /* @__PURE__ */ new Map();
|
|
111775
111803
|
const hasEntities = config2.tables && config2.tables.length > 0 || config2.collections && config2.collections.length > 0;
|
|
111776
111804
|
if (!hasEntities) {
|
|
@@ -111785,13 +111813,13 @@ ${supportsServerSide ? ` create: (databaseId: string, name: string, options?: {
|
|
|
111785
111813
|
"types.ts",
|
|
111786
111814
|
"// No tables or collections found in configuration\n"
|
|
111787
111815
|
);
|
|
111788
|
-
files.set("index.ts", this.generateIndexFile());
|
|
111816
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
111789
111817
|
files.set("constants.ts", this.generateConstantsFile(config2));
|
|
111790
111818
|
return { files };
|
|
111791
111819
|
}
|
|
111792
111820
|
files.set("types.ts", this.generateTypesFile(config2));
|
|
111793
|
-
files.set("databases.ts", this.generateDatabasesFile(config2));
|
|
111794
|
-
files.set("index.ts", this.generateIndexFile());
|
|
111821
|
+
files.set("databases.ts", this.generateDatabasesFile(config2, importExt));
|
|
111822
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
111795
111823
|
files.set("constants.ts", this.generateConstantsFile(config2));
|
|
111796
111824
|
return { files };
|
|
111797
111825
|
}
|
|
@@ -111887,15 +111915,27 @@ var Schema = class {
|
|
|
111887
111915
|
}
|
|
111888
111916
|
};
|
|
111889
111917
|
export {
|
|
111918
|
+
AttributeSchema,
|
|
111919
|
+
BucketSchema,
|
|
111920
|
+
CollectionSchema,
|
|
111921
|
+
ColumnSchema,
|
|
111922
|
+
ConfigSchema,
|
|
111923
|
+
DatabaseSchema,
|
|
111924
|
+
FunctionSchema,
|
|
111925
|
+
IndexSchema,
|
|
111926
|
+
IndexTableSchema,
|
|
111927
|
+
MessageSchema,
|
|
111890
111928
|
Pull,
|
|
111891
111929
|
Push,
|
|
111892
|
-
Schema
|
|
111930
|
+
Schema,
|
|
111931
|
+
SettingsSchema,
|
|
111932
|
+
SiteSchema,
|
|
111933
|
+
TableSchema,
|
|
111934
|
+
TeamSchema,
|
|
111935
|
+
TopicSchema
|
|
111893
111936
|
};
|
|
111894
111937
|
/*! Bundled license information:
|
|
111895
111938
|
|
|
111896
|
-
safe-buffer/index.js:
|
|
111897
|
-
(*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
|
|
111898
|
-
|
|
111899
111939
|
undici/lib/fetch/body.js:
|
|
111900
111940
|
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
|
111901
111941
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../lib/commands/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../lib/commands/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,KAAK,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAkID,eAAO,MAAM,QAAQ,SAgCkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../../../../lib/commands/generators/typescript/databases.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAI9D,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../../../../lib/commands/generators/typescript/databases.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAI9D,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAiCpB;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,sBAAsB;IACtE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAgB;IACpD,QAAQ,CAAC,aAAa,QAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,kBAAkB,CAAqC;IAE/D,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAIhE,OAAO,CAAC,SAAS;IAQjB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,0BAA0B;IA6ElC,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,+BAA+B;IAsBvC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,qBAAqB;IAevB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;CAoC5D"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const SDK_TITLE = "Appwrite";
|
|
2
2
|
export declare const SDK_TITLE_LOWER = "appwrite";
|
|
3
|
-
export declare const SDK_VERSION = "13.3.
|
|
3
|
+
export declare const SDK_VERSION = "13.3.2";
|
|
4
4
|
export declare const SDK_NAME = "Command Line";
|
|
5
5
|
export declare const SDK_PLATFORM = "console";
|
|
6
6
|
export declare const SDK_LANGUAGE = "cli";
|
package/dist/lib/parser.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CliConfig } from "./types.js";
|
|
2
2
|
declare const cliConfig: CliConfig;
|
|
3
3
|
export declare const parse: (data: Record<string, any>) => void;
|
|
4
|
-
export declare const drawTable: (data: Array<Record<string, any
|
|
4
|
+
export declare const drawTable: (data: Array<Record<string, any> | null | undefined>) => void;
|
|
5
5
|
export declare const drawJSON: (data: any) => void;
|
|
6
6
|
export declare const parseError: (err: Error) => void;
|
|
7
7
|
export declare const actionRunner: <T extends (...args: any[]) => Promise<any>>(fn: T) => ((...args: Parameters<T>) => Promise<void>);
|
package/dist/lib/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../lib/parser.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ5C,QAAA,MAAM,SAAS,EAAE,SAQhB,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,IA2BjD,CAAC;AAEF,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../lib/parser.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ5C,QAAA,MAAM,SAAS,EAAE,SAQhB,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,IA2BjD,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,KAClD,IAiEF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,GAAG,KAAG,IAEpC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,KAAK,KAAK,KAAG,IA2DvC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACrE,IAAI,CAAC,KACJ,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAY5C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAM5C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,OAIzC,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,UAAU,MAAM,KAAG,IAEtC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,UAAU,MAAM,KAAG,IAIvC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,UAAU,MAAM,KAAG,IAEvC,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,UAAU,MAAM,KAAG,IAI1C,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,UAAU,MAAM,KAAG,IAExC,CAAC;AAEF,eAAO,MAAM,IAAI,wXAAW,CAAC;AAE7B,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+BtD,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -23,6 +23,11 @@ export declare function getTypeScriptType(attribute: TypeAttribute, entities: Ty
|
|
|
23
23
|
* @returns The appropriate Appwrite import path
|
|
24
24
|
*/
|
|
25
25
|
export declare function getAppwriteDependency(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Detects whether the user's project uses native ESM.
|
|
28
|
+
* Returns ".js" for ESM projects (package.json "type": "module" or Deno), "" for non-ESM projects.
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectImportExtension(cwd?: string): string;
|
|
26
31
|
/**
|
|
27
32
|
* Checks if the Appwrite dependency supports server-side methods.
|
|
28
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-type-utils.d.ts","sourceRoot":"","sources":["../../../lib/shared/typescript-type-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AAE1E;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,UAAU,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,OAAe,GACzB,MAAM,CA0ER;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAkC9C;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAM,GAAG,MAAM,GAAG,OAAgB,GAC3C,OAAO,CAQT"}
|
|
1
|
+
{"version":3,"file":"typescript-type-utils.d.ts","sourceRoot":"","sources":["../../../lib/shared/typescript-type-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,cAAc,EACd,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;AAE1E;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,UAAU,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,OAAe,GACzB,MAAM,CA0ER;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAkC9C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAoBzE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAM,GAAG,MAAM,GAAG,OAAgB,GAC3C,OAAO,CAQT"}
|
package/index.ts
CHANGED
|
@@ -26,3 +26,20 @@ export type {
|
|
|
26
26
|
ColumnType,
|
|
27
27
|
TableIndexType,
|
|
28
28
|
} from "./lib/commands/config.js";
|
|
29
|
+
export {
|
|
30
|
+
ConfigSchema,
|
|
31
|
+
SettingsSchema,
|
|
32
|
+
SiteSchema,
|
|
33
|
+
FunctionSchema,
|
|
34
|
+
DatabaseSchema,
|
|
35
|
+
CollectionSchema,
|
|
36
|
+
AttributeSchema,
|
|
37
|
+
IndexSchema,
|
|
38
|
+
TableSchema,
|
|
39
|
+
ColumnSchema,
|
|
40
|
+
IndexTableSchema,
|
|
41
|
+
TopicSchema,
|
|
42
|
+
TeamSchema,
|
|
43
|
+
MessageSchema,
|
|
44
|
+
BucketSchema,
|
|
45
|
+
} from "./lib/commands/config.js";
|
package/install.ps1
CHANGED
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
# You can use "View source" of this page to see the full script.
|
|
14
14
|
|
|
15
15
|
# REPO
|
|
16
|
-
$GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.
|
|
17
|
-
$GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.
|
|
16
|
+
$GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.2/appwrite-cli-win-x64.exe"
|
|
17
|
+
$GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.2/appwrite-cli-win-arm64.exe"
|
|
18
18
|
|
|
19
19
|
$APPWRITE_BINARY_NAME = "appwrite.exe"
|
|
20
20
|
|
package/install.sh
CHANGED
|
@@ -96,7 +96,7 @@ printSuccess() {
|
|
|
96
96
|
downloadBinary() {
|
|
97
97
|
echo "[2/4] Downloading executable for $OS ($ARCH) ..."
|
|
98
98
|
|
|
99
|
-
GITHUB_LATEST_VERSION="13.3.
|
|
99
|
+
GITHUB_LATEST_VERSION="13.3.2"
|
|
100
100
|
GITHUB_FILE="appwrite-cli-${OS}-${ARCH}"
|
|
101
101
|
GITHUB_URL="https://github.com/$GITHUB_REPOSITORY_NAME/releases/download/$GITHUB_LATEST_VERSION/$GITHUB_FILE"
|
|
102
102
|
|
package/lib/commands/generate.ts
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
EXECUTABLE_NAME,
|
|
18
18
|
DEFAULT_ENDPOINT,
|
|
19
19
|
} from "../constants.js";
|
|
20
|
+
import { detectImportExtension } from "../shared/typescript-type-utils.js";
|
|
20
21
|
|
|
21
22
|
type ServerSideOverride = "auto" | "true" | "false";
|
|
22
23
|
|
|
@@ -129,11 +130,12 @@ const generateAction = async (
|
|
|
129
130
|
const firstEntity = entities?.[0];
|
|
130
131
|
const dbId = firstEntity?.databaseId ?? "databaseId";
|
|
131
132
|
const tableName = firstEntity?.name ?? "tableName";
|
|
133
|
+
const importExt = detectImportExtension();
|
|
132
134
|
|
|
133
135
|
console.log("");
|
|
134
136
|
log(`Import the generated SDK in your project:`);
|
|
135
137
|
console.log(
|
|
136
|
-
` import { databases } from "./${outputDir}/${SDK_TITLE_LOWER}/index
|
|
138
|
+
` import { databases } from "./${outputDir}/${SDK_TITLE_LOWER}/index${importExt}";`,
|
|
137
139
|
);
|
|
138
140
|
console.log("");
|
|
139
141
|
log(`Configure your SDK constants:`);
|
|
@@ -176,7 +178,7 @@ export const generate = new Command("generate")
|
|
|
176
178
|
`
|
|
177
179
|
Example:
|
|
178
180
|
Import the generated SDK in your project:
|
|
179
|
-
import { databases } from "./generated/${SDK_TITLE_LOWER}/index
|
|
181
|
+
import { databases } from "./generated/${SDK_TITLE_LOWER}/index${detectImportExtension()}";
|
|
180
182
|
|
|
181
183
|
Configure your SDK constants:
|
|
182
184
|
set values in ./generated/${SDK_TITLE_LOWER}/constants.ts
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
getTypeScriptType,
|
|
14
14
|
getAppwriteDependency,
|
|
15
15
|
supportsServerSideMethods,
|
|
16
|
+
detectImportExtension,
|
|
16
17
|
TypeAttribute,
|
|
17
18
|
TypeEntity,
|
|
18
19
|
} from "../../../shared/typescript-type-utils.js";
|
|
@@ -369,7 +370,7 @@ ${
|
|
|
369
370
|
}`;
|
|
370
371
|
}
|
|
371
372
|
|
|
372
|
-
private generateDatabasesFile(config: ConfigType): string {
|
|
373
|
+
private generateDatabasesFile(config: ConfigType, importExt: string): string {
|
|
373
374
|
const entities = config.tables?.length ? config.tables : config.collections;
|
|
374
375
|
|
|
375
376
|
if (!entities || entities.length === 0) {
|
|
@@ -386,6 +387,7 @@ ${
|
|
|
386
387
|
return databasesTemplate({
|
|
387
388
|
appwriteDep,
|
|
388
389
|
supportsServerSide,
|
|
390
|
+
importExt,
|
|
389
391
|
TABLE_ID_MAP: this.generateTableIdMap(entitiesByDb),
|
|
390
392
|
TABLES_WITH_RELATIONSHIPS:
|
|
391
393
|
this.generateTablesWithRelationships(entitiesByDb),
|
|
@@ -395,10 +397,11 @@ ${
|
|
|
395
397
|
});
|
|
396
398
|
}
|
|
397
399
|
|
|
398
|
-
private generateIndexFile(): string {
|
|
400
|
+
private generateIndexFile(importExt: string): string {
|
|
399
401
|
return indexTemplate({
|
|
400
402
|
sdkTitle: SDK_TITLE,
|
|
401
403
|
executableName: EXECUTABLE_NAME,
|
|
404
|
+
importExt,
|
|
402
405
|
});
|
|
403
406
|
}
|
|
404
407
|
|
|
@@ -422,6 +425,7 @@ ${
|
|
|
422
425
|
throw new Error("Project ID is required in configuration");
|
|
423
426
|
}
|
|
424
427
|
|
|
428
|
+
const importExt = detectImportExtension();
|
|
425
429
|
const files = new Map<string, string>();
|
|
426
430
|
|
|
427
431
|
const hasEntities =
|
|
@@ -440,14 +444,14 @@ ${
|
|
|
440
444
|
"types.ts",
|
|
441
445
|
"// No tables or collections found in configuration\n",
|
|
442
446
|
);
|
|
443
|
-
files.set("index.ts", this.generateIndexFile());
|
|
447
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
444
448
|
files.set("constants.ts", this.generateConstantsFile(config));
|
|
445
449
|
return { files };
|
|
446
450
|
}
|
|
447
451
|
|
|
448
452
|
files.set("types.ts", this.generateTypesFile(config));
|
|
449
|
-
files.set("databases.ts", this.generateDatabasesFile(config));
|
|
450
|
-
files.set("index.ts", this.generateIndexFile());
|
|
453
|
+
files.set("databases.ts", this.generateDatabasesFile(config, importExt));
|
|
454
|
+
files.set("index.ts", this.generateIndexFile(importExt));
|
|
451
455
|
files.set("constants.ts", this.generateConstantsFile(config));
|
|
452
456
|
|
|
453
457
|
return { files };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Client, TablesDB, ID, Query, type Models, Permission, Role } from '{{appwriteDep}}';
|
|
2
|
-
import type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from './types
|
|
2
|
+
import type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, PermissionBuilder, RoleBuilder, RoleString } from './types{{importExt}}';
|
|
3
3
|
{{#if supportsServerSide}}
|
|
4
|
-
import { PROJECT_ID, ENDPOINT, API_KEY } from './constants
|
|
4
|
+
import { PROJECT_ID, ENDPOINT, API_KEY } from './constants{{importExt}}';
|
|
5
5
|
{{else}}
|
|
6
|
-
import { PROJECT_ID, ENDPOINT } from './constants
|
|
6
|
+
import { PROJECT_ID, ENDPOINT } from './constants{{importExt}}';
|
|
7
7
|
{{/if}}
|
|
8
8
|
|
|
9
9
|
const createQueryBuilder = <T>(): QueryBuilder<T> => ({
|
package/lib/constants.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// SDK
|
|
2
2
|
export const SDK_TITLE = 'Appwrite';
|
|
3
3
|
export const SDK_TITLE_LOWER = 'appwrite';
|
|
4
|
-
export const SDK_VERSION = '13.3.
|
|
4
|
+
export const SDK_VERSION = '13.3.2';
|
|
5
5
|
export const SDK_NAME = 'Command Line';
|
|
6
6
|
export const SDK_PLATFORM = 'console';
|
|
7
7
|
export const SDK_LANGUAGE = 'cli';
|
package/lib/parser.ts
CHANGED
|
@@ -54,25 +54,35 @@ export const parse = (data: Record<string, any>): void => {
|
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
-
export const drawTable = (
|
|
57
|
+
export const drawTable = (
|
|
58
|
+
data: Array<Record<string, any> | null | undefined>,
|
|
59
|
+
): void => {
|
|
58
60
|
if (data.length == 0) {
|
|
59
61
|
console.log("[]");
|
|
60
62
|
return;
|
|
61
63
|
}
|
|
62
64
|
|
|
65
|
+
const rows = data.map((item) =>
|
|
66
|
+
item && typeof item === "object" && !Array.isArray(item) ? item : {},
|
|
67
|
+
);
|
|
68
|
+
|
|
63
69
|
// Create an object with all the keys in it
|
|
64
|
-
const obj =
|
|
70
|
+
const obj = rows.reduce((res, item) => ({ ...res, ...item }), {});
|
|
65
71
|
// Get those keys as an array
|
|
66
72
|
const keys = Object.keys(obj);
|
|
73
|
+
if (keys.length === 0) {
|
|
74
|
+
drawJSON(data);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
67
77
|
// Create an object with all keys set to the default value ''
|
|
68
78
|
const def = keys.reduce((result: Record<string, string>, key) => {
|
|
69
79
|
result[key] = "-";
|
|
70
80
|
return result;
|
|
71
81
|
}, {});
|
|
72
82
|
// Use object destructuring to replace all default values with the ones we have
|
|
73
|
-
|
|
83
|
+
const normalizedData = rows.map((item) => ({ ...def, ...item }));
|
|
74
84
|
|
|
75
|
-
const columns = Object.keys(
|
|
85
|
+
const columns = Object.keys(normalizedData[0]);
|
|
76
86
|
|
|
77
87
|
const table = new Table({
|
|
78
88
|
head: columns.map((c) => chalk.cyan.italic.bold(c)),
|
|
@@ -95,10 +105,10 @@ export const drawTable = (data: Array<Record<string, any>>): void => {
|
|
|
95
105
|
},
|
|
96
106
|
});
|
|
97
107
|
|
|
98
|
-
|
|
108
|
+
normalizedData.forEach((row) => {
|
|
99
109
|
const rowValues: any[] = [];
|
|
100
|
-
for (const key
|
|
101
|
-
if (row[key]
|
|
110
|
+
for (const key of columns) {
|
|
111
|
+
if (row[key] == null) {
|
|
102
112
|
rowValues.push("-");
|
|
103
113
|
} else if (Array.isArray(row[key])) {
|
|
104
114
|
rowValues.push(JSON.stringify(row[key]));
|
|
@@ -149,6 +149,32 @@ export function getAppwriteDependency(): string {
|
|
|
149
149
|
return "appwrite";
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Detects whether the user's project uses native ESM.
|
|
154
|
+
* Returns ".js" for ESM projects (package.json "type": "module" or Deno), "" for non-ESM projects.
|
|
155
|
+
*/
|
|
156
|
+
export function detectImportExtension(cwd: string = process.cwd()): string {
|
|
157
|
+
try {
|
|
158
|
+
const pkgPath = path.resolve(cwd, "package.json");
|
|
159
|
+
if (fs.existsSync(pkgPath)) {
|
|
160
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
161
|
+
if (pkg.type === "module") {
|
|
162
|
+
return ".js";
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (
|
|
167
|
+
fs.existsSync(path.resolve(cwd, "deno.json")) ||
|
|
168
|
+
fs.existsSync(path.resolve(cwd, "deno.jsonc"))
|
|
169
|
+
) {
|
|
170
|
+
return ".ts";
|
|
171
|
+
}
|
|
172
|
+
} catch {
|
|
173
|
+
// Fall through to default
|
|
174
|
+
}
|
|
175
|
+
return "";
|
|
176
|
+
}
|
|
177
|
+
|
|
152
178
|
/**
|
|
153
179
|
* Checks if the Appwrite dependency supports server-side methods.
|
|
154
180
|
*
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"type": "module",
|
|
4
4
|
"homepage": "https://appwrite.io/support",
|
|
5
5
|
"description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
|
|
6
|
-
"version": "13.3.
|
|
6
|
+
"version": "13.3.2",
|
|
7
7
|
"license": "BSD-3-Clause",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/ScoopInstaller/Scoop/master/schema.json",
|
|
3
|
-
"version": "13.3.
|
|
3
|
+
"version": "13.3.2",
|
|
4
4
|
"description": "The Appwrite CLI is a command-line application that allows you to interact with Appwrite and perform server-side tasks using your terminal.",
|
|
5
5
|
"homepage": "https://github.com/appwrite/sdk-for-cli",
|
|
6
6
|
"license": "BSD-3-Clause",
|
|
7
7
|
"architecture": {
|
|
8
8
|
"64bit": {
|
|
9
|
-
"url": "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.
|
|
9
|
+
"url": "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.2/appwrite-cli-win-x64.exe",
|
|
10
10
|
"bin": [
|
|
11
11
|
[
|
|
12
12
|
"appwrite-cli-win-x64.exe",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
]
|
|
16
16
|
},
|
|
17
17
|
"arm64": {
|
|
18
|
-
"url": "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.
|
|
18
|
+
"url": "https://github.com/appwrite/sdk-for-cli/releases/download/13.3.2/appwrite-cli-win-arm64.exe",
|
|
19
19
|
"bin": [
|
|
20
20
|
[
|
|
21
21
|
"appwrite-cli-win-arm64.exe",
|