From 619e5f7bda9b1bd9d0071c79cf0f32f8e7a3148e Mon Sep 17 00:00:00 2001 From: Jordan GAZEAU Date: Sun, 12 Nov 2023 22:46:00 +0100 Subject: [PATCH] fix: set response type as arraybuffer when downloading file content --- .prettierignore | 4 ++- README.md | 31 ++++++++++++++++--- src/model/assetManagers/cdnjs.ts | 8 ++--- src/model/assetManagers/jsdelivr.ts | 9 +++++- src/model/assetManagers/unpkg.ts | 9 +++++- .../tempSubdir/bmyc-github-content-ok.js | 0 .../tempSubdir/bmyc-unpkg-axios-ok.js | 0 test/resources/config-ok.json | 8 ++--- 8 files changed, 53 insertions(+), 16 deletions(-) delete mode 100644 tempDirectory/tempSubdir/bmyc-github-content-ok.js delete mode 100644 tempDirectory/tempSubdir/bmyc-unpkg-axios-ok.js diff --git a/.prettierignore b/.prettierignore index 03bcfc0..0d938e0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,5 @@ # Test ignores test/**/*.md -test/**/*.json \ No newline at end of file +test/**/*.json +# Markdown ignores +*.md \ No newline at end of file diff --git a/README.md b/README.md index 93c91a5..8f082f0 100644 --- a/README.md +++ b/README.md @@ -92,9 +92,9 @@ The generated file has the following characteristics: ```json [ { - "package": "asset1Package", - "name": "asset1", + "package": "package1", "hold": false, + "name": "asset1", "localPath": "path/asset1.min.js", "assetManager": { "name": "cdnjs", @@ -104,9 +104,9 @@ The generated file has the following characteristics: "currentVersion": "0.0.1" }, { - "package": "asset2Package", - "name": "asset2", + "package": "package2", "hold": false, + "name": "asset2", "localPath": "./path/asset2.min.js", "assetManager": { "name": "github", @@ -114,6 +114,29 @@ The generated file has the following characteristics: "repository": "repository", "filePath": "dir/asset2.min.js" } + }, + { + "package": "package3", + "hold": false, + "name": "asset3", + "localPath": "./path/asset3.min.js", + "assetManager": { + "name": "unpkg", + "library": "asset3", + "filePath": "dist/asset3.min.js" + } + }, + { + "package": "package4", + "hold": false, + "name": "asset4", + "localPath": "./path/asset4.min.js", + "assetManager": { + "name": "jsdelivr", + "cdn": "npm", + "package": "asset4", + "filePath": "dist/asset4.min.js" + } } ] ``` diff --git a/src/model/assetManagers/cdnjs.ts b/src/model/assetManagers/cdnjs.ts index a486cf5..d7e1cbd 100644 --- a/src/model/assetManagers/cdnjs.ts +++ b/src/model/assetManagers/cdnjs.ts @@ -9,7 +9,6 @@ const CDNJS_API_URL = 'https://api.cdnjs.com'; const CDNJS_LIBRARIES_PATH = 'libraries'; const CDNJS_LIBS_HOST = 'https://cdnjs.cloudflare.com'; const CDNJS_LIBS_ROOT_PATH = 'ajax/libs'; -const CDNJS_LIBS_ENCODING = 'utf-8'; export class Cdnjs extends AssetManager { @IsDefined() @@ -64,16 +63,15 @@ export class Cdnjs extends AssetManager { maxContentLength: 100000000, maxBodyLength: 100000000, method: 'get', + responseType: 'arraybuffer', url: url, }) .then((response: any) => { if (response.data) { - return Promise.resolve( - Buffer.from(response.data, CDNJS_LIBS_ENCODING) - ); + return Promise.resolve(Buffer.from(response.data)); } else { throw new BmycError( - `Cannot get content of library ${this.fileName} (${assetVersion})` + `Cannot get content of ${this.fileName} (${assetVersion})` ); } }) diff --git a/src/model/assetManagers/jsdelivr.ts b/src/model/assetManagers/jsdelivr.ts index 17fa591..d40f851 100644 --- a/src/model/assetManagers/jsdelivr.ts +++ b/src/model/assetManagers/jsdelivr.ts @@ -69,10 +69,17 @@ export class Jsdelivr extends AssetManager { const url = `${JSDELIVR_DATA_URL}/${this.cdn}/${this.package}@${assetVersion}/${this.filePath}`; return axios({ method: 'get', + responseType: 'arraybuffer', url: url, }) .then((response: any) => { - return Promise.resolve(response.data); + if (response.data) { + return Promise.resolve(Buffer.from(response.data)); + } else { + throw new BmycError( + `Cannot get content of ${this.filePath} (${assetVersion})` + ); + } }) .catch((error: Error) => { throw new BmycError(`${url}:\n${error.message}`); diff --git a/src/model/assetManagers/unpkg.ts b/src/model/assetManagers/unpkg.ts index d98efd9..84b8a53 100644 --- a/src/model/assetManagers/unpkg.ts +++ b/src/model/assetManagers/unpkg.ts @@ -60,10 +60,17 @@ export class Unpkg extends AssetManager { const url = `${UNPKG_API_URL}/${this.library}@${assetVersion}/${this.filePath}`; return axios({ method: 'get', + responseType: 'arraybuffer', url: url, }) .then((response: any) => { - return Promise.resolve(response.data); + if (response.data) { + return Promise.resolve(Buffer.from(response.data)); + } else { + throw new BmycError( + `Cannot get content of ${this.filePath} (${assetVersion})` + ); + } }) .catch((error: Error) => { throw new BmycError(`${url}:\n${error.message}`); diff --git a/tempDirectory/tempSubdir/bmyc-github-content-ok.js b/tempDirectory/tempSubdir/bmyc-github-content-ok.js deleted file mode 100644 index e69de29..0000000 diff --git a/tempDirectory/tempSubdir/bmyc-unpkg-axios-ok.js b/tempDirectory/tempSubdir/bmyc-unpkg-axios-ok.js deleted file mode 100644 index e69de29..0000000 diff --git a/test/resources/config-ok.json b/test/resources/config-ok.json index e8f6020..53e61a4 100644 --- a/test/resources/config-ok.json +++ b/test/resources/config-ok.json @@ -30,8 +30,8 @@ "localPath": "./path/asset3.min.js", "assetManager": { "name": "unpkg", - "library": "axios", - "filePath": "dist/axios.min.js" + "library": "asset3", + "filePath": "dist/asset3.min.js" } }, { @@ -42,8 +42,8 @@ "assetManager": { "name": "jsdelivr", "cdn": "npm", - "package": "axios", - "filePath": "dist/axios.min.js" + "package": "asset4", + "filePath": "dist/asset4.min.js" } } ] \ No newline at end of file