1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = isDataURI;
|
7 |
|
8 | var _assertString = _interopRequireDefault(require("./util/assertString"));
|
9 |
|
10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11 |
|
12 | var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i;
|
13 | var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i;
|
14 | var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;
|
15 |
|
16 | function 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') {
|
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 |
|
53 | module.exports = exports.default; |
\ | No newline at end of file |