@devaloop/devalang 0.0.1-alpha.9 → 0.0.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/.cargo/config.toml +2 -0
  2. package/.devalang +6 -1
  3. package/.github/workflows/ci.yml +103 -0
  4. package/Cargo.toml +81 -48
  5. package/README.md +137 -154
  6. package/docs/CHANGELOG.md +428 -1
  7. package/docs/CONTRIBUTING.md +101 -0
  8. package/docs/ROADMAP.md +14 -7
  9. package/docs/TODO.md +16 -15
  10. package/examples/automation.deva +42 -0
  11. package/examples/bank.deva +7 -0
  12. package/examples/bus.deva +10 -0
  13. package/examples/duration.deva +9 -0
  14. package/examples/effect.deva +2 -0
  15. package/examples/events.deva +12 -0
  16. package/examples/filter.deva +11 -0
  17. package/examples/function.deva +15 -0
  18. package/examples/index.deva +57 -12
  19. package/examples/lfo.deva +9 -0
  20. package/examples/loop.deva +5 -12
  21. package/examples/pattern.deva +8 -0
  22. package/examples/plugin.deva +16 -0
  23. package/examples/synth.deva +11 -1
  24. package/examples/synth_types.deva +17 -0
  25. package/examples/variables.deva +1 -1
  26. package/out-tsc/bin/index.d.ts +2 -0
  27. package/out-tsc/bin/index.js +51 -7
  28. package/out-tsc/core/functions/index.d.ts +42 -0
  29. package/out-tsc/core/functions/index.js +87 -0
  30. package/out-tsc/core/index.d.ts +6 -0
  31. package/out-tsc/core/index.js +22 -0
  32. package/out-tsc/core/types/index.d.ts +4 -0
  33. package/out-tsc/core/types/index.js +20 -0
  34. package/out-tsc/core/types/plugin.d.ts +18 -0
  35. package/out-tsc/core/types/plugin.js +2 -0
  36. package/out-tsc/core/types/result.d.ts +27 -0
  37. package/out-tsc/core/types/result.js +2 -0
  38. package/out-tsc/core/types/statement.d.ts +106 -0
  39. package/out-tsc/core/types/statement.js +2 -0
  40. package/out-tsc/core/types/value.d.ts +43 -0
  41. package/out-tsc/core/types/value.js +2 -0
  42. package/out-tsc/index.d.ts +7 -0
  43. package/out-tsc/index.js +42 -1
  44. package/out-tsc/pkg/devalang_core.d.ts +15 -0
  45. package/out-tsc/pkg/devalang_core.js +65 -0
  46. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +34 -0
  47. package/out-tsc/scripts/copy-wasm-dts.d.ts +1 -0
  48. package/out-tsc/scripts/copy-wasm-dts.js +73 -0
  49. package/out-tsc/scripts/postinstall.d.ts +1 -0
  50. package/out-tsc/scripts/postinstall.js +83 -0
  51. package/out-tsc/scripts/version/bump.d.ts +1 -0
  52. package/out-tsc/scripts/version/fetch.d.ts +1 -0
  53. package/out-tsc/scripts/version/index.d.ts +1 -0
  54. package/out-tsc/scripts/version/sync.d.ts +1 -0
  55. package/package.json +28 -7
  56. package/project-version.json +4 -4
  57. package/rust/cli/bank/api.rs +122 -0
  58. package/rust/cli/bank/commands.rs +306 -0
  59. package/rust/cli/bank/mod.rs +29 -0
  60. package/rust/cli/build/commands.rs +153 -0
  61. package/rust/cli/build/mod.rs +2 -0
  62. package/rust/cli/build/process.rs +165 -0
  63. package/rust/cli/check/mod.rs +208 -0
  64. package/rust/cli/discover/commands.rs +253 -0
  65. package/rust/cli/discover/config.rs +111 -0
  66. package/rust/cli/discover/fs.rs +19 -0
  67. package/rust/cli/discover/install.rs +103 -0
  68. package/rust/cli/discover/metadata.rs +48 -0
  69. package/rust/cli/discover/mod.rs +5 -0
  70. package/rust/cli/{init.rs → init/commands.rs} +32 -23
  71. package/rust/cli/init/mod.rs +1 -0
  72. package/rust/cli/install/addon.rs +118 -0
  73. package/rust/cli/install/bank.rs +72 -0
  74. package/rust/cli/install/commands.rs +35 -0
  75. package/rust/cli/install/mod.rs +4 -0
  76. package/rust/cli/install/plugin.rs +80 -0
  77. package/rust/cli/login/commands.rs +124 -0
  78. package/rust/cli/login/mod.rs +1 -0
  79. package/rust/cli/mod.rs +9 -202
  80. package/rust/cli/parser.rs +359 -0
  81. package/rust/cli/play/commands.rs +375 -0
  82. package/rust/cli/play/io.rs +17 -0
  83. package/rust/cli/play/mod.rs +5 -0
  84. package/rust/cli/play/process.rs +159 -0
  85. package/rust/cli/play/realtime.rs +91 -0
  86. package/rust/cli/play/utils.rs +23 -0
  87. package/rust/cli/telemetry/commands.rs +22 -0
  88. package/rust/cli/telemetry/event_creator.rs +80 -0
  89. package/rust/cli/telemetry/mod.rs +3 -0
  90. package/rust/cli/telemetry/send.rs +51 -0
  91. package/rust/cli/{template.rs → template/commands.rs} +17 -5
  92. package/rust/cli/template/mod.rs +1 -0
  93. package/rust/cli/update/commands.rs +6 -0
  94. package/rust/cli/update/mod.rs +1 -0
  95. package/rust/config/driver.rs +112 -0
  96. package/rust/config/mod.rs +3 -16
  97. package/rust/config/ops.rs +26 -0
  98. package/rust/config/settings.rs +101 -0
  99. package/rust/core/audio/engine/driver.rs +220 -0
  100. package/rust/core/audio/engine/export.rs +169 -0
  101. package/rust/core/audio/engine/helpers.rs +178 -0
  102. package/rust/core/audio/engine/mod.rs +56 -0
  103. package/rust/core/audio/engine/notes/dsp.rs +85 -0
  104. package/rust/core/audio/engine/notes/mod.rs +44 -0
  105. package/rust/core/audio/engine/notes/params.rs +294 -0
  106. package/rust/core/audio/engine/sample/insert.rs +199 -0
  107. package/rust/core/audio/engine/sample/mod.rs +40 -0
  108. package/rust/core/audio/engine/sample/padding.rs +170 -0
  109. package/rust/core/audio/evaluator/condition.rs +61 -0
  110. package/rust/core/audio/evaluator/mod.rs +9 -0
  111. package/rust/core/audio/evaluator/numeric.rs +152 -0
  112. package/rust/core/audio/evaluator/rhs.rs +16 -0
  113. package/rust/core/audio/evaluator/string_expr.rs +94 -0
  114. package/rust/core/audio/interpreter/driver.rs +574 -216
  115. package/rust/core/audio/interpreter/mod.rs +2 -12
  116. package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +175 -0
  117. package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +384 -0
  118. package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +2 -0
  119. package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +316 -0
  120. package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +3 -0
  121. package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +192 -0
  122. package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +24 -0
  123. package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +116 -0
  124. package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +97 -0
  125. package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +100 -0
  126. package/rust/core/audio/interpreter/statements/automate.rs +16 -0
  127. package/rust/core/audio/interpreter/statements/call.rs +295 -0
  128. package/rust/core/audio/interpreter/{condition.rs → statements/condition.rs} +72 -69
  129. package/rust/core/audio/interpreter/statements/function.rs +24 -0
  130. package/rust/core/audio/interpreter/statements/let_.rs +36 -0
  131. package/rust/core/audio/interpreter/statements/load.rs +17 -0
  132. package/rust/core/audio/interpreter/statements/loop_.rs +115 -0
  133. package/rust/core/audio/interpreter/statements/mod.rs +12 -0
  134. package/rust/core/audio/interpreter/statements/sleep.rs +28 -0
  135. package/rust/core/audio/interpreter/statements/spawn.rs +253 -0
  136. package/rust/core/audio/interpreter/statements/tempo.rs +40 -0
  137. package/rust/core/audio/interpreter/statements/trigger.rs +239 -0
  138. package/rust/core/audio/loader/mod.rs +1 -1
  139. package/rust/core/audio/loader/trigger.rs +98 -52
  140. package/rust/core/audio/mod.rs +2 -2
  141. package/rust/core/audio/player.rs +28 -12
  142. package/rust/core/audio/special/easing.rs +189 -0
  143. package/rust/core/audio/special/env.rs +45 -0
  144. package/rust/core/audio/special/math.rs +134 -0
  145. package/rust/core/audio/special/mod.rs +9 -0
  146. package/rust/core/audio/special/modulator.rs +143 -0
  147. package/rust/core/builder/mod.rs +129 -80
  148. package/rust/core/debugger/lexer.rs +4 -4
  149. package/rust/core/debugger/logs.rs +52 -0
  150. package/rust/core/debugger/mod.rs +11 -2
  151. package/rust/core/debugger/preprocessor.rs +4 -4
  152. package/rust/core/debugger/store.rs +38 -25
  153. package/rust/core/error/mod.rs +221 -12
  154. package/rust/core/lexer/driver.rs +59 -0
  155. package/rust/core/lexer/handler/arrow.rs +62 -11
  156. package/rust/core/lexer/handler/at.rs +5 -5
  157. package/rust/core/lexer/handler/brace.rs +11 -11
  158. package/rust/core/lexer/handler/colon.rs +5 -5
  159. package/rust/core/lexer/handler/comment.rs +3 -3
  160. package/rust/core/lexer/handler/dot.rs +6 -6
  161. package/rust/core/lexer/handler/driver.rs +143 -32
  162. package/rust/core/lexer/handler/identifier.rs +11 -5
  163. package/rust/core/lexer/handler/indent.rs +18 -4
  164. package/rust/core/lexer/handler/mod.rs +6 -5
  165. package/rust/core/lexer/handler/newline.rs +3 -3
  166. package/rust/core/lexer/handler/number.rs +5 -5
  167. package/rust/core/lexer/handler/operator.rs +5 -3
  168. package/rust/core/lexer/handler/parenthesis.rs +41 -0
  169. package/rust/core/lexer/handler/slash.rs +21 -0
  170. package/rust/core/lexer/handler/string.rs +3 -3
  171. package/rust/core/lexer/mod.rs +1 -49
  172. package/rust/core/lexer/token.rs +17 -12
  173. package/rust/core/mod.rs +9 -10
  174. package/rust/core/parser/driver/block.rs +111 -0
  175. package/rust/core/parser/driver/cursor.rs +82 -0
  176. package/rust/core/parser/driver/driver_impl.rs +139 -0
  177. package/rust/core/parser/driver/mod.rs +6 -0
  178. package/rust/core/parser/driver/parse_array.rs +120 -0
  179. package/rust/core/parser/driver/parse_map.rs +223 -0
  180. package/rust/core/parser/driver/parser.rs +160 -0
  181. package/rust/core/parser/handler/arrow_call.rs +277 -126
  182. package/rust/core/parser/handler/at.rs +142 -25
  183. package/rust/core/parser/handler/bank.rs +83 -20
  184. package/rust/core/parser/handler/condition.rs +14 -5
  185. package/rust/core/parser/handler/dot.rs +111 -75
  186. package/rust/core/parser/handler/identifier/automate.rs +254 -0
  187. package/rust/core/parser/handler/identifier/call.rs +74 -24
  188. package/rust/core/parser/handler/identifier/emit.rs +70 -0
  189. package/rust/core/parser/handler/identifier/function.rs +113 -0
  190. package/rust/core/parser/handler/identifier/group.rs +28 -14
  191. package/rust/core/parser/handler/identifier/let_.rs +61 -21
  192. package/rust/core/parser/handler/identifier/mod.rs +24 -20
  193. package/rust/core/parser/handler/identifier/on.rs +107 -0
  194. package/rust/core/parser/handler/identifier/print.rs +49 -0
  195. package/rust/core/parser/handler/identifier/sleep.rs +77 -14
  196. package/rust/core/parser/handler/identifier/spawn.rs +81 -31
  197. package/rust/core/parser/handler/identifier/synth.rs +102 -32
  198. package/rust/core/parser/handler/loop_.rs +144 -22
  199. package/rust/core/parser/handler/mod.rs +6 -5
  200. package/rust/core/parser/handler/pattern.rs +74 -0
  201. package/rust/core/parser/handler/tempo.rs +67 -9
  202. package/rust/core/parser/mod.rs +3 -4
  203. package/rust/core/parser/statement.rs +6 -92
  204. package/rust/core/plugin/loader.rs +137 -0
  205. package/rust/core/plugin/mod.rs +2 -0
  206. package/rust/core/plugin/runner/mod.rs +11 -0
  207. package/rust/core/plugin/runner/non_wasm.rs +297 -0
  208. package/rust/core/plugin/runner/wasm32.rs +43 -0
  209. package/rust/core/preprocessor/loader/inject.rs +278 -0
  210. package/rust/core/preprocessor/loader/loader_helpers.rs +110 -0
  211. package/rust/core/preprocessor/loader/mod.rs +235 -0
  212. package/rust/core/preprocessor/mod.rs +4 -4
  213. package/rust/core/preprocessor/module.rs +55 -50
  214. package/rust/core/preprocessor/processor/handlers.rs +107 -0
  215. package/rust/core/preprocessor/processor/mod.rs +1 -0
  216. package/rust/core/preprocessor/resolver/bank.rs +14 -12
  217. package/rust/core/preprocessor/resolver/call.rs +106 -105
  218. package/rust/core/preprocessor/resolver/condition.rs +13 -10
  219. package/rust/core/preprocessor/resolver/driver.rs +145 -48
  220. package/rust/core/preprocessor/resolver/function.rs +69 -0
  221. package/rust/core/preprocessor/resolver/group.rs +122 -61
  222. package/rust/core/preprocessor/resolver/let_.rs +13 -12
  223. package/rust/core/preprocessor/resolver/loop_.rs +240 -13
  224. package/rust/core/preprocessor/resolver/mod.rs +8 -6
  225. package/rust/core/preprocessor/resolver/pattern.rs +83 -0
  226. package/rust/core/preprocessor/resolver/spawn.rs +83 -42
  227. package/rust/core/preprocessor/resolver/synth.rs +15 -11
  228. package/rust/core/preprocessor/resolver/tempo.rs +13 -14
  229. package/rust/core/preprocessor/resolver/trigger.rs +32 -28
  230. package/rust/core/preprocessor/resolver/value.rs +111 -13
  231. package/rust/core/store/global.rs +57 -39
  232. package/rust/core/store/mod.rs +0 -3
  233. package/rust/lib.rs +323 -117
  234. package/rust/main.rs +388 -65
  235. package/rust/types/Cargo.toml +11 -0
  236. package/rust/types/src/addons.rs +55 -0
  237. package/rust/types/src/ast.rs +202 -0
  238. package/rust/types/src/config.rs +84 -0
  239. package/rust/types/src/lib.rs +15 -0
  240. package/rust/types/src/plugin.rs +20 -0
  241. package/rust/types/src/store.rs +139 -0
  242. package/rust/types/src/telemetry.rs +85 -0
  243. package/rust/utils/Cargo.toml +26 -0
  244. package/rust/utils/src/error.rs +186 -0
  245. package/rust/utils/src/file.rs +94 -0
  246. package/rust/utils/src/first_usage.rs +97 -0
  247. package/rust/utils/{mod.rs → src/lib.rs} +6 -3
  248. package/rust/utils/{logger.rs → src/logger.rs} +94 -17
  249. package/rust/utils/src/path.rs +129 -0
  250. package/rust/utils/src/signature.rs +41 -0
  251. package/rust/utils/{spinner.rs → src/spinner.rs} +7 -8
  252. package/rust/utils/src/version.rs +27 -0
  253. package/rust/utils/{watcher.rs → src/watcher.rs} +17 -4
  254. package/rust/web/api.rs +5 -0
  255. package/rust/web/cdn.rs +34 -0
  256. package/rust/web/mod.rs +3 -0
  257. package/rust/web/sso.rs +5 -0
  258. package/templates/minimal/README.md +143 -127
  259. package/templates/welcome/README.md +143 -127
  260. package/templates/welcome/src/index.deva +56 -8
  261. package/templates/welcome/src/variables.deva +2 -4
  262. package/tests/integration.rs +21 -0
  263. package/tests/rust/cli_check_build.rs +21 -0
  264. package/tests/rust/cli_help.rs +12 -0
  265. package/tests/rust/cli_template_list.rs +10 -0
  266. package/tests/rust/cli_version.rs +11 -0
  267. package/tests/typescript/index.spec.ts +136 -0
  268. package/tests/typescript/playhead.spec.ts +36 -0
  269. package/tests/typescript/render_e2e.spec.ts +77 -0
  270. package/tsconfig.json +12 -10
  271. package/typescript/bin/index.ts +19 -5
  272. package/typescript/core/functions/index.ts +94 -0
  273. package/typescript/core/index.ts +6 -0
  274. package/typescript/core/types/index.ts +4 -0
  275. package/typescript/core/types/plugin.ts +19 -0
  276. package/typescript/core/types/result.ts +29 -0
  277. package/typescript/core/types/statement.ts +47 -0
  278. package/typescript/core/types/value.ts +29 -0
  279. package/typescript/index.ts +8 -1
  280. package/typescript/pkg/devalang_core.d.ts +4 -0
  281. package/typescript/pkg/devalang_core.ts +65 -0
  282. package/typescript/scripts/copy-wasm-dts.ts +41 -0
  283. package/typescript/scripts/postinstall.ts +85 -0
  284. package/typescript/scripts/version/bump.ts +0 -1
  285. package/typescript/scripts/version/index.ts +0 -1
  286. package/docs/COMMANDS.md +0 -85
  287. package/docs/CONFIG.md +0 -30
  288. package/docs/SYNTAX.md +0 -210
  289. package/out-tsc/bin/devalang.exe +0 -0
  290. package/out-tsc/scripts/postbuild.js +0 -11
  291. package/rust/cli/build.rs +0 -137
  292. package/rust/cli/check.rs +0 -117
  293. package/rust/cli/play.rs +0 -193
  294. package/rust/config/loader.rs +0 -13
  295. package/rust/core/audio/engine.rs +0 -203
  296. package/rust/core/audio/evaluator.rs +0 -31
  297. package/rust/core/audio/interpreter/arrow_call.rs +0 -129
  298. package/rust/core/audio/interpreter/call.rs +0 -64
  299. package/rust/core/audio/interpreter/let_.rs +0 -19
  300. package/rust/core/audio/interpreter/load.rs +0 -18
  301. package/rust/core/audio/interpreter/loop_.rs +0 -67
  302. package/rust/core/audio/interpreter/sleep.rs +0 -36
  303. package/rust/core/audio/interpreter/spawn.rs +0 -66
  304. package/rust/core/audio/interpreter/tempo.rs +0 -16
  305. package/rust/core/audio/interpreter/trigger.rs +0 -69
  306. package/rust/core/audio/renderer.rs +0 -54
  307. package/rust/core/parser/driver.rs +0 -331
  308. package/rust/core/preprocessor/loader.rs +0 -193
  309. package/rust/core/preprocessor/processor.rs +0 -76
  310. package/rust/core/shared/duration.rs +0 -8
  311. package/rust/core/shared/mod.rs +0 -2
  312. package/rust/core/shared/value.rs +0 -18
  313. package/rust/core/store/export.rs +0 -28
  314. package/rust/core/store/import.rs +0 -28
  315. package/rust/core/store/variable.rs +0 -28
  316. package/rust/core/utils/mod.rs +0 -2
  317. package/rust/core/utils/path.rs +0 -31
  318. package/rust/core/utils/validation.rs +0 -37
  319. package/rust/utils/file.rs +0 -35
  320. package/rust/utils/signature.rs +0 -17
  321. package/rust/utils/version.rs +0 -15
  322. package/typescript/scripts/postbuild.ts +0 -8
