sanitizer.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. var object, sanitizer,
  2. __hasProp = {}.hasOwnProperty;
  3. object = require('utila').object;
  4. module.exports = sanitizer = {
  5. sanitize: function(val) {
  6. return sanitizer._sanitizeAsChildren(val);
  7. },
  8. _sanitizeAsChildren: function(val) {
  9. var _ref;
  10. if (object.isBareObject(val)) {
  11. return sanitizer._sanitizeObjectAsChildren(val);
  12. } else if (Array.isArray(val)) {
  13. return sanitizer._sanitizeArrayAsChildren(val);
  14. } else if (val === null || typeof val === 'undefined') {
  15. return [];
  16. } else if ((_ref = typeof val) === 'string' || _ref === 'number') {
  17. return [String(val)];
  18. } else {
  19. throw Error("not a valid child node: `" + val);
  20. }
  21. },
  22. _sanitizeObjectAsChildren: function(o) {
  23. var a, cur, key, val;
  24. a = [];
  25. for (key in o) {
  26. if (!__hasProp.call(o, key)) continue;
  27. val = o[key];
  28. cur = {};
  29. cur[key] = sanitizer.sanitize(val);
  30. a.push(cur);
  31. }
  32. return a;
  33. },
  34. _sanitizeArrayAsChildren: function(a) {
  35. var ret, v, _i, _len;
  36. ret = [];
  37. for (_i = 0, _len = a.length; _i < _len; _i++) {
  38. v = a[_i];
  39. ret.push(sanitizer._sanitizeAsNode(v));
  40. }
  41. return ret;
  42. },
  43. _sanitizeAsNode: function(o) {
  44. var key, keys, obj, _ref;
  45. if ((_ref = typeof o) === 'string' || _ref === 'number') {
  46. return String(o);
  47. } else if (object.isBareObject(o)) {
  48. keys = Object.keys(o);
  49. if (keys.length !== 1) {
  50. throw Error("a node must only have one key as tag name");
  51. }
  52. key = keys[0];
  53. obj = {};
  54. obj[key] = sanitizer._sanitizeAsChildren(o[key]);
  55. return obj;
  56. } else {
  57. throw Error("not a valid node: `" + o + "`");
  58. }
  59. }
  60. };