appwrite-cli 13.0.1 → 13.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +2 -2
  3. package/cli.ts +2 -0
  4. package/dist/bundle.cjs +17551 -16864
  5. package/dist/cli.js +2 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/lib/commands/config-validations.d.ts +53 -0
  8. package/dist/lib/commands/config-validations.d.ts.map +1 -0
  9. package/dist/lib/commands/config-validations.js +130 -0
  10. package/dist/lib/commands/config-validations.js.map +1 -0
  11. package/dist/lib/commands/config.d.ts +241 -325
  12. package/dist/lib/commands/config.d.ts.map +1 -1
  13. package/dist/lib/commands/config.js +86 -107
  14. package/dist/lib/commands/config.js.map +1 -1
  15. package/dist/lib/commands/generate.d.ts +7 -0
  16. package/dist/lib/commands/generate.d.ts.map +1 -0
  17. package/dist/lib/commands/generate.js +92 -0
  18. package/dist/lib/commands/generate.js.map +1 -0
  19. package/dist/lib/commands/generators/base.d.ts +58 -0
  20. package/dist/lib/commands/generators/base.d.ts.map +1 -0
  21. package/dist/lib/commands/generators/base.js +27 -0
  22. package/dist/lib/commands/generators/base.js.map +1 -0
  23. package/dist/lib/commands/generators/index.d.ts +26 -0
  24. package/dist/lib/commands/generators/index.d.ts.map +1 -0
  25. package/dist/lib/commands/generators/index.js +55 -0
  26. package/dist/lib/commands/generators/index.js.map +1 -0
  27. package/dist/lib/commands/generators/language-detector.d.ts +42 -0
  28. package/dist/lib/commands/generators/language-detector.d.ts.map +1 -0
  29. package/dist/lib/commands/generators/language-detector.js +127 -0
  30. package/dist/lib/commands/generators/language-detector.js.map +1 -0
  31. package/dist/lib/commands/generators/typescript/databases.d.ts +36 -0
  32. package/dist/lib/commands/generators/typescript/databases.d.ts.map +1 -0
  33. package/dist/lib/commands/generators/typescript/databases.js +489 -0
  34. package/dist/lib/commands/generators/typescript/databases.js.map +1 -0
  35. package/dist/lib/commands/pull.js +3 -3
  36. package/dist/lib/commands/pull.js.map +1 -1
  37. package/dist/lib/commands/push.d.ts +6 -3
  38. package/dist/lib/commands/push.d.ts.map +1 -1
  39. package/dist/lib/commands/push.js +57 -37
  40. package/dist/lib/commands/push.js.map +1 -1
  41. package/dist/lib/commands/schema.d.ts +2 -2
  42. package/dist/lib/commands/schema.d.ts.map +1 -1
  43. package/dist/lib/commands/schema.js +2 -2
  44. package/dist/lib/commands/schema.js.map +1 -1
  45. package/dist/lib/commands/utils/attributes.d.ts +5 -0
  46. package/dist/lib/commands/utils/attributes.d.ts.map +1 -1
  47. package/dist/lib/commands/utils/attributes.js +20 -10
  48. package/dist/lib/commands/utils/attributes.js.map +1 -1
  49. package/dist/lib/commands/utils/pools.d.ts +0 -3
  50. package/dist/lib/commands/utils/pools.d.ts.map +1 -1
  51. package/dist/lib/commands/utils/pools.js +0 -34
  52. package/dist/lib/commands/utils/pools.js.map +1 -1
  53. package/dist/lib/config.d.ts.map +1 -1
  54. package/dist/lib/config.js +28 -131
  55. package/dist/lib/config.js.map +1 -1
  56. package/dist/lib/constants.d.ts +1 -1
  57. package/dist/lib/constants.d.ts.map +1 -1
  58. package/dist/lib/constants.js +1 -1
  59. package/dist/lib/constants.js.map +1 -1
  60. package/dist/lib/utils.d.ts +3 -0
  61. package/dist/lib/utils.d.ts.map +1 -1
  62. package/dist/lib/utils.js +26 -0
  63. package/dist/lib/utils.js.map +1 -1
  64. package/dist/package.json +1 -1
  65. package/install.ps1 +2 -2
  66. package/install.sh +1 -1
  67. package/lib/commands/config-validations.ts +199 -0
  68. package/lib/commands/config.ts +94 -125
  69. package/lib/commands/generate.ts +142 -0
  70. package/lib/commands/generators/base.ts +91 -0
  71. package/lib/commands/generators/index.ts +87 -0
  72. package/lib/commands/generators/language-detector.ts +163 -0
  73. package/lib/commands/generators/typescript/databases.ts +590 -0
  74. package/lib/commands/pull.ts +4 -4
  75. package/lib/commands/push.ts +97 -58
  76. package/lib/commands/schema.ts +3 -3
  77. package/lib/commands/utils/attributes.ts +31 -11
  78. package/lib/commands/utils/pools.ts +0 -67
  79. package/lib/config.ts +43 -131
  80. package/lib/constants.ts +1 -1
  81. package/lib/utils.ts +32 -0
  82. package/package.json +1 -1
  83. package/scoop/appwrite.config.json +3 -3
  84. package/dist/lib/commands/db.d.ts +0 -34
  85. package/dist/lib/commands/db.d.ts.map +0 -1
  86. package/dist/lib/commands/db.js +0 -247
  87. package/dist/lib/commands/db.js.map +0 -1
  88. package/lib/commands/db.ts +0 -324
