isDataURI.js 1.3 KB

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