@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,110 +1,110 @@
|
|
|
1
|
-
use crate::core::preprocessor::loader::inject;
|
|
2
|
-
use crate::core::{
|
|
3
|
-
lexer::{driver::Lexer, token::Token},
|
|
4
|
-
parser::driver::parser::Parser,
|
|
5
|
-
preprocessor::module::Module,
|
|
6
|
-
store::global::GlobalStore,
|
|
7
|
-
};
|
|
8
|
-
use devalang_utils::logger::{LogLevel, Logger};
|
|
9
|
-
use devalang_utils::path::{normalize_path, resolve_relative_path};
|
|
10
|
-
use std::collections::HashMap;
|
|
11
|
-
|
|
12
|
-
pub fn load_module_recursively(
|
|
13
|
-
raw_path: &str,
|
|
14
|
-
global_store: &mut GlobalStore,
|
|
15
|
-
) -> HashMap<String, Vec<Token>> {
|
|
16
|
-
let path = normalize_path(raw_path);
|
|
17
|
-
|
|
18
|
-
// Check if already loaded
|
|
19
|
-
if global_store.modules.contains_key(&path) {
|
|
20
|
-
return HashMap::new();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let lexer = Lexer::new();
|
|
24
|
-
let tokens = match lexer.lex_tokens(&path) {
|
|
25
|
-
Ok(t) => t,
|
|
26
|
-
Err(e) => {
|
|
27
|
-
let logger = Logger::new();
|
|
28
|
-
logger.log_message(LogLevel::Error, &format!("Failed to lex '{}': {}", path, e));
|
|
29
|
-
return HashMap::new();
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
let mut parser = Parser::new();
|
|
34
|
-
parser.set_current_module(path.clone());
|
|
35
|
-
|
|
36
|
-
let statements = parser.parse_tokens(tokens.clone(), global_store);
|
|
37
|
-
|
|
38
|
-
// Insert module into store
|
|
39
|
-
let mut module = Module::new(&path);
|
|
40
|
-
module.tokens = tokens.clone();
|
|
41
|
-
module.statements = statements.clone();
|
|
42
|
-
|
|
43
|
-
// Inject triggers for each bank used in module, respecting aliases
|
|
44
|
-
for (bank_name, alias_opt) in inject::extract_bank_decls(&statements) {
|
|
45
|
-
if let Err(e) = inject::inject_bank_triggers(&mut module, &bank_name, alias_opt) {
|
|
46
|
-
eprintln!("Failed to inject bank triggers for '{}': {}", bank_name, e);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
for (plugin_name, alias) in inject::extract_plugin_uses(&statements) {
|
|
51
|
-
inject::load_plugin_and_register(&mut module, &plugin_name, &alias, global_store);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Inject module variables and functions into global store
|
|
55
|
-
global_store
|
|
56
|
-
.variables
|
|
57
|
-
.variables
|
|
58
|
-
.extend(module.variable_table.variables.clone());
|
|
59
|
-
global_store
|
|
60
|
-
.functions
|
|
61
|
-
.functions
|
|
62
|
-
.extend(module.function_table.functions.clone());
|
|
63
|
-
|
|
64
|
-
// Inject the module into the global store
|
|
65
|
-
global_store.insert_module(path.clone(), module);
|
|
66
|
-
|
|
67
|
-
// Load dependencies
|
|
68
|
-
load_module_imports(&path, global_store);
|
|
69
|
-
|
|
70
|
-
// Return tokens per module
|
|
71
|
-
global_store
|
|
72
|
-
.modules
|
|
73
|
-
.iter()
|
|
74
|
-
.map(|(p, m)| (p.clone(), m.tokens.clone()))
|
|
75
|
-
.collect()
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
pub fn load_module_imports(path: &String, global_store: &mut GlobalStore) {
|
|
79
|
-
let import_paths: Vec<String> = {
|
|
80
|
-
let current_module = match global_store.modules.get(path) {
|
|
81
|
-
Some(module) => module,
|
|
82
|
-
None => {
|
|
83
|
-
eprintln!(
|
|
84
|
-
"[warn] Cannot resolve imports: module '{}' not found in store",
|
|
85
|
-
path
|
|
86
|
-
);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
current_module
|
|
92
|
-
.statements
|
|
93
|
-
.iter()
|
|
94
|
-
.filter_map(|stmt| {
|
|
95
|
-
if let crate::core::parser::statement::StatementKind::Import { source, .. } =
|
|
96
|
-
&stmt.kind
|
|
97
|
-
{
|
|
98
|
-
Some(source.clone())
|
|
99
|
-
} else {
|
|
100
|
-
None
|
|
101
|
-
}
|
|
102
|
-
})
|
|
103
|
-
.collect()
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
for import_path in import_paths {
|
|
107
|
-
let resolved = resolve_relative_path(path, &import_path);
|
|
108
|
-
load_module_recursively(&resolved, global_store);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
1
|
+
use crate::core::preprocessor::loader::inject;
|
|
2
|
+
use crate::core::{
|
|
3
|
+
lexer::{driver::Lexer, token::Token},
|
|
4
|
+
parser::driver::parser::Parser,
|
|
5
|
+
preprocessor::module::Module,
|
|
6
|
+
store::global::GlobalStore,
|
|
7
|
+
};
|
|
8
|
+
use devalang_utils::logger::{LogLevel, Logger};
|
|
9
|
+
use devalang_utils::path::{normalize_path, resolve_relative_path};
|
|
10
|
+
use std::collections::HashMap;
|
|
11
|
+
|
|
12
|
+
pub fn load_module_recursively(
|
|
13
|
+
raw_path: &str,
|
|
14
|
+
global_store: &mut GlobalStore,
|
|
15
|
+
) -> HashMap<String, Vec<Token>> {
|
|
16
|
+
let path = normalize_path(raw_path);
|
|
17
|
+
|
|
18
|
+
// Check if already loaded
|
|
19
|
+
if global_store.modules.contains_key(&path) {
|
|
20
|
+
return HashMap::new();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let lexer = Lexer::new();
|
|
24
|
+
let tokens = match lexer.lex_tokens(&path) {
|
|
25
|
+
Ok(t) => t,
|
|
26
|
+
Err(e) => {
|
|
27
|
+
let logger = Logger::new();
|
|
28
|
+
logger.log_message(LogLevel::Error, &format!("Failed to lex '{}': {}", path, e));
|
|
29
|
+
return HashMap::new();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
let mut parser = Parser::new();
|
|
34
|
+
parser.set_current_module(path.clone());
|
|
35
|
+
|
|
36
|
+
let statements = parser.parse_tokens(tokens.clone(), global_store);
|
|
37
|
+
|
|
38
|
+
// Insert module into store
|
|
39
|
+
let mut module = Module::new(&path);
|
|
40
|
+
module.tokens = tokens.clone();
|
|
41
|
+
module.statements = statements.clone();
|
|
42
|
+
|
|
43
|
+
// Inject triggers for each bank used in module, respecting aliases
|
|
44
|
+
for (bank_name, alias_opt) in inject::extract_bank_decls(&statements) {
|
|
45
|
+
if let Err(e) = inject::inject_bank_triggers(&mut module, &bank_name, alias_opt) {
|
|
46
|
+
eprintln!("Failed to inject bank triggers for '{}': {}", bank_name, e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
for (plugin_name, alias) in inject::extract_plugin_uses(&statements) {
|
|
51
|
+
inject::load_plugin_and_register(&mut module, &plugin_name, &alias, global_store);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Inject module variables and functions into global store
|
|
55
|
+
global_store
|
|
56
|
+
.variables
|
|
57
|
+
.variables
|
|
58
|
+
.extend(module.variable_table.variables.clone());
|
|
59
|
+
global_store
|
|
60
|
+
.functions
|
|
61
|
+
.functions
|
|
62
|
+
.extend(module.function_table.functions.clone());
|
|
63
|
+
|
|
64
|
+
// Inject the module into the global store
|
|
65
|
+
global_store.insert_module(path.clone(), module);
|
|
66
|
+
|
|
67
|
+
// Load dependencies
|
|
68
|
+
load_module_imports(&path, global_store);
|
|
69
|
+
|
|
70
|
+
// Return tokens per module
|
|
71
|
+
global_store
|
|
72
|
+
.modules
|
|
73
|
+
.iter()
|
|
74
|
+
.map(|(p, m)| (p.clone(), m.tokens.clone()))
|
|
75
|
+
.collect()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
pub fn load_module_imports(path: &String, global_store: &mut GlobalStore) {
|
|
79
|
+
let import_paths: Vec<String> = {
|
|
80
|
+
let current_module = match global_store.modules.get(path) {
|
|
81
|
+
Some(module) => module,
|
|
82
|
+
None => {
|
|
83
|
+
eprintln!(
|
|
84
|
+
"[warn] Cannot resolve imports: module '{}' not found in store",
|
|
85
|
+
path
|
|
86
|
+
);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
current_module
|
|
92
|
+
.statements
|
|
93
|
+
.iter()
|
|
94
|
+
.filter_map(|stmt| {
|
|
95
|
+
if let crate::core::parser::statement::StatementKind::Import { source, .. } =
|
|
96
|
+
&stmt.kind
|
|
97
|
+
{
|
|
98
|
+
Some(source.clone())
|
|
99
|
+
} else {
|
|
100
|
+
None
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
.collect()
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
for import_path in import_paths {
|
|
107
|
+
let resolved = resolve_relative_path(path, &import_path);
|
|
108
|
+
load_module_recursively(&resolved, global_store);
|
|
109
|
+
}
|
|
110
|
+
}
|