@devaloop/devalang 0.0.1-beta.3 → 0.1.1

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 (345) hide show
  1. package/README.md +182 -152
  2. package/out-tsc/api.d.ts +180 -0
  3. package/out-tsc/api.d.ts.map +1 -0
  4. package/out-tsc/api.js +286 -0
  5. package/out-tsc/api.js.map +1 -0
  6. package/out-tsc/bin/index.d.ts +12 -0
  7. package/out-tsc/bin/index.d.ts.map +1 -0
  8. package/out-tsc/bin/index.js +20 -54
  9. package/out-tsc/bin/index.js.map +1 -0
  10. package/out-tsc/examples/basic-usage.d.ts +8 -0
  11. package/out-tsc/examples/basic-usage.d.ts.map +1 -0
  12. package/out-tsc/examples/basic-usage.js +113 -0
  13. package/out-tsc/examples/basic-usage.js.map +1 -0
  14. package/out-tsc/index.d.ts +19 -5
  15. package/out-tsc/index.d.ts.map +1 -0
  16. package/out-tsc/index.js +24 -6
  17. package/out-tsc/index.js.map +1 -0
  18. package/out-tsc/scripts/copy-wasm-dts.d.ts +7 -0
  19. package/out-tsc/scripts/copy-wasm-dts.d.ts.map +1 -0
  20. package/out-tsc/scripts/copy-wasm-dts.js +36 -32
  21. package/out-tsc/scripts/copy-wasm-dts.js.map +1 -0
  22. package/out-tsc/scripts/postinstall.d.ts +1 -0
  23. package/out-tsc/scripts/postinstall.d.ts.map +1 -0
  24. package/out-tsc/scripts/postinstall.js +4 -1
  25. package/out-tsc/scripts/postinstall.js.map +1 -0
  26. package/out-tsc/scripts/version/bump.d.ts +5 -1
  27. package/out-tsc/scripts/version/bump.d.ts.map +1 -0
  28. package/out-tsc/scripts/version/bump.js +114 -44
  29. package/out-tsc/scripts/version/bump.js.map +1 -0
  30. package/out-tsc/scripts/version/fetch.d.ts +12 -1
  31. package/out-tsc/scripts/version/fetch.d.ts.map +1 -0
  32. package/out-tsc/scripts/version/fetch.js +68 -24
  33. package/out-tsc/scripts/version/fetch.js.map +1 -0
  34. package/out-tsc/scripts/version/index.d.ts +6 -0
  35. package/out-tsc/scripts/version/index.d.ts.map +1 -0
  36. package/out-tsc/scripts/version/index.js +44 -22
  37. package/out-tsc/scripts/version/index.js.map +1 -0
  38. package/out-tsc/scripts/version/sync.d.ts +5 -1
  39. package/out-tsc/scripts/version/sync.d.ts.map +1 -0
  40. package/out-tsc/scripts/version/sync.js +78 -29
  41. package/out-tsc/scripts/version/sync.js.map +1 -0
  42. package/out-tsc/types.d.ts +68 -0
  43. package/out-tsc/types.d.ts.map +1 -0
  44. package/out-tsc/{core/types/value.js → types.js} +4 -0
  45. package/out-tsc/types.js.map +1 -0
  46. package/out-tsc/wasm.d.ts +8 -0
  47. package/out-tsc/wasm.d.ts.map +1 -0
  48. package/out-tsc/{core/index.js → wasm.js} +9 -6
  49. package/out-tsc/wasm.js.map +1 -0
  50. package/package.json +42 -42
  51. package/.cargo/config.toml +0 -2
  52. package/.devalang +0 -9
  53. package/.github/workflows/ci.yml +0 -103
  54. package/Cargo.toml +0 -84
  55. package/docs/CHANGELOG.md +0 -622
  56. package/docs/CONTRIBUTING.md +0 -101
  57. package/docs/ROADMAP.md +0 -38
  58. package/docs/TODO.md +0 -71
  59. package/examples/automation.deva +0 -42
  60. package/examples/bank.deva +0 -7
  61. package/examples/bus.deva +0 -10
  62. package/examples/chain.deva +0 -19
  63. package/examples/condition.deva +0 -20
  64. package/examples/duration.deva +0 -9
  65. package/examples/effect.deva +0 -2
  66. package/examples/events.deva +0 -12
  67. package/examples/filter.deva +0 -11
  68. package/examples/function.deva +0 -15
  69. package/examples/group.deva +0 -12
  70. package/examples/index.deva +0 -63
  71. package/examples/lfo.deva +0 -9
  72. package/examples/loop.deva +0 -10
  73. package/examples/pattern.deva +0 -8
  74. package/examples/plugin.deva +0 -16
  75. package/examples/routing.deva +0 -23
  76. package/examples/samples/hat-808.wav +0 -0
  77. package/examples/samples/kick-808.wav +0 -0
  78. package/examples/synth.deva +0 -24
  79. package/examples/synth_types.deva +0 -17
  80. package/examples/variables.deva +0 -9
  81. package/out-tsc/bin/project-version.json +0 -6
  82. package/out-tsc/core/functions/index.d.ts +0 -42
  83. package/out-tsc/core/functions/index.js +0 -87
  84. package/out-tsc/core/index.d.ts +0 -6
  85. package/out-tsc/core/types/index.d.ts +0 -4
  86. package/out-tsc/core/types/index.js +0 -20
  87. package/out-tsc/core/types/plugin.d.ts +0 -18
  88. package/out-tsc/core/types/plugin.js +0 -2
  89. package/out-tsc/core/types/result.d.ts +0 -27
  90. package/out-tsc/core/types/result.js +0 -2
  91. package/out-tsc/core/types/statement.d.ts +0 -106
  92. package/out-tsc/core/types/statement.js +0 -2
  93. package/out-tsc/core/types/value.d.ts +0 -43
  94. package/out-tsc/pkg/devalang_core.d.ts +0 -15
  95. package/out-tsc/pkg/devalang_core.js +0 -65
  96. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +0 -34
  97. package/out-tsc/scripts/version/copy-to-binary.d.ts +0 -1
  98. package/out-tsc/scripts/version/copy-to-binary.js +0 -79
  99. package/project-version.json +0 -6
  100. package/rust/bindings/Cargo.toml +0 -9
  101. package/rust/bindings/src/lib.rs +0 -86
  102. package/rust/cli/addon/commands.rs +0 -35
  103. package/rust/cli/addon/download.rs +0 -234
  104. package/rust/cli/addon/install.rs +0 -33
  105. package/rust/cli/addon/list.rs +0 -224
  106. package/rust/cli/addon/metadata.rs +0 -124
  107. package/rust/cli/addon/mod.rs +0 -8
  108. package/rust/cli/addon/remove.rs +0 -271
  109. package/rust/cli/addon/update.rs +0 -305
  110. package/rust/cli/addon/utils.rs +0 -109
  111. package/rust/cli/build/commands.rs +0 -153
  112. package/rust/cli/build/mod.rs +0 -2
  113. package/rust/cli/build/process.rs +0 -165
  114. package/rust/cli/check/mod.rs +0 -208
  115. package/rust/cli/discover/commands.rs +0 -275
  116. package/rust/cli/discover/config.rs +0 -109
  117. package/rust/cli/discover/fs.rs +0 -19
  118. package/rust/cli/discover/install.rs +0 -214
  119. package/rust/cli/discover/metadata.rs +0 -48
  120. package/rust/cli/discover/mod.rs +0 -5
  121. package/rust/cli/init/commands.rs +0 -88
  122. package/rust/cli/init/mod.rs +0 -1
  123. package/rust/cli/login/commands.rs +0 -124
  124. package/rust/cli/login/mod.rs +0 -1
  125. package/rust/cli/me/commands.rs +0 -52
  126. package/rust/cli/me/mod.rs +0 -1
  127. package/rust/cli/mod.rs +0 -12
  128. package/rust/cli/parser.rs +0 -320
  129. package/rust/cli/play/commands.rs +0 -375
  130. package/rust/cli/play/io.rs +0 -17
  131. package/rust/cli/play/mod.rs +0 -5
  132. package/rust/cli/play/process.rs +0 -159
  133. package/rust/cli/play/realtime.rs +0 -91
  134. package/rust/cli/play/utils.rs +0 -23
  135. package/rust/cli/telemetry/commands.rs +0 -22
  136. package/rust/cli/telemetry/event_creator.rs +0 -80
  137. package/rust/cli/telemetry/mod.rs +0 -3
  138. package/rust/cli/telemetry/send.rs +0 -51
  139. package/rust/cli/template/commands.rs +0 -69
  140. package/rust/cli/template/mod.rs +0 -1
  141. package/rust/cli/update/commands.rs +0 -6
  142. package/rust/cli/update/mod.rs +0 -1
  143. package/rust/config/driver.rs +0 -112
  144. package/rust/config/mod.rs +0 -3
  145. package/rust/config/ops.rs +0 -26
  146. package/rust/config/settings.rs +0 -101
  147. package/rust/core/audio/engine/driver.rs +0 -237
  148. package/rust/core/audio/engine/export.rs +0 -169
  149. package/rust/core/audio/engine/helpers.rs +0 -178
  150. package/rust/core/audio/engine/mod.rs +0 -56
  151. package/rust/core/audio/engine/notes/dsp.rs +0 -88
  152. package/rust/core/audio/engine/notes/mod.rs +0 -53
  153. package/rust/core/audio/engine/notes/params.rs +0 -294
  154. package/rust/core/audio/engine/sample/insert.rs +0 -300
  155. package/rust/core/audio/engine/sample/mod.rs +0 -40
  156. package/rust/core/audio/engine/sample/padding.rs +0 -170
  157. package/rust/core/audio/evaluator/condition.rs +0 -61
  158. package/rust/core/audio/evaluator/mod.rs +0 -9
  159. package/rust/core/audio/evaluator/numeric.rs +0 -152
  160. package/rust/core/audio/evaluator/rhs.rs +0 -16
  161. package/rust/core/audio/evaluator/string_expr.rs +0 -94
  162. package/rust/core/audio/interpreter/driver.rs +0 -574
  163. package/rust/core/audio/interpreter/mod.rs +0 -2
  164. package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +0 -179
  165. package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +0 -398
  166. package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +0 -323
  167. package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +0 -3
  168. package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +0 -371
  169. package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +0 -3
  170. package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +0 -192
  171. package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +0 -24
  172. package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +0 -116
  173. package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +0 -97
  174. package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +0 -100
  175. package/rust/core/audio/interpreter/statements/automate.rs +0 -16
  176. package/rust/core/audio/interpreter/statements/call.rs +0 -325
  177. package/rust/core/audio/interpreter/statements/condition.rs +0 -72
  178. package/rust/core/audio/interpreter/statements/function.rs +0 -24
  179. package/rust/core/audio/interpreter/statements/let_.rs +0 -36
  180. package/rust/core/audio/interpreter/statements/load.rs +0 -17
  181. package/rust/core/audio/interpreter/statements/loop_.rs +0 -115
  182. package/rust/core/audio/interpreter/statements/mod.rs +0 -12
  183. package/rust/core/audio/interpreter/statements/sleep.rs +0 -28
  184. package/rust/core/audio/interpreter/statements/spawn.rs +0 -302
  185. package/rust/core/audio/interpreter/statements/tempo.rs +0 -40
  186. package/rust/core/audio/interpreter/statements/trigger.rs +0 -242
  187. package/rust/core/audio/loader/mod.rs +0 -1
  188. package/rust/core/audio/loader/trigger.rs +0 -98
  189. package/rust/core/audio/mod.rs +0 -6
  190. package/rust/core/audio/player.rs +0 -70
  191. package/rust/core/audio/special/easing.rs +0 -189
  192. package/rust/core/audio/special/env.rs +0 -45
  193. package/rust/core/audio/special/math.rs +0 -134
  194. package/rust/core/audio/special/mod.rs +0 -9
  195. package/rust/core/audio/special/modulator.rs +0 -143
  196. package/rust/core/builder/mod.rs +0 -129
  197. package/rust/core/debugger/lexer.rs +0 -27
  198. package/rust/core/debugger/logs.rs +0 -52
  199. package/rust/core/debugger/mod.rs +0 -30
  200. package/rust/core/debugger/preprocessor.rs +0 -27
  201. package/rust/core/debugger/store.rs +0 -38
  202. package/rust/core/error/mod.rs +0 -269
  203. package/rust/core/lexer/driver.rs +0 -59
  204. package/rust/core/lexer/handler/arrow.rs +0 -82
  205. package/rust/core/lexer/handler/at.rs +0 -21
  206. package/rust/core/lexer/handler/brace.rs +0 -41
  207. package/rust/core/lexer/handler/colon.rs +0 -21
  208. package/rust/core/lexer/handler/comment.rs +0 -30
  209. package/rust/core/lexer/handler/dot.rs +0 -21
  210. package/rust/core/lexer/handler/driver.rs +0 -337
  211. package/rust/core/lexer/handler/identifier.rs +0 -47
  212. package/rust/core/lexer/handler/indent.rs +0 -66
  213. package/rust/core/lexer/handler/mod.rs +0 -15
  214. package/rust/core/lexer/handler/newline.rs +0 -23
  215. package/rust/core/lexer/handler/number.rs +0 -31
  216. package/rust/core/lexer/handler/operator.rs +0 -46
  217. package/rust/core/lexer/handler/parenthesis.rs +0 -41
  218. package/rust/core/lexer/handler/slash.rs +0 -21
  219. package/rust/core/lexer/handler/string.rs +0 -63
  220. package/rust/core/lexer/mod.rs +0 -3
  221. package/rust/core/lexer/token.rs +0 -91
  222. package/rust/core/mod.rs +0 -9
  223. package/rust/core/parser/driver/block.rs +0 -111
  224. package/rust/core/parser/driver/cursor.rs +0 -82
  225. package/rust/core/parser/driver/driver_impl.rs +0 -159
  226. package/rust/core/parser/driver/mod.rs +0 -6
  227. package/rust/core/parser/driver/parse_array.rs +0 -120
  228. package/rust/core/parser/driver/parse_map.rs +0 -247
  229. package/rust/core/parser/driver/parser.rs +0 -160
  230. package/rust/core/parser/handler/arrow_call.rs +0 -328
  231. package/rust/core/parser/handler/at.rs +0 -279
  232. package/rust/core/parser/handler/bank.rs +0 -104
  233. package/rust/core/parser/handler/condition.rs +0 -83
  234. package/rust/core/parser/handler/dot.rs +0 -148
  235. package/rust/core/parser/handler/identifier/automate.rs +0 -254
  236. package/rust/core/parser/handler/identifier/call.rs +0 -91
  237. package/rust/core/parser/handler/identifier/emit.rs +0 -70
  238. package/rust/core/parser/handler/identifier/function.rs +0 -113
  239. package/rust/core/parser/handler/identifier/group.rs +0 -89
  240. package/rust/core/parser/handler/identifier/let_.rs +0 -173
  241. package/rust/core/parser/handler/identifier/mod.rs +0 -55
  242. package/rust/core/parser/handler/identifier/on.rs +0 -107
  243. package/rust/core/parser/handler/identifier/print.rs +0 -49
  244. package/rust/core/parser/handler/identifier/sleep.rs +0 -96
  245. package/rust/core/parser/handler/identifier/spawn.rs +0 -91
  246. package/rust/core/parser/handler/identifier/synth.rs +0 -171
  247. package/rust/core/parser/handler/loop_.rs +0 -194
  248. package/rust/core/parser/handler/mod.rs +0 -9
  249. package/rust/core/parser/handler/pattern.rs +0 -97
  250. package/rust/core/parser/handler/tempo.rs +0 -105
  251. package/rust/core/parser/mod.rs +0 -3
  252. package/rust/core/parser/statement.rs +0 -10
  253. package/rust/core/plugin/loader.rs +0 -137
  254. package/rust/core/plugin/mod.rs +0 -2
  255. package/rust/core/plugin/runner/mod.rs +0 -11
  256. package/rust/core/plugin/runner/non_wasm.rs +0 -481
  257. package/rust/core/plugin/runner/wasm32.rs +0 -44
  258. package/rust/core/preprocessor/loader/inject.rs +0 -313
  259. package/rust/core/preprocessor/loader/loader_helpers.rs +0 -110
  260. package/rust/core/preprocessor/loader/mod.rs +0 -235
  261. package/rust/core/preprocessor/mod.rs +0 -4
  262. package/rust/core/preprocessor/module.rs +0 -55
  263. package/rust/core/preprocessor/processor/handlers.rs +0 -107
  264. package/rust/core/preprocessor/processor/mod.rs +0 -1
  265. package/rust/core/preprocessor/resolver/bank.rs +0 -49
  266. package/rust/core/preprocessor/resolver/call.rs +0 -124
  267. package/rust/core/preprocessor/resolver/condition.rs +0 -95
  268. package/rust/core/preprocessor/resolver/driver.rs +0 -324
  269. package/rust/core/preprocessor/resolver/function.rs +0 -69
  270. package/rust/core/preprocessor/resolver/group.rs +0 -122
  271. package/rust/core/preprocessor/resolver/let_.rs +0 -32
  272. package/rust/core/preprocessor/resolver/loop_.rs +0 -318
  273. package/rust/core/preprocessor/resolver/mod.rs +0 -16
  274. package/rust/core/preprocessor/resolver/pattern.rs +0 -95
  275. package/rust/core/preprocessor/resolver/spawn.rs +0 -99
  276. package/rust/core/preprocessor/resolver/synth.rs +0 -54
  277. package/rust/core/preprocessor/resolver/tempo.rs +0 -48
  278. package/rust/core/preprocessor/resolver/trigger.rs +0 -116
  279. package/rust/core/preprocessor/resolver/value.rs +0 -176
  280. package/rust/core/store/global.rs +0 -57
  281. package/rust/core/store/mod.rs +0 -1
  282. package/rust/lib.rs +0 -323
  283. package/rust/macros/Cargo.toml +0 -14
  284. package/rust/macros/src/lib.rs +0 -52
  285. package/rust/main.rs +0 -557
  286. package/rust/types/Cargo.toml +0 -11
  287. package/rust/types/src/addons.rs +0 -57
  288. package/rust/types/src/ast.rs +0 -202
  289. package/rust/types/src/config.rs +0 -82
  290. package/rust/types/src/lib.rs +0 -15
  291. package/rust/types/src/plugin.rs +0 -20
  292. package/rust/types/src/store.rs +0 -139
  293. package/rust/types/src/telemetry.rs +0 -85
  294. package/rust/utils/Cargo.toml +0 -29
  295. package/rust/utils/src/error.rs +0 -186
  296. package/rust/utils/src/file.rs +0 -477
  297. package/rust/utils/src/first_usage.rs +0 -97
  298. package/rust/utils/src/lib.rs +0 -9
  299. package/rust/utils/src/logger.rs +0 -200
  300. package/rust/utils/src/path.rs +0 -158
  301. package/rust/utils/src/signature.rs +0 -41
  302. package/rust/utils/src/spinner.rs +0 -20
  303. package/rust/utils/src/version.rs +0 -58
  304. package/rust/utils/src/watcher.rs +0 -46
  305. package/rust/web/api.rs +0 -5
  306. package/rust/web/auth.rs +0 -5
  307. package/rust/web/cdn.rs +0 -34
  308. package/rust/web/forge.rs +0 -5
  309. package/rust/web/mod.rs +0 -5
  310. package/rust/web/sso.rs +0 -5
  311. package/templates/minimal/.devalang +0 -5
  312. package/templates/minimal/README.md +0 -218
  313. package/templates/minimal/src/index.deva +0 -2
  314. package/templates/welcome/.devalang +0 -5
  315. package/templates/welcome/README.md +0 -218
  316. package/templates/welcome/samples/kick-808.wav +0 -0
  317. package/templates/welcome/src/index.deva +0 -61
  318. package/templates/welcome/src/variables.deva +0 -3
  319. package/tests/integration.rs +0 -21
  320. package/tests/rust/cli_check_build.rs +0 -21
  321. package/tests/rust/cli_help.rs +0 -12
  322. package/tests/rust/cli_template_list.rs +0 -10
  323. package/tests/rust/cli_version.rs +0 -11
  324. package/tests/typescript/index.spec.ts +0 -136
  325. package/tests/typescript/playhead.spec.ts +0 -36
  326. package/tests/typescript/render_e2e.spec.ts +0 -77
  327. package/tsconfig.json +0 -115
  328. package/typescript/bin/index.ts +0 -28
  329. package/typescript/core/functions/index.ts +0 -94
  330. package/typescript/core/index.ts +0 -6
  331. package/typescript/core/types/index.ts +0 -4
  332. package/typescript/core/types/plugin.ts +0 -19
  333. package/typescript/core/types/result.ts +0 -29
  334. package/typescript/core/types/statement.ts +0 -47
  335. package/typescript/core/types/value.ts +0 -29
  336. package/typescript/index.ts +0 -8
  337. package/typescript/pkg/devalang_core.d.ts +0 -4
  338. package/typescript/pkg/devalang_core.ts +0 -65
  339. package/typescript/scripts/copy-wasm-dts.ts +0 -41
  340. package/typescript/scripts/postinstall.ts +0 -85
  341. package/typescript/scripts/version/bump.ts +0 -44
  342. package/typescript/scripts/version/copy-to-binary.ts +0 -82
  343. package/typescript/scripts/version/fetch.ts +0 -18
  344. package/typescript/scripts/version/index.ts +0 -25
  345. package/typescript/scripts/version/sync.ts +0 -24
