@devaloop/devalang 0.0.1-beta.2 → 0.0.1-beta.3

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 (159) hide show
  1. package/Cargo.toml +84 -81
  2. package/README.md +3 -2
  3. package/docs/CHANGELOG.md +41 -0
  4. package/docs/ROADMAP.md +3 -3
  5. package/examples/chain.deva +19 -0
  6. package/examples/plugin.deva +10 -10
  7. package/examples/routing.deva +23 -0
  8. package/out-tsc/bin/project-version.json +6 -0
  9. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +8 -8
  10. package/out-tsc/scripts/version/copy-to-binary.d.ts +1 -0
  11. package/out-tsc/scripts/version/copy-to-binary.js +79 -0
  12. package/package.json +23 -10
  13. package/project-version.json +3 -3
  14. package/rust/bindings/Cargo.toml +9 -0
  15. package/rust/bindings/src/lib.rs +86 -0
  16. package/rust/cli/addon/commands.rs +35 -0
  17. package/rust/cli/addon/download.rs +234 -0
  18. package/rust/cli/addon/install.rs +33 -0
  19. package/rust/cli/addon/list.rs +224 -0
  20. package/rust/cli/addon/metadata.rs +124 -0
  21. package/rust/cli/addon/mod.rs +8 -0
  22. package/rust/cli/addon/remove.rs +271 -0
  23. package/rust/cli/addon/update.rs +305 -0
  24. package/rust/cli/{install/addon.rs → addon/utils.rs} +109 -118
  25. package/rust/cli/build/commands.rs +153 -153
  26. package/rust/cli/build/process.rs +165 -165
  27. package/rust/cli/check/mod.rs +208 -208
  28. package/rust/cli/discover/commands.rs +275 -253
  29. package/rust/cli/discover/config.rs +109 -111
  30. package/rust/cli/discover/fs.rs +19 -19
  31. package/rust/cli/discover/install.rs +214 -103
  32. package/rust/cli/discover/metadata.rs +48 -48
  33. package/rust/cli/discover/mod.rs +5 -5
  34. package/rust/cli/me/commands.rs +52 -0
  35. package/rust/cli/me/mod.rs +1 -0
  36. package/rust/cli/mod.rs +12 -12
  37. package/rust/cli/parser.rs +30 -69
  38. package/rust/cli/play/commands.rs +375 -375
  39. package/rust/cli/play/process.rs +159 -159
  40. package/rust/core/audio/engine/driver.rs +19 -2
  41. package/rust/core/audio/engine/export.rs +169 -169
  42. package/rust/core/audio/engine/mod.rs +56 -56
  43. package/rust/core/audio/engine/notes/dsp.rs +88 -85
  44. package/rust/core/audio/engine/notes/mod.rs +53 -44
  45. package/rust/core/audio/engine/notes/params.rs +294 -294
  46. package/rust/core/audio/engine/sample/insert.rs +148 -47
  47. package/rust/core/audio/engine/sample/mod.rs +40 -40
  48. package/rust/core/audio/engine/sample/padding.rs +170 -170
  49. package/rust/core/audio/evaluator/condition.rs +61 -61
  50. package/rust/core/audio/evaluator/numeric.rs +152 -152
  51. package/rust/core/audio/evaluator/rhs.rs +16 -16
  52. package/rust/core/audio/evaluator/string_expr.rs +94 -94
  53. package/rust/core/audio/interpreter/driver.rs +574 -574
  54. package/rust/core/audio/interpreter/mod.rs +2 -2
  55. package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +9 -5
  56. package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +398 -384
  57. package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +323 -0
  58. package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +1 -0
  59. package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +66 -11
  60. package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +3 -3
  61. package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +192 -192
  62. package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +24 -24
  63. package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +116 -116
  64. package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +97 -97
  65. package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +100 -100
  66. package/rust/core/audio/interpreter/statements/automate.rs +16 -16
  67. package/rust/core/audio/interpreter/statements/call.rs +31 -1
  68. package/rust/core/audio/interpreter/statements/condition.rs +72 -72
  69. package/rust/core/audio/interpreter/statements/function.rs +24 -24
  70. package/rust/core/audio/interpreter/statements/let_.rs +36 -36
  71. package/rust/core/audio/interpreter/statements/load.rs +17 -17
  72. package/rust/core/audio/interpreter/statements/loop_.rs +115 -115
  73. package/rust/core/audio/interpreter/statements/spawn.rs +51 -2
  74. package/rust/core/audio/interpreter/statements/trigger.rs +242 -239
  75. package/rust/core/audio/loader/trigger.rs +98 -98
  76. package/rust/core/audio/player.rs +70 -70
  77. package/rust/core/audio/special/mod.rs +9 -9
  78. package/rust/core/builder/mod.rs +129 -129
  79. package/rust/core/debugger/lexer.rs +27 -27
  80. package/rust/core/debugger/logs.rs +52 -52
  81. package/rust/core/debugger/preprocessor.rs +27 -27
  82. package/rust/core/debugger/store.rs +38 -38
  83. package/rust/core/lexer/driver.rs +59 -59
  84. package/rust/core/lexer/handler/arrow.rs +82 -82
  85. package/rust/core/lexer/handler/at.rs +21 -21
  86. package/rust/core/lexer/handler/brace.rs +41 -41
  87. package/rust/core/lexer/handler/colon.rs +21 -21
  88. package/rust/core/lexer/handler/comment.rs +30 -30
  89. package/rust/core/lexer/handler/dot.rs +21 -21
  90. package/rust/core/lexer/handler/driver.rs +337 -337
  91. package/rust/core/lexer/handler/identifier.rs +47 -47
  92. package/rust/core/lexer/handler/indent.rs +66 -66
  93. package/rust/core/lexer/handler/mod.rs +15 -15
  94. package/rust/core/lexer/handler/newline.rs +23 -23
  95. package/rust/core/lexer/handler/number.rs +31 -31
  96. package/rust/core/lexer/handler/operator.rs +46 -46
  97. package/rust/core/lexer/handler/parenthesis.rs +41 -41
  98. package/rust/core/lexer/handler/slash.rs +21 -21
  99. package/rust/core/lexer/handler/string.rs +63 -63
  100. package/rust/core/lexer/mod.rs +3 -3
  101. package/rust/core/mod.rs +9 -9
  102. package/rust/core/parser/driver/block.rs +111 -111
  103. package/rust/core/parser/driver/cursor.rs +82 -82
  104. package/rust/core/parser/driver/driver_impl.rs +21 -1
  105. package/rust/core/parser/driver/mod.rs +6 -6
  106. package/rust/core/parser/driver/parse_array.rs +120 -120
  107. package/rust/core/parser/driver/parse_map.rs +247 -223
  108. package/rust/core/parser/driver/parser.rs +160 -160
  109. package/rust/core/parser/handler/arrow_call.rs +65 -14
  110. package/rust/core/parser/handler/identifier/synth.rs +171 -135
  111. package/rust/core/parser/handler/mod.rs +9 -9
  112. package/rust/core/parser/handler/pattern.rs +24 -1
  113. package/rust/core/plugin/loader.rs +137 -137
  114. package/rust/core/plugin/mod.rs +2 -2
  115. package/rust/core/plugin/runner/non_wasm.rs +481 -297
  116. package/rust/core/plugin/runner/wasm32.rs +1 -0
  117. package/rust/core/preprocessor/loader/inject.rs +313 -278
  118. package/rust/core/preprocessor/loader/loader_helpers.rs +110 -110
  119. package/rust/core/preprocessor/loader/mod.rs +235 -235
  120. package/rust/core/preprocessor/module.rs +55 -55
  121. package/rust/core/preprocessor/processor/handlers.rs +107 -107
  122. package/rust/core/preprocessor/resolver/bank.rs +49 -49
  123. package/rust/core/preprocessor/resolver/call.rs +124 -124
  124. package/rust/core/preprocessor/resolver/condition.rs +95 -95
  125. package/rust/core/preprocessor/resolver/driver.rs +324 -324
  126. package/rust/core/preprocessor/resolver/function.rs +69 -69
  127. package/rust/core/preprocessor/resolver/group.rs +122 -122
  128. package/rust/core/preprocessor/resolver/let_.rs +32 -32
  129. package/rust/core/preprocessor/resolver/loop_.rs +318 -318
  130. package/rust/core/preprocessor/resolver/mod.rs +16 -16
  131. package/rust/core/preprocessor/resolver/pattern.rs +95 -83
  132. package/rust/core/preprocessor/resolver/spawn.rs +99 -99
  133. package/rust/core/preprocessor/resolver/synth.rs +54 -54
  134. package/rust/core/preprocessor/resolver/tempo.rs +48 -48
  135. package/rust/core/preprocessor/resolver/trigger.rs +116 -116
  136. package/rust/core/preprocessor/resolver/value.rs +176 -176
  137. package/rust/core/store/global.rs +57 -57
  138. package/rust/lib.rs +323 -323
  139. package/rust/macros/Cargo.toml +14 -0
  140. package/rust/macros/src/lib.rs +52 -0
  141. package/rust/main.rs +311 -142
  142. package/rust/types/Cargo.toml +1 -1
  143. package/rust/types/src/addons.rs +3 -1
  144. package/rust/types/src/config.rs +1 -3
  145. package/rust/utils/Cargo.toml +5 -2
  146. package/rust/utils/src/file.rs +397 -14
  147. package/rust/utils/src/path.rs +31 -2
  148. package/rust/utils/src/version.rs +38 -7
  149. package/rust/web/auth.rs +5 -0
  150. package/rust/web/forge.rs +5 -0
  151. package/rust/web/mod.rs +5 -3
  152. package/typescript/scripts/version/copy-to-binary.ts +82 -0
  153. package/rust/cli/bank/api.rs +0 -122
  154. package/rust/cli/bank/commands.rs +0 -306
  155. package/rust/cli/bank/mod.rs +0 -29
  156. package/rust/cli/install/bank.rs +0 -72
  157. package/rust/cli/install/commands.rs +0 -35
  158. package/rust/cli/install/mod.rs +0 -4
  159. package/rust/cli/install/plugin.rs +0 -80
