Lutz Roeder 6 лет назад
Родитель
Сommit
e329899317
16 измененных файлов с 231 добавлено и 178 удалено
  1. 5 3
      src/caffe.js
  2. 4 4
      src/chainer.js
  3. 18 11
      src/cntk.js
  4. 14 8
      src/coreml.js
  5. 7 5
      src/darknet.js
  6. 5 5
      src/mnn.js
  7. 12 11
      src/mxnet.js
  8. 26 15
      src/ncnn.js
  9. 5 3
      src/numpy.js
  10. 9 5
      src/onnx.js
  11. 7 4
      src/sklearn.js
  12. 15 10
      src/torch.js
  13. 2 2
      src/torchscript.js
  14. 79 73
      src/view.js
  15. 9 5
      src/zip.js
  16. 14 14
      tools/update_pbjs.js

+ 5 - 3
src/caffe.js

@@ -418,13 +418,14 @@ caffe.Node = class {
         this._attributes = [];
 
         switch (version) {
-            case 0:
+            case 0: {
                 this._name = layer.layer.name;
                 this._type = layer.layer.type;
                 break;
-            case 1:
+            }
+            case 1: {
                 this._name = layer.name;
-                var typeIndex = layer.type;
+                const typeIndex = layer.type;
                 if (typeIndex === undefined) {
                     this._type = '?';
                 }
@@ -442,6 +443,7 @@ caffe.Node = class {
                     this._type = caffe.Node._operatorMap[typeIndex] || typeIndex.toString();
                 }
                 break;
+            }
             case 2:
                 this._name = layer.name;
                 this._type = layer.type;

+ 4 - 4
src/chainer.js

@@ -169,13 +169,13 @@ chainer.ModelFactory = class {
                         if (!entry.name.endsWith('.npy')) {
                             throw new chainer.Error("Invalid file name '" + entry.name + "'.");
                         }
-                        var id = entry.name.split('/');
+                        const id = entry.name.split('/');
                         if (id.length != 2) {
                             throw new chainer.Error("Invalid parameter name '" + entry.name + "'.");
                         }
-                        var moduleName = id[0];
-                        var parameterName = id[1].substring(0, id[1].length - 4);
-                        var module = null;
+                        const moduleName = id[0];
+                        const parameterName = id[1].substring(0, id[1].length - 4);
+                        let module = null;
                         if (map.has(id[0])) {
                             module = map.get(moduleName);
                         }

+ 18 - 11
src/cntk.js

@@ -150,9 +150,9 @@ cntk.Graph = class {
 
         let args = {};
         switch (version) {
-            case 1:
+            case 1: {
                 for (let name of Object.keys(obj.nodes)) {
-                    let node = obj.nodes[name];
+                    const node = obj.nodes[name];
                     switch (node.__type__) {
                         case 'InputValue':
                             this._inputs.push(new cntk.Parameter(node.name, [ 
@@ -165,7 +165,7 @@ cntk.Graph = class {
                     }
                 }
                 for (let name of Object.keys(obj.nodes)) {
-                    let node = obj.nodes[name];
+                    const node = obj.nodes[name];
                     if (node.__type__ != 'InputValue' && node.__type__ != 'LearnableParameter') {
                         this._nodes.push(new cntk.Node(metadata, version, node, args));
                     }
@@ -178,12 +178,13 @@ cntk.Graph = class {
                     }
                 }
                 break;
-            case 2:
-                var nodeMap = {};
+            }
+            case 2: {
+                let nodeMap = {};
                 for (let node of obj.primitive_functions) {
                     nodeMap[node.uid] = node;
                 }
-                var argumentNames = {};
+                let argumentNames = {};
                 for (let input of obj.inputs) {
                     let argument = new cntk.Argument(version, input);
                     args[input.uid] = argument;
@@ -226,6 +227,7 @@ cntk.Graph = class {
                     }
                 }
                 break;
+            }
             default:
                 throw new cntk.Error("Unsupported graph version '" + version + "'.");
         }
@@ -372,7 +374,7 @@ cntk.Node = class {
         let initializers = [];
 
         switch (version) {
-            case 1:
+            case 1: {
                 this._operator = obj.__type__;
                 this._name = obj.name;
                 for (let attributeName of Object.keys(obj)) {
@@ -388,9 +390,10 @@ cntk.Node = class {
                 });
                 outputs = [ new cntk.Argument(version, this._name) ];
                 break;
-            case 2:
+            }
+            case 2: {
                 this._name = obj.name || obj.uid || null;
-                var output = obj.uid;
+                const output = obj.uid;
                 if (obj.op == 57) {
                     this._operator = 'Block';
                     if (obj.block_function_op_name) {
@@ -435,6 +438,8 @@ cntk.Node = class {
                 }
                 outputs.push(new cntk.Argument(version, output + '_Output_0'));
                 inputs = inputs.concat(initializers);
+                break;
+            }
         }
 
         let inputIndex = 0;
@@ -1374,9 +1379,10 @@ cntk_v1.Matrix = class {
     constructor(reader) {
         let type = reader.byte();
         switch (type) {
-            case 100: // dense
+            case 100: { 
+                // dense
                 reader.assert('BMAT');
-                var elsize = reader.uint64();
+                const elsize = reader.uint64();
                 this.name = reader.string();
                 this.format = reader.uint32();
                 this.rows = reader.uint64();
@@ -1384,6 +1390,7 @@ cntk_v1.Matrix = class {
                 reader.bytes(elsize * this.rows * this.columns);
                 reader.assert('EMAT');
                 break;
+            }
             case 115: // sparse
                 throw new cntk_v1.Error('Matrix sparse type not implemented.');
             default:

+ 14 - 8
src/coreml.js

@@ -440,12 +440,12 @@ coreml.Graph = class {
         let result = '?';
         if (type) {
             switch (type.Type) {
-                case 'multiArrayType':
-                    var shape = new coreml.TensorShape([]);
+                case 'multiArrayType': {
+                    let shape = new coreml.TensorShape([]);
                     if (type.multiArrayType.shape && type.multiArrayType.shape.length > 0) {
                         shape = new coreml.TensorShape(type.multiArrayType.shape);
                     }
-                    var dataType = '?';
+                    let dataType = '?';
                     switch (type.multiArrayType.dataType) {
                         case coreml.proto.ArrayFeatureType.ArrayDataType.FLOAT32:
                             dataType = 'float32';
@@ -459,21 +459,27 @@ coreml.Graph = class {
                     }
                     result = new coreml.TensorType(dataType, shape);
                     break;
-                case 'stringType':
+                }
+                case 'stringType': {
                     result = new coreml.TensorType('string');
                     break;
-                case 'doubleType':
+                }
+                case 'doubleType': {
                     result = new coreml.TensorType('float64');
                     break;
-                case 'int64Type':
+                }
+                case 'int64Type': {
                     result = new coreml.TensorType('int64');
                     break;
-                case 'dictionaryType':
+                }
+                case 'dictionaryType': {
                     result = new coreml.MapType(type.dictionaryType.KeyType.replace('KeyType', ''), 'float64');
                     break;
-                case 'imageType':
+                }
+                case 'imageType': {
                     result = new coreml.ImageType(type.imageType.colorSpace, type.imageType.width, type.imageType.height);
                     break;
+                }
             }
             if (type.isOptional) {
                 result = new coreml.OptionalType(result);

+ 7 - 5
src/darknet.js

@@ -84,17 +84,18 @@ darknet.Graph = class {
             layer._inputs = inputs;
             inputs = [ i.toString() ];
             switch (layer.__type__) {
-                case 'shortcut':
-                    var from = Number.parseInt(layer.from, 10);
+                case 'shortcut': {
+                    let from = Number.parseInt(layer.from, 10);
                     from = (from >= 0) ? from : (i + from);
-                    var shortcut = cfg[from];
+                    const shortcut = cfg[from];
                     if (shortcut) {
                         layer._inputs.push(shortcut._outputs[0]);
                     }
                     break;
-                case 'route':
+                }
+                case 'route': {
                     layer._inputs = [];
-                    var routes = layer.layers.split(',').map((route) => Number.parseInt(route.trim(), 10));
+                    const routes = layer.layers.split(',').map((route) => Number.parseInt(route.trim(), 10));
                     for (let j = 0; j < routes.length; j++) {
                         const index = (routes[j] < 0) ? i + routes[j] : routes[j];
                         const route = cfg[index];
@@ -103,6 +104,7 @@ darknet.Graph = class {
                         }
                     }
                     break;
+                }
             }
         }
         for (let i = 0; i < cfg.length; i++) {

+ 5 - 5
src/mnn.js

@@ -80,7 +80,7 @@ mnn.Graph = class {
         this._nodes = [];
         this._inputs = [];
         this._outputs = [];
-        var inputSet = new Set();
+        let inputSet = new Set();
         for (let i = 0; i < net.oplistsLength(); i++) {
             const op = net.oplists(i);
             if (mnn.schema.OpTypeName[op.type()] === 'Input') {
@@ -307,7 +307,7 @@ mnn.Node = class {
             }
 
             if (parameter[attributeName] && typeof parameter[attributeName] == 'function') {
-                var value = null;
+                let value = null;
                 if (attributeArrayNamesMap[attributeName]) {
                     let array = [];
                     const length = parameter[attributeName + 'Length']();
@@ -334,8 +334,8 @@ mnn.Node = class {
     
     static _findParameterClassName(opParameterObject) {
         const keys = Object.getOwnPropertyNames(mnn.schema);
-        for (var key of keys) {
-            var cls = mnn.schema[key];
+        for (let key of keys) {
+            const cls = mnn.schema[key];
             if (typeof cls === "function" && opParameterObject instanceof cls) {
                 return key;
             }
@@ -527,7 +527,7 @@ mnn.Tensor = class {
         if (shape.length == 0) {
             shape = [ 1 ];
         }
-        var results = [];
+        let results = [];
         let size = shape[dimension];
         if (dimension == shape.length - 1) {
             for (let i = 0; i < size; i++) {

+ 12 - 11
src/mxnet.js

@@ -87,8 +87,8 @@ mxnet.ModelFactory = class {
                     return this._openModel(identifier, format, null, null, null, params, host);
                 }
             case 'mar':
-            case 'model':
-                var entries = new Map();
+            case 'model': {
+                let entries = new Map();
                 try {
                     for (let entry of context.entries) {
                         entries.set(entry.name, entry);
@@ -98,8 +98,8 @@ mxnet.ModelFactory = class {
                     throw new mxnet.Error('Failed to decompress ZIP archive. ' + err.message);
                 }
 
-                var manifestEntry = entries.get(entries.has('MANIFEST.json') ? 'MANIFEST.json' : 'MAR-INF/MANIFEST.json');
-                var rootFolder = '';
+                let manifestEntry = entries.get(entries.has('MANIFEST.json') ? 'MANIFEST.json' : 'MAR-INF/MANIFEST.json');
+                let rootFolder = '';
                 if (!manifestEntry) {
                     const folders = Array.from(entries.keys()).filter((name) => name.endsWith('/')).filter((name) => entries.get(name + 'MANIFEST.json'));
                     if (folders.length != 1) {
@@ -109,8 +109,8 @@ mxnet.ModelFactory = class {
                     manifestEntry = entries.get(rootFolder + 'MANIFEST.json');
                 }
 
-                var decoder = new TextDecoder('utf-8');
-                var manifest = null;
+                const decoder = new TextDecoder('utf-8');
+                let manifest = null;
                 try {
                     manifest = JSON.parse(decoder.decode(manifestEntry.data));
                 }
@@ -118,10 +118,10 @@ mxnet.ModelFactory = class {
                     throw new mxnet.Error('Failed to read manifest. ' + err.message);
                 }
 
-                var modelFormat = null;
-                var symbolEntry = null;
-                var signatureEntry = null;
-                var paramsEntry = null;
+                let modelFormat = null;
+                let symbolEntry = null;
+                let signatureEntry = null;
+                let paramsEntry = null;
                 if (manifest.Model) {
                     modelFormat = manifest.Model['Model-Format'];
                     if (modelFormat && modelFormat != 'MXNet-Symbolic') {
@@ -188,7 +188,7 @@ mxnet.ModelFactory = class {
                 if (paramsEntry) {
                     params = paramsEntry.data;
                 }
-                var signature = null;
+                let signature = null;
                 try {
                     if (signatureEntry) {
                         signature = JSON.parse(decoder.decode(signatureEntry.data));
@@ -206,6 +206,7 @@ mxnet.ModelFactory = class {
                     message = message.endsWith('.') ? message.substring(0, message.length - 1) : message;
                     throw new mxnet.Error(message + " in '" + identifier + "'.");
                 }
+            }
             default:
                 throw new mxnet.Error('Unsupported file extension.');
         }

+ 26 - 15
src/ncnn.js

@@ -189,7 +189,7 @@ ncnn.Graph = class {
             throw new ncnn.Error('Invalid signature.')
         }
         const layerCount = reader.int32();
-        /* var blobCount = */ reader.int32();
+        /* const blobCount = */ reader.int32();
         let layers = [];
         for (let i = 0; i < layerCount; i++) {
             let layer = {};
@@ -375,7 +375,7 @@ ncnn.Node = class {
         let scale_data_size;
         let bias_data_size;
         switch (this._operator) {
-            case 'BatchNorm':
+            case 'BatchNorm': {
                 channels = parseInt(layer.attr['0'] || 0, 10);
                 this._weight(blobReader, 'slope', [ channels ], 'float32');
                 this._weight(blobReader, 'mean', [ channels ], 'float32');
@@ -383,7 +383,8 @@ ncnn.Node = class {
                 this._weight(blobReader, 'bias', [ channels ], 'float32');
                 blobReader.next();
                 break;
-            case 'InnerProduct':
+            }
+            case 'InnerProduct': {
                 num_output = parseInt(layer.attr['0'] || 0, 10);
                 weight_data_size = parseInt(layer.attr['2'] || 0, 10);
                 this._weight(blobReader, 'weight', [ num_output, weight_data_size / num_output ]);
@@ -392,12 +393,14 @@ ncnn.Node = class {
                 }
                 blobReader.next();
                 break;
-            case 'Bias':
+            }
+            case 'Bias': {
                 bias_data_size = parseInt(layer.attr['0'] || 0, 10);
                 this._weight(blobReader, 'bias', [ bias_data_size ], 'float32');
                 blobReader.next();
                 break;
-            case 'Embed':
+            }
+            case 'Embed': {
                 num_output = parseInt(layer.attr['0'] || 0, 10);
                 weight_data_size = parseInt(layer.attr['3'] || 0, 10);
                 this._weight(blobReader, 'weight', [ weight_data_size ]);
@@ -406,13 +409,14 @@ ncnn.Node = class {
                 }
                 blobReader.next();
                 break;
+            }
             case 'Convolution':
             case 'ConvolutionDepthWise':
             case 'Deconvolution':
-            case 'DeconvolutionDepthWise':
+            case 'DeconvolutionDepthWise': {
                 num_output = parseInt(layer.attr['0'] || 0, 10);
-                var kernel_w = parseInt(layer.attr['1'] || 0, 10);
-                var kernel_h = parseInt(layer.attr['1'] || kernel_w, 10);
+                const kernel_w = parseInt(layer.attr['1'] || 0, 10);
+                const kernel_h = parseInt(layer.attr['1'] || kernel_w, 10);
                 weight_data_size = parseInt(layer.attr['6'] || 0, 10);
                 this._weight(blobReader, 'weight', [ num_output, weight_data_size / ( num_output * kernel_w * kernel_h), kernel_w, kernel_h ]);
                 if (layer.attr['5'] == '1') {
@@ -420,27 +424,31 @@ ncnn.Node = class {
                 }
                 blobReader.next();
                 break;
-            case 'Dequantize':
+            }
+            case 'Dequantize': {
                 if (layer.attr['1'] == '1') {
                     bias_data_size = parseInt(layer.attr['2'] || 0, 10);
                     this._weight(blobReader, 'bias', [ bias_data_size ], 'float32');
                 }
                 blobReader.next();
                 break;
-            case 'Requantize':
+            }
+            case 'Requantize': {
                 if (layer.attr['2'] == '1') {
                     bias_data_size = parseInt(layer.attr['3'] || 0, 10);
                     this._weight(blobReader, 'bias', [ bias_data_size ], 'float32');
                 }
                 blobReader.next();
                 break;
-            case 'InstanceNorm':
+            }
+            case 'InstanceNorm': {
                 channels = parseInt(layer.attr['0'] || 0, 10);
                 this._weight(blobReader, 'gamma', [ channels ], 'float32');
                 this._weight(blobReader, 'beta', [ channels ], 'float32');
                 blobReader.next();
                 break;
-            case 'Scale':
+            }
+            case 'Scale': {
                 scale_data_size = parseInt(layer.attr['0'] || 0, 10);
                 if (scale_data_size != -233) {
                     this._weight(blobReader, 'scale', [ scale_data_size], 'float32');
@@ -450,16 +458,19 @@ ncnn.Node = class {
                     blobReader.next();
                 }
                 break;
-            case 'Normalize':
+            }
+            case 'Normalize': {
                 scale_data_size = parseInt(layer.attr['3'] || 0, 10);
                 this._weight(blobReader, 'scale', [ scale_data_size ], 'float32');
                 blobReader.next();
                 break;
-            case 'PReLU':
-                var num_slope = parseInt(layer.attr['0'] || 0, 10);
+            }
+            case 'PReLU': {
+                const num_slope = parseInt(layer.attr['0'] || 0, 10);
                 this._weight(blobReader, 'slope', [ num_slope ], 'float32');
                 blobReader.next();
                 break;
+            }
         }
     }
 

+ 5 - 3
src/numpy.js

@@ -30,22 +30,24 @@ numpy.Array = class {
             this._shape = header.shape;
             this._byteOrder = header.descr[0];
             switch (this._byteOrder) {
-                case '|':
+                case '|': {
                     this._dataType = header.descr.substring(1);
                     this._data = reader.bytes(reader.size - reader.position);
                     break;
+                }
                 case '>':
-                case '<':
+                case '<': {
                     if (header.descr.length !== 3) {
                         throw new numpy.Error("Unsupported data type '" + header.descr + "'.");
                     }
                     this._dataType = header.descr.substring(1);
-                    var size = parseInt(header.descr[2]);
+                    let size = parseInt(header.descr[2]);
                     for (let dimension of this._shape) {
                         size *= dimension;
                     }
                     this._data = reader.bytes(size);
                     break;
+                }
                 default:
                     throw new numpy.Error("Unsupported data type '" + header.descr + "'.");
             }

+ 9 - 5
src/onnx.js

@@ -1017,20 +1017,24 @@ onnx.Tensor = class {
         }
         switch (type.value) {
             case 'tensor_type':
-            case 'sparse_tensor_type':
-                var shape = [];
+            case 'sparse_tensor_type': {
+                let shape = [];
                 if (type.tensor_type.shape && type.tensor_type.shape.dim) {
                     shape = type.tensor_type.shape.dim.map((dim) => {
                         return dim.dim_param ? dim.dim_param : dim.dim_value;
                     });
                 }
                 return new onnx.TensorType(type.tensor_type.elem_type, new onnx.TensorShape(shape), denotation);
-            case 'map_type':
+            }
+            case 'map_type': {
                 return new onnx.MapType(type.map_type.key_type, onnx.Tensor._formatType(type.map_type.value_type, imageFormat), denotation);
-            case 'sequence_type':
+            }
+            case 'sequence_type': {
                 return new onnx.SequenceType(onnx.Tensor._formatType(type.sequence_type.elem_type, imageFormat), denotation);
-            case 'opaque_type':
+            }
+            case 'opaque_type': {
                 return new onnx.OpaqueType(type.opaque_type.domain, type.opaque_type.name);
+            }
         }
         return null;
     }

+ 7 - 4
src/sklearn.js

@@ -738,16 +738,18 @@ sklearn.Attribute = class {
             case '[object RegExp]':
             case '[object String]':
                 return '' + a === '' + b;
-            case '[object Number]':
+            case '[object Number]': {
                 if (+a !== +a) {
                     return +b !== +b;
                 }
                 return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+            }
             case '[object Date]':
-            case '[object Boolean]':
+            case '[object Boolean]': {
                 return +a === +b;
-            case '[object Array]':
-                var length = a.length;
+            }
+            case '[object Array]': {
+                let length = a.length;
                 if (length !== b.length) {
                     return false;
                 }
@@ -757,6 +759,7 @@ sklearn.Attribute = class {
                     }
                 }
                 return true;
+            }
         }
 
         let keys = Object.keys(a);

+ 15 - 10
src/torch.js

@@ -110,11 +110,11 @@ torch.Graph = class {
         let subInputs;
         let subOutputs;
         switch (module.__type__) {
-            case 'nn.Sequential':
+            case 'nn.Sequential': {
                 groups.push(key);
                 subInputs = inputs;
                 subOutputs = [];
-                var length = module.modules.length;
+                const length = module.modules.length;
                 index = 0;
                 for (subModule of module.modules) {
                     if (index == length - 1) {
@@ -127,12 +127,13 @@ torch.Graph = class {
                 }
                 groups.pop();
                 break;
+            }
             case 'nn.Parallel':
             case 'nn.ParallelTable':
-            case 'nn.JointTrain':
+            case 'nn.JointTrain': {
                 groups.push(key);
-                var newInputs = [];
-                var newOutputs = [];
+                let newInputs = [];
+                let newOutputs = [];
                 index = 0;
                 for (subModule of module.modules) {
                     subInputs = [].concat(inputs);
@@ -152,13 +153,14 @@ torch.Graph = class {
                 }
                 groups.pop();
                 break;
+            }
             case 'nn.Concat':
-            case 'nn.ConcatTable':
-                var prefix = key;
+            case 'nn.ConcatTable': {
+                const prefix = key;
                 if (inputs.length == 0) {
                     inputs.push(new torch.Argument(groups.join('/') + ':' + key + ':in', null, null));
                 }
-                var concatInputs = [];
+                let concatInputs = [];
                 index = 0;
                 for (subModule of module.modules) {
                     let streamInputs = inputs.map((input) => input);
@@ -171,16 +173,19 @@ torch.Graph = class {
                 delete module.dimension;
                 this._createNode(metadata, module, groups, key, concatInputs, outputs);
                 break;
-            case 'nn.Inception':
+            }
+            case 'nn.Inception': {
                 delete module.modules; // TODO
                 delete module.module; // TODO
                 delete module.transfer; // TODO
                 delete module.pool; // TODO
                 this._createNode(metadata, module, groups, key, inputs, outputs);
                 break;
-            default:
+            }
+            default: {
                 this._createNode(metadata, module, groups, key, inputs, outputs);
                 break;
+            }
         }
     }
 

+ 2 - 2
src/torchscript.js

@@ -407,7 +407,7 @@ torchscript.Graph = class {
             if (module.__type__) {
                 for (let key of Object.keys(module)) {
                     if (torchscript.Graph._isTensor(module[key])) {
-                        var parameter = module[key];
+                        const parameter = module[key];
                         parameter.__name__ = key;
                         parameters.push(parameter);
                     }
@@ -1555,7 +1555,7 @@ torchscript.GraphContext = class {
     }
 
     _submodule(module, name) {
-        var obj = module[name];
+        const obj = module[name];
         if (obj && (!obj.__type__ || !obj.__type__.endsWith('Tensor'))) {
             return obj;
         }

+ 79 - 73
src/view.js

@@ -450,7 +450,7 @@ view.View = class {
                         if (node.group) {
                             let path = node.group.split('/');
                             while (path.length > 0) {
-                                var name = path.join('/');
+                                const name = path.join('/');
                                 path.pop();
                                 clusterParentMap[name] = path.join('/');
                             }
@@ -458,21 +458,21 @@ view.View = class {
                     }
                 }
 
-                var self = this;
+                const self = this;
                 for (let node of nodes) {
     
-                    var element = new grapher.NodeElement(this._host.document);
+                    let element = new grapher.NodeElement(this._host.document);
 
-                    var addNode = function(element, node, edges) {
+                    const addNode = function(element, node, edges) {
 
-                        var header =  element.block('header');
-                        var styles = [ 'node-item-operator' ];
-                        var category = node.category;
+                        let header =  element.block('header');
+                        let styles = [ 'node-item-operator' ];
+                        const category = node.category;
                         if (category) {
                             styles.push('node-item-operator-' + category.toLowerCase());
                         }
-                        var content = self.showNames && node.name ? node.name : node.operator;
-                        var tooltip = self.showNames && node.name ? node.operator : node.name;
+                        const content = self.showNames && node.name ? node.name : node.operator;
+                        const tooltip = self.showNames && node.name ? node.operator : node.name;
                         header.add(null, styles, content, tooltip, () => { 
                             self.showNodeProperties(node, null);
                         });
@@ -483,10 +483,10 @@ view.View = class {
                             });
                         }
 
-                        var initializers = [];
-                        var hiddenInitializers = false;
+                        let initializers = [];
+                        let hiddenInitializers = false;
                         if (self._showInitializers) {
-                            for (var input of node.inputs) {
+                            for (let input of node.inputs) {
                                 if (input.visible && input.arguments.length == 1 && input.arguments[0].initializer != null) {
                                     initializers.push(input);
                                 }
@@ -496,20 +496,20 @@ view.View = class {
                                 }
                             }
                         }
-                        var attributes = [];
+                        let attributes = [];
                         if (self.showAttributes && node.attributes) {
                             attributes = node.attributes.filter((attribute) => attribute.visible);
                         }
                         if (initializers.length > 0 || hiddenInitializers || attributes.length > 0) {
-                            var block = element.block('list');
+                            let block = element.block('list');
                             block.handler = () => {
                                 self.showNodeProperties(node);
                             };
-                            for (var initializer of initializers) {
-                                var argument = initializer.arguments[0];
-                                var type = argument.type;
-                                var shape = '';
-                                var separator = '';
+                            for (let initializer of initializers) {
+                                const argument = initializer.arguments[0];
+                                const type = argument.type;
+                                let shape = '';
+                                let separator = '';
                                 if (type &&
                                     type.shape && 
                                     type.shape.dimensions && 
@@ -529,9 +529,9 @@ view.View = class {
                                 block.add(null, '\u3008' + '\u2026' + '\u3009', '', null, '');
                             }
 
-                            for (var attribute of attributes) {
+                            for (let attribute of attributes) {
                                 if (attribute.visible) {
-                                    var attributeValue = sidebar.NodeSidebar.formatAttributeValue(attribute.value, attribute.type);
+                                    let attributeValue = sidebar.NodeSidebar.formatAttributeValue(attribute.value, attribute.type);
                                     if (attributeValue && attributeValue.length > 25) {
                                         attributeValue = attributeValue.substring(0, 25) + '\u2026';
                                     }
@@ -541,11 +541,11 @@ view.View = class {
                         }
 
                         if (edges) {
-                            var inputs = node.inputs;
-                            for (input of inputs) {
-                                for (argument of input.arguments) {
+                            const inputs = node.inputs;
+                            for (let input of inputs) {
+                                for (let argument of input.arguments) {
                                     if (argument.id != '' && !argument.initializer) {
-                                        var tuple = edgeMap[argument.id];
+                                        let tuple = edgeMap[argument.id];
                                         if (!tuple) {
                                             tuple = { from: null, to: [] };
                                             edgeMap[argument.id] = tuple;
@@ -557,17 +557,17 @@ view.View = class {
                                     }
                                 }
                             }
-                            var outputs = node.outputs;
+                            let outputs = node.outputs;
                             if (node.chain && node.chain.length > 0) {
-                                var chainOutputs = node.chain[node.chain.length - 1].outputs;
+                                const chainOutputs = node.chain[node.chain.length - 1].outputs;
                                 if (chainOutputs.length > 0) {
                                     outputs = chainOutputs;
                                 }
                             }
                             for (let output of outputs) {
-                                for (argument of output.arguments) {
+                                for (let argument of output.arguments) {
                                     if (argument.id != '') {
-                                        tuple = edgeMap[argument.id];
+                                        let tuple = edgeMap[argument.id];
                                         if (!tuple) {
                                             tuple = { from: null, to: [] };
                                             edgeMap[argument.id] = tuple;
@@ -583,7 +583,7 @@ view.View = class {
                         }
     
                         if (node.chain && node.chain.length > 0) {
-                            for (var innerNode of node.chain) {
+                            for (let innerNode of node.chain) {
                                 addNode(element, innerNode, false);
                             }
                         }
@@ -596,7 +596,7 @@ view.View = class {
                     addNode(element, node, true);
 
                     if (node.controlDependencies && node.controlDependencies.length > 0) {
-                        for (var controlDependency of node.controlDependencies) {
+                        for (let controlDependency of node.controlDependencies) {
                             let tuple = edgeMap[controlDependency];
                             if (!tuple) {
                                 tuple = { from: null, to: [] };
@@ -610,7 +610,7 @@ view.View = class {
                         }
                     }
 
-                    var nodeName = node.name;
+                    const nodeName = node.name;
                     if (nodeName) {
                         g.setNode(nodeId, { label: element.format(graphElement), id: 'node-' + nodeName });
                     }
@@ -619,11 +619,11 @@ view.View = class {
                         id++;
                     }
             
-                    var createCluster = function(name) {
+                    const createCluster = function(name) {
                         if (!clusterMap[name]) {
                             g.setNode(name, { rx: 5, ry: 5});
                             clusterMap[name] = true;
-                            var parent = clusterParentMap[name];
+                            const parent = clusterParentMap[name];
                             if (parent) {
                                 createCluster(parent);
                                 g.setParent(name, parent);
@@ -632,10 +632,10 @@ view.View = class {
                     }
     
                     if (groups) {
-                        var groupName = node.group;
+                        let groupName = node.group;
                         if (groupName && groupName.length > 0) {
                             if (!Object.prototype.hasOwnProperty.call(clusterParentMap, groupName)) {
-                                var lastIndex = groupName.lastIndexOf('/');
+                                const lastIndex = groupName.lastIndexOf('/');
                                 if (lastIndex != -1) {
                                     groupName = groupName.substring(0, lastIndex);
                                     if (!Object.prototype.hasOwnProperty.call(clusterParentMap, groupName)) {
@@ -765,11 +765,11 @@ view.View = class {
                     let inputElements = graphElement.getElementsByClassName('graph-input');
 
                     switch (this._host.environment('zoom')) {
-                        case 'scroll':
-                            var size = graphElement.getBBox();
-                            var margin = 100;
-                            var width = Math.ceil(margin + size.width + margin);
-                            var height = Math.ceil(margin + size.height + margin);
+                        case 'scroll': {
+                            const size = graphElement.getBBox();
+                            let margin = 100;
+                            const width = Math.ceil(margin + size.width + margin);
+                            const height = Math.ceil(margin + size.height + margin);
                             originElement.setAttribute('transform', 'translate(' + margin.toString() + ', ' + margin.toString() + ') scale(1)');
                             backgroundElement.setAttribute('width', width);
                             backgroundElement.setAttribute('height', height);
@@ -792,8 +792,9 @@ view.View = class {
                                 // this._zoom.transform(svg, d3.zoomIdentity.translate((svgSize.width - g.graph().width) / 2, (svgSize.height - g.graph().height) / 2));
                             }
                             break;
-                        case 'd3':
-                            var svgSize = graphElement.getBoundingClientRect();
+                        }
+                        case 'd3': {
+                            const svgSize = graphElement.getBoundingClientRect();
                             if (inputElements && inputElements.length > 0) {
                                 // Center view based on input elements
                                 let xs = [];
@@ -814,6 +815,7 @@ view.View = class {
                                 this._zoom.transform(svg, d3.zoomIdentity.translate((svgSize.width - g.graph().width) / 2, (svgSize.height - g.graph().height) / 2));
                             }
                             break;
+                        }
                     }
                     return;
                 });
@@ -1042,10 +1044,10 @@ class ModelContext {
             try {
                 let reader = null;
                 switch (extension) {
-                    case 'pbtxt':
-                        var b = this.buffer;
-                        var length = b.length;
-                        var signature = 
+                    case 'pbtxt': {
+                        let b = this.buffer;
+                        const length = b.length;
+                        const signature = 
                             (length >= 3 && b[0] === 0xef && b[1] === 0xbb && b[2] === 0xbf) ||
                             (length >= 4 && b[0] === 0x00 && b[1] === 0x00 && b[2] === 0xfe && b[3] === 0xff) ||
                             (length >= 4 && b[0] === 0xff && b[1] === 0xfe && b[2] === 0x00 && b[3] === 0x00) ||
@@ -1063,10 +1065,11 @@ class ModelContext {
                             reader.skip();
                         }
                         break;
-                    case 'pb':
+                    }
+                    case 'pb': {
                         reader = new protobuf.Reader.create(this.buffer);
                         while (reader.pos < reader.len) {
-                            let tagType = reader.uint32();
+                            const tagType = reader.uint32();
                             tags.set(tagType >>> 3, tagType & 7);
                             try {
                                 reader.skipType(tagType & 7);
@@ -1077,6 +1080,7 @@ class ModelContext {
                             }
                         }
                         break;
+                    }
                 }
             }
             catch (error) {
@@ -1225,8 +1229,8 @@ view.ModelFactoryService = class {
     _openArchive(context) {
         let archive = null;
         let extension;
-        var identifier = context.identifier;
-        var buffer = context.buffer;
+        let identifier = context.identifier;
+        let buffer = context.buffer;
 
         try {
             extension = identifier.split('.').pop().toLowerCase();
@@ -1256,16 +1260,18 @@ view.ModelFactoryService = class {
         try {
             extension = identifier.split('.').pop().toLowerCase();
             switch (extension) {
-                case 'tar':
+                case 'tar': {
                     // handle .pth.tar
-                    var torch = [ 0x8a, 0x0a, 0x6c, 0xfc, 0x9c, 0x46, 0xf9, 0x20, 0x6a, 0xa8, 0x50, 0x19 ];
+                    const torch = [ 0x8a, 0x0a, 0x6c, 0xfc, 0x9c, 0x46, 0xf9, 0x20, 0x6a, 0xa8, 0x50, 0x19 ];
                     if (!buffer || buffer.length < 14 || buffer[0] != 0x80 || !torch.every((v, i) => v == buffer[i + 2])) {
                         archive = new tar.Archive(buffer);
                     }
                     break;
-                case 'zip':
+                }
+                case 'zip': {
                     archive = new zip.Archive(buffer);
                     break;
+                }
             }
         }
         catch (error) {
@@ -1279,7 +1285,7 @@ view.ModelFactoryService = class {
         }
 
         try {
-            var folders = {};
+            let folders = {};
             for (let entry of archive.entries) {
                 if (entry.name.indexOf('/') != -1) {
                     folders[entry.name.split('/').shift() + '/'] = true;
@@ -1291,27 +1297,27 @@ view.ModelFactoryService = class {
             if (extension == 'tar') {
                 delete folders['PaxHeader/'];
             }
-            var rootFolder = Object.keys(folders).length == 1 ? Object.keys(folders)[0] : '';
+            let rootFolder = Object.keys(folders).length == 1 ? Object.keys(folders)[0] : '';
             rootFolder = rootFolder == '/' ? '' : rootFolder;
-            var matches = [];
-            var entries = archive.entries.slice();
-            var sourceContext = context;
-            var nextEntry = () => {
+            let matches = [];
+            let entries = archive.entries.slice();
+            const sourceContext = context;
+            const nextEntry = () => {
                 if (entries.length > 0) {
-                    var entry = entries.shift();
+                    const entry = entries.shift();
                     if (entry.name.startsWith(rootFolder)) {
-                        var identifier = entry.name.substring(rootFolder.length);
+                        const identifier = entry.name.substring(rootFolder.length);
                         if (identifier.length > 0 && identifier.indexOf('/') < 0 && !identifier.startsWith('.')) {
-                            var context = new ModelContext(new ArchiveContext(null, rootFolder, entry.name, entry.data));
-                            var modules = this._filter(context);
-                            var nextModule = () => {
+                            const context = new ModelContext(new ArchiveContext(null, rootFolder, entry.name, entry.data));
+                            let modules = this._filter(context);
+                            const nextModule = () => {
                                 if (modules.length > 0) {
-                                    var id = modules.shift();
+                                    const id = modules.shift();
                                     return this._host.require(id).then((module) => {
                                         if (!module.ModelFactory) {
                                             throw new ArchiveError("Failed to load module '" + id + "'.", null);
                                         }
-                                        var factory = new module.ModelFactory();
+                                        const factory = new module.ModelFactory();
                                         if (factory.match(context)) {
                                             matches.push(entry);
                                             modules = [];
@@ -1343,7 +1349,7 @@ view.ModelFactoryService = class {
                             return Promise.reject(new ArchiveError('Archive contains multiple model files.'));
                         }
                     }
-                    var match = matches[0];
+                    const match = matches[0];
                     return Promise.resolve(new ModelContext(new ArchiveContext(archive.entries, rootFolder, match.name, match.data)));
                 }
             };
@@ -1356,7 +1362,7 @@ view.ModelFactoryService = class {
 
     accept(identifier) {
         identifier = identifier.toLowerCase();
-        for (var extension of this._extensions) {
+        for (let extension of this._extensions) {
             if (identifier.endsWith(extension.extension)) {
                 return true;
             }
@@ -1371,10 +1377,10 @@ view.ModelFactoryService = class {
     }
 
     _filter(context) {
-        var moduleList = [];
-        var moduleMap = {};
-        var identifier = context.identifier.toLowerCase();
-        for (var extension of this._extensions) {
+        let moduleList = [];
+        let moduleMap = {};
+        const identifier = context.identifier.toLowerCase();
+        for (let extension of this._extensions) {
             if (identifier.endsWith(extension.extension)) {
                 if (!moduleMap[extension.id]) {
                     moduleList.push(extension.id);

+ 9 - 5
src/zip.js

@@ -243,25 +243,29 @@ zip.Inflater = class {
         for (let position = 0; position < hlit + hdist;) {
             let symbol = reader.symbol(zip.Inflater._codeTree);
             switch (symbol) {
-                case 16:
-                    var prev = zip.Inflater._lengths[position - 1];
+                case 16: {
+                    const prev = zip.Inflater._lengths[position - 1];
                     for (length = reader.bits(2) + 3; length; length--) {
                         zip.Inflater._lengths[position++] = prev;
                     }
                     break;
-                case 17:
+                }
+                case 17: {
                     for (length = reader.bits(3) + 3; length; length--) {
                         zip.Inflater._lengths[position++] = 0;
                     }
                     break;
-                case 18:
+                }
+                case 18: {
                     for (length = reader.bits(7) + 11; length; length--) {
                         zip.Inflater._lengths[position++] = 0;
                     }
                     break;
-                default:
+                }
+                default: {
                     zip.Inflater._lengths[position++] = symbol;
                     break;
+                }
             }
         }
         lengthTree.build(zip.Inflater._lengths, 0, hlit);

+ 14 - 14
tools/update_pbjs.js

@@ -5,15 +5,15 @@
 const fs = require('fs');
 const process = require('process');
 
-var pattern = process.argv[2];
-var file = process.argv[3];
-var variable = process.argv[4];
-var type = process.argv[5];
-var count = parseInt(process.argv[6]);
+const pattern = process.argv[2];
+const file = process.argv[3];
+const variable = process.argv[4];
+const type = process.argv[5];
+const count = parseInt(process.argv[6]);
 
-var arrayType = '';
-var dataViewMethod = '';
-var shift = 0;
+let arrayType = '';
+let dataViewMethod = '';
+let shift = 0;
 
 switch (type) {
     case 'float':
@@ -32,10 +32,10 @@ switch (type) {
         break;
 }
 
-var source = fs.readFileSync(file, 'utf-8');
+const source = fs.readFileSync(file, 'utf-8');
 
-var search = '';
-var replace = '';
+let search = '';
+let replace = '';
 
 switch (pattern) {
     case 'array':
@@ -122,14 +122,14 @@ replace = replace.split('$(arrayType)').join(arrayType);
 replace = replace.split('$(dataViewMethod)').join(dataViewMethod);
 replace = replace.split('$(shift)').join(shift);
 
-for (var i = 0; i < 8; i++) {
+for (let i = 0; i < 8; i++) {
 
     search = search.split('\n').map((line) => '    ' + line).join('\n');
     replace = replace.split('\n').map((line) => '    ' + line).join('\n');
 
-    var parts = source.split(search);
+    const parts = source.split(search);
     if (parts.length == (count + 1)) {
-        var target = parts.join(replace);
+        const target = parts.join(replace);
         fs.writeFileSync(file, target, 'utf-8');
         process.exit(0);
     }