Enumerable.opts.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const { capitalize, mapValues } = require('../../helpers');
  2. const typeDescr = ({ type, size = 0, memory = false }) => {
  3. memory |= size > 0;
  4. const name = [type == 'uint256' ? 'Uint' : capitalize(type), size].filter(Boolean).join('x');
  5. const base = size ? type : undefined;
  6. const typeFull = size ? `${type}[${size}]` : type;
  7. const typeLoc = memory ? `${typeFull} memory` : typeFull;
  8. return { name, type: typeFull, typeLoc, base, size, memory };
  9. };
  10. const toSetTypeDescr = value => ({
  11. name: value.name + 'Set',
  12. value,
  13. });
  14. const toMapTypeDescr = ({ key, value }) => ({
  15. name: `${key.name}To${value.name}Map`,
  16. keySet: toSetTypeDescr(key),
  17. key,
  18. value,
  19. });
  20. const SET_TYPES = [
  21. { type: 'bytes32' },
  22. { type: 'address' },
  23. { type: 'uint256' },
  24. { type: 'string', memory: true },
  25. { type: 'bytes', memory: true },
  26. ]
  27. .map(typeDescr)
  28. .map(toSetTypeDescr);
  29. const MAP_TYPES = []
  30. .concat(
  31. // value type maps
  32. ['uint256', 'address', 'bytes32']
  33. .flatMap((keyType, _, array) => array.map(valueType => ({ key: { type: keyType }, value: { type: valueType } })))
  34. .slice(0, -1), // remove bytes32 → bytes32 (last one) that is already defined
  35. // non-value type maps
  36. { key: { type: 'bytes', memory: true }, value: { type: 'bytes', memory: true } },
  37. )
  38. .map(entry => mapValues(entry, typeDescr))
  39. .map(toMapTypeDescr);
  40. module.exports = {
  41. SET_TYPES,
  42. MAP_TYPES,
  43. typeDescr,
  44. toSetTypeDescr,
  45. toMapTypeDescr,
  46. };