appwrite-cli 12.0.0 → 13.0.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 (283) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +2 -2
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +145 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/client.d.ts +89 -0
  8. package/dist/lib/client.d.ts.map +1 -0
  9. package/dist/lib/client.js +227 -0
  10. package/dist/lib/client.js.map +1 -0
  11. package/dist/lib/commands/account.d.ts +379 -0
  12. package/dist/lib/commands/account.d.ts.map +1 -0
  13. package/dist/lib/commands/account.js +1228 -0
  14. package/dist/lib/commands/account.js.map +1 -0
  15. package/dist/lib/commands/console.d.ts +20 -0
  16. package/dist/lib/commands/console.d.ts.map +1 -0
  17. package/dist/lib/commands/console.js +78 -0
  18. package/dist/lib/commands/console.js.map +1 -0
  19. package/dist/lib/commands/databases.d.ts +732 -0
  20. package/dist/lib/commands/databases.d.ts.map +1 -0
  21. package/dist/lib/commands/databases.js +2196 -0
  22. package/dist/lib/commands/databases.js.map +1 -0
  23. package/dist/lib/commands/functions.d.ts +310 -0
  24. package/dist/lib/commands/functions.d.ts.map +1 -0
  25. package/dist/lib/commands/functions.js +1100 -0
  26. package/dist/lib/commands/functions.js.map +1 -0
  27. package/dist/lib/commands/generic.d.ts +17 -0
  28. package/dist/lib/commands/generic.d.ts.map +1 -0
  29. package/dist/lib/commands/generic.js +279 -0
  30. package/dist/lib/commands/generic.js.map +1 -0
  31. package/dist/lib/commands/graphql.d.ts +19 -0
  32. package/dist/lib/commands/graphql.d.ts.map +1 -0
  33. package/dist/lib/commands/graphql.js +77 -0
  34. package/dist/lib/commands/graphql.js.map +1 -0
  35. package/dist/lib/commands/health.d.ts +153 -0
  36. package/dist/lib/commands/health.d.ts.map +1 -0
  37. package/dist/lib/commands/health.js +464 -0
  38. package/dist/lib/commands/health.js.map +1 -0
  39. package/dist/lib/commands/init.d.ts +3 -0
  40. package/dist/lib/commands/init.d.ts.map +1 -0
  41. package/dist/lib/commands/init.js +518 -0
  42. package/dist/lib/commands/init.js.map +1 -0
  43. package/dist/lib/commands/locale.d.ts +53 -0
  44. package/dist/lib/commands/locale.d.ts.map +1 -0
  45. package/dist/lib/commands/locale.js +165 -0
  46. package/dist/lib/commands/locale.js.map +1 -0
  47. package/dist/lib/commands/messaging.d.ts +588 -0
  48. package/dist/lib/commands/messaging.d.ts.map +1 -0
  49. package/dist/lib/commands/messaging.js +2042 -0
  50. package/dist/lib/commands/messaging.js.map +1 -0
  51. package/dist/lib/commands/migrations.d.ts +150 -0
  52. package/dist/lib/commands/migrations.d.ts.map +1 -0
  53. package/dist/lib/commands/migrations.js +524 -0
  54. package/dist/lib/commands/migrations.js.map +1 -0
  55. package/dist/lib/commands/organizations.d.ts +11 -0
  56. package/dist/lib/commands/organizations.d.ts.map +1 -0
  57. package/dist/lib/commands/organizations.js +31 -0
  58. package/dist/lib/commands/organizations.js.map +1 -0
  59. package/dist/lib/commands/project.d.ts +53 -0
  60. package/dist/lib/commands/project.d.ts.map +1 -0
  61. package/dist/lib/commands/project.js +176 -0
  62. package/dist/lib/commands/project.js.map +1 -0
  63. package/dist/lib/commands/projects.d.ts +516 -0
  64. package/dist/lib/commands/projects.d.ts.map +1 -0
  65. package/dist/lib/commands/projects.js +1590 -0
  66. package/dist/lib/commands/projects.js.map +1 -0
  67. package/dist/lib/commands/proxy.d.ts +71 -0
  68. package/dist/lib/commands/proxy.d.ts.map +1 -0
  69. package/dist/lib/commands/proxy.js +240 -0
  70. package/dist/lib/commands/proxy.js.map +1 -0
  71. package/dist/lib/commands/pull.d.ts +8 -0
  72. package/dist/lib/commands/pull.d.ts.map +1 -0
  73. package/dist/lib/commands/pull.js +455 -0
  74. package/dist/lib/commands/pull.js.map +1 -0
  75. package/dist/lib/commands/push.d.ts +4 -0
  76. package/dist/lib/commands/push.d.ts.map +1 -0
  77. package/dist/lib/commands/push.js +2154 -0
  78. package/dist/lib/commands/push.js.map +1 -0
  79. package/dist/lib/commands/run.d.ts +3 -0
  80. package/dist/lib/commands/run.d.ts.map +1 -0
  81. package/dist/lib/commands/run.js +287 -0
  82. package/dist/lib/commands/run.js.map +1 -0
  83. package/dist/lib/commands/sites.d.ts +296 -0
  84. package/dist/lib/commands/sites.d.ts.map +1 -0
  85. package/dist/lib/commands/sites.js +1046 -0
  86. package/dist/lib/commands/sites.js.map +1 -0
  87. package/dist/lib/commands/storage.d.ts +170 -0
  88. package/dist/lib/commands/storage.d.ts.map +1 -0
  89. package/dist/lib/commands/storage.js +651 -0
  90. package/dist/lib/commands/storage.js.map +1 -0
  91. package/dist/lib/commands/tables-db.d.ts +728 -0
  92. package/dist/lib/commands/tables-db.d.ts.map +1 -0
  93. package/dist/lib/commands/tables-db.js +2198 -0
  94. package/dist/lib/commands/tables-db.js.map +1 -0
  95. package/dist/lib/commands/teams.d.ts +129 -0
  96. package/dist/lib/commands/teams.d.ts.map +1 -0
  97. package/dist/lib/commands/teams.js +403 -0
  98. package/dist/lib/commands/teams.js.map +1 -0
  99. package/dist/lib/commands/tokens.d.ts +48 -0
  100. package/dist/lib/commands/tokens.d.ts.map +1 -0
  101. package/dist/lib/commands/tokens.js +156 -0
  102. package/dist/lib/commands/tokens.js.map +1 -0
  103. package/dist/lib/commands/types.d.ts +3 -0
  104. package/dist/lib/commands/types.d.ts.map +1 -0
  105. package/dist/lib/commands/types.js +155 -0
  106. package/dist/lib/commands/types.js.map +1 -0
  107. package/dist/lib/commands/update.d.ts +3 -0
  108. package/dist/lib/commands/update.d.ts.map +1 -0
  109. package/dist/lib/commands/update.js +202 -0
  110. package/dist/lib/commands/update.js.map +1 -0
  111. package/dist/lib/commands/users.d.ts +382 -0
  112. package/dist/lib/commands/users.d.ts.map +1 -0
  113. package/dist/lib/commands/users.js +1195 -0
  114. package/dist/lib/commands/users.js.map +1 -0
  115. package/dist/lib/commands/vcs.d.ts +92 -0
  116. package/dist/lib/commands/vcs.d.ts.map +1 -0
  117. package/dist/lib/commands/vcs.js +276 -0
  118. package/dist/lib/commands/vcs.js.map +1 -0
  119. package/dist/lib/config.d.ts +118 -0
  120. package/dist/lib/config.d.ts.map +1 -0
  121. package/{lib → dist/lib}/config.js +204 -325
  122. package/dist/lib/config.js.map +1 -0
  123. package/dist/lib/emulation/docker.d.ts +15 -0
  124. package/dist/lib/emulation/docker.d.ts.map +1 -0
  125. package/dist/lib/emulation/docker.js +220 -0
  126. package/dist/lib/emulation/docker.js.map +1 -0
  127. package/dist/lib/emulation/utils.d.ts +29 -0
  128. package/dist/lib/emulation/utils.d.ts.map +1 -0
  129. package/dist/lib/emulation/utils.js +168 -0
  130. package/dist/lib/emulation/utils.js.map +1 -0
  131. package/dist/lib/exception.d.ts +8 -0
  132. package/dist/lib/exception.d.ts.map +1 -0
  133. package/dist/lib/exception.js +16 -0
  134. package/dist/lib/exception.js.map +1 -0
  135. package/dist/lib/id.d.ts +7 -0
  136. package/dist/lib/id.d.ts.map +1 -0
  137. package/dist/lib/id.js +32 -0
  138. package/dist/lib/id.js.map +1 -0
  139. package/dist/lib/paginate.d.ts +10 -0
  140. package/dist/lib/paginate.d.ts.map +1 -0
  141. package/{lib → dist/lib}/paginate.js +9 -15
  142. package/dist/lib/paginate.js.map +1 -0
  143. package/dist/lib/parser.d.ts +18 -0
  144. package/dist/lib/parser.d.ts.map +1 -0
  145. package/dist/lib/parser.js +237 -0
  146. package/dist/lib/parser.js.map +1 -0
  147. package/dist/lib/questions.d.ts +59 -0
  148. package/dist/lib/questions.d.ts.map +1 -0
  149. package/dist/lib/questions.js +995 -0
  150. package/dist/lib/questions.js.map +1 -0
  151. package/dist/lib/sdks.d.ts +4 -0
  152. package/dist/lib/sdks.d.ts.map +1 -0
  153. package/dist/lib/sdks.js +51 -0
  154. package/dist/lib/sdks.js.map +1 -0
  155. package/dist/lib/spinner.d.ts +28 -0
  156. package/dist/lib/spinner.d.ts.map +1 -0
  157. package/{lib → dist/lib}/spinner.js +34 -45
  158. package/dist/lib/spinner.js.map +1 -0
  159. package/dist/lib/type-generation/attribute.d.ts +17 -0
  160. package/dist/lib/type-generation/attribute.d.ts.map +1 -0
  161. package/dist/lib/type-generation/attribute.js +19 -0
  162. package/dist/lib/type-generation/attribute.js.map +1 -0
  163. package/dist/lib/type-generation/languages/csharp.d.ts +7 -0
  164. package/dist/lib/type-generation/languages/csharp.d.ts.map +1 -0
  165. package/dist/lib/type-generation/languages/csharp.js +180 -0
  166. package/dist/lib/type-generation/languages/csharp.js.map +1 -0
  167. package/dist/lib/type-generation/languages/dart.d.ts +8 -0
  168. package/dist/lib/type-generation/languages/dart.d.ts.map +1 -0
  169. package/dist/lib/type-generation/languages/dart.js +197 -0
  170. package/dist/lib/type-generation/languages/dart.js.map +1 -0
  171. package/dist/lib/type-generation/languages/java.d.ts +7 -0
  172. package/dist/lib/type-generation/languages/java.d.ts.map +1 -0
  173. package/dist/lib/type-generation/languages/java.js +140 -0
  174. package/dist/lib/type-generation/languages/java.js.map +1 -0
  175. package/dist/lib/type-generation/languages/javascript.d.ts +9 -0
  176. package/dist/lib/type-generation/languages/javascript.d.ts.map +1 -0
  177. package/dist/lib/type-generation/languages/javascript.js +108 -0
  178. package/dist/lib/type-generation/languages/javascript.js.map +1 -0
  179. package/dist/lib/type-generation/languages/kotlin.d.ts +7 -0
  180. package/dist/lib/type-generation/languages/kotlin.d.ts.map +1 -0
  181. package/dist/lib/type-generation/languages/kotlin.js +95 -0
  182. package/dist/lib/type-generation/languages/kotlin.js.map +1 -0
  183. package/dist/lib/type-generation/languages/language.d.ts +43 -0
  184. package/dist/lib/type-generation/languages/language.d.ts.map +1 -0
  185. package/dist/lib/type-generation/languages/language.js +82 -0
  186. package/dist/lib/type-generation/languages/language.js.map +1 -0
  187. package/dist/lib/type-generation/languages/php.d.ts +7 -0
  188. package/dist/lib/type-generation/languages/php.d.ts.map +1 -0
  189. package/dist/lib/type-generation/languages/php.js +116 -0
  190. package/dist/lib/type-generation/languages/php.js.map +1 -0
  191. package/dist/lib/type-generation/languages/swift.d.ts +7 -0
  192. package/dist/lib/type-generation/languages/swift.d.ts.map +1 -0
  193. package/dist/lib/type-generation/languages/swift.js +179 -0
  194. package/dist/lib/type-generation/languages/swift.js.map +1 -0
  195. package/dist/lib/type-generation/languages/typescript.d.ts +9 -0
  196. package/dist/lib/type-generation/languages/typescript.d.ts.map +1 -0
  197. package/dist/lib/type-generation/languages/typescript.js +112 -0
  198. package/dist/lib/type-generation/languages/typescript.js.map +1 -0
  199. package/dist/lib/types.d.ts +133 -0
  200. package/dist/lib/types.d.ts.map +1 -0
  201. package/dist/lib/types.js +3 -0
  202. package/dist/lib/types.js.map +1 -0
  203. package/dist/lib/utils.d.ts +15 -0
  204. package/dist/lib/utils.d.ts.map +1 -0
  205. package/{lib → dist/lib}/utils.js +74 -120
  206. package/dist/lib/utils.js.map +1 -0
  207. package/dist/lib/validations.d.ts +2 -0
  208. package/dist/lib/validations.d.ts.map +1 -0
  209. package/dist/lib/validations.js +20 -0
  210. package/dist/lib/validations.js.map +1 -0
  211. package/docs/examples/databases/upsert-document.md +1 -2
  212. package/index.ts +152 -0
  213. package/install.ps1 +2 -5
  214. package/install.sh +1 -2
  215. package/lib/client.ts +259 -0
  216. package/lib/commands/{account.js → account.ts} +410 -664
  217. package/lib/commands/console.ts +112 -0
  218. package/lib/commands/{databases.js → databases.ts} +818 -1136
  219. package/lib/commands/{functions.js → functions.ts} +381 -526
  220. package/lib/commands/{generic.js → generic.ts} +47 -39
  221. package/lib/commands/graphql.ts +110 -0
  222. package/lib/commands/{health.js → health.ts} +168 -284
  223. package/lib/commands/{init.js → init.ts} +68 -66
  224. package/lib/commands/{locale.js → locale.ts} +75 -121
  225. package/lib/commands/{messaging.js → messaging.ts} +699 -937
  226. package/lib/commands/{migrations.js → migrations.ts} +182 -258
  227. package/lib/commands/organizations.ts +46 -0
  228. package/lib/commands/{project.js → project.ts} +75 -111
  229. package/lib/commands/{projects.js → projects.ts} +587 -843
  230. package/lib/commands/{proxy.js → proxy.ts} +94 -140
  231. package/lib/commands/{pull.js → pull.ts} +54 -44
  232. package/lib/commands/{push.js → push.ts} +235 -191
  233. package/lib/commands/{run.js → run.ts} +61 -55
  234. package/lib/commands/{sites.js → sites.ts} +364 -504
  235. package/lib/commands/{storage.js → storage.ts} +216 -292
  236. package/lib/commands/{tables-db.js → tables-db.ts} +817 -1126
  237. package/lib/commands/{teams.js → teams.ts} +162 -236
  238. package/lib/commands/{tokens.js → tokens.ts} +70 -99
  239. package/lib/commands/{types.js → types.ts} +37 -35
  240. package/lib/commands/{update.js → update.ts} +25 -27
  241. package/lib/commands/{users.js → users.ts} +426 -644
  242. package/lib/commands/{vcs.js → vcs.ts} +122 -173
  243. package/lib/config.ts +854 -0
  244. package/lib/emulation/{docker.js → docker.ts} +39 -38
  245. package/lib/emulation/utils.ts +193 -0
  246. package/lib/exception.ts +20 -0
  247. package/lib/{id.js → id.ts} +5 -5
  248. package/lib/paginate.ts +63 -0
  249. package/lib/parser.ts +238 -0
  250. package/lib/{questions.js → questions.ts} +148 -156
  251. package/lib/sdks.ts +55 -0
  252. package/lib/spinner.ts +118 -0
  253. package/lib/type-generation/attribute.ts +17 -0
  254. package/lib/type-generation/languages/{csharp.js → csharp.ts} +59 -48
  255. package/lib/type-generation/languages/{dart.js → dart.ts} +91 -80
  256. package/lib/type-generation/languages/{java.js → java.ts} +58 -47
  257. package/lib/type-generation/languages/javascript.ts +111 -0
  258. package/lib/type-generation/languages/kotlin.ts +96 -0
  259. package/lib/type-generation/languages/language.ts +119 -0
  260. package/lib/type-generation/languages/{php.js → php.ts} +55 -48
  261. package/lib/type-generation/languages/{swift.js → swift.ts} +59 -48
  262. package/lib/type-generation/languages/typescript.ts +116 -0
  263. package/lib/types.ts +150 -0
  264. package/lib/utils.ts +322 -0
  265. package/lib/validations.ts +17 -0
  266. package/package.json +21 -12
  267. package/scoop/appwrite.config.json +3 -3
  268. package/tsconfig.json +30 -0
  269. package/index.js +0 -147
  270. package/lib/client.js +0 -254
  271. package/lib/commands/console.js +0 -127
  272. package/lib/commands/graphql.js +0 -126
  273. package/lib/commands/organizations.js +0 -48
  274. package/lib/emulation/utils.js +0 -186
  275. package/lib/exception.js +0 -9
  276. package/lib/parser.js +0 -250
  277. package/lib/sdks.js +0 -60
  278. package/lib/type-generation/attribute.js +0 -16
  279. package/lib/type-generation/languages/javascript.js +0 -102
  280. package/lib/type-generation/languages/kotlin.js +0 -85
  281. package/lib/type-generation/languages/language.js +0 -125
  282. package/lib/type-generation/languages/typescript.js +0 -107
  283. package/lib/validations.js +0 -17
