@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.
Files changed (345) hide show
  1. package/README.md +182 -152
  2. package/out-tsc/api.d.ts +180 -0
  3. package/out-tsc/api.d.ts.map +1 -0
  4. package/out-tsc/api.js +286 -0
  5. package/out-tsc/api.js.map +1 -0
  6. package/out-tsc/bin/index.d.ts +12 -0
  7. package/out-tsc/bin/index.d.ts.map +1 -0
  8. package/out-tsc/bin/index.js +20 -54
  9. package/out-tsc/bin/index.js.map +1 -0
  10. package/out-tsc/examples/basic-usage.d.ts +8 -0
  11. package/out-tsc/examples/basic-usage.d.ts.map +1 -0
  12. package/out-tsc/examples/basic-usage.js +113 -0
  13. package/out-tsc/examples/basic-usage.js.map +1 -0
  14. package/out-tsc/index.d.ts +19 -5
  15. package/out-tsc/index.d.ts.map +1 -0
  16. package/out-tsc/index.js +24 -6
  17. package/out-tsc/index.js.map +1 -0
  18. package/out-tsc/scripts/copy-wasm-dts.d.ts +7 -0
  19. package/out-tsc/scripts/copy-wasm-dts.d.ts.map +1 -0
  20. package/out-tsc/scripts/copy-wasm-dts.js +36 -32
  21. package/out-tsc/scripts/copy-wasm-dts.js.map +1 -0
  22. package/out-tsc/scripts/postinstall.d.ts +1 -0
  23. package/out-tsc/scripts/postinstall.d.ts.map +1 -0
  24. package/out-tsc/scripts/postinstall.js +4 -1
  25. package/out-tsc/scripts/postinstall.js.map +1 -0
  26. package/out-tsc/scripts/version/bump.d.ts +5 -1
  27. package/out-tsc/scripts/version/bump.d.ts.map +1 -0
  28. package/out-tsc/scripts/version/bump.js +114 -44
  29. package/out-tsc/scripts/version/bump.js.map +1 -0
  30. package/out-tsc/scripts/version/fetch.d.ts +12 -1
  31. package/out-tsc/scripts/version/fetch.d.ts.map +1 -0
  32. package/out-tsc/scripts/version/fetch.js +68 -24
  33. package/out-tsc/scripts/version/fetch.js.map +1 -0
  34. package/out-tsc/scripts/version/index.d.ts +6 -0
  35. package/out-tsc/scripts/version/index.d.ts.map +1 -0
  36. package/out-tsc/scripts/version/index.js +44 -22
  37. package/out-tsc/scripts/version/index.js.map +1 -0
  38. package/out-tsc/scripts/version/sync.d.ts +5 -1
  39. package/out-tsc/scripts/version/sync.d.ts.map +1 -0
  40. package/out-tsc/scripts/version/sync.js +78 -29
  41. package/out-tsc/scripts/version/sync.js.map +1 -0
  42. package/out-tsc/types.d.ts +68 -0
  43. package/out-tsc/types.d.ts.map +1 -0
  44. package/out-tsc/{core/types/value.js → types.js} +4 -0
  45. package/out-tsc/types.js.map +1 -0
  46. package/out-tsc/wasm.d.ts +8 -0
  47. package/out-tsc/wasm.d.ts.map +1 -0
  48. package/out-tsc/{core/index.js → wasm.js} +9 -6
  49. package/out-tsc/wasm.js.map +1 -0
  50. package/package.json +42 -42
  51. package/.cargo/config.toml +0 -2
  52. package/.devalang +0 -9
  53. package/.github/workflows/ci.yml +0 -103
  54. package/Cargo.toml +0 -84
  55. package/docs/CHANGELOG.md +0 -622
  56. package/docs/CONTRIBUTING.md +0 -101
  57. package/docs/ROADMAP.md +0 -38
  58. package/docs/TODO.md +0 -71
  59. package/examples/automation.deva +0 -42
  60. package/examples/bank.deva +0 -7
  61. package/examples/bus.deva +0 -10
  62. package/examples/chain.deva +0 -19
  63. package/examples/condition.deva +0 -20
  64. package/examples/duration.deva +0 -9
  65. package/examples/effect.deva +0 -2
  66. package/examples/events.deva +0 -12
  67. package/examples/filter.deva +0 -11
  68. package/examples/function.deva +0 -15
  69. package/examples/group.deva +0 -12
  70. package/examples/index.deva +0 -63
  71. package/examples/lfo.deva +0 -9
  72. package/examples/loop.deva +0 -10
  73. package/examples/pattern.deva +0 -8
  74. package/examples/plugin.deva +0 -16
  75. package/examples/routing.deva +0 -23
  76. package/examples/samples/hat-808.wav +0 -0
  77. package/examples/samples/kick-808.wav +0 -0
  78. package/examples/synth.deva +0 -24
  79. package/examples/synth_types.deva +0 -17
  80. package/examples/variables.deva +0 -9
  81. package/out-tsc/bin/project-version.json +0 -6
  82. package/out-tsc/core/functions/index.d.ts +0 -42
  83. package/out-tsc/core/functions/index.js +0 -87
  84. package/out-tsc/core/index.d.ts +0 -6
  85. package/out-tsc/core/types/index.d.ts +0 -4
  86. package/out-tsc/core/types/index.js +0 -20
  87. package/out-tsc/core/types/plugin.d.ts +0 -18
  88. package/out-tsc/core/types/plugin.js +0 -2
  89. package/out-tsc/core/types/result.d.ts +0 -27
  90. package/out-tsc/core/types/result.js +0 -2
  91. package/out-tsc/core/types/statement.d.ts +0 -106
  92. package/out-tsc/core/types/statement.js +0 -2
  93. package/out-tsc/core/types/value.d.ts +0 -43
  94. package/out-tsc/pkg/devalang_core.d.ts +0 -15
  95. package/out-tsc/pkg/devalang_core.js +0 -65
  96. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +0 -34
  97. package/out-tsc/scripts/version/copy-to-binary.d.ts +0 -1
  98. package/out-tsc/scripts/version/copy-to-binary.js +0 -79
  99. package/project-version.json +0 -6
  100. package/rust/bindings/Cargo.toml +0 -9
  101. package/rust/bindings/src/lib.rs +0 -86
  102. package/rust/cli/addon/commands.rs +0 -35
  103. package/rust/cli/addon/download.rs +0 -234
  104. package/rust/cli/addon/install.rs +0 -33
  105. package/rust/cli/addon/list.rs +0 -224
  106. package/rust/cli/addon/metadata.rs +0 -124
  107. package/rust/cli/addon/mod.rs +0 -8
  108. package/rust/cli/addon/remove.rs +0 -271
  109. package/rust/cli/addon/update.rs +0 -305
  110. package/rust/cli/addon/utils.rs +0 -109
  111. package/rust/cli/build/commands.rs +0 -153
  112. package/rust/cli/build/mod.rs +0 -2
  113. package/rust/cli/build/process.rs +0 -165
  114. package/rust/cli/check/mod.rs +0 -208
  115. package/rust/cli/discover/commands.rs +0 -275
  116. package/rust/cli/discover/config.rs +0 -109
  117. package/rust/cli/discover/fs.rs +0 -19
  118. package/rust/cli/discover/install.rs +0 -214
  119. package/rust/cli/discover/metadata.rs +0 -48
  120. package/rust/cli/discover/mod.rs +0 -5
  121. package/rust/cli/init/commands.rs +0 -88
  122. package/rust/cli/init/mod.rs +0 -1
  123. package/rust/cli/login/commands.rs +0 -124
  124. package/rust/cli/login/mod.rs +0 -1
  125. package/rust/cli/me/commands.rs +0 -52
  126. package/rust/cli/me/mod.rs +0 -1
  127. package/rust/cli/mod.rs +0 -12
  128. package/rust/cli/parser.rs +0 -320
  129. package/rust/cli/play/commands.rs +0 -375
  130. package/rust/cli/play/io.rs +0 -17
  131. package/rust/cli/play/mod.rs +0 -5
  132. package/rust/cli/play/process.rs +0 -159
  133. package/rust/cli/play/realtime.rs +0 -91
  134. package/rust/cli/play/utils.rs +0 -23
  135. package/rust/cli/telemetry/commands.rs +0 -22
  136. package/rust/cli/telemetry/event_creator.rs +0 -80
  137. package/rust/cli/telemetry/mod.rs +0 -3
  138. package/rust/cli/telemetry/send.rs +0 -51
  139. package/rust/cli/template/commands.rs +0 -69
  140. package/rust/cli/template/mod.rs +0 -1
  141. package/rust/cli/update/commands.rs +0 -6
  142. package/rust/cli/update/mod.rs +0 -1
  143. package/rust/config/driver.rs +0 -112
  144. package/rust/config/mod.rs +0 -3
  145. package/rust/config/ops.rs +0 -26
  146. package/rust/config/settings.rs +0 -101
  147. package/rust/core/audio/engine/driver.rs +0 -237
  148. package/rust/core/audio/engine/export.rs +0 -169
  149. package/rust/core/audio/engine/helpers.rs +0 -178
  150. package/rust/core/audio/engine/mod.rs +0 -56
  151. package/rust/core/audio/engine/notes/dsp.rs +0 -88
  152. package/rust/core/audio/engine/notes/mod.rs +0 -53
  153. package/rust/core/audio/engine/notes/params.rs +0 -294
  154. package/rust/core/audio/engine/sample/insert.rs +0 -300
  155. package/rust/core/audio/engine/sample/mod.rs +0 -40
  156. package/rust/core/audio/engine/sample/padding.rs +0 -170
  157. package/rust/core/audio/evaluator/condition.rs +0 -61
  158. package/rust/core/audio/evaluator/mod.rs +0 -9
  159. package/rust/core/audio/evaluator/numeric.rs +0 -152
  160. package/rust/core/audio/evaluator/rhs.rs +0 -16
  161. package/rust/core/audio/evaluator/string_expr.rs +0 -94
  162. package/rust/core/audio/interpreter/driver.rs +0 -574
  163. package/rust/core/audio/interpreter/mod.rs +0 -2
  164. package/rust/core/audio/interpreter/statements/arrow_call/interprete.rs +0 -179
  165. package/rust/core/audio/interpreter/statements/arrow_call/methods/chord.rs +0 -398
  166. package/rust/core/audio/interpreter/statements/arrow_call/methods/effects.rs +0 -323
  167. package/rust/core/audio/interpreter/statements/arrow_call/methods/mod.rs +0 -3
  168. package/rust/core/audio/interpreter/statements/arrow_call/methods/note.rs +0 -371
  169. package/rust/core/audio/interpreter/statements/arrow_call/mod.rs +0 -3
  170. package/rust/core/audio/interpreter/statements/arrow_call/types/arp.rs +0 -192
  171. package/rust/core/audio/interpreter/statements/arrow_call/types/mod.rs +0 -24
  172. package/rust/core/audio/interpreter/statements/arrow_call/types/pad.rs +0 -116
  173. package/rust/core/audio/interpreter/statements/arrow_call/types/pluck.rs +0 -97
  174. package/rust/core/audio/interpreter/statements/arrow_call/types/sub.rs +0 -100
  175. package/rust/core/audio/interpreter/statements/automate.rs +0 -16
  176. package/rust/core/audio/interpreter/statements/call.rs +0 -325
  177. package/rust/core/audio/interpreter/statements/condition.rs +0 -72
  178. package/rust/core/audio/interpreter/statements/function.rs +0 -24
  179. package/rust/core/audio/interpreter/statements/let_.rs +0 -36
  180. package/rust/core/audio/interpreter/statements/load.rs +0 -17
  181. package/rust/core/audio/interpreter/statements/loop_.rs +0 -115
  182. package/rust/core/audio/interpreter/statements/mod.rs +0 -12
  183. package/rust/core/audio/interpreter/statements/sleep.rs +0 -28
  184. package/rust/core/audio/interpreter/statements/spawn.rs +0 -302
  185. package/rust/core/audio/interpreter/statements/tempo.rs +0 -40
  186. package/rust/core/audio/interpreter/statements/trigger.rs +0 -242
  187. package/rust/core/audio/loader/mod.rs +0 -1
  188. package/rust/core/audio/loader/trigger.rs +0 -98
  189. package/rust/core/audio/mod.rs +0 -6
  190. package/rust/core/audio/player.rs +0 -70
  191. package/rust/core/audio/special/easing.rs +0 -189
  192. package/rust/core/audio/special/env.rs +0 -45
  193. package/rust/core/audio/special/math.rs +0 -134
  194. package/rust/core/audio/special/mod.rs +0 -9
  195. package/rust/core/audio/special/modulator.rs +0 -143
  196. package/rust/core/builder/mod.rs +0 -129
  197. package/rust/core/debugger/lexer.rs +0 -27
  198. package/rust/core/debugger/logs.rs +0 -52
  199. package/rust/core/debugger/mod.rs +0 -30
  200. package/rust/core/debugger/preprocessor.rs +0 -27
  201. package/rust/core/debugger/store.rs +0 -38
  202. package/rust/core/error/mod.rs +0 -269
  203. package/rust/core/lexer/driver.rs +0 -59
  204. package/rust/core/lexer/handler/arrow.rs +0 -82
  205. package/rust/core/lexer/handler/at.rs +0 -21
  206. package/rust/core/lexer/handler/brace.rs +0 -41
  207. package/rust/core/lexer/handler/colon.rs +0 -21
  208. package/rust/core/lexer/handler/comment.rs +0 -30
  209. package/rust/core/lexer/handler/dot.rs +0 -21
  210. package/rust/core/lexer/handler/driver.rs +0 -337
  211. package/rust/core/lexer/handler/identifier.rs +0 -47
  212. package/rust/core/lexer/handler/indent.rs +0 -66
  213. package/rust/core/lexer/handler/mod.rs +0 -15
  214. package/rust/core/lexer/handler/newline.rs +0 -23
  215. package/rust/core/lexer/handler/number.rs +0 -31
  216. package/rust/core/lexer/handler/operator.rs +0 -46
  217. package/rust/core/lexer/handler/parenthesis.rs +0 -41
  218. package/rust/core/lexer/handler/slash.rs +0 -21
  219. package/rust/core/lexer/handler/string.rs +0 -63
  220. package/rust/core/lexer/mod.rs +0 -3
  221. package/rust/core/lexer/token.rs +0 -91
  222. package/rust/core/mod.rs +0 -9
  223. package/rust/core/parser/driver/block.rs +0 -111
  224. package/rust/core/parser/driver/cursor.rs +0 -82
  225. package/rust/core/parser/driver/driver_impl.rs +0 -159
  226. package/rust/core/parser/driver/mod.rs +0 -6
  227. package/rust/core/parser/driver/parse_array.rs +0 -120
  228. package/rust/core/parser/driver/parse_map.rs +0 -247
  229. package/rust/core/parser/driver/parser.rs +0 -160
  230. package/rust/core/parser/handler/arrow_call.rs +0 -328
  231. package/rust/core/parser/handler/at.rs +0 -279
  232. package/rust/core/parser/handler/bank.rs +0 -104
  233. package/rust/core/parser/handler/condition.rs +0 -83
  234. package/rust/core/parser/handler/dot.rs +0 -148
  235. package/rust/core/parser/handler/identifier/automate.rs +0 -254
  236. package/rust/core/parser/handler/identifier/call.rs +0 -91
  237. package/rust/core/parser/handler/identifier/emit.rs +0 -70
  238. package/rust/core/parser/handler/identifier/function.rs +0 -113
  239. package/rust/core/parser/handler/identifier/group.rs +0 -89
  240. package/rust/core/parser/handler/identifier/let_.rs +0 -173
  241. package/rust/core/parser/handler/identifier/mod.rs +0 -55
  242. package/rust/core/parser/handler/identifier/on.rs +0 -107
  243. package/rust/core/parser/handler/identifier/print.rs +0 -49
  244. package/rust/core/parser/handler/identifier/sleep.rs +0 -96
  245. package/rust/core/parser/handler/identifier/spawn.rs +0 -91
  246. package/rust/core/parser/handler/identifier/synth.rs +0 -171
  247. package/rust/core/parser/handler/loop_.rs +0 -194
  248. package/rust/core/parser/handler/mod.rs +0 -9
  249. package/rust/core/parser/handler/pattern.rs +0 -97
  250. package/rust/core/parser/handler/tempo.rs +0 -105
  251. package/rust/core/parser/mod.rs +0 -3
  252. package/rust/core/parser/statement.rs +0 -10
  253. package/rust/core/plugin/loader.rs +0 -137
  254. package/rust/core/plugin/mod.rs +0 -2
  255. package/rust/core/plugin/runner/mod.rs +0 -11
  256. package/rust/core/plugin/runner/non_wasm.rs +0 -481
  257. package/rust/core/plugin/runner/wasm32.rs +0 -44
  258. package/rust/core/preprocessor/loader/inject.rs +0 -313
  259. package/rust/core/preprocessor/loader/loader_helpers.rs +0 -110
  260. package/rust/core/preprocessor/loader/mod.rs +0 -235
  261. package/rust/core/preprocessor/mod.rs +0 -4
  262. package/rust/core/preprocessor/module.rs +0 -55
  263. package/rust/core/preprocessor/processor/handlers.rs +0 -107
  264. package/rust/core/preprocessor/processor/mod.rs +0 -1
  265. package/rust/core/preprocessor/resolver/bank.rs +0 -49
  266. package/rust/core/preprocessor/resolver/call.rs +0 -124
  267. package/rust/core/preprocessor/resolver/condition.rs +0 -95
  268. package/rust/core/preprocessor/resolver/driver.rs +0 -324
  269. package/rust/core/preprocessor/resolver/function.rs +0 -69
  270. package/rust/core/preprocessor/resolver/group.rs +0 -122
  271. package/rust/core/preprocessor/resolver/let_.rs +0 -32
  272. package/rust/core/preprocessor/resolver/loop_.rs +0 -318
  273. package/rust/core/preprocessor/resolver/mod.rs +0 -16
  274. package/rust/core/preprocessor/resolver/pattern.rs +0 -95
  275. package/rust/core/preprocessor/resolver/spawn.rs +0 -99
  276. package/rust/core/preprocessor/resolver/synth.rs +0 -54
  277. package/rust/core/preprocessor/resolver/tempo.rs +0 -48
  278. package/rust/core/preprocessor/resolver/trigger.rs +0 -116
  279. package/rust/core/preprocessor/resolver/value.rs +0 -176
  280. package/rust/core/store/global.rs +0 -57
  281. package/rust/core/store/mod.rs +0 -1
  282. package/rust/lib.rs +0 -323
  283. package/rust/macros/Cargo.toml +0 -14
  284. package/rust/macros/src/lib.rs +0 -52
  285. package/rust/main.rs +0 -557
  286. package/rust/types/Cargo.toml +0 -11
  287. package/rust/types/src/addons.rs +0 -57
  288. package/rust/types/src/ast.rs +0 -202
  289. package/rust/types/src/config.rs +0 -82
  290. package/rust/types/src/lib.rs +0 -15
  291. package/rust/types/src/plugin.rs +0 -20
  292. package/rust/types/src/store.rs +0 -139
  293. package/rust/types/src/telemetry.rs +0 -85
  294. package/rust/utils/Cargo.toml +0 -29
  295. package/rust/utils/src/error.rs +0 -186
  296. package/rust/utils/src/file.rs +0 -477
  297. package/rust/utils/src/first_usage.rs +0 -97
  298. package/rust/utils/src/lib.rs +0 -9
  299. package/rust/utils/src/logger.rs +0 -200
  300. package/rust/utils/src/path.rs +0 -158
  301. package/rust/utils/src/signature.rs +0 -41
  302. package/rust/utils/src/spinner.rs +0 -20
  303. package/rust/utils/src/version.rs +0 -58
  304. package/rust/utils/src/watcher.rs +0 -46
  305. package/rust/web/api.rs +0 -5
  306. package/rust/web/auth.rs +0 -5
  307. package/rust/web/cdn.rs +0 -34
  308. package/rust/web/forge.rs +0 -5
  309. package/rust/web/mod.rs +0 -5
  310. package/rust/web/sso.rs +0 -5
  311. package/templates/minimal/.devalang +0 -5
  312. package/templates/minimal/README.md +0 -218
  313. package/templates/minimal/src/index.deva +0 -2
  314. package/templates/welcome/.devalang +0 -5
  315. package/templates/welcome/README.md +0 -218
  316. package/templates/welcome/samples/kick-808.wav +0 -0
  317. package/templates/welcome/src/index.deva +0 -61
  318. package/templates/welcome/src/variables.deva +0 -3
  319. package/tests/integration.rs +0 -21
  320. package/tests/rust/cli_check_build.rs +0 -21
  321. package/tests/rust/cli_help.rs +0 -12
  322. package/tests/rust/cli_template_list.rs +0 -10
  323. package/tests/rust/cli_version.rs +0 -11
  324. package/tests/typescript/index.spec.ts +0 -136
  325. package/tests/typescript/playhead.spec.ts +0 -36
  326. package/tests/typescript/render_e2e.spec.ts +0 -77
  327. package/tsconfig.json +0 -115
  328. package/typescript/bin/index.ts +0 -28
  329. package/typescript/core/functions/index.ts +0 -94
  330. package/typescript/core/index.ts +0 -6
  331. package/typescript/core/types/index.ts +0 -4
  332. package/typescript/core/types/plugin.ts +0 -19
  333. package/typescript/core/types/result.ts +0 -29
  334. package/typescript/core/types/statement.ts +0 -47
  335. package/typescript/core/types/value.ts +0 -29
  336. package/typescript/index.ts +0 -8
  337. package/typescript/pkg/devalang_core.d.ts +0 -4
  338. package/typescript/pkg/devalang_core.ts +0 -65
  339. package/typescript/scripts/copy-wasm-dts.ts +0 -41
  340. package/typescript/scripts/postinstall.ts +0 -85
  341. package/typescript/scripts/version/bump.ts +0 -44
  342. package/typescript/scripts/version/copy-to-binary.ts +0 -82
  343. package/typescript/scripts/version/fetch.ts +0 -18
  344. package/typescript/scripts/version/index.ts +0 -25
  345. package/typescript/scripts/version/sync.ts +0 -24
