@devaloop/devalang 0.0.1-alpha.10 โ†’ 0.0.1-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/.devalang +6 -1
  2. package/Cargo.toml +6 -2
  3. package/README.md +59 -142
  4. package/docs/CHANGELOG.md +60 -1
  5. package/docs/ROADMAP.md +1 -1
  6. package/docs/TODO.md +1 -1
  7. package/examples/bank.deva +9 -0
  8. package/examples/duration.deva +9 -0
  9. package/examples/index.deva +6 -6
  10. package/out-tsc/bin/devalang.exe +0 -0
  11. package/package.json +2 -1
  12. package/project-version.json +3 -3
  13. package/rust/cli/bank.rs +455 -0
  14. package/rust/cli/build.rs +1 -1
  15. package/rust/cli/check.rs +1 -1
  16. package/rust/cli/driver.rs +280 -0
  17. package/rust/cli/install.rs +17 -0
  18. package/rust/cli/mod.rs +5 -200
  19. package/rust/cli/play.rs +1 -1
  20. package/rust/cli/update.rs +4 -0
  21. package/rust/common/cdn.rs +11 -0
  22. package/rust/common/mod.rs +1 -0
  23. package/rust/config/driver.rs +76 -0
  24. package/rust/config/loader.rs +98 -1
  25. package/rust/config/mod.rs +1 -15
  26. package/rust/core/audio/engine.rs +151 -10
  27. package/rust/core/audio/interpreter/arrow_call.rs +17 -4
  28. package/rust/core/audio/interpreter/trigger.rs +56 -2
  29. package/rust/core/audio/loader/trigger.rs +12 -0
  30. package/rust/core/lexer/handler/driver.rs +12 -1
  31. package/rust/core/lexer/handler/mod.rs +1 -0
  32. package/rust/core/lexer/handler/slash.rs +21 -0
  33. package/rust/core/lexer/token.rs +1 -0
  34. package/rust/core/parser/driver.rs +36 -2
  35. package/rust/core/parser/handler/arrow_call.rs +29 -4
  36. package/rust/core/parser/handler/dot.rs +102 -37
  37. package/rust/core/preprocessor/loader.rs +93 -14
  38. package/rust/core/preprocessor/resolver/driver.rs +5 -0
  39. package/rust/core/shared/bank.rs +21 -0
  40. package/rust/core/shared/duration.rs +1 -0
  41. package/rust/core/shared/mod.rs +2 -1
  42. package/rust/core/shared/value.rs +1 -0
  43. package/rust/installer/bank.rs +55 -0
  44. package/rust/installer/mod.rs +2 -0
  45. package/rust/installer/utils.rs +56 -0
  46. package/rust/main.rs +62 -5
  47. package/docs/COMMANDS.md +0 -85
  48. package/docs/CONFIG.md +0 -30
  49. package/docs/SYNTAX.md +0 -230
package/.devalang CHANGED
@@ -1,4 +1,9 @@
1
1
  [defaults]
2
2
  entry = "./examples"
3
3
  output = "./output"
4
- watch = false
4
+ watch = false
5
+
6
+ [[banks]]
7
+ path = "devalang://bank/808"
8
+ version = "0.0.1"
9
+ author = "devaloop"
package/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "devalang"
3
- version = "0.0.1-alpha.10"
3
+ version = "0.0.1-alpha.12"
4
4
  authors = ["Devaloop <contact@devaloop.com>"]
5
5
  description = "Write music like code. Devalang is a domain-specific language (DSL) for sound designers and music hackers. Compose, automate, and control sound โ€” in plain text."
6
6
  license = "MIT"
@@ -27,7 +27,7 @@ opt-level = "s"
27
27
 
28
28
  [features]
29
29
  default = ["cli"]
30
- cli = ["crossterm", "indicatif", "inquire"]
30
+ cli = ["crossterm", "indicatif", "inquire", "zip", "reqwest", "flate2", "tokio"]
31
31
 
32
32
  [dependencies]
33
33
  clap = { version = "4.5", features = ["derive"] }
@@ -47,3 +47,7 @@ crossterm = { version = "0.27", optional = true }
47
47
  indicatif = { version = "0.17", optional = true }
