takomusic 1.2.0
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 +661 -0
- package/README.md +230 -0
- package/dist/__tests__/checker.test.d.ts +2 -0
- package/dist/__tests__/checker.test.d.ts.map +1 -0
- package/dist/__tests__/checker.test.js +316 -0
- package/dist/__tests__/checker.test.js.map +1 -0
- package/dist/__tests__/compiler.test.d.ts +2 -0
- package/dist/__tests__/compiler.test.d.ts.map +1 -0
- package/dist/__tests__/compiler.test.js +260 -0
- package/dist/__tests__/compiler.test.js.map +1 -0
- package/dist/__tests__/generators.test.d.ts +2 -0
- package/dist/__tests__/generators.test.d.ts.map +1 -0
- package/dist/__tests__/generators.test.js +283 -0
- package/dist/__tests__/generators.test.js.map +1 -0
- package/dist/__tests__/interpreter.test.d.ts +2 -0
- package/dist/__tests__/interpreter.test.d.ts.map +1 -0
- package/dist/__tests__/interpreter.test.js +298 -0
- package/dist/__tests__/interpreter.test.js.map +1 -0
- package/dist/__tests__/lexer.test.d.ts +2 -0
- package/dist/__tests__/lexer.test.d.ts.map +1 -0
- package/dist/__tests__/lexer.test.js +89 -0
- package/dist/__tests__/lexer.test.js.map +1 -0
- package/dist/__tests__/parser.test.d.ts +2 -0
- package/dist/__tests__/parser.test.d.ts.map +1 -0
- package/dist/__tests__/parser.test.js +116 -0
- package/dist/__tests__/parser.test.js.map +1 -0
- package/dist/checker/checker.d.ts +37 -0
- package/dist/checker/checker.d.ts.map +1 -0
- package/dist/checker/checker.js +428 -0
- package/dist/checker/checker.js.map +1 -0
- package/dist/checker/index.d.ts +3 -0
- package/dist/checker/index.d.ts.map +1 -0
- package/dist/checker/index.js +2 -0
- package/dist/checker/index.js.map +1 -0
- package/dist/cli/commands/build.d.ts +2 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +173 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/check.d.ts +2 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +79 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +187 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/fmt.d.ts +2 -0
- package/dist/cli/commands/fmt.d.ts.map +1 -0
- package/dist/cli/commands/fmt.js +73 -0
- package/dist/cli/commands/fmt.js.map +1 -0
- package/dist/cli/commands/import.d.ts +2 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +99 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +514 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/play.d.ts +2 -0
- package/dist/cli/commands/play.d.ts.map +1 -0
- package/dist/cli/commands/play.js +216 -0
- package/dist/cli/commands/play.js.map +1 -0
- package/dist/cli/commands/record.d.ts +2 -0
- package/dist/cli/commands/record.d.ts.map +1 -0
- package/dist/cli/commands/record.js +393 -0
- package/dist/cli/commands/record.js.map +1 -0
- package/dist/cli/commands/render.d.ts +2 -0
- package/dist/cli/commands/render.d.ts.map +1 -0
- package/dist/cli/commands/render.js +278 -0
- package/dist/cli/commands/render.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +93 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compiler/compiler.d.ts +12 -0
- package/dist/compiler/compiler.d.ts.map +1 -0
- package/dist/compiler/compiler.js +146 -0
- package/dist/compiler/compiler.js.map +1 -0
- package/dist/compiler/index.d.ts +2 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +2 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/config/config.d.ts +43 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +200 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/errors.d.ts +49 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +168 -0
- package/dist/errors.js.map +1 -0
- package/dist/formatter/formatter.d.ts +13 -0
- package/dist/formatter/formatter.d.ts.map +1 -0
- package/dist/formatter/formatter.js +242 -0
- package/dist/formatter/formatter.js.map +1 -0
- package/dist/formatter/index.d.ts +2 -0
- package/dist/formatter/index.d.ts.map +1 -0
- package/dist/formatter/index.js +2 -0
- package/dist/formatter/index.js.map +1 -0
- package/dist/generators/index.d.ts +5 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +5 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/midi.d.ts +3 -0
- package/dist/generators/midi.d.ts.map +1 -0
- package/dist/generators/midi.js +360 -0
- package/dist/generators/midi.js.map +1 -0
- package/dist/generators/musicxml.d.ts +3 -0
- package/dist/generators/musicxml.d.ts.map +1 -0
- package/dist/generators/musicxml.js +332 -0
- package/dist/generators/musicxml.js.map +1 -0
- package/dist/generators/tempo-midi.d.ts +3 -0
- package/dist/generators/tempo-midi.d.ts.map +1 -0
- package/dist/generators/tempo-midi.js +123 -0
- package/dist/generators/tempo-midi.js.map +1 -0
- package/dist/generators/vsqx.d.ts +3 -0
- package/dist/generators/vsqx.d.ts.map +1 -0
- package/dist/generators/vsqx.js +354 -0
- package/dist/generators/vsqx.js.map +1 -0
- package/dist/importers/index.d.ts +2 -0
- package/dist/importers/index.d.ts.map +1 -0
- package/dist/importers/index.js +3 -0
- package/dist/importers/index.js.map +1 -0
- package/dist/importers/musicxml.d.ts +4 -0
- package/dist/importers/musicxml.d.ts.map +1 -0
- package/dist/importers/musicxml.js +392 -0
- package/dist/importers/musicxml.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter/builtins/algorithmic.d.ts +12 -0
- package/dist/interpreter/builtins/algorithmic.d.ts.map +1 -0
- package/dist/interpreter/builtins/algorithmic.js +244 -0
- package/dist/interpreter/builtins/algorithmic.js.map +1 -0
- package/dist/interpreter/builtins/audio.d.ts +10 -0
- package/dist/interpreter/builtins/audio.d.ts.map +1 -0
- package/dist/interpreter/builtins/audio.js +169 -0
- package/dist/interpreter/builtins/audio.js.map +1 -0
- package/dist/interpreter/builtins/core.d.ts +15 -0
- package/dist/interpreter/builtins/core.d.ts.map +1 -0
- package/dist/interpreter/builtins/core.js +265 -0
- package/dist/interpreter/builtins/core.js.map +1 -0
- package/dist/interpreter/builtins/dynamics.d.ts +8 -0
- package/dist/interpreter/builtins/dynamics.d.ts.map +1 -0
- package/dist/interpreter/builtins/dynamics.js +86 -0
- package/dist/interpreter/builtins/dynamics.js.map +1 -0
- package/dist/interpreter/builtins/effects.d.ts +16 -0
- package/dist/interpreter/builtins/effects.d.ts.map +1 -0
- package/dist/interpreter/builtins/effects.js +220 -0
- package/dist/interpreter/builtins/effects.js.map +1 -0
- package/dist/interpreter/builtins/index.d.ts +16 -0
- package/dist/interpreter/builtins/index.d.ts.map +1 -0
- package/dist/interpreter/builtins/index.js +17 -0
- package/dist/interpreter/builtins/index.js.map +1 -0
- package/dist/interpreter/builtins/layout.d.ts +12 -0
- package/dist/interpreter/builtins/layout.d.ts.map +1 -0
- package/dist/interpreter/builtins/layout.js +175 -0
- package/dist/interpreter/builtins/layout.js.map +1 -0
- package/dist/interpreter/builtins/live.d.ts +11 -0
- package/dist/interpreter/builtins/live.d.ts.map +1 -0
- package/dist/interpreter/builtins/live.js +125 -0
- package/dist/interpreter/builtins/live.js.map +1 -0
- package/dist/interpreter/builtins/midi.d.ts +16 -0
- package/dist/interpreter/builtins/midi.d.ts.map +1 -0
- package/dist/interpreter/builtins/midi.js +320 -0
- package/dist/interpreter/builtins/midi.js.map +1 -0
- package/dist/interpreter/builtins/mixing.d.ts +6 -0
- package/dist/interpreter/builtins/mixing.d.ts.map +1 -0
- package/dist/interpreter/builtins/mixing.js +62 -0
- package/dist/interpreter/builtins/mixing.js.map +1 -0
- package/dist/interpreter/builtins/notation.d.ts +24 -0
- package/dist/interpreter/builtins/notation.d.ts.map +1 -0
- package/dist/interpreter/builtins/notation.js +251 -0
- package/dist/interpreter/builtins/notation.js.map +1 -0
- package/dist/interpreter/builtins/ornaments.d.ts +8 -0
- package/dist/interpreter/builtins/ornaments.d.ts.map +1 -0
- package/dist/interpreter/builtins/ornaments.js +155 -0
- package/dist/interpreter/builtins/ornaments.js.map +1 -0
- package/dist/interpreter/builtins/techniques.d.ts +11 -0
- package/dist/interpreter/builtins/techniques.d.ts.map +1 -0
- package/dist/interpreter/builtins/techniques.js +234 -0
- package/dist/interpreter/builtins/techniques.js.map +1 -0
- package/dist/interpreter/builtins/tuning.d.ts +7 -0
- package/dist/interpreter/builtins/tuning.d.ts.map +1 -0
- package/dist/interpreter/builtins/tuning.js +52 -0
- package/dist/interpreter/builtins/tuning.js.map +1 -0
- package/dist/interpreter/builtins/types.d.ts +27 -0
- package/dist/interpreter/builtins/types.d.ts.map +1 -0
- package/dist/interpreter/builtins/types.js +3 -0
- package/dist/interpreter/builtins/types.js.map +1 -0
- package/dist/interpreter/builtins/vocaloid.d.ts +10 -0
- package/dist/interpreter/builtins/vocaloid.d.ts.map +1 -0
- package/dist/interpreter/builtins/vocaloid.js +165 -0
- package/dist/interpreter/builtins/vocaloid.js.map +1 -0
- package/dist/interpreter/index.d.ts +4 -0
- package/dist/interpreter/index.d.ts.map +1 -0
- package/dist/interpreter/index.js +4 -0
- package/dist/interpreter/index.js.map +1 -0
- package/dist/interpreter/interpreter.d.ts +305 -0
- package/dist/interpreter/interpreter.d.ts.map +1 -0
- package/dist/interpreter/interpreter.js +8463 -0
- package/dist/interpreter/interpreter.js.map +1 -0
- package/dist/interpreter/runtime.d.ts +67 -0
- package/dist/interpreter/runtime.d.ts.map +1 -0
- package/dist/interpreter/runtime.js +88 -0
- package/dist/interpreter/runtime.js.map +1 -0
- package/dist/interpreter/scope.d.ts +21 -0
- package/dist/interpreter/scope.d.ts.map +1 -0
- package/dist/interpreter/scope.js +60 -0
- package/dist/interpreter/scope.js.map +1 -0
- package/dist/interpreter/trackState.d.ts +205 -0
- package/dist/interpreter/trackState.d.ts.map +1 -0
- package/dist/interpreter/trackState.js +12 -0
- package/dist/interpreter/trackState.js.map +1 -0
- package/dist/lexer/index.d.ts +2 -0
- package/dist/lexer/index.d.ts.map +1 -0
- package/dist/lexer/index.js +2 -0
- package/dist/lexer/index.js.map +1 -0
- package/dist/lexer/lexer.d.ts +30 -0
- package/dist/lexer/lexer.d.ts.map +1 -0
- package/dist/lexer/lexer.js +385 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/parser/index.d.ts +2 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +2 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parser.d.ts +55 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +896 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/types/ast.d.ts +220 -0
- package/dist/types/ast.d.ts.map +1 -0
- package/dist/types/ast.js +3 -0
- package/dist/types/ast.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/ir/advanced.d.ts +491 -0
- package/dist/types/ir/advanced.d.ts.map +1 -0
- package/dist/types/ir/advanced.js +3 -0
- package/dist/types/ir/advanced.js.map +1 -0
- package/dist/types/ir/algorithmic.d.ts +48 -0
- package/dist/types/ir/algorithmic.d.ts.map +1 -0
- package/dist/types/ir/algorithmic.js +3 -0
- package/dist/types/ir/algorithmic.js.map +1 -0
- package/dist/types/ir/analysis.d.ts +34 -0
- package/dist/types/ir/analysis.d.ts.map +1 -0
- package/dist/types/ir/analysis.js +3 -0
- package/dist/types/ir/analysis.js.map +1 -0
- package/dist/types/ir/audio.d.ts +249 -0
- package/dist/types/ir/audio.d.ts.map +1 -0
- package/dist/types/ir/audio.js +3 -0
- package/dist/types/ir/audio.js.map +1 -0
- package/dist/types/ir/automation.d.ts +46 -0
- package/dist/types/ir/automation.d.ts.map +1 -0
- package/dist/types/ir/automation.js +3 -0
- package/dist/types/ir/automation.js.map +1 -0
- package/dist/types/ir/collaboration.d.ts +20 -0
- package/dist/types/ir/collaboration.d.ts.map +1 -0
- package/dist/types/ir/collaboration.js +3 -0
- package/dist/types/ir/collaboration.js.map +1 -0
- package/dist/types/ir/core.d.ts +153 -0
- package/dist/types/ir/core.d.ts.map +1 -0
- package/dist/types/ir/core.js +3 -0
- package/dist/types/ir/core.js.map +1 -0
- package/dist/types/ir/effects.d.ts +169 -0
- package/dist/types/ir/effects.d.ts.map +1 -0
- package/dist/types/ir/effects.js +3 -0
- package/dist/types/ir/effects.js.map +1 -0
- package/dist/types/ir/extended.d.ts +104 -0
- package/dist/types/ir/extended.d.ts.map +1 -0
- package/dist/types/ir/extended.js +3 -0
- package/dist/types/ir/extended.js.map +1 -0
- package/dist/types/ir/index.d.ts +16 -0
- package/dist/types/ir/index.d.ts.map +1 -0
- package/dist/types/ir/index.js +17 -0
- package/dist/types/ir/index.js.map +1 -0
- package/dist/types/ir/mastering.d.ts +86 -0
- package/dist/types/ir/mastering.d.ts.map +1 -0
- package/dist/types/ir/mastering.js +3 -0
- package/dist/types/ir/mastering.js.map +1 -0
- package/dist/types/ir/midi.d.ts +79 -0
- package/dist/types/ir/midi.d.ts.map +1 -0
- package/dist/types/ir/midi.js +3 -0
- package/dist/types/ir/midi.js.map +1 -0
- package/dist/types/ir/notation.d.ts +963 -0
- package/dist/types/ir/notation.d.ts.map +1 -0
- package/dist/types/ir/notation.js +3 -0
- package/dist/types/ir/notation.js.map +1 -0
- package/dist/types/ir/recording.d.ts +48 -0
- package/dist/types/ir/recording.d.ts.map +1 -0
- package/dist/types/ir/recording.js +3 -0
- package/dist/types/ir/recording.js.map +1 -0
- package/dist/types/ir/sampling.d.ts +59 -0
- package/dist/types/ir/sampling.d.ts.map +1 -0
- package/dist/types/ir/sampling.js +3 -0
- package/dist/types/ir/sampling.js.map +1 -0
- package/dist/types/ir/sequencing.d.ts +118 -0
- package/dist/types/ir/sequencing.d.ts.map +1 -0
- package/dist/types/ir/sequencing.js +3 -0
- package/dist/types/ir/sequencing.js.map +1 -0
- package/dist/types/ir/sync.d.ts +39 -0
- package/dist/types/ir/sync.d.ts.map +1 -0
- package/dist/types/ir/sync.js +3 -0
- package/dist/types/ir/sync.js.map +1 -0
- package/dist/types/ir.d.ts +2 -0
- package/dist/types/ir.d.ts.map +1 -0
- package/dist/types/ir.js +3 -0
- package/dist/types/ir.js.map +1 -0
- package/dist/types/token.d.ts +72 -0
- package/dist/types/token.d.ts.map +1 -0
- package/dist/types/token.js +90 -0
- package/dist/types/token.js.map +1 -0
- package/dist/utils/stdlib.d.ts +18 -0
- package/dist/utils/stdlib.d.ts.map +1 -0
- package/dist/utils/stdlib.js +51 -0
- package/dist/utils/stdlib.js.map +1 -0
- package/lib/articulation.mf +46 -0
- package/lib/composition.mf +299 -0
- package/lib/curves.mf +183 -0
- package/lib/dynamics.mf +141 -0
- package/lib/expression.mf +221 -0
- package/lib/genres.mf +348 -0
- package/lib/notation.mf +224 -0
- package/lib/ornaments.mf +98 -0
- package/lib/patterns.mf +170 -0
- package/lib/rhythm.mf +269 -0
- package/lib/theory.mf +257 -0
- package/lib/utils.mf +140 -0
- package/package.json +49 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// Configuration file parser for mfconfig.toml
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import TOML from 'toml';
|
|
5
|
+
const DEFAULT_CONFIG = {
|
|
6
|
+
project: {
|
|
7
|
+
entry: 'src/main.mf',
|
|
8
|
+
dist: 'dist',
|
|
9
|
+
out: 'out',
|
|
10
|
+
defaultProfile: 'cli',
|
|
11
|
+
},
|
|
12
|
+
profiles: {
|
|
13
|
+
miku: {
|
|
14
|
+
backend: 'miku-daw',
|
|
15
|
+
importStrategy: 'manual',
|
|
16
|
+
vsqxOut: 'dist/vocal.vsqx',
|
|
17
|
+
tempoMidOut: 'dist/tempo.mid',
|
|
18
|
+
renderOut: 'out/mix.wav',
|
|
19
|
+
},
|
|
20
|
+
cli: {
|
|
21
|
+
backend: 'headless',
|
|
22
|
+
musicxmlOut: 'dist/vocal.musicxml',
|
|
23
|
+
bandMidOut: 'dist/band.mid',
|
|
24
|
+
renderOut: 'out/mix.wav',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export function loadConfig(configPath) {
|
|
29
|
+
try {
|
|
30
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
31
|
+
const parsed = TOML.parse(content);
|
|
32
|
+
return mergeConfig(DEFAULT_CONFIG, parsed);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err.code === 'ENOENT') {
|
|
36
|
+
throw new Error(`Config file not found: ${configPath}`);
|
|
37
|
+
}
|
|
38
|
+
if (err instanceof Error && err.message.includes('Syntax error')) {
|
|
39
|
+
throw new Error(`Invalid TOML syntax in ${configPath}: ${err.message}`);
|
|
40
|
+
}
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function validateConfig(configPath) {
|
|
45
|
+
const errors = [];
|
|
46
|
+
const warnings = [];
|
|
47
|
+
const baseDir = path.dirname(configPath);
|
|
48
|
+
try {
|
|
49
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
50
|
+
const parsed = TOML.parse(content);
|
|
51
|
+
// Check for unknown top-level keys
|
|
52
|
+
const validTopKeys = ['project', 'profiles'];
|
|
53
|
+
for (const key of Object.keys(parsed)) {
|
|
54
|
+
if (!validTopKeys.includes(key)) {
|
|
55
|
+
warnings.push(`Unknown config key: "${key}". Valid keys are: ${validTopKeys.join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Validate [project] section
|
|
59
|
+
if (parsed.project) {
|
|
60
|
+
const validProjectKeys = ['entry', 'dist', 'out', 'default_profile', 'name', 'version'];
|
|
61
|
+
for (const key of Object.keys(parsed.project)) {
|
|
62
|
+
if (!validProjectKeys.includes(key)) {
|
|
63
|
+
warnings.push(`Unknown project key: "${key}". Valid keys are: ${validProjectKeys.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Check entry file exists
|
|
67
|
+
if (parsed.project.entry) {
|
|
68
|
+
const entryPath = path.join(baseDir, parsed.project.entry);
|
|
69
|
+
if (!fs.existsSync(entryPath)) {
|
|
70
|
+
errors.push(`Entry file not found: ${parsed.project.entry}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
warnings.push('Missing [project] section, using defaults');
|
|
76
|
+
}
|
|
77
|
+
// Validate [profiles] section
|
|
78
|
+
if (parsed.profiles) {
|
|
79
|
+
const validProfileNames = ['cli', 'miku'];
|
|
80
|
+
for (const profileName of Object.keys(parsed.profiles)) {
|
|
81
|
+
if (!validProfileNames.includes(profileName)) {
|
|
82
|
+
warnings.push(`Unknown profile: "${profileName}". Valid profiles are: ${validProfileNames.join(', ')}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Validate [profiles.cli]
|
|
86
|
+
if (parsed.profiles.cli) {
|
|
87
|
+
const validCliKeys = ['backend', 'vocal_cmd', 'midi_cmd', 'mix_cmd', 'musicxml_out', 'band_mid_out', 'render_out'];
|
|
88
|
+
for (const key of Object.keys(parsed.profiles.cli)) {
|
|
89
|
+
if (!validCliKeys.includes(key)) {
|
|
90
|
+
warnings.push(`Unknown profiles.cli key: "${key}". Valid keys are: ${validCliKeys.join(', ')}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check command arrays
|
|
94
|
+
for (const cmdKey of ['vocal_cmd', 'midi_cmd', 'mix_cmd']) {
|
|
95
|
+
const cmd = parsed.profiles.cli[cmdKey];
|
|
96
|
+
if (cmd && !Array.isArray(cmd)) {
|
|
97
|
+
errors.push(`profiles.cli.${cmdKey} must be an array of strings`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Validate [profiles.miku]
|
|
102
|
+
if (parsed.profiles.miku) {
|
|
103
|
+
const validMikuKeys = ['backend', 'import_strategy', 'daw_exe', 'daw_args', 'daw_project', 'vsqx_out', 'tempo_mid_out', 'render_out', 'engine'];
|
|
104
|
+
for (const key of Object.keys(parsed.profiles.miku)) {
|
|
105
|
+
if (!validMikuKeys.includes(key)) {
|
|
106
|
+
warnings.push(`Unknown profiles.miku key: "${key}". Valid keys are: ${validMikuKeys.join(', ')}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
valid: errors.length === 0,
|
|
113
|
+
errors,
|
|
114
|
+
warnings,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
if (err instanceof Error) {
|
|
119
|
+
errors.push(err.message);
|
|
120
|
+
}
|
|
121
|
+
return { valid: false, errors, warnings };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export function findConfigPath(startDir) {
|
|
125
|
+
let currentDir = startDir;
|
|
126
|
+
while (true) {
|
|
127
|
+
const configPath = path.join(currentDir, 'mfconfig.toml');
|
|
128
|
+
if (fs.existsSync(configPath)) {
|
|
129
|
+
return configPath;
|
|
130
|
+
}
|
|
131
|
+
const parentDir = path.dirname(currentDir);
|
|
132
|
+
if (parentDir === currentDir) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
currentDir = parentDir;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function mergeConfig(defaults, parsed) {
|
|
139
|
+
return {
|
|
140
|
+
project: {
|
|
141
|
+
entry: parsed.project?.entry ?? defaults.project.entry,
|
|
142
|
+
dist: parsed.project?.dist ?? defaults.project.dist,
|
|
143
|
+
out: parsed.project?.out ?? defaults.project.out,
|
|
144
|
+
defaultProfile: parsed.project?.default_profile ?? defaults.project.defaultProfile,
|
|
145
|
+
},
|
|
146
|
+
profiles: {
|
|
147
|
+
miku: parsed.profiles?.miku
|
|
148
|
+
? {
|
|
149
|
+
backend: 'miku-daw',
|
|
150
|
+
importStrategy: parsed.profiles.miku.import_strategy ?? 'manual',
|
|
151
|
+
dawExe: parsed.profiles.miku.daw_exe,
|
|
152
|
+
dawArgs: parsed.profiles.miku.daw_args,
|
|
153
|
+
dawProject: parsed.profiles.miku.daw_project,
|
|
154
|
+
vsqxOut: parsed.profiles.miku.vsqx_out ?? defaults.profiles.miku.vsqxOut,
|
|
155
|
+
tempoMidOut: parsed.profiles.miku.tempo_mid_out ?? defaults.profiles.miku.tempoMidOut,
|
|
156
|
+
renderOut: parsed.profiles.miku.render_out ?? defaults.profiles.miku.renderOut,
|
|
157
|
+
}
|
|
158
|
+
: defaults.profiles.miku,
|
|
159
|
+
cli: parsed.profiles?.cli
|
|
160
|
+
? {
|
|
161
|
+
backend: 'headless',
|
|
162
|
+
vocalCmd: parsed.profiles.cli.vocal_cmd,
|
|
163
|
+
midiCmd: parsed.profiles.cli.midi_cmd,
|
|
164
|
+
mixCmd: parsed.profiles.cli.mix_cmd,
|
|
165
|
+
musicxmlOut: parsed.profiles.cli.musicxml_out ?? defaults.profiles.cli.musicxmlOut,
|
|
166
|
+
bandMidOut: parsed.profiles.cli.band_mid_out ?? defaults.profiles.cli.bandMidOut,
|
|
167
|
+
renderOut: parsed.profiles.cli.render_out ?? defaults.profiles.cli.renderOut,
|
|
168
|
+
}
|
|
169
|
+
: defaults.profiles.cli,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export function generateDefaultConfig() {
|
|
174
|
+
return `[project]
|
|
175
|
+
entry = "src/main.mf"
|
|
176
|
+
dist = "dist"
|
|
177
|
+
out = "out"
|
|
178
|
+
default_profile = "cli"
|
|
179
|
+
|
|
180
|
+
[profiles.miku]
|
|
181
|
+
backend = "miku-daw"
|
|
182
|
+
import_strategy = "manual"
|
|
183
|
+
# daw_exe = "reaper"
|
|
184
|
+
# daw_args = ["-renderproject", "{project}"]
|
|
185
|
+
# daw_project = "reaper/song.rpp"
|
|
186
|
+
vsqx_out = "dist/vocal.vsqx"
|
|
187
|
+
tempo_mid_out= "dist/tempo.mid"
|
|
188
|
+
render_out = "out/mix.wav"
|
|
189
|
+
|
|
190
|
+
[profiles.cli]
|
|
191
|
+
backend = "headless"
|
|
192
|
+
# vocal_cmd = ["neutrino-run", "{musicxml}", "{vocal_wav}"]
|
|
193
|
+
# midi_cmd = ["fluidsynth-run", "{mid}", "{band_wav}"]
|
|
194
|
+
# mix_cmd = ["ffmpeg", "-i", "{vocal_wav}", "-i", "{band_wav}", "{mix_wav}"]
|
|
195
|
+
musicxml_out = "dist/vocal.musicxml"
|
|
196
|
+
band_mid_out = "dist/band.mid"
|
|
197
|
+
render_out = "out/mix.wav"
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Position } from './types/token.js';
|
|
2
|
+
export declare class MFError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
position?: Position | undefined;
|
|
5
|
+
filePath?: string | undefined;
|
|
6
|
+
suggestion?: string;
|
|
7
|
+
constructor(code: string, message: string, position?: Position | undefined, filePath?: string | undefined, suggestion?: string);
|
|
8
|
+
toString(): string;
|
|
9
|
+
}
|
|
10
|
+
export declare const ErrorCodes: {
|
|
11
|
+
readonly E001: "ppq not set";
|
|
12
|
+
readonly E010: "tempo at tick=0 not set";
|
|
13
|
+
readonly E011: "timeSig at tick=0 not set";
|
|
14
|
+
readonly E020: "timeSig must be at bar start";
|
|
15
|
+
readonly E050: "Global function called after track started";
|
|
16
|
+
readonly E101: "Dur to tick does not divide evenly";
|
|
17
|
+
readonly E102: "Time sub out of beat tick range";
|
|
18
|
+
readonly E110: "Pitch out of range 0..127";
|
|
19
|
+
readonly E120: "CC controller out of range 0..127";
|
|
20
|
+
readonly E121: "CC/control value out of range 0..127";
|
|
21
|
+
readonly E122: "Pitch bend value out of range -8192..8191";
|
|
22
|
+
readonly E123: "Tempo curve steps must be at least 2";
|
|
23
|
+
readonly E130: "Invalid clef type";
|
|
24
|
+
readonly E131: "Key signature fifths out of range -7..7";
|
|
25
|
+
readonly E132: "Invalid articulation type";
|
|
26
|
+
readonly E133: "Invalid barline style";
|
|
27
|
+
readonly E134: "Invalid vocal style";
|
|
28
|
+
readonly E200: "Vocal note overlap";
|
|
29
|
+
readonly E210: "Vocal lyric missing or empty";
|
|
30
|
+
readonly E300: "Top-level execution in imported module";
|
|
31
|
+
readonly E310: "Proc recursion detected";
|
|
32
|
+
readonly E400: "Undefined symbol";
|
|
33
|
+
readonly E401: "For loop iteration limit exceeded";
|
|
34
|
+
};
|
|
35
|
+
export declare const WarningCodes: {
|
|
36
|
+
readonly W100: "Note duration extremely short";
|
|
37
|
+
readonly W110: "Vocal pitch out of typical range";
|
|
38
|
+
readonly W200: "Too many tempo events";
|
|
39
|
+
};
|
|
40
|
+
export declare const ExitCodes: {
|
|
41
|
+
readonly SUCCESS: 0;
|
|
42
|
+
readonly STATIC_ERROR: 2;
|
|
43
|
+
readonly IO_ERROR: 3;
|
|
44
|
+
readonly EXTERNAL_TOOL_ERROR: 4;
|
|
45
|
+
readonly DEPENDENCY_MISSING: 5;
|
|
46
|
+
};
|
|
47
|
+
export declare function createError(code: keyof typeof ErrorCodes, details?: string, position?: Position, filePath?: string, suggestion?: string): MFError;
|
|
48
|
+
export declare function findSimilarSymbols(name: string, available: string[], maxDistance?: number): string[];
|
|
49
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,OAAQ,SAAQ,KAAK;IAIvB,IAAI,EAAE,MAAM;IAEZ,QAAQ,CAAC,EAAE,QAAQ;IACnB,QAAQ,CAAC,EAAE,MAAM;IANnB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGlB,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,QAAQ,CAAC,EAAE,QAAQ,YAAA,EACnB,QAAQ,CAAC,EAAE,MAAM,YAAA,EACxB,UAAU,CAAC,EAAE,MAAM;IAOrB,QAAQ,IAAI,MAAM;CAanB;AAGD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;CAqCb,CAAC;AAEX,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAGX,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,OAAO,UAAU,EAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,QAAQ,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAST;AAuDD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,WAAW,SAAI,GAAG,MAAM,EAAE,CAc/F"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// Error definitions for MFS language
|
|
2
|
+
export class MFError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
position;
|
|
5
|
+
filePath;
|
|
6
|
+
suggestion;
|
|
7
|
+
constructor(code, message, position, filePath, suggestion) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.position = position;
|
|
11
|
+
this.filePath = filePath;
|
|
12
|
+
this.name = 'MFError';
|
|
13
|
+
this.suggestion = suggestion;
|
|
14
|
+
}
|
|
15
|
+
toString() {
|
|
16
|
+
const loc = this.position
|
|
17
|
+
? `${this.filePath || 'unknown'}:${this.position.line}:${this.position.column}`
|
|
18
|
+
: '';
|
|
19
|
+
let result = `\n error[${this.code}]: ${this.message}`;
|
|
20
|
+
if (loc) {
|
|
21
|
+
result += `\n --> ${loc}`;
|
|
22
|
+
}
|
|
23
|
+
if (this.suggestion) {
|
|
24
|
+
result += `\n help: ${this.suggestion}`;
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Error codes as per spec
|
|
30
|
+
export const ErrorCodes = {
|
|
31
|
+
// General
|
|
32
|
+
E001: 'ppq not set',
|
|
33
|
+
E010: 'tempo at tick=0 not set',
|
|
34
|
+
E011: 'timeSig at tick=0 not set',
|
|
35
|
+
E020: 'timeSig must be at bar start',
|
|
36
|
+
E050: 'Global function called after track started',
|
|
37
|
+
// Time/Duration
|
|
38
|
+
E101: 'Dur to tick does not divide evenly',
|
|
39
|
+
E102: 'Time sub out of beat tick range',
|
|
40
|
+
E110: 'Pitch out of range 0..127',
|
|
41
|
+
// MIDI Control
|
|
42
|
+
E120: 'CC controller out of range 0..127',
|
|
43
|
+
E121: 'CC/control value out of range 0..127',
|
|
44
|
+
E122: 'Pitch bend value out of range -8192..8191',
|
|
45
|
+
E123: 'Tempo curve steps must be at least 2',
|
|
46
|
+
// Notation
|
|
47
|
+
E130: 'Invalid clef type',
|
|
48
|
+
E131: 'Key signature fifths out of range -7..7',
|
|
49
|
+
E132: 'Invalid articulation type',
|
|
50
|
+
E133: 'Invalid barline style',
|
|
51
|
+
E134: 'Invalid vocal style',
|
|
52
|
+
// Vocal
|
|
53
|
+
E200: 'Vocal note overlap',
|
|
54
|
+
E210: 'Vocal lyric missing or empty',
|
|
55
|
+
// Module
|
|
56
|
+
E300: 'Top-level execution in imported module',
|
|
57
|
+
E310: 'Proc recursion detected',
|
|
58
|
+
// Symbol/Syntax
|
|
59
|
+
E400: 'Undefined symbol',
|
|
60
|
+
E401: 'For loop iteration limit exceeded',
|
|
61
|
+
};
|
|
62
|
+
export const WarningCodes = {
|
|
63
|
+
W100: 'Note duration extremely short',
|
|
64
|
+
W110: 'Vocal pitch out of typical range',
|
|
65
|
+
W200: 'Too many tempo events',
|
|
66
|
+
};
|
|
67
|
+
// Exit codes as per spec
|
|
68
|
+
export const ExitCodes = {
|
|
69
|
+
SUCCESS: 0,
|
|
70
|
+
STATIC_ERROR: 2,
|
|
71
|
+
IO_ERROR: 3,
|
|
72
|
+
EXTERNAL_TOOL_ERROR: 4,
|
|
73
|
+
DEPENDENCY_MISSING: 5,
|
|
74
|
+
};
|
|
75
|
+
export function createError(code, details, position, filePath, suggestion) {
|
|
76
|
+
const message = details
|
|
77
|
+
? `${ErrorCodes[code]}: ${details}`
|
|
78
|
+
: ErrorCodes[code];
|
|
79
|
+
// Add default suggestions for common errors
|
|
80
|
+
const defaultSuggestion = suggestion ?? getDefaultSuggestion(code, details);
|
|
81
|
+
return new MFError(code, message, position, filePath, defaultSuggestion);
|
|
82
|
+
}
|
|
83
|
+
function getDefaultSuggestion(code, details) {
|
|
84
|
+
switch (code) {
|
|
85
|
+
case 'E001':
|
|
86
|
+
return 'Add ppq(480) at the start of main()';
|
|
87
|
+
case 'E010':
|
|
88
|
+
return 'Add tempo(120) at the start of main()';
|
|
89
|
+
case 'E011':
|
|
90
|
+
return 'Add timeSig(4, 4) at the start of main()';
|
|
91
|
+
case 'E020':
|
|
92
|
+
return 'Time signature changes must occur at the start of a bar';
|
|
93
|
+
case 'E050':
|
|
94
|
+
return 'Move global functions (ppq, tempo, timeSig, title) before any track() blocks';
|
|
95
|
+
case 'E110':
|
|
96
|
+
return 'Valid MIDI pitch range is 0-127 (C-1 to G9). Try using a different octave.';
|
|
97
|
+
case 'E120':
|
|
98
|
+
return 'MIDI CC controller numbers must be between 0 and 127';
|
|
99
|
+
case 'E121':
|
|
100
|
+
return 'MIDI CC/control values must be between 0 and 127';
|
|
101
|
+
case 'E122':
|
|
102
|
+
return 'Pitch bend values must be between -8192 (full down) and 8191 (full up). 0 is center.';
|
|
103
|
+
case 'E123':
|
|
104
|
+
return 'tempoCurve() needs at least 2 steps to interpolate between tempos';
|
|
105
|
+
case 'E130':
|
|
106
|
+
return 'Valid clefs: treble, bass, alto, tenor, percussion, tab, treble8va, treble8vb, bass8va, bass8vb';
|
|
107
|
+
case 'E131':
|
|
108
|
+
return 'Key signature fifths range from -7 (7 flats) to 7 (7 sharps). 0 = C major/A minor';
|
|
109
|
+
case 'E132':
|
|
110
|
+
return 'Valid articulations: staccato, legato, accent, tenuto, marcato, staccatissimo, fermata, breath, caesura';
|
|
111
|
+
case 'E133':
|
|
112
|
+
return 'Valid barline styles: single, double, final, repeat-start, repeat-end, repeat-both, dashed, tick, short, none';
|
|
113
|
+
case 'E134':
|
|
114
|
+
return 'Valid vocal styles: soft, normal, power, falsetto, whisper, breathy, belt, head, chest';
|
|
115
|
+
case 'E200':
|
|
116
|
+
return 'Vocal notes cannot overlap. Use rest() or adjust timing with at()';
|
|
117
|
+
case 'E210':
|
|
118
|
+
return 'Vocal note() requires a lyric: note(C4, 1/4, "あ")';
|
|
119
|
+
case 'E300':
|
|
120
|
+
return 'Imported modules should only contain proc/const definitions, not executable code';
|
|
121
|
+
case 'E310':
|
|
122
|
+
return 'Procedures cannot call themselves directly or indirectly';
|
|
123
|
+
case 'E400':
|
|
124
|
+
if (details?.includes('main')) {
|
|
125
|
+
return 'Add "export proc main() { ... }" to define the entry point';
|
|
126
|
+
}
|
|
127
|
+
return undefined; // Will use symbol suggestion instead
|
|
128
|
+
case 'E401':
|
|
129
|
+
return 'For loop range bounds must be const values, not let variables';
|
|
130
|
+
default:
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Find similar symbol names using Levenshtein distance
|
|
135
|
+
export function findSimilarSymbols(name, available, maxDistance = 3) {
|
|
136
|
+
const results = [];
|
|
137
|
+
for (const sym of available) {
|
|
138
|
+
const dist = levenshteinDistance(name.toLowerCase(), sym.toLowerCase());
|
|
139
|
+
if (dist <= maxDistance) {
|
|
140
|
+
results.push({ name: sym, distance: dist });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return results
|
|
144
|
+
.sort((a, b) => a.distance - b.distance)
|
|
145
|
+
.slice(0, 3)
|
|
146
|
+
.map((r) => r.name);
|
|
147
|
+
}
|
|
148
|
+
function levenshteinDistance(a, b) {
|
|
149
|
+
const matrix = [];
|
|
150
|
+
for (let i = 0; i <= b.length; i++) {
|
|
151
|
+
matrix[i] = [i];
|
|
152
|
+
}
|
|
153
|
+
for (let j = 0; j <= a.length; j++) {
|
|
154
|
+
matrix[0][j] = j;
|
|
155
|
+
}
|
|
156
|
+
for (let i = 1; i <= b.length; i++) {
|
|
157
|
+
for (let j = 1; j <= a.length; j++) {
|
|
158
|
+
if (b[i - 1] === a[j - 1]) {
|
|
159
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return matrix[b.length][a.length];
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Program } from '../types/ast.js';
|
|
2
|
+
export declare class Formatter {
|
|
3
|
+
private indent;
|
|
4
|
+
private output;
|
|
5
|
+
format(program: Program): string;
|
|
6
|
+
private formatStatement;
|
|
7
|
+
private formatExport;
|
|
8
|
+
private formatProc;
|
|
9
|
+
private formatExpr;
|
|
10
|
+
private escapeString;
|
|
11
|
+
private line;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter/formatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAIR,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAE9B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAsChC,OAAO,CAAC,eAAe;IAsHvB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;IA2FlB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,IAAI;CAIb"}
|