@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.
- package/README.md +182 -152
- package/out-tsc/api.d.ts +180 -0
- package/out-tsc/api.d.ts.map +1 -0
- package/out-tsc/api.js +286 -0
- package/out-tsc/api.js.map +1 -0
- package/out-tsc/bin/index.d.ts +12 -0
- package/out-tsc/bin/index.d.ts.map +1 -0
- package/out-tsc/bin/index.js +20 -54
- package/out-tsc/bin/index.js.map +1 -0
- package/out-tsc/examples/basic-usage.d.ts +8 -0
- package/out-tsc/examples/basic-usage.d.ts.map +1 -0
- package/out-tsc/examples/basic-usage.js +113 -0
- package/out-tsc/examples/basic-usage.js.map +1 -0
- package/out-tsc/index.d.ts +19 -5
- package/out-tsc/index.d.ts.map +1 -0
- package/out-tsc/index.js +24 -6
- package/out-tsc/index.js.map +1 -0
- package/out-tsc/scripts/copy-wasm-dts.d.ts +7 -0
- package/out-tsc/scripts/copy-wasm-dts.d.ts.map +1 -0
- package/out-tsc/scripts/copy-wasm-dts.js +36 -32
- package/out-tsc/scripts/copy-wasm-dts.js.map +1 -0
- package/out-tsc/scripts/postinstall.d.ts +1 -0
- package/out-tsc/scripts/postinstall.d.ts.map +1 -0
- package/out-tsc/scripts/postinstall.js +4 -1
- package/out-tsc/scripts/postinstall.js.map +1 -0
- package/out-tsc/scripts/version/bump.d.ts +5 -1
- package/out-tsc/scripts/version/bump.d.ts.map +1 -0
- package/out-tsc/scripts/version/bump.js +114 -44
- package/out-tsc/scripts/version/bump.js.map +1 -0
- package/out-tsc/scripts/version/fetch.d.ts +12 -1
- package/out-tsc/scripts/version/fetch.d.ts.map +1 -0
- package/out-tsc/scripts/version/fetch.js +68 -24
- package/out-tsc/scripts/version/fetch.js.map +1 -0
- package/out-tsc/scripts/version/index.d.ts +6 -0
- package/out-tsc/scripts/version/index.d.ts.map +1 -0
- package/out-tsc/scripts/version/index.js +44 -22
- package/out-tsc/scripts/version/index.js.map +1 -0
- package/out-tsc/scripts/version/sync.d.ts +5 -1
- package/out-tsc/scripts/version/sync.d.ts.map +1 -0
- package/out-tsc/scripts/version/sync.js +78 -29
- package/out-tsc/scripts/version/sync.js.map +1 -0
- package/out-tsc/types.d.ts +68 -0
- package/out-tsc/types.d.ts.map +1 -0
- package/out-tsc/{core/types/value.js → types.js} +4 -0
- package/out-tsc/types.js.map +1 -0
- package/out-tsc/wasm.d.ts +8 -0
- package/out-tsc/wasm.d.ts.map +1 -0
- package/out-tsc/{core/index.js → wasm.js} +9 -6
- package/out-tsc/wasm.js.map +1 -0
- package/package.json +42 -42
- package/.cargo/config.toml +0 -2
- package/.devalang +0 -9
- package/.github/workflows/ci.yml +0 -103
- package/Cargo.toml +0 -84
- package/docs/CHANGELOG.md +0 -622
- package/docs/CONTRIBUTING.md +0 -101
- package/docs/ROADMAP.md +0 -38
- package/docs/TODO.md +0 -71
- package/examples/automation.deva +0 -42
- package/examples/bank.deva +0 -7
- package/examples/bus.deva +0 -10
- package/examples/chain.deva +0 -19
- package/examples/condition.deva +0 -20
- package/examples/duration.deva +0 -9
- package/examples/effect.deva +0 -2
- package/examples/events.deva +0 -12
- package/examples/filter.deva +0 -11
- package/examples/function.deva +0 -15
- package/examples/group.deva +0 -12
- package/examples/index.deva +0 -63
- package/examples/lfo.deva +0 -9
- package/examples/loop.deva +0 -10
- package/examples/pattern.deva +0 -8
- package/examples/plugin.deva +0 -16
- package/examples/routing.deva +0 -23
- package/examples/samples/hat-808.wav +0 -0
- package/examples/samples/kick-808.wav +0 -0
- package/examples/synth.deva +0 -24
- package/examples/synth_types.deva +0 -17
- package/examples/variables.deva +0 -9
- package/out-tsc/bin/project-version.json +0 -6
- package/out-tsc/core/functions/index.d.ts +0 -42
- package/out-tsc/core/functions/index.js +0 -87
- package/out-tsc/core/index.d.ts +0 -6
- package/out-tsc/core/types/index.d.ts +0 -4
- package/out-tsc/core/types/index.js +0 -20
- package/out-tsc/core/types/plugin.d.ts +0 -18
- package/out-tsc/core/types/plugin.js +0 -2
- package/out-tsc/core/types/result.d.ts +0 -27
- package/out-tsc/core/types/result.js +0 -2
- package/out-tsc/core/types/statement.d.ts +0 -106
- package/out-tsc/core/types/statement.js +0 -2
- package/out-tsc/core/types/value.d.ts +0 -43
- package/out-tsc/pkg/devalang_core.d.ts +0 -15
- package/out-tsc/pkg/devalang_core.js +0 -65
- package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +0 -34
- package/out-tsc/scripts/version/copy-to-binary.d.ts +0 -1
- package/out-tsc/scripts/version/copy-to-binary.js +0 -79
- package/project-version.json +0 -6
- package/rust/bindings/Cargo.toml +0 -9
- package/rust/bindings/src/lib.rs +0 -86
- package/rust/cli/addon/commands.rs +0 -35
- package/rust/cli/addon/download.rs +0 -234
- package/rust/cli/addon/install.rs +0 -33
- package/rust/cli/addon/list.rs +0 -224
- package/rust/cli/addon/metadata.rs +0 -124
- package/rust/cli/addon/mod.rs +0 -8
- package/rust/cli/addon/remove.rs +0 -271
- package/rust/cli/addon/update.rs +0 -305
- package/rust/cli/addon/utils.rs +0 -109
- package/rust/cli/build/commands.rs +0 -153
- package/rust/cli/build/mod.rs +0 -2
- package/rust/cli/build/process.rs +0 -165
- package/rust/cli/check/mod.rs +0 -208
- package/rust/cli/discover/commands.rs +0 -275
- package/rust/cli/discover/config.rs +0 -109
- package/rust/cli/discover/fs.rs +0 -19
- package/rust/cli/discover/install.rs +0 -214
- package/rust/cli/discover/metadata.rs +0 -48
- package/rust/cli/discover/mod.rs +0 -5
- package/rust/cli/init/commands.rs +0 -88
- package/rust/cli/init/mod.rs +0 -1
- package/rust/cli/login/commands.rs +0 -124
- package/rust/cli/login/mod.rs +0 -1
- package/rust/cli/me/commands.rs +0 -52
- package/rust/cli/me/mod.rs +0 -1
- package/rust/cli/mod.rs +0 -12
- package/rust/cli/parser.rs +0 -320
- package/rust/cli/play/commands.rs +0 -375
- package/rust/cli/play/io.rs +0 -17
- package/rust/cli/play/mod.rs +0 -5
- package/rust/cli/play/process.rs +0 -159
- package/rust/cli/play/realtime.rs +0 -91
- package/rust/cli/play/utils.rs +0 -23
- package/rust/cli/telemetry/commands.rs +0 -22
- package/rust/cli/telemetry/event_creator.rs +0 -80
- package/rust/cli/telemetry/mod.rs +0 -3
- package/rust/cli/telemetry/send.rs +0 -51
- package/rust/cli/template/commands.rs +0 -69
- package/rust/cli/template/mod.rs +0 -1
- package/rust/cli/update/commands.rs +0 -6
- package/rust/cli/update/mod.rs +0 -1
- package/rust/config/driver.rs +0 -112
- package/rust/config/mod.rs +0 -3
- package/rust/config/ops.rs +0 -26
- package/rust/config/settings.rs +0 -101
- package/rust/core/audio/engine/driver.rs +0 -237
- package/rust/core/audio/engine/export.rs +0 -169
- package/rust/core/audio/engine/helpers.rs +0 -178
- package/rust/core/audio/engine/mod.rs +0 -56
- package/rust/core/audio/engine/notes/dsp.rs +0 -88
- package/rust/core/audio/engine/notes/mod.rs +0 -53
- package/rust/core/audio/engine/notes/params.rs +0 -294
- package/rust/core/audio/engine/sample/insert.rs +0 -300
- package/rust/core/audio/engine/sample/mod.rs +0 -40
- package/rust/core/audio/engine/sample/padding.rs +0 -170
- package/rust/core/audio/evaluator/condition.rs +0 -61
- package/rust/core/audio/evaluator/mod.rs +0 -9
- package/rust/core/audio/evaluator/numeric.rs +0 -152
- package/rust/core/audio/evaluator/rhs.rs +0 -16
- package/rust/core/audio/evaluator/string_expr.rs +0 -94
- package/rust/core/audio/interpreter/driver.rs +0 -574
- package/rust/core/audio/interpreter/mod.rs +0 -2
- package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +0 -179
- package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +0 -398
- package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +0 -323
- package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +0 -3
- package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +0 -371
- package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +0 -3
- package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +0 -192
- package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +0 -24
- package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +0 -116
- package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +0 -97
- package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +0 -100
- package/rust/core/audio/interpreter/statements/automate.rs +0 -16
- package/rust/core/audio/interpreter/statements/call.rs +0 -325
- package/rust/core/audio/interpreter/statements/condition.rs +0 -72
- package/rust/core/audio/interpreter/statements/function.rs +0 -24
- package/rust/core/audio/interpreter/statements/let_.rs +0 -36
- package/rust/core/audio/interpreter/statements/load.rs +0 -17
- package/rust/core/audio/interpreter/statements/loop_.rs +0 -115
- package/rust/core/audio/interpreter/statements/mod.rs +0 -12
- package/rust/core/audio/interpreter/statements/sleep.rs +0 -28
- package/rust/core/audio/interpreter/statements/spawn.rs +0 -302
- package/rust/core/audio/interpreter/statements/tempo.rs +0 -40
- package/rust/core/audio/interpreter/statements/trigger.rs +0 -242
- package/rust/core/audio/loader/mod.rs +0 -1
- package/rust/core/audio/loader/trigger.rs +0 -98
- package/rust/core/audio/mod.rs +0 -6
- package/rust/core/audio/player.rs +0 -70
- package/rust/core/audio/special/easing.rs +0 -189
- package/rust/core/audio/special/env.rs +0 -45
- package/rust/core/audio/special/math.rs +0 -134
- package/rust/core/audio/special/mod.rs +0 -9
- package/rust/core/audio/special/modulator.rs +0 -143
- package/rust/core/builder/mod.rs +0 -129
- package/rust/core/debugger/lexer.rs +0 -27
- package/rust/core/debugger/logs.rs +0 -52
- package/rust/core/debugger/mod.rs +0 -30
- package/rust/core/debugger/preprocessor.rs +0 -27
- package/rust/core/debugger/store.rs +0 -38
- package/rust/core/error/mod.rs +0 -269
- package/rust/core/lexer/driver.rs +0 -59
- package/rust/core/lexer/handler/arrow.rs +0 -82
- package/rust/core/lexer/handler/at.rs +0 -21
- package/rust/core/lexer/handler/brace.rs +0 -41
- package/rust/core/lexer/handler/colon.rs +0 -21
- package/rust/core/lexer/handler/comment.rs +0 -30
- package/rust/core/lexer/handler/dot.rs +0 -21
- package/rust/core/lexer/handler/driver.rs +0 -337
- package/rust/core/lexer/handler/identifier.rs +0 -47
- package/rust/core/lexer/handler/indent.rs +0 -66
- package/rust/core/lexer/handler/mod.rs +0 -15
- package/rust/core/lexer/handler/newline.rs +0 -23
- package/rust/core/lexer/handler/number.rs +0 -31
- package/rust/core/lexer/handler/operator.rs +0 -46
- package/rust/core/lexer/handler/parenthesis.rs +0 -41
- package/rust/core/lexer/handler/slash.rs +0 -21
- package/rust/core/lexer/handler/string.rs +0 -63
- package/rust/core/lexer/mod.rs +0 -3
- package/rust/core/lexer/token.rs +0 -91
- package/rust/core/mod.rs +0 -9
- package/rust/core/parser/driver/block.rs +0 -111
- package/rust/core/parser/driver/cursor.rs +0 -82
- package/rust/core/parser/driver/driver_impl.rs +0 -159
- package/rust/core/parser/driver/mod.rs +0 -6
- package/rust/core/parser/driver/parse_array.rs +0 -120
- package/rust/core/parser/driver/parse_map.rs +0 -247
- package/rust/core/parser/driver/parser.rs +0 -160
- package/rust/core/parser/handler/arrow_call.rs +0 -328
- package/rust/core/parser/handler/at.rs +0 -279
- package/rust/core/parser/handler/bank.rs +0 -104
- package/rust/core/parser/handler/condition.rs +0 -83
- package/rust/core/parser/handler/dot.rs +0 -148
- package/rust/core/parser/handler/identifier/automate.rs +0 -254
- package/rust/core/parser/handler/identifier/call.rs +0 -91
- package/rust/core/parser/handler/identifier/emit.rs +0 -70
- package/rust/core/parser/handler/identifier/function.rs +0 -113
- package/rust/core/parser/handler/identifier/group.rs +0 -89
- package/rust/core/parser/handler/identifier/let_.rs +0 -173
- package/rust/core/parser/handler/identifier/mod.rs +0 -55
- package/rust/core/parser/handler/identifier/on.rs +0 -107
- package/rust/core/parser/handler/identifier/print.rs +0 -49
- package/rust/core/parser/handler/identifier/sleep.rs +0 -96
- package/rust/core/parser/handler/identifier/spawn.rs +0 -91
- package/rust/core/parser/handler/identifier/synth.rs +0 -171
- package/rust/core/parser/handler/loop_.rs +0 -194
- package/rust/core/parser/handler/mod.rs +0 -9
- package/rust/core/parser/handler/pattern.rs +0 -97
- package/rust/core/parser/handler/tempo.rs +0 -105
- package/rust/core/parser/mod.rs +0 -3
- package/rust/core/parser/statement.rs +0 -10
- package/rust/core/plugin/loader.rs +0 -137
- package/rust/core/plugin/mod.rs +0 -2
- package/rust/core/plugin/runner/mod.rs +0 -11
- package/rust/core/plugin/runner/non_wasm.rs +0 -481
- package/rust/core/plugin/runner/wasm32.rs +0 -44
- package/rust/core/preprocessor/loader/inject.rs +0 -313
- package/rust/core/preprocessor/loader/loader_helpers.rs +0 -110
- package/rust/core/preprocessor/loader/mod.rs +0 -235
- package/rust/core/preprocessor/mod.rs +0 -4
- package/rust/core/preprocessor/module.rs +0 -55
- package/rust/core/preprocessor/processor/handlers.rs +0 -107
- package/rust/core/preprocessor/processor/mod.rs +0 -1
- package/rust/core/preprocessor/resolver/bank.rs +0 -49
- package/rust/core/preprocessor/resolver/call.rs +0 -124
- package/rust/core/preprocessor/resolver/condition.rs +0 -95
- package/rust/core/preprocessor/resolver/driver.rs +0 -324
- package/rust/core/preprocessor/resolver/function.rs +0 -69
- package/rust/core/preprocessor/resolver/group.rs +0 -122
- package/rust/core/preprocessor/resolver/let_.rs +0 -32
- package/rust/core/preprocessor/resolver/loop_.rs +0 -318
- package/rust/core/preprocessor/resolver/mod.rs +0 -16
- package/rust/core/preprocessor/resolver/pattern.rs +0 -95
- package/rust/core/preprocessor/resolver/spawn.rs +0 -99
- package/rust/core/preprocessor/resolver/synth.rs +0 -54
- package/rust/core/preprocessor/resolver/tempo.rs +0 -48
- package/rust/core/preprocessor/resolver/trigger.rs +0 -116
- package/rust/core/preprocessor/resolver/value.rs +0 -176
- package/rust/core/store/global.rs +0 -57
- package/rust/core/store/mod.rs +0 -1
- package/rust/lib.rs +0 -323
- package/rust/macros/Cargo.toml +0 -14
- package/rust/macros/src/lib.rs +0 -52
- package/rust/main.rs +0 -557
- package/rust/types/Cargo.toml +0 -11
- package/rust/types/src/addons.rs +0 -57
- package/rust/types/src/ast.rs +0 -202
- package/rust/types/src/config.rs +0 -82
- package/rust/types/src/lib.rs +0 -15
- package/rust/types/src/plugin.rs +0 -20
- package/rust/types/src/store.rs +0 -139
- package/rust/types/src/telemetry.rs +0 -85
- package/rust/utils/Cargo.toml +0 -29
- package/rust/utils/src/error.rs +0 -186
- package/rust/utils/src/file.rs +0 -477
- package/rust/utils/src/first_usage.rs +0 -97
- package/rust/utils/src/lib.rs +0 -9
- package/rust/utils/src/logger.rs +0 -200
- package/rust/utils/src/path.rs +0 -158
- package/rust/utils/src/signature.rs +0 -41
- package/rust/utils/src/spinner.rs +0 -20
- package/rust/utils/src/version.rs +0 -58
- package/rust/utils/src/watcher.rs +0 -46
- package/rust/web/api.rs +0 -5
- package/rust/web/auth.rs +0 -5
- package/rust/web/cdn.rs +0 -34
- package/rust/web/forge.rs +0 -5
- package/rust/web/mod.rs +0 -5
- package/rust/web/sso.rs +0 -5
- package/templates/minimal/.devalang +0 -5
- package/templates/minimal/README.md +0 -218
- package/templates/minimal/src/index.deva +0 -2
- package/templates/welcome/.devalang +0 -5
- package/templates/welcome/README.md +0 -218
- package/templates/welcome/samples/kick-808.wav +0 -0
- package/templates/welcome/src/index.deva +0 -61
- package/templates/welcome/src/variables.deva +0 -3
- package/tests/integration.rs +0 -21
- package/tests/rust/cli_check_build.rs +0 -21
- package/tests/rust/cli_help.rs +0 -12
- package/tests/rust/cli_template_list.rs +0 -10
- package/tests/rust/cli_version.rs +0 -11
- package/tests/typescript/index.spec.ts +0 -136
- package/tests/typescript/playhead.spec.ts +0 -36
- package/tests/typescript/render_e2e.spec.ts +0 -77
- package/tsconfig.json +0 -115
- package/typescript/bin/index.ts +0 -28
- package/typescript/core/functions/index.ts +0 -94
- package/typescript/core/index.ts +0 -6
- package/typescript/core/types/index.ts +0 -4
- package/typescript/core/types/plugin.ts +0 -19
- package/typescript/core/types/result.ts +0 -29
- package/typescript/core/types/statement.ts +0 -47
- package/typescript/core/types/value.ts +0 -29
- package/typescript/index.ts +0 -8
- package/typescript/pkg/devalang_core.d.ts +0 -4
- package/typescript/pkg/devalang_core.ts +0 -65
- package/typescript/scripts/copy-wasm-dts.ts +0 -41
- package/typescript/scripts/postinstall.ts +0 -85
- package/typescript/scripts/version/bump.ts +0 -44
- package/typescript/scripts/version/copy-to-binary.ts +0 -82
- package/typescript/scripts/version/fetch.ts +0 -18
- package/typescript/scripts/version/index.ts +0 -25
- 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(¤t_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
|
-
}
|
package/rust/cli/init/mod.rs
DELETED
|
@@ -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
|
-
}
|
package/rust/cli/login/mod.rs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
pub mod commands;
|
package/rust/cli/me/commands.rs
DELETED
|
@@ -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
|
-
}
|
package/rust/cli/me/mod.rs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
pub mod commands;
|
package/rust/cli/mod.rs
DELETED
package/rust/cli/parser.rs
DELETED
|
@@ -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
|
-
}
|