UNPKG

1.28 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = isDataURI;
7
8var _assertString = _interopRequireDefault(require("./util/assertString"));
9
10function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
12var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i;
13var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i;
14var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;
15
16function isDataURI(str) {
17 (0, _assertString.default)(str);
18 var data = str.split(',');
19
20 if (data.length < 2) {
21 return false;
22 }
23
24 var attributes = data.shift().trim().split(';');
25 var schemeAndMediaType = attributes.shift();
26
27 if (schemeAndMediaType.substr(0, 5) !== 'data:') {
28 return false;
29 }
30
31 var mediaType = schemeAndMediaType.substr(5);
32
33 if (mediaType !== '' && !validMediaType.test(mediaType)) {
34 return false;
35 }
36
37 for (var i = 0; i < attributes.length; i++) {
38 if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {// ok
39 } else if (!validAttribute.test(attributes[i])) {
40 return false;
41 }
42 }
43
44 for (var _i = 0; _i < data.length; _i++) {
45 if (!validData.test(data[_i])) {
46 return false;
47 }
48 }
49
50 return true;
51}
52
53module.exports = exports.default;
\No newline at end of file