@devaloop/devalang 0.0.1-alpha.14 → 0.0.1-alpha.16

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 (177) hide show
  1. package/.devalang +10 -8
  2. package/.github/workflows/ci.yml +92 -0
  3. package/Cargo.toml +60 -58
  4. package/README.md +32 -15
  5. package/docs/CHANGELOG.md +93 -1
  6. package/docs/CONTRIBUTING.md +101 -1
  7. package/docs/ROADMAP.md +2 -2
  8. package/docs/TODO.md +1 -1
  9. package/examples/automation.deva +42 -0
  10. package/examples/bank.deva +4 -4
  11. package/examples/events.deva +12 -0
  12. package/examples/function.deva +4 -4
  13. package/examples/index.deva +39 -25
  14. package/examples/loop.deva +5 -11
  15. package/examples/pattern.deva +8 -0
  16. package/examples/plugin.deva +16 -0
  17. package/examples/variables.deva +1 -1
  18. package/out-tsc/bin/index.js +51 -7
  19. package/out-tsc/index.js +3 -1
  20. package/out-tsc/scripts/postbuild.js +9 -10
  21. package/out-tsc/scripts/postinstall.js +49 -0
  22. package/package.json +12 -4
  23. package/project-version.json +3 -3
  24. package/rust/cli/bank.rs +462 -456
  25. package/rust/cli/build.rs +252 -199
  26. package/rust/cli/check.rs +221 -180
  27. package/rust/cli/driver.rs +297 -292
  28. package/rust/cli/generator.rs +1 -0
  29. package/rust/cli/init.rs +87 -79
  30. package/rust/cli/install.rs +35 -32
  31. package/rust/cli/login.rs +127 -134
  32. package/rust/cli/mod.rs +13 -11
  33. package/rust/cli/play.rs +1123 -218
  34. package/rust/cli/telemetry.rs +19 -0
  35. package/rust/cli/template.rs +69 -57
  36. package/rust/cli/update.rs +6 -4
  37. package/rust/common/api.rs +5 -8
  38. package/rust/common/cdn.rs +3 -6
  39. package/rust/common/mod.rs +3 -3
  40. package/rust/common/sso.rs +3 -6
  41. package/rust/config/driver.rs +118 -94
  42. package/rust/config/loader.rs +165 -156
  43. package/rust/config/mod.rs +4 -2
  44. package/rust/config/settings.rs +91 -0
  45. package/rust/config/stats.rs +257 -0
  46. package/rust/core/audio/engine.rs +696 -518
  47. package/rust/core/audio/evaluator.rs +263 -31
  48. package/rust/core/audio/interpreter/arrow_call.rs +198 -161
  49. package/rust/core/audio/interpreter/automate.rs +18 -0
  50. package/rust/core/audio/interpreter/call.rs +98 -95
  51. package/rust/core/audio/interpreter/condition.rs +70 -71
  52. package/rust/core/audio/interpreter/driver.rs +487 -198
  53. package/rust/core/audio/interpreter/function.rs +26 -21
  54. package/rust/core/audio/interpreter/let_.rs +38 -19
  55. package/rust/core/audio/interpreter/load.rs +18 -18
  56. package/rust/core/audio/interpreter/loop_.rs +113 -73
  57. package/rust/core/audio/interpreter/mod.rs +14 -13
  58. package/rust/core/audio/interpreter/sleep.rs +27 -30
  59. package/rust/core/audio/interpreter/spawn.rs +105 -102
  60. package/rust/core/audio/interpreter/tempo.rs +19 -16
  61. package/rust/core/audio/interpreter/trigger.rs +239 -210
  62. package/rust/core/audio/loader/mod.rs +1 -1
  63. package/rust/core/audio/loader/trigger.rs +100 -97
  64. package/rust/core/audio/mod.rs +7 -6
  65. package/rust/core/audio/player.rs +64 -64
  66. package/rust/core/audio/renderer.rs +56 -53
  67. package/rust/core/audio/special/easing.rs +189 -0
  68. package/rust/core/audio/special/env.rs +43 -0
  69. package/rust/core/audio/special/math.rs +102 -0
  70. package/rust/core/audio/special/mod.rs +9 -0
  71. package/rust/core/audio/special/modulator.rs +143 -0
  72. package/rust/core/builder/mod.rs +80 -85
  73. package/rust/core/debugger/lexer.rs +27 -27
  74. package/rust/core/debugger/mod.rs +24 -23
  75. package/rust/core/debugger/module.rs +55 -47
  76. package/rust/core/debugger/preprocessor.rs +27 -27
  77. package/rust/core/debugger/store.rs +40 -39
  78. package/rust/core/error/mod.rs +80 -66
  79. package/rust/core/lexer/handler/arrow.rs +82 -31
  80. package/rust/core/lexer/handler/at.rs +21 -21
  81. package/rust/core/lexer/handler/brace.rs +41 -41
  82. package/rust/core/lexer/handler/colon.rs +21 -21
  83. package/rust/core/lexer/handler/comment.rs +30 -30
  84. package/rust/core/lexer/handler/dot.rs +21 -21
  85. package/rust/core/lexer/handler/driver.rs +337 -263
  86. package/rust/core/lexer/handler/identifier.rs +46 -42
  87. package/rust/core/lexer/handler/indent.rs +66 -66
  88. package/rust/core/lexer/handler/mod.rs +16 -16
  89. package/rust/core/lexer/handler/newline.rs +23 -23
  90. package/rust/core/lexer/handler/number.rs +31 -31
  91. package/rust/core/lexer/handler/operator.rs +46 -44
  92. package/rust/core/lexer/handler/parenthesis.rs +41 -41
  93. package/rust/core/lexer/handler/slash.rs +21 -21
  94. package/rust/core/lexer/handler/string.rs +63 -63
  95. package/rust/core/lexer/mod.rs +54 -51
  96. package/rust/core/lexer/token.rs +97 -91
  97. package/rust/core/mod.rs +11 -11
  98. package/rust/core/parser/driver.rs +513 -408
  99. package/rust/core/parser/handler/arrow_call.rs +233 -211
  100. package/rust/core/parser/handler/at.rs +245 -162
  101. package/rust/core/parser/handler/bank.rs +94 -69
  102. package/rust/core/parser/handler/condition.rs +80 -74
  103. package/rust/core/parser/handler/dot.rs +143 -135
  104. package/rust/core/parser/handler/identifier/automate.rs +257 -0
  105. package/rust/core/parser/handler/identifier/call.rs +91 -88
  106. package/rust/core/parser/handler/identifier/emit.rs +66 -0
  107. package/rust/core/parser/handler/identifier/function.rs +100 -92
  108. package/rust/core/parser/handler/identifier/group.rs +85 -75
  109. package/rust/core/parser/handler/identifier/let_.rs +158 -127
  110. package/rust/core/parser/handler/identifier/mod.rs +54 -52
  111. package/rust/core/parser/handler/identifier/on.rs +98 -0
  112. package/rust/core/parser/handler/identifier/print.rs +52 -0
  113. package/rust/core/parser/handler/identifier/sleep.rs +36 -33
  114. package/rust/core/parser/handler/identifier/spawn.rs +91 -88
  115. package/rust/core/parser/handler/identifier/synth.rs +65 -65
  116. package/rust/core/parser/handler/loop_.rs +170 -72
  117. package/rust/core/parser/handler/mod.rs +8 -8
  118. package/rust/core/parser/handler/tempo.rs +53 -47
  119. package/rust/core/parser/mod.rs +4 -4
  120. package/rust/core/parser/statement.rs +142 -108
  121. package/rust/core/plugin/loader.rs +123 -48
  122. package/rust/core/plugin/mod.rs +2 -1
  123. package/rust/core/plugin/runner.rs +296 -0
  124. package/rust/core/preprocessor/loader.rs +515 -326
  125. package/rust/core/preprocessor/mod.rs +4 -4
  126. package/rust/core/preprocessor/module.rs +60 -58
  127. package/rust/core/preprocessor/processor.rs +99 -101
  128. package/rust/core/preprocessor/resolver/bank.rs +51 -49
  129. package/rust/core/preprocessor/resolver/call.rs +100 -100
  130. package/rust/core/preprocessor/resolver/condition.rs +97 -97
  131. package/rust/core/preprocessor/resolver/driver.rs +310 -278
  132. package/rust/core/preprocessor/resolver/function.rs +69 -78
  133. package/rust/core/preprocessor/resolver/group.rs +96 -91
  134. package/rust/core/preprocessor/resolver/let_.rs +32 -28
  135. package/rust/core/preprocessor/resolver/loop_.rs +320 -91
  136. package/rust/core/preprocessor/resolver/mod.rs +15 -15
  137. package/rust/core/preprocessor/resolver/spawn.rs +76 -92
  138. package/rust/core/preprocessor/resolver/synth.rs +56 -50
  139. package/rust/core/preprocessor/resolver/tempo.rs +50 -49
  140. package/rust/core/preprocessor/resolver/trigger.rs +113 -116
  141. package/rust/core/preprocessor/resolver/value.rs +81 -87
  142. package/rust/core/shared/bank.rs +1 -1
  143. package/rust/core/shared/duration.rs +9 -9
  144. package/rust/core/shared/mod.rs +3 -3
  145. package/rust/core/shared/value.rs +35 -32
  146. package/rust/core/store/function.rs +34 -34
  147. package/rust/core/store/global.rs +55 -38
  148. package/rust/core/store/mod.rs +5 -5
  149. package/rust/core/store/variable.rs +37 -34
  150. package/rust/core/utils/mod.rs +2 -2
  151. package/rust/core/utils/path.rs +37 -31
  152. package/rust/core/utils/validation.rs +35 -37
  153. package/rust/installer/addon.rs +84 -80
  154. package/rust/installer/bank.rs +62 -65
  155. package/rust/installer/mod.rs +5 -5
  156. package/rust/installer/plugin.rs +54 -55
  157. package/rust/installer/utils.rs +56 -56
  158. package/rust/lib.rs +156 -164
  159. package/rust/main.rs +250 -145
  160. package/rust/utils/error.rs +200 -0
  161. package/rust/utils/file.rs +38 -35
  162. package/rust/utils/first_usage.rs +76 -0
  163. package/rust/utils/logger.rs +195 -139
  164. package/rust/utils/mod.rs +9 -50
  165. package/rust/utils/signature.rs +19 -17
  166. package/rust/utils/spinner.rs +22 -19
  167. package/rust/utils/telemetry.rs +292 -0
  168. package/rust/utils/watcher.rs +34 -33
  169. package/templates/minimal/README.md +97 -121
  170. package/templates/welcome/README.md +97 -121
  171. package/typescript/bin/index.ts +19 -5
  172. package/typescript/index.ts +3 -1
  173. package/typescript/scripts/postbuild.ts +10 -6
  174. package/typescript/scripts/postinstall.ts +56 -0
  175. package/typescript/scripts/version/bump.ts +0 -1
  176. package/typescript/scripts/version/index.ts +0 -1
  177. package/out-tsc/bin/devalang.exe +0 -0