@@ -0,0 +1,52 @@
1
+ use proc_macro::TokenStream;
2
+ use quote::quote;
3
+ use syn::{ parse_macro_input, ItemFn, LitStr };
4
+
5
+ #[proc_macro_attribute]
6
+ pub fn export_plugin(args: TokenStream, item: TokenStream) -> TokenStream {
7
+ let input = parse_macro_input!(item as ItemFn);
8
+
9
+ // default export name = function name
10
+ let export_name = if args.is_empty() {
11
+ input.sig.ident.to_string()
12
+ } else {
13
+ // accept single string literal: #[export_plugin("synth")]
14
+ let s = parse_macro_input!(args as LitStr);
15
+ s.value()
16
+ };
17
+
18
+ let fn_ident = &input.sig.ident;
19
+ let vis = &input.vis;
20
+ let sig = &input.sig;
21
+ let block = &input.block;
22
+
23
+ let wrapper_ident = syn::Ident::new(&export_name, fn_ident.span());
24
+
25
+ let expanded =
26
+ quote! {
27
+ #vis #sig #block
28
+
29
+ #[no_mangle]
30
+ pub extern "C" fn #wrapper_ident(
31
+ out_ptr: *mut f32,
32
+ out_len: i32,
33
+ freq: f32,
34
+ amp: f32,
35
+ duration_ms: i32,
36
+ sample_rate: i32,
37
+ channels: i32,
38
+ ) {
39
+ if out_ptr.is_null() { return; }
40
+ let out_len_usz = out_len.max(0) as usize;
41
+ let ch = channels.max(1) as usize;
42
+ let frames = (out_len_usz / ch) as u32;
43
+ let params = devalang_bindings::BufferParams { sample_rate: sample_rate.max(1) as u32, channels: channels.max(1) as u32, frames };
44
+ unsafe {
45
+ let out = core::slice::from_raw_parts_mut(out_ptr, out_len_usz);
46
+ #fn_ident(out, params, devalang_bindings::Note::default(), freq, amp, duration_ms.max(1) as u32);
47
+ }
48
+ }
49
+ };
50
+
51
+ TokenStream::from(expanded)
52
+ }
package/rust/main.rs CHANGED
@@ -5,38 +5,38 @@ pub mod config;
5
5
  pub mod core;