package/lib/sdks.ts ADDED
@@ -0,0 +1,55 @@
1
+ import Client = require('./client');
2
+ import { globalConfig, localConfig } from './config';
3
+
4
+ export const sdkForConsole = async (requiresAuth: boolean = true): Promise<Client> => {
5
+ const client = new Client();
6
+ const endpoint = globalConfig.getEndpoint();
7
+ const cookie = globalConfig.getCookie();
8
+ const selfSigned = globalConfig.getSelfSigned();
9
+
10
+ if (requiresAuth && cookie === '') {
11
+ throw new Error('Session not found. Please run `appwrite login` to create a session');
12
+ }
13
+
14
+ client
15
+ .setEndpoint(endpoint)
16
+ .setCookie(cookie)
17
+ .setProject('console')
18
+ .setSelfSigned(selfSigned)
19
+ .setLocale('en-US');
20
+
21
+ return client;
22
+ };
23
+
24
+ export const sdkForProject = async (): Promise<Client> => {
25
+ const client = new Client();
26
+ const endpoint = localConfig.getEndpoint() || globalConfig.getEndpoint();
27
+ const project = localConfig.getProject().projectId ? localConfig.getProject().projectId : globalConfig.getProject();
28
+ const key = globalConfig.getKey();
29
+ const cookie = globalConfig.getCookie();
30
+ const selfSigned = globalConfig.getSelfSigned();
31
+
32
+ if (!project) {
33
+ throw new Error('Project is not set. Please run `appwrite init project` to initialize the current directory with an Appwrite project.');
34
+ }
35
+
36
+ client
37
+ .setEndpoint(endpoint)
38
+ .setProject(project)
39
+ .setSelfSigned(selfSigned)
40
+ .setLocale('en-US');
41
+
42
+ if (cookie) {
43
+ return client
44
+ .setCookie(cookie)
45
+ .setMode('admin');
46
+ }
47
+
48
+ if (key) {
49
+ return client
50
+ .setKey(key)
51
+ .setMode('default');
52
+ }
53
+
54
+ throw new Error('Session not found. Please run `appwrite login` to create a session.');
55
+ };
package/lib/spinner.ts ADDED
@@ -0,0 +1,118 @@
1
+ import progress = require('cli-progress');
2
+ import chalk = require('chalk');
3
+
4
+ const SPINNER_ARC = 'arc';
5
+ const SPINNER_DOTS = 'dots';
6
+
7
+ interface SpinnerConfig {
8
+ interval: number;
9
+ frames: string[];
10
+ }
11
+
12
+ interface SpinnerPayload {
13
+ status: string;
14
+ resource: string;
15
+ id: string;
16
+ prefix?: string;
17
+ end?: string;
18
+ errorMessage?: string;
19
+ }
20
+
21
+ const spinners: Record<string, SpinnerConfig> = {
22
+ [SPINNER_ARC]: {
23
+ interval: 100,
24
+ frames: ['◜', '◠', '◝', '◞', '◡', '◟'],
25
+ },
26
+ [SPINNER_DOTS]: {
27
+ interval: 80,
28
+ frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],
29
+ },
30
+ };
31
+
32
+ class Spinner {
33
+ static updatesBar: progress.MultiBar;
34
+ private bar: progress.SingleBar;
35
+ private spinnerInterval?: NodeJS.Timeout;
36
+
37
+ static start(clearOnComplete: boolean = true, hideCursor: boolean = true): void {
38
+ Spinner.updatesBar = new progress.MultiBar({
39
+ format: this.formatter,
40
+ hideCursor,
41
+ clearOnComplete,
42
+ stopOnComplete: true,
43
+ linewrap: true,
44
+ noTTYOutput: true,
45
+ });
46
+ }
47
+
48
+ static stop(): void {
49
+ Spinner.updatesBar.stop();
50
+ }
51
+
52
+ static formatter(options: any, params: any, payload: SpinnerPayload): string {
53
+ const status = payload.status.padEnd(12);
54
+ const middle = `${payload.resource} (${payload.id})`.padEnd(40);
55
+
56
+ let prefix = chalk.cyan(payload.prefix ?? '⧗');
57
+ let start = chalk.cyan(status);
58
+ let end = chalk.yellow(payload.end ?? '');
59
+
60
+ if (status.toLowerCase().trim() === 'pushed') {
61
+ start = chalk.greenBright.bold(status);
62
+ prefix = chalk.greenBright.bold('✓');
63
+ end = '';
64
+ } else if (status.toLowerCase().trim() === 'deploying') {
65
+ start = chalk.cyanBright.bold(status);
66
+ } else if (status.toLowerCase().trim() === 'deployed') {
67
+ start = chalk.green.bold(status);
68
+ prefix = chalk.green.bold('✓');
69
+ } else if (status.toLowerCase().trim() === 'error') {
70
+ start = chalk.red.bold(status);
71
+ prefix = chalk.red.bold('✗');
72
+ end = chalk.red(payload.errorMessage ?? '');
73
+ }
74
+
75
+ return Spinner.line(prefix, start, middle, end);
76
+ }
77
+
78
+ static line(prefix: string, start: string, middle: string, end: string, separator: string = '•'): string {
79
+ return `${prefix} ${start} ${separator} ${middle} ${!end ? '' : separator} ${end}`;
80
+ }
81
+
82
+ constructor(payload: SpinnerPayload, total: number = 100, startValue: number = 0) {
83
+ this.bar = Spinner.updatesBar.create(total, startValue, payload);
84
+ }
85
+
86
+ update(payload: Partial<SpinnerPayload>): this {
87
+ this.bar.update(payload);
88
+ return this;
89
+ }
90
+
91
+ fail(payload: Partial<SpinnerPayload>): void {
92
+ this.stopSpinner();
93
+ this.update({ status: 'Error', ...payload });
94
+ }
95
+
96
+ startSpinner(name: string): void {
97
+ let spinnerFrame = 1;
98
+ const spinner = spinners[name] ?? spinners['dots'];
99
+
100
+ this.spinnerInterval = setInterval(() => {
101
+ if (spinnerFrame === spinner.frames.length) spinnerFrame = 1;
102
+ this.bar.update({ prefix: spinner.frames[spinnerFrame++] });
103
+ }, spinner.interval);
104
+ }
105
+
106
+ stopSpinner(): void {
107
+ if (this.spinnerInterval) {
108
+ clearInterval(this.spinnerInterval);
109
+ }
110
+ }
111
+
112
+ replaceSpinner(name: string): void {
113
+ this.stopSpinner();
114
+ this.startSpinner(name);
115
+ }
116
+ }
117
+
118
+ export { Spinner, SPINNER_ARC, SPINNER_DOTS };
@@ -0,0 +1,17 @@
1
+ export const AttributeType = {
2
+ STRING: 'string',
3
+ INTEGER: 'integer',
4
+ FLOAT: 'double',
5
+ BOOLEAN: 'boolean',
6
+ DATETIME: 'datetime',
7
+ EMAIL: 'email',
8
+ IP: 'ip',
9
+ URL: 'url',
10
+ ENUM: 'enum',
11
+ RELATIONSHIP: 'relationship',
12
+ POINT: 'point',
13
+ LINESTRING: 'linestring',
14
+ POLYGON: 'polygon',
15
+ } as const;
16
+
17
+ export type AttributeTypeValue = typeof AttributeType[keyof typeof AttributeType];
@@ -1,52 +1,64 @@
1
- /** @typedef {import('../attribute').Attribute} Attribute */
2
- const { AttributeType } = require('../attribute');
3
- const { LanguageMeta } = require("./language");
1
+ import { AttributeType } from '../attribute';
2
+ import { LanguageMeta, Attribute, Collection } from './language';
4
3
 