@@ -1,97 +1,97 @@
1
- use crate::{
2
- core::{
3
- parser::statement::{ Statement, StatementKind },
4
- preprocessor::{ module::Module, resolver::driver::resolve_statement },
5
- shared::value::Value,
6
- store::global::GlobalStore,
7
- },
8
- utils::logger::Logger,
9
- };
10
-
11
- pub fn resolve_condition(
12
- stmt: &Statement,
13
- module: &Module,
14
- path: &str,
15
- global_store: &mut GlobalStore
16
- ) -> Statement {
17
- let logger = Logger::new();
18
-
19
- let Value::Map(condition_map) = &stmt.value else {
20
- return type_error(
21
- &logger,
22
- module,
23
- stmt,
24
- "Expected a map in condition statement".to_string()
25
- );
26
- };
27
-
28
- let mut resolved_map = condition_map.clone();
29
-
30
- // Main body resolution
31
- if let Some(Value::Block(body)) = condition_map.get("body") {
32
- let resolved_body = resolve_block_statements(body, module, path, global_store);
33
- resolved_map.insert("body".to_string(), Value::Block(resolved_body));
34
- }
35
-
36
- // Recursive resolution of next condition
37
- if let Some(Value::Map(next_map)) = condition_map.get("next") {
38
- let next_stmt = Statement {
39
- kind: StatementKind::If,
40
- value: Value::Map(next_map.clone()),
41
- ..stmt.clone()
42
- };
43
-
44
- let resolved_next = resolve_condition(&next_stmt, module, path, global_store);
45
-
46
- if let Value::Map(mut resolved_next_map) = resolved_next.value {
47
- // Body next resolution
48
- if let Some(Value::Block(body)) = resolved_next_map.get("body") {
49
- let resolved_body = resolve_block_statements(body, module, path, global_store);
50
- resolved_next_map.insert("body".to_string(), Value::Block(resolved_body));
51
- }
52
-
53
- resolved_map.insert("next".to_string(), Value::Map(resolved_next_map));
54
- }
55
- }
56
-
57
- Statement {
58
- kind: StatementKind::If,
59
- value: Value::Map(resolved_map),
60
- ..stmt.clone()
61
- }
62
- }
63
-
64
- fn resolve_block_statements(
65
- body: &[Statement],
66
- module: &Module,
67
- path: &str,
68
- global_store: &mut GlobalStore
69
- ) -> Vec<Statement> {
70
- body.iter()
71
- .flat_map(|stmt| {
72
- let resolved = resolve_statement(stmt, module, path, global_store);
73
-
74
- if let StatementKind::Call { .. } = resolved.kind {
75
- if let Value::Block(inner) = &resolved.value {
76
- return inner
77
- .iter()
78
- .map(|s| resolve_statement(s, module, path, global_store))
79
- .collect();
80
- }
81
- }
82
-
83
- vec![resolved]
84
- })
85
- .collect()
86
- }
87
-
88
- fn type_error(logger: &Logger, module: &Module, stmt: &Statement, message: String) -> Statement {
89
- let stacktrace = format!("{}:{}:{}", module.path, stmt.line, stmt.column);
90
- logger.log_error_with_stacktrace(&message, &stacktrace);
91
-
92
- Statement {
93
- kind: StatementKind::Error { message },
94
- value: Value::Null,
95
- ..stmt.clone()
96
- }
97
- }
1
+ use crate::{
2
+ core::{
3
+ parser::statement::{Statement, StatementKind},
4
+ preprocessor::{module::Module, resolver::driver::resolve_statement},
5
+ shared::value::Value,
6
+ store::global::GlobalStore,
7
+ },
8
+ utils::logger::Logger,
9
+ };
10
+
11
+ pub fn resolve_condition(
12
+ stmt: &Statement,
13
+ module: &Module,
14
+ path: &str,
15
+ global_store: &mut GlobalStore,
16
+ ) -> Statement {
17
+ let logger = Logger::new();
18
+
19
+ let Value::Map(condition_map) = &stmt.value else {
20
+ return type_error(
21
+ &logger,
22
+ module,
23
+ stmt,
24
+ "Expected a map in condition statement".to_string(),
25
+ );
26
+ };
27
+
28
+ let mut resolved_map = condition_map.clone();
29
+
30
+ // Main body resolution
31
+ if let Some(Value::Block(body)) = condition_map.get("body") {
32
+ let resolved_body = resolve_block_statements(body, module, path, global_store);
33
+ resolved_map.insert("body".to_string(), Value::Block(resolved_body));
34
+ }
35
+
36
+ // Recursive resolution of next condition
37
+ if let Some(Value::Map(next_map)) = condition_map.get("next") {
38
+ let next_stmt = Statement {
39
+ kind: StatementKind::If,
40
+ value: Value::Map(next_map.clone()),
41
+ ..stmt.clone()
42
+ };
43
+
44
+ let resolved_next = resolve_condition(&next_stmt, module, path, global_store);
45
+
46
+ if let Value::Map(mut resolved_next_map) = resolved_next.value {
47
+ // Body next resolution
48
+ if let Some(Value::Block(body)) = resolved_next_map.get("body") {
49
+ let resolved_body = resolve_block_statements(body, module, path, global_store);
50
+ resolved_next_map.insert("body".to_string(), Value::Block(resolved_body));
51
+ }
52
+
53
+ resolved_map.insert("next".to_string(), Value::Map(resolved_next_map));
54
+ }
55
+ }
56
+
57
+ Statement {
58
+ kind: StatementKind::If,
59
+ value: Value::Map(resolved_map),
60
+ ..stmt.clone()
61
+ }
62
+ }
63
+
64
+ fn resolve_block_statements(
65
+ body: &[Statement],
66
+ module: &Module,
67
+ path: &str,
68
+ global_store: &mut GlobalStore,
69
+ ) -> Vec<Statement> {
70
+ body.iter()
71
+ .flat_map(|stmt| {
72
+ let resolved = resolve_statement(stmt, module, path, global_store);
73
+
74
+ if let StatementKind::Call { .. } = resolved.kind {
75
+ if let Value::Block(inner) = &resolved.value {
76
+ return inner
77
+ .iter()
78
+ .map(|s| resolve_statement(s, module, path, global_store))
79
+ .collect();
80
+ }
81
+ }
82
+
83
+ vec![resolved]
84
+ })
85
+ .collect()
86
+ }
87
+
88
+ fn type_error(logger: &Logger, module: &Module, stmt: &Statement, message: String) -> Statement {
89
+ let stacktrace = format!("{}:{}:{}", module.path, stmt.line, stmt.column);
90
+ logger.log_error_with_stacktrace(&message, &stacktrace);
91
+
92
+ Statement {
93
+ kind: StatementKind::Error { message },
94
+ value: Value::Null,
95
+ ..stmt.clone()
96
+ }
97
+ }