@devaloop/devalang 0.0.1-alpha.16-hotfix.3 → 0.0.1-alpha.17

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 (232) hide show
  1. package/.cargo/config.toml +2 -0
  2. package/.devalang +6 -10
  3. package/.github/workflows/ci.yml +0 -1
  4. package/Cargo.toml +18 -2
  5. package/README.md +77 -32
  6. package/docs/CHANGELOG.md +46 -0
  7. package/docs/ROADMAP.md +7 -4
  8. package/examples/index.deva +52 -35
  9. package/out-tsc/bin/index.d.ts +2 -0
  10. package/out-tsc/core/functions/index.d.ts +37 -0
  11. package/out-tsc/core/functions/index.js +76 -0
  12. package/out-tsc/core/index.d.ts +6 -0
  13. package/out-tsc/core/index.js +22 -0
  14. package/out-tsc/core/types/index.d.ts +4 -0
  15. package/out-tsc/core/types/index.js +20 -0
  16. package/out-tsc/core/types/plugin.d.ts +18 -0
  17. package/out-tsc/core/types/plugin.js +2 -0
  18. package/out-tsc/core/types/result.d.ts +27 -0
  19. package/out-tsc/core/types/result.js +2 -0
  20. package/out-tsc/core/types/statement.d.ts +106 -0
  21. package/out-tsc/core/types/statement.js +2 -0
  22. package/out-tsc/core/types/value.d.ts +43 -0
  23. package/out-tsc/core/types/value.js +2 -0
  24. package/out-tsc/index.d.ts +7 -0
  25. package/out-tsc/index.js +41 -2
  26. package/out-tsc/pkg/devalang_core.d.ts +7 -0
  27. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +33 -0
  28. package/out-tsc/scripts/copy-wasm-dts.d.ts +1 -0
  29. package/out-tsc/scripts/copy-wasm-dts.js +73 -0
  30. package/out-tsc/scripts/postinstall.d.ts +1 -0
  31. package/out-tsc/scripts/postinstall.js +33 -23
  32. package/out-tsc/scripts/version/bump.d.ts +1 -0
  33. package/out-tsc/scripts/version/fetch.d.ts +1 -0
  34. package/out-tsc/scripts/version/index.d.ts +1 -0
  35. package/out-tsc/scripts/version/sync.d.ts +1 -0
  36. package/package.json +16 -4
  37. package/project-version.json +3 -3
  38. package/rust/cli/bank/api.rs +122 -0
  39. package/rust/cli/bank/commands.rs +275 -0
  40. package/rust/cli/bank/mod.rs +29 -0
  41. package/rust/cli/build/commands.rs +97 -0
  42. package/rust/cli/build/mod.rs +2 -0
  43. package/rust/cli/build/process.rs +146 -0
  44. package/rust/cli/{check.rs → check/mod.rs} +18 -31
  45. package/rust/cli/discover/commands.rs +253 -0
  46. package/rust/cli/discover/config.rs +111 -0
  47. package/rust/cli/discover/fs.rs +19 -0
  48. package/rust/cli/discover/install.rs +103 -0
  49. package/rust/cli/discover/metadata.rs +48 -0
  50. package/rust/cli/discover/mod.rs +5 -0
  51. package/rust/cli/{init.rs → init/commands.rs} +88 -87
  52. package/rust/cli/init/mod.rs +1 -0
  53. package/rust/{installer → cli/install}/addon.rs +5 -9
  54. package/rust/cli/install/bank.rs +53 -0
  55. package/rust/cli/{install.rs → install/commands.rs} +9 -9
  56. package/rust/{installer → cli/install}/mod.rs +2 -3
  57. package/rust/cli/install/plugin.rs +61 -0
  58. package/rust/cli/{login.rs → login/commands.rs} +8 -11
  59. package/rust/cli/login/mod.rs +1 -0
  60. package/rust/cli/mod.rs +2 -2
  61. package/rust/cli/{driver.rs → parser.rs} +7 -2
  62. package/rust/cli/play/commands.rs +324 -0
  63. package/rust/cli/play/io.rs +17 -0
  64. package/rust/cli/play/mod.rs +5 -0
  65. package/rust/cli/play/process.rs +150 -0
  66. package/rust/cli/play/realtime.rs +91 -0
  67. package/rust/cli/play/utils.rs +23 -0
  68. package/rust/cli/{telemetry.rs → telemetry/commands.rs} +4 -4
  69. package/rust/cli/telemetry/event_creator.rs +80 -0
  70. package/rust/cli/telemetry/mod.rs +3 -0
  71. package/rust/cli/telemetry/send.rs +51 -0
  72. package/rust/cli/{template.rs → template/commands.rs} +1 -1
  73. package/rust/cli/template/mod.rs +1 -0
  74. package/rust/cli/{update.rs → update/commands.rs} +6 -6
  75. package/rust/cli/update/mod.rs +1 -0
  76. package/rust/config/driver.rs +57 -72
  77. package/rust/config/mod.rs +1 -2
  78. package/rust/config/ops.rs +26 -0
  79. package/rust/config/settings.rs +40 -42
  80. package/rust/core/audio/engine/helpers.rs +146 -0
  81. package/rust/core/audio/engine/mod.rs +7 -0
  82. package/rust/core/audio/engine/sample.rs +298 -0
  83. package/rust/core/audio/engine/synth.rs +310 -0
  84. package/rust/core/audio/evaluator.rs +15 -12
  85. package/rust/core/audio/interpreter/arrow_call.rs +99 -24
  86. package/rust/core/audio/interpreter/call.rs +81 -60
  87. package/rust/core/audio/interpreter/condition.rs +3 -2
  88. package/rust/core/audio/interpreter/driver.rs +206 -151
  89. package/rust/core/audio/interpreter/let_.rs +1 -1
  90. package/rust/core/audio/interpreter/load.rs +2 -1
  91. package/rust/core/audio/interpreter/loop_.rs +7 -6
  92. package/rust/core/audio/interpreter/sleep.rs +2 -1
  93. package/rust/core/audio/interpreter/spawn.rs +45 -57
  94. package/rust/core/audio/interpreter/tempo.rs +31 -10
  95. package/rust/core/audio/interpreter/trigger.rs +2 -2
  96. package/rust/core/audio/loader/trigger.rs +4 -7
  97. package/rust/core/audio/player.rs +6 -0
  98. package/rust/core/audio/renderer.rs +5 -7
  99. package/rust/core/audio/special/env.rs +3 -1
  100. package/rust/core/audio/special/math.rs +4 -4
  101. package/rust/core/audio/special/modulator.rs +2 -2
  102. package/rust/core/builder/mod.rs +9 -3
  103. package/rust/core/debugger/lexer.rs +1 -1
  104. package/rust/core/debugger/mod.rs +6 -0
  105. package/rust/core/debugger/module.rs +4 -4
  106. package/rust/core/debugger/preprocessor.rs +1 -1
  107. package/rust/core/debugger/store.rs +2 -2
  108. package/rust/core/error/mod.rs +189 -0
  109. package/rust/core/lexer/handler/arrow.rs +1 -1
  110. package/rust/core/lexer/handler/at.rs +1 -1
  111. package/rust/core/lexer/handler/brace.rs +2 -2
  112. package/rust/core/lexer/handler/colon.rs +1 -1
  113. package/rust/core/lexer/handler/comment.rs +1 -1
  114. package/rust/core/lexer/handler/dot.rs +1 -1
  115. package/rust/core/lexer/handler/driver.rs +1 -1
  116. package/rust/core/lexer/handler/identifier.rs +1 -1
  117. package/rust/core/lexer/handler/mod.rs +1 -2
  118. package/rust/core/lexer/handler/number.rs +1 -1
  119. package/rust/core/lexer/handler/operator.rs +1 -1
  120. package/rust/core/lexer/handler/parenthesis.rs +2 -2
  121. package/rust/core/lexer/handler/slash.rs +1 -1
  122. package/rust/core/lexer/handler/string.rs +1 -1
  123. package/rust/core/lexer/mod.rs +22 -12
  124. package/rust/core/lexer/token.rs +90 -97
  125. package/rust/core/mod.rs +0 -1
  126. package/rust/core/parser/driver.rs +66 -13
  127. package/rust/core/parser/handler/arrow_call.rs +28 -8
  128. package/rust/core/parser/handler/at.rs +55 -21
  129. package/rust/core/parser/handler/bank.rs +14 -4
  130. package/rust/core/parser/handler/condition.rs +6 -3
  131. package/rust/core/parser/handler/dot.rs +2 -1
  132. package/rust/core/parser/handler/identifier/automate.rs +13 -16
  133. package/rust/core/parser/handler/identifier/call.rs +4 -4
  134. package/rust/core/parser/handler/identifier/emit.rs +9 -5
  135. package/rust/core/parser/handler/identifier/function.rs +20 -7
  136. package/rust/core/parser/handler/identifier/group.rs +11 -7
  137. package/rust/core/parser/handler/identifier/let_.rs +24 -9
  138. package/rust/core/parser/handler/identifier/mod.rs +6 -5
  139. package/rust/core/parser/handler/identifier/on.rs +16 -7
  140. package/rust/core/parser/handler/identifier/print.rs +6 -9
  141. package/rust/core/parser/handler/identifier/sleep.rs +12 -5
  142. package/rust/core/parser/handler/identifier/spawn.rs +4 -4
  143. package/rust/core/parser/handler/identifier/synth.rs +79 -9
  144. package/rust/core/parser/handler/loop_.rs +39 -14
  145. package/rust/core/parser/handler/tempo.rs +9 -5
  146. package/rust/core/parser/mod.rs +0 -1
  147. package/rust/core/parser/statement.rs +6 -137
  148. package/rust/core/plugin/loader.rs +41 -27
  149. package/rust/core/plugin/runner.rs +68 -17
  150. package/rust/core/preprocessor/loader.rs +155 -33
  151. package/rust/core/preprocessor/processor.rs +2 -2
  152. package/rust/core/preprocessor/resolver/bank.rs +6 -8
  153. package/rust/core/preprocessor/resolver/call.rs +20 -24
  154. package/rust/core/preprocessor/resolver/condition.rs +6 -8
  155. package/rust/core/preprocessor/resolver/driver.rs +14 -16
  156. package/rust/core/preprocessor/resolver/function.rs +6 -6
  157. package/rust/core/preprocessor/resolver/group.rs +6 -8
  158. package/rust/core/preprocessor/resolver/loop_.rs +8 -10
  159. package/rust/core/preprocessor/resolver/spawn.rs +19 -23
  160. package/rust/core/preprocessor/resolver/synth.rs +6 -8
  161. package/rust/core/preprocessor/resolver/tempo.rs +6 -8
  162. package/rust/core/preprocessor/resolver/trigger.rs +22 -19
  163. package/rust/core/preprocessor/resolver/value.rs +99 -4
  164. package/rust/core/store/export.rs +28 -28
  165. package/rust/core/store/function.rs +6 -0
  166. package/rust/core/store/global.rs +7 -1
  167. package/rust/core/store/import.rs +28 -28
  168. package/rust/core/store/variable.rs +1 -1
  169. package/rust/core/utils/mod.rs +0 -1
  170. package/rust/lib.rs +102 -9
  171. package/rust/main.rs +156 -45
  172. package/rust/types/Cargo.toml +8 -0
  173. package/rust/types/src/addons.rs +55 -0
  174. package/rust/types/src/ast.rs +198 -0
  175. package/rust/types/src/config.rs +74 -0
  176. package/rust/types/src/lib.rs +12 -0
  177. package/rust/types/src/telemetry.rs +85 -0
  178. package/rust/utils/Cargo.toml +23 -0
  179. package/rust/utils/{error.rs → src/error.rs} +186 -200
  180. package/rust/utils/src/file.rs +94 -0
  181. package/rust/utils/src/first_usage.rs +97 -0
  182. package/rust/utils/{mod.rs → src/lib.rs} +1 -1
  183. package/rust/utils/{logger.rs → src/logger.rs} +17 -12
  184. package/rust/utils/src/path.rs +88 -0
  185. package/rust/utils/src/signature.rs +41 -0
  186. package/rust/utils/{spinner.rs → src/spinner.rs} +3 -5
  187. package/rust/utils/src/version.rs +27 -0
  188. package/rust/utils/{watcher.rs → src/watcher.rs} +13 -1
  189. package/rust/web/api.rs +5 -0
  190. package/rust/web/cdn.rs +34 -0
  191. package/templates/minimal/README.md +98 -54
  192. package/templates/welcome/README.md +98 -54
  193. package/templates/welcome/src/index.deva +56 -8
  194. package/templates/welcome/src/variables.deva +2 -4
  195. package/tests/rust/TODO.md +0 -0
  196. package/tests/typescript/index.spec.ts +136 -0
  197. package/tests/typescript/playhead.spec.ts +36 -0
  198. package/tests/typescript/render_e2e.spec.ts +77 -0
  199. package/tsconfig.json +1 -1
  200. package/typescript/core/functions/index.ts +83 -0
  201. package/typescript/core/index.ts +6 -0
  202. package/typescript/core/types/index.ts +4 -0
  203. package/typescript/core/types/plugin.ts +19 -0
  204. package/typescript/core/types/result.ts +29 -0
  205. package/typescript/core/types/statement.ts +47 -0
  206. package/typescript/core/types/value.ts +29 -0
  207. package/typescript/index.ts +7 -2
  208. package/typescript/pkg/devalang_core.d.ts +4 -0
  209. package/typescript/scripts/copy-wasm-dts.ts +41 -0
  210. package/rust/cli/bank.rs +0 -462
  211. package/rust/cli/build.rs +0 -252
  212. package/rust/cli/play.rs +0 -1123
  213. package/rust/common/api.rs +0 -5
  214. package/rust/common/cdn.rs +0 -5
  215. package/rust/config/loader.rs +0 -165
  216. package/rust/config/stats.rs +0 -257
  217. package/rust/core/audio/engine.rs +0 -696
  218. package/rust/core/shared/bank.rs +0 -21
  219. package/rust/core/shared/duration.rs +0 -9
  220. package/rust/core/shared/mod.rs +0 -3
  221. package/rust/core/shared/value.rs +0 -35
  222. package/rust/core/utils/validation.rs +0 -35
  223. package/rust/installer/bank.rs +0 -62
  224. package/rust/installer/plugin.rs +0 -54
  225. package/rust/installer/utils.rs +0 -56
  226. package/rust/utils/file.rs +0 -38
  227. package/rust/utils/first_usage.rs +0 -83
  228. package/rust/utils/signature.rs +0 -19
  229. package/rust/utils/telemetry.rs +0 -292
  230. package/rust/utils/version.rs +0 -15
  231. /package/rust/{common → web}/mod.rs +0 -0
  232. /package/rust/{common → web}/sso.rs +0 -0