@@ -1,88 +0,0 @@
1
- use crate::cli::template::commands::get_available_templates;
2
- use devalang_utils::file::copy_dir_recursive;
3
- use include_dir::{Dir, include_dir};
4
- use std::{fs, path::Path};
5
-
6
- #[cfg(feature = "cli")]
7
- use inquire::{Confirm, Select};
8
-
9
- static TEMPLATES_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/templates");
10
-
11
- #[cfg(feature = "cli")]
12
- pub fn handle_init_command(name: Option<String>, template: Option<String>) {
13
- let current_dir = std::env::current_dir().unwrap();
14
- let project_name = name.clone().unwrap_or_else(|| {
15
- current_dir
16
- .file_name()
17
- .unwrap_or_default()
18
- .to_string_lossy()
19
- .to_string()
20
- });
21
-
22
- // Select a template if not provided
23
- let selected_template = template.unwrap_or_else(|| {
24
- Select::new(
25
- "Select a template for your project:",
26
- get_available_templates(),
27
- )
28
- .prompt()
29
- .unwrap_or_else(|_| {
30
- eprintln!("No template selected. Exiting...");
31
- std::process::exit(1);
32
- })
33
- });
34
-
35
- if selected_template.is_empty() {
36
- eprintln!("Template cannot be empty.");
37
- std::process::exit(1);
38
- }
39
-
40
- if name.is_none() {
41
- // Case of initialization in the current directory
42
- if fs::read_dir(&current_dir).unwrap().next().is_some() {
43
- let confirm =
44
- Confirm::new("The current directory is not empty. Do you want to continue?")
45
- .with_default(false)
46
- .prompt()
47
- .unwrap_or(false);
48
-
49
- if !confirm {
50
- eprintln!("Operation cancelled by the user.");
51
- std::process::exit(0);
52
- }
53
- }
54
-
55
- scaffold_project_current_dir(current_dir.as_path(), selected_template);
56
- println!(
57
- "✅ Initialized '{}' project in current directory: {}",
58
- project_name,
59
- current_dir.display()
60
- );
61
- } else {
62
- // Case of initialization in a new directory
63
- let target_path = current_dir.join(&project_name);
64
-
65
- if target_path.exists() {
66
- eprintln!("❌ A folder named '{}' already exists.", project_name);
67
- std::process::exit(1);
68
- }
69
-
70
- fs::create_dir_all(&target_path).expect("Error creating project directory");
71
-
72
- scaffold_project_current_dir(&target_path, selected_template);
73
- println!(
74
- "✅ Initialized '{}' project in: {}",
75
- project_name,
76
- target_path.display()
77
- );
78
- }
79
- }
80
-
81
- fn scaffold_project_current_dir(path: &Path, template: String) {
82
- let template_dir = TEMPLATES_DIR.get_dir(&template).unwrap_or_else(|| {
83
- eprintln!("❌ The template '{}' doesn't exist.", template);
84
- std::process::exit(1);
85
- });
86
-
87
- copy_dir_recursive(template_dir, path, template_dir.path());
88
- }
@@ -1 +0,0 @@
1
- pub mod commands;
@@ -1,124 +0,0 @@
1
- use crate::config::settings::set_user_config_value;
2
- use crate::web::sso::get_sso_url;
3
- use std::str::FromStr;
4
- use tiny_http::Header;
5
- use tiny_http::{Response, Server};
6
- use webbrowser;
7
-
8
- /// Handle the login command
9
- /// This function initiates the login process by opening the browser and waiting for the callback.
10
- #[cfg(feature = "cli")]
11
- pub async fn handle_login_command() -> Result<(), String> {
12
- use devalang_utils::logger::LogLevel;
13
- use devalang_utils::logger::Logger;
14
- use devalang_utils::spinner::start_spinner;
15
-
16
- let logger = Logger::new();
17
-
18
- let mut listener_port = 7878;
19
-
20
- let test_port_already_in_use = format!("127.0.0.1:{}", listener_port);
21
- while std::net::TcpListener::bind(&test_port_already_in_use).is_err() {
22
- listener_port += 1;
23
- }
24
-
25
- let redirect_uri = format!("http://127.0.0.1:{}/callback", listener_port);
26
- let login_url = format!(
27
- "{}/?response_type=code&referer=cli&redirect_uri={}",
28
- get_sso_url(),
29
- redirect_uri
30
- );
31
-
32
- if webbrowser::open(&login_url).is_ok() {
33
- logger.log_message(LogLevel::Info, "Opening browser for login...");
34
- logger.log_message(
35
- LogLevel::Info,
36
- &format!(
37
- "If the browser does not open, please visit the following URL: {}",
38
- login_url
39
- ),
40
- );
41
- } else {
42
- logger.log_message(
43
- LogLevel::Info,
44
- "Please open the following URL in your browser to login:",
45
- );
46
- logger.log_message(LogLevel::Info, &login_url);
47
- }
48
-
49
- let server = Server::http(format!("127.0.0.1:{}", listener_port)).unwrap();
50
-
51
- let spinner = start_spinner("Waiting for authentication...");
52
-
53
- for request in server.incoming_requests() {
54
- let query = request.url().to_string();
55
- if request.url().starts_with("/callback") {
56
- if query.contains("session=") || query.contains("error=") {
57
- let token = query.split("session=").nth(1).unwrap_or("").to_string();
58
-
59
- if !token.is_empty() {
60
- let response_html = r#"
61
- <html>
62
- <body>
63
- <h1>Authentication Successful</h1>
64
- <h2>You can now close this window.</h2>
65
- </body>
66
- </html>
67
- "#;
68
-
69
- let response = Response::from_string(response_html)
70
- .with_status_code(200)
71
- .with_header(Header::from_str("Content-Type: text/html").unwrap());
72
-
73
- request.respond(response).unwrap();
74
-
75
- save_token(&token);
76
-
77
- spinner.finish_and_clear();
78
-
79
- logger.log_message(
80
- LogLevel::Success,
81
- "Authentication successful. Token saved to ~/.devalang/config.json",
82
- );
83
-
84
- break;
85
- } else {
86
- spinner.finish_and_clear();
87
- logger.log_message(LogLevel::Error, "Invalid session token.");
88
- request
89
- .respond(Response::from_string("Invalid session token."))
90
- .unwrap();
91
-
92
- break;
93
- }
94
- } else {
95
- println!("Invalid callback: {}", request.url());
96
-
97
- spinner.finish_and_clear();
98
- logger.log_message(LogLevel::Error, "Invalid callback.");
99
- request
100
- .respond(Response::from_string("Invalid callback."))
101
- .unwrap();
102
-
103
- break;
104
- }
105
- } else if request.url().starts_with("/favicon.ico") {
106
- // Ignore favicon requests
107
- } else {
108
- spinner.finish_and_clear();
109
- logger.log_message(LogLevel::Error, "Invalid request.");
110
- request
111
- .respond(Response::from_string("Invalid request."))
112
- .unwrap();
113
-
114
- break;
115
- }
116
- }
117
-
118
- Ok(())
119
- }
120
-
121
- /// Save the session token to a file in the user's home directory
122
- fn save_token(token: &str) {
123
- set_user_config_value("session", serde_json::Value::String(token.to_string()));
124
- }
@@ -1 +0,0 @@
1
- pub mod commands;
@@ -1,52 +0,0 @@
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
- }
@@ -1 +0,0 @@
1
- pub mod commands;
package/rust/cli/mod.rs DELETED
@@ -1,12 +0,0 @@
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;
@@ -1,320 +0,0 @@
1
- use clap::{Parser, Subcommand, ValueEnum};
2
-
3
- #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
4
- pub enum OutputFormat {
5
- Wav,
6
- Mid,
7
- }
8
-
9
- #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
10
- pub enum AudioFormat {
11
- Wav16,
12
- Wav24,
13
- Wav32,
14
- }
15
-
16
- #[derive(Parser)]
17
- #[command(name = "devalang")]
18
- #[command(author = "Devaloop")]
19
- #[command(about = "🦊 Devalang – A programming language for music and sound.")]
20
- pub struct Cli {
21
- #[arg(long, global = true)]
22
- /// Skips loading the configuration file.
23
- pub no_config: bool,
24
-
25
- #[command(subcommand)]
26
- pub command: Commands,
27
- }
28
-
29
- #[derive(Subcommand)]
30
- pub enum TelemetryCommand {
31
- /// Enables telemetry data collection.
32
- Enable {},
33
- /// Disables telemetry data collection.
34
- Disable {},
35
- }
36
-
37
- #[derive(Subcommand)]
38
- pub enum TemplateCommand {
39
- /// Lists all available templates for Devalang projects.
40
- List,
41
- /// Displays information about a specific template.
42
- Info { name: String },
43
- }
44
-
45
- #[derive(Subcommand)]
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.
61
- Remove { name: String },
62
- }
63
-
64
- #[derive(Subcommand)]
65
- pub enum Commands {
66
- /// Create a new Devalang project.
67
- ///
68
- /// ### Arguments
69
- /// - `name` - The name of the project to create.
70
- /// - `template` - The template to use for the project. Defaults to "default".
71
- ///
72
- /// ### Example
73
- /// ```bash
74
- /// devalang init --name my_project --template default
75
- ///
76
- Init {
77
- #[arg(short, long)]
78
- /// The optional name (directory) of the project to create.
79
- name: Option<String>,
80
-
81
- #[arg(short, long)]
82
- /// The template to use for the project.
83
- ///
84
- /// ### Default value
85
- /// - `default`
86
- ///
87
- template: Option<String>,
88
- },
89
-
90
- /// Manage templates for Devalang projects.
91
- ///
92
- /// ### Subcommands
93
- /// - `list` - Lists all available templates.
94
- /// - `info <name>` - Displays information about a specific template.
95
- ///
96
- /// ### Example
97
- /// ```bash
98
- /// devalang template list
99
- /// devalang template info my_template
100
- /// ```bash
101
- ///
102
- Template {
103
- #[command(subcommand)]
104
- /// The template command to execute.
105
- command: TemplateCommand,
106
- },
107
-
108
- /// Build the program and generate output files.
109
- ///
110
- /// ### Arguments
111
- /// - `entry` - The entry point of the program to build. Defaults to "./src".
112
- /// - `output` - The directory where the output files will be generated. Defaults to "./output".
113
- /// - `watch` - Whether to watch for changes and rebuild. Defaults to "true".
114
- /// - `debug` - Whether to print debug information. Defaults to "false".
115
- /// - `compress` - Whether to compress the output files. Defaults to "false".
116
- ///
117
- /// ### Example
118
- /// ```bash
119
- /// devalang build --entry ./src --output ./output --watch true --debug false --compress false
120
- /// ```
121
- ///
122
- Build {
123
- #[arg(short, long)]
124
- /// The entry point of the program to build.
125
- ///
126
- entry: Option<String>,
127
-
128
- #[arg(short, long)]
129
- /// The directory where the output files will be generated.
130
- ///
131
- output: Option<String>,
132
-
133
- #[arg(long, value_enum, value_delimiter = ',', default_value = "wav,mid")]
134
- /// Which output formats to generate. Comma-separated list is accepted.
135
- ///
136
- /// ### Default value
137
- /// - `wav,mid`
138
- ///
139
- output_format: Vec<OutputFormat>,
140
-
141
- #[arg(long, default_value = "wav16")]
142
- /// Audio format to use for file outputs (affects WAV export).
143
- ///
144
- /// ### Default value
145
- /// - `wav16`
146
- ///
147
- audio_format: AudioFormat,
148
-
149
- #[arg(long, default_value_t = 44100u32)]
150
- /// Sample rate to use for audio export and playback (e.g. 44100, 48000)
151
- sample_rate: u32,
152
-
153
- #[arg(long, default_value_t = false)]
154
- /// Whether to watch for changes and rebuild.
155
- ///
156
- /// ### Default value
157
- /// - `false`
158
- ///
159
- watch: bool,
160
-
161
- #[arg(short, long, default_value_t = false)]
162
- /// Whether to print debug information.
163
- ///
164
- /// ### Default value
165
- /// - `false`
166
- ///
167
- debug: bool,
168
- #[arg(short, long, default_value_t = false)]
169
- /// Whether to compress the output files.
170
- ///
171
- /// ### Default value
172
- /// - `false`
173
- ///
174
- compress: bool,
175
- },
176
-
177
- /// Analyze the program for errors and warnings.
178
- ///
179
- /// ### Arguments
180
- /// - `entry` - The entry point of the program to analyze. Defaults to "./src".
181
- /// - `output` - The directory where the output files will be generated. Defaults to "./output".
182
- /// - `watch` - Whether to watch for changes and re-analyze. Defaults to "true".
183
- /// - `debug` - Whether to print debug information. Defaults to "false".
184
- ///
185
- /// ### Example
186
- /// ```bash
187
- /// devalang check --entry ./src --output ./output --watch true --debug false
188
- /// ```
189
- ///
190
- Check {
191
- #[arg(short, long)]
192
- /// The entry point of the program to analyze.
193
- entry: Option<String>,
194
-
195
- #[arg(short, long)]
196
- /// The directory where the output files will be generated.
197
- output: Option<String>,
198
-
199
- #[arg(long, default_value_t = false)]
200
- /// Whether to watch for changes and re-analyze.
201
- ///
202
- /// ### Default value
203
- /// - `false`
204
- ///
205
- watch: bool,
206
-
207
- #[arg(short, long, default_value_t = false)]
208
- /// Whether to print debug information.
209
- ///
210
- /// ### Default value
211
- /// - `false`
212
- ///
213
- debug: bool,
214
- },
215
-
216
- /// Play the program and generate output files.
217
- ///
218
- /// ### Arguments
219
- /// - `entry` - The entry point of the program to play. Defaults to "./src".
220
- /// - `output` - The directory where the output files will be generated. Defaults to "./output".
221
- /// - `watch` - Whether to watch for changes and re-play. Defaults to "false".
222
- /// - `repeat` - Whether to replay the program after it finishes. Defaults to "false".
223
- /// - `debug` - Whether to print debug information. Defaults to "false".
224
- ///
225
- /// Note: `--repeat` and `--watch` cannot be used together. Instead use `repeat` to watch for changes and replay the program.
226
- ///
227
- /// ### Example
228
- /// ```bash
229
- /// devalang play --entry ./src --output ./output --repeat true --debug false
230
- /// ```
231
- ///
232
- Play {
233
- #[arg(short, long)]
234
- /// The entry point of the program to play.
235
- entry: Option<String>,
236
-
237
- #[arg(short, long)]
238
- /// The directory where the output files will be generated.
239
- output: Option<String>,
240
-
241
- #[arg(long, default_value_t = 44100u32)]
242
- /// Sample rate to use for playback (e.g. 44100, 48000)
243
- sample_rate: u32,
244
-
245
- #[arg(long, default_value = "wav16")]
246
- /// Audio format to use for file outputs (affects WAV export).
247
- ///
248
- /// ### Default value
249
- /// - `wav16`
250
- ///
251
- audio_format: AudioFormat,
252
-
253
- #[arg(long, default_value_t = false)]
254
- /// Whether to watch for changes and re-play.
255
- ///
256
- /// ### Default value
257
- /// - `false`
258
- ///
259
- watch: bool,
260
-
261
- #[arg(long, default_value_t = false)]
262
- /// Whether to replay the program after it finishes.
263
- ///
264
- /// ### Default value
265
- /// - `false`
266
- ///
267
- repeat: bool,
268
-
269
- #[arg(short, long, default_value_t = false)]
270
- /// Whether to print debug information.
271
- ///
272
- /// ### Default value
273
- /// - `false`
274
- ///
275
- debug: bool,
276
- },
277
-
278
- /// Discover available local addons for Devalang.
279
- ///
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
- },
285
-
286
- /// Manage addons for Devalang projects.
287
- ///
288
- /// ### Subcommands
289
- /// - `install <publisher>.<name>` - Installs a new addon.
290
- /// - `list` - Lists installed addons.
291
- /// - `remove <publisher>.<name>` - Removes an existing addon.
292
- ///
293
- Addon {
294
- #[command(subcommand)]
295
- command: AddonCommand,
296
- },
297
-
298
- /// Telemetry settings for Devalang.
299
- ///
300
- /// ### Subcommands
301
- /// - `enable` - Enables telemetry data collection.
302
- /// - `disable` - Disables telemetry data collection.
303
- ///
304
- Telemetry {
305
- #[command(subcommand)]
306
- command: TelemetryCommand,
307
- },
308
-
309
- /// Log in to your Devaloop account.
310
- ///
311
- Login {},
312
-
313
- /// Display information about the current Devalang user.
314
- ///
315
- Me {},
316
-
317
- /// Log out of your Devaloop account.
318
- ///
319
- Logout {},
320
- }