From a4243a38132d46bd8619747a8c0de510aa369855 Mon Sep 17 00:00:00 2001 From: Elliott Stoneham Date: Wed, 29 Nov 2017 12:54:27 +0000 Subject: [PATCH] remove net when targeting JS --- node.go | 28 +++++++++------------------- node_js.go | 12 ++++++++++++ node_net.go | 33 +++++++++++++++++++++++++++++++++ uuid_test.go | 13 +++++++++---- 4 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 node_js.go create mode 100644 node_net.go diff --git a/node.go b/node.go index f2c2765..384f07d 100644 --- a/node.go +++ b/node.go @@ -5,16 +5,14 @@ package uuid import ( - "net" "sync" ) var ( - nodeMu sync.Mutex - interfaces []net.Interface // cached list of interfaces - ifname string // name of interface being used - nodeID [6]byte // hardware for version 1 UUIDs - zeroID [6]byte // nodeID with only 0's + nodeMu sync.Mutex + ifname string // name of interface being used + nodeID [6]byte // hardware for version 1 UUIDs + zeroID [6]byte // nodeID with only 0's ) // NodeInterface returns the name of the interface from which the NodeID was @@ -39,20 +37,12 @@ func SetNodeInterface(name string) bool { } func setNodeInterface(name string) bool { - if interfaces == nil { - var err error - interfaces, err = net.Interfaces() - if err != nil && name != "" { - return false - } - } - for _, ifs := range interfaces { - if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) { - copy(nodeID[:], ifs.HardwareAddr) - ifname = ifs.Name - return true - } + iname, addr := getHardwareInterface(name) // null implementation for js + if iname != "" && addr != nil { + ifname = iname + copy(nodeID[:], addr) + return true } // We found no interfaces with a valid hardware address. If name diff --git a/node_js.go b/node_js.go new file mode 100644 index 0000000..24b78ed --- /dev/null +++ b/node_js.go @@ -0,0 +1,12 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build js + +package uuid + +// getHardwareInterface returns nil values for the JS version of the code. +// This remvoves the "net" dependency, because it is not used in the browser. +// Using the "net" library inflates the size of the transpiled JS code by 673k bytes. +func getHardwareInterface(name string) (string, []byte) { return "", nil } diff --git a/node_net.go b/node_net.go new file mode 100644 index 0000000..0cbbcdd --- /dev/null +++ b/node_net.go @@ -0,0 +1,33 @@ +// Copyright 2017 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !js + +package uuid + +import "net" + +var interfaces []net.Interface // cached list of interfaces + +// getHardwareInterface returns the name and hardware address of interface name. +// If name is "" then the name and hardware address of one of the system's +// interfaces is returned. If no interfaces are found (name does not exist or +// there are no interfaces) then "", nil is returned. +// +// Only addresses of at least 6 bytes are returned. +func getHardwareInterface(name string) (string, []byte) { + if interfaces == nil { + var err error + interfaces, err = net.Interfaces() + if err != nil { + return "", nil + } + } + for _, ifs := range interfaces { + if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) { + return ifs.Name, ifs.HardwareAddr + } + } + return "", nil +} diff --git a/uuid_test.go b/uuid_test.go index 042b84e..c0a89f4 100644 --- a/uuid_test.go +++ b/uuid_test.go @@ -8,6 +8,7 @@ import ( "bytes" "fmt" "os" + "runtime" "strings" "testing" "time" @@ -321,8 +322,10 @@ func TestNode(t *testing.T) { if !SetNodeInterface("") { t.Error("SetNodeInterface failed") } - if ni := NodeInterface(); ni == "" { - t.Error("NodeInterface returned an empty string") + if runtime.GOARCH != "js" { + if ni := NodeInterface(); ni == "" { + t.Error("NodeInterface returned an empty string") + } } ni := NodeID() @@ -391,8 +394,10 @@ func TestNodeID(t *testing.T) { nid := []byte{1, 2, 3, 4, 5, 6} SetNodeInterface("") s := NodeInterface() - if s == "" || s == "user" { - t.Errorf("NodeInterface %q after SetInterface", s) + if runtime.GOARCH != "js" { + if s == "" || s == "user" { + t.Errorf("NodeInterface %q after SetInterface", s) + } } node1 := NodeID() if node1 == nil {