package/lib/utils.ts CHANGED
@@ -184,3 +184,35 @@ export function filterBySchema<T extends z.ZodObject<z.ZodRawShape>>(
184
184
 
185
185
  return result as z.infer<T>;
186
186
  }
187
+
188
+ export function toPascalCase(str: string): string {
189
+ return str
190
+ .replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ""))
191
+ .replace(/^(.)/, (char) => char.toUpperCase());
192
+ }
193
+
194
+ export function toUpperSnakeCase(str: string): string {
195
+ return str
196
+ .replace(/([a-z])([A-Z])/g, "$1_$2")
197
+ .replace(/[-\s]+/g, "_")
198
+ .toUpperCase();
199
+ }
200
+
201
+ export function sanitizeEnumKey(key: string): string {
202
+ let sanitized = toUpperSnakeCase(key)
203
+ .replace(/[^A-Z0-9_]/gi, "_") // Replace non-alphanumeric with underscores
204
+ .replace(/_+/g, "_") // Collapse consecutive underscores
205
+ .replace(/^_+|_+$/g, ""); // Trim leading/trailing underscores
206
+
207
+ // Prefix with underscore if starts with a digit
208
+ if (/^[0-9]/.test(sanitized)) {
209
+ sanitized = "_" + sanitized;
210
+ }
211
+
212
+ // Fallback if empty after sanitization
213
+ if (!sanitized) {
214
+ sanitized = "_VALUE";
215
+ }
216
+
217
+ return sanitized;
218
+ }
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.0.1",
6
+ "version": "13.1.0-rc.1",
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.0.1",
3
+ "version": "13.1.0-rc.1",
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.0.1/appwrite-cli-win-x64.exe",
9
+ "url": "https://github.com/appwrite/sdk-for-cli/releases/download/13.1.0-rc.1/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.0.1/appwrite-cli-win-arm64.exe",
18
+ "url": "https://github.com/appwrite/sdk-for-cli/releases/download/13.1.0-rc.1/appwrite-cli-win-arm64.exe",
19
19
  "bin": [
20
20
  [
21
21
  "appwrite-cli-win-arm64.exe",
@@ -1,34 +0,0 @@
1
- import { ConfigType } from "./config.js";
2
- export interface GenerateOptions {
3
- strict?: boolean;
4
- }
5
- export interface GenerateResult {
6
- dbContent: string;
7
- typesContent: string;
8
- }
9
- export declare class Db {
10
- private getType;
11
- private toPascalCase;
12
- private toCamelCase;
13
- private toUpperSnakeCase;
14
- private generateCollectionType;
15
- private generateEnums;
16
- private generateTypesFile;
17
- private getAppwriteDependency;
18
- private generateDbFile;
19
- /**
20
- * Generates TypeScript code for Appwrite database collections and types based on the provided configuration.
21
- *
22
- * This method returns generated content as strings:
23
- * 1. A types string containing TypeScript interfaces for each collection.
24
- * 2. A database client string with helper methods for CRUD operations on each collection.
25
- *
26
- * @param config - The Appwrite project configuration, including collections and project details.
27
- * @param options - Optional settings for code generation:
28
- * - strict: Whether to use strict naming conventions for collections (default: false).
29
- * @returns A Promise that resolves with an object containing dbContent and typesContent strings.
30
- * @throws If the configuration is missing a projectId or contains no collections.
31
- */
32
- generate(config: ConfigType, options?: GenerateOptions): Promise<GenerateResult>;
33
- }
34
- //# sourceMappingURL=db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../lib/commands/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAK1D,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,EAAE;IACb,OAAO,CAAC,OAAO;IA0Df,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,cAAc;IAqFtB;;;;;;;;;;;;OAYG;IACU,QAAQ,CACnB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC;CA4B3B"}
@@ -1,247 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- export class Db {
4
- getType(attribute, collections) {
5
- let type = "";
6
- switch (attribute.type) {
7
- case "string":
8
- case "datetime":
9
- type = "string";
10
- if (attribute.format === "enum") {
11
- type = this.toPascalCase(attribute.key);
12
- }
13
- break;
14
- case "integer":
15
- type = "number";
16
- break;
17
- case "double":
18
- type = "number";
19
- break;
20
- case "boolean":
21
- type = "boolean";
22
- break;
23
- case "relationship":
24
- const relatedCollection = collections.find((c) => c.$id === attribute.relatedCollection);
25
- if (!relatedCollection) {
26
- throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
27
- }
28
- type = this.toPascalCase(relatedCollection.name);
29
- if ((attribute.relationType === "oneToMany" &&
30
- attribute.side === "parent") ||
31
- (attribute.relationType === "manyToOne" &&
32
- attribute.side === "child") ||
33
- attribute.relationType === "manyToMany") {
34
- type = `${type}[]`;
35
- }
36
- break;
37
- default:
38
- throw new Error(`Unknown attribute type: ${attribute.type}`);
39
- }
40
- if (attribute.array) {
41
- type += "[]";
42
- }
43
- if (!attribute.required && attribute.default === null) {
44
- type += " | null";
45
- }
46
- return type;
47
- }
48
- toPascalCase(str) {
49
- return str
50
- .replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ""))
51
- .replace(/^(.)/, (char) => char.toUpperCase());
52
- }
53
- toCamelCase(str) {
54
- return str
55
- .replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ""))
56
- .replace(/^(.)/, (char) => char.toLowerCase());
57
- }
58
- toUpperSnakeCase(str) {
59
- return str
60
- .replace(/([a-z])([A-Z])/g, "$1_$2")
61
- .replace(/[-\s]+/g, "_")
62
- .toUpperCase();
63
- }
64
- generateCollectionType(collection, collections, options = {}) {
65
- if (!collection.attributes) {
66
- return "";
67
- }
68
- const { strict = false } = options;
69
- const typeName = this.toPascalCase(collection.name);
70
- const attributes = collection.attributes
71
- .map((attr) => {
72
- const key = strict ? this.toCamelCase(attr.key) : attr.key;
73
- return ` ${key}: ${this.getType(attr, collections)};`;
74
- })
75
- .join("\n");
76
- return `export type ${typeName} = Models.Row & {\n${attributes}\n}`;
77
- }
78
- generateEnums(collections) {
79
- const enumTypes = [];
80
- for (const collection of collections) {
81
- if (!collection.attributes)
82
- continue;
83
- for (const attribute of collection.attributes) {
84
- if (attribute.format === "enum" && attribute.elements) {
85
- const enumName = this.toPascalCase(attribute.key);
86
- const enumValues = attribute.elements
87
- .map((element, index) => {
88
- const key = this.toUpperSnakeCase(element);
89
- const isLast = index === attribute.elements.length - 1;
90
- return ` ${key} = "${element}"${isLast ? "" : ","}`;
91
- })
92
- .join("\n");
93
- enumTypes.push(`export enum ${enumName} {\n${enumValues}\n}`);
94
- }
95
- }
96
- }
97
- return enumTypes.join("\n\n");
98
- }
99
- generateTypesFile(config, options = {}) {
100
- if (!config.collections || config.collections.length === 0) {
101
- return "// No collections found in configuration\n";
102
- }
103
- const appwriteDep = this.getAppwriteDependency();
104
- const enums = this.generateEnums(config.collections);
105
- const types = config.collections
106
- .map((collection) => this.generateCollectionType(collection, config.collections, options))
107
- .join("\n\n");
108
- const parts = [`import { type Models } from '${appwriteDep}';`, ""];
109
- if (enums) {
110
- parts.push(enums);
111
- parts.push("");
112
- }
113
- parts.push(types);
114
- parts.push("");
115
- return parts.join("\n");
116
- }
117
- getAppwriteDependency() {
118
- const cwd = process.cwd();
119
- if (fs.existsSync(path.resolve(cwd, "package.json"))) {
120
- try {
121
- const packageJsonRaw = fs.readFileSync(path.resolve(cwd, "package.json"), "utf-8");
122
- const packageJson = JSON.parse(packageJsonRaw);
123
- return packageJson.dependencies?.["appwrite"]
124
- ? "appwrite"
125
- : "node-appwrite";
126
- }
127
- catch {
128
- // Fallback if package.json is invalid
129
- }
130
- }
131
- if (fs.existsSync(path.resolve(cwd, "deno.json"))) {
132
- return "https://deno.land/x/appwrite/mod.ts";
133
- }
134
- return "appwrite";
135
- }
136
- generateDbFile(config, options = {}) {
137
- const { strict = false } = options;
138
- const typesFileName = "appwrite.types.ts";
139
- if (!config.collections || config.collections.length === 0) {
140
- return "// No collections found in configuration\n";
141
- }
142
- const typeNames = config.collections.map((c) => this.toPascalCase(c.name));
143
- const importPath = typesFileName
144
- .replace(/\.d\.ts$/, "")
145
- .replace(/\.ts$/, "");
146
- const appwriteDep = this.getAppwriteDependency();
147
- const collectionsCode = config.collections
148
- .map((collection) => {
149
- const collectionName = strict
150
- ? this.toCamelCase(collection.name)
151
- : collection.name;
152
- const typeName = this.toPascalCase(collection.name);
153
- return ` ${collectionName}: {
154
- create: (data: Omit<${typeName}, keyof Models.Row>, options?: { rowId?: string; permissions?: string[] }) =>
155
- tablesDB.createRow<${typeName}>({
156
- databaseId: process.env.APPWRITE_DB_ID!,
157
- tableId: '${collection.$id}',
158
- rowId: options?.rowId ?? ID.unique(),
159
- data,
160
- permissions: [
161
- Permission.write(Role.user(data.createdBy)),
162
- Permission.read(Role.user(data.createdBy)),
163
- Permission.update(Role.user(data.createdBy)),
164
- Permission.delete(Role.user(data.createdBy))
165
- ]
166
- }),
167
- get: (id: string) =>
168
- tablesDB.getRow<${typeName}>({
169
- databaseId: process.env.APPWRITE_DB_ID!,
170
- tableId: '${collection.$id}',
171
- rowId: id,
172
- }),
173
- update: (id: string, data: Partial<Omit<${typeName}, keyof Models.Row>>, options?: { permissions?: string[] }) =>
174
- tablesDB.updateRow<${typeName}>({
175
- databaseId: process.env.APPWRITE_DB_ID!,
176
- tableId: '${collection.$id}',
177
- rowId: id,
178
- data,
179
- ...(options?.permissions ? { permissions: options.permissions } : {}),
180
- }),
181
- delete: (id: string) =>
182
- tablesDB.deleteRow({
183
- databaseId: process.env.APPWRITE_DB_ID!,
184
- tableId: '${collection.$id}',
185
- rowId: id,
186
- }),
187
- list: (queries?: string[]) =>
188
- tablesDB.listRows<${typeName}>({
189
- databaseId: process.env.APPWRITE_DB_ID!,
190
- tableId: '${collection.$id}',
191
- queries,
192
- }),
193
- }`;
194
- })
195
- .join(",\n");
196
- return `import { Client, TablesDB, ID, type Models, Permission, Role } from '${appwriteDep}';
197
- import type { ${typeNames.join(", ")} } from './${importPath}';
198
-
199
- const client = new Client()
200
- .setEndpoint(process.env.APPWRITE_ENDPOINT!)
201
- .setProject(process.env.APPWRITE_PROJECT_ID!)
202
- .setKey(process.env.APPWRITE_API_KEY!);
203
-
204
- const tablesDB = new TablesDB(client);
205
-
206
-
207
- export const db = {
208
- ${collectionsCode}
209
- };
210
- `;
211
- }
212
- /**
213
- * Generates TypeScript code for Appwrite database collections and types based on the provided configuration.
214
- *
215
- * This method returns generated content as strings:
216
- * 1. A types string containing TypeScript interfaces for each collection.
217
- * 2. A database client string with helper methods for CRUD operations on each collection.
218
- *
219
- * @param config - The Appwrite project configuration, including collections and project details.
220
- * @param options - Optional settings for code generation:
221
- * - strict: Whether to use strict naming conventions for collections (default: false).
222
- * @returns A Promise that resolves with an object containing dbContent and typesContent strings.
223
- * @throws If the configuration is missing a projectId or contains no collections.
224
- */
225
- async generate(config, options = {}) {
226
- const { strict = false } = options;
227
- if (!config.projectId) {
228
- throw new Error("Project ID is required in configuration");
229
- }
230
- if (!config.collections || config.collections.length === 0) {
231
- console.log("No collections found in configuration. Skipping database generation.");
232
- return {
233
- dbContent: "// No collections found in configuration\n",
234
- typesContent: "// No collections found in configuration\n",
235
- };
236
- }
237
- // Generate types content
238
- const typesContent = this.generateTypesFile(config, { strict });
239
- // Generate database client content
240
- const dbContent = this.generateDbFile(config, { strict });
241
- return {
242
- dbContent,
243
- typesContent,
244
- };
245
- }
246
- }
247
- //# sourceMappingURL=db.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../lib/commands/db.ts"],"names":[],"mappings":"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"}