appwrite-cli 12.0.1 → 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 +4 -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} +408 -662
  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} +118 -174
  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 -57
  255. package/lib/type-generation/languages/{dart.js → dart.ts} +91 -89
  256. package/lib/type-generation/languages/{java.js → java.ts} +58 -56
  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 -53
  261. package/lib/type-generation/languages/{swift.js → swift.ts} +59 -57
  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 -19
  279. package/lib/type-generation/languages/javascript.js +0 -111
  280. package/lib/type-generation/languages/kotlin.js +0 -94
  281. package/lib/type-generation/languages/language.js +0 -125
  282. package/lib/type-generation/languages/typescript.js +0 -116
  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,61 +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
- case AttributeType.POINT:
37
- type = "List<double>";
38
- break;
39
- case AttributeType.LINESTRING:
40
- type = "List<List<double>>";
41
- break;
42
- case AttributeType.POLYGON:
43
- type = "List<List<List<double>>>";
44
- break;
45
- default:
46
- throw new Error(`Unknown attribute type: ${attribute.type}`);
47
- }
48
- if (attribute.array) {
49
- type = `List<${type}>`;
57
+ return type;
50
58
  }
51
- if (!attribute.required) {
52
- type += "?";
53
- }
54
- return type;
55
- }
56
59
 
57
- getTemplate() {
58
- return `/// This file is auto-generated by the Appwrite CLI.
60
+ getTemplate(): string {
61
+ return `/// This file is auto-generated by the Appwrite CLI.
59
62
  /// You can regenerate it by running \`appwrite ${process.argv.slice(2).join(' ')}\`.
60
63
 
61
64
  #nullable enable
@@ -169,11 +172,10 @@ public class <%= toPascalCase(collection.name) %>
169
172
  }
170
173
  }
171
174
  `;
172
- }
175
+ }
173
176
 
174
- getFileName(collection) {
175
- return LanguageMeta.toPascalCase(collection.name) + ".cs";
176
- }
177
+ getFileName(collection: Collection): string {
178
+ return LanguageMeta.toPascalCase(collection.name) + '.cs';
179
+ }
177
180
  }
178
181
 
179
- module.exports = { CSharp };
@@ -1,98 +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
- case AttributeType.POINT:
74
- type = "List<double>";
75
- break;
76
- case AttributeType.LINESTRING:
77
- type = "List<List<double>>";
78
- break;
79
- case AttributeType.POLYGON:
80
- type = "List<List<List<double>>>";
81
- break;
82
- default:
83
- throw new Error(`Unknown attribute type: ${attribute.type}`);
84
- }
85
- if (attribute.array) {
86
- type = `List<${type}>`;
94
+ return type;
87
95
  }
88
- if (!attribute.required) {
89
- type += "?";
90
- }
91
- return type;
92
- }
93
96
 
94
- getTemplate() {
95
- return `// This file is auto-generated by the Appwrite CLI.
97
+ getTemplate(): string {
98
+ return `// This file is auto-generated by the Appwrite CLI.
96
99
  // You can regenerate it by running \`appwrite ${process.argv.slice(2).join(' ')}\`.
97
100
  <% const __relatedImportsSeen = new Set();
98
101
  const sortedAttributes = collection.attributes.slice().sort((a, b) => {
@@ -192,11 +195,10 @@ map['<%= attribute.key %>'] != null ? <%- toPascalCase(collections.find(c => c.$
192
195
  }
193
196
  }
194
197
  `;
195
- }
198
+ }
196
199
 
197
- getFileName(collection) {
198
- return LanguageMeta.toSnakeCase(collection.name) + ".dart";
199
- }
200
+ getFileName(collection: Collection): string {
201
+ return LanguageMeta.toSnakeCase(collection.name) + '.dart';
202
+ }
200
203
  }
201
204
 
202
- module.exports = { Dart };
@@ -1,58 +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
- case AttributeType.POINT:
37
- type = "List<Double>";
38
- break;
39
- case AttributeType.LINESTRING:
40
- type = "List<List<Double>>";
41
- break;
42
- case AttributeType.POLYGON:
43
- type = "List<List<List<Double>>>";
44
- break;
45
- default:
46
- throw new Error(`Unknown attribute type: ${attribute.type}`);
47
- }
48
- if (attribute.array) {
49
- type = "List<" + type + ">";
54
+ return type;
50
55
  }
51
- return type;
52
- }
53
56
 
54
- getTemplate() {
55
- return `package io.appwrite.models;
57
+ getTemplate(): string {
58
+ return `package io.appwrite.models;
56
59
 
57
60
  /**
58
61
  * This file is auto-generated by the Appwrite CLI.
@@ -129,11 +132,10 @@ public class <%- toPascalCase(collection.name) %> {
129
132
  }
130
133
  }
131
134
  `;
132
- }
135
+ }
133
136
 
134
- getFileName(collection) {
135
- return LanguageMeta.toPascalCase(collection.name) + ".java";
136
- }
137
+ getFileName(collection: Collection): string {
138
+ return LanguageMeta.toPascalCase(collection.name) + '.java';
139
+ }
137
140
  }
138
141
 
139
- module.exports = { Java };