appwrite-cli 8.1.1 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## 8.2.0
4
+
5
+ * Add `encrypt` attribute support
6
+ * Add improved warnings on attribute recreation and deletion
7
+ * Fix `null` parsing error when using create attribute command
8
+ * Type generation fixes and improvements:
9
+ * Add `--strict` / `-s` flag to `appwrite types` command to generate types in strict mode. This automatically converts the casing of attributes to match the language's naming conventions
10
+ * Add automatic package import to `dart` language which uses package detection to import the correct package
11
+ * Add `Document` class extension to generated types in `dart` and `js` language to support internal attributes like `$id` and `$collectionId` etc.
12
+ * Add proper enum support to `js` language
13
+ * Fix indentation in `java`, `kotlin` and `swift` to use 2 spaces instead of 4 for consistency across all languages
14
+ * Fix doc comments to use correct syntax in various languages (for eg. `///` instead of `/*`)
15
+ * Update enums in `dart` to use lowerCamelCase in `strict` mode as per [constant_identifier_names](https://dart.dev/tools/diagnostics/constant_identifier_names?utm_source=dartdev&utm_medium=redir&utm_id=diagcode&utm_content=constant_identifier_names)
16
+
3
17
  ## 8.1.1
4
18
 
5
19
  * Fix circular dependency issue due to usage of `success` method in `utils.js` file from `parser.js` file
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
- 8.1.1
32
+ 8.2.0
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
- 8.1.1
63
+ 8.2.0
64
64
  ```
65
65
 
66
66
  ## Getting Started
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/8.1.1/appwrite-cli-win-x64.exe"
17
- $GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/8.1.1/appwrite-cli-win-arm64.exe"
16
+ $GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/8.2.0/appwrite-cli-win-x64.exe"
17
+ $GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/8.2.0/appwrite-cli-win-arm64.exe"
18
18
 
19
19
  $APPWRITE_BINARY_NAME = "appwrite.exe"
20
20
 
package/install.sh CHANGED
@@ -97,7 +97,7 @@ printSuccess() {
97
97
  downloadBinary() {
98
98
  echo "[2/4] Downloading executable for $OS ($ARCH) ..."
99
99
 
100
- GITHUB_LATEST_VERSION="8.1.1"
100
+ GITHUB_LATEST_VERSION="8.2.0"
101
101
  GITHUB_FILE="appwrite-cli-${OS}-${ARCH}"
102
102
  GITHUB_URL="https://github.com/$GITHUB_REPOSITORY_NAME/releases/download/$GITHUB_LATEST_VERSION/$GITHUB_FILE"
103
103
 
package/lib/client.js CHANGED
@@ -16,8 +16,8 @@ class Client {
16
16
  'x-sdk-name': 'Command Line',
17
17
  'x-sdk-platform': 'console',
18
18
  'x-sdk-language': 'cli',
19
- 'x-sdk-version': '8.1.1',
20
- 'user-agent' : `AppwriteCLI/8.1.1 (${os.type()} ${os.version()}; ${os.arch()})`,
19
+ 'x-sdk-version': '8.2.0',
20
+ 'user-agent' : `AppwriteCLI/8.2.0 (${os.type()} ${os.version()}; ${os.arch()})`,
21
21
  'X-Appwrite-Response-Format' : '1.7.0',
22
22
  };
23
23
  }
@@ -508,6 +508,7 @@ const createAttribute = (databaseId, collectionId, attribute) => {
508
508
  required: attribute.required,
509
509
  xdefault: attribute.default,
510
510
  array: attribute.array,
511
+ encrypt: attribute.encrypt,
511
512
  parseOutput: false
512
513
  })
513
514
 
@@ -844,10 +845,14 @@ const attributesToCreate = async (remoteAttributes, localAttributes, collection,
844
845
 
845
846
  if (!cliConfig.force) {
846
847
  if (deleting.length > 0 && !isIndex) {
847
- log(`Attribute deletion will cause ${chalk.red('loss of data')}`);
848
+ console.log(`${chalk.red('-------------------------------------------------------')}`);
849
+ console.log(`${chalk.red('| WARNING: Attribute deletion may cause loss of data |')}`);
850
+ console.log(`${chalk.red('-------------------------------------------------------')}`);
848
851
  }
849
852
  if (conflicts.length > 0 && !isIndex) {
850
- log(`Attribute recreation will cause ${chalk.red('loss of data')}`);
853
+ console.log(`${chalk.red('---------------------------------------------------------')}`);
854
+ console.log(`${chalk.red('| WARNING: Attribute recreation may cause loss of data |')}`);
855
+ console.log(`${chalk.red('---------------------------------------------------------')}`);
851
856
  }
852
857
 
853
858
  if ((await getConfirmation()) !== true) {
@@ -58,12 +58,22 @@ const typesLanguageOption = new Option(
58
58
  .choices(["auto", "ts", "js", "php", "kotlin", "swift", "java", "dart"])
59
59
  .default("auto");
60
60
 
61
- const typesCommand = actionRunner(async (rawOutputDirectory, {language}) => {
61
+ const typesStrictOption = new Option(
62
+ "-s, --strict",
63
+ "Enable strict mode to automatically convert field names to follow language conventions"
64
+ )
65
+ .default(false);
66
+
67
+ const typesCommand = actionRunner(async (rawOutputDirectory, {language, strict}) => {
62
68
  if (language === "auto") {
63
69
  language = detectLanguage();
64
70
  log(`Detected language: ${language}`);
65
71
  }
66
72
 
73
+ if (strict) {
74
+ log(`Strict mode enabled: Field names will be converted to follow ${language} conventions`);
75
+ }
76
+
67
77
  const meta = createLanguageMeta(language);
68
78
 
69
79
  const rawOutputPath = rawOutputDirectory;
@@ -106,6 +116,7 @@ const typesCommand = actionRunner(async (rawOutputDirectory, {language}) => {
106
116
  if (meta.isSingleFile()) {
107
117
  const content = templater({
108
118
  collections,
119
+ strict,
109
120
  ...templateHelpers,
110
121
  getType: meta.getType
111
122
  });
@@ -118,6 +129,7 @@ const typesCommand = actionRunner(async (rawOutputDirectory, {language}) => {
118
129
  for (const collection of collections) {
119
130
  const content = templater({
120
131
  collection,
132
+ strict,
121
133
  ...templateHelpers,
122
134
  getType: meta.getType
123
135
  });
@@ -136,6 +148,7 @@ const types = new Command("types")
136
148
  .description("Generate types for your Appwrite project")
137
149
  .addArgument(typesOutputArgument)
138
150
  .addOption(typesLanguageOption)
151
+ .addOption(typesStrictOption)
139
152
  .action(actionRunner(typesCommand));
140
153
 
141
154
  module.exports = { types };
package/lib/config.js CHANGED
@@ -35,7 +35,9 @@ const KeysAttributes = new Set([
35
35
  "side",
36
36
  // Indexes
37
37
  "attributes",
38
- "orders"
38
+ "orders",
39
+ // Strings
40
+ "encrypt",
39
41
  ]);
40
42
  const KeyIndexes = new Set(["key", "type", "status", "attributes", "orders"]);
41
43
 
package/lib/parser.js CHANGED
@@ -24,7 +24,9 @@ const parse = (data) => {
24
24
  }
25
25
 
26
26
  for (let key in data) {
27
- if (Array.isArray(data[key])) {
27
+ if (data[key] === null) {
28
+ console.log(`${chalk.yellow.bold(key)} : null`);
29
+ } else if (Array.isArray(data[key])) {
28
30
  console.log(`${chalk.yellow.bold.underline(key)}`);
29
31
  if (typeof data[key][0] === 'object') {
30
32
  drawTable(data[key]);
@@ -120,7 +122,7 @@ const parseError = (err) => {
120
122
  } catch {
121
123
  }
122
124
 
123
- const version = '8.1.1';
125
+ const version = '8.2.0';
124
126
  const stepsToReproduce = `Running \`appwrite ${cliConfig.reportData.data.args.join(' ')}\``;
125
127
  const yourEnvironment = `CLI version: ${version}\nOperation System: ${os.type()}\nAppwrite version: ${appwriteVersion}\nIs Cloud: ${isCloud()}`;
126
128
 
@@ -1,8 +1,45 @@
1
1
  /** @typedef {import('../attribute').Attribute} Attribute */
2
2
  const { AttributeType } = require('../attribute');
3
3
  const { LanguageMeta } = require("./language");
4
+ const fs = require('fs');
5
+ const path = require('path');
4
6
 
5
7
  class Dart extends LanguageMeta {
8
+ getPackageName() {
9
+ const pubspecPath = path.join(this.getCurrentDirectory(), 'pubspec.yaml');
10
+ if (fs.existsSync(pubspecPath)) {
11
+ const pubspecContent = fs.readFileSync(pubspecPath, 'utf8');
12
+ const lines = pubspecContent.split('\n');
13
+
14
+ const dependenciesIndex = lines.findIndex(line => line.trim() === 'dependencies:');
15
+
16
+ if (dependenciesIndex !== -1) {
17
+ const indent = lines[dependenciesIndex].search(/\S|$/);
18
+ const dependencies = [];
19
+ for (let i = dependenciesIndex + 1; i < lines.length; i++) {
20
+ const line = lines[i];
21
+ if (line.trim() === '') continue;
22
+
23
+ const lineIndent = line.search(/\S|$/);
24
+ if (lineIndent <= indent && line.trim() !== '') {
25
+ break;
26
+ }
27
+
28
+ dependencies.push(line.trim());
29
+ }
30
+
31
+ if (dependencies.some(dep => dep.startsWith('dart_appwrite:'))) {
32
+ return 'dart_appwrite';
33
+ }
34
+ if (dependencies.some(dep => dep.startsWith('appwrite:'))) {
35
+ return 'appwrite';
36
+ }
37
+ }
38
+ }
39
+
40
+ return 'appwrite';
41
+ }
42
+
6
43
  getType(attribute) {
7
44
  let type = "";
8
45
  switch (attribute.type) {
@@ -46,42 +83,55 @@ class Dart extends LanguageMeta {
46
83
  }
47
84
 
48
85
  getTemplate() {
49
- return `<% for (const attribute of collection.attributes) { -%>
86
+ return `import 'package:${this.getPackageName()}/models.dart';
87
+ <% for (const attribute of collection.attributes) { -%>
50
88
  <% if (attribute.type === 'relationship') { -%>
51
89
  import '<%- attribute.relatedCollection.toLowerCase() %>.dart';
52
90
 
53
91
  <% } -%>
54
92
  <% } -%>
55
- /**
56
- * This file is auto-generated by the Appwrite CLI.
57
- * You can regenerate it by running \`appwrite types -l dart ${this.getCurrentDirectory()}\`.
58
- */
93
+ /// This file is auto-generated by the Appwrite CLI.
94
+ /// You can regenerate it by running \`appwrite types -l dart ${this.getCurrentDirectory()}\`.
59
95
 
60
96
  <% for (const attribute of collection.attributes) { -%>
61
97
  <% if (attribute.format === 'enum') { -%>
62
98
  enum <%- toPascalCase(attribute.key) %> {
63
99
  <% for (const [index, element] of Object.entries(attribute.elements)) { -%>
64
- <%- toSnakeCase(element) %><% if (index < attribute.elements.length - 1) { %>,<% } %>
100
+ <%- strict ? toCamelCase(element) : element %><% if (index < attribute.elements.length - 1) { %>,<% } %>
65
101
  <% } -%>
66
102
  }
67
103
 
68
104
  <% } -%>
69
105
  <% } -%>
70
- class <%= toPascalCase(collection.name) %> {
106
+ class <%= toPascalCase(collection.name) %> extends Document {
71
107
  <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
72
- <%- getType(attribute) %> <%= toCamelCase(attribute.key) %>;
108
+ <%- getType(attribute) %> <%= strict ? toCamelCase(attribute.key) : attribute.key %>;
73
109
  <% } -%>
74
110
 
75
111
  <%= toPascalCase(collection.name) %>({
112
+ required super.$id,
113
+ required super.$collectionId,
114
+ required super.$databaseId,
115
+ required super.$createdAt,
116
+ required super.$updatedAt,
117
+ required super.$permissions,
118
+ required super.data,
76
119
  <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
77
- <% if (attribute.required) { %>required <% } %>this.<%= toCamelCase(attribute.key) %><% if (index < collection.attributes.length - 1) { %>,<% } %>
120
+ <% if (attribute.required) { %>required <% } %>this.<%= strict ? toCamelCase(attribute.key) : attribute.key %><% if (index < collection.attributes.length - 1) { %>,<% } %>
78
121
  <% } -%>
79
122
  });
80
123
 
81
124
  factory <%= toPascalCase(collection.name) %>.fromMap(Map<String, dynamic> map) {
82
125
  return <%= toPascalCase(collection.name) %>(
126
+ $id: map['\\$id'].toString(),
127
+ $collectionId: map['\\$collectionId'].toString(),
128
+ $databaseId: map['\\$databaseId'].toString(),
129
+ $createdAt: map['\\$createdAt'].toString(),
130
+ $updatedAt: map['\\$updatedAt'].toString(),
131
+ $permissions: List<String>.from(map['\\$permissions'] ?? []),
132
+ data: map,
83
133
  <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
84
- <%= toCamelCase(attribute.key) %>: <% if (attribute.type === 'string' || attribute.type === 'email' || attribute.type === 'datetime') { -%>
134
+ <%= strict ? toCamelCase(attribute.key) : attribute.key %>: <% if (attribute.type === 'string' || attribute.type === 'email' || attribute.type === 'datetime') { -%>
85
135
  <% if (attribute.format === 'enum') { -%>
86
136
  <% if (attribute.array) { -%>
87
137
  (map['<%= attribute.key %>'] as List<dynamic>?)?.map((e) => <%- toPascalCase(attribute.key) %>.values.firstWhere((element) => element.name == e)).toList()<% if (!attribute.required) { %> ?? []<% } -%>
@@ -130,21 +180,27 @@ map['<%= attribute.key %>'] != null ? <%- toPascalCase(attribute.relatedCollecti
130
180
 
131
181
  Map<String, dynamic> toMap() {
132
182
  return {
183
+ "\\$id": $id,
184
+ "\\$collectionId": $collectionId,
185
+ "\\$databaseId": $databaseId,
186
+ "\\$createdAt": $createdAt,
187
+ "\\$updatedAt": $updatedAt,
188
+ "\\$permissions": $permissions,
133
189
  <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
134
190
  "<%= attribute.key %>": <% if (attribute.type === 'relationship') { -%>
135
191
  <% if ((attribute.relationType === 'oneToMany' && attribute.side === 'parent') || (attribute.relationType === 'manyToOne' && attribute.side === 'child') || attribute.relationType === 'manyToMany') { -%>
136
- <%= toCamelCase(attribute.key) %><% if (!attribute.required) { %>?<% } %>.map((e) => e.toMap()).toList()<% if (!attribute.required) { %> ?? []<% } -%>
192
+ <%= strict ? toCamelCase(attribute.key) : attribute.key %><% if (!attribute.required) { %>?<% } %>.map((e) => e.toMap()).toList()<% if (!attribute.required) { %> ?? []<% } -%>
137
193
  <% } else { -%>
138
- <%= toCamelCase(attribute.key) %><% if (!attribute.required) { %>?<% } %>.toMap()<% if (!attribute.required) { %> ?? {}<% } -%>
194
+ <%= strict ? toCamelCase(attribute.key) : attribute.key %><% if (!attribute.required) { %>?<% } %>.toMap()<% if (!attribute.required) { %> ?? {}<% } -%>
139
195
  <% } -%>
140
196
  <% } else if (attribute.format === 'enum') { -%>
141
197
  <% if (attribute.array) { -%>
142
- <%= toCamelCase(attribute.key) %><% if (!attribute.required) { %>?<% } %>.map((e) => e.name).toList()<% if (!attribute.required) { %> ?? []<% } -%>
198
+ <%= strict ? toCamelCase(attribute.key) : attribute.key %><% if (!attribute.required) { %>?<% } %>.map((e) => e.name).toList()<% if (!attribute.required) { %> ?? []<% } -%>
143
199
  <% } else { -%>
144
- <%= toCamelCase(attribute.key) %><% if (!attribute.required) { %>?<% } %>.name<% if (!attribute.required) { %> ?? null<% } -%>
200
+ <%= strict ? toCamelCase(attribute.key) : attribute.key %><% if (!attribute.required) { %>?<% } %>.name<% if (!attribute.required) { %> ?? null<% } -%>
145
201
  <% } -%>
146
202
  <% } else { -%>
147
- <%= toCamelCase(attribute.key) -%>
203
+ <%= strict ? toCamelCase(attribute.key) : attribute.key -%>
148
204
  <% } -%><% if (index < collection.attributes.length - 1) { %>,<% } %>
149
205
  <% } -%>
150
206
  };
@@ -61,63 +61,63 @@ public class <%- toPascalCase(collection.name) %> {
61
61
  <% for (const attribute of collection.attributes) { -%>
62
62
  <% if (attribute.format === 'enum') { -%>
63
63
 
64
- public enum <%- toPascalCase(attribute.key) %> {
64
+ public enum <%- toPascalCase(attribute.key) %> {
65
65
  <% for (const [index, element] of Object.entries(attribute.elements)) { -%>
66
- <%- toSnakeCase(element) %><%- index < attribute.elements.length - 1 ? ',' : ';' %>
66
+ <%- strict ? toSnakeCase(element) : element %><%- index < attribute.elements.length - 1 ? ',' : ';' %>
67
67
  <% } -%>
68
- }
68
+ }
69
69
 
70
70
  <% } -%>
71
71
  <% } -%>
72
72
  <% for (const attribute of collection.attributes) { -%>
73
- private <%- getType(attribute) %> <%- toCamelCase(attribute.key) %>;
73
+ private <%- getType(attribute) %> <%- strict ? toCamelCase(attribute.key) : attribute.key %>;
74
74
  <% } -%>
75
75
 
76
- public <%- toPascalCase(collection.name) %>() {
77
- }
76
+ public <%- toPascalCase(collection.name) %>() {
77
+ }
78
78
 
79
- public <%- toPascalCase(collection.name) %>(
79
+ public <%- toPascalCase(collection.name) %>(
80
80
  <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
81
- <%- getType(attribute) %> <%= toCamelCase(attribute.key) %><%- index < collection.attributes.length - 1 ? ',' : '' %>
81
+ <%- getType(attribute) %> <%= strict ? toCamelCase(attribute.key) : attribute.key %><%- index < collection.attributes.length - 1 ? ',' : '' %>
82
82
  <% } -%>
83
- ) {
83
+ ) {
84
84
  <% for (const attribute of collection.attributes) { -%>
85
- this.<%= toCamelCase(attribute.key) %> = <%= toCamelCase(attribute.key) %>;
85
+ this.<%= strict ? toCamelCase(attribute.key) : attribute.key %> = <%= strict ? toCamelCase(attribute.key) : attribute.key %>;
86
86
  <% } -%>
87
- }
87
+ }
88
88
 
89
89
  <% for (const attribute of collection.attributes) { -%>
90
- public <%- getType(attribute) %> get<%- toPascalCase(attribute.key) %>() {
91
- return <%= toCamelCase(attribute.key) %>;
92
- }
90
+ public <%- getType(attribute) %> get<%- toPascalCase(attribute.key) %>() {
91
+ return <%= strict ? toCamelCase(attribute.key) : attribute.key %>;
92
+ }
93
93
 
94
- public void set<%- toPascalCase(attribute.key) %>(<%- getType(attribute) %> <%= toCamelCase(attribute.key) %>) {
95
- this.<%= toCamelCase(attribute.key) %> = <%= toCamelCase(attribute.key) %>;
96
- }
94
+ public void set<%- toPascalCase(attribute.key) %>(<%- getType(attribute) %> <%= strict ? toCamelCase(attribute.key) : attribute.key %>) {
95
+ this.<%= strict ? toCamelCase(attribute.key) : attribute.key %> = <%= strict ? toCamelCase(attribute.key) : attribute.key %>;
96
+ }
97
97
 
98
98
  <% } -%>
99
- @Override
100
- public boolean equals(Object obj) {
101
- if (this == obj) return true;
102
- if (obj == null || getClass() != obj.getClass()) return false;
103
- <%- toPascalCase(collection.name) %> that = (<%- toPascalCase(collection.name) %>) obj;
104
- return <% collection.attributes.forEach((attr, index) => { %>Objects.equals(<%= toCamelCase(attr.key) %>, that.<%= toCamelCase(attr.key) %>)<% if (index < collection.attributes.length - 1) { %> &&
105
- <% } }); %>;
106
- }
99
+ @Override
100
+ public boolean equals(Object obj) {
101
+ if (this == obj) return true;
102
+ if (obj == null || getClass() != obj.getClass()) return false;
103
+ <%- toPascalCase(collection.name) %> that = (<%- toPascalCase(collection.name) %>) obj;
104
+ return <% collection.attributes.forEach((attr, index) => { %>Objects.equals(<%= toCamelCase(attr.key) %>, that.<%= toCamelCase(attr.key) %>)<% if (index < collection.attributes.length - 1) { %> &&
105
+ <% } }); %>;
106
+ }
107
107
 
108
- @Override
109
- public int hashCode() {
110
- return Objects.hash(<%= collection.attributes.map(attr => toCamelCase(attr.key)).join(', ') %>);
111
- }
108
+ @Override
109
+ public int hashCode() {
110
+ return Objects.hash(<%= collection.attributes.map(attr => toCamelCase(attr.key)).join(', ') %>);
111
+ }
112
112
 
113
- @Override
114
- public String toString() {
115
- return "<%- toPascalCase(collection.name) %>{" +
116
- <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
117
- "<%= toCamelCase(attribute.key) %>=" + <%= toCamelCase(attribute.key) %> +
113
+ @Override
114
+ public String toString() {
115
+ return "<%- toPascalCase(collection.name) %>{" +
116
+ <% for (const attribute of collection.attributes) { -%>
117
+ "<%= strict ? toCamelCase(attribute.key) : attribute.key %>=" + <%= strict ? toCamelCase(attribute.key) : attribute.key %> +
118
118
  <% } -%>
119
- '}';
120
- }
119
+ '}';
120
+ }
121
121
  }
122
122
  `;
123
123
  }
@@ -16,7 +16,7 @@ class JavaScript extends LanguageMeta {
16
16
  case AttributeType.URL:
17
17
  type = "string";
18
18
  if (attribute.format === AttributeType.ENUM) {
19
- type = `"${attribute.elements.join('"|"')}"`;
19
+ type = LanguageMeta.toPascalCase(attribute.key);
20
20
  }
21
21
  break;
22
22
  case AttributeType.INTEGER:
@@ -31,7 +31,7 @@ class JavaScript extends LanguageMeta {
31
31
  case AttributeType.RELATIONSHIP:
32
32
  type = LanguageMeta.toPascalCase(attribute.relatedCollection);
33
33
  if ((attribute.relationType === 'oneToMany' && attribute.side === 'parent') || (attribute.relationType === 'manyToOne' && attribute.side === 'child') || attribute.relationType === 'manyToMany') {
34
- type = `Array<${type}>`;
34
+ type = `${type}[]`;
35
35
  }
36
36
  break;
37
37
  default:
@@ -65,21 +65,32 @@ class JavaScript extends LanguageMeta {
65
65
  }
66
66
 
67
67
  getTemplate() {
68
- return `/**
68
+ return `
69
+ // This file is auto-generated by the Appwrite CLI.
70
+ // You can regenerate it by running \`appwrite types -l js ${this.getCurrentDirectory()}\`.
71
+
72
+ /**
69
73
  * @typedef {import('${this._getAppwriteDependency()}').Models.Document} Document
70
74
  */
71
75
 
76
+ <% for (const collection of collections) { -%>
77
+ <% for (const attribute of collection.attributes) { -%>
78
+ <% if (attribute.format === 'enum') { -%>
72
79
  /**
73
- * This file is auto-generated by the Appwrite CLI.
74
- * You can regenerate it by running \`appwrite types -l js ${this.getCurrentDirectory()}\`.
80
+ * @typedef {"<%- attribute.elements.join('"|"') %>"} <%- toPascalCase(attribute.key) %>
75
81
  */
76
- <% for (const collection of collections) { %>
77
- /**
78
- * @typedef {Object} <%- toPascalCase(collection.name) %>
82
+
83
+ <% } -%>
84
+ <% } -%>
85
+ <% } -%>
86
+ <% for (const collection of collections) { %>/**
87
+ * @typedef {Document & {
79
88
  <% for (const attribute of collection.attributes) { -%>
80
- * @property {<%- getType(attribute) %>} <%- toCamelCase(attribute.key) %>
89
+ * <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- getType(attribute) %>;
81
90
  <% } -%>
91
+ * }} <%- toPascalCase(collection.name) %>
82
92
  */
93
+
83
94
  <% } %>`;
84
95
  }
85
96
 
@@ -63,7 +63,7 @@ import <%- toPascalCase(attribute.relatedCollection) %>
63
63
  <% if (attribute.format === 'enum') { -%>
64
64
  enum class <%- toPascalCase(attribute.key) %> {
65
65
  <% for (const [index, element] of Object.entries(attribute.elements)) { -%>
66
- <%- toUpperSnakeCase(element) %><%- index < attribute.elements.length - 1 ? ',' : '' %>
66
+ <%- strict ? toUpperSnakeCase(element) : element %><%- index < attribute.elements.length - 1 ? ',' : '' %>
67
67
  <% } -%>
68
68
  }
69
69
 
@@ -71,7 +71,7 @@ enum class <%- toPascalCase(attribute.key) %> {
71
71
  <% } -%>
72
72
  data class <%- toPascalCase(collection.name) %>(
73
73
  <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
74
- val <%- toCamelCase(attribute.key) %>: <%- getType(attribute) %><% if (index < collection.attributes.length - 1) { %>,<% } %>
74
+ val <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- getType(attribute) %><% if (index < collection.attributes.length - 1) { %>,<% } %>
75
75
  <% } -%>
76
76
  )`;
77
77
  }
@@ -49,10 +49,8 @@ class PHP extends LanguageMeta {
49
49
  return `<?php
50
50
  namespace Appwrite\\Models;
51
51
 
52
- /**
53
- * This file is auto-generated by the Appwrite CLI.
54
- * You can regenerate it by running \`appwrite types -l php ${this.getCurrentDirectory()}\`.
55
- */
52
+ // This file is auto-generated by the Appwrite CLI.
53
+ // You can regenerate it by running \`appwrite types -l php ${this.getCurrentDirectory()}\`.
56
54
 
57
55
  <% for (const attribute of collection.attributes) { -%>
58
56
  <% if (attribute.type === 'relationship' && !(attribute.relationType === 'manyToMany') && !(attribute.relationType === 'oneToMany' && attribute.side === 'parent')) { -%>
@@ -64,7 +62,7 @@ use Appwrite\\Models\\<%- toPascalCase(attribute.relatedCollection) %>;
64
62
  <% if (attribute.format === 'enum') { -%>
65
63
  enum <%- toPascalCase(attribute.key) %>: string {
66
64
  <% for (const [index, element] of Object.entries(attribute.elements)) { -%>
67
- case <%- toUpperSnakeCase(element) %> = '<%- element %>';
65
+ case <%- strict ? toUpperSnakeCase(element) : element %> = '<%- element %>';
68
66
  <% } -%>
69
67
  }
70
68
 
@@ -72,31 +70,33 @@ enum <%- toPascalCase(attribute.key) %>: string {
72
70
  <% } -%>
73
71
  class <%- toPascalCase(collection.name) %> {
74
72
  <% for (const attribute of collection.attributes ){ -%>
75
- private <%- getType(attribute) %> $<%- toCamelCase(attribute.key) %>;
73
+ private <%- getType(attribute) %> $<%- strict ? toCamelCase(attribute.key) : attribute.key %>;
76
74
  <% } -%>
77
75
 
78
76
  public function __construct(
79
77
  <% for (const attribute of collection.attributes ){ -%>
80
78
  <% if (attribute.required) { -%>
81
- <%- getType(attribute).replace('|null', '') %> $<%- toCamelCase(attribute.key) %><% if (collection.attributes.indexOf(attribute) < collection.attributes.length - 1) { %>,<% } %>
79
+ <%- getType(attribute).replace('|null', '') %> $<%- strict ? toCamelCase(attribute.key) : attribute.key %><% if (collection.attributes.indexOf(attribute) < collection.attributes.length - 1) { %>,<% } %>
82
80
  <% } else { -%>
83
- ?<%- getType(attribute).replace('|null', '') %> $<%- toCamelCase(attribute.key) %> = null<% if (collection.attributes.indexOf(attribute) < collection.attributes.length - 1) { %>,<% } %>
81
+ ?<%- getType(attribute).replace('|null', '') %> $<%- strict ? toCamelCase(attribute.key) : attribute.key %> = null<% if (collection.attributes.indexOf(attribute) < collection.attributes.length - 1) { %>,<% } %>
84
82
  <% } -%>
85
83
  <% } -%>
86
84
  ) {
87
85
  <% for (const attribute of collection.attributes ){ -%>
88
- $this-><%- toCamelCase(attribute.key) %> = $<%- toCamelCase(attribute.key) %>;
86
+ $this-><%- strict ? toCamelCase(attribute.key) : attribute.key %> = $<%- strict ? toCamelCase(attribute.key) : attribute.key %>;
89
87
  <% } -%>
90
88
  }
91
89
 
92
- <% for (const attribute of collection.attributes ){ -%>
90
+ <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
93
91
  public function get<%- toPascalCase(attribute.key) %>(): <%- getType(attribute) %> {
94
- return $this-><%- toCamelCase(attribute.key) %>;
92
+ return $this-><%- strict ? toCamelCase(attribute.key) : attribute.key %>;
95
93
  }
96
94
 
97
- public function set<%- toPascalCase(attribute.key) %>(<%- getType(attribute) %> $<%- toCamelCase(attribute.key) %>): void {
98
- $this-><%- toCamelCase(attribute.key) %> = $<%- toCamelCase(attribute.key) %>;
95
+ public function set<%- toPascalCase(attribute.key) %>(<%- getType(attribute) %> $<%- strict ? toCamelCase(attribute.key) : attribute.key %>): void {
96
+ $this-><%- strict ? toCamelCase(attribute.key) : attribute.key %> = $<%- strict ? toCamelCase(attribute.key) : attribute.key %>;
99
97
  }
98
+ <% if (index < collection.attributes.length - 1) { %>
99
+ <% } -%>
100
100
  <% } -%>
101
101
  }`;
102
102
  }
@@ -55,7 +55,7 @@ class Swift extends LanguageMeta {
55
55
  <% if (attribute.format === 'enum') { -%>
56
56
  public enum <%- toPascalCase(attribute.key) %>: String, Codable, CaseIterable {
57
57
  <% for (const [index, element] of Object.entries(attribute.elements)) { -%>
58
- case <%- toSnakeCase(element) %> = "<%- element %>"
58
+ case <%- strict ? toCamelCase(element) : element %> = "<%- element %>"
59
59
  <% } -%>
60
60
  }
61
61
 
@@ -63,101 +63,101 @@ public enum <%- toPascalCase(attribute.key) %>: String, Codable, CaseIterable {
63
63
  <% } -%>
64
64
  public class <%- toPascalCase(collection.name) %>: Codable {
65
65
  <% for (const attribute of collection.attributes) { -%>
66
- public let <%- toCamelCase(attribute.key) %>: <%- getType(attribute) %>
66
+ public let <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- getType(attribute) %>
67
67
  <% } %>
68
- enum CodingKeys: String, CodingKey {
68
+ enum CodingKeys: String, CodingKey {
69
69
  <% for (const attribute of collection.attributes) { -%>
70
- case <%- toCamelCase(attribute.key) %> = "<%- attribute.key %>"
70
+ case <%- strict ? toCamelCase(attribute.key) : attribute.key %> = "<%- attribute.key %>"
71
71
  <% } -%>
72
- }
72
+ }
73
73
 
74
- init(
75
- <% for (const attribute of collection.attributes) { -%>
76
- <%- toCamelCase(attribute.key) %>: <%- getType(attribute) %><% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
74
+ init(
75
+ <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
76
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- getType(attribute) %><% if (index < collection.attributes.length - 1) { %>,<% } %>
77
77
  <% } -%>
78
- ) {
78
+ ) {
79
79
  <% for (const attribute of collection.attributes) { -%>
80
- self.<%- toCamelCase(attribute.key) %> = <%- toCamelCase(attribute.key) %>
80
+ self.<%- strict ? toCamelCase(attribute.key) : attribute.key %> = <%- strict ? toCamelCase(attribute.key) : attribute.key %>
81
81
  <% } -%>
82
- }
82
+ }
83
83
 
84
- public required init(from decoder: Decoder) throws {
85
- let container = try decoder.container(keyedBy: CodingKeys.self)
84
+ public required init(from decoder: Decoder) throws {
85
+ let container = try decoder.container(keyedBy: CodingKeys.self)
86
86
 
87
87
  <% for (const attribute of collection.attributes) { -%>
88
88
  <% if (attribute.required) { -%>
89
- self.<%- toCamelCase(attribute.key) %> = try container.decode(<%- getType(attribute).replace('?', '') %>.self, forKey: .<%- toCamelCase(attribute.key) %>)
89
+ self.<%- strict ? toCamelCase(attribute.key) : attribute.key %> = try container.decode(<%- getType(attribute).replace('?', '') %>.self, forKey: .<%- strict ? toCamelCase(attribute.key) : attribute.key %>)
90
90
  <% } else { -%>
91
- self.<%- toCamelCase(attribute.key) %> = try container.decodeIfPresent(<%- getType(attribute).replace('?', '') %>.self, forKey: .<%- toCamelCase(attribute.key) %>)
91
+ self.<%- strict ? toCamelCase(attribute.key) : attribute.key %> = try container.decodeIfPresent(<%- getType(attribute).replace('?', '') %>.self, forKey: .<%- strict ? toCamelCase(attribute.key) : attribute.key %>)
92
92
  <% } -%>
93
93
  <% } -%>
94
- }
94
+ }
95
95
 
96
- public func encode(to encoder: Encoder) throws {
97
- var container = encoder.container(keyedBy: CodingKeys.self)
96
+ public func encode(to encoder: Encoder) throws {
97
+ var container = encoder.container(keyedBy: CodingKeys.self)
98
98
 
99
99
  <% for (const attribute of collection.attributes) { -%>
100
100
  <% if (attribute.required) { -%>
101
- try container.encode(<%- toCamelCase(attribute.key) %>, forKey: .<%- toCamelCase(attribute.key) %>)
101
+ try container.encode(<%- strict ? toCamelCase(attribute.key) : attribute.key %>, forKey: .<%- strict ? toCamelCase(attribute.key) : attribute.key %>)
102
102
  <% } else { -%>
103
- try container.encodeIfPresent(<%- toCamelCase(attribute.key) %>, forKey: .<%- toCamelCase(attribute.key) %>)
103
+ try container.encodeIfPresent(<%- strict ? toCamelCase(attribute.key) : attribute.key %>, forKey: .<%- strict ? toCamelCase(attribute.key) : attribute.key %>)
104
104
  <% } -%>
105
105
  <% } -%>
106
- }
106
+ }
107
107
 
108
- public func toMap() -> [String: Any] {
109
- return [
110
- <% for (const attribute of collection.attributes) { -%>
108
+ public func toMap() -> [String: Any] {
109
+ return [
110
+ <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
111
111
  <% if (attribute.type === 'relationship') { -%>
112
- "<%- attribute.key %>": <%- toCamelCase(attribute.key) %> as Any<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
112
+ "<%- attribute.key %>": <%- strict ? toCamelCase(attribute.key) : attribute.key %> as Any<% if (index < collection.attributes.length - 1) { %>,<% } %>
113
113
  <% } else if (attribute.array && attribute.type !== 'string' && attribute.type !== 'integer' && attribute.type !== 'float' && attribute.type !== 'boolean') { -%>
114
- "<%- attribute.key %>": <%- toCamelCase(attribute.key) %>?.map { $0.toMap() } as Any<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
114
+ "<%- attribute.key %>": <%- strict ? toCamelCase(attribute.key) : attribute.key %>?.map { $0.toMap() } as Any<% if (index < collection.attributes.length - 1) { %>,<% } %>
115
115
  <% } else { -%>
116
- "<%- attribute.key %>": <%- toCamelCase(attribute.key) %> as Any<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
116
+ "<%- attribute.key %>": <%- strict ? toCamelCase(attribute.key) : attribute.key %> as Any<% if (index < collection.attributes.length - 1) { %>,<% } %>
117
117
  <% } -%>
118
118
  <% } -%>
119
- ]
120
- }
119
+ ]
120
+ }
121
121
 
122
- public static func from(map: [String: Any]) -> <%- toPascalCase(collection.name) %> {
123
- return <%- toPascalCase(collection.name) %>(
124
- <% for (const attribute of collection.attributes) { -%>
122
+ public static func from(map: [String: Any]) -> <%- toPascalCase(collection.name) %> {
123
+ return <%- toPascalCase(collection.name) %>(
124
+ <% for (const [index, attribute] of Object.entries(collection.attributes)) { -%>
125
125
  <% if (attribute.type === 'relationship') { -%>
126
126
  <% if ((attribute.relationType === 'oneToMany' && attribute.side === 'parent') || (attribute.relationType === 'manyToOne' && attribute.side === 'child') || attribute.relationType === 'manyToMany') { -%>
127
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [<%- toPascalCase(attribute.relatedCollection) %>]<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
127
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [<%- toPascalCase(attribute.relatedCollection) %>]<% if (index < collection.attributes.length - 1) { %>,<% } %>
128
128
  <% } else { -%>
129
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> <%- toPascalCase(attribute.relatedCollection) %><% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
129
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> <%- toPascalCase(attribute.relatedCollection) %><% if (index < collection.attributes.length - 1) { %>,<% } %>
130
130
  <% } -%>
131
131
  <% } else if (attribute.array) { -%>
132
132
  <% if (attribute.type === 'string') { -%>
133
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [String]<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
133
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [String]<% if (index < collection.attributes.length - 1) { %>,<% } %>
134
134
  <% } else if (attribute.type === 'integer') { -%>
135
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [Int]<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
135
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [Int]<% if (index < collection.attributes.length - 1) { %>,<% } %>
136
136
  <% } else if (attribute.type === 'float') { -%>
137
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [Double]<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
137
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [Double]<% if (index < collection.attributes.length - 1) { %>,<% } %>
138
138
  <% } else if (attribute.type === 'boolean') { -%>
139
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [Bool]<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
139
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [Bool]<% if (index < collection.attributes.length - 1) { %>,<% } %>
140
140
  <% } else { -%>
141
- <%- toCamelCase(attribute.key) %>: (map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [[String: Any]])<% if (!attribute.required) { %>?<% } %>.map { <%- toPascalCase(attribute.type) %>.from(map: $0) }<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
141
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: (map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> [[String: Any]])<% if (!attribute.required) { %>?<% } %>.map { <%- toPascalCase(attribute.type) %>.from(map: $0) }<% if (index < collection.attributes.length - 1) { %>,<% } %>
142
142
  <% } -%>
143
143
  <% } else { -%>
144
144
  <% if ((attribute.type === 'string' || attribute.type === 'email' || attribute.type === 'datetime') && attribute.format !== 'enum') { -%>
145
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> String<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
145
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> String<% if (index < collection.attributes.length - 1) { %>,<% } %>
146
146
  <% } else if (attribute.type === 'string' && attribute.format === 'enum') { -%>
147
- <%- toCamelCase(attribute.key) %>: <%- toPascalCase(attribute.key) %>(rawValue: map["<%- attribute.key %>"] as! String)!<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
147
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- toPascalCase(attribute.key) %>(rawValue: map["<%- attribute.key %>"] as! String)!<% if (index < collection.attributes.length - 1) { %>,<% } %>
148
148
  <% } else if (attribute.type === 'integer') { -%>
149
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> Int<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
149
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> Int<% if (index < collection.attributes.length - 1) { %>,<% } %>
150
150
  <% } else if (attribute.type === 'float') { -%>
151
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> Double<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
151
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> Double<% if (index < collection.attributes.length - 1) { %>,<% } %>
152
152
  <% } else if (attribute.type === 'boolean') { -%>
153
- <%- toCamelCase(attribute.key) %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> Bool<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
153
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: map["<%- attribute.key %>"] as<% if (!attribute.required) { %>?<% } else { %>!<% } %> Bool<% if (index < collection.attributes.length - 1) { %>,<% } %>
154
154
  <% } else { -%>
155
- <%- toCamelCase(attribute.key) %>: <%- toPascalCase(attribute.type) %>.from(map: map["<%- attribute.key %>"] as! [String: Any])<% if (attribute !== collection.attributes[collection.attributes.length - 1]) { %>,<% } %>
155
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- toPascalCase(attribute.type) %>.from(map: map["<%- attribute.key %>"] as! [String: Any])<% if (index < collection.attributes.length - 1) { %>,<% } %>
156
156
  <% } -%>
157
157
  <% } -%>
158
158
  <% } -%>
159
- )
160
- }
159
+ )
160
+ }
161
161
  }`;
162
162
  }
163
163
 
@@ -71,10 +71,8 @@ class TypeScript extends LanguageMeta {
71
71
  getTemplate() {
72
72
  return `import { type Models } from '${this._getAppwriteDependency()}';
73
73
 
74
- /**
75
- * This file is auto-generated by the Appwrite CLI.
76
- * You can regenerate it by running \`appwrite types -l ts ${this.getCurrentDirectory()}\`.
77
- */
74
+ // This file is auto-generated by the Appwrite CLI.
75
+ // You can regenerate it by running \`appwrite types -l ts ${this.getCurrentDirectory()}\`.
78
76
 
79
77
  <% for (const collection of collections) { -%>
80
78
  <% for (const attribute of collection.attributes) { -%>
@@ -92,7 +90,7 @@ export enum <%- toPascalCase(attribute.key) %> {
92
90
  <% for (const collection of collections) { -%>
93
91
  export type <%- toPascalCase(collection.name) %> = Models.Document & {
94
92
  <% for (const attribute of collection.attributes) { -%>
95
- <%- toCamelCase(attribute.key) %>: <%- getType(attribute) %>;
93
+ <%- strict ? toCamelCase(attribute.key) : attribute.key %>: <%- getType(attribute) %>;
96
94
  <% } -%>
97
95
  }
98
96
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "appwrite-cli",
3
3
  "homepage": "https://appwrite.io/support",
4
4
  "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
5
- "version": "8.1.1",
5
+ "version": "8.2.0",
6
6
  "license": "BSD-3-Clause",
7
7
  "main": "index.js",
8
8
  "bin": {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/ScoopInstaller/Scoop/master/schema.json",
3
- "version": "8.1.1",
3
+ "version": "8.2.0",
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/8.1.1/appwrite-cli-win-x64.exe",
9
+ "url": "https://github.com/appwrite/sdk-for-cli/releases/download/8.2.0/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/8.1.1/appwrite-cli-win-arm64.exe",
18
+ "url": "https://github.com/appwrite/sdk-for-cli/releases/download/8.2.0/appwrite-cli-win-arm64.exe",
19
19
  "bin": [
20
20
  [
21
21
  "appwrite-cli-win-arm64.exe",