@devaloop/devalang 0.0.1-beta.1 → 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/.devalang +9 -10
- package/Cargo.toml +84 -80
- package/README.md +10 -7
- package/docs/CHANGELOG.md +83 -0
- package/docs/ROADMAP.md +6 -2
- package/docs/TODO.md +3 -14
- package/examples/bus.deva +10 -0
- package/examples/chain.deva +19 -0
- package/examples/effect.deva +2 -0
- package/examples/filter.deva +11 -0
- package/examples/lfo.deva +9 -0
- package/examples/plugin.deva +10 -10
- package/examples/routing.deva +23 -0
- package/examples/synth.deva +11 -1
- package/examples/synth_types.deva +17 -0
- package/out-tsc/bin/project-version.json +6 -0
- package/out-tsc/core/functions/index.d.ts +5 -0
- package/out-tsc/core/functions/index.js +11 -0
- package/out-tsc/pkg/devalang_core.d.ts +2 -0
- package/out-tsc/pkg/devalang_core.js +17 -2
- package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +1 -0
- 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} +34 -43
- package/rust/cli/build/commands.rs +153 -103
- package/rust/cli/build/mod.rs +2 -2
- package/rust/cli/build/process.rs +165 -146
- package/rust/cli/check/mod.rs +208 -208
- package/rust/cli/discover/commands.rs +53 -31
- package/rust/cli/discover/config.rs +2 -4
- package/rust/cli/discover/install.rs +139 -28
- package/rust/cli/discover/metadata.rs +3 -3
- package/rust/cli/login/commands.rs +124 -124
- package/rust/cli/me/commands.rs +52 -0
- package/rust/cli/me/mod.rs +1 -0
- package/rust/cli/mod.rs +2 -2
- package/rust/cli/parser.rs +76 -70
- package/rust/cli/play/commands.rs +375 -324
- package/rust/cli/play/mod.rs +5 -5
- package/rust/cli/play/process.rs +159 -150
- package/rust/cli/play/realtime.rs +91 -91
- package/rust/cli/telemetry/commands.rs +22 -22
- package/rust/cli/telemetry/event_creator.rs +80 -80
- package/rust/cli/telemetry/mod.rs +3 -3
- package/rust/cli/telemetry/send.rs +51 -51
- package/rust/cli/template/commands.rs +69 -69
- package/rust/config/driver.rs +112 -103
- package/rust/config/mod.rs +3 -3
- package/rust/config/ops.rs +26 -26
- package/rust/config/settings.rs +101 -101
- package/rust/core/audio/engine/driver.rs +237 -0
- package/rust/core/audio/engine/export.rs +169 -0
- package/rust/core/audio/engine/helpers.rs +178 -170
- package/rust/core/audio/engine/mod.rs +56 -7
- package/rust/core/audio/engine/notes/dsp.rs +88 -0
- package/rust/core/audio/engine/notes/mod.rs +53 -0
- package/rust/core/audio/engine/notes/params.rs +294 -0
- package/rust/core/audio/engine/sample/insert.rs +300 -0
- package/rust/core/audio/engine/sample/mod.rs +40 -0
- package/rust/core/audio/engine/sample/padding.rs +170 -0
- package/rust/core/audio/evaluator/condition.rs +61 -0
- package/rust/core/audio/evaluator/mod.rs +9 -0
- package/rust/core/audio/{evaluator.rs → evaluator/numeric.rs} +152 -310
- package/rust/core/audio/evaluator/rhs.rs +16 -0
- package/rust/core/audio/evaluator/string_expr.rs +94 -0
- package/rust/core/audio/interpreter/driver.rs +574 -542
- package/rust/core/audio/interpreter/mod.rs +2 -14
- package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +179 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +398 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +323 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +3 -0
- package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +371 -0
- package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +3 -0
- package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +192 -0
- package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +24 -0
- package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +116 -0
- package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +97 -0
- package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +100 -0
- package/rust/core/audio/interpreter/{automate.rs → statements/automate.rs} +2 -4
- package/rust/core/audio/interpreter/{call.rs → statements/call.rs} +36 -5
- package/rust/core/audio/interpreter/{condition.rs → statements/condition.rs} +72 -71
- package/rust/core/audio/interpreter/{function.rs → statements/function.rs} +24 -26
- package/rust/core/audio/interpreter/{let_.rs → statements/let_.rs} +36 -38
- package/rust/core/audio/interpreter/{load.rs → statements/load.rs} +17 -19
- package/rust/core/audio/interpreter/{loop_.rs → statements/loop_.rs} +115 -114
- package/rust/core/audio/interpreter/statements/mod.rs +12 -0
- package/rust/core/audio/interpreter/{sleep.rs → statements/sleep.rs} +28 -28
- package/rust/core/audio/interpreter/{spawn.rs → statements/spawn.rs} +54 -4
- package/rust/core/audio/interpreter/{tempo.rs → statements/tempo.rs} +40 -40
- package/rust/core/audio/interpreter/{trigger.rs → statements/trigger.rs} +242 -239
- package/rust/core/audio/loader/trigger.rs +98 -97
- package/rust/core/audio/mod.rs +6 -7
- package/rust/core/audio/special/easing.rs +189 -189
- package/rust/core/audio/special/env.rs +45 -45
- package/rust/core/audio/special/math.rs +134 -134
- package/rust/core/audio/special/modulator.rs +143 -143
- package/rust/core/builder/mod.rs +129 -86
- package/rust/core/debugger/{module.rs → logs.rs} +52 -55
- package/rust/core/debugger/mod.rs +30 -30
- package/rust/core/debugger/store.rs +38 -40
- package/rust/core/error/mod.rs +269 -269
- package/rust/core/lexer/driver.rs +2 -4
- package/rust/core/mod.rs +9 -10
- package/rust/core/parser/driver/block.rs +111 -0
- package/rust/core/parser/driver/cursor.rs +82 -0
- package/rust/core/parser/driver/driver_impl.rs +159 -0
- package/rust/core/parser/driver/mod.rs +6 -0
- package/rust/core/parser/driver/parse_array.rs +120 -0
- package/rust/core/parser/driver/parse_map.rs +247 -0
- package/rust/core/parser/driver/parser.rs +160 -0
- package/rust/core/parser/handler/arrow_call.rs +90 -15
- package/rust/core/parser/handler/at.rs +279 -279
- package/rust/core/parser/handler/bank.rs +104 -104
- package/rust/core/parser/handler/condition.rs +83 -83
- package/rust/core/parser/handler/dot.rs +148 -148
- package/rust/core/parser/handler/identifier/automate.rs +254 -254
- package/rust/core/parser/handler/identifier/call.rs +91 -91
- package/rust/core/parser/handler/identifier/emit.rs +70 -70
- package/rust/core/parser/handler/identifier/function.rs +113 -113
- package/rust/core/parser/handler/identifier/group.rs +89 -89
- package/rust/core/parser/handler/identifier/let_.rs +173 -173
- package/rust/core/parser/handler/identifier/mod.rs +55 -55
- package/rust/core/parser/handler/identifier/on.rs +107 -107
- package/rust/core/parser/handler/identifier/print.rs +49 -49
- package/rust/core/parser/handler/identifier/sleep.rs +96 -43
- package/rust/core/parser/handler/identifier/spawn.rs +91 -91
- package/rust/core/parser/handler/identifier/synth.rs +39 -3
- package/rust/core/parser/handler/loop_.rs +194 -194
- package/rust/core/parser/handler/pattern.rs +25 -2
- package/rust/core/parser/handler/tempo.rs +105 -57
- package/rust/core/parser/statement.rs +10 -11
- package/rust/core/plugin/loader.rs +137 -137
- package/rust/core/plugin/runner/mod.rs +11 -0
- package/rust/core/plugin/{runner.rs → runner/non_wasm.rs} +206 -72
- package/rust/core/plugin/runner/wasm32.rs +44 -0
- package/rust/core/preprocessor/loader/inject.rs +313 -0
- package/rust/core/preprocessor/loader/loader_helpers.rs +110 -0
- package/rust/core/preprocessor/loader/mod.rs +235 -0
- package/rust/core/preprocessor/module.rs +55 -60
- package/rust/core/preprocessor/{processor.rs → processor/handlers.rs} +107 -114
- package/rust/core/preprocessor/processor/mod.rs +1 -0
- package/rust/core/preprocessor/resolver/function.rs +69 -69
- package/rust/core/preprocessor/resolver/group.rs +122 -94
- package/rust/core/preprocessor/resolver/pattern.rs +14 -2
- package/rust/core/store/global.rs +57 -61
- package/rust/core/store/mod.rs +1 -5
- package/rust/lib.rs +323 -308
- package/rust/macros/Cargo.toml +14 -0
- package/rust/macros/src/lib.rs +52 -0
- package/rust/main.rs +336 -143
- package/rust/types/Cargo.toml +1 -1
- package/rust/types/src/addons.rs +57 -55
- package/rust/types/src/config.rs +82 -74
- package/rust/types/src/lib.rs +15 -12
- package/rust/types/src/plugin.rs +20 -0
- package/rust/types/src/store.rs +139 -0
- package/rust/types/src/telemetry.rs +85 -85
- package/rust/utils/Cargo.toml +5 -2
- package/rust/utils/src/file.rs +477 -94
- package/rust/utils/src/first_usage.rs +97 -97
- package/rust/utils/src/lib.rs +9 -9
- package/rust/utils/src/logger.rs +200 -200
- package/rust/utils/src/path.rs +158 -88
- package/rust/utils/src/signature.rs +41 -41
- package/rust/utils/src/spinner.rs +20 -20
- package/rust/utils/src/version.rs +58 -27
- package/rust/utils/src/watcher.rs +46 -46
- package/rust/web/api.rs +5 -5
- package/rust/web/auth.rs +5 -0
- package/rust/web/cdn.rs +34 -34
- package/rust/web/forge.rs +5 -0
- package/rust/web/mod.rs +2 -0
- package/tests/integration.rs +21 -21
- package/typescript/core/functions/index.ts +11 -0
- package/typescript/pkg/devalang_core.ts +20 -4
- 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 -275
- package/rust/cli/bank/mod.rs +0 -29
- package/rust/cli/install/bank.rs +0 -53
- package/rust/cli/install/commands.rs +0 -35
- package/rust/cli/install/mod.rs +0 -4
- package/rust/cli/install/plugin.rs +0 -61
- package/rust/core/audio/engine/sample.rs +0 -366
- package/rust/core/audio/engine/synth.rs +0 -325
- package/rust/core/audio/interpreter/arrow_call.rs +0 -311
- package/rust/core/audio/renderer.rs +0 -54
- package/rust/core/parser/driver.rs +0 -584
- package/rust/core/preprocessor/loader.rs +0 -637
- package/rust/core/store/export.rs +0 -28
- package/rust/core/store/function.rs +0 -40
- package/rust/core/store/import.rs +0 -28
- package/rust/core/store/variable.rs +0 -51
- package/rust/core/utils/mod.rs +0 -1
- package/rust/core/utils/path.rs +0 -37
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
#[cfg(feature = "cli")]
|
|
2
|
-
use crossterm::style::{Attribute, SetAttribute};
|
|
3
|
-
|
|
4
|
-
#[cfg(feature = "cli")]
|
|
5
|
-
use std::fmt::Write;
|
|
6
|
-
|
|
7
|
-
use crate::logger::{LogLevel, Logger};
|
|
8
|
-
use crate::signature::get_signature;
|
|
9
|
-
use crate::version::get_version;
|
|
10
|
-
use std::env;
|
|
11
|
-
use std::path::PathBuf;
|
|
12
|
-
|
|
13
|
-
fn get_devalang_homedir() -> PathBuf {
|
|
14
|
-
// Prefer explicit env var, then HOME/USERPROFILE, fallback to current dir
|
|
15
|
-
if let Ok(p) = env::var("DEVALANG_HOME") {
|
|
16
|
-
return PathBuf::from(p);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if let Ok(p) = env::var("HOME") {
|
|
20
|
-
return PathBuf::from(p).join(".devalang");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if let Ok(p) = env::var("USERPROFILE") {
|
|
24
|
-
return PathBuf::from(p).join(".devalang");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
env::current_dir()
|
|
28
|
-
.unwrap_or_else(|_| PathBuf::from("."))
|
|
29
|
-
.join(".devalang")
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
pub fn check_is_first_usage() -> bool {
|
|
33
|
-
if get_devalang_homedir().exists() == true {
|
|
34
|
-
false
|
|
35
|
-
} else {
|
|
36
|
-
first_usage_welcome();
|
|
37
|
-
true
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
pub fn first_usage_welcome() {
|
|
42
|
-
std::fs::create_dir_all(get_devalang_homedir()).ok();
|
|
43
|
-
|
|
44
|
-
let version = get_version();
|
|
45
|
-
print!("{}", get_signature(&version));
|
|
46
|
-
|
|
47
|
-
let homedir = get_devalang_homedir().display().to_string();
|
|
48
|
-
|
|
49
|
-
let welcome_msg = format!(
|
|
50
|
-
"Welcome to Devalang ! \n\
|
|
51
|
-
It looks like this is your first time using the tool.\n\
|
|
52
|
-
A configuration file will be created in your home directory.\n\
|
|
53
|
-
(location: '{}')",
|
|
54
|
-
homedir
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
#[cfg(feature = "cli")]
|
|
58
|
-
let mut s = String::new();
|
|
59
|
-
#[cfg(feature = "cli")]
|
|
60
|
-
{
|
|
61
|
-
write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
|
|
62
|
-
write!(&mut s, "{}", welcome_msg).unwrap();
|
|
63
|
-
write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
|
|
64
|
-
|
|
65
|
-
println!("");
|
|
66
|
-
println!("{}", s);
|
|
67
|
-
println!("");
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
#[cfg(not(feature = "cli"))]
|
|
71
|
-
{
|
|
72
|
-
// Fallback: plain output on non-cli (wasm) builds
|
|
73
|
-
println!("");
|
|
74
|
-
println!("{}", welcome_msg);
|
|
75
|
-
println!("");
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
first_usage_ask_for_telemetry();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
pub fn first_usage_ask_for_telemetry() {
|
|
82
|
-
let telemetry_msg = "Would you like to enable anonymous telemetry ?";
|
|
83
|
-
let telemetry_desc = "This data helps us improve the tool. You can opt-out at any time.";
|
|
84
|
-
|
|
85
|
-
// Non-interactive fallback for first usage: default to telemetry disabled.
|
|
86
|
-
let _ = telemetry_msg;
|
|
87
|
-
let _ = telemetry_desc;
|
|
88
|
-
|
|
89
|
-
let logger = Logger::new();
|
|
90
|
-
|
|
91
|
-
println!("");
|
|
92
|
-
logger.log_message(
|
|
93
|
-
LogLevel::Info,
|
|
94
|
-
"Telemetry disabled by default. You can enable it at any time by using 'devalang telemetry enable'"
|
|
95
|
-
);
|
|
96
|
-
println!("");
|
|
97
|
-
}
|
|
1
|
+
#[cfg(feature = "cli")]
|
|
2
|
+
use crossterm::style::{Attribute, SetAttribute};
|
|
3
|
+
|
|
4
|
+
#[cfg(feature = "cli")]
|
|
5
|
+
use std::fmt::Write;
|
|
6
|
+
|
|
7
|
+
use crate::logger::{LogLevel, Logger};
|
|
8
|
+
use crate::signature::get_signature;
|
|
9
|
+
use crate::version::get_version;
|
|
10
|
+
use std::env;
|
|
11
|
+
use std::path::PathBuf;
|
|
12
|
+
|
|
13
|
+
fn get_devalang_homedir() -> PathBuf {
|
|
14
|
+
// Prefer explicit env var, then HOME/USERPROFILE, fallback to current dir
|
|
15
|
+
if let Ok(p) = env::var("DEVALANG_HOME") {
|
|
16
|
+
return PathBuf::from(p);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if let Ok(p) = env::var("HOME") {
|
|
20
|
+
return PathBuf::from(p).join(".devalang");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if let Ok(p) = env::var("USERPROFILE") {
|
|
24
|
+
return PathBuf::from(p).join(".devalang");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
env::current_dir()
|
|
28
|
+
.unwrap_or_else(|_| PathBuf::from("."))
|
|
29
|
+
.join(".devalang")
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
pub fn check_is_first_usage() -> bool {
|
|
33
|
+
if get_devalang_homedir().exists() == true {
|
|
34
|
+
false
|
|
35
|
+
} else {
|
|
36
|
+
first_usage_welcome();
|
|
37
|
+
true
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
pub fn first_usage_welcome() {
|
|
42
|
+
std::fs::create_dir_all(get_devalang_homedir()).ok();
|
|
43
|
+
|
|
44
|
+
let version = get_version();
|
|
45
|
+
print!("{}", get_signature(&version));
|
|
46
|
+
|
|
47
|
+
let homedir = get_devalang_homedir().display().to_string();
|
|
48
|
+
|
|
49
|
+
let welcome_msg = format!(
|
|
50
|
+
"Welcome to Devalang ! \n\
|
|
51
|
+
It looks like this is your first time using the tool.\n\
|
|
52
|
+
A configuration file will be created in your home directory.\n\
|
|
53
|
+
(location: '{}')",
|
|
54
|
+
homedir
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
#[cfg(feature = "cli")]
|
|
58
|
+
let mut s = String::new();
|
|
59
|
+
#[cfg(feature = "cli")]
|
|
60
|
+
{
|
|
61
|
+
write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
|
|
62
|
+
write!(&mut s, "{}", welcome_msg).unwrap();
|
|
63
|
+
write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
|
|
64
|
+
|
|
65
|
+
println!("");
|
|
66
|
+
println!("{}", s);
|
|
67
|
+
println!("");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
#[cfg(not(feature = "cli"))]
|
|
71
|
+
{
|
|
72
|
+
// Fallback: plain output on non-cli (wasm) builds
|
|
73
|
+
println!("");
|
|
74
|
+
println!("{}", welcome_msg);
|
|
75
|
+
println!("");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
first_usage_ask_for_telemetry();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
pub fn first_usage_ask_for_telemetry() {
|
|
82
|
+
let telemetry_msg = "Would you like to enable anonymous telemetry ?";
|
|
83
|
+
let telemetry_desc = "This data helps us improve the tool. You can opt-out at any time.";
|
|
84
|
+
|
|
85
|
+
// Non-interactive fallback for first usage: default to telemetry disabled.
|
|
86
|
+
let _ = telemetry_msg;
|
|
87
|
+
let _ = telemetry_desc;
|
|
88
|
+
|
|
89
|
+
let logger = Logger::new();
|
|
90
|
+
|
|
91
|
+
println!("");
|
|
92
|
+
logger.log_message(
|
|
93
|
+
LogLevel::Info,
|
|
94
|
+
"Telemetry disabled by default. You can enable it at any time by using 'devalang telemetry enable'"
|
|
95
|
+
);
|
|
96
|
+
println!("");
|
|
97
|
+
}
|
package/rust/utils/src/lib.rs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
pub mod error;
|
|
2
|
-
pub mod file;
|
|
3
|
-
pub mod first_usage;
|
|
4
|
-
pub mod logger;
|
|
5
|
-
pub mod path;
|
|
6
|
-
pub mod signature;
|
|
7
|
-
pub mod spinner;
|
|
8
|
-
pub mod version;
|
|
9
|
-
pub mod watcher;
|
|
1
|
+
pub mod error;
|
|
2
|
+
pub mod file;
|
|
3
|
+
pub mod first_usage;
|
|
4
|
+
pub mod logger;
|
|
5
|
+
pub mod path;
|
|
6
|
+
pub mod signature;
|
|
7
|
+
pub mod spinner;
|
|
8
|
+
pub mod version;
|
|
9
|
+
pub mod watcher;
|
package/rust/utils/src/logger.rs
CHANGED
|
@@ -1,200 +1,200 @@
|
|
|
1
|
-
#[cfg(feature = "cli")]
|
|
2
|
-
use crossterm::style::{Attribute, Color, ResetColor, SetAttribute, SetForegroundColor};
|
|
3
|
-
#[cfg(feature = "cli")]
|
|
4
|
-
use std::fmt::Write;
|
|
5
|
-
|
|
6
|
-
#[derive(Debug, Clone, PartialEq)]
|
|
7
|
-
pub enum LogLevel {
|
|
8
|
-
Success,
|
|
9
|
-
Error,
|
|
10
|
-
Info,
|
|
11
|
-
Print,
|
|
12
|
-
Warning,
|
|
13
|
-
Watcher,
|
|
14
|
-
Debug,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
#[derive(Debug, Clone)]
|
|
18
|
-
pub struct Logger;
|
|
19
|
-
|
|
20
|
-
impl Logger {
|
|
21
|
-
pub fn new() -> Self {
|
|
22
|
-
Logger
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Some methods are only used in CLI builds; silence dead_code warnings for non-cli.
|
|
26
|
-
#[cfg(not(feature = "cli"))]
|
|
27
|
-
#[allow(dead_code)]
|
|
28
|
-
fn __wasm_only_allow_dead_code(&self) {}
|
|
29
|
-
|
|
30
|
-
// Additionally allow dead_code for the CLI-only formatting helpers when building without cli
|
|
31
|
-
#[cfg(not(feature = "cli"))]
|
|
32
|
-
#[allow(dead_code)]
|
|
33
|
-
fn __wasm_only_format_helpers(&self) {}
|
|
34
|
-
|
|
35
|
-
#[cfg(feature = "cli")]
|
|
36
|
-
pub fn log_message(&self, level: LogLevel, message: &str) {
|
|
37
|
-
let formatted_status = self.format_status(level);
|
|
38
|
-
println!(
|
|
39
|
-
"🦊 {} {} {}",
|
|
40
|
-
self.language_signature(),
|
|
41
|
-
formatted_status,
|
|
42
|
-
message
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
#[cfg(not(feature = "cli"))]
|
|
47
|
-
pub fn log_message(&self, _level: LogLevel, _message: &str) {
|
|
48
|
-
// no-op for WASM
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
#[cfg(feature = "cli")]
|
|
52
|
-
pub fn log_message_with_trace(&self, level: LogLevel, message: &str, trace: Vec<&str>) {
|
|
53
|
-
let formatted_status = self.format_status(level);
|
|
54
|
-
println!(
|
|
55
|
-
"🦊 {} {} {}",
|
|
56
|
-
self.language_signature(),
|
|
57
|
-
formatted_status,
|
|
58
|
-
message
|
|
59
|
-
);
|
|
60
|
-
for t in trace {
|
|
61
|
-
println!(" ↳ {}", t);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
#[cfg(not(feature = "cli"))]
|
|
66
|
-
pub fn log_message_with_trace(&self, _level: LogLevel, _message: &str, _trace: Vec<&str>) {
|
|
67
|
-
// no-op for WASM
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
#[cfg(feature = "cli")]
|
|
71
|
-
pub fn log_error_with_stacktrace(&self, message: &str, stacktrace: &str) {
|
|
72
|
-
let formatted_status = self.format_status(LogLevel::Error);
|
|
73
|
-
println!(
|
|
74
|
-
"🦊 {} {} {}",
|
|
75
|
-
self.language_signature(),
|
|
76
|
-
formatted_status,
|
|
77
|
-
message
|
|
78
|
-
);
|
|
79
|
-
println!(" ↳ {}", stacktrace);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
#[cfg(not(feature = "cli"))]
|
|
83
|
-
pub fn log_error_with_stacktrace(&self, _message: &str, _stacktrace: &str) {
|
|
84
|
-
// no-op for WASM
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
#[cfg(feature = "cli")]
|
|
88
|
-
#[allow(dead_code)]
|
|
89
|
-
#[cfg_attr(not(feature = "cli"), allow(dead_code))]
|
|
90
|
-
fn language_signature(&self) -> String {
|
|
91
|
-
let mut s = String::new();
|
|
92
|
-
|
|
93
|
-
write!(&mut s, "{}", SetForegroundColor(Color::Grey)).unwrap();
|
|
94
|
-
s.push('[');
|
|
95
|
-
|
|
96
|
-
write!(
|
|
97
|
-
&mut s,
|
|
98
|
-
"{}",
|
|
99
|
-
SetForegroundColor(Color::Rgb {
|
|
100
|
-
r: 29,
|
|
101
|
-
g: 211,
|
|
102
|
-
b: 176,
|
|
103
|
-
})
|
|
104
|
-
)
|
|
105
|
-
.unwrap();
|
|
106
|
-
write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
|
|
107
|
-
s.push_str("Devalang");
|
|
108
|
-
write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
|
|
109
|
-
|
|
110
|
-
write!(&mut s, "{}", SetForegroundColor(Color::Grey)).unwrap();
|
|
111
|
-
s.push(']');
|
|
112
|
-
write!(&mut s, "{}", ResetColor).unwrap();
|
|
113
|
-
|
|
114
|
-
s
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
#[cfg(not(feature = "cli"))]
|
|
118
|
-
#[allow(dead_code)]
|
|
119
|
-
fn language_signature(&self) -> String {
|
|
120
|
-
"[Devalang]".to_string()
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
#[cfg(feature = "cli")]
|
|
124
|
-
fn format_status(&self, level: LogLevel) -> String {
|
|
125
|
-
let mut s = String::new();
|
|
126
|
-
|
|
127
|
-
let color = match level {
|
|
128
|
-
LogLevel::Success => Color::Rgb {
|
|
129
|
-
r: 76,
|
|
130
|
-
g: 175,
|
|
131
|
-
b: 80,
|
|
132
|
-
},
|
|
133
|
-
LogLevel::Error => Color::Rgb {
|
|
134
|
-
r: 244,
|
|
135
|
-
g: 67,
|
|
136
|
-
b: 54,
|
|
137
|
-
},
|
|
138
|
-
LogLevel::Info => Color::Rgb {
|
|
139
|
-
r: 33,
|
|
140
|
-
g: 150,
|
|
141
|
-
b: 243,
|
|
142
|
-
},
|
|
143
|
-
LogLevel::Warning => Color::Rgb {
|
|
144
|
-
r: 255,
|
|
145
|
-
g: 152,
|
|
146
|
-
b: 0,
|
|
147
|
-
},
|
|
148
|
-
LogLevel::Watcher => Color::Rgb {
|
|
149
|
-
r: 156,
|
|
150
|
-
g: 39,
|
|
151
|
-
b: 176,
|
|
152
|
-
},
|
|
153
|
-
LogLevel::Debug => Color::Rgb {
|
|
154
|
-
r: 103,
|
|
155
|
-
g: 58,
|
|
156
|
-
b: 183,
|
|
157
|
-
},
|
|
158
|
-
LogLevel::Print => Color::Rgb {
|
|
159
|
-
r: 255,
|
|
160
|
-
g: 255,
|
|
161
|
-
b: 255,
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
let status = match level {
|
|
166
|
-
LogLevel::Success => "SUCCESS",
|
|
167
|
-
LogLevel::Error => "ERROR",
|
|
168
|
-
LogLevel::Info => "INFO",
|
|
169
|
-
LogLevel::Warning => "WARNING",
|
|
170
|
-
LogLevel::Watcher => "WATCHER",
|
|
171
|
-
LogLevel::Debug => "DEBUG",
|
|
172
|
-
LogLevel::Print => "PRINT",
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
s.push('[');
|
|
176
|
-
write!(&mut s, "{}", SetForegroundColor(color)).unwrap();
|
|
177
|
-
write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
|
|
178
|
-
s.push_str(status);
|
|
179
|
-
write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
|
|
180
|
-
s.push(']');
|
|
181
|
-
write!(&mut s, "{}", ResetColor).unwrap();
|
|
182
|
-
|
|
183
|
-
s
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
#[cfg(not(feature = "cli"))]
|
|
187
|
-
#[allow(dead_code)]
|
|
188
|
-
fn format_status(&self, level: LogLevel) -> String {
|
|
189
|
-
(match level {
|
|
190
|
-
LogLevel::Success => "[SUCCESS]",
|
|
191
|
-
LogLevel::Error => "[ERROR]",
|
|
192
|
-
LogLevel::Info => "[INFO]",
|
|
193
|
-
LogLevel::Warning => "[WARNING]",
|
|
194
|
-
LogLevel::Watcher => "[WATCHER]",
|
|
195
|
-
LogLevel::Debug => "[DEBUG]",
|
|
196
|
-
LogLevel::Print => "[PRINT]",
|
|
197
|
-
})
|
|
198
|
-
.to_string()
|
|
199
|
-
}
|
|
200
|
-
}
|
|
1
|
+
#[cfg(feature = "cli")]
|
|
2
|
+
use crossterm::style::{Attribute, Color, ResetColor, SetAttribute, SetForegroundColor};
|
|
3
|
+
#[cfg(feature = "cli")]
|
|
4
|
+
use std::fmt::Write;
|
|
5
|
+
|
|
6
|
+
#[derive(Debug, Clone, PartialEq)]
|
|
7
|
+
pub enum LogLevel {
|
|
8
|
+
Success,
|
|
9
|
+
Error,
|
|
10
|
+
Info,
|
|
11
|
+
Print,
|
|
12
|
+
Warning,
|
|
13
|
+
Watcher,
|
|
14
|
+
Debug,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#[derive(Debug, Clone)]
|
|
18
|
+
pub struct Logger;
|
|
19
|
+
|
|
20
|
+
impl Logger {
|
|
21
|
+
pub fn new() -> Self {
|
|
22
|
+
Logger
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Some methods are only used in CLI builds; silence dead_code warnings for non-cli.
|
|
26
|
+
#[cfg(not(feature = "cli"))]
|
|
27
|
+
#[allow(dead_code)]
|
|
28
|
+
fn __wasm_only_allow_dead_code(&self) {}
|
|
29
|
+
|
|
30
|
+
// Additionally allow dead_code for the CLI-only formatting helpers when building without cli
|
|
31
|
+
#[cfg(not(feature = "cli"))]
|
|
32
|
+
#[allow(dead_code)]
|
|
33
|
+
fn __wasm_only_format_helpers(&self) {}
|
|
34
|
+
|
|
35
|
+
#[cfg(feature = "cli")]
|
|
36
|
+
pub fn log_message(&self, level: LogLevel, message: &str) {
|
|
37
|
+
let formatted_status = self.format_status(level);
|
|
38
|
+
println!(
|
|
39
|
+
"🦊 {} {} {}",
|
|
40
|
+
self.language_signature(),
|
|
41
|
+
formatted_status,
|
|
42
|
+
message
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#[cfg(not(feature = "cli"))]
|
|
47
|
+
pub fn log_message(&self, _level: LogLevel, _message: &str) {
|
|
48
|
+
// no-op for WASM
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
#[cfg(feature = "cli")]
|
|
52
|
+
pub fn log_message_with_trace(&self, level: LogLevel, message: &str, trace: Vec<&str>) {
|
|
53
|
+
let formatted_status = self.format_status(level);
|
|
54
|
+
println!(
|
|
55
|
+
"🦊 {} {} {}",
|
|
56
|
+
self.language_signature(),
|
|
57
|
+
formatted_status,
|
|
58
|
+
message
|
|
59
|
+
);
|
|
60
|
+
for t in trace {
|
|
61
|
+
println!(" ↳ {}", t);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
#[cfg(not(feature = "cli"))]
|
|
66
|
+
pub fn log_message_with_trace(&self, _level: LogLevel, _message: &str, _trace: Vec<&str>) {
|
|
67
|
+
// no-op for WASM
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
#[cfg(feature = "cli")]
|
|
71
|
+
pub fn log_error_with_stacktrace(&self, message: &str, stacktrace: &str) {
|
|
72
|
+
let formatted_status = self.format_status(LogLevel::Error);
|
|
73
|
+
println!(
|
|
74
|
+
"🦊 {} {} {}",
|
|
75
|
+
self.language_signature(),
|
|
76
|
+
formatted_status,
|
|
77
|
+
message
|
|
78
|
+
);
|
|
79
|
+
println!(" ↳ {}", stacktrace);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#[cfg(not(feature = "cli"))]
|
|
83
|
+
pub fn log_error_with_stacktrace(&self, _message: &str, _stacktrace: &str) {
|
|
84
|
+
// no-op for WASM
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
#[cfg(feature = "cli")]
|
|
88
|
+
#[allow(dead_code)]
|
|
89
|
+
#[cfg_attr(not(feature = "cli"), allow(dead_code))]
|
|
90
|
+
fn language_signature(&self) -> String {
|
|
91
|
+
let mut s = String::new();
|
|
92
|
+
|
|
93
|
+
write!(&mut s, "{}", SetForegroundColor(Color::Grey)).unwrap();
|
|
94
|
+
s.push('[');
|
|
95
|
+
|
|
96
|
+
write!(
|
|
97
|
+
&mut s,
|
|
98
|
+
"{}",
|
|
99
|
+
SetForegroundColor(Color::Rgb {
|
|
100
|
+
r: 29,
|
|
101
|
+
g: 211,
|
|
102
|
+
b: 176,
|
|
103
|
+
})
|
|
104
|
+
)
|
|
105
|
+
.unwrap();
|
|
106
|
+
write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
|
|
107
|
+
s.push_str("Devalang");
|
|
108
|
+
write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
|
|
109
|
+
|
|
110
|
+
write!(&mut s, "{}", SetForegroundColor(Color::Grey)).unwrap();
|
|
111
|
+
s.push(']');
|
|
112
|
+
write!(&mut s, "{}", ResetColor).unwrap();
|
|
113
|
+
|
|
114
|
+
s
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
#[cfg(not(feature = "cli"))]
|
|
118
|
+
#[allow(dead_code)]
|
|
119
|
+
fn language_signature(&self) -> String {
|
|
120
|
+
"[Devalang]".to_string()
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
#[cfg(feature = "cli")]
|
|
124
|
+
fn format_status(&self, level: LogLevel) -> String {
|
|
125
|
+
let mut s = String::new();
|
|
126
|
+
|
|
127
|
+
let color = match level {
|
|
128
|
+
LogLevel::Success => Color::Rgb {
|
|
129
|
+
r: 76,
|
|
130
|
+
g: 175,
|
|
131
|
+
b: 80,
|
|
132
|
+
},
|
|
133
|
+
LogLevel::Error => Color::Rgb {
|
|
134
|
+
r: 244,
|
|
135
|
+
g: 67,
|
|
136
|
+
b: 54,
|
|
137
|
+
},
|
|
138
|
+
LogLevel::Info => Color::Rgb {
|
|
139
|
+
r: 33,
|
|
140
|
+
g: 150,
|
|
141
|
+
b: 243,
|
|
142
|
+
},
|
|
143
|
+
LogLevel::Warning => Color::Rgb {
|
|
144
|
+
r: 255,
|
|
145
|
+
g: 152,
|
|
146
|
+
b: 0,
|
|
147
|
+
},
|
|
148
|
+
LogLevel::Watcher => Color::Rgb {
|
|
149
|
+
r: 156,
|
|
150
|
+
g: 39,
|
|
151
|
+
b: 176,
|
|
152
|
+
},
|
|
153
|
+
LogLevel::Debug => Color::Rgb {
|
|
154
|
+
r: 103,
|
|
155
|
+
g: 58,
|
|
156
|
+
b: 183,
|
|
157
|
+
},
|
|
158
|
+
LogLevel::Print => Color::Rgb {
|
|
159
|
+
r: 255,
|
|
160
|
+
g: 255,
|
|
161
|
+
b: 255,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
let status = match level {
|
|
166
|
+
LogLevel::Success => "SUCCESS",
|
|
167
|
+
LogLevel::Error => "ERROR",
|
|
168
|
+
LogLevel::Info => "INFO",
|
|
169
|
+
LogLevel::Warning => "WARNING",
|
|
170
|
+
LogLevel::Watcher => "WATCHER",
|
|
171
|
+
LogLevel::Debug => "DEBUG",
|
|
172
|
+
LogLevel::Print => "PRINT",
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
s.push('[');
|
|
176
|
+
write!(&mut s, "{}", SetForegroundColor(color)).unwrap();
|
|
177
|
+
write!(&mut s, "{}", SetAttribute(Attribute::Bold)).unwrap();
|
|
178
|
+
s.push_str(status);
|
|
179
|
+
write!(&mut s, "{}", SetAttribute(Attribute::Reset)).unwrap();
|
|
180
|
+
s.push(']');
|
|
181
|
+
write!(&mut s, "{}", ResetColor).unwrap();
|
|
182
|
+
|
|
183
|
+
s
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
#[cfg(not(feature = "cli"))]
|
|
187
|
+
#[allow(dead_code)]
|
|
188
|
+
fn format_status(&self, level: LogLevel) -> String {
|
|
189
|
+
(match level {
|
|
190
|
+
LogLevel::Success => "[SUCCESS]",
|
|
191
|
+
LogLevel::Error => "[ERROR]",
|
|
192
|
+
LogLevel::Info => "[INFO]",
|
|
193
|
+
LogLevel::Warning => "[WARNING]",
|
|
194
|
+
LogLevel::Watcher => "[WATCHER]",
|
|
195
|
+
LogLevel::Debug => "[DEBUG]",
|
|
196
|
+
LogLevel::Print => "[PRINT]",
|
|
197
|
+
})
|
|
198
|
+
.to_string()
|
|
199
|
+
}
|
|
200
|
+
}
|