@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.
- package/LICENSE +20 -20
- package/README.md +251 -221
- 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 +122 -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 +95 -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
package/docs/CONTRIBUTING.md
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
<img src="https://devalang.com/images/devalang-logo-min.png" alt="Devalang Logo" width="100" />
|
|
3
|
-
</div>
|
|
4
|
-
|
|
5
|
-
# Contributing to Devalang
|
|
6
|
-
|
|
7
|
-
Thanks for considering a contribution! This document explains how to set up your environment, build the project, and submit changes.
|
|
8
|
-
|
|
9
|
-
## Code of Conduct
|
|
10
|
-
|
|
11
|
-
By participating, you agree to follow our community standards: be respectful, constructive, and empathetic. If something goes wrong, please open an issue.
|
|
12
|
-
|
|
13
|
-
## Project structure
|
|
14
|
-
|
|
15
|
-
- `rust/`: Rust CLI, core engine, parser, preprocessor, audio runtime
|
|
16
|
-
- `typescript/`: TypeScript utilities and scripts
|
|
17
|
-
- `pkg/`: WASM package output (generated by wasm-pack)
|
|
18
|
-
- `examples/`: Devalang examples
|
|
19
|
-
- `docs/`: Documentation
|
|
20
|
-
|
|
21
|
-
## Prerequisites
|
|
22
|
-
|
|
23
|
-
- Rust (stable, edition 2024)
|
|
24
|
-
- Node.js 18+
|
|
25
|
-
- wasm-pack (if you work on the WASM package)
|
|
26
|
-
|
|
27
|
-
## Setup
|
|
28
|
-
|
|
29
|
-
1. Install dependencies
|
|
30
|
-
|
|
31
|
-
- Rust toolchain (<https://rustup.rs>)
|
|
32
|
-
- Node.js (<https://nodejs.org>)
|
|
33
|
-
|
|
34
|
-
1. Clone and install
|
|
35
|
-
|
|
36
|
-
- Clone this repository
|
|
37
|
-
- Run `npm install`
|
|
38
|
-
|
|
39
|
-
## Build and run
|
|
40
|
-
|
|
41
|
-
- Build (debug): `cargo build`
|
|
42
|
-
- Build (release): `cargo build --release`
|
|
43
|
-
- TypeScript compile: `npm run script:build`
|
|
44
|
-
- Development helpers:
|
|
45
|
-
- `npm run rust:dev:build` — build AST/audio once
|
|
46
|
-
- `npm run rust:dev:check` — syntax checks with debug logs
|
|
47
|
-
- `npm run rust:dev:play` — play audio in a loop (repeat) with debug
|
|
48
|
-
- WASM builds:
|
|
49
|
-
- Web: `npm run rust:wasm:web`
|
|
50
|
-
- Node: `npm run rust:wasm:node`
|
|
51
|
-
|
|
52
|
-
## Tests and sanity checks
|
|
53
|
-
|
|
54
|
-
- Build and quick smoke test on examples:
|
|
55
|
-
- `cargo build`
|
|
56
|
-
- `npm run rust:dev:play`
|
|
57
|
-
- Prepublish (used by CI/release): `npm run prepublish`
|
|
58
|
-
|
|
59
|
-
## Versioning and releases
|
|
60
|
-
|
|
61
|
-
- Project version lives in multiple places:
|
|
62
|
-
- `Cargo.toml`
|
|
63
|
-
- `package.json`
|
|
64
|
-
- `project-version.json` (includes build counter and last commit)
|
|
65
|
-
- `pkg/package.json` (WASM package)
|
|
66
|
-
- Bump versions to the next pre-release (e.g. 0.0.1-alpha.16), then tag the repository:
|
|
67
|
-
- Bump version: `npm run script:version:bump pre`
|
|
68
|
-
- Commit bump: `git commit -am "chore: bump version to 0.0.1-alpha.X"`
|
|
69
|
-
- Create tag: `git tag v0.0.1-alpha.X`
|
|
70
|
-
- Push: `git push && git push origin v0.0.1-alpha.X`
|
|
71
|
-
- CI publishes release artifacts on tags matching `v*`.
|
|
72
|
-
|
|
73
|
-
## Pull requests
|
|
74
|
-
|
|
75
|
-
- Keep PRs small and focused
|
|
76
|
-
- Describe the motivation and the approach
|
|
77
|
-
- Link related issues
|
|
78
|
-
- Add/update tests (when relevant)
|
|
79
|
-
- Keep the existing style; avoid mass reformatting
|
|
80
|
-
|
|
81
|
-
## Coding guidelines
|
|
82
|
-
|
|
83
|
-
- Rust: follow Clippy suggestions where practical; prefer small, focused modules
|
|
84
|
-
- Keep public APIs stable; document breaking changes in the changelog
|
|
85
|
-
- Add comments where behavior is non-obvious (parser and interpreter paths)
|
|
86
|
-
|
|
87
|
-
## Reporting issues
|
|
88
|
-
|
|
89
|
-
Please include:
|
|
90
|
-
|
|
91
|
-
- Version (`devalang --version`), OS, and repro steps
|
|
92
|
-
- Minimal code sample (`.deva`) if possible
|
|
93
|
-
- Expected vs. actual behavior
|
|
94
|
-
|
|
95
|
-
## Security
|
|
96
|
-
|
|
97
|
-
If you discover a vulnerability, please report it privately (<contact@devaloop.com>). Do not open a public issue until coordinated disclosure.
|
|
98
|
-
|
|
99
|
-
## Thanks
|
|
100
|
-
|
|
101
|
-
We appreciate your time and contributions — whether it’s code, docs, or feedback.
|
package/docs/ROADMAP.md
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
<img src="https://devalang.com/images/devalang-logo-min.png" alt="Devalang Logo" width="100" />
|
|
3
|
-
</div>
|
|
4
|
-
|
|
5
|
-
# Roadmap
|
|
6
|
-
|
|
7
|
-
Devalang is a work in progress. Here’s what we’re planning next:
|
|
8
|
-
|
|
9
|
-
## Completed
|
|
10
|
-
|
|
11
|
-
- ✅ **Audio engine**: Integrate the audio engine for sound playback.
|
|
12
|
-
- ✅ **MIDI export**: Implement MIDI export functionality to save compositions as MIDI files.
|
|
13
|
-
- ✅ **Basic syntax**: Implement the core syntax for Devalang, including data types and basic statements.
|
|
14
|
-
- ✅ **Watch mode**: Add a watch mode to automatically rebuild on file changes.
|
|
15
|
-
- ✅ **Module system**: Add support for importing and exporting variables between files using `@import` and `@export`.
|
|
16
|
-
- ✅ **AST generation**: Implement the Abstract Syntax Tree (AST) generation for debugging and future compilation.
|
|
17
|
-
- ✅ **Basic data types**: Support strings, numbers, booleans, maps, and arrays.
|
|
18
|
-
- ✅ **BPM assignment**: Implement `bpm` assignment to set the tempo.
|
|
19
|
-
- ✅ **Bank declaration**: Add `bank` declaration to define the instrument set.
|
|
20
|
-
- ✅ **Looping system**: Implement a looping system with fixed repetitions using `loop 4:`.
|
|
21
|
-
- ✅ **Instruction calls**: Add support for instruction calls with parameters (e.g. `.kick auto {reverb:10, decay:20}`).
|
|
22
|
-
- ✅ **Let assignments**: Implement `let` assignments for storing reusable values.
|
|
23
|
-
- ✅ **Sample loading**: Add `@load` assignment to load samples (.mp3, .wav) for use as values.
|
|
24
|
-
- ✅ **WASM support**: Compile Devalang to WebAssembly for use in web applications and other environments.
|
|
25
|
-
- ✅ **VSCode extension**: Create a VSCode extension for syntax highlighting and code completion.
|
|
26
|
-
- ✅ **Addon generator**: Implement addon generation for creating reusable plugins, banks and presets.
|
|
27
|
-
- ✅ **Effect chains**: Implement effect chains for applying multiple effects to a single note or group.
|
|
28
|
-
|
|
29
|
-
## In Progress
|
|
30
|
-
|
|
31
|
-
- ⏳ **Testing**: Expand test coverage for all features.
|
|
32
|
-
- ⏳ **Mixing & Routing**: Implement mixing and routing capabilities for advanced audio control.
|
|
33
|
-
|
|
34
|
-
## Planned
|
|
35
|
-
|
|
36
|
-
- ⏳ **MIDI mapping**: Implement MIDI mapping for external control.
|
|
37
|
-
- ⏳ **GUI**: Develop a graphical user interface for easier interaction.
|
|
38
|
-
- ⏳ **Smart modules**: Let Devalang detect and use groups, samples, and variables without needing to import them manually.
|
package/docs/TODO.md
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
<img src="https://devalang.com/images/devalang-logo-min.png" alt="Devalang Logo" width="100" />
|
|
3
|
-
</div>
|
|
4
|
-
|
|
5
|
-
# TODOs list
|
|
6
|
-
|
|
7
|
-
This is a list of tasks and features to be implemented in Devalang. Note that this is not an exhaustive list, and some items may be added or removed over time.
|
|
8
|
-
|
|
9
|
-
## Commands
|
|
10
|
-
|
|
11
|
-
- [x] Init project
|
|
12
|
-
- [x] Implement init command
|
|
13
|
-
- [x] Implement template selector
|
|
14
|
-
- [x] Template
|
|
15
|
-
- [x] Implement template list
|
|
16
|
-
- [x] Implement template info
|
|
17
|
-
- [x] Checking
|
|
18
|
-
- [x] Implement watch mode
|
|
19
|
-
- [x] Implement debug mode
|
|
20
|
-
- [x] Building
|
|
21
|
-
- [x] Implement watch mode
|
|
22
|
-
- [x] Implement debug mode
|
|
23
|
-
- [x] Implement compression mode
|
|
24
|
-
- [x] Play
|
|
25
|
-
- [x] Implement Audio Engine
|
|
26
|
-
- [x] Implement debug mode
|
|
27
|
-
- [x] Implement loop mode
|
|
28
|
-
|
|
29
|
-
## Core components
|
|
30
|
-
|
|
31
|
-
- [x] Audio Engine
|
|
32
|
-
- [x] Lexer
|
|
33
|
-
- [x] Parser
|
|
34
|
-
- [x] Preprocessor
|
|
35
|
-
- [x] Debugger
|
|
36
|
-
- [x] Builder
|
|
37
|
-
|
|
38
|
-
## Syntax elements
|
|
39
|
-
|
|
40
|
-
- [x] #
|
|
41
|
-
- [x] @import
|
|
42
|
-
- [x] @export
|
|
43
|
-
- [x] @load
|
|
44
|
-
- [x] function
|
|
45
|
-
- [x] pattern
|
|
46
|
-
- [x] group
|
|
47
|
-
- [x] call
|
|
48
|
-
- [x] spawn
|
|
49
|
-
- [x] sleep
|
|
50
|
-
- [x] bpm
|
|
51
|
-
- [x] bank
|
|
52
|
-
- [x] loop
|
|
53
|
-
- [x] let
|
|
54
|
-
- [x] if
|
|
55
|
-
- [x] else
|
|
56
|
-
- [x] else if
|
|
57
|
-
|
|
58
|
-
## Triggers
|
|
59
|
-
|
|
60
|
-
- [x] Custom triggers
|
|
61
|
-
- [x] Event triggers
|
|
62
|
-
|
|
63
|
-
## Banks
|
|
64
|
-
|
|
65
|
-
- [x] Implement bank management (e.g. install, remove, list)
|
|
66
|
-
- [x] Create example banks
|
|
67
|
-
|
|
68
|
-
## Plugins
|
|
69
|
-
|
|
70
|
-
- [x] Implement plugin system (e.g. install, remove, list)
|
|
71
|
-
- [ ] Create example plugins
|
package/examples/automation.deva
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
bpm 120
|
|
2
|
-
|
|
3
|
-
group myLead:
|
|
4
|
-
let mySynth = synth sine
|
|
5
|
-
|
|
6
|
-
# This will automate all notes inside mySynth
|
|
7
|
-
# automate mySynth:
|
|
8
|
-
# param volume {
|
|
9
|
-
# 0% = 0.0
|
|
10
|
-
# 100% = 1.0
|
|
11
|
-
# }
|
|
12
|
-
# param pan {
|
|
13
|
-
# 0% = -1.0
|
|
14
|
-
# 100% = 1.0
|
|
15
|
-
# }
|
|
16
|
-
# param pitch {
|
|
17
|
-
# 0% = -12.0
|
|
18
|
-
# 100% = 12.0
|
|
19
|
-
# }
|
|
20
|
-
|
|
21
|
-
# This will automate only one note
|
|
22
|
-
mySynth -> note(C4, {
|
|
23
|
-
duration: 400,
|
|
24
|
-
automate: {
|
|
25
|
-
pitch: {
|
|
26
|
-
0%: -12.0
|
|
27
|
-
100%: 12.0
|
|
28
|
-
},
|
|
29
|
-
pan: {
|
|
30
|
-
0%: -1.0,
|
|
31
|
-
100%: 1.0
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
})
|
|
35
|
-
mySynth -> note(G4, { duration: 400 })
|
|
36
|
-
mySynth -> note(E4, { duration: 600 })
|
|
37
|
-
mySynth -> note(A4, { duration: 400 })
|
|
38
|
-
mySynth -> note(F4, { duration: 800 })
|
|
39
|
-
mySynth -> note(D4, { duration: 400 })
|
|
40
|
-
mySynth -> note(B3, { duration: 600 })
|
|
41
|
-
|
|
42
|
-
call myLead
|
package/examples/bank.deva
DELETED
package/examples/bus.deva
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# NOTE Planned for future release
|
|
2
|
-
|
|
3
|
-
# let sidechainBus = bus {
|
|
4
|
-
# fx: [
|
|
5
|
-
# { type: "compressor", threshold: -20, ratio: 8, attack: 5, release: 100,
|
|
6
|
-
# sidechain: myKick }
|
|
7
|
-
# ]
|
|
8
|
-
# }
|
|
9
|
-
# route myLead -> sidechainBus -> masterBus
|
|
10
|
-
# route myKick -> myBass -> masterBus
|
package/examples/chain.deva
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
let myChord = synth sine
|
|
2
|
-
|
|
3
|
-
myChord -> note(C4)
|
|
4
|
-
-> arp({ pattern: "up", rate: 1/8 })
|
|
5
|
-
-> slide({ duration: 2000 })
|
|
6
|
-
-> echo({ delay: 250, feedback: 0.5 })
|
|
7
|
-
-> reverb({ room_size: 0.8 })
|
|
8
|
-
|
|
9
|
-
myChord -> note(E4)
|
|
10
|
-
-> arp({ pattern: "up", rate: 1/8 })
|
|
11
|
-
-> slide({ duration: 2000 })
|
|
12
|
-
-> echo({ delay: 250, feedback: 0.5 })
|
|
13
|
-
-> reverb({ room_size: 0.8 })
|
|
14
|
-
|
|
15
|
-
myChord -> note(G4)
|
|
16
|
-
-> arp({ pattern: "up", rate: 1/8 })
|
|
17
|
-
-> slide({ duration: 2000 })
|
|
18
|
-
-> echo({ delay: 250, feedback: 0.5 })
|
|
19
|
-
-> reverb({ room_size: 0.8 })
|
package/examples/condition.deva
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# This file demonstrates the use of conditional blocks in Devalang.
|
|
2
|
-
|
|
3
|
-
@import { duration, default_bank, params, loopCount, tempo } from "./variables.deva"
|
|
4
|
-
@import { myGroup } from "./group.deva"
|
|
5
|
-
|
|
6
|
-
@load "./samples/kick-808.wav" as kickCustom
|
|
7
|
-
@load "./samples/hat-808.wav" as hatCustom
|
|
8
|
-
|
|
9
|
-
group conditionBlock:
|
|
10
|
-
if tempo > 120:
|
|
11
|
-
# Will be executed if the condition is true
|
|
12
|
-
.kickCustom auto
|
|
13
|
-
else if tempo > 155:
|
|
14
|
-
# Will be executed if the condition is false
|
|
15
|
-
.hatCustom auto
|
|
16
|
-
else:
|
|
17
|
-
.kickCustom auto
|
|
18
|
-
.hatCustom auto
|
|
19
|
-
|
|
20
|
-
@export { conditionBlock }
|
package/examples/duration.deva
DELETED
package/examples/effect.deva
DELETED
package/examples/events.deva
DELETED
package/examples/filter.deva
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
let myFilteredSynth = synth sine {
|
|
2
|
-
filters: [
|
|
3
|
-
{ type: "lowpass", cutoff: 800.0, resonance: 1.0 },
|
|
4
|
-
{ type: "bandpass", cutoff: 400.0, resonance: 1.0 },
|
|
5
|
-
{ type: "highpass", cutoff: 200.0, resonance: 1.0 }
|
|
6
|
-
],
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
myFilteredSynth -> note(C4, { duration: 500 })
|
|
10
|
-
myFilteredSynth -> note(E4, { duration: 500 })
|
|
11
|
-
myFilteredSynth -> note(G4, { duration: 500 })
|
package/examples/function.deva
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# This file demonstrates the use of main features in Devalang.
|
|
2
|
-
bpm 135
|
|
3
|
-
|
|
4
|
-
bank devaloop.808 as myBank
|
|
5
|
-
|
|
6
|
-
let entityTest1 = .myBank.kick auto
|
|
7
|
-
let entityTest2 = .myBank.clap auto
|
|
8
|
-
let entityTest3 = .myBank.snare auto
|
|
9
|
-
|
|
10
|
-
fn myFirstGroup(entity1, entity2, entity3):
|
|
11
|
-
.entity1
|
|
12
|
-
.entity2
|
|
13
|
-
.entity3
|
|
14
|
-
|
|
15
|
-
call myFirstGroup(entityTest1, entityTest2, entityTest3)
|
package/examples/group.deva
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# This file demonstrates the use of grouping in Devalang.
|
|
2
|
-
|
|
3
|
-
@import { duration, default_bank, params, loopCount, tempo } from "./variables.deva"
|
|
4
|
-
|
|
5
|
-
@load "./samples/kick-808.wav" as kickCustom
|
|
6
|
-
@load "./samples/hat-808.wav" as hatCustom
|
|
7
|
-
|
|
8
|
-
group myGroup:
|
|
9
|
-
.kickCustom duration params
|
|
10
|
-
.hatCustom duration params
|
|
11
|
-
|
|
12
|
-
@export { myGroup }
|
package/examples/index.deva
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# This file demonstrates general use cases of Devalang.
|
|
2
|
-
|
|
3
|
-
# BPM definition
|
|
4
|
-
bpm 125
|
|
5
|
-
|
|
6
|
-
# Bank picking (make sure you've installed it)
|
|
7
|
-
bank devaloop.808 as my808Bank
|
|
8
|
-
|
|
9
|
-
# Pattern literal without options
|
|
10
|
-
pattern kickPattern with my808Bank.kick = "x--- x--- x--- x---"
|
|
11
|
-
|
|
12
|
-
group myGroup:
|
|
13
|
-
# Rhythmic (each beat playing a kick)
|
|
14
|
-
# on beat:
|
|
15
|
-
# .my808Bank.kick 1/4
|
|
16
|
-
|
|
17
|
-
# Synth definition with ADSR
|
|
18
|
-
let myLead = synth sine {
|
|
19
|
-
attack: 0,
|
|
20
|
-
decay: 100,
|
|
21
|
-
sustain: 100,
|
|
22
|
-
release: 100
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
# Global automation
|
|
26
|
-
automate myLead:
|
|
27
|
-
param volume {
|
|
28
|
-
0% = 0.0
|
|
29
|
-
100% = 0.5
|
|
30
|
-
}
|
|
31
|
-
param pitch {
|
|
32
|
-
0% = -12.0
|
|
33
|
-
100% = 12.0
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
# Notes in a loop with condition
|
|
37
|
-
for i in [1, 2, 3]:
|
|
38
|
-
if i == 3:
|
|
39
|
-
myLead -> note(C5, { duration: 200 })
|
|
40
|
-
print "Playing note C5 for " + i
|
|
41
|
-
|
|
42
|
-
# Pause runtime for 500ms
|
|
43
|
-
sleep 500
|
|
44
|
-
|
|
45
|
-
# Note with automation
|
|
46
|
-
myLead -> note(C4, {
|
|
47
|
-
duration: 400,
|
|
48
|
-
velocity: 0.8,
|
|
49
|
-
automate: {
|
|
50
|
-
pan: {
|
|
51
|
-
0%: -1.0,
|
|
52
|
-
100%: 0.0
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
# Notes with params
|
|
58
|
-
myLead -> note(G4, { duration: 600, glide: true, target_freq: 659.25 })
|
|
59
|
-
myLead -> note(B3, { duration: 400, slide: true, target_amp: 0.3 })
|
|
60
|
-
|
|
61
|
-
# Spawning the group & the pattern to play them in parallel
|
|
62
|
-
spawn myGroup
|
|
63
|
-
spawn kickPattern
|
package/examples/lfo.deva
DELETED
package/examples/loop.deva
DELETED
package/examples/pattern.deva
DELETED
package/examples/plugin.deva
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# This is an example of using a plugin in Devalang.
|
|
2
|
-
# Make sure you have the plugin installed in your Devaloop application. (devalang addon install <author>.<addon_name>)
|
|
3
|
-
|
|
4
|
-
@use devaloop.acid as acidPlugin
|
|
5
|
-
|
|
6
|
-
group acidSynthGroup:
|
|
7
|
-
let acidSynth = synth acidPlugin.synth {
|
|
8
|
-
waveform: "saw",
|
|
9
|
-
resonance: 1.0,
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
acidSynth -> note(C4, { duration: 1000 })
|
|
13
|
-
acidSynth -> note(E3, { duration: 1000 })
|
|
14
|
-
acidSynth -> note(B2, { duration: 1000 })
|
|
15
|
-
|
|
16
|
-
call acidSynthGroup
|
package/examples/routing.deva
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# NOTE Future version of Deva may include built-in routing capabilities.
|
|
2
|
-
|
|
3
|
-
# @load "./samples/kick-808.wav" as kickCustom
|
|
4
|
-
|
|
5
|
-
# group myLead:
|
|
6
|
-
# let mySynth = synth sine
|
|
7
|
-
|
|
8
|
-
# mySynth -> note(C4, { duration: 400 })
|
|
9
|
-
|
|
10
|
-
# group myKick:
|
|
11
|
-
# .kickCustom 1/4
|
|
12
|
-
|
|
13
|
-
# routing:
|
|
14
|
-
# node $master
|
|
15
|
-
# node myLead
|
|
16
|
-
# node myKick
|
|
17
|
-
# node hallReverb = effect reverb { decay: 3.0, mix: 0.5 }
|
|
18
|
-
|
|
19
|
-
# connect myLead -> hallReverb -> $master
|
|
20
|
-
|
|
21
|
-
# connect myLead -> $master with { delay: { time: 300, feedback: 0.3 } }
|
|
22
|
-
|
|
23
|
-
# connect myKick -> myLead with { sidechain: 0.6 }
|
|
Binary file
|
|
Binary file
|
package/examples/synth.deva
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# This file defines a simple synth lead using Devalang's syntax.
|
|
2
|
-
|
|
3
|
-
group myLead:
|
|
4
|
-
let mySynth = synth sine
|
|
5
|
-
|
|
6
|
-
mySynth -> note(C4, { duration: 400 })
|
|
7
|
-
mySynth -> note(G4, { duration: 400 })
|
|
8
|
-
mySynth -> note(E4, { duration: 600 })
|
|
9
|
-
mySynth -> note(A4, { duration: 400 })
|
|
10
|
-
mySynth -> note(F4, { duration: 800 })
|
|
11
|
-
mySynth -> note(D4, { duration: 400 })
|
|
12
|
-
mySynth -> note(B3, { duration: 600 })
|
|
13
|
-
|
|
14
|
-
group myChords:
|
|
15
|
-
let chordSynth = synth square
|
|
16
|
-
|
|
17
|
-
chordSynth -> chord(Cmaj, { duration: 1600 })
|
|
18
|
-
chordSynth -> chord(Fmaj, { duration: 1600 })
|
|
19
|
-
chordSynth -> chord(Gmaj, { duration: 1600 })
|
|
20
|
-
chordSynth -> chord(Am, { duration: 1600 })
|
|
21
|
-
|
|
22
|
-
# Play both groups together
|
|
23
|
-
spawn myLead
|
|
24
|
-
spawn myChords
|
package/examples/variables.deva
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { ParseResult } from "../types/result";
|
|
2
|
-
import { DebugResult } from "../types/result";
|
|
3
|
-
/**
|
|
4
|
-
* Parses the user code.
|
|
5
|
-
* @param entry_path The entry path for the code.
|
|
6
|
-
* @param source The source code to parse.
|
|
7
|
-
* @returns ParseResult | any
|
|
8
|
-
*/
|
|
9
|
-
export declare function parse(entry_path: string, source: string): ParseResult | any;
|
|
10
|
-
/**
|
|
11
|
-
* Renders the debug information for the user code.
|
|
12
|
-
* @param user_code The user-provided code to render debug information for.
|
|
13
|
-
* @returns DebugResult | any
|
|
14
|
-
*/
|
|
15
|
-
export declare function debug_render(user_code: string): DebugResult | any;
|
|
16
|
-
/**
|
|
17
|
-
* Renders audio from the user code.
|
|
18
|
-
* @param user_code The user-provided code to render audio from.
|
|
19
|
-
* @returns Float32Array
|
|
20
|
-
*/
|
|
21
|
-
export declare function render_audio(user_code: string): Float32Array;
|
|
22
|
-
/**
|
|
23
|
-
* Register a JS callback to receive playhead events { time, line, column } during playback.
|
|
24
|
-
* The callback will be called with a single object argument.
|
|
25
|
-
* @param cb The callback function to register.
|
|
26
|
-
* @returns void
|
|
27
|
-
*/
|
|
28
|
-
export declare function register_playhead_callback(cb: (ev: {
|
|
29
|
-
time: number;
|
|
30
|
-
line: number;
|
|
31
|
-
column: number;
|
|
32
|
-
}) => void): any;
|
|
33
|
-
/**
|
|
34
|
-
* Collects playhead events that have been recorded during playback.
|
|
35
|
-
* @returns Array of playhead events { time, line, column }.
|
|
36
|
-
*/
|
|
37
|
-
export declare function collect_playhead_events(): any;
|
|
38
|
-
/**
|
|
39
|
-
* Unregisters the JS callback for playhead events.
|
|
40
|
-
* @returns void
|
|
41
|
-
*/
|
|
42
|
-
export declare function unregister_playhead_callback(): any;
|