@@ -0,0 +1,359 @@
1
+ use clap::{Parser, Subcommand, ValueEnum};
2
+
3
+ #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
4
+ pub enum OutputFormat {
5
+ Wav,
6
+ Mid,
7
+ }
8
+
9
+ #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
10
+ pub enum AudioFormat {
11
+ Wav16,
12
+ Wav24,
13
+ Wav32,
14
+ }
15
+
16
+ #[derive(Parser)]
17
+ #[command(name = "devalang")]
18
+ #[command(author = "Devaloop")]
19
+ #[command(about = "🦊 Devalang – A programming language for music and sound.")]
20
+ pub struct Cli {
21
+ #[arg(long, global = true)]
22
+ /// Skips loading the configuration file.
23
+ pub no_config: bool,
24
+
25
+ #[command(subcommand)]
26
+ pub command: Commands,
27
+ }
28
+
29
+ #[derive(Subcommand)]
30
+ pub enum TelemetryCommand {
31
+ /// Enables telemetry data collection.
32
+ Enable {},
33
+ /// Disables telemetry data collection.
34
+ Disable {},
35
+ }
36
+
37
+ #[derive(Subcommand)]
38
+ pub enum InstallCommand {
39
+ /// Installs a template.
40
+ Template { name: String },
41
+ /// Installs a bank.
42
+ Bank { name: String },
43
+ /// Installs a plugin.
44
+ Plugin { name: String },
45
+ /// Installs a preset.
46
+ Preset { name: String },
47
+ }
48
+
49
+ #[derive(Subcommand)]
50
+ pub enum TemplateCommand {
51
+ /// Lists all available templates for Devalang projects.
52
+ List,
53
+ /// Displays information about a specific template.
54
+ Info { name: String },
55
+ }
56
+
57
+ #[derive(Subcommand)]
58
+ pub enum BankCommand {
59
+ /// Lists installed banks.
60
+ List,
61
+ /// Lists all available banks.
62
+ Available,
63
+ /// Displays information about a specific bank.
64
+ Info { name: String },
65
+ /// Removes a bank.
66
+ Remove { name: String },
67
+ /// Updates a specific or all banks.
68
+ Update { name: Option<String> },
69
+ }
70
+
71
+ #[derive(Subcommand)]
72
+ pub enum Commands {
73
+ /// Create a new Devalang project.
74
+ ///
75
+ /// ### Arguments
76
+ /// - `name` - The name of the project to create.
77
+ /// - `template` - The template to use for the project. Defaults to "default".
78
+ ///
79
+ /// ### Example
80
+ /// ```bash
81
+ /// devalang init --name my_project --template default
82
+ ///
83
+ Init {
84
+ #[arg(short, long)]
85
+ /// The optional name (directory) of the project to create.
86
+ name: Option<String>,
87
+
88
+ #[arg(short, long)]
89
+ /// The template to use for the project.
90
+ ///
91
+ /// ### Default value
92
+ /// - `default`
93
+ ///
94
+ template: Option<String>,
95
+ },
96
+
97
+ /// Manage templates for Devalang projects.
98
+ ///
99
+ /// ### Subcommands
100
+ /// - `list` - Lists all available templates.
101
+ /// - `info <name>` - Displays information about a specific template.
102
+ ///
103
+ /// ### Example
104
+ /// ```bash
105
+ /// devalang template list
106
+ /// devalang template info my_template
107
+ /// ```bash
108
+ ///
109
+ Template {
110
+ #[command(subcommand)]
111
+ /// The template command to execute.
112
+ command: TemplateCommand,
113
+ },
114
+
115
+ /// Build the program and generate output files.
116
+ ///
117
+ /// ### Arguments
118
+ /// - `entry` - The entry point of the program to build. Defaults to "./src".
119
+ /// - `output` - The directory where the output files will be generated. Defaults to "./output".
120
+ /// - `watch` - Whether to watch for changes and rebuild. Defaults to "true".
121
+ /// - `debug` - Whether to print debug information. Defaults to "false".
122
+ /// - `compress` - Whether to compress the output files. Defaults to "false".
123
+ ///
124
+ /// ### Example
125
+ /// ```bash
126
+ /// devalang build --entry ./src --output ./output --watch true --debug false --compress false
127
+ /// ```
128
+ ///
129
+ Build {
130
+ #[arg(short, long)]
131
+ /// The entry point of the program to build.
132
+ ///
133
+ entry: Option<String>,
134
+
135
+ #[arg(short, long)]
136
+ /// The directory where the output files will be generated.
137
+ ///
138
+ output: Option<String>,
139
+
140
+ #[arg(long, value_enum, value_delimiter = ',', default_value = "wav,mid")]
141
+ /// Which output formats to generate. Comma-separated list is accepted.
142
+ ///
143
+ /// ### Default value
144
+ /// - `wav,mid`
145
+ ///
146
+ output_format: Vec<OutputFormat>,
147
+
148
+ #[arg(long, default_value = "wav16")]
149
+ /// Audio format to use for file outputs (affects WAV export).
150
+ ///
151
+ /// ### Default value
152
+ /// - `wav16`
153
+ ///
154
+ audio_format: AudioFormat,
155
+
156
+ #[arg(long, default_value_t = 44100u32)]
157
+ /// Sample rate to use for audio export and playback (e.g. 44100, 48000)
158
+ sample_rate: u32,
159
+
160
+ #[arg(long, default_value_t = false)]
161
+ /// Whether to watch for changes and rebuild.
162
+ ///
163
+ /// ### Default value
164
+ /// - `false`
165
+ ///
166
+ watch: bool,
167
+
168
+ #[arg(short, long, default_value_t = false)]
169
+ /// Whether to print debug information.
170
+ ///
171
+ /// ### Default value
172
+ /// - `false`
173
+ ///
174
+ debug: bool,
175
+
176
+ #[arg(short, long, default_value_t = false)]
177
+ /// Whether to compress the output files.
178
+ ///
179
+ /// ### Default value
180
+ /// - `false`
181
+ ///
182
+ compress: bool,
183
+ },
184
+
185
+ /// Analyze the program for errors and warnings.
186
+ ///
187
+ /// ### Arguments
188
+ /// - `entry` - The entry point of the program to analyze. Defaults to "./src".
189
+ /// - `output` - The directory where the output files will be generated. Defaults to "./output".
190
+ /// - `watch` - Whether to watch for changes and re-analyze. Defaults to "true".
191
+ /// - `debug` - Whether to print debug information. Defaults to "false".
192
+ ///
193
+ /// ### Example
194
+ /// ```bash
195
+ /// devalang check --entry ./src --output ./output --watch true --debug false
196
+ /// ```
197
+ ///
198
+ Check {
199
+ #[arg(short, long)]
200
+ /// The entry point of the program to analyze.
201
+ entry: Option<String>,
202
+
203
+ #[arg(short, long)]
204
+ /// The directory where the output files will be generated.
205
+ output: Option<String>,
206
+
207
+ #[arg(long, default_value_t = false)]
208
+ /// Whether to watch for changes and re-analyze.
209
+ ///
210
+ /// ### Default value
211
+ /// - `false`
212
+ ///
213
+ watch: bool,
214
+
215
+ #[arg(short, long, default_value_t = false)]
216
+ /// Whether to print debug information.
217
+ ///
218
+ /// ### Default value
219
+ /// - `false`
220
+ ///
221
+ debug: bool,
222
+ },
223
+
224
+ /// Play the program and generate output files.
225
+ ///
226
+ /// ### Arguments
227
+ /// - `entry` - The entry point of the program to play. Defaults to "./src".
228
+ /// - `output` - The directory where the output files will be generated. Defaults to "./output".
229
+ /// - `watch` - Whether to watch for changes and re-play. Defaults to "false".
230
+ /// - `repeat` - Whether to replay the program after it finishes. Defaults to "false".
231
+ /// - `debug` - Whether to print debug information. Defaults to "false".
232
+ ///
233
+ /// Note: `--repeat` and `--watch` cannot be used together. Instead use `repeat` to watch for changes and replay the program.
234
+ ///
235
+ /// ### Example
236
+ /// ```bash
237
+ /// devalang play --entry ./src --output ./output --repeat true --debug false
238
+ /// ```
239
+ ///
240
+ Play {
241
+ #[arg(short, long)]
242
+ /// The entry point of the program to play.
243
+ entry: Option<String>,
244
+
245
+ #[arg(short, long)]
246
+ /// The directory where the output files will be generated.
247
+ output: Option<String>,
248
+
249
+ #[arg(long, default_value_t = 44100u32)]
250
+ /// Sample rate to use for playback (e.g. 44100, 48000)
251
+ sample_rate: u32,
252
+
253
+ #[arg(long, default_value = "wav16")]
254
+ /// Audio format to use for file outputs (affects WAV export).
255
+ ///
256
+ /// ### Default value
257
+ /// - `wav16`
258
+ ///
259
+ audio_format: AudioFormat,
260
+
261
+ #[arg(long, default_value_t = false)]
262
+ /// Whether to watch for changes and re-play.
263
+ ///
264
+ /// ### Default value
265
+ /// - `false`
266
+ ///
267
+ watch: bool,
268
+
269
+ #[arg(long, default_value_t = false)]
270
+ /// Whether to replay the program after it finishes.
271
+ ///
272
+ /// ### Default value
273
+ /// - `false`
274
+ ///
275
+ repeat: bool,
276
+
277
+ #[arg(short, long, default_value_t = false)]
278
+ /// Whether to print debug information.
279
+ ///
280
+ /// ### Default value
281
+ /// - `false`
282
+ ///
283
+ debug: bool,
284
+ },
285
+
286
+ /// Update the Devalang CLI to the latest version.
287
+ ///
288
+ /// ### Arguments
289
+ /// - `only` - Selects what to update (separated by commas). Defaults to updating all components.
290
+ ///
291
+ Update {
292
+ // #[arg(long, default_value_t = false)]
293
+ /// Whether to allow updates when the working directory is dirty.
294
+ // allow_dirty: bool,
295
+
296
+ #[arg(long, default_value = "")]
297
+ /// Selects what to update (separated by commas).
298
+ only: Option<String>,
299
+ },
300
+
301
+ /// Install templates, banks, or plugins.
302
+ ///
303
+ /// ### Subcommands
304
+ /// - `template` - Installs a template.
305
+ /// - `bank` - Installs a bank.
306
+ /// - `plugin` - Installs a plugin.
307
+ /// - `preset` - Installs a preset.
308
+ ///
309
+ Install {
310
+ #[command(subcommand)]
311
+ command: InstallCommand,
312
+ },
313
+
314
+ /// Discover available local addons for Devalang.
315
+ ///
316
+ Discover {},
317
+
318
+ /// Manage banks for Devalang projects.
319
+ ///
320
+ /// ### Subcommands
321
+ /// - `list` - Lists all available banks.
322
+ /// - `info <name>` - Displays information about a specific bank.
323
+ ///
324
+ Bank {
325
+ #[command(subcommand)]
326
+ command: BankCommand,
327
+ },
328
+
329
+ /// Telemetry settings for Devalang.
330
+ ///
331
+ /// ### Subcommands
332
+ /// - `enable` - Enables telemetry data collection.
333
+ /// - `disable` - Disables telemetry data collection.
334
+ ///
335
+ Telemetry {
336
+ #[command(subcommand)]
337
+ command: TelemetryCommand,
338
+ },
339
+
340
+ /// Generate addon scaffolding for Devalang.
341
+ ///
342
+ /// ### Subcommands
343
+ /// - `bank` - Generates a bank scaffold.
344
+ /// - `plugin` - Generates a plugin scaffold.
345
+ /// - `preset` - Generates a preset scaffold.
346
+ ///
347
+ // Scaffold {
348
+ // #[command(subcommand)]
349
+ // command: ScaffoldCommand,
350
+ // },
351
+
352
+ /// Log in to your Devaloop account.
353
+ ///
354
+ Login {},
355
+
356
+ /// Log out of your Devaloop account.
357
+ ///
358
+ Logout {},
359
+ }