@devaloop/devalang 0.0.1-beta.3 → 0.1.2

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 (346) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +251 -221
  3. package/out-tsc/api.d.ts +180 -0
  4. package/out-tsc/api.d.ts.map +1 -0
  5. package/out-tsc/api.js +286 -0
  6. package/out-tsc/api.js.map +1 -0
  7. package/out-tsc/bin/index.d.ts +12 -0
  8. package/out-tsc/bin/index.d.ts.map +1 -0
  9. package/out-tsc/bin/index.js +20 -54
  10. package/out-tsc/bin/index.js.map +1 -0
  11. package/out-tsc/examples/basic-usage.d.ts +8 -0
  12. package/out-tsc/examples/basic-usage.d.ts.map +1 -0
  13. package/out-tsc/examples/basic-usage.js +113 -0
  14. package/out-tsc/examples/basic-usage.js.map +1 -0
  15. package/out-tsc/index.d.ts +19 -5
  16. package/out-tsc/index.d.ts.map +1 -0
  17. package/out-tsc/index.js +24 -6
  18. package/out-tsc/index.js.map +1 -0
  19. package/out-tsc/scripts/copy-wasm-dts.d.ts +7 -0
  20. package/out-tsc/scripts/copy-wasm-dts.d.ts.map +1 -0
  21. package/out-tsc/scripts/copy-wasm-dts.js +36 -32
  22. package/out-tsc/scripts/copy-wasm-dts.js.map +1 -0
  23. package/out-tsc/scripts/postinstall.d.ts +1 -0
  24. package/out-tsc/scripts/postinstall.d.ts.map +1 -0
  25. package/out-tsc/scripts/postinstall.js +4 -1
  26. package/out-tsc/scripts/postinstall.js.map +1 -0
  27. package/out-tsc/scripts/version/bump.d.ts +5 -1
  28. package/out-tsc/scripts/version/bump.d.ts.map +1 -0
  29. package/out-tsc/scripts/version/bump.js +122 -44
  30. package/out-tsc/scripts/version/bump.js.map +1 -0
  31. package/out-tsc/scripts/version/fetch.d.ts +12 -1
  32. package/out-tsc/scripts/version/fetch.d.ts.map +1 -0
  33. package/out-tsc/scripts/version/fetch.js +68 -24
  34. package/out-tsc/scripts/version/fetch.js.map +1 -0
  35. package/out-tsc/scripts/version/index.d.ts +6 -0
  36. package/out-tsc/scripts/version/index.d.ts.map +1 -0
  37. package/out-tsc/scripts/version/index.js +44 -22
  38. package/out-tsc/scripts/version/index.js.map +1 -0
  39. package/out-tsc/scripts/version/sync.d.ts +5 -1
  40. package/out-tsc/scripts/version/sync.d.ts.map +1 -0
  41. package/out-tsc/scripts/version/sync.js +95 -29
  42. package/out-tsc/scripts/version/sync.js.map +1 -0
  43. package/out-tsc/types.d.ts +68 -0
  44. package/out-tsc/types.d.ts.map +1 -0
  45. package/out-tsc/{core/types/value.js → types.js} +4 -0
  46. package/out-tsc/types.js.map +1 -0
  47. package/out-tsc/wasm.d.ts +8 -0
  48. package/out-tsc/wasm.d.ts.map +1 -0
  49. package/out-tsc/{core/index.js → wasm.js} +9 -6
  50. package/out-tsc/wasm.js.map +1 -0
  51. package/package.json +42 -42
  52. package/.cargo/config.toml +0 -2
  53. package/.devalang +0 -9
  54. package/.github/workflows/ci.yml +0 -103
  55. package/Cargo.toml +0 -84
  56. package/docs/CHANGELOG.md +0 -622
  57. package/docs/CONTRIBUTING.md +0 -101
  58. package/docs/ROADMAP.md +0 -38
  59. package/docs/TODO.md +0 -71
  60. package/examples/automation.deva +0 -42
  61. package/examples/bank.deva +0 -7
  62. package/examples/bus.deva +0 -10
  63. package/examples/chain.deva +0 -19
  64. package/examples/condition.deva +0 -20
  65. package/examples/duration.deva +0 -9
  66. package/examples/effect.deva +0 -2
  67. package/examples/events.deva +0 -12
  68. package/examples/filter.deva +0 -11
  69. package/examples/function.deva +0 -15
  70. package/examples/group.deva +0 -12
  71. package/examples/index.deva +0 -63
  72. package/examples/lfo.deva +0 -9
  73. package/examples/loop.deva +0 -10
  74. package/examples/pattern.deva +0 -8
  75. package/examples/plugin.deva +0 -16
  76. package/examples/routing.deva +0 -23
  77. package/examples/samples/hat-808.wav +0 -0
  78. package/examples/samples/kick-808.wav +0 -0
  79. package/examples/synth.deva +0 -24
  80. package/examples/synth_types.deva +0 -17
  81. package/examples/variables.deva +0 -9
  82. package/out-tsc/bin/project-version.json +0 -6
  83. package/out-tsc/core/functions/index.d.ts +0 -42
  84. package/out-tsc/core/functions/index.js +0 -87
  85. package/out-tsc/core/index.d.ts +0 -6
  86. package/out-tsc/core/types/index.d.ts +0 -4
  87. package/out-tsc/core/types/index.js +0 -20
  88. package/out-tsc/core/types/plugin.d.ts +0 -18
  89. package/out-tsc/core/types/plugin.js +0 -2
  90. package/out-tsc/core/types/result.d.ts +0 -27
  91. package/out-tsc/core/types/result.js +0 -2
  92. package/out-tsc/core/types/statement.d.ts +0 -106
  93. package/out-tsc/core/types/statement.js +0 -2
  94. package/out-tsc/core/types/value.d.ts +0 -43
  95. package/out-tsc/pkg/devalang_core.d.ts +0 -15
  96. package/out-tsc/pkg/devalang_core.js +0 -65
  97. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +0 -34
  98. package/out-tsc/scripts/version/copy-to-binary.d.ts +0 -1
  99. package/out-tsc/scripts/version/copy-to-binary.js +0 -79
  100. package/project-version.json +0 -6
  101. package/rust/bindings/Cargo.toml +0 -9
  102. package/rust/bindings/src/lib.rs +0 -86
  103. package/rust/cli/addon/commands.rs +0 -35
  104. package/rust/cli/addon/download.rs +0 -234
  105. package/rust/cli/addon/install.rs +0 -33
  106. package/rust/cli/addon/list.rs +0 -224
  107. package/rust/cli/addon/metadata.rs +0 -124
  108. package/rust/cli/addon/mod.rs +0 -8
  109. package/rust/cli/addon/remove.rs +0 -271
  110. package/rust/cli/addon/update.rs +0 -305
  111. package/rust/cli/addon/utils.rs +0 -109
  112. package/rust/cli/build/commands.rs +0 -153
  113. package/rust/cli/build/mod.rs +0 -2
  114. package/rust/cli/build/process.rs +0 -165
  115. package/rust/cli/check/mod.rs +0 -208
  116. package/rust/cli/discover/commands.rs +0 -275
  117. package/rust/cli/discover/config.rs +0 -109
  118. package/rust/cli/discover/fs.rs +0 -19
  119. package/rust/cli/discover/install.rs +0 -214
  120. package/rust/cli/discover/metadata.rs +0 -48
  121. package/rust/cli/discover/mod.rs +0 -5
  122. package/rust/cli/init/commands.rs +0 -88
  123. package/rust/cli/init/mod.rs +0 -1
  124. package/rust/cli/login/commands.rs +0 -124
  125. package/rust/cli/login/mod.rs +0 -1
  126. package/rust/cli/me/commands.rs +0 -52
  127. package/rust/cli/me/mod.rs +0 -1
  128. package/rust/cli/mod.rs +0 -12
  129. package/rust/cli/parser.rs +0 -320
  130. package/rust/cli/play/commands.rs +0 -375
  131. package/rust/cli/play/io.rs +0 -17
  132. package/rust/cli/play/mod.rs +0 -5
  133. package/rust/cli/play/process.rs +0 -159
  134. package/rust/cli/play/realtime.rs +0 -91
  135. package/rust/cli/play/utils.rs +0 -23
  136. package/rust/cli/telemetry/commands.rs +0 -22
  137. package/rust/cli/telemetry/event_creator.rs +0 -80
  138. package/rust/cli/telemetry/mod.rs +0 -3
  139. package/rust/cli/telemetry/send.rs +0 -51
  140. package/rust/cli/template/commands.rs +0 -69
  141. package/rust/cli/template/mod.rs +0 -1
  142. package/rust/cli/update/commands.rs +0 -6
  143. package/rust/cli/update/mod.rs +0 -1
  144. package/rust/config/driver.rs +0 -112
  145. package/rust/config/mod.rs +0 -3
  146. package/rust/config/ops.rs +0 -26
  147. package/rust/config/settings.rs +0 -101
  148. package/rust/core/audio/engine/driver.rs +0 -237
  149. package/rust/core/audio/engine/export.rs +0 -169
  150. package/rust/core/audio/engine/helpers.rs +0 -178
  151. package/rust/core/audio/engine/mod.rs +0 -56
  152. package/rust/core/audio/engine/notes/dsp.rs +0 -88
  153. package/rust/core/audio/engine/notes/mod.rs +0 -53
  154. package/rust/core/audio/engine/notes/params.rs +0 -294
  155. package/rust/core/audio/engine/sample/insert.rs +0 -300
  156. package/rust/core/audio/engine/sample/mod.rs +0 -40
  157. package/rust/core/audio/engine/sample/padding.rs +0 -170
  158. package/rust/core/audio/evaluator/condition.rs +0 -61
  159. package/rust/core/audio/evaluator/mod.rs +0 -9
  160. package/rust/core/audio/evaluator/numeric.rs +0 -152
  161. package/rust/core/audio/evaluator/rhs.rs +0 -16
  162. package/rust/core/audio/evaluator/string_expr.rs +0 -94
  163. package/rust/core/audio/interpreter/driver.rs +0 -574
  164. package/rust/core/audio/interpreter/mod.rs +0 -2
  165. package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +0 -179
  166. package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +0 -398
  167. package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +0 -323
  168. package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +0 -3
  169. package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +0 -371
  170. package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +0 -3
  171. package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +0 -192
  172. package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +0 -24
  173. package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +0 -116
  174. package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +0 -97
  175. package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +0 -100
  176. package/rust/core/audio/interpreter/statements/automate.rs +0 -16
  177. package/rust/core/audio/interpreter/statements/call.rs +0 -325
  178. package/rust/core/audio/interpreter/statements/condition.rs +0 -72
  179. package/rust/core/audio/interpreter/statements/function.rs +0 -24
  180. package/rust/core/audio/interpreter/statements/let_.rs +0 -36
  181. package/rust/core/audio/interpreter/statements/load.rs +0 -17
  182. package/rust/core/audio/interpreter/statements/loop_.rs +0 -115
  183. package/rust/core/audio/interpreter/statements/mod.rs +0 -12
  184. package/rust/core/audio/interpreter/statements/sleep.rs +0 -28
  185. package/rust/core/audio/interpreter/statements/spawn.rs +0 -302
  186. package/rust/core/audio/interpreter/statements/tempo.rs +0 -40
  187. package/rust/core/audio/interpreter/statements/trigger.rs +0 -242
  188. package/rust/core/audio/loader/mod.rs +0 -1
  189. package/rust/core/audio/loader/trigger.rs +0 -98
  190. package/rust/core/audio/mod.rs +0 -6
  191. package/rust/core/audio/player.rs +0 -70
  192. package/rust/core/audio/special/easing.rs +0 -189
  193. package/rust/core/audio/special/env.rs +0 -45
  194. package/rust/core/audio/special/math.rs +0 -134
  195. package/rust/core/audio/special/mod.rs +0 -9
  196. package/rust/core/audio/special/modulator.rs +0 -143
  197. package/rust/core/builder/mod.rs +0 -129
  198. package/rust/core/debugger/lexer.rs +0 -27
  199. package/rust/core/debugger/logs.rs +0 -52
  200. package/rust/core/debugger/mod.rs +0 -30
  201. package/rust/core/debugger/preprocessor.rs +0 -27
  202. package/rust/core/debugger/store.rs +0 -38
  203. package/rust/core/error/mod.rs +0 -269
  204. package/rust/core/lexer/driver.rs +0 -59
  205. package/rust/core/lexer/handler/arrow.rs +0 -82
  206. package/rust/core/lexer/handler/at.rs +0 -21
  207. package/rust/core/lexer/handler/brace.rs +0 -41
  208. package/rust/core/lexer/handler/colon.rs +0 -21
  209. package/rust/core/lexer/handler/comment.rs +0 -30
  210. package/rust/core/lexer/handler/dot.rs +0 -21
  211. package/rust/core/lexer/handler/driver.rs +0 -337
  212. package/rust/core/lexer/handler/identifier.rs +0 -47
  213. package/rust/core/lexer/handler/indent.rs +0 -66
  214. package/rust/core/lexer/handler/mod.rs +0 -15
  215. package/rust/core/lexer/handler/newline.rs +0 -23
  216. package/rust/core/lexer/handler/number.rs +0 -31
  217. package/rust/core/lexer/handler/operator.rs +0 -46
  218. package/rust/core/lexer/handler/parenthesis.rs +0 -41
  219. package/rust/core/lexer/handler/slash.rs +0 -21
  220. package/rust/core/lexer/handler/string.rs +0 -63
  221. package/rust/core/lexer/mod.rs +0 -3
  222. package/rust/core/lexer/token.rs +0 -91
  223. package/rust/core/mod.rs +0 -9
  224. package/rust/core/parser/driver/block.rs +0 -111
  225. package/rust/core/parser/driver/cursor.rs +0 -82
  226. package/rust/core/parser/driver/driver_impl.rs +0 -159
  227. package/rust/core/parser/driver/mod.rs +0 -6
  228. package/rust/core/parser/driver/parse_array.rs +0 -120
  229. package/rust/core/parser/driver/parse_map.rs +0 -247
  230. package/rust/core/parser/driver/parser.rs +0 -160
  231. package/rust/core/parser/handler/arrow_call.rs +0 -328
  232. package/rust/core/parser/handler/at.rs +0 -279
  233. package/rust/core/parser/handler/bank.rs +0 -104
  234. package/rust/core/parser/handler/condition.rs +0 -83
  235. package/rust/core/parser/handler/dot.rs +0 -148
  236. package/rust/core/parser/handler/identifier/automate.rs +0 -254
  237. package/rust/core/parser/handler/identifier/call.rs +0 -91
  238. package/rust/core/parser/handler/identifier/emit.rs +0 -70
  239. package/rust/core/parser/handler/identifier/function.rs +0 -113
  240. package/rust/core/parser/handler/identifier/group.rs +0 -89
  241. package/rust/core/parser/handler/identifier/let_.rs +0 -173
  242. package/rust/core/parser/handler/identifier/mod.rs +0 -55
  243. package/rust/core/parser/handler/identifier/on.rs +0 -107
  244. package/rust/core/parser/handler/identifier/print.rs +0 -49
  245. package/rust/core/parser/handler/identifier/sleep.rs +0 -96
  246. package/rust/core/parser/handler/identifier/spawn.rs +0 -91
  247. package/rust/core/parser/handler/identifier/synth.rs +0 -171
  248. package/rust/core/parser/handler/loop_.rs +0 -194
  249. package/rust/core/parser/handler/mod.rs +0 -9
  250. package/rust/core/parser/handler/pattern.rs +0 -97
  251. package/rust/core/parser/handler/tempo.rs +0 -105
  252. package/rust/core/parser/mod.rs +0 -3
  253. package/rust/core/parser/statement.rs +0 -10
  254. package/rust/core/plugin/loader.rs +0 -137
  255. package/rust/core/plugin/mod.rs +0 -2
  256. package/rust/core/plugin/runner/mod.rs +0 -11
  257. package/rust/core/plugin/runner/non_wasm.rs +0 -481
  258. package/rust/core/plugin/runner/wasm32.rs +0 -44
  259. package/rust/core/preprocessor/loader/inject.rs +0 -313
  260. package/rust/core/preprocessor/loader/loader_helpers.rs +0 -110
  261. package/rust/core/preprocessor/loader/mod.rs +0 -235
  262. package/rust/core/preprocessor/mod.rs +0 -4
  263. package/rust/core/preprocessor/module.rs +0 -55
  264. package/rust/core/preprocessor/processor/handlers.rs +0 -107
  265. package/rust/core/preprocessor/processor/mod.rs +0 -1
  266. package/rust/core/preprocessor/resolver/bank.rs +0 -49
  267. package/rust/core/preprocessor/resolver/call.rs +0 -124
  268. package/rust/core/preprocessor/resolver/condition.rs +0 -95
  269. package/rust/core/preprocessor/resolver/driver.rs +0 -324
  270. package/rust/core/preprocessor/resolver/function.rs +0 -69
  271. package/rust/core/preprocessor/resolver/group.rs +0 -122
  272. package/rust/core/preprocessor/resolver/let_.rs +0 -32
  273. package/rust/core/preprocessor/resolver/loop_.rs +0 -318
  274. package/rust/core/preprocessor/resolver/mod.rs +0 -16
  275. package/rust/core/preprocessor/resolver/pattern.rs +0 -95
  276. package/rust/core/preprocessor/resolver/spawn.rs +0 -99
  277. package/rust/core/preprocessor/resolver/synth.rs +0 -54
  278. package/rust/core/preprocessor/resolver/tempo.rs +0 -48
  279. package/rust/core/preprocessor/resolver/trigger.rs +0 -116
  280. package/rust/core/preprocessor/resolver/value.rs +0 -176
  281. package/rust/core/store/global.rs +0 -57
  282. package/rust/core/store/mod.rs +0 -1
  283. package/rust/lib.rs +0 -323
  284. package/rust/macros/Cargo.toml +0 -14
  285. package/rust/macros/src/lib.rs +0 -52
  286. package/rust/main.rs +0 -557
  287. package/rust/types/Cargo.toml +0 -11
  288. package/rust/types/src/addons.rs +0 -57
  289. package/rust/types/src/ast.rs +0 -202
  290. package/rust/types/src/config.rs +0 -82
  291. package/rust/types/src/lib.rs +0 -15
  292. package/rust/types/src/plugin.rs +0 -20
  293. package/rust/types/src/store.rs +0 -139
  294. package/rust/types/src/telemetry.rs +0 -85
  295. package/rust/utils/Cargo.toml +0 -29
  296. package/rust/utils/src/error.rs +0 -186
  297. package/rust/utils/src/file.rs +0 -477
  298. package/rust/utils/src/first_usage.rs +0 -97
  299. package/rust/utils/src/lib.rs +0 -9
  300. package/rust/utils/src/logger.rs +0 -200
  301. package/rust/utils/src/path.rs +0 -158
  302. package/rust/utils/src/signature.rs +0 -41
  303. package/rust/utils/src/spinner.rs +0 -20
  304. package/rust/utils/src/version.rs +0 -58
  305. package/rust/utils/src/watcher.rs +0 -46
  306. package/rust/web/api.rs +0 -5
  307. package/rust/web/auth.rs +0 -5
  308. package/rust/web/cdn.rs +0 -34
  309. package/rust/web/forge.rs +0 -5
  310. package/rust/web/mod.rs +0 -5
  311. package/rust/web/sso.rs +0 -5
  312. package/templates/minimal/.devalang +0 -5
  313. package/templates/minimal/README.md +0 -218
  314. package/templates/minimal/src/index.deva +0 -2
  315. package/templates/welcome/.devalang +0 -5
  316. package/templates/welcome/README.md +0 -218
  317. package/templates/welcome/samples/kick-808.wav +0 -0
  318. package/templates/welcome/src/index.deva +0 -61
  319. package/templates/welcome/src/variables.deva +0 -3
  320. package/tests/integration.rs +0 -21
  321. package/tests/rust/cli_check_build.rs +0 -21
  322. package/tests/rust/cli_help.rs +0 -12
  323. package/tests/rust/cli_template_list.rs +0 -10
  324. package/tests/rust/cli_version.rs +0 -11
  325. package/tests/typescript/index.spec.ts +0 -136
  326. package/tests/typescript/playhead.spec.ts +0 -36
  327. package/tests/typescript/render_e2e.spec.ts +0 -77
  328. package/tsconfig.json +0 -115
  329. package/typescript/bin/index.ts +0 -28
  330. package/typescript/core/functions/index.ts +0 -94
  331. package/typescript/core/index.ts +0 -6
  332. package/typescript/core/types/index.ts +0 -4
  333. package/typescript/core/types/plugin.ts +0 -19
  334. package/typescript/core/types/result.ts +0 -29
  335. package/typescript/core/types/statement.ts +0 -47
  336. package/typescript/core/types/value.ts +0 -29
  337. package/typescript/index.ts +0 -8
  338. package/typescript/pkg/devalang_core.d.ts +0 -4
  339. package/typescript/pkg/devalang_core.ts +0 -65
  340. package/typescript/scripts/copy-wasm-dts.ts +0 -41
  341. package/typescript/scripts/postinstall.ts +0 -85
  342. package/typescript/scripts/version/bump.ts +0 -44
  343. package/typescript/scripts/version/copy-to-binary.ts +0 -82
  344. package/typescript/scripts/version/fetch.ts +0 -18
  345. package/typescript/scripts/version/index.ts +0 -25
  346. 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
- }