package/rust/cli/build.rs DELETED
@@ -1,252 +0,0 @@
1
- use crate::{
2
- config::driver::ProjectConfig,
3
- core::{
4
- builder::Builder,
5
- debugger::{
6
- lexer::write_lexer_log_file,
7
- module::{write_module_function_log_file, write_module_variable_log_file},
8
- preprocessor::write_preprocessor_log_file,
9
- store::{write_function_log_file, write_variables_log_file},
10
- },
11
- preprocessor::loader::ModuleLoader,
12
- store::global::GlobalStore,
13
- utils::path::{find_entry_file, normalize_path},
14
- },
15
- utils::{
16
- logger::{LogLevel, Logger},
17
- spinner::with_spinner,
18
- watcher::watch_directory,
19
- },
20
- };
21
- use std::{thread, time::Duration};
22
-
23
- #[cfg(feature = "cli")]
24
- pub fn handle_build_command(
25
- config: Option<ProjectConfig>,
26
- entry: Option<String>,
27
- output: Option<String>,
28
- watch: bool,
29
- debug: bool,
30
- compress: bool,
31
- ) -> Result<(), String> {
32
- let fetched_entry = if entry.is_none() {
33
- config
34
- .as_ref()
35
- .and_then(|c| c.defaults.entry.clone())
36
- .unwrap_or_else(|| "".to_string())
37
- } else {
38
- entry.clone().unwrap_or_else(|| "".to_string())
39
- };
40
-
41
- let fetched_output = if output.is_none() {
42
- config
43
- .as_ref()
44
- .and_then(|c| c.defaults.output.clone())
45
- .unwrap_or_else(|| "".to_string())
46
- } else {
47
- output.clone().unwrap_or_else(|| "".to_string())
48
- };
49
-
50
- let fetched_watch = if watch {
51
- watch
52
- } else {
53
- config
54
- .as_ref()
55
- .and_then(|c| c.defaults.watch)
56
- .unwrap_or(false)
57
- };
58
-
59
- let logger = Logger::new();
60
-
61
- if fetched_entry.is_empty() {
62
- logger.log_message(
63
- LogLevel::Error,
64
- "Entry path is not specified. Please provide a valid entry path.",
65
- );
66
- return Err("missing entry path".to_string());
67
- }
68
- if fetched_output.is_empty() {
69
- logger.log_message(
70
- LogLevel::Error,
71
- "Output directory is not specified. Please provide a valid output directory.",
72
- );
73
- return Err("missing output directory".to_string());
74
- }
75
-
76
- let entry_file = match find_entry_file(&fetched_entry) {
77
- Some(p) => p,
78
- None => {
79
- logger.log_message(
80
- LogLevel::Error,
81
- &format!("❌ index.deva not found in directory: {}", fetched_entry),
82
- );
83
- return Err("index.deva not found".to_string());
84
- }
85
- };
86
-
87
- // SECTION Begin build
88
- if fetched_watch {
89
- let _ = begin_build(entry_file.clone(), fetched_output.clone(), debug, compress);
90
-
91
- logger.log_message(
92
- LogLevel::Watcher,
93
- &format!("Watching for changes in '{}'...", fetched_entry),
94
- );
95
-
96
- watch_directory(entry_file.clone(), move || {
97
- logger.log_message(LogLevel::Watcher, "Detected changes, re-building...");
98
-
99
- let _ = begin_build(entry_file.clone(), fetched_output.clone(), debug, compress);
100
- })
101
- .unwrap();
102
- } else {
103
- let stats_input = begin_build(entry_file.clone(), fetched_output.clone(), debug, compress)?;
104
- let stats = crate::config::stats::compute_from(
105
- &stats_input.statements_by_module,
106
- &stats_input.global_store,
107
- &config,
108
- Some(&fetched_output),
109
- );
110
- crate::config::stats::set_memory_stats(stats.clone());
111
- if let Err(e) = crate::config::stats::save_to_file(&stats) {
112
- eprintln!("[stats] failed to save: {}", e);
113
- }
114
- }
115
- Ok(())
116
- }
117
-
118
- struct BuildStatsInput {
119
- pub statements_by_module:
120
- std::collections::HashMap<String, Vec<crate::core::parser::statement::Statement>>,
121
- pub global_store: crate::core::store::global::GlobalStore,
122
- }
123
-
124
- fn begin_build(
125
- entry: String,
126
- output: String,
127
- debug: bool,
128
- compress: bool,
129
- ) -> Result<BuildStatsInput, String> {
130
- let spinner = with_spinner("Building...", || {
131
- thread::sleep(Duration::from_millis(800));
132
- });
133
-
134
- let duration = std::time::Instant::now();
135
-
136
- let normalized_entry_file = normalize_path(&entry);
137
- let normalized_output_dir = normalize_path(&output);
138
-
139
- let mut global_store = GlobalStore::new();
140
- let module_loader = ModuleLoader::new(&normalized_entry_file, &normalized_output_dir);
141
-
142
- // SECTION Load
143
- // NOTE: We use modules in the build command, so we need to load them
144
- let (modules_tokens, modules_statements) = module_loader.load_all_modules(&mut global_store);
145
-
146
- // SECTION Write logs
147
- if debug {
148
- for (module_path, module) in global_store.modules.clone() {
149
- write_module_variable_log_file(
150
- &normalized_output_dir,
151
- &module_path,
152
- &module.variable_table,
153
- );
154
- write_module_function_log_file(
155
- &normalized_output_dir,
156
- &module_path,
157
- &module.function_table,
158
- );
159
- }
160
-
161
- write_lexer_log_file(
162
- &normalized_output_dir,
163
- "lexer_tokens.log",
164
- modules_tokens.clone(),
165
- );
166
- write_preprocessor_log_file(
167
- &normalized_output_dir,
168
- "resolved_statements.log",
169
- modules_statements.clone(),
170
- );
171
- write_variables_log_file(
172
- &normalized_output_dir,
173
- "global_variables.log",
174
- global_store.variables.clone(),
175
- );
176
- write_function_log_file(
177
- &normalized_output_dir,
178
- "global_functions.log",
179
- global_store.functions.clone(),
180
- );
181
- }
182
-
183
- // SECTION Detect build-time errors prior to building
184
- let all_errors = crate::utils::error::collect_all_errors_with_modules(&modules_statements);
185
- let (warnings, criticals) = crate::utils::error::partition_errors(all_errors);
186
- crate::utils::error::log_errors_with_stack("Build", &warnings, &criticals);
187
- if !criticals.is_empty() {
188
- spinner.finish_and_clear();
189
- return Err(format!(
190
- "build failed with {} critical error(s): {}",
191
- criticals.len(),
192
- criticals[0].message
193
- ));
194
- }
195
-
196
- // SECTION Building AST and Audio
197
- let builder = Builder::new();
198
- builder.build_ast(&modules_statements, &normalized_output_dir, compress);
199
- builder.build_audio(
200
- &modules_statements,
201
- &normalized_output_dir,
202
- &mut global_store,
203
- );
204
-
205
- // SECTION Logging
206
- let logger = Logger::new();
207
-
208
- if debug {
209
- let modules_loaded = global_store
210
- .modules
211
- .iter()
212
- .map(|(k, _)| k)
213
- .collect::<Vec<_>>();
214
- let global_variables_loaded = global_store.variables.variables.keys().collect::<Vec<_>>();
215
- let global_functions_loaded = global_store.functions.functions.keys().collect::<Vec<_>>();
216
-
217
- logger.log_message_with_trace(
218
- LogLevel::Debug,
219
- &format!("Modules loaded: {}", global_store.modules.len()),
220
- modules_loaded.iter().map(|s| s.as_str()).collect(),
221
- );
222
- logger.log_message_with_trace(
223
- LogLevel::Debug,
224
- &format!(
225
- "Global variables: {}",
226
- global_store.variables.variables.len()
227
- ),
228
- global_variables_loaded.iter().map(|s| s.as_str()).collect(),
229
- );
230
- logger.log_message_with_trace(
231
- LogLevel::Debug,
232
- &format!(
233
- "Global functions: {}",
234
- global_store.functions.functions.len()
235
- ),
236
- global_functions_loaded.iter().map(|s| s.as_str()).collect(),
237
- );
238
- }
239
-
240
- let success_message = format!(
241
- "Build completed successfully in {:.2?}. Output files written to: '{}'",
242
- duration.elapsed(),
243
- normalized_output_dir
244
- );
245
-
246
- spinner.finish_and_clear();
247
- logger.log_message(LogLevel::Success, &success_message);
248
- Ok(BuildStatsInput {
249
- statements_by_module: modules_statements,
250
- global_store,
251
- })
252
- }