package/README.md CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  ![Rust](https://img.shields.io/badge/Made%20with-Rust-orange?logo=rust)
6
6
  ![TypeScript](https://img.shields.io/badge/Built%20with-TypeScript-blue?logo=typescript)
7
- ![Node.js](https://img.shields.io/badge/Node.js-18%2B-brightgreen?logo=node.js)
7
+ ![Node.js](https://img.shields.io/badge/Node.js-16%2B-brightgreen?logo=node.js)
8
8
 
9
- ![Project Status](https://img.shields.io/badge/status-beta-blue)
9
+ ![Project Status](https://img.shields.io/badge/status-preview-blue)
10
10
  ![Version](https://img.shields.io/npm/v/@devaloop/devalang)
11
11
  ![License: MIT](https://img.shields.io/badge/license-MIT-green)
12
12
 
@@ -17,205 +17,235 @@
17
17
  ![npm](https://img.shields.io/npm/dt/@devaloop/devalang)
18
18
  ![crates](https://img.shields.io/crates/d/devalang)
19
19
 
20
- ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/devaloop-labs/devalang/.github/workflows/ci.yml)
20
+ # 🦊 Devalang — Write music with code
21
21
 
22
- # 🦊 Devalang (CORE) Compose music with code
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
- Devalang is a tiny domain-specific language (DSL) for music makers, sound designers, and audio hackers.
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
- Whether you're building a track, shaping textures, or performing live, Devalang helps you think in rhythms. It’s designed to be simple, expressive, and fast — because your ideas shouldn’t wait.
27
+ From studio sketches to live sets, Devalang puts musical ideas into motion.
28
28
 
29
- From studio sketches to live sets, Devalang gives you rhythmic control — with the elegance of code.
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
- - [🎨 Prettier Plugin](https://www.npmjs.com/package/@devaloop/prettier-plugin-devalang)
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
- - [🌐 Project Website](https://devalang.com)
47
- - [📦 Devaforge on npm](https://www.npmjs.com/package/@devaloop/devaforge)
48
- - [📦 Devalang on npm](https://www.npmjs.com/package/@devaloop/devalang)
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
- ## ⏱️ Try it now !
47
+ ---
51
48
 
52
- ### Try Devalang in your browser
49
+ ## Quick Start
53
50
 
54
- > [Have a look at the Playground to try Devalang directly in your browser](https://playground.devalang.com)
51
+ ### Try in Your Browser
55
52
 
56
- ### Try Devalang in your terminal
53
+ > **[Launch the Playground](https://playground.devalang.com)** to try Devalang without installing anything.
57
54
 
58
- #### With Node.js
55
+ ### Install via npm (Recommended)
59
56
 
60
57
  ```bash
61
- npm install -g @devaloop/devalang@latest
58
+ npm install -g @devaloop/devalang
62
59
  ```
63
60
 
64
- #### With Rust
61
+ ### Install via Cargo (Rust)
65
62
 
66
63
  ```bash
67
- cargo install devalang --version <version>
64
+ cargo install devalang
68
65
  ```
69
66
 
70
- #### Initialize a new project
67
+ ### Create Your First Project
71
68
 
72
69
  ```bash
73
- devalang init --name my-project --template minimal
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
- #### Write your first script
86
+ ---
77
87
 
78
- Create a new Devalang file `src/index.deva` in the project directory:
88
+ ## 🎵 Your First Devalang Script
89
+
90
+ Create a file `hello.deva`:
79
91
 
80
92
  ```deva
81
- # src/index.deva
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
- ### And the best part ? You can play it directly from the command line:
96
+ # Load a bank of sounds
97
+ bank devaloop.808 as drums
147
98
 
148
- #### Play the script once
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
- ```bash
151
- devalang play
104
+ # Play the patterns
105
+ call kickPattern
106
+ call snarePattern
107
+ call hihatPattern
152
108
  ```
153
109
 
154
- #### **LIVE mode** (repeat the playback + watch mode)
110
+ ### Build the audio
155
111
 
156
112
  ```bash
157
- devalang play --repeat
113
+ # Build to WAV
114
+ devalang build --path hello.deva --formats wav
115
+
116
+ # Output: ./output/audio/hello.wav
158
117
  ```
159
118
 
160
- ### 🎉 You can now hear your Devalang code in action
119
+ # Play the audio
161
120
 
162
- > For more examples, check out the [examples directory](./examples/)
121
+ ```bash
122
+ # Play the audio file
123
+ devalang play --input hello.deva
163
124
 
164
- ## Why Devalang ?
125
+ # Play live (repeats and watch until stopped)
126
+ devalang play --live --input hello.deva
127
+ ```
165
128
 
166
- - 🎹 Prototype audio ideas without opening a DAW, even VSCode with our Playground
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
- - **Fast Build & Hot Reload** — optimized build process for quicker iteration.
175
- - 🎵 **Audio Engine & Real-time runner** — low-latency playback, render-to-file, and a realtime runner used by `devalang play --repeat` for live feedback.
176
- - 🧩 **Language primitives** — synths, notes, ADSR, maps, arrays, loops, conditionals and functions for expressive musical logic.
177
- - 🎛️ **Per-note automation & modulators** — `automate` maps, `$mod.*`, `$easing.*` and `$math.*` helpers for envelopes and LFOs.
178
- - 🧩 **Module system & structured AST** — import/export variables, stable AST output for debugging and tooling.
179
- - 🧰 **Plugins & Addons (WASM-ready)** — install plugins/banks, `@use` directive, and WASM plugin integration so plugins can render or process audio at runtime.
180
- - 📦 **Addon manager & Devaforge** — CLI commands to discover/install banks, plugins and templates; `devaforge` helps create addons.
181
- - ⚙️ **CLI tooling** — `build`, `check`, `play`, `install`, `init`, `discover`, `telemetry` and more with consistent flags (`--watch`, `--debug`, `--compress`).
182
- - 📂 **Project templates & examples** — quick-start templates and many example projects in `examples/`.
183
- - 🧑‍💻 **TypeScript API & WASM distribution** — Node-friendly package with TypeScript bindings and a WASM build for browser/Node usage.
184
- - 🧰 **Editor & formatting support** — VSCode extension and Prettier plugin to edit Devalang with syntax and formatting support.
185
- - 🎵 **Custom samples & banks** — drop samples into `.deva` and reference them from code; banks of sounds for fast composition.
186
- - 🔄 **Looping, grouping & scheduling** — precise beat-tied scheduling primitives for complex rhythmic patterns.
187
-
188
- ## 📄 Documentation
189
-
190
- ### [Please refer to the online documentation](https://docs.devalang.com) for detailed information on syntax, features, and usage examples
191
-
192
- ## 📰 What's new
193
-
194
- - **Effects chaining**: Added support for chaining multiple effects on synths and samples.
195
- - **New addons system**: Revamped the addons system for better management and integration.
196
- - **MIDI export**: Added the ability to export MIDI files from Devalang scripts.
197
- - **Synthesizer improvements**: Enhanced the built-in synthesizer with new types and modulation options.
198
- - **Devaforge**: Introduced a new system for creating and managing addons, including a CLI for addon generation.
199
- - **Documentation updates**: Improved documentation for clarity and completeness.
200
- - **Discovering addons**: Introduced a new command to detect addons.
201
- - **Public TypeScript API**: Added a public TypeScript API for easier integration.
202
- - **Improved error messages**: Enhanced error messages for better debugging.
203
- - **Major refactor**: Significant codebase refactor for improved maintainability and performance.
204
- - **Bug fixes**: Various bug fixes and stability improvements.
205
-
206
- ## 🛡️ License
207
-
208
- MITsee [LICENSE](./LICENSE)
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
- Contributions, bug reports and suggestions are welcome !
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
- For more info, see [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md).
229
+ ### Ways to Contribute
216
230
 
217
- ## 📢 Contact
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
- Feel free to reach out for any inquiries or feedback.
237
+ ---
220
238
 
221
- 📧 [contact@devaloop.com](mailto:contact@devaloop.com)
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>
@@ -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"}