From 89131eec7ccc9b8e635a04ef51273b3fd3341b3e Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Thu, 24 Dec 2015 13:34:27 +1100 Subject: [PATCH] Handle missing image "src" properties --- index.js | 6 +++++- .../error-cases/missing-src/expected-error.js | 1 + test/error-cases/missing-src/index.js | 1 + test/error-cases/missing-src/manifest.json | 9 +++++++++ .../error-cases/missing-src/webpack.config.js | 19 +++++++++++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/error-cases/missing-src/expected-error.js create mode 100644 test/error-cases/missing-src/index.js create mode 100644 test/error-cases/missing-src/manifest.json create mode 100644 test/error-cases/missing-src/webpack.config.js diff --git a/index.js b/index.js index 8ccb3b0..2ddf780 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,10 @@ var loaderUtils = require('loader-utils'); var steed = require('steed'); function resolveImageSrc(loaderContext, image, callback) { + if (typeof image.src !== 'string') { + return callback(new Error('Missing image "src" property in Web App Manifest')); + } + var dirname = path.dirname(loaderContext.resourcePath); // Resolve the image filename relative to the manifest file @@ -34,7 +38,7 @@ function resolveImages(loaderContext, manifest, key, callback) { return callback(null); } - steed.each(manifest[key], resolveImageSrc.bind(null, loaderContext), function(err) { + steed.map(manifest[key], resolveImageSrc.bind(null, loaderContext), function(err) { if (err) { return callback(err); } diff --git a/test/error-cases/missing-src/expected-error.js b/test/error-cases/missing-src/expected-error.js new file mode 100644 index 0000000..d033111 --- /dev/null +++ b/test/error-cases/missing-src/expected-error.js @@ -0,0 +1 @@ +module.exports = 'Error: Missing image "src" property in Web App Manifest'; diff --git a/test/error-cases/missing-src/index.js b/test/error-cases/missing-src/index.js new file mode 100644 index 0000000..3a9c266 --- /dev/null +++ b/test/error-cases/missing-src/index.js @@ -0,0 +1 @@ +require('./manifest.json'); diff --git a/test/error-cases/missing-src/manifest.json b/test/error-cases/missing-src/manifest.json new file mode 100644 index 0000000..76877eb --- /dev/null +++ b/test/error-cases/missing-src/manifest.json @@ -0,0 +1,9 @@ +{ + "name": "Missing Src", + "icons": [ + { + "sizes": "192x192", + "type": "image/png" + } + ] +} diff --git a/test/error-cases/missing-src/webpack.config.js b/test/error-cases/missing-src/webpack.config.js new file mode 100644 index 0000000..1292646 --- /dev/null +++ b/test/error-cases/missing-src/webpack.config.js @@ -0,0 +1,19 @@ +module.exports = { + entry: { + main: __dirname + '/index.js' + }, + + output: { + filename: 'index.js', + path: __dirname + '/actual-output' + }, + + module: { + loaders: [ + { + test: /manifest.json$/, + loader: 'file?name=manifest.json!../../../index.js' + } + ] + } +};