5
- class CSharp extends LanguageMeta {
6
- getType(attribute, collections, collectionName) {
7
- let type = "";
8
- switch (attribute.type) {
9
- case AttributeType.STRING:
10
- case AttributeType.EMAIL:
11
- case AttributeType.DATETIME:
12
- type = "string";
13
- if (attribute.format === AttributeType.ENUM) {
14
- type = LanguageMeta.toPascalCase(collectionName) + LanguageMeta.toPascalCase(attribute.key);
4
+ export class CSharp extends LanguageMeta {
5
+ getType(attribute: Attribute, collections?: Collection[], collectionName?: string): string {
6
+ let type = '';
7
+ switch (attribute.type) {
8
+ case AttributeType.STRING:
9
+ case AttributeType.EMAIL:
10
+ case AttributeType.DATETIME:
11
+ type = 'string';
12
+ if (attribute.format === AttributeType.ENUM) {
13
+ type = LanguageMeta.toPascalCase(collectionName!) + LanguageMeta.toPascalCase(attribute.key);
14
+ }
15
+ break;
16
+ case AttributeType.INTEGER:
17
+ type = 'long';
18
+ break;
19
+ case AttributeType.FLOAT:
20
+ type = 'double';
21
+ break;
22
+ case AttributeType.BOOLEAN:
23
+ type = 'bool';
24
+ break;
25
+ case AttributeType.RELATIONSHIP:
26
+ const relatedCollection = collections?.find((c) => c.$id === attribute.relatedCollection);
27
+ if (!relatedCollection) {
28
+ throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
29
+ }
30
+ type = LanguageMeta.toPascalCase(relatedCollection.name);
31
+ if (
32
+ (attribute.relationType === 'oneToMany' && attribute.side === 'parent') ||
33
+ (attribute.relationType === 'manyToOne' && attribute.side === 'child') ||
34
+ attribute.relationType === 'manyToMany'
35
+ ) {
36
+ type = `List<${type}>`;
37
+ }
38
+ break;
39
+ case AttributeType.POINT:
40
+ type = 'List<double>';
41
+ break;
42
+ case AttributeType.LINESTRING:
43
+ type = 'List<List<double>>';
44
+ break;
45
+ case AttributeType.POLYGON:
46
+ type = 'List<List<List<double>>>';
47
+ break;
48
+ default:
49
+ throw new Error(`Unknown attribute type: ${attribute.type}`);
15
50
  }
16
- break;
17
- case AttributeType.INTEGER:
18
- type = "long";
19
- break;
20
- case AttributeType.FLOAT:
21
- type = "double";
22
- break;
23
- case AttributeType.BOOLEAN:
24
- type = "bool";
25
- break;
26
- case AttributeType.RELATIONSHIP:
27
- const relatedCollection = collections.find(c => c.$id === attribute.relatedCollection);
28
- if (!relatedCollection) {
29
- throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
51
+ if (attribute.array) {
52
+ type = `List<${type}>`;
30
53
  }
31
- type = LanguageMeta.toPascalCase(relatedCollection.name);
32
- if ((attribute.relationType === 'oneToMany' && attribute.side === 'parent') || (attribute.relationType === 'manyToOne' && attribute.side === 'child') || attribute.relationType === 'manyToMany') {
33
- type = `List<${type}>`;
54
+ if (!attribute.required) {
55
+ type += '?';
34
56
  }
35
- break;
36
- default:
37
- throw new Error(`Unknown attribute type: ${attribute.type}`);
38
- }
39
- if (attribute.array) {
40
- type = `List<${type}>`;
57
+ return type;
41
58
  }
42
- if (!attribute.required) {
43
- type += "?";
44
- }
45
- return type;
46
- }
47
59
 
48
- getTemplate() {
49
- return `/// This file is auto-generated by the Appwrite CLI.
60
+ getTemplate(): string {
61
+ return `/// This file is auto-generated by the Appwrite CLI.
50
62
  /// You can regenerate it by running \`appwrite ${process.argv.slice(2).join(' ')}\`.
51
63
 
52
64
  #nullable enable
@@ -160,11 +172,10 @@ public class <%= toPascalCase(collection.name) %>
160
172
  }
161
173
  }
162
174
  `;
163
- }
175
+ }
164
176
 
165
- getFileName(collection) {
166
- return LanguageMeta.toPascalCase(collection.name) + ".cs";
167
- }
177
+ getFileName(collection: Collection): string {
178
+ return LanguageMeta.toPascalCase(collection.name) + '.cs';
179
+ }
168
180
  }
169
181
 
170
- module.exports = { CSharp };
@@ -1,89 +1,101 @@
1
- /** @typedef {import('../attribute').Attribute} Attribute */
2
- const { AttributeType } = require('../attribute');
3
- const { LanguageMeta } = require("./language");
4
- const fs = require('fs');
5
- const path = require('path');
6
-
7
- class Dart extends LanguageMeta {
8
- getPackageName() {
9
- const pubspecPath = path.join(process.cwd(), '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;
1
+ import fs = require('fs');
2
+ import path = require('path');
3
+ import { AttributeType } from '../attribute';
4
+ import { LanguageMeta, Attribute, Collection } from './language';
5
+
6
+ export class Dart extends LanguageMeta {
7
+ getPackageName(): string {
8
+ const pubspecPath = path.join(process.cwd(), 'pubspec.yaml');
9
+ if (fs.existsSync(pubspecPath)) {
10
+ const pubspecContent = fs.readFileSync(pubspecPath, 'utf8');
11
+ const lines = pubspecContent.split('\n');
12
+
13
+ const dependenciesIndex = lines.findIndex((line) => line.trim() === 'dependencies:');
14
+
15
+ if (dependenciesIndex !== -1) {
16
+ const indent = lines[dependenciesIndex].search(/\S|$/);
17
+ const dependencies: string[] = [];
18
+ for (let i = dependenciesIndex + 1; i < lines.length; i++) {
19
+ const line = lines[i];
20
+ if (line.trim() === '') continue;
21
+
22
+ const lineIndent = line.search(/\S|$/);
23
+ if (lineIndent <= indent && line.trim() !== '') {
24
+ break;
25
+ }
26
+
27
+ dependencies.push(line.trim());
26
28
  }
27
29
 
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';
30
+ if (dependencies.some((dep) => dep.startsWith('dart_appwrite:'))) {
31
+ return 'dart_appwrite';
32
+ }
33
+ if (dependencies.some((dep) => dep.startsWith('appwrite:'))) {
34
+ return 'appwrite';
35
+ }
36
36
  }
37
37
  }
38
- }
39
38
 
40
- return 'appwrite';
41
- }
39
+ return 'appwrite';
40
+ }
42
41
 
43
- getType(attribute, collections, collectionName) {
44
- let type = "";
45
- switch (attribute.type) {
46
- case AttributeType.STRING:
47
- case AttributeType.EMAIL:
48
- case AttributeType.DATETIME:
49
- type = "String";
50
- if (attribute.format === AttributeType.ENUM) {
51
- type = LanguageMeta.toPascalCase(collectionName) + LanguageMeta.toPascalCase(attribute.key);
42
+ getType(attribute: Attribute, collections?: Collection[], collectionName?: string): string {
43
+ let type = '';
44
+ switch (attribute.type) {
45
+ case AttributeType.STRING:
46
+ case AttributeType.EMAIL:
47
+ case AttributeType.DATETIME:
48
+ type = 'String';
49
+ if (attribute.format === AttributeType.ENUM) {
50
+ type = LanguageMeta.toPascalCase(collectionName!) + LanguageMeta.toPascalCase(attribute.key);
51
+ }
52
+ break;
53
+ case AttributeType.INTEGER:
54
+ type = 'int';
55
+ break;
56
+ case AttributeType.FLOAT:
57
+ type = 'double';
58
+ break;
59
+ case AttributeType.BOOLEAN:
60
+ type = 'bool';
61
+ break;
62
+ case AttributeType.RELATIONSHIP:
63
+ const relatedCollection = collections?.find((c) => c.$id === attribute.relatedCollection);
64
+ if (!relatedCollection) {
65
+ throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
66
+ }
67
+ type = LanguageMeta.toPascalCase(relatedCollection.name);
68
+ if (
69
+ (attribute.relationType === 'oneToMany' && attribute.side === 'parent') ||
70
+ (attribute.relationType === 'manyToOne' && attribute.side === 'child') ||
71
+ attribute.relationType === 'manyToMany'
72
+ ) {
73
+ type = `List<${type}>`;
74
+ }
75
+ break;
76
+ case AttributeType.POINT:
77
+ type = 'List<double>';
78
+ break;
79
+ case AttributeType.LINESTRING:
80
+ type = 'List<List<double>>';
81
+ break;
82
+ case AttributeType.POLYGON:
83
+ type = 'List<List<List<double>>>';
84
+ break;
85
+ default:
86
+ throw new Error(`Unknown attribute type: ${attribute.type}`);
52
87
  }
53
- break;
54
- case AttributeType.INTEGER:
55
- type = "int";
56
- break;
57
- case AttributeType.FLOAT:
58
- type = "double";
59
- break;
60
- case AttributeType.BOOLEAN:
61
- type = "bool";
62
- break;
63
- case AttributeType.RELATIONSHIP:
64
- const relatedCollection = collections.find(c => c.$id === attribute.relatedCollection);
65
- if (!relatedCollection) {
66
- throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
88
+ if (attribute.array) {
89
+ type = `List<${type}>`;
67
90
  }
68
- type = LanguageMeta.toPascalCase(relatedCollection.name);
69
- if ((attribute.relationType === 'oneToMany' && attribute.side === 'parent') || (attribute.relationType === 'manyToOne' && attribute.side === 'child') || attribute.relationType === 'manyToMany') {
70
- type = `List<${type}>`;
91
+ if (!attribute.required) {
92
+ type += '?';
71
93
  }
72
- break;
73
- default:
74
- throw new Error(`Unknown attribute type: ${attribute.type}`);
75
- }
76
- if (attribute.array) {
77
- type = `List<${type}>`;
94
+ return type;
78
95
  }
79
- if (!attribute.required) {
80
- type += "?";
81
- }
82
- return type;
83
- }
84
96
 
85
- getTemplate() {
86
- return `// This file is auto-generated by the Appwrite CLI.
97
+ getTemplate(): string {
98
+ return `// This file is auto-generated by the Appwrite CLI.
87
99
  // You can regenerate it by running \`appwrite ${process.argv.slice(2).join(' ')}\`.
88
100
  <% const __relatedImportsSeen = new Set();
89
101
  const sortedAttributes = collection.attributes.slice().sort((a, b) => {
@@ -183,11 +195,10 @@ map['<%= attribute.key %>'] != null ? <%- toPascalCase(collections.find(c => c.$
183
195
  }
184
196
  }
185
197
  `;
186
- }
198
+ }
187
199
 
188
- getFileName(collection) {
189
- return LanguageMeta.toSnakeCase(collection.name) + ".dart";
190
- }
200
+ getFileName(collection: Collection): string {
201
+ return LanguageMeta.toSnakeCase(collection.name) + '.dart';
202
+ }
191
203
  }
192
204
 
193
- module.exports = { Dart };
@@ -1,49 +1,61 @@
1
- /** @typedef {import('../attribute').Attribute} Attribute */
2
- const { AttributeType } = require('../attribute');
3
- const { LanguageMeta } = require("./language");
4
-
5
- class Java extends LanguageMeta {
6
- getType(attribute, collections, collectionName) {
7
- let type = "";
8
- switch (attribute.type) {
9
- case AttributeType.STRING:
10
- case AttributeType.EMAIL:
11
- case AttributeType.DATETIME:
12
- type = "String";
13
- if (attribute.format === AttributeType.ENUM) {
14
- type = LanguageMeta.toPascalCase(collectionName) + LanguageMeta.toPascalCase(attribute.key);
1
+ import { AttributeType } from '../attribute';
2
+ import { LanguageMeta, Attribute, Collection } from './language';
3
+
4
+ export class Java extends LanguageMeta {
5
+ getType(attribute: Attribute, collections?: Collection[], collectionName?: string): string {
6
+ let type = '';
7
+ switch (attribute.type) {
8
+ case AttributeType.STRING:
9
+ case AttributeType.EMAIL:
10
+ case AttributeType.DATETIME:
11
+ type = 'String';
12
+ if (attribute.format === AttributeType.ENUM) {
13
+ type = LanguageMeta.toPascalCase(collectionName!) + LanguageMeta.toPascalCase(attribute.key);
14
+ }
15
+ break;
16
+ case AttributeType.INTEGER:
17
+ type = 'Integer';
18
+ break;
19
+ case AttributeType.FLOAT:
20
+ type = 'Double';
21
+ break;
22
+ case AttributeType.BOOLEAN:
23
+ type = 'Boolean';
24
+ break;
25
+ case AttributeType.RELATIONSHIP:
26
+ const relatedCollection = collections?.find((c) => c.$id === attribute.relatedCollection);
27
+ if (!relatedCollection) {
28
+ throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
29
+ }
30
+ type = LanguageMeta.toPascalCase(relatedCollection.name);
31
+ if (
32
+ (attribute.relationType === 'oneToMany' && attribute.side === 'parent') ||
33
+ (attribute.relationType === 'manyToOne' && attribute.side === 'child') ||
34
+ attribute.relationType === 'manyToMany'
35
+ ) {
36
+ type = 'List<' + type + '>';
37
+ }
38
+ break;
39
+ case AttributeType.POINT:
40
+ type = 'List<Double>';
41
+ break;
42
+ case AttributeType.LINESTRING:
43
+ type = 'List<List<Double>>';
44
+ break;
45
+ case AttributeType.POLYGON:
46
+ type = 'List<List<List<Double>>>';
47
+ break;
48
+ default:
49
+ throw new Error(`Unknown attribute type: ${attribute.type}`);
15
50
  }
16
- break;
17
- case AttributeType.INTEGER:
18
- type = "int";
19
- break;
20
- case AttributeType.FLOAT:
21
- type = "double";
22
- break;
23
- case AttributeType.BOOLEAN:
24
- type = "boolean";
25
- break;
26
- case AttributeType.RELATIONSHIP:
27
- const relatedCollection = collections.find(c => c.$id === attribute.relatedCollection);
28
- if (!relatedCollection) {
29
- throw new Error(`Related collection with ID '${attribute.relatedCollection}' not found.`);
51
+ if (attribute.array) {
52
+ type = 'List<' + type + '>';
30
53
  }
31
- type = LanguageMeta.toPascalCase(relatedCollection.name);
32
- if ((attribute.relationType === 'oneToMany' && attribute.side === 'parent') || (attribute.relationType === 'manyToOne' && attribute.side === 'child') || attribute.relationType === 'manyToMany') {
33
- type = "List<" + type + ">";
34
- }
35
- break;
36
- default:
37
- throw new Error(`Unknown attribute type: ${attribute.type}`);
38
- }
39
- if (attribute.array) {
40
- type = "List<" + type + ">";
54
+ return type;
41
55
  }
42
- return type;
43
- }
44
56
 
45
- getTemplate() {
46
- return `package io.appwrite.models;
57
+ getTemplate(): string {
58
+ return `package io.appwrite.models;
47
59
 
48
60
  /**
49
61
  * This file is auto-generated by the Appwrite CLI.
@@ -120,11 +132,10 @@ public class <%- toPascalCase(collection.name) %> {
120
132
  }
121
133
  }
122
134
  `;
123
- }
135
+ }
124
136
 
125
- getFileName(collection) {
126
- return LanguageMeta.toPascalCase(collection.name) + ".java";
127
- }
137
+ getFileName(collection: Collection): string {
138
+ return LanguageMeta.toPascalCase(collection.name) + '.java';
139
+ }
128
140
  }
129
141
 
130
- module.exports = { Java };