diff --git a/package-lock.json b/package-lock.json index 5b4d7e3..8e26bf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dl-librescore", - "version": "0.35.23", + "version": "0.35.32", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dl-librescore", - "version": "0.35.23", + "version": "0.35.32", "license": "MIT", "dependencies": { "@librescore/fonts": "^0.4.1", diff --git a/src/cli.ts b/src/cli.ts index 6ca13f2..3f88b96 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -597,55 +597,59 @@ void (async () => { await Promise.all( types.map(async (type) => { - // download/generate file data - let fileExt: String; - let fileData: Buffer; - switch (type) { - case "midi": { - fileExt = "mid"; - const fileUrl = await getFileUrl( - scoreinfo.id, - "midi", - argv.input - ); - fileData = await fetchBuffer(fileUrl); - break; - } - case "mp3": { - fileExt = "mp3"; - const fileUrl = await getFileUrl( - scoreinfo.id, - "mp3", - argv.input - ); - fileData = await fetchBuffer(fileUrl); - break; - } - case "pdf": { - fileExt = "pdf"; - fileData = Buffer.from( - await exportPDF( - scoreinfo, - scoreinfo.sheet, + try { + // download/generate file data + let fileExt: String; + let fileData: Buffer; + switch (type) { + case "midi": { + fileExt = "mid"; + const fileUrl = await getFileUrl( + scoreinfo.id, + "midi", argv.input - ) - ); - break; + ); + fileData = await fetchBuffer(fileUrl); + break; + } + case "mp3": { + fileExt = "mp3"; + const fileUrl = await getFileUrl( + scoreinfo.id, + "mp3", + argv.input + ); + fileData = await fetchBuffer(fileUrl); + break; + } + case "pdf": { + fileExt = "pdf"; + fileData = Buffer.from( + await exportPDF( + scoreinfo, + scoreinfo.sheet, + argv.input + ) + ); + break; + } } - } - // save to filesystem - const f = path.join( - argv.output, - `${scoreinfo.fileName}.${fileExt}` - ); - await fs.promises.writeFile(f, fileData); - if (argv.verbose) { - spinner.info( - i18next.t("cli_saved_message", { - file: chalk.underline(f), - }) + // save to filesystem + const f = path.join( + argv.output, + `${scoreinfo.fileName}.${fileExt}` ); + await fs.promises.writeFile(f, fileData); + if (argv.verbose) { + spinner.info( + i18next.t("cli_saved_message", { + file: chalk.underline(f), + }) + ); + } + } catch (e) { + spinner.fail(`Failed to download ${type}: ${e.message}`); } }) ); diff --git a/src/file.ts b/src/file.ts index 23e20df..4a0fe9b 100644 --- a/src/file.ts +++ b/src/file.ts @@ -1,6 +1,7 @@ /* eslint-disable no-extend-native */ /* eslint-disable @typescript-eslint/no-unsafe-return */ +import isNode from "detect-node"; import md5 from "md5"; import { getFetch } from "./utils"; import { auths } from "./file-magics"; @@ -18,6 +19,10 @@ const getSuffix = async (scoreUrl: string): Promise => { ), ].map((match) => match[1]); } else { + if (isNode) { + // Cannot get suffix in node without a scoreUrl + return null; + } suffixUrls = [ ...document.head.innerHTML.matchAll( /link.+?href=["'](https:\/\/musescore\.com\/static\/public\/build\/musescore.*?(?:_es6)?\/20.+?\.js)["']/g @@ -58,6 +63,9 @@ const getApiAuthNetwork = async ( type: FileType, index: number ): Promise => { + if (isNode) { + throw new Error("getApiAuthNetwork is not supported in Node.js"); + } let numPages = 0; let pageCooldown = 25; if (!auths[type + index]) {