48
48
  inquire = { version = "0.7.5", optional = true }
49
49
  js-sys = "0.3"
50
+ reqwest = { version = "0.12.22", optional = true, features = ["json"] }
51
+ flate2 = { version = "1.0", optional = true }
52
+ tokio = { version = "1", features = ["full"], optional = true }
53
+ zip = { version = "4.3.0", optional = true }
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <img src="https://firebasestorage.googleapis.com/v0/b/devaloop-labs.firebasestorage.app/o/devalang-teal-logo.svg?alt=media&token=d2a5705a-1eba-4b49-88e6-895a761fb7f7" alt="Devalang Logo">
2
+ <img src="https://devalang.com/images/devalang-logo-cyan.svg" alt="Devalang Logo" width="300" />
3
3
  </div>
4
4
 
5
5
  ![Rust](https://img.shields.io/badge/Made%20with-Rust-orange?logo=rust)
@@ -16,9 +16,9 @@
16
16
 
17
17
  [![VSCode Extension](https://img.shields.io/visual-studio-marketplace/v/devaloop.devalang-vscode?label=VSCode%20Extension)](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode)
18
18
 
19
- ## ๐ŸŽผ Devalang, by **Devaloop Labs**
19
+ # ๐ŸŽถ Devalang
20
20
 
21
- ๐ŸŽถ Compose music with code โ€” structured, expressive, and fast.
21
+ Compose music with code โ€” structured, expressive, and fast.
22
22
 
23
23
  Devalang is a tiny domain-specific language (DSL) for music makers, sound designers, and audio hackers.
24
24
  Compose loops, control samples, render and play audio โ€” all in clean, readable text.
@@ -27,192 +27,109 @@ Compose loops, control samples, render and play audio โ€” all in clean, readable
27
27
 
28
28
  From studio sketches to live sets, Devalang gives you rhythmic control โ€” with the elegance of code.
29
29
 
30
- > ๐Ÿšง **v0.0.1-alpha.10 Notice** ๐Ÿšง
30
+ > ๐Ÿšง **v0.0.1-alpha.11 Notice** ๐Ÿšง
31
31
  >
32
- > NEW: Online documentation is now available at [docs.devalang.com](https://docs.devalang.com).
32
+ > NEW: Devalang is available in your browser at [playground.devalang.com](https://playground.devalang.com) !
33
33
  >
34
- > NEW: Devalang VSCode extension is now available !
35
- > [Get it here](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode).
34
+ > NEW: Online documentation is now available at [docs.devalang.com](https://docs.devalang.com)
36
35
  >
37
36
  > Includes synthesis, playback, and rendering features, but is still in early development.
38
37
  >
39
38
  > Currently, Devalang CLI is only available for **Windows**.
40
39
  > Linux and macOS binaries will be added in future releases via cross-platform builds.
41
40
 
42
- ---
43
-
44
41
  ## ๐Ÿ“š Quick Access
45
42
 
43
+ - [โ–ถ๏ธ Playground](https://playground.devalang.com)
46
44
  - [๐Ÿ“– Documentation](https://docs.devalang.com)
47
- - [๐Ÿ’ก Examples](./examples/)
48
45
  - [๐Ÿงฉ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode)
49
46
  - [๐ŸŽจ Prettier Plugin](https://www.npmjs.com/package/@devaloop/prettier-plugin-devalang)
47
+ - [๐Ÿ“œ Changelog](./docs/CHANGELOG.md)
48
+ - [๐Ÿ’ก Examples](./examples/)
50
49
  - [๐ŸŒ Project Website](https://devalang.com)
50
+ - [๐Ÿ“ฆ Devalang CLI on npm](https://www.npmjs.com/package/@devaloop/devalang)
51
51
 
52
- ## โ“ Why Devalang?
53
-
54
- - ๐ŸŽน Prototype audio ideas without opening a DAW
55
- - ๐Ÿ’ป Integrate sound into code-based workflows
56
- - ๐ŸŽ›๏ธ Control audio parameters through readable syntax
57
- - ๐Ÿงช Build musical logic with variables and conditions
58
-
59
- > Producer, coder, or both โ€” Devalang gives you musical structure, instantly.
60
-
61
- ## ๐Ÿš€ Features
62
-
63
- - ๐ŸŽต **Audio Engine**: Integrated audio playback and rendering
64
- - ๐Ÿงฉ **Module system** for importing and exporting variables between files
65
- - ๐Ÿ“œ **Structured AST** generation for debugging and future compilation
66
- - ๐Ÿ”ข **Basic data types**: strings, numbers, booleans, maps, arrays
67
- - ๐Ÿ‘๏ธ **Watch mode** for `build`, `check` and `play` commands
68
- - ๐Ÿ“‚ **Project templates** for quick setup
69
- - ๐ŸŽ›๏ธ **Custom samples**: easily load and trigger your own audio files
70
- - ๐Ÿ”„ **Looping and grouping**: create complex patterns with ease
52
+ ## โฑ๏ธ Try it now !
71
53
 
72
- ## ๐Ÿ“† Installation
73
-
74
- ### For users
75
-
76
- > โš ๏ธ Requires [Node.js 18+](https://nodejs.org/en/download)
77
-
78
- For Node users (NPM)
54
+ ### You can also have a look at the [Playground](https://playground.devalang.com) to try Devalang directly in your browser
79
55
 
80
56
  ```bash
81
- npm install -g @devaloop/devalang@latest
82
- ```
83
-
84
- > โš ๏ธ Requires [Rust 1.70+](https://www.rust-lang.org/learn/get-started#installing-rust)
85
-
86
- For Rust users (Cargo)
57
+ # Install Devalang CLI globally
58
+ npm install -g @devaloop/devalang
87
59
 
88
- ```bash
89
- cargo install devalang
60
+ # Create a new Devalang project
61
+ devalang init --name my-project --template minimal
62
+ cd my-project
90
63
  ```
91
64
 
92
- ### For contributors
93
-
94
- > โš ๏ธ Requires [Node.js 18+](https://nodejs.org/en/download)
95
-
96
- > โš ๏ธ Requires [Rust 1.70+](https://www.rust-lang.org/learn/get-started#installing-rust)
97
-
98
- ```bash
99
- git clone https://github.com/devaloop-labs/devalang.git
100
-
101
- cd devalang
102
-
103
- npm install
104
- ```
105
-
106
- Development usage (you can customize arguments in package.json)
107
-
108
- ```bash
109
- # For syntax checking test
110
- npm run rust:dev:check
111
-
112
- # For building test
113
- npm run rust:dev:build
114
- ```
115
-
116
- ## โ” Usage
117
-
118
- NOTE: Commands are available via `devalang` or `npx @devaloop/devalang`.
65
+ Create a new Devalang file `src/index.deva` in the project directory:
119
66
 
120
- NOTE: Arguments can be passed to commands using `--<argument>` syntax. You can also use a configuration file to set default values for various settings, making it easier to manage your Devalang project.
121
-
122
- NOTE: Some commands require a mandatory `--entry` argument to specify the input folder, and a `--output` argument to specify the output folder. If not specified, they default to `./src` and `./output` respectively.
123
-
124
- For more examples, see [docs/COMMANDS.md](./docs/COMMANDS.md)
125
-
126
- ### Initialize a new project
127
-
128
- In the current directory
129
-
130
- ```bash
131
- devalang init
132
- ```
67
+ ```deva
68
+ # src/index.deva
133
69
 
134
- Or use optional arguments to specify a directory name and a template
70
+ group myLead:
71
+ let mySynth = synth sine
135
72
 
136
- ```bash
137
- devalang init --name <project-name> --template <template-name>
138
- ```
73
+ mySynth -> note(C4, { duration: 400 })
74
+ mySynth -> note(G4, { duration: 600 })
139
75
 
140
- ### Checking syntax only
76
+ # Play the lead
141
77
 
142
- ```bash
143
- devalang check --watch
78
+ call myLead
144
79
  ```
145
80
 
146
- ### Building output files
81
+ And the best part ? You can play it directly from the command line:
147
82
 
148
83
  ```bash
149
- devalang build --watch
150
- ```
151
-
152
- ### Playing audio files (once by file change)
84
+ # Play the Devalang file
85
+ devalang play
153
86
 
154
- ```bash
87
+ # Play the Devalang file with watch mode
155
88
  devalang play --watch
156
- ```
157
-
158
- ### Playing audio files (continuous playback, even without file changes)
159
89
 
160
- ```bash
90
+ # LIVE mode (repeat the playback + watch mode)
161
91
  devalang play --repeat
162
92
  ```
163
93
 
164
- ## โš™๏ธ Configuration
94
+ ### ๐ŸŽ‰ You can now hear your Devalang code in action!
165
95
 
166
- You can use a configuration file to set default values for various settings, making it easier to manage your Devalang project.
96
+ > For more examples, check out the [examples directory](./examples/).
167
97
 
168
- To do this, create a `.devalang` file in the root of your project directory.
169
-
170
- See [docs/CONFIG.md](./docs/CONFIG.md) for more information.
171
-
172
- ## ๐Ÿ“„ Syntax example
173
-
174
- For more examples, see [docs/SYNTAX.md](./docs/SYNTAX.md)
175
-
176
- ```deva
177
- # index.deva
178
-
179
- @import { globalBpm, globalBank, kickDuration } from "global.deva"
180
-
181
- @load "./examples/samples/kick-808.wav" as customKick
182
-
183
- bpm globalBpm
184
- # Will declare the tempo at the globalBpm variable beats per minute
98
+ ## โ“ Why Devalang?
185
99
 
186
- bank globalBank
187
- # Will declare a custom instrument bank using the globalBank variable
100
+ - ๐ŸŽน Prototype audio ideas without opening a DAW
101
+ - ๐Ÿ’ป Integrate sound into code-based workflows
102
+ - ๐ŸŽ›๏ธ Control audio parameters through readable syntax
103
+ - ๐Ÿงช Build musical logic with variables and conditions
188
104
 
189
- loop 5:
190
- .customKick kickDuration {reverb=50, drive=25}
191
- # Will play 5 times a custom sample for 500ms with reverb and overdrive effects
105
+ > Producer, coder, or both โ€” Devalang gives you musical structure, instantly.
192
106
 
193
- group myGroup:
194
- .customKick kickDuration {reverb=50, drive=25}
195
- # Will play the same sample in a group, allowing for more complex patterns
107
+ ## ๐Ÿš€ Features
196
108
 
197
- call myGroup
198
- # Will be executed line by line (sequentially)
109
+ - ๐ŸŽต **Audio Engine**: Integrated audio playback and rendering
110
+ - ๐Ÿงฉ **Module system** for importing and exporting variables between files
111
+ - ๐Ÿ“œ **Structured AST** generation for debugging and future compilation
112
+ - ๐Ÿ”ข **Basic data types**: strings, numbers, booleans, maps, arrays
113
+ - ๐Ÿ‘๏ธ **Watch mode** for `build`, `check` and `play` commands
114
+ - ๐Ÿ“‚ **Project templates** for quick setup
115
+ - ๐ŸŽ›๏ธ **Custom samples**: easily load and trigger your own audio files
116
+ - ๐Ÿ”„ **Looping and grouping**: create complex patterns with ease
199
117
 
200
- # spawn myGroup
201
- # Will be executed in parallel (concurrently)
202
- # โš ๏ธ Note: `spawn` runs the entire group in parallel, but the groupโ€™s internal logic remains sequential unless it uses `spawn` internally.
203
- ```
118
+ ## ๐Ÿ“„ Documentation
204
119
 
205
- > ๐Ÿง  Note: `call` and `spawn` only work with `group` blocks. They do not apply to individual samples or other statements.
120
+ ### Please refer to the [online documentation](https://docs.devalang.com) for detailed information on syntax, features, and usage examples.
206
121
 
207
- ```deva
208
- # variables.deva
122
+ ## ๐Ÿ“œ Changelog Highlights
209
123
 
210
- let globalBpm = 120
211
- let globalBank = 808
212
- let kickDuration = 500
124
+ For a complete list of changes, see [docs/CHANGELOG.md](./docs/CHANGELOG.md)
213
125
 
214
- @export { globalBpm, globalBank, kickDuration }
215
- ```
126
+ - Implemented beat durations in `triggers` and `arrow_calls` statements
127
+ - Implemented `bank` resolver to resolve banks of sounds in the code
128
+ - Support for namespaced banks of sounds (e.g. `.808.myTrigger`)
129
+ - Implemented multiple commands for `bank` management
130
+ - `bank list`, `bank available`, `bank info <bank_name>`, `bank remove <bank_name>`, `bank update`, `bank update <bank_name>`
131
+ - Implemented `install` command to install banks of sounds
132
+ - `install bank <bank_name>`
216
133
 
217
134
  ## ๐Ÿงฏ Known issues
218
135
 
package/docs/CHANGELOG.md CHANGED
@@ -1,9 +1,68 @@
1
1
  <div align="center">
2
- <img src="https://firebasestorage.googleapis.com/v0/b/devaloop-labs.firebasestorage.app/o/devalang-teal-logo.svg?alt=media&token=d2a5705a-1eba-4b49-88e6-895a761fb7f7" alt="Devalang Logo">
2
+ <img src="https://devalang.com/images/devalang-logo-cyan.svg" alt="Devalang Logo" width="300" />
3
3
  </div>
4
4
 
5
5
  # Changelog
6
6
 
7
+ ## Version 0.0.1-alpha.12 (2025-07-21)
8
+
9
+ ### ๐Ÿงฉ Language Features
10
+
11
+ - Implemented `trigger` effects to apply effects to triggers, allowing for more dynamic sound manipulation.
12
+ - Example: `.myTrigger auto { reverb: 1.0, pitch: 1.5, gain: 0.8 }`
13
+
14
+ ### ๐Ÿง  Core Engine
15
+
16
+ - Moved `utils::installer` to `installer::utils` to better organize the project structure.
17
+ - Set CLI dependencies as optional in `Cargo.toml` to allow for a cleaner build without CLI features.
18
+ - Patched `@load` relative path resolution to ensure correct loading of external resources.
19
+ - Patched `trigger` statement that was not correctly parsed when using namespaced banks of sounds.
20
+
21
+ ### ๐Ÿงฉ Web Assembly
22
+
23
+ - Patched `lib.rs` dependencies to ensure compatibility with the latest Rust and WASM standards.
24
+
25
+ ## Version 0.0.1-alpha.11 (2025-07-20)
26
+
27
+ ### ๐Ÿ“– Documentation
28
+
29
+ - Removed old documentation, please refer to the [new documentation website](https://docs.devalang.com) for the latest information.
30
+
31
+ ### โœจ Syntax
32
+
33
+ - Added namespaced banks of sounds, allowing for better organization and management of sound banks.
34
+ - Example: `.808.myTrigger` to access a specific trigger in the `808` bank.
35
+ - Added support for beat durations in `triggers` statements, allowing for more precise timing control.
36
+ - Example: `.myTrigger 1/4 { ... }` to trigger the sound every quarter beat.
37
+ - Added support for beat durations in `arrow_calls` statements, allowing for more precise timing control.
38
+ - Example: `mySynth -> note(C4, { duration: 1/8 })` to play a note for an eighth beat.
39
+
40
+ ### ๐Ÿง  Core Engine
41
+
42
+ - Implemented `bank` resolver to resolve banks of sounds in the code.
43
+ - Example: `bank 808` will resolve to a bank of sounds named `808` if exists (check bank available command).
44
+
45
+ ### ๐Ÿงฐ Commands
46
+
47
+ > Use the `bank 808` statement to access the default sounds and triggers !
48
+ > Then you can use `808.myTrigger` to access a specific trigger in the `808` bank.
49
+
50
+ - Added `bank` command to manage banks of sounds.
51
+
52
+ - `bank list` to list installed banks of sounds.
53
+ - `bank available` to list available banks of sounds for installation.
54
+ - `bank info <bank_name>` to show information about a specific bank.
55
+ - `bank remove <bank_name>` to remove a bank.
56
+ - `bank update` to update all banks of sounds.
57
+ - `bank update <bank_name>` to update a specific bank.
58
+
59
+ - Added `install` command to install banks of sounds.
60
+ - `install bank <bank_name>` to install a specific bank of sounds.
61
+
62
+ ### ๐Ÿงช Experimental
63
+
64
+ - Introduced lazy loading and namespace-based resolution of installed sound banks.
65
+
7
66
  ## Version 0.0.1-alpha.10 (2025-07-19)
8
67
 
9
68
  ### ๐Ÿ“– Documentation
package/docs/ROADMAP.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <img src="https://firebasestorage.googleapis.com/v0/b/devaloop-labs.firebasestorage.app/o/devalang-teal-logo.svg?alt=media&token=d2a5705a-1eba-4b49-88e6-895a761fb7f7" alt="Devalang Logo">
2
+ <img src="https://devalang.com/images/devalang-logo-cyan.svg" alt="Devalang Logo" width="300" />
3
3
  </div>
4
4
 
5
5
  # Roadmap
package/docs/TODO.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <img src="https://firebasestorage.googleapis.com/v0/b/devaloop-labs.firebasestorage.app/o/devalang-teal-logo.svg?alt=media&token=d2a5705a-1eba-4b49-88e6-895a761fb7f7" alt="Devalang Logo">
2
+ <img src="https://devalang.com/images/devalang-logo-cyan.svg" alt="Devalang Logo" width="300" />
3
3
  </div>
4
4
 
5
5
  # TODOs list
@@ -0,0 +1,9 @@
1
+ # This file demonstrates the use of banks in Devalang.
2
+
3
+ let default_bank = 808
4
+
5
+ bank default_bank
6
+
7
+ .808.kick auto
8
+ .808.snare auto
9
+ .808.hat auto
@@ -0,0 +1,9 @@
1
+ # This file demonstrates the use of duration in Devalang.
2
+
3
+ @load "./samples/kick-808.wav" as kickCustom
4
+ @load "./samples/hat-808.wav" as hatCustom
5
+
6
+ .kickCustom 1/4
7
+ .hatCustom 1/8
8
+ .kickCustom 1/4
9
+ .hatCustom 1/8
@@ -7,12 +7,12 @@
7
7
  @load "./samples/kick-808.wav" as kickCustom
8
8
  @load "./samples/hat-808.wav" as hatCustom
9
9
 
10
- bpm tempo
10
+ # bpm tempo
11
11
 
12
- bank default_bank
12
+ # group myTrack:
13
+ # spawn myLoop
14
+ # spawn myLead
13
15
 
14
- group myTrack:
15
- spawn myLoop
16
- spawn myLead
16
+ # call myTrack
17
17
 
18
- call myTrack
18
+ .kickCustom duration { gain: 1, pitch: 1.25 }
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@devaloop/devalang",
3
3
  "private": false,
4
- "version": "0.0.1-alpha.10",
4
+ "version": "0.0.1-alpha.12",
5
5
  "description": "Write music like code. Devalang is a domain-specific language (DSL) for sound designers and music hackers. Compose, automate, and control sound โ€” in plain text.",
6
6
  "main": "out-tsc/index.js",
7
7
  "bin": {
@@ -11,6 +11,7 @@
11
11
  "prepublish": "cargo build --release && npm run script:postbuild",
12
12
  "rust:dev:build": "cargo run build --entry examples --output output",
13
13
  "rust:dev:check": "cargo run check --entry examples --output output",
14
+ "rust:dev:play": "cargo run play --entry examples --output output --repeat",
14
15
  "rust:wasm:web": "wasm-pack build --target=web --no-default-features",
15
16
  "rust:wasm:node": "wasm-pack build --target=nodejs --no-default-features",
16
17
  "script:postbuild": "tsc && node out-tsc/scripts/postbuild.js",
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.0.1-alpha.10",
2
+ "version": "0.0.1-alpha.12",
3
3
  "channel": "alpha",
4
- "lastCommit": "a3649180a74374e193198131f4192a15f67009a5",
5
- "build": 9
4
+ "lastCommit": "e16a21167693d0265195bf4256b3f8ec0ed1e55f",
5
+ "build": 11
6
6
  }