diff options
-rw-r--r-- | src/node-fallbacks/net.js | 58 | ||||
-rw-r--r-- | src/node_fallbacks.zig | 17 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/node-fallbacks/net.js b/src/node-fallbacks/net.js new file mode 100644 index 000000000..8f58ce134 --- /dev/null +++ b/src/node-fallbacks/net.js @@ -0,0 +1,58 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// IPv4 Segment +const v4Seg = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'; +const v4Str = `(${v4Seg}[.]){3}${v4Seg}`; +const IPv4Reg = new RegExp(`^${v4Str}$`); + +// IPv6 Segment +const v6Seg = '(?:[0-9a-fA-F]{1,4})'; +const IPv6Reg = new RegExp('^(' + + `(?:${v6Seg}:){7}(?:${v6Seg}|:)|` + + `(?:${v6Seg}:){6}(?:${v4Str}|:${v6Seg}|:)|` + + `(?:${v6Seg}:){5}(?::${v4Str}|(:${v6Seg}){1,2}|:)|` + + `(?:${v6Seg}:){4}(?:(:${v6Seg}){0,1}:${v4Str}|(:${v6Seg}){1,3}|:)|` + + `(?:${v6Seg}:){3}(?:(:${v6Seg}){0,2}:${v4Str}|(:${v6Seg}){1,4}|:)|` + + `(?:${v6Seg}:){2}(?:(:${v6Seg}){0,3}:${v4Str}|(:${v6Seg}){1,5}|:)|` + + `(?:${v6Seg}:){1}(?:(:${v6Seg}){0,4}:${v4Str}|(:${v6Seg}){1,6}|:)|` + + `(?::((?::${v6Seg}){0,5}:${v4Str}|(?::${v6Seg}){1,7}|:))` + +')(%[0-9a-zA-Z-.:]{1,})?$'); + +export function isIPv4(s) { + return IPv4Reg.test(s); +} + +export function isIPv6(s) { + return IPv6Reg.test(s); +} + +export function isIP(s) { + if (isIPv4(s)) return 4; + if (isIPv6(s)) return 6; + return 0; +} + +export default { + isIP, + isIPv4, + isIPv6, +}
\ No newline at end of file diff --git a/src/node_fallbacks.zig b/src/node_fallbacks.zig index d3ffad3a8..b08b24f57 100644 --- a/src/node_fallbacks.zig +++ b/src/node_fallbacks.zig @@ -14,6 +14,7 @@ const domain_code: string = @embedFile("./node-fallbacks/out/domain.js"); const events_code: string = @embedFile("./node-fallbacks/out/events.js"); const http_code: string = @embedFile("./node-fallbacks/out/http.js"); const https_code: string = @embedFile("./node-fallbacks/out/https.js"); +const net_code: string = @embedFile("./node-fallbacks/out/net.js"); const os_code: string = @embedFile("./node-fallbacks/out/os.js"); const path_code: string = @embedFile("./node-fallbacks/out/path.js"); const process_code: string = @embedFile("./node-fallbacks/out/process.js"); @@ -42,6 +43,7 @@ const domain_import_path = "/bun-vfs/node_modules/domain/index.js"; const events_import_path = "/bun-vfs/node_modules/events/index.js"; const http_import_path = "/bun-vfs/node_modules/http/index.js"; const https_import_path = "/bun-vfs/node_modules/https/index.js"; +const net_import_path = "/bun-vfs/node_modules/net/index.js"; const os_import_path = "/bun-vfs/node_modules/os/index.js"; const path_import_path = "/bun-vfs/node_modules/path/index.js"; const process_import_path = "/bun-vfs/node_modules/process/index.js"; @@ -142,6 +144,15 @@ const https_package_json = PackageJSON{ .browser_map = undefined, .source = logger.Source.initPathString("/bun-vfs/node_modules/https/package.json", ""), }; +const net_package_json = PackageJSON{ + .name = "net", + .version = "0.0.0-polyfill", + .module_type = .cjs, + .hash = @truncate(u32, std.hash.Wyhash.hash(0, "net@0.0.0-polyfill")), + .main_fields = undefined, + .browser_map = undefined, + .source = logger.Source.initPathString("/bun-vfs/node_modules/net/package.json", ""), +}; const os_package_json = PackageJSON{ .name = "os", .version = "0.0.0-polyfill", @@ -353,6 +364,11 @@ pub const FallbackModule = struct { .code = https_code, .package_json = &https_package_json, }; + pub const @"net" = FallbackModule{ + .path = Fs.Path.initWithNamespaceVirtual(net_import_path, "node", "net"), + .code = net_code, + .package_json = &net_package_json, + }; pub const @"os" = FallbackModule{ .path = Fs.Path.initWithNamespaceVirtual(os_import_path, "node", "os"), .code = os_code, @@ -454,6 +470,7 @@ pub const Map = ComptimeStringMap(FallbackModule, .{ &.{ "events", FallbackModule.events }, &.{ "http", FallbackModule.http }, &.{ "https", FallbackModule.https }, + &.{ "net", FallbackModule.net }, &.{ "os", FallbackModule.os }, &.{ "path", FallbackModule.path }, &.{ "process", FallbackModule.process }, |