@maxmellon/cue-parser 1.0.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 +21 -0
- package/README.md +374 -0
- package/bin/index.js +283 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +34 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/parser.d.ts +49 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +395 -0
- package/dist/src/parser.js.map +1 -0
- package/dist/src/serializer.d.ts +31 -0
- package/dist/src/serializer.d.ts.map +1 -0
- package/dist/src/serializer.js +240 -0
- package/dist/src/serializer.js.map +1 -0
- package/dist/src/types.d.ts +95 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +5 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +72 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +142 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/youtube-serializer.d.ts +11 -0
- package/dist/src/youtube-serializer.d.ts.map +1 -0
- package/dist/src/youtube-serializer.js +40 -0
- package/dist/src/youtube-serializer.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CUE Sheet Parser
|
|
3
|
+
*
|
|
4
|
+
* A TypeScript library for parsing CUE sheet files according to the specification.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { parseCueSheet, CueParser } from 'cue-parser';
|
|
9
|
+
*
|
|
10
|
+
* const cueContent = `
|
|
11
|
+
* TITLE "Example Album"
|
|
12
|
+
* PERFORMER "Example Artist"
|
|
13
|
+
* FILE "audio.wav" WAVE
|
|
14
|
+
* TRACK 01 AUDIO
|
|
15
|
+
* TITLE "Track 1"
|
|
16
|
+
* INDEX 01 00:00:00
|
|
17
|
+
* `;
|
|
18
|
+
*
|
|
19
|
+
* const result = parseCueSheet(cueContent);
|
|
20
|
+
* if (result.cueSheet) {
|
|
21
|
+
* console.log(result.cueSheet.global.title); // "Example Album"
|
|
22
|
+
* console.log(result.cueSheet.tracks[0].title); // "Track 1"
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
// Export utilities
|
|
27
|
+
export { parseHMSTime, formatHMSTime, formatCueTime, hmsToSeconds, secondsToHMS, msfToFrames, framesToMSF, addHMSTime, subtractHMSTime, compareHMSTime } from './utils.js';
|
|
28
|
+
// Export parser
|
|
29
|
+
export { CueParser, parseCueSheet } from './parser.js';
|
|
30
|
+
// Export serializer
|
|
31
|
+
export { serializeCueSheet, formatCueSheet, createMinimalCueSheet } from './serializer.js';
|
|
32
|
+
// Export YouTube serializer
|
|
33
|
+
export { serializeYouTubeTimeline } from './youtube-serializer.js';
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAkBH,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,gBAAgB;AAChB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,4BAA4B;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ParseResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* CUE Sheet parser class
|
|
4
|
+
*/
|
|
5
|
+
export declare class CueParser {
|
|
6
|
+
private currentTrack;
|
|
7
|
+
private global;
|
|
8
|
+
private tracks;
|
|
9
|
+
private errors;
|
|
10
|
+
private warnings;
|
|
11
|
+
/**
|
|
12
|
+
* Parse a CUE sheet from string content
|
|
13
|
+
* @param content - CUE file content as string
|
|
14
|
+
* @returns ParseResult with parsed CueSheet and any errors/warnings
|
|
15
|
+
*/
|
|
16
|
+
parse(content: string): ParseResult;
|
|
17
|
+
private reset;
|
|
18
|
+
private parseLine;
|
|
19
|
+
private parseCommand;
|
|
20
|
+
private parseQuotedString;
|
|
21
|
+
private handleRemark;
|
|
22
|
+
private handleCatalog;
|
|
23
|
+
private handleCdTextFile;
|
|
24
|
+
private handleFile;
|
|
25
|
+
private parseFileArgs;
|
|
26
|
+
private parseFileFormat;
|
|
27
|
+
private handleTrack;
|
|
28
|
+
private handleIndex;
|
|
29
|
+
private handlePregap;
|
|
30
|
+
private handlePostgap;
|
|
31
|
+
private handleFlags;
|
|
32
|
+
private handleIsrc;
|
|
33
|
+
private handleTitle;
|
|
34
|
+
private handlePerformer;
|
|
35
|
+
private handleSongwriter;
|
|
36
|
+
private handleComposer;
|
|
37
|
+
private handleArranger;
|
|
38
|
+
private handleMessage;
|
|
39
|
+
private handleDiscId;
|
|
40
|
+
private handleGenre;
|
|
41
|
+
private handleUpcEan;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Convenience function to parse a CUE sheet from string
|
|
45
|
+
* @param content - CUE file content
|
|
46
|
+
* @returns ParseResult
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseCueSheet(content: string): ParseResult;
|
|
49
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EASV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAoB;IAEpC;;;;OAIG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IA0C1C,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,SAAS;IAkFjB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;CAIrB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAG1D"}
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import { parseHMSTime } from './utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* CUE Sheet parser class
|
|
4
|
+
*/
|
|
5
|
+
export class CueParser {
|
|
6
|
+
currentTrack = null;
|
|
7
|
+
global = {};
|
|
8
|
+
tracks = [];
|
|
9
|
+
errors = [];
|
|
10
|
+
warnings = [];
|
|
11
|
+
/**
|
|
12
|
+
* Parse a CUE sheet from string content
|
|
13
|
+
* @param content - CUE file content as string
|
|
14
|
+
* @returns ParseResult with parsed CueSheet and any errors/warnings
|
|
15
|
+
*/
|
|
16
|
+
parse(content) {
|
|
17
|
+
this.reset();
|
|
18
|
+
const lines = content.split('\n');
|
|
19
|
+
for (let i = 0; i < lines.length; i++) {
|
|
20
|
+
const line = lines[i];
|
|
21
|
+
const lineNumber = i + 1;
|
|
22
|
+
if (line === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
try {
|
|
25
|
+
this.parseLine(line, lineNumber);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
this.errors.push({
|
|
29
|
+
line: lineNumber,
|
|
30
|
+
message: error instanceof Error ? error.message : String(error),
|
|
31
|
+
rawLine: line
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Finalize the last track if it exists
|
|
36
|
+
if (this.currentTrack) {
|
|
37
|
+
this.tracks.push(this.currentTrack);
|
|
38
|
+
}
|
|
39
|
+
const result = {
|
|
40
|
+
errors: [...this.errors],
|
|
41
|
+
warnings: [...this.warnings]
|
|
42
|
+
};
|
|
43
|
+
if (this.errors.length === 0) {
|
|
44
|
+
result.cueSheet = {
|
|
45
|
+
global: this.global,
|
|
46
|
+
tracks: this.tracks
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
reset() {
|
|
52
|
+
this.currentTrack = null;
|
|
53
|
+
this.global = {};
|
|
54
|
+
this.tracks = [];
|
|
55
|
+
this.errors = [];
|
|
56
|
+
this.warnings = [];
|
|
57
|
+
}
|
|
58
|
+
parseLine(line, lineNumber) {
|
|
59
|
+
const trimmed = line.trim();
|
|
60
|
+
// Skip empty lines
|
|
61
|
+
if (trimmed === '') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Parse the line into command and arguments
|
|
65
|
+
const { command, args } = this.parseCommand(trimmed);
|
|
66
|
+
if (!command) {
|
|
67
|
+
return; // Empty or comment-only line
|
|
68
|
+
}
|
|
69
|
+
switch (command.toUpperCase()) {
|
|
70
|
+
case 'REM':
|
|
71
|
+
this.handleRemark(args, lineNumber);
|
|
72
|
+
break;
|
|
73
|
+
case 'CATALOG':
|
|
74
|
+
this.handleCatalog(args, lineNumber);
|
|
75
|
+
break;
|
|
76
|
+
case 'CDTEXTFILE':
|
|
77
|
+
this.handleCdTextFile(args, lineNumber);
|
|
78
|
+
break;
|
|
79
|
+
case 'FILE':
|
|
80
|
+
this.handleFile(args, lineNumber);
|
|
81
|
+
break;
|
|
82
|
+
case 'TRACK':
|
|
83
|
+
this.handleTrack(args, lineNumber);
|
|
84
|
+
break;
|
|
85
|
+
case 'INDEX':
|
|
86
|
+
this.handleIndex(args, lineNumber);
|
|
87
|
+
break;
|
|
88
|
+
case 'PREGAP':
|
|
89
|
+
this.handlePregap(args);
|
|
90
|
+
break;
|
|
91
|
+
case 'POSTGAP':
|
|
92
|
+
this.handlePostgap(args);
|
|
93
|
+
break;
|
|
94
|
+
case 'FLAGS':
|
|
95
|
+
this.handleFlags(args, lineNumber);
|
|
96
|
+
break;
|
|
97
|
+
case 'ISRC':
|
|
98
|
+
this.handleIsrc(args, lineNumber);
|
|
99
|
+
break;
|
|
100
|
+
case 'TITLE':
|
|
101
|
+
this.handleTitle(args, lineNumber);
|
|
102
|
+
break;
|
|
103
|
+
case 'PERFORMER':
|
|
104
|
+
this.handlePerformer(args, lineNumber);
|
|
105
|
+
break;
|
|
106
|
+
case 'SONGWRITER':
|
|
107
|
+
this.handleSongwriter(args, lineNumber);
|
|
108
|
+
break;
|
|
109
|
+
case 'COMPOSER':
|
|
110
|
+
this.handleComposer(args, lineNumber);
|
|
111
|
+
break;
|
|
112
|
+
case 'ARRANGER':
|
|
113
|
+
this.handleArranger(args, lineNumber);
|
|
114
|
+
break;
|
|
115
|
+
case 'MESSAGE':
|
|
116
|
+
this.handleMessage(args, lineNumber);
|
|
117
|
+
break;
|
|
118
|
+
case 'DISC_ID':
|
|
119
|
+
this.handleDiscId(args, lineNumber);
|
|
120
|
+
break;
|
|
121
|
+
case 'GENRE':
|
|
122
|
+
this.handleGenre(args, lineNumber);
|
|
123
|
+
break;
|
|
124
|
+
case 'UPC_EAN':
|
|
125
|
+
this.handleUpcEan(args, lineNumber);
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
this.warnings.push({
|
|
129
|
+
line: lineNumber,
|
|
130
|
+
message: `Unknown command: ${command}`,
|
|
131
|
+
rawLine: line
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
parseCommand(line) {
|
|
136
|
+
const trimmed = line.trim();
|
|
137
|
+
const spaceIndex = trimmed.indexOf(' ');
|
|
138
|
+
if (spaceIndex === -1) {
|
|
139
|
+
return { command: trimmed, args: '' };
|
|
140
|
+
}
|
|
141
|
+
const command = trimmed.substring(0, spaceIndex);
|
|
142
|
+
const args = trimmed.substring(spaceIndex + 1).trim();
|
|
143
|
+
return { command, args };
|
|
144
|
+
}
|
|
145
|
+
parseQuotedString(input) {
|
|
146
|
+
const trimmed = input.trim();
|
|
147
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length >= 2) {
|
|
148
|
+
return trimmed.slice(1, -1);
|
|
149
|
+
}
|
|
150
|
+
return trimmed;
|
|
151
|
+
}
|
|
152
|
+
handleRemark(args, lineNumber) {
|
|
153
|
+
const remark = args || '';
|
|
154
|
+
if (this.currentTrack) {
|
|
155
|
+
this.currentTrack.remarks = this.currentTrack.remarks || [];
|
|
156
|
+
this.currentTrack.remarks.push(remark);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.global.remarks = this.global.remarks || [];
|
|
160
|
+
this.global.remarks.push(remark);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
handleCatalog(args, lineNumber) {
|
|
164
|
+
const catalog = args.trim();
|
|
165
|
+
if (!/^\d{13}$/.test(catalog)) {
|
|
166
|
+
throw new Error(`CATALOG must be exactly 13 digits, got: ${catalog}`);
|
|
167
|
+
}
|
|
168
|
+
this.global.catalog = catalog;
|
|
169
|
+
}
|
|
170
|
+
handleCdTextFile(args, lineNumber) {
|
|
171
|
+
const filename = this.parseQuotedString(args);
|
|
172
|
+
this.global.cdTextFile = filename;
|
|
173
|
+
}
|
|
174
|
+
handleFile(args, lineNumber) {
|
|
175
|
+
const parts = this.parseFileArgs(args);
|
|
176
|
+
const splited = parts.filename.split("/");
|
|
177
|
+
const name = splited[splited.length - 1] ?? "[EMPTY FILE NAME]";
|
|
178
|
+
const fileInfo = {
|
|
179
|
+
filename: name,
|
|
180
|
+
...(parts.format ? { format: parts.format } : {})
|
|
181
|
+
};
|
|
182
|
+
// Set file at appropriate level
|
|
183
|
+
if (this.currentTrack) {
|
|
184
|
+
// Track-level FILE is ignored in favor of global FILE
|
|
185
|
+
this.warnings.push({
|
|
186
|
+
line: lineNumber,
|
|
187
|
+
message: 'Track-level FILE commands are ignored. Using global FILE instead.',
|
|
188
|
+
rawLine: `FILE ${args}`
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// Store global FILE
|
|
193
|
+
this.global.file = fileInfo;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
parseFileArgs(args) {
|
|
197
|
+
// Handle quoted filenames
|
|
198
|
+
let filename;
|
|
199
|
+
let format = undefined;
|
|
200
|
+
const trimmed = args.trim();
|
|
201
|
+
if (trimmed.startsWith('"')) {
|
|
202
|
+
const endQuoteIndex = trimmed.indexOf('"', 1);
|
|
203
|
+
if (endQuoteIndex === -1) {
|
|
204
|
+
throw new Error('Unterminated quoted filename');
|
|
205
|
+
}
|
|
206
|
+
filename = trimmed.slice(1, endQuoteIndex);
|
|
207
|
+
const remaining = trimmed.slice(endQuoteIndex + 1).trim();
|
|
208
|
+
if (remaining) {
|
|
209
|
+
format = this.parseFileFormat(remaining);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const parts = trimmed.split(/\s+/);
|
|
214
|
+
filename = parts[0];
|
|
215
|
+
if (parts.length > 1 && parts[1]) {
|
|
216
|
+
format = this.parseFileFormat(parts[1]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return { filename, ...(format ? { format } : {}) };
|
|
220
|
+
}
|
|
221
|
+
parseFileFormat(formatStr) {
|
|
222
|
+
const format = formatStr.toUpperCase();
|
|
223
|
+
const validFormats = ['BINARY', 'MOTOROLA', 'AIFF', 'WAVE', 'MP3'];
|
|
224
|
+
if (!validFormats.includes(format)) {
|
|
225
|
+
throw new Error(`Invalid file format: ${formatStr}`);
|
|
226
|
+
}
|
|
227
|
+
return format;
|
|
228
|
+
}
|
|
229
|
+
handleTrack(args, lineNumber) {
|
|
230
|
+
// Save the previous track
|
|
231
|
+
if (this.currentTrack) {
|
|
232
|
+
this.tracks.push(this.currentTrack);
|
|
233
|
+
}
|
|
234
|
+
const parts = args.trim().split(/\s+/);
|
|
235
|
+
if (parts.length < 2) {
|
|
236
|
+
throw new Error('TRACK command requires track number and mode');
|
|
237
|
+
}
|
|
238
|
+
const trackNumber = parseInt(parts[0], 10);
|
|
239
|
+
const trackMode = parts[1].toUpperCase();
|
|
240
|
+
if (isNaN(trackNumber) || trackNumber < 1 || trackNumber > 99) {
|
|
241
|
+
throw new Error(`Invalid track number: ${parts[0]}. Must be between 1 and 99.`);
|
|
242
|
+
}
|
|
243
|
+
const validModes = [
|
|
244
|
+
'AUDIO', 'CDG', 'MODE1/2048', 'MODE1/2352',
|
|
245
|
+
'MODE2/2336', 'MODE2/2352', 'CDI/2336', 'CDI/2352'
|
|
246
|
+
];
|
|
247
|
+
if (!validModes.includes(trackMode)) {
|
|
248
|
+
throw new Error(`Invalid track mode: ${parts[1]}`);
|
|
249
|
+
}
|
|
250
|
+
this.currentTrack = {
|
|
251
|
+
number: trackNumber,
|
|
252
|
+
mode: trackMode
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
handleIndex(args, lineNumber) {
|
|
256
|
+
if (!this.currentTrack) {
|
|
257
|
+
throw new Error('INDEX command must be inside a TRACK');
|
|
258
|
+
}
|
|
259
|
+
const parts = args.trim().split(/\s+/);
|
|
260
|
+
if (parts.length < 2) {
|
|
261
|
+
throw new Error('INDEX command requires index number and time');
|
|
262
|
+
}
|
|
263
|
+
const indexNumber = parseInt(parts[0], 10);
|
|
264
|
+
if (isNaN(indexNumber) || indexNumber < 0 || indexNumber > 99) {
|
|
265
|
+
throw new Error(`Invalid index number: ${parts[0]}. Must be between 0 and 99.`);
|
|
266
|
+
}
|
|
267
|
+
const time = parseHMSTime(parts[1]);
|
|
268
|
+
this.currentTrack.indexes = this.currentTrack.indexes || [];
|
|
269
|
+
this.currentTrack.indexes.push({
|
|
270
|
+
number: indexNumber,
|
|
271
|
+
time
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
handlePregap(args) {
|
|
275
|
+
if (!this.currentTrack) {
|
|
276
|
+
throw new Error('PREGAP command must be within a TRACK');
|
|
277
|
+
}
|
|
278
|
+
const time = parseHMSTime(args.trim());
|
|
279
|
+
this.currentTrack.pregap = time;
|
|
280
|
+
}
|
|
281
|
+
handlePostgap(args) {
|
|
282
|
+
if (!this.currentTrack) {
|
|
283
|
+
throw new Error('POSTGAP command must be within a TRACK');
|
|
284
|
+
}
|
|
285
|
+
const time = parseHMSTime(args.trim());
|
|
286
|
+
this.currentTrack.postgap = time;
|
|
287
|
+
}
|
|
288
|
+
handleFlags(args, lineNumber) {
|
|
289
|
+
if (!this.currentTrack) {
|
|
290
|
+
throw new Error('FLAGS command must be inside a TRACK');
|
|
291
|
+
}
|
|
292
|
+
const flagStrings = args.trim().split(/\s+/);
|
|
293
|
+
const validFlags = ['PRE', 'DCP', '4CH', 'SCMS'];
|
|
294
|
+
const flags = [];
|
|
295
|
+
for (const flagStr of flagStrings) {
|
|
296
|
+
const flag = flagStr.toUpperCase();
|
|
297
|
+
if (!validFlags.includes(flag)) {
|
|
298
|
+
throw new Error(`Invalid flag: ${flagStr}`);
|
|
299
|
+
}
|
|
300
|
+
flags.push(flag);
|
|
301
|
+
}
|
|
302
|
+
this.currentTrack.flags = flags;
|
|
303
|
+
}
|
|
304
|
+
handleIsrc(args, lineNumber) {
|
|
305
|
+
if (!this.currentTrack) {
|
|
306
|
+
throw new Error('ISRC command must be inside a TRACK');
|
|
307
|
+
}
|
|
308
|
+
const isrc = args.trim();
|
|
309
|
+
// ISRC format: CCOOOOYYSSSSS (2 country + 3 owner + 2 year + 5 designation)
|
|
310
|
+
if (!/^[A-Z0-9]{12}$/.test(isrc)) {
|
|
311
|
+
this.warnings.push({
|
|
312
|
+
line: lineNumber,
|
|
313
|
+
message: `ISRC format may be invalid: ${isrc}. Expected format: CCOOOOYYSSSSS`,
|
|
314
|
+
rawLine: `ISRC ${args}`
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
this.currentTrack.isrc = isrc;
|
|
318
|
+
}
|
|
319
|
+
handleTitle(args, lineNumber) {
|
|
320
|
+
const title = this.parseQuotedString(args);
|
|
321
|
+
if (this.currentTrack) {
|
|
322
|
+
this.currentTrack.title = title;
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
this.global.title = title;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
handlePerformer(args, lineNumber) {
|
|
329
|
+
const performer = this.parseQuotedString(args);
|
|
330
|
+
if (this.currentTrack) {
|
|
331
|
+
this.currentTrack.performer = performer;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
this.global.performer = performer;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
handleSongwriter(args, lineNumber) {
|
|
338
|
+
const songwriter = this.parseQuotedString(args);
|
|
339
|
+
if (this.currentTrack) {
|
|
340
|
+
this.currentTrack.songwriter = songwriter;
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
this.global.songwriter = songwriter;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
handleComposer(args, lineNumber) {
|
|
347
|
+
const composer = this.parseQuotedString(args);
|
|
348
|
+
if (this.currentTrack) {
|
|
349
|
+
this.currentTrack.composer = composer;
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
this.global.composer = composer;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
handleArranger(args, lineNumber) {
|
|
356
|
+
const arranger = this.parseQuotedString(args);
|
|
357
|
+
if (this.currentTrack) {
|
|
358
|
+
this.currentTrack.arranger = arranger;
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
this.global.arranger = arranger;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
handleMessage(args, lineNumber) {
|
|
365
|
+
const message = this.parseQuotedString(args);
|
|
366
|
+
if (this.currentTrack) {
|
|
367
|
+
this.currentTrack.message = message;
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
this.global.message = message;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
handleDiscId(args, lineNumber) {
|
|
374
|
+
const discId = this.parseQuotedString(args);
|
|
375
|
+
this.global.discId = discId;
|
|
376
|
+
}
|
|
377
|
+
handleGenre(args, lineNumber) {
|
|
378
|
+
const genre = this.parseQuotedString(args);
|
|
379
|
+
this.global.genre = genre;
|
|
380
|
+
}
|
|
381
|
+
handleUpcEan(args, lineNumber) {
|
|
382
|
+
const upcEan = this.parseQuotedString(args);
|
|
383
|
+
this.global.upcEan = upcEan;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Convenience function to parse a CUE sheet from string
|
|
388
|
+
* @param content - CUE file content
|
|
389
|
+
* @returns ParseResult
|
|
390
|
+
*/
|
|
391
|
+
export function parseCueSheet(content) {
|
|
392
|
+
const parser = new CueParser();
|
|
393
|
+
return parser.parse(content);
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CueSheet } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* CUE Sheet serializer - converts parsed CueSheet objects back to CUE format
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Serialize a CueSheet object back to CUE sheet format string
|
|
7
|
+
* @param cueSheet - The parsed CueSheet object
|
|
8
|
+
* @returns CUE sheet format string
|
|
9
|
+
*/
|
|
10
|
+
export declare function serializeCueSheet(cueSheet: CueSheet): string; /**
|
|
11
|
+
* Serialize the global section of a CUE sheet
|
|
12
|
+
* @param global - Global CUE sheet information
|
|
13
|
+
* @param lines - Array to append lines to
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Format a CueSheet with proper indentation and spacing
|
|
17
|
+
* @param cueSheet - The CueSheet to format
|
|
18
|
+
* @param options - Formatting options
|
|
19
|
+
* @returns Formatted CUE sheet string
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatCueSheet(cueSheet: CueSheet, options?: {
|
|
22
|
+
indent?: string;
|
|
23
|
+
trackSpacing?: boolean;
|
|
24
|
+
}): string;
|
|
25
|
+
/**
|
|
26
|
+
* Create a minimal CUE sheet with only essential information
|
|
27
|
+
* @param cueSheet - The CueSheet to minimize
|
|
28
|
+
* @returns Minimal CUE sheet string
|
|
29
|
+
*/
|
|
30
|
+
export declare function createMinimalCueSheet(cueSheet: CueSheet): string;
|
|
31
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAgC,MAAM,YAAY,CAAC;AAGzE;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAU5D,CAAA;;;;GAIE;AA2KH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,CAkCd;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAwChE"}
|