@devaloop/devalang 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +169 -75
- package/out-tsc/bin/index.d.ts +0 -11
- package/out-tsc/bin/index.d.ts.map +1 -1
- package/out-tsc/bin/index.js +54 -19
- package/out-tsc/bin/index.js.map +1 -1
- package/package.json +6 -7
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -2,65 +2,84 @@
|
|
|
2
2
|
<img src="https://devalang.com/images/devalang-logo-min.png" alt="Devalang Logo" width="100" />
|
|
3
3
|
</div>
|
|
4
4
|
|
|
5
|
-

|
|
5
|
+

|
|
6
|
+

|
|
8
7
|
|
|
9
|
-

|
|
8
|
+

|
|
9
|
+

|
|
12
10
|
|
|
13
|
-

|
|
12
|
+

|
|
13
|
+

|
|
16
14
|
|
|
17
|
-

|
|
16
|
+
|
|
17
|
+

|
|
18
|
+

|
|
19
|
+
|
|
20
|
+

|
|
21
|
+

|
|
19
22
|
|
|
20
23
|
# 🦊 Devalang — Write music with code
|
|
21
24
|
|
|
22
25
|
Devalang is a compact **domain-specific language** (DSL) for **music makers**, **sound designers**, and **creative coders**.
|
|
23
26
|
Compose loops, control samples, synthesize audio, and render your ideas — all in clean, **readable text**.
|
|
24
27
|
|
|
25
|
-
Whether you're prototyping a beat
|
|
28
|
+
Whether you're **prototyping a beat**, building **generative music**, or **performing live**, Devalang gives you rhythmic precision with the elegance of code.
|
|
26
29
|
|
|
27
30
|
**From studio sketches to live sets, Devalang puts musical ideas into motion.**
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
> **🚀 v0.1.0+ - Complete Rewriting**
|
|
31
|
-
>
|
|
32
|
-
> **NEW**: [Devalang Playground V2.0 is now available](https://playground.devalang.com) — Try it in your browser!
|
|
33
|
-
|
|
34
|
-
|
|
35
32
|
## 📚 Quick Access
|
|
36
33
|
|
|
37
34
|
### Websites & Resources
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
|
|
36
|
+
[](https://devalang.com)
|
|
37
|
+
[](https://docs.devalang.com)
|
|
38
|
+
[](https://playground.devalang.com)
|
|
41
39
|
|
|
42
40
|
### Important files
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
|
|
42
|
+
[](https://github.com/devaloop-labs/devalang/blob/main/docs/CHANGELOG.md)
|
|
43
|
+
[](https://github.com/devaloop-labs/devalang/blob/main/examples)
|
|
45
44
|
|
|
46
45
|
### Common projects and tools
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
|
|
47
|
+
[](https://github.com/devaloop-labs/devapack)
|
|
48
|
+
[](https://marketplace.visualstudio.com/items?itemName=devaloop.devalang-vscode)
|
|
49
49
|
|
|
50
50
|
### Downloads
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
|
|
52
|
+
[](https://devalang.com/download)
|
|
53
|
+
|
|
54
|
+
### Community
|
|
55
|
+
|
|
56
|
+
[](https://discord.gg/wCqd8e6JD8)
|
|
57
|
+
[](https://www.instagram.com/labscend)
|
|
58
|
+
[](https://x.com/labscend)
|
|
59
|
+
[](https://linkedin.com/company/labscend-studios)
|
|
60
|
+
|
|
54
61
|
|
|
55
62
|
## ⚡ Quick Start
|
|
56
63
|
|
|
57
|
-
### Try in Your Browser
|
|
64
|
+
### [Try in Your Browser](https://playground.devalang.com)
|
|
65
|
+
|
|
66
|
+
Launch the Devalang Playground to write, run, and share Devalang code directly in your web browser. No installation required !
|
|
67
|
+
|
|
68
|
+
### [Download an installer (recommended)](https://devalang.com/download)
|
|
69
|
+
|
|
70
|
+
Visit the download page to get the latest releases for Windows, macOS, and Linux.
|
|
71
|
+
|
|
72
|
+
This is the recommended way to install Devalang, as the installers will set up everything for you, including adding Devalang to your system PATH.
|
|
58
73
|
|
|
59
|
-
|
|
74
|
+
### [Download a binary executable (advanced)](https://devalang.com/download)
|
|
60
75
|
|
|
61
|
-
|
|
76
|
+
You can also download the standalone binaries for your OS from the download page.
|
|
62
77
|
|
|
63
|
-
|
|
78
|
+
You must ensure that the binary is executable (e.g., `chmod +x <binary_name>` on Linux/Mac).
|
|
79
|
+
|
|
80
|
+
You must also add the binary to your system PATH to use it from any terminal location.
|
|
81
|
+
|
|
82
|
+
---
|
|
64
83
|
|
|
65
84
|
### Install via npm (Node.js)
|
|
66
85
|
|
|
@@ -74,6 +93,12 @@ npm install -g @devaloop/devalang
|
|
|
74
93
|
cargo install devalang
|
|
75
94
|
```
|
|
76
95
|
|
|
96
|
+
### (optional but recommended) Install the VSCode extension
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
code --install-extension devaloop.devalang-vscode
|
|
100
|
+
```
|
|
101
|
+
|
|
77
102
|
### Create Your First Project
|
|
78
103
|
|
|
79
104
|
```bash
|
|
@@ -123,49 +148,122 @@ Create a file `hello.deva` or `index.deva` (if you do not specify `--input` argu
|
|
|
123
148
|
- Ensure your text editor supports **UTF-8 encoding**.
|
|
124
149
|
- Devalang is **case-sensitive**, so be consistent with capitalization.
|
|
125
150
|
- Devalang reads files from **top to bottom**, so order matters.
|
|
126
|
-
- Devalang files typically
|
|
151
|
+
- Devalang files typically starts with :
|
|
152
|
+
1. Module system (`load`, `import`, `use`)
|
|
153
|
+
2. Global settings (`bpm`, `bank`)
|
|
154
|
+
3. Definitions (`const/let/var`, `synth`, `pattern`, `group`)
|
|
155
|
+
4. Algorithmic logic (`if`, `loop`, `for`)
|
|
156
|
+
5. Musical logic / Execution (trigger calls, automations, `call`, `spawn`, `sleep`)
|
|
157
|
+
6. Optional exports (`export`)
|
|
127
158
|
- Devalang files can include comments using `#` or `//` for single-line comments.
|
|
128
159
|
- You can name your files anything, but `index.deva` is a common convention for the main entry file.
|
|
129
|
-
- You can organize your project with subfolders as needed. (use module system like
|
|
160
|
+
- You can organize your project with subfolders as needed. (use module system like `import { var } from '<module_file_path>.deva'` and `export { var }`).
|
|
130
161
|
|
|
131
162
|
Refer to the [documentation](https://docs.devalang.com) for a complete syntax reference.
|
|
132
163
|
|
|
133
164
|
```deva
|
|
134
|
-
#
|
|
135
|
-
|
|
165
|
+
# Import some variables from other modules
|
|
166
|
+
import { myTempo } from "./shared/variables.deva"
|
|
167
|
+
|
|
168
|
+
# Load an external sample and a MIDI file
|
|
169
|
+
load "./samples/my-sample.wav" as mySample
|
|
170
|
+
load "./midi/my-midi-file.mid" as myMidiFile
|
|
171
|
+
|
|
172
|
+
# Set the tempo with the imported variable
|
|
173
|
+
bpm myTempo
|
|
136
174
|
|
|
137
175
|
# Load a bank of sounds (make sure you have the bank installed)
|
|
138
176
|
bank devaloop.808 as drums
|
|
139
177
|
|
|
140
|
-
# Create a simple kick pattern
|
|
178
|
+
# Create a simple kick pattern (can also use "mySample")
|
|
141
179
|
pattern kickPattern with drums.kick = "x--- x--- x--- x---"
|
|
142
180
|
|
|
143
|
-
# Define a synth
|
|
144
|
-
|
|
181
|
+
# Define a constant for synth, with a global LFO effect
|
|
182
|
+
# You can define variables scopes using const/let/var
|
|
183
|
+
const mySynth = synth saw
|
|
184
|
+
-> lfo({
|
|
185
|
+
rate: "1/8",
|
|
186
|
+
depth: 1.0,
|
|
187
|
+
waveform: "triangle",
|
|
188
|
+
target: "pitch",
|
|
189
|
+
semitones: 3.0
|
|
190
|
+
})
|
|
145
191
|
|
|
146
192
|
# Define a melody using a group to organize notes
|
|
147
193
|
group myMelody:
|
|
148
|
-
|
|
149
194
|
mySynth -> note(C5)
|
|
150
|
-
|
|
195
|
+
-> duration(500) # Note playing for 500ms
|
|
151
196
|
|
|
152
197
|
mySynth -> note(E5)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
mySynth ->
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
# Play the kick pattern (in parallel
|
|
165
|
-
|
|
198
|
+
-> duration(1/4) # Note playing for 1/4 beats
|
|
199
|
+
|
|
200
|
+
mySynth -> chord(Gmaj7)
|
|
201
|
+
-> duration(1/8) # Chord playing for 1/8 beats
|
|
202
|
+
-> velocity(100) # Velocity (0.0 to 1.0) or 0-127
|
|
203
|
+
-> lpf({
|
|
204
|
+
cutoff: 800.0, # Lowpass filter at 800 Hz
|
|
205
|
+
resonance: 0.5 # Filter resonance at 50%
|
|
206
|
+
})
|
|
207
|
+
-> reverb({ size: 0.3 }) # Small reverb effect
|
|
208
|
+
|
|
209
|
+
# Play the kick pattern (in parallel) (non-blocking)
|
|
210
|
+
layer kickPattern
|
|
211
|
+
|
|
212
|
+
# Play the melody (in sequential) (blocking)
|
|
213
|
+
sequence myMelody
|
|
214
|
+
|
|
215
|
+
# Bind and play the loaded MIDI pattern with 'mySynth' synth
|
|
216
|
+
bind myMidiFile -> mySynth
|
|
217
|
+
|
|
218
|
+
# Pause for 1/4 beats
|
|
219
|
+
sleep 1/4
|
|
220
|
+
|
|
221
|
+
# Store the sample in a variable and apply effects to it
|
|
222
|
+
let myAwesomeSample = .mySample
|
|
223
|
+
-> reverse(true) # Reverse the sample audio
|
|
224
|
+
-> speed(2.0) # Multiply the playing speed by 2
|
|
225
|
+
-> dist({
|
|
226
|
+
amount: 1.0, # Apply a maximal distortion
|
|
227
|
+
mix: 0.5 # Apply a 50% mixing
|
|
228
|
+
})
|
|
229
|
+
-> reverb({
|
|
230
|
+
size: 1.0, # Apply a maximal reverb size
|
|
231
|
+
decay: 0.1, # Apply a short decay
|
|
232
|
+
mix: 0.5 # Apply a 50% mixing
|
|
233
|
+
})
|
|
234
|
+
-> reverb({ # Duplicate reverb for a stronger effect
|
|
235
|
+
size: 1.0,
|
|
236
|
+
decay: 0.1,
|
|
237
|
+
mix: 0.5
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
# Playing the stored sample trigger in different ways
|
|
241
|
+
.myAwesomeSample # Play the full sample length
|
|
242
|
+
.myAwesomeSample auto # Use maximal sample length by default
|
|
243
|
+
.myAwesomeSample 1/8 # Play the sample for 1/8 beats
|
|
244
|
+
|
|
245
|
+
# Play the sample in conditional loop
|
|
246
|
+
for i in 0..3:
|
|
247
|
+
if i == 2:
|
|
248
|
+
.myAwesomeSample 1/4 # Play for 1/4 beats on iteration 2
|
|
249
|
+
else:
|
|
250
|
+
.myAwesomeSample 1/8 # Play for 1/8 beats otherwise
|
|
251
|
+
|
|
252
|
+
# Play the sample in a blocking loop (run 10 times before continuing)
|
|
253
|
+
loop 10:
|
|
254
|
+
.myAwesomeSample auto
|
|
255
|
+
|
|
256
|
+
# Play the sample in an (infinite) passthrough loop (non-blocking)
|
|
257
|
+
# This will continue playing in the background and let the script continue
|
|
258
|
+
# You can also specify a duration using "loop pass(<duration>):"
|
|
259
|
+
loop pass:
|
|
260
|
+
.myAwesomeSample auto
|
|
261
|
+
|
|
262
|
+
# Export the melody
|
|
263
|
+
export { myMelody }
|
|
166
264
|
```
|
|
167
265
|
|
|
168
|
-
### (optional) Configure project settings
|
|
266
|
+
### ⚙️ (optional) Configure project settings
|
|
169
267
|
|
|
170
268
|
You can create a `devalang.json` (recommended) or `devalang.toml` or even `.devalang` (legacy) file to customize check/build/play settings.
|
|
171
269
|
|
|
@@ -191,7 +289,15 @@ This typically evitate to re-type common arguments like `--path`, `--formats`, e
|
|
|
191
289
|
"bpm": 120 // Change this to adjust the project tempo (only if not set in code)
|
|
192
290
|
},
|
|
193
291
|
"live": {
|
|
194
|
-
"crossfade_ms":
|
|
292
|
+
"crossfade_ms": 50 // Change this to adjust crossfade duration when playing live
|
|
293
|
+
},
|
|
294
|
+
"rules": {
|
|
295
|
+
"explicit_durations": "warning",
|
|
296
|
+
"deprecated_syntax": "warning",
|
|
297
|
+
"var_keyword": "error", // Change this to "warning", "info" or "off" to relax the rule
|
|
298
|
+
"missing_duration": "info",
|
|
299
|
+
"implicit_type_conversion": "info",
|
|
300
|
+
"unused_variables": "warning"
|
|
195
301
|
}
|
|
196
302
|
}
|
|
197
303
|
|
|
@@ -213,9 +319,9 @@ devalang play --input hello.deva
|
|
|
213
319
|
# Play live (repeats and watch until stopped)
|
|
214
320
|
devalang play --live --input hello.deva
|
|
215
321
|
|
|
216
|
-
# Play live loop
|
|
217
|
-
# With
|
|
218
|
-
devalang play --live --crossfade-ms
|
|
322
|
+
# Play live loop without crossfade
|
|
323
|
+
# With 0ms, transitions between loops are no more distinguishable
|
|
324
|
+
devalang play --live --crossfade-ms 0 --input hello.deva
|
|
219
325
|
```
|
|
220
326
|
|
|
221
327
|
## 🚀 Features
|
|
@@ -233,8 +339,8 @@ devalang play --live --crossfade-ms 50 --input hello.deva
|
|
|
233
339
|
- ✅ **Events** — Event system with `on` and `emit`
|
|
234
340
|
|
|
235
341
|
### 🛠️ **CLI Tools**
|
|
236
|
-
- ✅ `devalang init` — Scaffold new projects
|
|
237
|
-
- ✅ `devalang build` — Compile to WAV/MIDI
|
|
342
|
+
- ✅ `devalang init` — Scaffold new projects
|
|
343
|
+
- ✅ `devalang build` — Compile to WAV/MIDI/MP3
|
|
238
344
|
- ✅ `devalang check` — Validate syntax
|
|
239
345
|
- ✅ `devalang play` — Audio playback
|
|
240
346
|
- ✅ `devalang addon` — Manage addons (install, list, discover)
|
|
@@ -272,16 +378,6 @@ devalang play --live --crossfade-ms 50 --input hello.deva
|
|
|
272
378
|
- 🎨 **Live code** with fast iteration cycles
|
|
273
379
|
- 📦 **Version control** your music with git
|
|
274
380
|
|
|
275
|
-
## 📖 Documentation
|
|
276
|
-
|
|
277
|
-
Visit **[docs.devalang.com](https://docs.devalang.com)** for:
|
|
278
|
-
- Complete syntax reference
|
|
279
|
-
- API documentation
|
|
280
|
-
- WASM integration guide
|
|
281
|
-
- CLI command reference
|
|
282
|
-
- Advanced tutorials
|
|
283
|
-
- Best practices
|
|
284
|
-
|
|
285
381
|
## 🔧 Development
|
|
286
382
|
|
|
287
383
|
### Build from Source
|
|
@@ -315,10 +411,8 @@ We welcome contributions! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guideline
|
|
|
315
411
|
### Ways to Contribute
|
|
316
412
|
|
|
317
413
|
- 🐛 **Report bugs** via [GitHub Issues](https://github.com/devaloop-labs/devalang/issues)
|
|
318
|
-
- 💡 **Suggest features**
|
|
319
|
-
-
|
|
320
|
-
- 🎵 **Share examples** of your creations
|
|
321
|
-
- 🧪 **Write tests** for new features
|
|
414
|
+
- 💡 **Suggest features** on [hello@labscend.studio](mailto://hello@labscend.studio)
|
|
415
|
+
- 🎵 **Share examples** of your creations with **#devalang** tag
|
|
322
416
|
|
|
323
417
|
## 📜 License
|
|
324
418
|
|
package/out-tsc/bin/index.d.ts
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Devalang CLI entry point
|
|
4
|
-
*
|
|
5
|
-
* This is a placeholder that forwards to the Rust CLI binary.
|
|
6
|
-
* The actual CLI is built with Cargo and should be run with:
|
|
7
|
-
*
|
|
8
|
-
* cargo run --features cli -- [args]
|
|
9
|
-
*
|
|
10
|
-
* For the npm package, users should install the Rust toolchain
|
|
11
|
-
* or we should provide pre-built binaries.
|
|
12
|
-
*/
|
|
13
2
|
export {};
|
|
14
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typescript/bin/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typescript/bin/index.ts"],"names":[],"mappings":""}
|
package/out-tsc/bin/index.js
CHANGED
|
@@ -1,23 +1,58 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
14
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
let binaryName;
|
|
40
|
+
switch (process.platform) {
|
|
41
|
+
case "win32":
|
|
42
|
+
binaryName = "devalang-x86_64-pc-windows-msvc.exe";
|
|
43
|
+
break;
|
|
44
|
+
case "darwin":
|
|
45
|
+
binaryName = "devalang-x86_64-apple-darwin";
|
|
46
|
+
break;
|
|
47
|
+
case "linux":
|
|
48
|
+
binaryName = "devalang-x86_64-unknown-linux-gnu";
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
console.error(`Unsupported platform: ${process.platform}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
const binaryPath = path.join(__dirname, binaryName);
|
|
55
|
+
const args = process.argv.slice(2);
|
|
56
|
+
const child = (0, child_process_1.spawn)(binaryPath, args, { stdio: "inherit" });
|
|
57
|
+
child.on("exit", (code) => process.exit(code ?? 1));
|
|
23
58
|
//# sourceMappingURL=index.js.map
|
package/out-tsc/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/typescript/bin/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/typescript/bin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,iDAAsC;AACtC,2CAA6B;AAE7B,IAAI,UAAkB,CAAC;AAEvB,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzB,KAAK,OAAO;QACV,UAAU,GAAG,qCAAqC,CAAC;QACnD,MAAM;IACR,KAAK,QAAQ;QACX,UAAU,GAAG,8BAA8B,CAAC;QAC5C,MAAM;IACR,KAAK,OAAO;QACV,UAAU,GAAG,mCAAmC,CAAC;QACjD,MAAM;IACR;QACE,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAE5D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devaloop/devalang",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.1.
|
|
5
|
-
"description": "Write music
|
|
4
|
+
"version": "0.1.7",
|
|
5
|
+
"description": "Write music with 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
|
"types": "./out-tsc/index.d.ts",
|
|
8
8
|
"bin": {
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"test:examples": "cargo run --features cli -- check --entry examples/",
|
|
33
33
|
"clean": "cargo clean && npm run ts:clean",
|
|
34
34
|
"prepare": "npm run ts:build",
|
|
35
|
-
"prepublishOnly": "npm run build:all",
|
|
36
35
|
"postinstall": "node -e \"try { require('./out-tsc/scripts/postinstall.js') } catch (e) { console.log('⚠️ Skipping postinstall (build first)') }\""
|
|
37
36
|
},
|
|
38
37
|
"homepage": "https://devalang.com",
|
|
@@ -49,9 +48,9 @@
|
|
|
49
48
|
"sound-design"
|
|
50
49
|
],
|
|
51
50
|
"author": {
|
|
52
|
-
"name": "
|
|
53
|
-
"email": "
|
|
54
|
-
"url": "https://
|
|
51
|
+
"name": "Labscend",
|
|
52
|
+
"email": "hello@labscend.studio",
|
|
53
|
+
"url": "https://labscend.studio"
|
|
55
54
|
},
|
|
56
55
|
"license": "MIT",
|
|
57
56
|
"repository": {
|
|
@@ -67,7 +66,7 @@
|
|
|
67
66
|
"typescript": "^5.9.3"
|
|
68
67
|
},
|
|
69
68
|
"engines": {
|
|
70
|
-
"node": ">=
|
|
69
|
+
"node": ">=18.0.0"
|
|
71
70
|
},
|
|
72
71
|
"files": [
|
|
73
72
|
"out-tsc/**/*",
|