6
6
  pub mod web;
7
7
  pub use devalang_utils as utils;
8
- use devalang_utils::path::ensure_deva_dir;
9
8
 
9
+ use crate::cli::addon::commands::handle_install_addon_command;
10
+ use crate::cli::addon::commands::handle_list_addon_command;
11
+ use crate::cli::addon::commands::handle_remove_addon_command;
12
+ use crate::cli::addon::commands::handle_update_addon_command;
13
+ use crate::cli::me::commands::handle_me_command;
14
+ use crate::cli::parser::AddonCommand;
10
15
  use crate::cli::telemetry::send::send_telemetry_event;
11
16
  use crate::config::settings::ensure_user_config_file_exists;
12
17
  use crate::config::settings::write_user_config_file;
13
18
  use crate::{
14
19
  cli::{
15
- bank::{
16
- handle_bank_available_command, handle_bank_info_command, handle_bank_list_command,
17
- handle_remove_bank_command, handle_update_bank_command,
18
- },
19
20
  build::commands::handle_build_command,
20
21
  check::handle_check_command,
21
22
  discover::commands::handle_discover_command,
22
23
  init::commands::handle_init_command,
23
- install::commands::handle_install_command,
24
24
  login::commands::handle_login_command,
25
- parser::{BankCommand, Cli, Commands, InstallCommand, TelemetryCommand, TemplateCommand},
25
+ parser::{Cli, Commands, TelemetryCommand, TemplateCommand},
26
26
  play::commands::handle_play_command,
27
27
  telemetry::{
28
28
  commands::{handle_telemetry_disable_command, handle_telemetry_enable_command},
29
29
  event_creator::{TelemetryEventCreator, TelemetryEventExt},
30
30
  },
31
31
  template::commands::{handle_template_info_command, handle_template_list_command},
32
- update::commands::handle_update_command,
33
32
  },
34
33
  config::driver::ProjectConfig,
35
34
  utils::first_usage::check_is_first_usage,
36
35
  };
