ad673c7836feb973183fb7b3974181b5b8738ad96f0d8756e54afc751b031ab4d126e2c35d7ff2ba8e95ea254c44b48283840d21cae1750df39ec61e879d9f-exec 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. 'use strict';
  2. const RFC3986 = require('./rfc3986');
  3. const internals = {
  4. Ip: {
  5. cidrs: {
  6. ipv4: {
  7. required: '\\/(?:' + RFC3986.ipv4Cidr + ')',
  8. optional: '(?:\\/(?:' + RFC3986.ipv4Cidr + '))?',
  9. forbidden: ''
  10. },
  11. ipv6: {
  12. required: '\\/' + RFC3986.ipv6Cidr,
  13. optional: '(?:\\/' + RFC3986.ipv6Cidr + ')?',
  14. forbidden: ''
  15. },
  16. ipvfuture: {
  17. required: '\\/' + RFC3986.ipv6Cidr,
  18. optional: '(?:\\/' + RFC3986.ipv6Cidr + ')?',
  19. forbidden: ''
  20. }
  21. },
  22. versions: {
  23. ipv4: RFC3986.IPv4address,
  24. ipv6: RFC3986.IPv6address,
  25. ipvfuture: RFC3986.IPvFuture
  26. }
  27. }
  28. };
  29. internals.Ip.createIpRegex = function (versions, cidr) {
  30. let regex;
  31. for (let i = 0; i < versions.length; ++i) {
  32. const version = versions[i];
  33. if (!regex) {
  34. regex = '^(?:' + internals.Ip.versions[version] + internals.Ip.cidrs[version][cidr];
  35. }
  36. else {
  37. regex += '|' + internals.Ip.versions[version] + internals.Ip.cidrs[version][cidr];
  38. }
  39. }
  40. return new RegExp(regex + ')$');
  41. };
  42. module.exports = internals.Ip;