@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.
- package/Cargo.toml +84 -81
- package/README.md +3 -2
- package/docs/CHANGELOG.md +41 -0
- package/docs/ROADMAP.md +3 -3
- package/examples/chain.deva +19 -0
- package/examples/plugin.deva +10 -10
- package/examples/routing.deva +23 -0
- package/out-tsc/bin/project-version.json +6 -0
- package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +8 -8
- package/out-tsc/scripts/version/copy-to-binary.d.ts +1 -0
- package/out-tsc/scripts/version/copy-to-binary.js +79 -0
- package/package.json +23 -10
- package/project-version.json +3 -3
- package/rust/bindings/Cargo.toml +9 -0
- package/rust/bindings/src/lib.rs +86 -0
- package/rust/cli/addon/commands.rs +35 -0
- package/rust/cli/addon/download.rs +234 -0
- package/rust/cli/addon/install.rs +33 -0
- package/rust/cli/addon/list.rs +224 -0
- package/rust/cli/addon/metadata.rs +124 -0
- package/rust/cli/addon/mod.rs +8 -0
- package/rust/cli/addon/remove.rs +271 -0
- package/rust/cli/addon/update.rs +305 -0
- package/rust/cli/{install/addon.rs → addon/utils.rs} +109 -118
- package/rust/cli/build/commands.rs +153 -153
- package/rust/cli/build/process.rs +165 -165
- package/rust/cli/check/mod.rs +208 -208
- package/rust/cli/discover/commands.rs +275 -253
- package/rust/cli/discover/config.rs +109 -111
- package/rust/cli/discover/fs.rs +19 -19
- package/rust/cli/discover/install.rs +214 -103
- package/rust/cli/discover/metadata.rs +48 -48
- package/rust/cli/discover/mod.rs +5 -5
- package/rust/cli/me/commands.rs +52 -0
- package/rust/cli/me/mod.rs +1 -0
- package/rust/cli/mod.rs +12 -12
- package/rust/cli/parser.rs +30 -69
- package/rust/cli/play/commands.rs +375 -375
- package/rust/cli/play/process.rs +159 -159
- package/rust/core/audio/engine/driver.rs +19 -2
- package/rust/core/audio/engine/export.rs +169 -169
- package/rust/core/audio/engine/mod.rs +56 -56
- package/rust/core/audio/engine/notes/dsp.rs +88 -85
- package/rust/core/audio/engine/notes/mod.rs +53 -44
- package/rust/core/audio/engine/notes/params.rs +294 -294
- package/rust/core/audio/engine/sample/insert.rs +148 -47
- package/rust/core/audio/engine/sample/mod.rs +40 -40
- package/rust/core/audio/engine/sample/padding.rs +170 -170
- package/rust/core/audio/evaluator/condition.rs +61 -61
- package/rust/core/audio/evaluator/numeric.rs +152 -152
- package/rust/core/audio/evaluator/rhs.rs +16 -16
- package/rust/core/audio/evaluator/string_expr.rs +94 -94
- package/rust/core/audio/interpreter/driver.rs +574 -574
- package/rust/core/audio/interpreter/mod.rs +2 -2
- package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +9 -5
- package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +398 -384
- package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +323 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +1 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +66 -11
- package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +3 -3
- package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +192 -192
- package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +24 -24
- package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +116 -116
- package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +97 -97
- package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +100 -100
- package/rust/core/audio/interpreter/statements/automate.rs +16 -16
- package/rust/core/audio/interpreter/statements/call.rs +31 -1
- package/rust/core/audio/interpreter/statements/condition.rs +72 -72
- package/rust/core/audio/interpreter/statements/function.rs +24 -24
- package/rust/core/audio/interpreter/statements/let_.rs +36 -36
- package/rust/core/audio/interpreter/statements/load.rs +17 -17
- package/rust/core/audio/interpreter/statements/loop_.rs +115 -115
- package/rust/core/audio/interpreter/statements/spawn.rs +51 -2
- package/rust/core/audio/interpreter/statements/trigger.rs +242 -239
- package/rust/core/audio/loader/trigger.rs +98 -98
- package/rust/core/audio/player.rs +70 -70
- package/rust/core/audio/special/mod.rs +9 -9
- package/rust/core/builder/mod.rs +129 -129
- package/rust/core/debugger/lexer.rs +27 -27
- package/rust/core/debugger/logs.rs +52 -52
- package/rust/core/debugger/preprocessor.rs +27 -27
- package/rust/core/debugger/store.rs +38 -38
- package/rust/core/lexer/driver.rs +59 -59
- package/rust/core/lexer/handler/arrow.rs +82 -82
- package/rust/core/lexer/handler/at.rs +21 -21
- package/rust/core/lexer/handler/brace.rs +41 -41
- package/rust/core/lexer/handler/colon.rs +21 -21
- package/rust/core/lexer/handler/comment.rs +30 -30
- package/rust/core/lexer/handler/dot.rs +21 -21
- package/rust/core/lexer/handler/driver.rs +337 -337
- package/rust/core/lexer/handler/identifier.rs +47 -47
- package/rust/core/lexer/handler/indent.rs +66 -66
- package/rust/core/lexer/handler/mod.rs +15 -15
- package/rust/core/lexer/handler/newline.rs +23 -23
- package/rust/core/lexer/handler/number.rs +31 -31
- package/rust/core/lexer/handler/operator.rs +46 -46
- package/rust/core/lexer/handler/parenthesis.rs +41 -41
- package/rust/core/lexer/handler/slash.rs +21 -21
- package/rust/core/lexer/handler/string.rs +63 -63
- package/rust/core/lexer/mod.rs +3 -3
- package/rust/core/mod.rs +9 -9
- package/rust/core/parser/driver/block.rs +111 -111
- package/rust/core/parser/driver/cursor.rs +82 -82
- package/rust/core/parser/driver/driver_impl.rs +21 -1
- package/rust/core/parser/driver/mod.rs +6 -6
- package/rust/core/parser/driver/parse_array.rs +120 -120
- package/rust/core/parser/driver/parse_map.rs +247 -223
- package/rust/core/parser/driver/parser.rs +160 -160
- package/rust/core/parser/handler/arrow_call.rs +65 -14
- package/rust/core/parser/handler/identifier/synth.rs +171 -135
- package/rust/core/parser/handler/mod.rs +9 -9
- package/rust/core/parser/handler/pattern.rs +24 -1
- package/rust/core/plugin/loader.rs +137 -137
- package/rust/core/plugin/mod.rs +2 -2
- package/rust/core/plugin/runner/non_wasm.rs +481 -297
- package/rust/core/plugin/runner/wasm32.rs +1 -0
- package/rust/core/preprocessor/loader/inject.rs +313 -278
- package/rust/core/preprocessor/loader/loader_helpers.rs +110 -110
- package/rust/core/preprocessor/loader/mod.rs +235 -235
- package/rust/core/preprocessor/module.rs +55 -55
- package/rust/core/preprocessor/processor/handlers.rs +107 -107
- package/rust/core/preprocessor/resolver/bank.rs +49 -49
- package/rust/core/preprocessor/resolver/call.rs +124 -124
- package/rust/core/preprocessor/resolver/condition.rs +95 -95
- package/rust/core/preprocessor/resolver/driver.rs +324 -324
- package/rust/core/preprocessor/resolver/function.rs +69 -69
- package/rust/core/preprocessor/resolver/group.rs +122 -122
- package/rust/core/preprocessor/resolver/let_.rs +32 -32
- package/rust/core/preprocessor/resolver/loop_.rs +318 -318
- package/rust/core/preprocessor/resolver/mod.rs +16 -16
- package/rust/core/preprocessor/resolver/pattern.rs +95 -83
- package/rust/core/preprocessor/resolver/spawn.rs +99 -99
- package/rust/core/preprocessor/resolver/synth.rs +54 -54
- package/rust/core/preprocessor/resolver/tempo.rs +48 -48
- package/rust/core/preprocessor/resolver/trigger.rs +116 -116
- package/rust/core/preprocessor/resolver/value.rs +176 -176
- package/rust/core/store/global.rs +57 -57
- package/rust/lib.rs +323 -323
- package/rust/macros/Cargo.toml +14 -0
- package/rust/macros/src/lib.rs +52 -0
- package/rust/main.rs +311 -142
- package/rust/types/Cargo.toml +1 -1
- package/rust/types/src/addons.rs +3 -1
- package/rust/types/src/config.rs +1 -3
- package/rust/utils/Cargo.toml +5 -2
- package/rust/utils/src/file.rs +397 -14
- package/rust/utils/src/path.rs +31 -2
- package/rust/utils/src/version.rs +38 -7
- package/rust/web/auth.rs +5 -0
- package/rust/web/forge.rs +5 -0
- package/rust/web/mod.rs +5 -3
- package/typescript/scripts/version/copy-to-binary.ts +82 -0
- package/rust/cli/bank/api.rs +0 -122
- package/rust/cli/bank/commands.rs +0 -306
- package/rust/cli/bank/mod.rs +0 -29
- package/rust/cli/install/bank.rs +0 -72
- package/rust/cli/install/commands.rs +0 -35
- package/rust/cli/install/mod.rs +0 -4
- package/rust/cli/install/plugin.rs +0 -80
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
use devalang_types::AddonMetadata;
|
|
2
|
-
use toml::Value;
|
|
3
|
-
|
|
4
|
-
pub fn parse_metadata_file(addon_type: &str, metadata_content: &str) -> Option<AddonMetadata> {
|
|
5
|
-
let parsed = metadata_content.parse::<Value>().ok()?;
|
|
6
|
-
|
|
7
|
-
let table = (match addon_type {
|
|
8
|
-
"bank" => parsed.get("bank"),
|
|
9
|
-
"plugin" => parsed.get("plugin"),
|
|
10
|
-
"preset" => parsed.get("preset"),
|
|
11
|
-
"template" => parsed.get("template"),
|
|
12
|
-
_ => None,
|
|
13
|
-
})?;
|
|
14
|
-
|
|
15
|
-
let name = table
|
|
16
|
-
.get("name")
|
|
17
|
-
.and_then(|v| v.as_str())
|
|
18
|
-
.unwrap_or("")
|
|
19
|
-
.to_string();
|
|
20
|
-
let version = table
|
|
21
|
-
.get("version")
|
|
22
|
-
.and_then(|v| v.as_str())
|
|
23
|
-
.unwrap_or("")
|
|
24
|
-
.to_string();
|
|
25
|
-
let description = table
|
|
26
|
-
.get("description")
|
|
27
|
-
.and_then(|v| v.as_str())
|
|
28
|
-
.unwrap_or("")
|
|
29
|
-
.to_string();
|
|
30
|
-
let
|
|
31
|
-
.get("
|
|
32
|
-
.and_then(|v| v.as_str())
|
|
33
|
-
.unwrap_or("unknown")
|
|
34
|
-
.to_string();
|
|
35
|
-
let access = table
|
|
36
|
-
.get("access")
|
|
37
|
-
.and_then(|v| v.as_str())
|
|
38
|
-
.unwrap_or("")
|
|
39
|
-
.to_string();
|
|
40
|
-
|
|
41
|
-
Some(AddonMetadata {
|
|
42
|
-
name,
|
|
43
|
-
|
|
44
|
-
version,
|
|
45
|
-
description,
|
|
46
|
-
access,
|
|
47
|
-
})
|
|
48
|
-
}
|
|
1
|
+
use devalang_types::AddonMetadata;
|
|
2
|
+
use toml::Value;
|
|
3
|
+
|
|
4
|
+
pub fn parse_metadata_file(addon_type: &str, metadata_content: &str) -> Option<AddonMetadata> {
|
|
5
|
+
let parsed = metadata_content.parse::<Value>().ok()?;
|
|
6
|
+
|
|
7
|
+
let table = (match addon_type {
|
|
8
|
+
"bank" => parsed.get("bank"),
|
|
9
|
+
"plugin" => parsed.get("plugin"),
|
|
10
|
+
"preset" => parsed.get("preset"),
|
|
11
|
+
"template" => parsed.get("template"),
|
|
12
|
+
_ => None,
|
|
13
|
+
})?;
|
|
14
|
+
|
|
15
|
+
let name = table
|
|
16
|
+
.get("name")
|
|
17
|
+
.and_then(|v| v.as_str())
|
|
18
|
+
.unwrap_or("")
|
|
19
|
+
.to_string();
|
|
20
|
+
let version = table
|
|
21
|
+
.get("version")
|
|
22
|
+
.and_then(|v| v.as_str())
|
|
23
|
+
.unwrap_or("")
|
|
24
|
+
.to_string();
|
|
25
|
+
let description = table
|
|
26
|
+
.get("description")
|
|
27
|
+
.and_then(|v| v.as_str())
|
|
28
|
+
.unwrap_or("")
|
|
29
|
+
.to_string();
|
|
30
|
+
let publisher = table
|
|
31
|
+
.get("publisher")
|
|
32
|
+
.and_then(|v| v.as_str())
|
|
33
|
+
.unwrap_or("unknown")
|
|
34
|
+
.to_string();
|
|
35
|
+
let access = table
|
|
36
|
+
.get("access")
|
|
37
|
+
.and_then(|v| v.as_str())
|
|
38
|
+
.unwrap_or("")
|
|
39
|
+
.to_string();
|
|
40
|
+
|
|
41
|
+
Some(AddonMetadata {
|
|
42
|
+
name,
|
|
43
|
+
publisher,
|
|
44
|
+
version,
|
|
45
|
+
description,
|
|
46
|
+
access,
|
|
47
|
+
})
|
|
48
|
+
}
|
package/rust/cli/discover/mod.rs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
pub mod commands;
|
|
2
|
-
pub mod config;
|
|
3
|
-
pub mod fs;
|
|
4
|
-
pub mod install;
|
|
5
|
-
pub mod metadata;
|
|
1
|
+
pub mod commands;
|
|
2
|
+
pub mod config;
|
|
3
|
+
pub mod fs;
|
|
4
|
+
pub mod install;
|
|
5
|
+
pub mod metadata;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
pub async fn handle_me_command() -> Result<(), String> {
|
|
2
|
+
let auth_url = crate::web::auth::get_auth_url();
|
|
3
|
+
|
|
4
|
+
let url = format!("{}/v1/auth/me", auth_url);
|
|
5
|
+
|
|
6
|
+
let client = reqwest::Client::new();
|
|
7
|
+
let mut req = client.get(url);
|
|
8
|
+
|
|
9
|
+
if let Some(user) = crate::config::settings::get_user_config() {
|
|
10
|
+
if !user.session.is_empty() {
|
|
11
|
+
req = req.bearer_auth(user.session);
|
|
12
|
+
}
|
|
13
|
+
} else {
|
|
14
|
+
return Err("No user session found. Please log in.".to_string());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let response = req.send().await.map_err(|e| e.to_string())?;
|
|
18
|
+
|
|
19
|
+
if !response.status().is_success() {
|
|
20
|
+
return Err(format!("Failed to get user info: HTTP {}", response.status()).into());
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let status = response.status();
|
|
24
|
+
let body_text = response
|
|
25
|
+
.text()
|
|
26
|
+
.await
|
|
27
|
+
.map_err(|e| format!("Failed to read response body: {}", e))?;
|
|
28
|
+
|
|
29
|
+
let json: serde_json::Value = match serde_json::from_str(&body_text) {
|
|
30
|
+
Ok(v) => v,
|
|
31
|
+
Err(_) => {
|
|
32
|
+
return Err(format!(
|
|
33
|
+
"Invalid JSON response (status {}): {}",
|
|
34
|
+
status, body_text
|
|
35
|
+
));
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
let payload = json.get("payload");
|
|
40
|
+
|
|
41
|
+
let email = payload
|
|
42
|
+
.unwrap_or(&serde_json::Value::Null)
|
|
43
|
+
.get("userData")
|
|
44
|
+
.unwrap_or(&serde_json::Value::Null)
|
|
45
|
+
.get("email")
|
|
46
|
+
.and_then(|v| v.as_str())
|
|
47
|
+
.unwrap_or("unknown");
|
|
48
|
+
|
|
49
|
+
println!("Logged in as: {}", email);
|
|
50
|
+
|
|
51
|
+
Ok(())
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pub mod commands;
|
package/rust/cli/mod.rs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
pub mod
|
|
2
|
-
pub mod build;
|
|
3
|
-
pub mod check;
|
|
4
|
-
pub mod discover;
|
|
5
|
-
pub mod init;
|
|
6
|
-
pub mod
|
|
7
|
-
pub mod
|
|
8
|
-
pub mod parser;
|
|
9
|
-
pub mod play;
|
|
10
|
-
pub mod telemetry;
|
|
11
|
-
pub mod template;
|
|
12
|
-
pub mod update;
|
|
1
|
+
pub mod addon;
|
|
2
|
+
pub mod build;
|
|
3
|
+
pub mod check;
|
|
4
|
+
pub mod discover;
|
|
5
|
+
pub mod init;
|
|
6
|
+
pub mod login;
|
|
7
|
+
pub mod me;
|
|
8
|
+
pub mod parser;
|
|
9
|
+
pub mod play;
|
|
10
|
+
pub mod telemetry;
|
|
11
|
+
pub mod template;
|
|
12
|
+
pub mod update;
|
package/rust/cli/parser.rs
CHANGED
|
@@ -34,18 +34,6 @@ pub enum TelemetryCommand {
|
|
|
34
34
|
Disable {},
|
|
35
35
|
}
|
|
36
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
37
|
#[derive(Subcommand)]
|
|
50
38
|
pub enum TemplateCommand {
|
|
51
39
|
/// Lists all available templates for Devalang projects.
|
|
@@ -55,17 +43,22 @@ pub enum TemplateCommand {
|
|
|
55
43
|
}
|
|
56
44
|
|
|
57
45
|
#[derive(Subcommand)]
|
|
58
|
-
pub enum
|
|
59
|
-
///
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
46
|
+
pub enum AddonCommand {
|
|
47
|
+
/// Installs an addon.
|
|
48
|
+
Install {
|
|
49
|
+
name: String,
|
|
50
|
+
#[arg(long, default_value_t = false)]
|
|
51
|
+
no_clear_tmp: bool,
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
/// Updates an addon.
|
|
55
|
+
Update { name: String },
|
|
56
|
+
|
|
57
|
+
/// Lists installed addons.
|
|
58
|
+
List {},
|
|
59
|
+
|
|
60
|
+
/// Removes an addon.
|
|
66
61
|
Remove { name: String },
|
|
67
|
-
/// Updates a specific or all banks.
|
|
68
|
-
Update { name: Option<String> },
|
|
69
62
|
}
|
|
70
63
|
|
|
71
64
|
#[derive(Subcommand)]
|
|
@@ -172,7 +165,6 @@ pub enum Commands {
|
|
|
172
165
|
/// - `false`
|
|
173
166
|
///
|
|
174
167
|
debug: bool,
|
|
175
|
-
|
|
176
168
|
#[arg(short, long, default_value_t = false)]
|
|
177
169
|
/// Whether to compress the output files.
|
|
178
170
|
///
|
|
@@ -283,47 +275,24 @@ pub enum Commands {
|
|
|
283
275
|
debug: bool,
|
|
284
276
|
},
|
|
285
277
|
|
|
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
278
|
/// Discover available local addons for Devalang.
|
|
315
279
|
///
|
|
316
|
-
Discover {
|
|
280
|
+
Discover {
|
|
281
|
+
#[arg(long, default_value_t = false)]
|
|
282
|
+
/// Do not clear the temporary extraction folder after installation.
|
|
283
|
+
no_clear_tmp: bool,
|
|
284
|
+
},
|
|
317
285
|
|
|
318
|
-
/// Manage
|
|
286
|
+
/// Manage addons for Devalang projects.
|
|
319
287
|
///
|
|
320
288
|
/// ### Subcommands
|
|
321
|
-
/// - `
|
|
322
|
-
/// - `
|
|
289
|
+
/// - `install <publisher>.<name>` - Installs a new addon.
|
|
290
|
+
/// - `list` - Lists installed addons.
|
|
291
|
+
/// - `remove <publisher>.<name>` - Removes an existing addon.
|
|
323
292
|
///
|
|
324
|
-
|
|
293
|
+
Addon {
|
|
325
294
|
#[command(subcommand)]
|
|
326
|
-
command:
|
|
295
|
+
command: AddonCommand,
|
|
327
296
|
},
|
|
328
297
|
|
|
329
298
|
/// Telemetry settings for Devalang.
|
|
@@ -337,22 +306,14 @@ pub enum Commands {
|
|
|
337
306
|
command: TelemetryCommand,
|
|
338
307
|
},
|
|
339
308
|
|
|
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
309
|
/// Log in to your Devaloop account.
|
|
353
310
|
///
|
|
354
311
|
Login {},
|
|
355
312
|
|
|
313
|
+
/// Display information about the current Devalang user.
|
|
314
|
+
///
|
|
315
|
+
Me {},
|
|
316
|
+
|
|
356
317
|
/// Log out of your Devaloop account.
|
|
357
318
|
///
|
|
358
319
|
Logout {},
|