musicxml-io 0.12.0 → 0.12.2

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 (98) hide show
  1. package/README.md +96 -8
  2. package/dist/abc-HXITSXCS.js +9 -0
  3. package/dist/abc-IAD53SFI.mjs +11 -0
  4. package/dist/abc-MTGVOYKS.js +11 -0
  5. package/dist/abc-R7DIJSHG.mjs +9 -0
  6. package/dist/abc.d.mts +67 -0
  7. package/dist/abc.d.ts +67 -0
  8. package/dist/abc.js +17 -0
  9. package/dist/abc.mjs +17 -0
  10. package/dist/accessors/index.d.mts +1 -1
  11. package/dist/accessors/index.d.ts +1 -1
  12. package/dist/browser.d.mts +11 -187
  13. package/dist/browser.d.ts +11 -187
  14. package/dist/browser.js +30 -6
  15. package/dist/browser.mjs +96 -72
  16. package/dist/chunk-2EH2MGBY.js +1799 -0
  17. package/dist/chunk-33IQXDOH.js +1 -0
  18. package/dist/chunk-5EK7K5X3.js +29 -0
  19. package/dist/chunk-5VF442RA.mjs +29 -0
  20. package/dist/chunk-626TXMVP.js +706 -0
  21. package/dist/chunk-63UT3IEY.mjs +2788 -0
  22. package/dist/chunk-6EKVRPFF.js +407 -0
  23. package/dist/chunk-776XPK66.js +45 -0
  24. package/dist/chunk-7D4MLQKO.js +69 -0
  25. package/dist/chunk-A2CGW2UF.js +25 -0
  26. package/dist/chunk-AOSK4RGV.mjs +45 -0
  27. package/dist/{chunk-FQ3NEYIV.js → chunk-ASPCIBWD.js} +127 -1249
  28. package/dist/chunk-BDHPMB7Q.mjs +61 -0
  29. package/dist/chunk-BHHOS2E6.mjs +407 -0
  30. package/dist/chunk-F2UCOAO6.mjs +155 -0
  31. package/dist/chunk-HP4DAUGT.js +2788 -0
  32. package/dist/chunk-JF5TM534.js +1065 -0
  33. package/dist/chunk-K6DSQPVF.mjs +706 -0
  34. package/dist/chunk-KJK2IGNN.mjs +0 -0
  35. package/dist/chunk-KYGLANYG.mjs +2354 -0
  36. package/dist/chunk-LFQXT7PV.mjs +69 -0
  37. package/dist/chunk-LS5SHP75.js +155 -0
  38. package/dist/chunk-MMIZQMIO.mjs +25 -0
  39. package/dist/chunk-NIUEAHPN.js +2354 -0
  40. package/dist/{chunk-EWLB5X64.js → chunk-PMPROVJW.js} +66 -770
  41. package/dist/chunk-QFYOH4DY.mjs +0 -0
  42. package/dist/chunk-QKUNJEVW.mjs +1401 -0
  43. package/dist/chunk-SBT2RMUW.mjs +1065 -0
  44. package/dist/chunk-TCXDBRRT.mjs +1799 -0
  45. package/dist/chunk-WNQIUYWY.js +61 -0
  46. package/dist/{chunk-I4X4GRMP.mjs → chunk-WS5LSW3S.mjs} +13 -1135
  47. package/dist/chunk-YKMNCYOD.js +1 -0
  48. package/dist/{chunk-UMEH3ENQ.mjs → chunk-ZRKJKEP7.mjs} +0 -704
  49. package/dist/chunk-ZSEJQPBO.js +1401 -0
  50. package/dist/core.d.mts +33 -0
  51. package/dist/core.d.ts +33 -0
  52. package/dist/core.js +524 -0
  53. package/dist/core.mjs +524 -0
  54. package/dist/file.d.mts +37 -0
  55. package/dist/file.d.ts +37 -0
  56. package/dist/file.js +14 -0
  57. package/dist/file.mjs +14 -0
  58. package/dist/index-C9lLZwol.d.mts +185 -0
  59. package/dist/index-DNA970t1.d.ts +185 -0
  60. package/dist/index.d.mts +12 -38
  61. package/dist/index.d.ts +12 -38
  62. package/dist/index.js +34 -49
  63. package/dist/index.mjs +101 -116
  64. package/dist/midi.d.mts +54 -0
  65. package/dist/midi.d.ts +54 -0
  66. package/dist/midi.js +10 -0
  67. package/dist/midi.mjs +10 -0
  68. package/dist/musicxml-DWPClEqa.d.ts +25 -0
  69. package/dist/musicxml-DzuFr2c3.d.mts +25 -0
  70. package/dist/musicxml-compressed-7NUEGLSF.mjs +8 -0
  71. package/dist/musicxml-compressed-7RL6QRF7.js +12 -0
  72. package/dist/musicxml-compressed-WPEIBOZ3.js +8 -0
  73. package/dist/musicxml-compressed-ZHZYFJ7H.mjs +12 -0
  74. package/dist/musicxml-compressed.d.mts +33 -0
  75. package/dist/musicxml-compressed.d.ts +33 -0
  76. package/dist/musicxml-compressed.js +18 -0
  77. package/dist/musicxml-compressed.mjs +18 -0
  78. package/dist/musicxml.d.mts +8 -0
  79. package/dist/musicxml.d.ts +8 -0
  80. package/dist/musicxml.js +14 -0
  81. package/dist/musicxml.mjs +14 -0
  82. package/dist/operations/index.d.mts +1234 -2
  83. package/dist/operations/index.d.ts +1234 -2
  84. package/dist/operations/index.js +7 -3
  85. package/dist/operations/index.mjs +6 -2
  86. package/dist/playback-timeline-CVRHsikj.d.mts +129 -0
  87. package/dist/playback-timeline-CmWA8YDy.d.ts +129 -0
  88. package/dist/query/index.d.mts +3 -128
  89. package/dist/query/index.d.ts +3 -128
  90. package/dist/query/index.js +4 -2
  91. package/dist/query/index.mjs +7 -5
  92. package/dist/{types-Cy0veafI.d.mts → types-B-RGHY0c.d.mts} +1 -1
  93. package/dist/{types-Cy0veafI.d.ts → types-B-RGHY0c.d.ts} +1 -1
  94. package/package.json +36 -2
  95. package/dist/chunk-T2USSS5E.mjs +0 -8939
  96. package/dist/chunk-UT7LQW6V.js +0 -8939
  97. package/dist/index-CbUtBHLD.d.ts +0 -1415
  98. package/dist/index-CuMPBK7U.d.mts +0 -1415
package/README.md CHANGED
@@ -76,6 +76,8 @@ const output = serialize(transposed);
76
76
 
77
77
  ### ABC Notation
78
78
 
