diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index c66c82d..cf431a8 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -9,4 +9,4 @@ * @type {RegExp|string} * @example data:image/png;base64 */ -export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; +export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i; diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index c66c82d..cf431a8 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -9,4 +9,4 @@ * @type {RegExp|string} * @example data:image/png;base64 */ -export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; +export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i; diff --git a/packages/utils/src/network/decomposeDataUri.js b/packages/utils/src/network/decomposeDataUri.js index 1ba3028..8572ee8 100644 --- a/packages/utils/src/network/decomposeDataUri.js +++ b/packages/utils/src/network/decomposeDataUri.js @@ -28,8 +28,9 @@ return { mediaType: dataUriMatch[1] ? dataUriMatch[1].toLowerCase() : undefined, subType: dataUriMatch[2] ? dataUriMatch[2].toLowerCase() : undefined, - encoding: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, - data: dataUriMatch[4], + charset: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, + encoding: dataUriMatch[4] ? dataUriMatch[4].toLowerCase() : undefined, + data: dataUriMatch[5], }; } diff --git a/packages/utils/src/const.js b/packages/utils/src/const.js index c66c82d..cf431a8 100644 --- a/packages/utils/src/const.js +++ b/packages/utils/src/const.js @@ -9,4 +9,4 @@ * @type {RegExp|string} * @example data:image/png;base64 */ -export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; +export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i; diff --git a/packages/utils/src/network/decomposeDataUri.js b/packages/utils/src/network/decomposeDataUri.js index 1ba3028..8572ee8 100644 --- a/packages/utils/src/network/decomposeDataUri.js +++ b/packages/utils/src/network/decomposeDataUri.js @@ -28,8 +28,9 @@ return { mediaType: dataUriMatch[1] ? dataUriMatch[1].toLowerCase() : undefined, subType: dataUriMatch[2] ? dataUriMatch[2].toLowerCase() : undefined, - encoding: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, - data: dataUriMatch[4], + charset: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, + encoding: dataUriMatch[4] ? dataUriMatch[4].toLowerCase() : undefined, + data: dataUriMatch[5], }; } diff --git a/packages/utils/test/index.js b/packages/utils/test/index.js index 576c312..40018a4 100755 --- a/packages/utils/test/index.js +++ b/packages/utils/test/index.js @@ -84,12 +84,50 @@ .to.equal('image'); expect(dataUri.subType) .to.equal('png'); + expect(dataUri.charset) + .to.be.an('undefined'); expect(dataUri.encoding) .to.equal('base64'); expect(dataUri.data) .to.equal('94Z9RWUN77ZW'); }); + it('should decompose a data URI with charset', function () + { + const dataUri = utils.decomposeDataUri('data:image/svg+xml;charset=utf8;base64,PGRpdiB4bWxucz0Pg=='); + + expect(dataUri) + .to.be.an('object'); + expect(dataUri.mediaType) + .to.equal('image'); + expect(dataUri.subType) + .to.equal('svg+xml'); + expect(dataUri.charset) + .to.equal('utf8'); + expect(dataUri.encoding) + .to.equal('base64'); + expect(dataUri.data) + .to.equal('PGRpdiB4bWxucz0Pg=='); + }); + + it('should decompose a data URI with charset without encoding', function () + { + const dataUri = utils.decomposeDataUri('data:image/svg+xml;charset=utf8,PGRpdiB4bWxucz0Pg=='); + + expect(dataUri) + .to.be.an('object'); + expect(dataUri.mediaType) + .to.equal('image'); + expect(dataUri.subType) + .to.equal('svg+xml'); + expect(dataUri.charset) + .to.equal('utf8'); + expect(dataUri.encoding) + .to.be.an('undefined'); + expect(dataUri.data) + .to.equal('PGRpdiB4bWxucz0Pg=='); + }); + it('should return undefined for anything else', function () { const dataUri = utils.decomposeDataUri('foo');