@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.
@@ -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"}