37
36
  use clap::CommandFactory;
38
37
  use clap::FromArgMatches;
39
- use devalang_types::{AddonType, TelemetryErrorLevel};
38
+ use devalang_types::TelemetryErrorLevel;
39
+ use devalang_utils::path::ensure_deva_dir;
40
40
  use std::io;
41
41
 
42
42
  #[tokio::main]
@@ -51,7 +51,7 @@ async fn main() -> io::Result<()> {
51
51
  cmd = cmd.version(version_static).before_help(signature_static);
52
52
 
53
53
  let raw_args: Vec<String> = std::env::args().collect();
54
- if raw_args.iter().any(|a| (a == "--version" || a == "-V")) {
54
+ if raw_args.iter().any(|a| a == "--version" || a == "-V") {
55
55
  println!("{}", signature_static);
56
56
  return Ok(());
57
57
  }
@@ -107,7 +107,7 @@ async fn main() -> io::Result<()> {
107
107
  let logger = devalang_utils::logger::Logger::new();
108
108
  logger.log_message(
109
109
  devalang_utils::logger::LogLevel::Error,
110
- &format!(" Check failed: {}", err),
110
+ &format!("[error] Check failed: {}", err),
111
111
  );
112
112
  had_error = true;
113
113
  last_error_message = Some(format!("check failed: {}", err));
@@ -139,7 +139,7 @@ async fn main() -> io::Result<()> {
139
139
  let logger = devalang_utils::logger::Logger::new();
140
140
  logger.log_message(
141
141
  devalang_utils::logger::LogLevel::Error,
142
- &format!(" Build failed: {}", err),
142
+ &format!("[error] Build failed: {}", err),
143
143
  );
144
144
  had_error = true;
145
145
  last_error_message = Some(format!("build failed: {}", err));
@@ -169,7 +169,7 @@ async fn main() -> io::Result<()> {
169
169
  let logger = devalang_utils::logger::Logger::new();
170
170
  logger.log_message(
171
171
  devalang_utils::logger::LogLevel::Error,
172
- &format!(" Play failed: {}", err),
172
+ &format!("[error] Play failed: {}", err),
173
173
  );
174
174
  had_error = true;
175
175
  last_error_message = Some(format!("play failed: {}", err));
@@ -177,144 +177,300 @@ async fn main() -> io::Result<()> {
177
177
  }
178
178
  }
179
179
 
180
- Commands::Install { command } => match command {
181
- InstallCommand::Template { name } => {
182
- if let Err(err) = handle_install_command(name, AddonType::Template).await {
183
- let logger = devalang_utils::logger::Logger::new();
184
- logger.log_message(
185
- devalang_utils::logger::LogLevel::Error,
186
- &format!("❌ Failed to install template: {}", err),
187
- );
188
- had_error = true;
189
- last_error_message = Some(format!("install template failed: {}", err));
190
- exit_code = Some(1);
191
- }
192
- }
193
- InstallCommand::Bank { name } => {
194
- if let Err(err) = handle_install_command(name, AddonType::Bank).await {
195
- let logger = devalang_utils::logger::Logger::new();
196
- logger.log_message(
197
- devalang_utils::logger::LogLevel::Error,
198
- &format!("❌ Failed to install bank: {}", err),
199
- );
200
- had_error = true;
201
- last_error_message = Some(format!("install bank failed: {}", err));
202
- exit_code = Some(1);
203
- }
204
- }
205
- InstallCommand::Plugin { name } => {
206
- if let Err(err) = handle_install_command(name, AddonType::Plugin).await {
207
- let logger = devalang_utils::logger::Logger::new();
208
- logger.log_message(
209
- devalang_utils::logger::LogLevel::Error,
210
- &format!("❌ Failed to install plugin: {}", err),
211
- );
212
- had_error = true;
213
- last_error_message = Some(format!("install plugin failed: {}", err));
214
- exit_code = Some(1);
215
- }
216
- }
217
- InstallCommand::Preset { name } => {
218
- if let Err(err) = handle_install_command(name, AddonType::Preset).await {
219
- let logger = devalang_utils::logger::Logger::new();
220
- logger.log_message(
221
- devalang_utils::logger::LogLevel::Error,
222
- &format!("❌ Failed to install preset: {}", err),
223
- );
224
- had_error = true;
225
- last_error_message = Some(format!("install preset failed: {}", err));
226
- exit_code = Some(1);
227
- }
228
- }
229
- },
230
-
231
- Commands::Bank { command } => match command {
232
- BankCommand::List => {
233
- if let Err(err) = handle_bank_list_command().await {
234
- let logger = devalang_utils::logger::Logger::new();
235
- logger.log_message(
236
- devalang_utils::logger::LogLevel::Error,
237
- &format!("❌ Failed to list local banks: {}", err),
238
- );
239
- had_error = true;
240
- last_error_message = Some(format!("bank list failed: {}", err));
241
- exit_code = Some(1);
242
- }
243
- }
244
-
245
- BankCommand::Available => {
246
- if let Err(err) = handle_bank_available_command().await {
247
- let logger = devalang_utils::logger::Logger::new();
248
- logger.log_message(
249
- devalang_utils::logger::LogLevel::Error,
250
- &format!("❌ Failed to list available banks: {}", err),
251
- );
252
- had_error = true;
253
- last_error_message = Some(format!("bank available failed: {}", err));
254
- exit_code = Some(1);
180
+ Commands::Addon { command } => {
181
+ match command {
182
+ AddonCommand::Install { name, no_clear_tmp } => {
183
+ if let Err(err) = handle_install_addon_command(name, no_clear_tmp).await {
184
+ let logger = devalang_utils::logger::Logger::new();
185
+ logger.log_message(
186
+ devalang_utils::logger::LogLevel::Error,
187
+ &format!("[error] Failed to install addon: {}", err),
188
+ );
189
+ had_error = true;
190
+ last_error_message = Some(format!("install addon failed: {}", err));
191
+ exit_code = Some(1);
192
+ }
255
193
  }
256
- }
257
194
 
258
- BankCommand::Info { name } => {
259
- if let Err(err) = handle_bank_info_command(name).await {
260
- let logger = devalang_utils::logger::Logger::new();
261
- logger.log_message(
262
- devalang_utils::logger::LogLevel::Error,
263
- &format!(" Failed to get bank info: {}", err),
264
- );
265
- had_error = true;
266
- last_error_message = Some(format!("bank info failed: {}", err));
267
- exit_code = Some(1);
195
+ AddonCommand::Update { name } => {
196
+ if let Err(err) = handle_update_addon_command(name).await {
197
+ let logger = devalang_utils::logger::Logger::new();
198
+ logger.log_message(
199
+ devalang_utils::logger::LogLevel::Error,
200
+ &format!("[error] Failed to update addon: {}", err),
201
+ );
202
+ had_error = true;
203
+ last_error_message = Some(format!("update addon failed: {}", err));
204
+ exit_code = Some(1);
205
+ }
268
206
  }
269
- }
270
-
271
- BankCommand::Remove { name } => {
272
- if let Err(err) = handle_remove_bank_command(name).await {
273
- let logger = devalang_utils::logger::Logger::new();
274
- logger.log_message(
275
- devalang_utils::logger::LogLevel::Error,
276
- &format!("❌ Failed to remove bank: {}", err),
277
- );
278
- had_error = true;
279
- last_error_message = Some(format!("bank remove failed: {}", err));
280
- exit_code = Some(1);
281
- }
282
- }
283
207
 
284
- BankCommand::Update { name } => {
285
- if let Err(err) = handle_update_bank_command(name).await {
286
- let logger = devalang_utils::logger::Logger::new();
287
- logger.log_message(
288
- devalang_utils::logger::LogLevel::Error,
289
- &format!(" Failed to update bank: {}", err),
290
- );
291
- had_error = true;
292
- last_error_message = Some(format!("bank update failed: {}", err));
293
- exit_code = Some(1);
208
+ AddonCommand::List {} => {
209
+ if let Err(err) = handle_list_addon_command().await {
210
+ let logger = devalang_utils::logger::Logger::new();
211
+ logger.log_message(
212
+ devalang_utils::logger::LogLevel::Error,
213
+ &format!("[error] Failed to list local addons: {}", err),
214
+ );
215
+ had_error = true;
216
+ last_error_message = Some(format!("addon list failed: {}", err));
217
+ exit_code = Some(1);
218
+ }
294
219
  }
295
- }
296
- },
297
220
 
298
- Commands::Update { only } => {
299
- if let Err(err) = handle_update_command(only).await {
300
- let logger = devalang_utils::logger::Logger::new();
301
- logger.log_message(
302
- devalang_utils::logger::LogLevel::Error,
303
- &format!(" Update failed: {}", err),
304
- );
305
- had_error = true;
306
- last_error_message = Some(format!("update failed: {}", err));
307
- exit_code = Some(1);
221
+ AddonCommand::Remove { name } => {
222
+ if let Err(err) = handle_remove_addon_command(name).await {
223
+ let logger = devalang_utils::logger::Logger::new();
224
+ logger.log_message(
225
+ devalang_utils::logger::LogLevel::Error,
226
+ &format!("[error] Failed to remove addon: {}", err),
227
+ );
228
+ had_error = true;
229
+ last_error_message = Some(format!("remove addon failed: {}", err));
230
+ exit_code = Some(1);
231
+ }
232
+ } // AddonCommand::Bank { command } => {
233
+ // match command {
234
+ // BankCommand::List => {
235
+ // if let Err(err) = handle_bank_list_command().await {
236
+ // let logger = devalang_utils::logger::Logger::new();
237
+ // logger.log_message(
238
+ // devalang_utils::logger::LogLevel::Error,
239
+ // &format!("[error] Failed to list local banks: {}", err)
240
+ // );
241
+ // had_error = true;
242
+ // last_error_message = Some(format!("bank list failed: {}", err));
243
+ // exit_code = Some(1);
244
+ // }
245
+ // }
246
+
247
+ // BankCommand::Available => {
248
+ // if let Err(err) = handle_bank_available_command().await {
249
+ // let logger = devalang_utils::logger::Logger::new();
250
+ // logger.log_message(
251
+ // devalang_utils::logger::LogLevel::Error,
252
+ // &format!("[error] Failed to list available banks: {}", err)
253
+ // );
254
+ // had_error = true;
255
+ // last_error_message = Some(
256
+ // format!("bank available failed: {}", err)
257
+ // );
258
+ // exit_code = Some(1);
259
+ // }
260
+ // }
261
+
262
+ // // BankCommand::Info { name } => {
263
+ // // if let Err(err) = handle_bank_info_command(name).await {
264
+ // // let logger = devalang_utils::logger::Logger::new();
265
+ // // logger.log_message(
266
+ // // devalang_utils::logger::LogLevel::Error,
267
+ // // &format!("[error] Failed to get bank info: {}", err)
268
+ // // );
269
+ // // had_error = true;
270
+ // // last_error_message = Some(format!("bank info failed: {}", err));
271
+ // // exit_code = Some(1);
272
+ // // }
273
+ // // }
274
+
275
+ // // BankCommand::Remove { name } => {
276
+ // // if let Err(err) = handle_remove_bank_command(name).await {
277
+ // // let logger = devalang_utils::logger::Logger::new();
278
+ // // logger.log_message(
279
+ // // devalang_utils::logger::LogLevel::Error,
280
+ // // &format!("[error] Failed to remove bank: {}", err)
281
+ // // );
282
+ // // had_error = true;
283
+ // // last_error_message = Some(format!("bank remove failed: {}", err));
284
+ // // exit_code = Some(1);
285
+ // // }
286
+ // // }
287
+
288
+ // // BankCommand::Update { name } => {
289
+ // // if let Err(err) = handle_update_bank_command(name).await {
290
+ // // let logger = devalang_utils::logger::Logger::new();
291
+ // // logger.log_message(
292
+ // // devalang_utils::logger::LogLevel::Error,
293
+ // // &format!("[error] Failed to update bank: {}", err)
294
+ // // );
295
+ // // had_error = true;
296
+ // // last_error_message = Some(format!("bank update failed: {}", err));
297
+ // // exit_code = Some(1);
298
+ // // }
299
+ // // }
300
+ // }
301
+ // }
302
+
303
+ // AddonCommand::Plugin { command} => {
304
+ // match command {
305
+ // PluginCommand::List => {
306
+ // if let Err(err) = handle_plugin_list_command().await {
307
+ // let logger = devalang_utils::logger::Logger::new();
308
+ // logger.log_message(
309
+ // devalang_utils::logger::LogLevel::Error,
310
+ // &format!("[error] Failed to list local plugins: {}", err)
311
+ // );
312
+ // had_error = true;
313
+ // last_error_message = Some(format!("plugin list failed: {}", err));
314
+ // exit_code = Some(1);
315
+ // }
316
+ // }
317
+
318
+ // PluginCommand::Available => {
319
+ // if let Err(err) = handle_plugin_available_command().await {
320
+ // let logger = devalang_utils::logger::Logger::new();
321
+ // logger.log_message(
322
+ // devalang_utils::logger::LogLevel::Error,
323
+ // &format!("[error] Failed to list available plugins: {}", err)
324
+ // );
325
+ // had_error = true;
326
+ // last_error_message = Some(
327
+ // format!("plugin available failed: {}", err)
328
+ // );
329
+ // exit_code = Some(1);
330
+ // }
331
+ // }
332
+ // }
333
+ // }
308
334
  }
309
335
  }
310
336
 
337
+ // Commands::Install { command } => match command {
338
+ // InstallCommand::Template { name } => {
339
+ // if let Err(err) = handle_install_command(name, AddonType::Template).await {
340
+ // let logger = devalang_utils::logger::Logger::new();
341
+ // logger.log_message(
342
+ // devalang_utils::logger::LogLevel::Error,
343
+ // &format!("[error] Failed to install template: {}", err),
344
+ // );
345
+ // had_error = true;
346
+ // last_error_message = Some(format!("install template failed: {}", err));
347
+ // exit_code = Some(1);
348
+ // }
349
+ // }
350
+ // InstallCommand::Bank { name } => {
351
+ // if let Err(err) = handle_install_command(name, AddonType::Bank).await {
352
+ // let logger = devalang_utils::logger::Logger::new();
353
+ // logger.log_message(
354
+ // devalang_utils::logger::LogLevel::Error,
355
+ // &format!("[error] Failed to install bank: {}", err),
356
+ // );
357
+ // had_error = true;
358
+ // last_error_message = Some(format!("install bank failed: {}", err));
359
+ // exit_code = Some(1);
360
+ // }
361
+ // }
362
+ // InstallCommand::Plugin { name } => {
363
+ // if let Err(err) = handle_install_command(name, AddonType::Plugin).await {
364
+ // let logger = devalang_utils::logger::Logger::new();
365
+ // logger.log_message(
366
+ // devalang_utils::logger::LogLevel::Error,
367
+ // &format!("[error] Failed to install plugin: {}", err),
368
+ // );
369
+ // had_error = true;
370
+ // last_error_message = Some(format!("install plugin failed: {}", err));
371
+ // exit_code = Some(1);
372
+ // }
373
+ // }
374
+ // InstallCommand::Preset { name } => {
375
+ // if let Err(err) = handle_install_command(name, AddonType::Preset).await {
376
+ // let logger = devalang_utils::logger::Logger::new();
377
+ // logger.log_message(
378
+ // devalang_utils::logger::LogLevel::Error,
379
+ // &format!("[error] Failed to install preset: {}", err),
380
+ // );
381
+ // had_error = true;
382
+ // last_error_message = Some(format!("install preset failed: {}", err));
383
+ // exit_code = Some(1);
384
+ // }
385
+ // }
386
+ // },
387
+
388
+ // Commands::Bank { command } => match command {
389
+ // BankCommand::List => {
390
+ // if let Err(err) = handle_bank_list_command().await {
391
+ // let logger = devalang_utils::logger::Logger::new();
392
+ // logger.log_message(
393
+ // devalang_utils::logger::LogLevel::Error,
394
+ // &format!("[error] Failed to list local banks: {}", err),
395
+ // );
396
+ // had_error = true;
397
+ // last_error_message = Some(format!("bank list failed: {}", err));
398
+ // exit_code = Some(1);
399
+ // }
400
+ // }
401
+
402
+ // BankCommand::Available => {
403
+ // if let Err(err) = handle_bank_available_command().await {
404
+ // let logger = devalang_utils::logger::Logger::new();
405
+ // logger.log_message(
406
+ // devalang_utils::logger::LogLevel::Error,
407
+ // &format!("[error] Failed to list available banks: {}", err),
408
+ // );
409
+ // had_error = true;
410
+ // last_error_message = Some(format!("bank available failed: {}", err));
411
+ // exit_code = Some(1);
412
+ // }
413
+ // }
414
+
415
+ // BankCommand::Info { name } => {
416
+ // if let Err(err) = handle_bank_info_command(name).await {
417
+ // let logger = devalang_utils::logger::Logger::new();
418
+ // logger.log_message(
419
+ // devalang_utils::logger::LogLevel::Error,
420
+ // &format!("[error] Failed to get bank info: {}", err),
421
+ // );
422
+ // had_error = true;
423
+ // last_error_message = Some(format!("bank info failed: {}", err));
424
+ // exit_code = Some(1);
425
+ // }
426
+ // }
427
+
428
+ // BankCommand::Remove { name } => {
429
+ // if let Err(err) = handle_remove_bank_command(name).await {
430
+ // let logger = devalang_utils::logger::Logger::new();
431
+ // logger.log_message(
432
+ // devalang_utils::logger::LogLevel::Error,
433
+ // &format!("[error] Failed to remove bank: {}", err),
434
+ // );
435
+ // had_error = true;
436
+ // last_error_message = Some(format!("bank remove failed: {}", err));
437
+ // exit_code = Some(1);
438
+ // }
439
+ // }
440
+
441
+ // BankCommand::Update { name } => {
442
+ // if let Err(err) = handle_update_bank_command(name).await {
443
+ // let logger = devalang_utils::logger::Logger::new();
444
+ // logger.log_message(
445
+ // devalang_utils::logger::LogLevel::Error,
446
+ // &format!("[error] Failed to update bank: {}", err),
447
+ // );
448
+ // had_error = true;
449
+ // last_error_message = Some(format!("bank update failed: {}", err));
450
+ // exit_code = Some(1);
451
+ // }
452
+ // }
453
+ // },
454
+
455
+ // Commands::Update { only } => {
456
+ // if let Err(err) = handle_update_command(only).await {
457
+ // let logger = devalang_utils::logger::Logger::new();
458
+ // logger.log_message(
459
+ // devalang_utils::logger::LogLevel::Error,
460
+ // &format!("[error] Update failed: {}", err)
461
+ // );
462
+ // had_error = true;
463
+ // last_error_message = Some(format!("update failed: {}", err));
464
+ // exit_code = Some(1);
465
+ // }
466
+ // }
311
467
  Commands::Telemetry { command } => match command {
312
468
  TelemetryCommand::Enable { .. } => {
313
469
  if let Err(err) = handle_telemetry_enable_command().await {
314
470
  let logger = devalang_utils::logger::Logger::new();
315
471
  logger.log_message(
316
472
  devalang_utils::logger::LogLevel::Error,
317
- &format!(" Failed to enable telemetry: {}", err),
473
+ &format!("[error] Failed to enable telemetry: {}", err),
318
474
  );
319
475
  had_error = true;
320
476
  last_error_message = Some(format!("telemetry enable failed: {}", err));
@@ -326,7 +482,7 @@ async fn main() -> io::Result<()> {
326
482
  let logger = devalang_utils::logger::Logger::new();
327
483
  logger.log_message(
328
484
  devalang_utils::logger::LogLevel::Error,
329
- &format!(" Failed to disable telemetry: {}", err),
485
+ &format!("[error] Failed to disable telemetry: {}", err),
330
486
  );
331
487
  had_error = true;
332
488
  last_error_message = Some(format!("telemetry disable failed: {}", err));
@@ -335,12 +491,12 @@ async fn main() -> io::Result<()> {
335
491
  }
336
492
  },
337
493
 
338
- Commands::Discover {} => {
339
- if let Err(err) = handle_discover_command().await {
494
+ Commands::Discover { no_clear_tmp } => {
495
+ if let Err(err) = handle_discover_command(no_clear_tmp).await {
340
496
  let logger = devalang_utils::logger::Logger::new();
341
497
  logger.log_message(
342
498
  devalang_utils::logger::LogLevel::Error,
343
- &format!(" Failed to discover: {}", err),
499
+ &format!("[error] Failed to discover: {}", err),
344
500
  );
345
501
  had_error = true;
346
502
  last_error_message = Some(format!("discover failed: {}", err));
@@ -353,7 +509,7 @@ async fn main() -> io::Result<()> {
353
509
  let logger = devalang_utils::logger::Logger::new();
354
510
  logger.log_message(
355
511
  devalang_utils::logger::LogLevel::Error,
356
- &format!(" Login failed: {}", err),
512
+ &format!("[error] Login failed: {}", err),
357
513
  );
358
514
  had_error = true;
359
515
  last_error_message = Some(format!("login failed: {}", err));
@@ -361,11 +517,24 @@ async fn main() -> io::Result<()> {
361
517
  }
362
518
  }
363
519
 
520
+ Commands::Me {} => {
521
+ if let Err(err) = handle_me_command().await {
522
+ let logger = devalang_utils::logger::Logger::new();
523
+ logger.log_message(
524
+ devalang_utils::logger::LogLevel::Error,
525
+ &format!("[error] Me command failed: {}", err),
526
+ );
527
+ had_error = true;
528
+ last_error_message = Some(format!("me command failed: {}", err));
529
+ exit_code = Some(1);
530
+ }
531
+ }
532
+
364
533
  Commands::Logout { .. } => {
365
534
  let logger = devalang_utils::logger::Logger::new();
366
535
  logger.log_message(
367
536
  devalang_utils::logger::LogLevel::Error,
368
- " Logout command is not implemented yet.",
537
+ "[error] Logout command is not implemented yet.",
369
538
  );
370
539
  had_error = true;
371
540
  last_error_message = Some("logout not implemented".to_string());
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "devalang_types"
3
- version = "0.0.3"
3
+ version = "0.0.4"
4
4
  description = "Types and traits for Devalang"
5
5
  license = "MIT"
6
6
  authors = ["Devaloop <contact@devaloop.com>"]
@@ -4,6 +4,7 @@ use serde::Deserialize;
4
4
  pub struct DiscoveredAddon {
5
5
  pub path: std::path::PathBuf,
6
6
  pub name: String,
7
+ pub publisher: String,
7
8
  pub extension: String,
8
9
  pub addon_type: String,
9
10
  }
@@ -12,6 +13,7 @@ pub struct DiscoveredAddon {
12
13
  pub struct AddonWithMetadata {
13
14
  pub name: String,
14
15
  pub path: String,
16
+ pub publisher: String,
15
17
  pub addon_type: String,
16
18
  pub metadata: AddonMetadata,
17
19
  }
@@ -19,7 +21,7 @@ pub struct AddonWithMetadata {
19
21
  #[derive(Debug, Clone)]
20
22
  pub struct AddonMetadata {
21
23
  pub name: String,
22
- pub author: String,
24
+ pub publisher: String,
23
25
  pub version: String,
24
26
  pub description: String,
25
27
  pub access: String,