79
+ For MusicXML-first applications, see [Bundle size and optional formats](#bundle-size-and-optional-formats).
80
+
79
81
  ```typescript
80
82
  import { parseAbc, serializeAbc } from 'musicxml-io';
81
83
 
@@ -95,11 +97,95 @@ import { parseAbcTunes, serializeAbcTunes } from 'musicxml-io';
95
97
  const tunes = parseAbcTunes(abcString); // Score[]
96
98
  const book = serializeAbcTunes(tunes);
97
99
 
98
- // Auto-detect format (MusicXML, .mxl, or ABC)
100
+ // Auto-detect MusicXML or .mxl (ABC uses parseAbc)
99
101
  import { parseAuto } from 'musicxml-io';
100
102
  const score2 = parseAuto(input);
101
103
  ```
102
104
 
105
+ ### Bundle size and optional formats
106
+
107
+ The existing `musicxml-io` and `musicxml-io/browser` exports remain compatible.
108
+ Unused ABC initialization can now be tree-shaken away. For applications that
109
+ load optional formats dynamically, use the format-specific entry points:
110
+
111
+ | Import | Contents |
112
+ |--------|----------|
113
+ | `musicxml-io/core` | MusicXML/XML/MXL, query, operations, accessors, validation, IDs and their types; no ABC, MIDI or file I/O |
114
+ | `musicxml-io/musicxml` | `parse`, `serialize`, `serializeUnchecked`, serialization options and score types; no ZIP dependency |
115
+ | `musicxml-io/musicxml-compressed` | `parseAuto`, `parseCompressed`, `isCompressed`, `serializeCompressed` |
116
+ | `musicxml-io/abc` | `parseAbc`, `parseAbcTunes`, `serializeAbc`, `serializeAbcTunes`, `AbcSerializeOptions` |
117
+ | `musicxml-io/midi` | `exportMidi`, `exportMidiWithTimingMap` and MIDI export types |
118
+ | `musicxml-io/file` | Node.js `parseFile`, `serializeToFile`, `decodeBuffer`; optional codecs load on demand |
119
+
120
+ The existing `/query`, `/operations` and `/accessors` entry points remain available.
121
+ All entry points support ESM and CommonJS, with TypeScript declarations.
122
+
123
+ ```typescript
124
+ import { parseAuto, serialize, generateId } from 'musicxml-io/core';
125
+ import type { Score } from 'musicxml-io/core';
126
+
127
+ // Normal MusicXML / MXL loading remains synchronous.
128
+ const score = parseAuto(xmlOrMxl);
129
+
130
+ // Call only when the user opens an ABC file.
131
+ async function openAbc(text: string): Promise<Score> {
132
+ const { parseAbc } = await import('musicxml-io/abc');
133
+ return parseAbc(text);
134
+ }
135
+
136
+ async function saveMidi(score: Score): Promise<Uint8Array> {
137
+ const { exportMidi } = await import('musicxml-io/midi');
138
+ return exportMidi(score);
139
+ }
140
+ ```
141
+
142
+ For reliable code splitting, migrate **all runtime imports** in the relevant
143
+ application graph from the full root/browser entry to `/core` or narrower
144
+ entry points. A full entry also re-exports ABC and MIDI; some bundlers can
145
+ hoist those into an initially loaded shared chunk when a dynamic import of
146
+ the same format exists elsewhere. Type-only root imports do not add runtime code.
147
+ Dynamic imports need code-splitting support in the consuming bundler.
148
+
149
+ For `musicxml-layout`, its MusicXML re-exports and other runtime imports can use
150
+ `/core` (or `/musicxml`, `/query`, `/accessors` as appropriate). For Octava,
151
+ `src/data/musicxml-importer.ts` currently imports `parseAbc` eagerly. Load `/abc`
152
+ only on the ABC path, and finish the asynchronous parsing **before** entering
153
+ the synchronous Yjs transaction in `ScoreDataManager.importFromMusicXML`.
154
+ Both projects need the version containing these entry points installed first.
155
+
156
+ For export paths that do not request validation, use `serializeUnchecked` to
157
+ keep the validator out of the bundle. Its output is identical to `serialize`
158
+ with validation disabled (the default), and it accepts `version` and `indent`:
159
+
160
+ ```typescript
161
+ import { serializeUnchecked as serialize } from 'musicxml-io/musicxml';
162
+
163
+ const xml = serialize(score);
164
+ ```
165
+
166
+ For example, Octava's `src/data/musicxml-exporter.ts` can use this import after
167
+ upgrading the dependency. Keep using `serialize` for callers that pass
168
+ `validate`, `validateOptions`, `throwOnValidationError` or `onValidation`.
169
+ The existing `serialize` API and its validation behavior remain unchanged.
170
+
171
+ `npm run check:bundle` builds the package, measures minified/gzipped consumer
172
+ bundles, checks that ABC stays out of initial MusicXML bundles (including a
173
+ lazy ABC consumer), checks that unchecked export excludes validation, and
174
+ smoke-tests the published ESM and CommonJS exports.
175
+ `npm run bench:loading` measures XML/MXL parsing and ID generation; the MXL
176
+ benchmark includes an embedded asset to verify that unused files are not inflated.
177
+ `npm run bench:io` measures XML import/export at several sizes and peak import
178
+ RSS in a separate process. The largest case repeats ActorPrelude's measures
179
+ eight times (about 10 MB). To compare against a saved previous build, run
180
+ `npm run bench:io -- --baseline=/absolute/path/to/previous/dist`.
181
+ Timings are medians of nine runs, with baseline/current execution order
182
+ alternated. No performance thresholds are imposed on shared CI machines.
183
+
184
+ The importer converts completed measures immediately and releases their XML
185
+ subtrees. The exporter joins lines per measure and avoids temporary notation
186
+ groups on the common single-container path, reducing allocation and GC for
187
+ large scores while preserving the existing XML formatting.
188
+
103
189
  `parseAbc` returns the first tune of a multi-tune file; use `parseAbcTunes`
104
190
  to get them all.
105
191
 
@@ -476,19 +562,21 @@ import { isRest, getPartName } from 'musicxml-io/accessors';
476
562
  ```
477
563
 
478
564
  The package declares `"sideEffects": false`, so bundlers can drop everything
479
- you don't import — pulling in only `parse` costs roughly 51 KB minified
480
- (~14 KB gzip).
565
+ you don't import — pulling in only `parse` costs roughly 48 KB minified
566
+ (~13 KB gzip).
481
567
 
482
568
  Approximate cost of common imports (minified / gzipped, measured with
483
569
  esbuild against the published ESM build):
484
570
 
485
571
  | Import | Size |
486
572
  |--------|------|
487
- | `parse` (.xml only) | ~51 KB / ~14 KB |
488
- | `parseAuto` (.xml + .mxl, adds fflate's unzip) | ~57 KB / ~17 KB |
489
- | `serialize` (includes the validator behind `validate: true`) | ~62 KB / ~15 KB |
490
- | `parse` + `serialize` | ~109 KB / ~28 KB |
491
- | everything | ~316 KB / ~78 KB |
573
+ | `parse` (.xml only) | ~48 KB / ~13 KB |
574
+ | `parseAuto` (.xml + .mxl, adds fflate's unzip) | ~54 KB / ~16 KB |
575
+ | `serialize` (includes the validator behind `validate: true`) | ~58 KB / ~14 KB |
576
+ | `serializeUnchecked` (no validator) | ~45 KB / ~10 KB |
577
+ | `parse` + `serialize` | ~106 KB / ~27 KB |
578
+ | `parse` + `serializeUnchecked` | ~93 KB / ~23 KB |
579
+ | everything (browser entry) | ~324 KB / ~81 KB |
492
580
 
493
581
  The ABC notation codecs (`parseAbc`, `serializeAbc`), MIDI export, query
494
582
  helpers, operations, and the validator are all separate modules — they only
@@ -0,0 +1,9 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+ var _chunkZSEJQPBOjs = require('./chunk-ZSEJQPBO.js');
5
+ require('./chunk-LS5SHP75.js');
6
+
7
+
8
+
9
+ exports.serializeAbc = _chunkZSEJQPBOjs.serializeAbc; exports.serializeAbcTunes = _chunkZSEJQPBOjs.serializeAbcTunes;
@@ -0,0 +1,11 @@
1
+ import {
2
+ parseAbc,
3
+ parseAbcTunes
4
+ } from "./chunk-KYGLANYG.mjs";
5
+ import "./chunk-F2UCOAO6.mjs";
6
+ import "./chunk-AOSK4RGV.mjs";
7
+ import "./chunk-5VF442RA.mjs";
8
+ export {
9
+ parseAbc,
10
+ parseAbcTunes
11
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+ var _chunkNIUEAHPNjs = require('./chunk-NIUEAHPN.js');
5
+ require('./chunk-LS5SHP75.js');
6
+ require('./chunk-776XPK66.js');
7
+ require('./chunk-5EK7K5X3.js');
8
+
9
+
10
+
11
+ exports.parseAbc = _chunkNIUEAHPNjs.parseAbc; exports.parseAbcTunes = _chunkNIUEAHPNjs.parseAbcTunes;
@@ -0,0 +1,9 @@
1
+ import {
2
+ serializeAbc,
3
+ serializeAbcTunes
4
+ } from "./chunk-QKUNJEVW.mjs";
5
+ import "./chunk-F2UCOAO6.mjs";
6
+ export {
7
+ serializeAbc,
8
+ serializeAbcTunes
9
+ };
package/dist/abc.d.mts ADDED
@@ -0,0 +1,67 @@
1
+ import { S as Score } from './types-B-RGHY0c.mjs';
2
+
3
+ /**
4
+ * ABC Notation Parser
5
+ * Parses ABC notation format into the Score internal model.
6
+ *
7
+ * Supports ABC standard v2.1 core features:
8
+ * - Header fields (X, T, C, M, L, Q, K, V, P, U, w, W, and `+:` continuations)
9
+ * - Notes with pitch, duration, accidentals (including microtones), octaves
10
+ * - Rests (z, Z, multi-measure Zn), invisible rests (x, Xn) and spacers (y)
11
+ * - Bar lines (|, ||, |], [|, |:, :|, ::, [|], .|)
12
+ * - Repeats and volta endings, including lists and ranges ([1,3, [1-3)
13
+ * - Chords (simultaneous notes: [CEG]) with rests and per-note durations
14
+ * - Chord symbols ("Am", "G7") and text annotations ("^above", "_below", ...)
15
+ * - Ties (-), slurs ((...)) and dotted slurs (.(...))
16
+ * - Grace notes ({...}) and acciaccaturas ({/...})
17
+ * - Tuplets ((3..., (p:q:r...)
18
+ * - Decorations: shorthand (. ~ H L M O P S T u v), !name! and legacy +name+
19
+ * - Lyrics (w: field, multiple verses) and symbol lines (s:)
20
+ * - Multi-voice (V: field) and multi-tune files (repeated X: fields)
21
+ */
22
+
23
+ /**
24
+ * Parse every tune in an ABC file.
25
+ *
26
+ * ABC files may hold any number of tunes, each introduced by an `X:` field.
27
+ * {@link parseAbc} returns only the first; use this to get them all.
28
+ */
29
+ declare function parseAbcTunes(abcString: string): Score[];
30
+ /**
31
+ * Parse an ABC notation string into a Score object.
32
+ *
33
+ * When the input holds several tunes, only the first is returned — use
34
+ * {@link parseAbcTunes} to parse them all.
35
+ */
36
+ declare function parseAbc(abcString: string): Score;
37
+
38
+ /**
39
+ * ABC Notation Serializer
40
+ * Converts Score internal model to ABC notation format string.
41
+ */
42
+
43
+ interface AbcSerializeOptions {
44
+ /** Reference number (X: field). Default: 1 */
45
+ referenceNumber?: number;
46
+ /** Maximum notes per line before wrapping. Default: no limit */
47
+ notesPerLine?: number;
48
+ /** Include chord symbols. Default: true */
49
+ includeChordSymbols?: boolean;
50
+ /** Include dynamics. Default: true */
51
+ includeDynamics?: boolean;
52
+ /** Include lyrics. Default: true */
53
+ includeLyrics?: boolean;
54
+ }
55
+ /**
56
+ * Serialize several Scores into a single multi-tune ABC file.
57
+ *
58
+ * Counterpart to `parseAbcTunes`: each Score becomes one tune, separated by a
59
+ * blank line as the ABC standard requires.
60
+ */
61
+ declare function serializeAbcTunes(scores: Score[], options?: AbcSerializeOptions): string;
62
+ /**
63
+ * Serialize a Score object to ABC notation format string.
64
+ */
65
+ declare function serializeAbc(score: Score, options?: AbcSerializeOptions): string;
66
+
67
+ export { type AbcSerializeOptions, Score, parseAbc, parseAbcTunes, serializeAbc, serializeAbcTunes };
package/dist/abc.d.ts ADDED
@@ -0,0 +1,67 @@
1
+ import { S as Score } from './types-B-RGHY0c.js';
2
+
3
+ /**
4
+ * ABC Notation Parser
5
+ * Parses ABC notation format into the Score internal model.
6
+ *
7
+ * Supports ABC standard v2.1 core features:
8
+ * - Header fields (X, T, C, M, L, Q, K, V, P, U, w, W, and `+:` continuations)
9
+ * - Notes with pitch, duration, accidentals (including microtones), octaves
10
+ * - Rests (z, Z, multi-measure Zn), invisible rests (x, Xn) and spacers (y)
11
+ * - Bar lines (|, ||, |], [|, |:, :|, ::, [|], .|)
12
+ * - Repeats and volta endings, including lists and ranges ([1,3, [1-3)
13
+ * - Chords (simultaneous notes: [CEG]) with rests and per-note durations
14
+ * - Chord symbols ("Am", "G7") and text annotations ("^above", "_below", ...)
15
+ * - Ties (-), slurs ((...)) and dotted slurs (.(...))
16
+ * - Grace notes ({...}) and acciaccaturas ({/...})
17
+ * - Tuplets ((3..., (p:q:r...)
18
+ * - Decorations: shorthand (. ~ H L M O P S T u v), !name! and legacy +name+
19
+ * - Lyrics (w: field, multiple verses) and symbol lines (s:)
20
+ * - Multi-voice (V: field) and multi-tune files (repeated X: fields)
21
+ */
22
+
23
+ /**
24
+ * Parse every tune in an ABC file.
25
+ *
26
+ * ABC files may hold any number of tunes, each introduced by an `X:` field.
27
+ * {@link parseAbc} returns only the first; use this to get them all.
28
+ */
29
+ declare function parseAbcTunes(abcString: string): Score[];
30
+ /**
31
+ * Parse an ABC notation string into a Score object.
32
+ *
33
+ * When the input holds several tunes, only the first is returned — use
34
+ * {@link parseAbcTunes} to parse them all.
35
+ */
36
+ declare function parseAbc(abcString: string): Score;
37
+
38
+ /**
39
+ * ABC Notation Serializer
40
+ * Converts Score internal model to ABC notation format string.
41
+ */
42
+
43
+ interface AbcSerializeOptions {
44
+ /** Reference number (X: field). Default: 1 */
45
+ referenceNumber?: number;
46
+ /** Maximum notes per line before wrapping. Default: no limit */
47
+ notesPerLine?: number;
48
+ /** Include chord symbols. Default: true */
49
+ includeChordSymbols?: boolean;
50
+ /** Include dynamics. Default: true */
51
+ includeDynamics?: boolean;
52
+ /** Include lyrics. Default: true */
53
+ includeLyrics?: boolean;
54
+ }
55
+ /**
56
+ * Serialize several Scores into a single multi-tune ABC file.
57
+ *
58
+ * Counterpart to `parseAbcTunes`: each Score becomes one tune, separated by a
59
+ * blank line as the ABC standard requires.
60
+ */
61
+ declare function serializeAbcTunes(scores: Score[], options?: AbcSerializeOptions): string;
62
+ /**
63
+ * Serialize a Score object to ABC notation format string.
64
+ */
65
+ declare function serializeAbc(score: Score, options?: AbcSerializeOptions): string;
66
+
67
+ export { type AbcSerializeOptions, Score, parseAbc, parseAbcTunes, serializeAbc, serializeAbcTunes };
package/dist/abc.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+ var _chunkNIUEAHPNjs = require('./chunk-NIUEAHPN.js');
5
+
6
+
7
+
8
+ var _chunkZSEJQPBOjs = require('./chunk-ZSEJQPBO.js');
9
+ require('./chunk-LS5SHP75.js');
10
+ require('./chunk-776XPK66.js');
11
+ require('./chunk-5EK7K5X3.js');
12
+
13
+
14
+
15
+
16
+
17
+ exports.parseAbc = _chunkNIUEAHPNjs.parseAbc; exports.parseAbcTunes = _chunkNIUEAHPNjs.parseAbcTunes; exports.serializeAbc = _chunkZSEJQPBOjs.serializeAbc; exports.serializeAbcTunes = _chunkZSEJQPBOjs.serializeAbcTunes;
package/dist/abc.mjs ADDED
@@ -0,0 +1,17 @@
1
+ import {
2
+ parseAbc,
3
+ parseAbcTunes
4
+ } from "./chunk-KYGLANYG.mjs";
5
+ import {
6
+ serializeAbc,
7
+ serializeAbcTunes
8
+ } from "./chunk-QKUNJEVW.mjs";
9
+ import "./chunk-F2UCOAO6.mjs";
10
+ import "./chunk-AOSK4RGV.mjs";
11
+ import "./chunk-5VF442RA.mjs";
12
+ export {
13
+ parseAbc,
14
+ parseAbcTunes,
15
+ serializeAbc,
16
+ serializeAbcTunes
17
+ };
@@ -1,4 +1,4 @@
1
- import { o as DirectionType, D as DirectionEntry, N as NoteEntry, c as PartListEntry, P as PartInfo, S as Score } from '../types-Cy0veafI.mjs';
1
+ import { o as DirectionType, D as DirectionEntry, N as NoteEntry, c as PartListEntry, P as PartInfo, S as Score } from '../types-B-RGHY0c.mjs';
2
2
 
3
3
  /**
4
4
  * Entry-level accessors for DirectionEntry, NoteEntry, and PartInfo
@@ -1,4 +1,4 @@
1
- import { o as DirectionType, D as DirectionEntry, N as NoteEntry, c as PartListEntry, P as PartInfo, S as Score } from '../types-Cy0veafI.js';
1
+ import { o as DirectionType, D as DirectionEntry, N as NoteEntry, c as PartListEntry, P as PartInfo, S as Score } from '../types-B-RGHY0c.js';
2
2
 
3
3
  /**
4
4
  * Entry-level accessors for DirectionEntry, NoteEntry, and PartInfo
@@ -1,188 +1,12 @@
1
- import { S as Score, g as Pitch, M as Measure } from './types-Cy0veafI.mjs';
2
- export { A as Accidental, i as AccidentalInfo, j as AccidentalMarkInfo, a2 as AdjacentNotes, ag as AssembledLyrics, B as BackupEntry, y as Barline, ah as BarlineWithContext, ac as BeamGroup, m as BeamInfo, G as Chord, w as Clef, am as ClefChangeInfo, C as Color, Q as Credit, U as CreditImage, R as CreditWords, O as Defaults, D as DirectionEntry, a3 as DirectionKind, o as DirectionType, Z as DirectionWithContext, u as DisplayText, a4 as DynamicWithContext, p as DynamicsValue, aj as EndingInfo, Y as EntryWithContext, s as FiguredBassEntry, F as ForwardEntry, H as HarmonyEntry, r as HarmonyFrame, ae as HarmonyWithContext, ak as KeyChangeInfo, K as KeySignature, L as Lyric, q as LyricTextElement, af as LyricWithContext, e as MeasureAttributes, f as MeasureEntry, t as MeasureStyle, n as Notation, ad as NotationType, N as NoteEntry, I as NoteIteratorItem, h as NoteType, X as NoteWithContext, E as NoteWithPosition, k as NoteheadInfo, a8 as OctaveShiftWithContext, d as Part, b as PartGroup, P as PartInfo, c as PartListEntry, a6 as PedalWithContext, $ as PositionQueryOptions, J as Print, ai as RepeatInfo, a as ScoreMetadata, aa as SlurSpan, z as StaffGroup, _ as StaffRange, l as StemInfo, an as StructuralChanges, a5 as TempoWithContext, T as TieInfo, a9 as TiedNoteGroup, al as TimeChangeInfo, v as TimeSignature, x as Transpose, ab as TupletGroup, a0 as VerticalSlice, V as VoiceGroup, a1 as VoiceLine, W as VoiceToStaffMap, a7 as WedgeWithContext } from './types-Cy0veafI.mjs';
3
- import { cP as ValidateOptions, cL as ValidationResult } from './index-CuMPBK7U.mjs';
4
- export { aS as ALL_COLOR_TARGETS, bb as AddArticulationOptions, bk as AddBeamOptions, c9 as AddBowingOptions, ci as AddBreathMarkOptions, cl as AddCaesuraOptions, aX as AddChordOptions, c3 as AddChordSymbolOptions, bT as AddCodaOptions, bd as AddDynamicsOptions, bN as AddEndingOptions, bA as AddFermataOptions, c6 as AddFingeringOptions, bV as AddGraceNoteOptions, c0 as AddHarmonyOptions, bY as AddLyricOptions, bU as AddNavigationOptions, ce as AddOctaveShiftOptions, bC as AddOrnamentOptions, b3 as AddPartOptions, bE as AddPedalOptions, bI as AddRehearsalMarkOptions, bJ as AddRepeatBarlineOptions, bL as AddRepeatOptions, bS as AddSegnoOptions, b9 as AddSlurOptions, cb as AddStringNumberOptions, bv as AddTempoOptions, bG as AddTextDirectionOptions, bH as AddTextOptions, b7 as AddTieOptions, b2 as AddVoiceOptions, by as AddWedgeOptions, bm as AutoBeamOptions, bR as BarStyle, c8 as BowingType, ch as BreathMarkValue, ck as CaesuraValue, bP as ChangeBarlineOptions, bh as ChangeClefOptions, aY as ChangeNoteDurationOptions, cn as ColorTarget, bX as ConvertToGraceOptions, bs as CopyNotesMultiMeasureOptions, bp as CopyNotesOptions, bi as CreateTupletOptions, br as CutNotesOptions, b4 as DuplicatePartOptions, b$ as HarmonyKind, bg as InsertClefChangeOptions, aV as InsertNoteOptions, cR as LocalValidateOptions, b1 as LowerAccidentalOptions, cQ as MeasureValidationContext, bf as ModifyDynamicsOptions, bx as ModifyTempoOptions, b6 as MoveNoteToStaffOptions, bt as MultiMeasureSelection, bo as NoteSelection, cd as OctaveShiftType, aU as OperationErrorCode, aT as OperationResult, bu as PasteNotesMultiMeasureOptions, bq as PasteNotesOptions, b0 as RaiseAccidentalOptions, bc as RemoveArticulationOptions, bl as RemoveBeamOptions, ca as RemoveBowingOptions, cj as RemoveBreathMarkOptions, cm as RemoveCaesuraOptions, c4 as RemoveChordSymbolOptions, be as RemoveDynamicsOptions, bO as RemoveEndingOptions, bB as RemoveFermataOptions, c7 as RemoveFingeringOptions, bW as RemoveGraceNoteOptions, c1 as RemoveHarmonyOptions, bZ as RemoveLyricOptions, aW as RemoveNoteOptions, cg as RemoveOctaveShiftOptions, bD as RemoveOrnamentOptions, bF as RemovePedalOptions, bK as RemoveRepeatBarlineOptions, bM as RemoveRepeatOptions, ba as RemoveSlurOptions, cc as RemoveStringNumberOptions, bw as RemoveTempoOptions, b8 as RemoveTieOptions, bj as RemoveTupletOptions, bz as RemoveWedgeOptions, bQ as SetBarlineOptions, bn as SetBeamingOptions, co as SetColorOptions, a_ as SetNotePitchBySemitoneOptions, aZ as SetNotePitchOptions, b5 as SetStavesOptions, a$ as ShiftNotePitchOptions, cf as StopOctaveShiftOptions, c5 as UpdateChordSymbolOptions, c2 as UpdateHarmonyOptions, b_ as UpdateLyricOptions, cK as ValidationError, cN as ValidationErrorCode, cG as ValidationException, cO as ValidationLevel, cM as ValidationLocation, J as addArticulation, S as addBeam, aF as addBowing, aM as addBreathMark, aO as addCaesura, a as addChord, h as addChordNote, o as addChordNoteChecked, aA as addChordSymbol, am as addCoda, an as addDaCapo, ao as addDalSegno, L as addDynamics, ah as addEnding, a4 as addFermata, ap as addFine, aD as addFingering, ar as addGraceNote, ax as addHarmony, au as addLyric, f as addNote, k as addNoteChecked, aJ as addOctaveShift, a6 as addOrnament, w as addPart, a8 as addPedal, ac as addRehearsalMark, af as addRepeat, ad as addRepeatBarline, al as addSegno, H as addSlur, aH as addStringNumber, $ as addTempo, ab as addText, aa as addTextDirection, F as addTie, aq as addToCoda, v as addVoice, a2 as addWedge, cJ as assertMeasureValid, cr as assertValid, U as autoBeam, aj as changeBarline, P as changeClef, B as changeKey, d as changeNoteDuration, C as changeTime, aR as clearColors, at as convertToGrace, W as copyNotes, Z as copyNotesMultiMeasure, Q as createTuplet, Y as cutNotes, E as deleteMeasure, g as deleteNote, n as deleteNoteChecked, y as duplicatePart, cF as formatLocation, cI as getMeasureContext, O as insertClefChange, D as insertMeasure, i as insertNote, cq as isValid, l as lowerAccidental, N as modifyDynamics, j as modifyNoteDuration, q as modifyNoteDurationChecked, m as modifyNotePitch, p as modifyNotePitchChecked, a1 as modifyTempo, A as moveNoteToStaff, X as pasteNotes, _ as pasteNotesMultiMeasure, e as raiseAccidental, K as removeArticulation, T as removeBeam, aG as removeBowing, aN as removeBreathMark, aP as removeCaesura, aB as removeChordSymbol, M as removeDynamics, ai as removeEnding, a5 as removeFermata, aE as removeFingering, as as removeGraceNote, ay as removeHarmony, av as removeLyric, r as removeNote, aL as removeOctaveShift, a7 as removeOrnament, x as removePart, a9 as removePedal, ag as removeRepeat, ae as removeRepeatBarline, I as removeSlur, aI as removeStringNumber, a0 as removeTempo, G as removeTie, R as removeTuplet, a3 as removeWedge, ak as setBarline, V as setBeaming, aQ as setColor, s as setNotePitch, b as setNotePitchBySemitone, z as setStaves, c as shiftNotePitch, aK as stopOctaveShift, t as transpose, u as transposeChecked, aC as updateChordSymbol, az as updateHarmony, aw as updateLyric, cp as validate, cu as validateBackupForward, cw as validateBeams, cs as validateDivisions, ct as validateMeasureDuration, cH as validateMeasureLocal, cz as validatePartReferences, cA as validatePartStructure, cx as validateSlurs, cE as validateSlursAcrossMeasures, cB as validateStaffStructure, cv as validateTies, cD as validateTiesAcrossMeasures, cy as validateTuplets, cC as validateVoiceStaff } from './index-CuMPBK7U.mjs';
5
- import { ExpressionOptions, TimingSidecar } from './query/index.mjs';
6
- export { ExpressionHint, ExpressionKind, FindNotesFilter, NormalizedPositionOptions, PitchRange, PlaybackControls, PlaybackMeasure, RoundtripMetrics, TimingBreakpoint, TimingMapOptions, VoiceFilter, buildVoiceToStaffMap, buildVoiceToStaffMapForPart, countNotes, extractPlaybackControls, findBarlines, findDirectionsByType, findNotes, findNotesWithNotation, generatePlaybackSequence, generatePlaybackTimeline, getAbsolutePosition, getAdjacentNotes, getAllNotes, getAttributesAtMeasure, getBeamGroups, getChordProgression, getChords, getClefChanges, getClefForStaff, getDirections, getDirectionsAtPosition, getDivisions, getDuration, getDynamics, getEffectiveStaff, getEndings, getEntriesAtPosition, getEntriesForStaff, getEntriesInRange, getHarmonies, getHarmonyAtPosition, getKeyChanges, getLyricText, getLyrics, getMeasure, getMeasureByIndex, getMeasureCount, getNextNote, getNormalizedDuration, getNormalizedPosition, getNotesAtPosition, getNotesForStaff, getNotesForVoice, getNotesInRange, getOctaveShifts, getPartById, getPartByIndex, getPartCount, getPartIds, getPartIndex, getPedalMarkings, getPrevNote, getRepeatStructure, getSlurSpans, getStaffRange, getStaveCount, getStaves, getStructuralChanges, getTempoMarkings, getTiedNoteGroups, getTimeChanges, getTupletGroups, getVerseCount, getVerticalSlice, getVoiceLine, getVoiceLineInRange, getVoices, getVoicesForStaff, getWedges, groupByStaff, groupByVoice, hasMultipleStaves, hasNotes, hasPlaybackControls, inferStaff, isRestMeasure, iterateEntries, iterateNotes, measureRoundtrip, scoresEqual, withAbsolutePositions } from './query/index.mjs';
1
+ export { A as Accidental, i as AccidentalInfo, j as AccidentalMarkInfo, a2 as AdjacentNotes, ag as AssembledLyrics, B as BackupEntry, y as Barline, ah as BarlineWithContext, ac as BeamGroup, m as BeamInfo, G as Chord, w as Clef, am as ClefChangeInfo, C as Color, Q as Credit, U as CreditImage, R as CreditWords, O as Defaults, D as DirectionEntry, a3 as DirectionKind, o as DirectionType, Z as DirectionWithContext, u as DisplayText, a4 as DynamicWithContext, p as DynamicsValue, aj as EndingInfo, Y as EntryWithContext, s as FiguredBassEntry, F as ForwardEntry, H as HarmonyEntry, r as HarmonyFrame, ae as HarmonyWithContext, ak as KeyChangeInfo, K as KeySignature, L as Lyric, q as LyricTextElement, af as LyricWithContext, M as Measure, e as MeasureAttributes, f as MeasureEntry, t as MeasureStyle, n as Notation, ad as NotationType, N as NoteEntry, I as NoteIteratorItem, h as NoteType, X as NoteWithContext, E as NoteWithPosition, k as NoteheadInfo, a8 as OctaveShiftWithContext, d as Part, b as PartGroup, P as PartInfo, c as PartListEntry, a6 as PedalWithContext, g as Pitch, $ as PositionQueryOptions, J as Print, ai as RepeatInfo, S as Score, a as ScoreMetadata, aa as SlurSpan, z as StaffGroup, _ as StaffRange, l as StemInfo, an as StructuralChanges, a5 as TempoWithContext, T as TieInfo, a9 as TiedNoteGroup, al as TimeChangeInfo, v as TimeSignature, x as Transpose, ab as TupletGroup, a0 as VerticalSlice, V as VoiceGroup, a1 as VoiceLine, W as VoiceToStaffMap, a7 as WedgeWithContext } from './types-B-RGHY0c.mjs';
2
+ export { parse } from './musicxml.mjs';
3
+ export { isCompressed, parseAuto, parseCompressed, serializeCompressed } from './musicxml-compressed.mjs';
4
+ export { S as SerializeOptions, b as SerializeUncheckedOptions, s as serialize, a as serializeUnchecked } from './musicxml-DzuFr2c3.mjs';
5
+ export { FindNotesFilter, NormalizedPositionOptions, PitchRange, PlaybackControls, PlaybackMeasure, RoundtripMetrics, VoiceFilter, buildVoiceToStaffMap, buildVoiceToStaffMapForPart, countNotes, extractPlaybackControls, findBarlines, findDirectionsByType, findNotes, findNotesWithNotation, generatePlaybackSequence, getAbsolutePosition, getAdjacentNotes, getAllNotes, getAttributesAtMeasure, getBeamGroups, getChordProgression, getChords, getClefChanges, getClefForStaff, getDirections, getDirectionsAtPosition, getDivisions, getDuration, getDynamics, getEffectiveStaff, getEndings, getEntriesAtPosition, getEntriesForStaff, getEntriesInRange, getHarmonies, getHarmonyAtPosition, getKeyChanges, getLyricText, getLyrics, getMeasure, getMeasureByIndex, getMeasureCount, getNextNote, getNormalizedDuration, getNormalizedPosition, getNotesAtPosition, getNotesForStaff, getNotesForVoice, getNotesInRange, getOctaveShifts, getPartById, getPartByIndex, getPartCount, getPartIds, getPartIndex, getPedalMarkings, getPrevNote, getRepeatStructure, getSlurSpans, getStaffRange, getStaveCount, getStaves, getStructuralChanges, getTempoMarkings, getTiedNoteGroups, getTimeChanges, getTupletGroups, getVerseCount, getVerticalSlice, getVoiceLine, getVoiceLineInRange, getVoices, getVoicesForStaff, getWedges, groupByStaff, groupByVoice, hasMultipleStaves, hasNotes, hasPlaybackControls, inferStaff, isRestMeasure, iterateEntries, iterateNotes, measureRoundtrip, scoresEqual, withAbsolutePositions } from './query/index.mjs';
6
+ export { ALL_COLOR_TARGETS, AddArticulationOptions, AddBeamOptions, AddBowingOptions, AddBreathMarkOptions, AddCaesuraOptions, AddChordOptions, AddChordSymbolOptions, AddCodaOptions, AddDynamicsOptions, AddEndingOptions, AddFermataOptions, AddFingeringOptions, AddGraceNoteOptions, AddHarmonyOptions, AddLyricOptions, AddNavigationOptions, AddOctaveShiftOptions, AddOrnamentOptions, AddPartOptions, AddPedalOptions, AddRehearsalMarkOptions, AddRepeatBarlineOptions, AddRepeatOptions, AddSegnoOptions, AddSlurOptions, AddStringNumberOptions, AddTempoOptions, AddTextDirectionOptions, AddTextOptions, AddTieOptions, AddVoiceOptions, AddWedgeOptions, AutoBeamOptions, BarStyle, BowingType, BreathMarkValue, CaesuraValue, ChangeBarlineOptions, ChangeClefOptions, ChangeNoteDurationOptions, ColorTarget, ConvertToGraceOptions, CopyNotesMultiMeasureOptions, CopyNotesOptions, CreateTupletOptions, CutNotesOptions, DuplicatePartOptions, HarmonyKind, InsertClefChangeOptions, InsertNoteOptions, LowerAccidentalOptions, ModifyDynamicsOptions, ModifyTempoOptions, MoveNoteToStaffOptions, MultiMeasureSelection, NoteSelection, OctaveShiftType, OperationErrorCode, OperationResult, PasteNotesMultiMeasureOptions, PasteNotesOptions, RaiseAccidentalOptions, RemoveArticulationOptions, RemoveBeamOptions, RemoveBowingOptions, RemoveBreathMarkOptions, RemoveCaesuraOptions, RemoveChordSymbolOptions, RemoveDynamicsOptions, RemoveEndingOptions, RemoveFermataOptions, RemoveFingeringOptions, RemoveGraceNoteOptions, RemoveHarmonyOptions, RemoveLyricOptions, RemoveNoteOptions, RemoveOctaveShiftOptions, RemoveOrnamentOptions, RemovePedalOptions, RemoveRepeatBarlineOptions, RemoveRepeatOptions, RemoveSlurOptions, RemoveStringNumberOptions, RemoveTempoOptions, RemoveTieOptions, RemoveTupletOptions, RemoveWedgeOptions, SetBarlineOptions, SetBeamingOptions, SetColorOptions, SetNotePitchBySemitoneOptions, SetNotePitchOptions, SetStavesOptions, ShiftNotePitchOptions, StopOctaveShiftOptions, UpdateChordSymbolOptions, UpdateHarmonyOptions, UpdateLyricOptions, addArticulation, addBeam, addBowing, addBreathMark, addCaesura, addChord, addChordNote, addChordNoteChecked, addChordSymbol, addCoda, addDaCapo, addDalSegno, addDynamics, addEnding, addFermata, addFine, addFingering, addGraceNote, addHarmony, addLyric, addNote, addNoteChecked, addOctaveShift, addOrnament, addPart, addPedal, addRehearsalMark, addRepeat, addRepeatBarline, addSegno, addSlur, addStringNumber, addTempo, addText, addTextDirection, addTie, addToCoda, addVoice, addWedge, autoBeam, changeBarline, changeClef, changeKey, changeNoteDuration, changeTime, clearColors, convertToGrace, copyNotes, copyNotesMultiMeasure, createTuplet, cutNotes, deleteMeasure, deleteNote, deleteNoteChecked, duplicatePart, insertClefChange, insertMeasure, insertNote, lowerAccidental, modifyDynamics, modifyNoteDuration, modifyNoteDurationChecked, modifyNotePitch, modifyNotePitchChecked, modifyTempo, moveNoteToStaff, pasteNotes, pasteNotesMultiMeasure, raiseAccidental, removeArticulation, removeBeam, removeBowing, removeBreathMark, removeCaesura, removeChordSymbol, removeDynamics, removeEnding, removeFermata, removeFingering, removeGraceNote, removeHarmony, removeLyric, removeNote, removeOctaveShift, removeOrnament, removePart, removePedal, removeRepeat, removeRepeatBarline, removeSlur, removeStringNumber, removeTempo, removeTie, removeTuplet, removeWedge, setBarline, setBeaming, setColor, setNotePitch, setNotePitchBySemitone, setStaves, shiftNotePitch, stopOctaveShift, transpose, transposeChecked, updateChordSymbol, updateHarmony, updateLyric } from './operations/index.mjs';
7
+ export { STEPS, STEP_SEMITONES, generateId, getMeasureEndPosition, pitchToSemitone } from './core.mjs';
7
8
  export { DirectionTypeOfKind, getAllPartInfos, getDirectionOfKind, getDirectionsOfKind, getPartAbbreviation, getPartInfo, getPartName, getPartNameMap, getSoundDamperPedal, getSoundDynamics, getSoundSoftPedal, getSoundSostenutoPedal, getSoundTempo, hasBeam, hasDirectionOfKind, hasLyrics, hasNotations, hasTie, hasTieStart, hasTieStop, hasTuplet, isChordNote, isCueNote, isGraceNote, isPartInfo, isPitchedNote, isRest, isUnpitchedNote } from './accessors/index.mjs';
8
-
9
- declare function parse(input: string | Uint8Array): Score;
10
-
11
- /**
12
- * Parse a compressed MusicXML (.mxl) file
13
- * @param data - The compressed file data as Uint8Array or Buffer
14
- * @returns The parsed Score
15
- */
16
- declare function parseCompressed(data: Uint8Array): Score;
17
- /**
18
- * Check if data is a compressed MusicXML file
19
- * @param data - The file data
20
- * @returns true if the data appears to be a ZIP file
21
- */
22
- declare function isCompressed(data: Uint8Array): boolean;
23
- /**
24
- * Parse either compressed (.mxl) or uncompressed (.xml/.musicxml) MusicXML
25
- * Automatically detects the format
26
- * @param data - The file data as Uint8Array or string
27
- * @returns The parsed Score
28
- */
29
- declare function parseAuto(data: Uint8Array | string): Score;
30
-
31
- /**
32
- * ABC Notation Parser
33
- * Parses ABC notation format into the Score internal model.
34
- *
35
- * Supports ABC standard v2.1 core features:
36
- * - Header fields (X, T, C, M, L, Q, K, V, P, U, w, W, and `+:` continuations)
37
- * - Notes with pitch, duration, accidentals (including microtones), octaves
38
- * - Rests (z, Z, multi-measure Zn), invisible rests (x, Xn) and spacers (y)
39
- * - Bar lines (|, ||, |], [|, |:, :|, ::, [|], .|)
40
- * - Repeats and volta endings, including lists and ranges ([1,3, [1-3)
41
- * - Chords (simultaneous notes: [CEG]) with rests and per-note durations
42
- * - Chord symbols ("Am", "G7") and text annotations ("^above", "_below", ...)
43
- * - Ties (-), slurs ((...)) and dotted slurs (.(...))
44
- * - Grace notes ({...}) and acciaccaturas ({/...})
45
- * - Tuplets ((3..., (p:q:r...)
46
- * - Decorations: shorthand (. ~ H L M O P S T u v), !name! and legacy +name+
47
- * - Lyrics (w: field, multiple verses) and symbol lines (s:)
48
- * - Multi-voice (V: field) and multi-tune files (repeated X: fields)
49
- */
50
-
51
- /**
52
- * Parse every tune in an ABC file.
53
- *
54
- * ABC files may hold any number of tunes, each introduced by an `X:` field.
55
- * {@link parseAbc} returns only the first; use this to get them all.
56
- */
57
- declare function parseAbcTunes(abcString: string): Score[];
58
- /**
59
- * Parse an ABC notation string into a Score object.
60
- *
61
- * When the input holds several tunes, only the first is returned — use
62
- * {@link parseAbcTunes} to parse them all.
63
- */
64
- declare function parseAbc(abcString: string): Score;
65
-
66
- interface SerializeOptions {
67
- version?: string;
68
- indent?: string;
69
- /** Validate score before serializing (default: false) */
70
- validate?: boolean;
71
- /** Options for validation (if validate is true) */
72
- validateOptions?: ValidateOptions;
73
- /** Throw error if validation fails (default: false, will only warn) */
74
- throwOnValidationError?: boolean;
75
- /** Callback to receive validation result */
76
- onValidation?: (result: ValidationResult) => void;
77
- }
78
- declare function serialize(score: Score, options?: SerializeOptions): string;
79
-
80
- /**
81
- * Serialize a Score to compressed MusicXML (.mxl) format
82
- * @param score - The Score to serialize
83
- * @param options - Serialization options
84
- * @returns The compressed file data as Uint8Array
85
- */
86
- declare function serializeCompressed(score: Score, options?: SerializeOptions): Uint8Array;
87
-
88
- /**
89
- * MIDI export options
90
- *
91
- * Extends {@link ExpressionOptions} so fermata holds and rit./accel. ramps land
92
- * in the exported tempo map (and the timing sidecar) identically.
93
- */
94
- interface MidiExportOptions extends ExpressionOptions {
95
- /** Ticks per quarter note (default: 480) */
96
- ticksPerQuarterNote?: number;
97
- /** Default tempo in BPM (default: 120) */
98
- defaultTempo?: number;
99
- /** Default velocity for notes when no dynamics are present (default: 80) */
100
- defaultVelocity?: number;
101
- }
102
- /**
103
- * A single point on the timing sidecar: a correspondence between a time in the
104
- * generated MIDI and a conceptual musical position (measure + beat).
105
- *
106
- * Breakpoints are emitted at every played-measure start and every tempo change
107
- * (plus a terminal point). Between two consecutive breakpoints the relationship
108
- * `midiSec ↔ quarterPos` is linear (tempo is piecewise-constant), so a consumer
109
- * can interpolate any intermediate time exactly.
110
- */
111
- /** Result of {@link exportMidiWithTimingMap}. */
112
- interface MidiWithTimingMap {
113
- /** The Standard MIDI File data. */
114
- midi: Uint8Array;
115
- /** The MIDI-time ↔ musical-position sidecar. */
116
- sidecar: TimingSidecar;
117
- }
118
- /**
119
- * Export a Score to Standard MIDI File format (SMF Type 1)
120
- * @param score - The Score to export
121
- * @param options - Export options
122
- * @returns The MIDI file data as Uint8Array
123
- */
124
- declare function exportMidi(score: Score, options?: MidiExportOptions): Uint8Array;
125
- /**
126
- * Export a Score to MIDI together with a timing sidecar that maps the generated
127
- * MIDI timeline to conceptual musical positions (measure + beat).
128
- *
129
- * The MIDI bytes are byte-for-byte identical to {@link exportMidi}; the sidecar
130
- * is derived from the same internal time computation so the two can never drift.
131
- *
132
- * @param score - The Score to export
133
- * @param options - Export options (must match those used for any aligned audio)
134
- * @returns The MIDI data and its timing sidecar
135
- */
136
- declare function exportMidiWithTimingMap(score: Score, options?: MidiExportOptions): MidiWithTimingMap;
137
-
138
- /**
139
- * ABC Notation Serializer
140
- * Converts Score internal model to ABC notation format string.
141
- */
142
-
143
- interface AbcSerializeOptions {
144
- /** Reference number (X: field). Default: 1 */
145
- referenceNumber?: number;
146
- /** Maximum notes per line before wrapping. Default: no limit */
147
- notesPerLine?: number;
148
- /** Include chord symbols. Default: true */
149
- includeChordSymbols?: boolean;
150
- /** Include dynamics. Default: true */
151
- includeDynamics?: boolean;
152
- /** Include lyrics. Default: true */
153
- includeLyrics?: boolean;
154
- }
155
- /**
156
- * Serialize several Scores into a single multi-tune ABC file.
157
- *
158
- * Counterpart to `parseAbcTunes`: each Score becomes one tune, separated by a
159
- * blank line as the ABC standard requires.
160
- */
161
- declare function serializeAbcTunes(scores: Score[], options?: AbcSerializeOptions): string;
162
- /**
163
- * Serialize a Score object to ABC notation format string.
164
- */
165
- declare function serializeAbc(score: Score, options?: AbcSerializeOptions): string;
166
-
167
- declare const STEPS: Pitch['step'][];
168
- declare const STEP_SEMITONES: Record<Pitch['step'], number>;
169
- /** Convert pitch to semitone value (MIDI-like) */
170
- declare function pitchToSemitone(pitch: Pitch): number;
171
- /** Get position at end of measure */
172
- declare function getMeasureEndPosition(measure: Measure): number;
173
-
174
- /**
175
- * Generates a unique ID for elements in the Score structure.
176
- *
177
- * The ID format is "i" + 10 random URL-safe characters, where:
178
- * - "i" prefix ensures XML ID compatibility (XML IDs must start with a letter or underscore)
179
- * - the 10-character suffix is drawn from the same 64-character URL-safe
180
- * alphabet as nanoid, backed by `crypto.getRandomValues`
181
- *
182
- * Example: "iV1StGXR8_"
183
- *
184
- * @returns A unique 11-character ID string
185
- */
186
- declare function generateId(): string;
187
-
188
- export { type AbcSerializeOptions, ExpressionOptions, Measure, type MidiExportOptions, type MidiWithTimingMap, Pitch, STEPS, STEP_SEMITONES, Score, type SerializeOptions, TimingSidecar, ValidateOptions, ValidationResult, exportMidi, exportMidiWithTimingMap, generateId, getMeasureEndPosition, isCompressed, parse, parseAbc, parseAbcTunes, parseAuto, parseCompressed, pitchToSemitone, serialize, serializeAbc, serializeAbcTunes, serializeCompressed };
9
+ export { L as LocalValidateOptions, M as MeasureValidationContext, z as ValidateOptions, t as ValidationError, x as ValidationErrorCode, V as ValidationException, y as ValidationLevel, w as ValidationLocation, u as ValidationResult, s as assertMeasureValid, a as assertValid, p as formatLocation, r as getMeasureContext, i as isValid, v as validate, d as validateBackupForward, f as validateBeams, b as validateDivisions, c as validateMeasureDuration, q as validateMeasureLocal, j as validatePartReferences, k as validatePartStructure, g as validateSlurs, o as validateSlursAcrossMeasures, l as validateStaffStructure, e as validateTies, n as validateTiesAcrossMeasures, h as validateTuplets, m as validateVoiceStaff } from './index-C9lLZwol.mjs';
10
+ export { AbcSerializeOptions, parseAbc, parseAbcTunes, serializeAbc, serializeAbcTunes } from './abc.mjs';
11
+ export { MidiExportOptions, MidiWithTimingMap, exportMidi, exportMidiWithTimingMap } from './midi.mjs';
12
+ export { c as ExpressionHint, d as ExpressionKind, E as ExpressionOptions, b as TimingBreakpoint, T as TimingMapOptions, a as TimingSidecar, g as generatePlaybackTimeline } from './playback-timeline-CVRHsikj.mjs';