From b0f45893c071113dc2c21dcd1e456520ea782017 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 27 Mar 2022 21:06:50 -0500 Subject: [PATCH] Add image option support to Node.js module --- api/test-icon.png | Bin 0 -> 5371 bytes src/packager/node/adapter.js | 13 ++++++++----- src/packager/node/export.js | 2 ++ src/packager/node/image.js | 12 ++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 api/test-icon.png create mode 100644 src/packager/node/image.js diff --git a/api/test-icon.png b/api/test-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..07d6ce9f7d4b7d3b51b42fa4e932149deb80cebc GIT binary patch literal 5371 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 Z{{iQ^^pp(m@X!DN002ovPDHLkV1g6#Lb3n= literal 0 HcmV?d00001 diff --git a/src/packager/node/adapter.js b/src/packager/node/adapter.js index eddde4a..b47a68f 100644 --- a/src/packager/node/adapter.js +++ b/src/packager/node/adapter.js @@ -3,7 +3,8 @@ import path from 'path'; import {promisify} from 'util'; import fetch from 'cross-fetch'; import {name} from '../../../package.json'; -import icon from '../images/default-icon.png'; +import defaultIcon from '../images/default-icon.png'; +import Image from './image'; const readFile = promisify(fs.readFile); const writeFile = promisify(fs.writeFile); @@ -73,14 +74,16 @@ class NodeAdapter { } async getAppIcon (file) { - // TODO - const buffer = await readFile(path.join(__dirname, icon)); + // TODO: currently only supports default image + const buffer = await readFile(path.join(__dirname, defaultIcon)); return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); } readAsURL (file) { - // TODO - throw new Error('image features not implemented in Node.js module'); + if (!(file instanceof Image)) { + throw new Error('file must be an instance of Packager.Image but found ' + file + ' instead.'); + } + return file.readAsURL(); } } diff --git a/src/packager/node/export.js b/src/packager/node/export.js index 37c1bb2..fbf1306 100644 --- a/src/packager/node/export.js +++ b/src/packager/node/export.js @@ -1,10 +1,12 @@ import Packager from '../packager'; import {downloadProject} from '../download-project'; import NodeAdapter from './adapter'; +import Image from './image'; Packager.adapter = new NodeAdapter(); export { Packager, + Image, downloadProject as loadProject }; diff --git a/src/packager/node/image.js b/src/packager/node/image.js new file mode 100644 index 0000000..22ca860 --- /dev/null +++ b/src/packager/node/image.js @@ -0,0 +1,12 @@ +class Image { + constructor (mimeType, data) { + this.mimeType = mimeType; + this.buffer = Buffer.from(data); + } + + readAsURL() { + return `data:${this.mimeType};base64,${this.buffer.toString('base64')}`; + } +} + +export default Image;