@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
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|

|
|
7
|
-

|
|
8
8
|
|
|
9
|
-

|
|
10
10
|

|
|
11
11
|

|
|
12
12
|
|
|
@@ -17,205 +17,235 @@
|
|
|
17
17
|

|
|
18
18
|

|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
# 🦊 Devalang — Write music with code
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Devalang is a compact domain-specific language (DSL) for music makers, sound designers, and creative coders.
|
|
23
|
+
Compose loops, control samples, synthesize audio, and render your ideas — all in clean, readable text.
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
Compose loops, control samples, render and play audio — all in clean, readable text.
|
|
25
|
+
Whether you're prototyping a beat, building generative music, or performing live, Devalang gives you rhythmic precision with the elegance of code.
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
From studio sketches to live sets, Devalang puts musical ideas into motion.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
> **🚧 Notice 🚧**
|
|
32
|
-
>
|
|
33
|
-
> Includes synthesis, playback, and rendering features, but is still in early development, and breaking changes may occur.
|
|
29
|
+
> **🚀 v0.1.0 - Complete Rewriting**
|
|
34
30
|
>
|
|
35
|
-
> **NEW**: [Devalang WORKSHOP is now available](https://workshop.devalang.com).
|
|
36
31
|
>
|
|
32
|
+
> **NEW**: [Devalang Playground V2.0 is now available](https://playground.devalang.com) — Try it in your browser!
|
|
33
|
+
|
|
34
|
+
---
|
|
37
35
|
|
|
38
36
|
## 📚 Quick Access
|
|
39
37
|
|
|
40
|
-
- [▶️ Playground](https://playground.devalang.com)
|
|
41
|
-
- [📖 Documentation](https://docs.devalang.com)
|
|
42
|
-
- [🧩 VSCode Extension](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode)
|
|
43
|
-
- [
|
|
44
|
-
- [📜 Changelog](./docs/CHANGELOG.md)
|
|
38
|
+
- [▶️ Playground](https://playground.devalang.com) — Try Devalang in your browser
|
|
39
|
+
- [📖 Documentation](https://docs.devalang.com) — Complete language reference
|
|
40
|
+
- [🧩 VSCode Extension](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode) — Syntax highlighting & snippets
|
|
41
|
+
- [📜 Changelog](./docs/CHANGELOG.md) — Version history
|
|
45
42
|
- [💡 Examples](./examples/)
|
|
46
|
-
- [🌐
|
|
47
|
-
- [📦
|
|
48
|
-
- [📦
|
|
43
|
+
- [🌐 Website](https://devalang.com) — Project homepage
|
|
44
|
+
- [📦 npm Package](https://www.npmjs.com/package/@devaloop/devalang)
|
|
45
|
+
- [📦 Rust Crate](https://crates.io/crates/devalang)
|
|
49
46
|
|
|
50
|
-
|
|
47
|
+
---
|
|
51
48
|
|
|
52
|
-
|
|
49
|
+
## ⚡ Quick Start
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
### Try in Your Browser
|
|
55
52
|
|
|
56
|
-
|
|
53
|
+
> **[Launch the Playground](https://playground.devalang.com)** to try Devalang without installing anything.
|
|
57
54
|
|
|
58
|
-
|
|
55
|
+
### Install via npm (Recommended)
|
|
59
56
|
|
|
60
57
|
```bash
|
|
61
|
-
npm install -g @devaloop/devalang
|
|
58
|
+
npm install -g @devaloop/devalang
|
|
62
59
|
```
|
|
63
60
|
|
|
64
|
-
|
|
61
|
+
### Install via Cargo (Rust)
|
|
65
62
|
|
|
66
63
|
```bash
|
|
67
|
-
cargo install devalang
|
|
64
|
+
cargo install devalang
|
|
68
65
|
```
|
|
69
66
|
|
|
70
|
-
|
|
67
|
+
### Create Your First Project
|
|
71
68
|
|
|
72
69
|
```bash
|
|
73
|
-
|
|
70
|
+
# Initialize a new project
|
|
71
|
+
devalang init my-project
|
|
72
|
+
|
|
73
|
+
# Navigate to the project
|
|
74
|
+
cd my-project
|
|
75
|
+
|
|
76
|
+
# Check syntax
|
|
77
|
+
devalang check --entry examples/index.deva
|
|
78
|
+
|
|
79
|
+
# Build audio files
|
|
80
|
+
devalang build --path examples/index.deva --formats wav mid
|
|
81
|
+
|
|
82
|
+
# Play audio (live mode)
|
|
83
|
+
devalang play --live --input examples/index.deva
|
|
74
84
|
```
|
|
75
85
|
|
|
76
|
-
|
|
86
|
+
---
|
|
77
87
|
|
|
78
|
-
|
|
88
|
+
## 🎵 Your First Devalang Script
|
|
89
|
+
|
|
90
|
+
Create a file `hello.deva`:
|
|
79
91
|
|
|
80
92
|
```deva
|
|
81
|
-
#
|
|
82
|
-
|
|
83
|
-
# BPM definition
|
|
84
|
-
bpm 125
|
|
85
|
-
|
|
86
|
-
# Bank picking (make sure you've installed it)
|
|
87
|
-
bank devaloop.808 as my808Bank
|
|
88
|
-
|
|
89
|
-
# Pattern literal without options
|
|
90
|
-
pattern kickPattern with my808Bank.kick = "x--- x--- x--- x---"
|
|
91
|
-
|
|
92
|
-
group myGroup:
|
|
93
|
-
# Rhythmic (each beat playing a kick)
|
|
94
|
-
# on beat:
|
|
95
|
-
# .my808Bank.kick 1/4
|
|
96
|
-
|
|
97
|
-
# Synth definition with ADSR
|
|
98
|
-
let myLead = synth sine {
|
|
99
|
-
attack: 0,
|
|
100
|
-
decay: 100,
|
|
101
|
-
sustain: 100,
|
|
102
|
-
release: 100
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
# Global automation
|
|
106
|
-
automate myLead:
|
|
107
|
-
param volume {
|
|
108
|
-
0% = 0.0
|
|
109
|
-
100% = 0.5
|
|
110
|
-
}
|
|
111
|
-
param pitch {
|
|
112
|
-
0% = -12.0
|
|
113
|
-
100% = 12.0
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
# Notes in a loop with condition
|
|
117
|
-
for i in [1, 2, 3]:
|
|
118
|
-
if i == 3:
|
|
119
|
-
myLead -> note(C5, { duration: 200 })
|
|
120
|
-
print "Playing note C5 for " + i
|
|
121
|
-
|
|
122
|
-
# Pause runtime for 500ms
|
|
123
|
-
sleep 500
|
|
124
|
-
|
|
125
|
-
# Note with automation
|
|
126
|
-
myLead -> note(C4, {
|
|
127
|
-
duration: 400,
|
|
128
|
-
velocity: 0.8,
|
|
129
|
-
automate: {
|
|
130
|
-
pan: {
|
|
131
|
-
0%: -1.0,
|
|
132
|
-
100%: 0.0
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
# Notes with params
|
|
138
|
-
myLead -> note(G4, { duration: 600, glide: true })
|
|
139
|
-
myLead -> note(B3, { duration: 400, slide: true })
|
|
140
|
-
|
|
141
|
-
# Spawning the group & the pattern to play them in parallel
|
|
142
|
-
spawn myGroup
|
|
143
|
-
spawn kickPattern
|
|
144
|
-
```
|
|
93
|
+
# Set the tempo
|
|
94
|
+
bpm 120
|
|
145
95
|
|
|
146
|
-
|
|
96
|
+
# Load a bank of sounds
|
|
97
|
+
bank devaloop.808 as drums
|
|
147
98
|
|
|
148
|
-
|
|
99
|
+
# Create a simple drum pattern
|
|
100
|
+
pattern kickPattern with drums.kick = "x--- x--- x--- x---"
|
|
101
|
+
pattern snarePattern with drums.snare = "---- x--- ---- x---"
|
|
102
|
+
pattern hihatPattern with drums.hihat = "x-x- x-x- x-x- x-x-"
|
|
149
103
|
|
|
150
|
-
|
|
151
|
-
|
|
104
|
+
# Play the patterns
|
|
105
|
+
call kickPattern
|
|
106
|
+
call snarePattern
|
|
107
|
+
call hihatPattern
|
|
152
108
|
```
|
|
153
109
|
|
|
154
|
-
|
|
110
|
+
### Build the audio
|
|
155
111
|
|
|
156
112
|
```bash
|
|
157
|
-
|
|
113
|
+
# Build to WAV
|
|
114
|
+
devalang build --path hello.deva --formats wav
|
|
115
|
+
|
|
116
|
+
# Output: ./output/audio/hello.wav
|
|
158
117
|
```
|
|
159
118
|
|
|
160
|
-
|
|
119
|
+
# Play the audio
|
|
161
120
|
|
|
162
|
-
|
|
121
|
+
```bash
|
|
122
|
+
# Play the audio file
|
|
123
|
+
devalang play --input hello.deva
|
|
163
124
|
|
|
164
|
-
|
|
125
|
+
# Play live (repeats and watch until stopped)
|
|
126
|
+
devalang play --live --input hello.deva
|
|
127
|
+
```
|
|
165
128
|
|
|
166
|
-
|
|
167
|
-
- 💻 Integrate sound into code-based workflows
|
|
168
|
-
- 🎛️ Control audio parameters through readable syntax
|
|
169
|
-
- 🧪 Build musical logic with variables and conditions
|
|
170
|
-
- 🔄 Create complex patterns with ease
|
|
129
|
+
---
|
|
171
130
|
|
|
172
131
|
## 🚀 Features
|
|
173
132
|
|
|
174
|
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
-
|
|
197
|
-
-
|
|
198
|
-
-
|
|
199
|
-
-
|
|
200
|
-
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
- **
|
|
204
|
-
- **
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
133
|
+
### 🎵 **Core Language**
|
|
134
|
+
- ✅ **Lexer & Parser** — Complete tokenization and AST generation
|
|
135
|
+
- ✅ **Patterns** — Rhythmic notation with swing, humanize, velocity
|
|
136
|
+
- ✅ **Synths** — Built-in synthesizers with ADSR envelopes
|
|
137
|
+
- ✅ **Filters** — Lowpass, highpass, bandpass audio filtering
|
|
138
|
+
- ✅ **Effects** — Reverb, delay, distortion, drive, chorus
|
|
139
|
+
- ✅ **Variables** — `let`, `const`, `var` with scoping
|
|
140
|
+
- ✅ **Groups & Spawn** — Organize and parallelize execution
|
|
141
|
+
- ✅ **Loops & Conditions** — `for`, `if`, `else` control flow
|
|
142
|
+
- ✅ **Triggers** — Conditional audio triggering
|
|
143
|
+
- ✅ **Events** — Event system with `on` and `emit`
|
|
144
|
+
|
|
145
|
+
### 🛠️ **CLI Tools**
|
|
146
|
+
- ✅ `devalang init` — Scaffold new projects (3 templates)
|
|
147
|
+
- ✅ `devalang build` — Compile to WAV/MIDI
|
|
148
|
+
- ✅ `devalang check` — Validate syntax
|
|
149
|
+
- ✅ `devalang play` — Audio playback
|
|
150
|
+
- ✅ `devalang addon` — Manage addons (install, list, discover)
|
|
151
|
+
- ✅ `devalang login/logout` — Authentication
|
|
152
|
+
- ✅ `devalang telemetry` — Privacy controls
|
|
153
|
+
|
|
154
|
+
### 🌐 **WASM API**
|
|
155
|
+
- ✅ `render_audio()` — Browser audio rendering
|
|
156
|
+
- ✅ `render_midi_array()` — MIDI export
|
|
157
|
+
- ✅ `debug_render()` — Debug information
|
|
158
|
+
- ✅ `parse()` — Parse Devalang code
|
|
159
|
+
- ✅ TypeScript types included
|
|
160
|
+
|
|
161
|
+
### 📦 **Output Formats**
|
|
162
|
+
- ✅ **WAV** — 16/24/32-bit audio export
|
|
163
|
+
- ✅ **MIDI** — Standard MIDI file export
|
|
164
|
+
- ⚠️ **MP3/FLAC** — Planned for v0.1.1
|
|
165
|
+
|
|
166
|
+
### 🎯 **Performance**
|
|
167
|
+
- ⚡ **Fast builds** — 7-10ms for typical projects
|
|
168
|
+
- ⚡ **Low latency** — Optimized audio engine
|
|
169
|
+
- ⚡ **Release builds** — 5-6x faster than debug
|
|
170
|
+
|
|
171
|
+
### 📚 **Learning Resources**
|
|
172
|
+
- ✅ **Online Docs** — Complete language reference
|
|
173
|
+
- ✅ **VSCode Extension** — Syntax highlighting
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 💡 Why Devalang?
|
|
178
|
+
|
|
179
|
+
- 🎹 **Prototype audio ideas** without opening a DAW
|
|
180
|
+
- 💻 **Integrate sound** into code-based workflows
|
|
181
|
+
- 🎛️ **Control audio parameters** with readable syntax
|
|
182
|
+
- 🧪 **Build musical logic** with variables and conditions
|
|
183
|
+
- 🔄 **Create patterns** with expressive notation
|
|
184
|
+
- 🎨 **Live code** with fast iteration cycles
|
|
185
|
+
- 📦 **Version control** your music with git
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 📖 Documentation
|
|
190
|
+
|
|
191
|
+
**[Visit docs.devalang.com](https://docs.devalang.com)** for:
|
|
192
|
+
- Complete syntax reference
|
|
193
|
+
- API documentation
|
|
194
|
+
- WASM integration guide
|
|
195
|
+
- CLI command reference
|
|
196
|
+
- Advanced tutorials
|
|
197
|
+
- Best practices
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 🔧 Development
|
|
202
|
+
|
|
203
|
+
### Build from Source
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Clone the repository
|
|
207
|
+
git clone https://github.com/devaloop-labs/devalang.git
|
|
208
|
+
cd devalang
|
|
209
|
+
|
|
210
|
+
# Build CLI (Rust)
|
|
211
|
+
cargo build --release --features cli
|
|
212
|
+
|
|
213
|
+
# Build WASM
|
|
214
|
+
cargo build --release --features wasm --lib
|
|
215
|
+
|
|
216
|
+
# Build TypeScript
|
|
217
|
+
npm install
|
|
218
|
+
npm run ts:build
|
|
219
|
+
|
|
220
|
+
# Run tests
|
|
221
|
+
cargo test --features cli
|
|
222
|
+
npm test
|
|
223
|
+
```
|
|
209
224
|
|
|
210
225
|
## 🤝 Contributing
|
|
211
226
|
|
|
212
|
-
|
|
213
|
-
Feel free to open an issue or submit a pull request.
|
|
227
|
+
We welcome contributions! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
214
228
|
|
|
215
|
-
|
|
229
|
+
### Ways to Contribute
|
|
216
230
|
|
|
217
|
-
|
|
231
|
+
- 🐛 **Report bugs** via [GitHub Issues](https://github.com/devaloop-labs/devalang/issues)
|
|
232
|
+
- 💡 **Suggest features** in discussions
|
|
233
|
+
- 📝 **Improve docs** with pull requests
|
|
234
|
+
- 🎵 **Share examples** of your creations
|
|
235
|
+
- 🧪 **Write tests** for new features
|
|
218
236
|
|
|
219
|
-
|
|
237
|
+
---
|
|
220
238
|
|
|
221
|
-
|
|
239
|
+
## 📜 License
|
|
240
|
+
|
|
241
|
+
MIT License — See [LICENSE](./LICENSE) for details.
|
|
242
|
+
|
|
243
|
+
Copyright (c) 2025 Devaloop
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
<div align="center">
|
|
248
|
+
<strong>Made with ❤️ by the Devaloop team</strong>
|
|
249
|
+
<br />
|
|
250
|
+
<sub>Star ⭐ the repo if you like it!</sub>
|
|
251
|
+
</div>
|
package/out-tsc/api.d.ts
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-level API wrapper for Devalang WASM functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides TypeScript-friendly wrappers around the raw WASM bindings,
|
|
5
|
+
* with proper error handling and type conversions.
|
|
6
|
+
*/
|
|
7
|
+
import type { RenderOptions, MidiOptions, ParseResult, DebugRenderResult, CodeMetadata, RegisteredBank, DebugState } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Parse Devalang source code
|
|
10
|
+
*
|
|
11
|
+
* @param entryPath - Path to the source file (for error messages)
|
|
12
|
+
* @param source - Devalang source code
|
|
13
|
+
* @returns Parse result with statements or errors
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const result = await parse('test.deva', 'bpm 120\nsleep 1b');
|
|
18
|
+
* if (result.success) {
|
|
19
|
+
* console.log(`Parsed ${result.statements.length} statements`);
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function parse(entryPath: string, source: string): Promise<ParseResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Quick syntax check without full parsing
|
|
26
|
+
*
|
|
27
|
+
* @param source - Devalang source code
|
|
28
|
+
* @returns true if syntax is valid
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* if (await checkSyntax('bpm 120')) {
|
|
33
|
+
* console.log('Valid syntax!');
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function checkSyntax(source: string): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Render audio from Devalang code
|
|
40
|
+
*
|
|
41
|
+
* @param code - Devalang source code
|
|
42
|
+
* @param options - Render options (sample rate, BPM)
|
|
43
|
+
* @returns Float32Array containing rendered audio samples
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const audio = await renderAudio('bpm 120\nlet s = synth sine {}\ns -> note(A4, { duration: 500 })', {
|
|
48
|
+
* sampleRate: 44100,
|
|
49
|
+
* bpm: 120
|
|
50
|
+
* });
|
|
51
|
+
* console.log(`Rendered ${audio.length} samples`);
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function renderAudio(code: string, options?: RenderOptions): Promise<Float32Array>;
|
|
55
|
+
/**
|
|
56
|
+
* Render audio with debug information
|
|
57
|
+
*
|
|
58
|
+
* @param code - Devalang source code
|
|
59
|
+
* @param options - Render options
|
|
60
|
+
* @returns Debug render result with audio and metadata
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const result = await debugRender('bpm 120\nlet s = synth sine {}\ns -> note(C4, { duration: 500 })');
|
|
65
|
+
* console.log(`Duration: ${result.duration}s, Events: ${result.eventCount}`);
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function debugRender(code: string, options?: RenderOptions): Promise<DebugRenderResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Render WAV file preview as bytes
|
|
71
|
+
*
|
|
72
|
+
* @param code - Devalang source code
|
|
73
|
+
* @param options - Render options
|
|
74
|
+
* @returns Uint8Array containing WAV file bytes
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const wavBytes = await renderWavPreview('bpm 120\nsleep 1b');
|
|
79
|
+
* // Save to file or send to browser for download
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function renderWavPreview(code: string, options?: RenderOptions): Promise<Uint8Array>;
|
|
83
|
+
/**
|
|
84
|
+
* Render MIDI file as bytes
|
|
85
|
+
*
|
|
86
|
+
* @param code - Devalang source code
|
|
87
|
+
* @param options - MIDI options
|
|
88
|
+
* @returns Uint8Array containing MIDI file bytes
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const midiBytes = await renderMidi('bpm 120\nlet s = synth sine {}\ns -> note(C4, { duration: 1000 })');
|
|
93
|
+
* // Save as .mid file
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare function renderMidi(code: string, options?: MidiOptions): Promise<Uint8Array>;
|
|
97
|
+
/**
|
|
98
|
+
* Get code metadata without rendering
|
|
99
|
+
*
|
|
100
|
+
* @param code - Devalang source code
|
|
101
|
+
* @param options - Options
|
|
102
|
+
* @returns Metadata about the code
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* const meta = await getCodeMetadata('bpm 140\nsleep 1b\nsleep 1b');
|
|
107
|
+
* console.log(`${meta.statementCount} statements at ${meta.bpm} BPM`);
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare function getCodeMetadata(code: string, options?: RenderOptions): Promise<CodeMetadata>;
|
|
111
|
+
/**
|
|
112
|
+
* Register an audio sample with PCM data
|
|
113
|
+
*
|
|
114
|
+
* @param uri - Sample URI (e.g., "devalang://bank/kick.wav")
|
|
115
|
+
* @param pcm - PCM audio data as Float32Array
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* const pcm = new Float32Array([0.5, -0.5, 0.25, -0.25]);
|
|
120
|
+
* await registerSample('devalang://bank/test.wav', pcm);
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export declare function registerSample(uri: string, pcm: Float32Array): Promise<boolean>;
|
|
124
|
+
/**
|
|
125
|
+
* Register an audio bank addon
|
|
126
|
+
*
|
|
127
|
+
* @param path - Addon path (e.g., "devalang://bank/publisher.name?triggers=kick:audio/kick.wav")
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* await registerAddon('devalang://bank/devaloop.808?triggers=kick:audio/kick.wav,snare:audio/snare.wav');
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export declare function registerAddon(path: string): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* List all registered banks
|
|
137
|
+
*
|
|
138
|
+
* @returns Array of registered banks
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const banks = await listRegisteredBanks();
|
|
143
|
+
* banks.forEach(bank => console.log(`${bank.alias}: ${bank.fullName}`));
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export declare function listRegisteredBanks(): Promise<RegisteredBank[]>;
|
|
147
|
+
/**
|
|
148
|
+
* Get sample load events log
|
|
149
|
+
*
|
|
150
|
+
* @param clear - Whether to clear the log after reading
|
|
151
|
+
* @returns Array of log messages
|
|
152
|
+
*/
|
|
153
|
+
export declare function getSampleLoadEvents(clear?: boolean): Promise<string[]>;
|
|
154
|
+
/**
|
|
155
|
+
* Get playback debug log
|
|
156
|
+
*
|
|
157
|
+
* @param clear - Whether to clear the log after reading
|
|
158
|
+
* @returns Array of debug messages
|
|
159
|
+
*/
|
|
160
|
+
export declare function getPlaybackDebug(clear?: boolean): Promise<string[]>;
|
|
161
|
+
/**
|
|
162
|
+
* Get debug state
|
|
163
|
+
*
|
|
164
|
+
* @returns Current debug state
|
|
165
|
+
*/
|
|
166
|
+
export declare function getDebugState(): Promise<DebugState>;
|
|
167
|
+
/**
|
|
168
|
+
* Enable or disable debug error logging
|
|
169
|
+
*
|
|
170
|
+
* @param enable - Whether to enable debug errors
|
|
171
|
+
*/
|
|
172
|
+
export declare function setDebugErrors(enable: boolean): Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* Get last errors
|
|
175
|
+
*
|
|
176
|
+
* @param clear - Whether to clear errors after reading
|
|
177
|
+
* @returns Array of error messages
|
|
178
|
+
*/
|
|
179
|
+
export declare function getLastErrors(clear?: boolean): Promise<string[]>;
|
|
180
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/typescript/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AA2BpB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAGnF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAO9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAOnG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAOjG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CASzF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAOlG;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrF;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAGrE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhF;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAGzD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7E"}
|