TTLabs/EvaporateJS

View on GitHub
evaporate.js

Summary

Maintainability
F
1 wk
Test Coverage

File evaporate.js has 1897 lines of code (exceeds 250 allowed). Consider refactoring.
Open

/*Copyright (c) 2016, TT Labs, Inc.
 All rights reserved.

 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Severity: Major
Found in evaporate.js - About 5 days to fix

    Function signingVersion has 192 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

      function signingVersion(awsRequest, l) {
        var con = awsRequest.con;
        function AwsSignature(request) {
          this.request = request;
        }
    Severity: Major
    Found in evaporate.js - About 7 hrs to fix

      Function authorizationMethod has 89 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

        function authorizationMethod(awsRequest) {
          var fileUpload = awsRequest.fileUpload,
              con = fileUpload.con,
              request = awsRequest.request;
      
      
      Severity: Major
      Found in evaporate.js - About 3 hrs to fix

        Function has a complexity of 17.
        Open

          Evaporate.prototype.validateEvaporateOptions = function () {
        Severity: Minor
        Found in evaporate.js by eslint

        Limit Cyclomatic Complexity (complexity)

        Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

        function a(x) {
            if (true) {
                return x; // 1st path
            } else if (false) {
                return x+1; // 2nd path
            } else {
                return 4; // 3rd path
            }
        }

        Rule Details

        This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

        Examples of incorrect code for a maximum of 2:

        /*eslint complexity: ["error", 2]*/
        
        function a(x) {
            if (true) {
                return x;
            } else if (false) {
                return x+1;
            } else {
                return 4; // 3rd path
            }
        }

        Examples of correct code for a maximum of 2:

        /*eslint complexity: ["error", 2]*/
        
        function a(x) {
            if (true) {
                return x;
            } else {
                return 4;
            }
        }

        Options

        Optionally, you may specify a max object property:

        "complexity": ["error", 2]

        is equivalent to

        "complexity": ["error", { "max": 2 }]

        Deprecated: the object property maximum is deprecated. Please use the property max instead.

        When Not To Use It

        If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

        Further Reading

        Related Rules

        • [max-depth](max-depth.md)
        • [max-len](max-len.md)
        • [max-nested-callbacks](max-nested-callbacks.md)
        • [max-params](max-params.md)
        • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

        Function Evaporate has 66 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

          var Evaporate = function (config) {
            this.config = extend({
              readableStreams: false,
              readableStreamPartMethod: null,
              bucket: null,
        Severity: Major
        Found in evaporate.js - About 2 hrs to fix

          Function add has 59 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

            Evaporate.prototype.add = function (file,  pConfig) {
              var self = this,
                  fileConfig;
              return new Promise(function (resolve, reject) {
                var c = extend(pConfig, {});
          Severity: Major
          Found in evaporate.js - About 2 hrs to fix

            Function has a complexity of 11.
            Open

                AwsSignatureV4.prototype.canonicalHeaders = function () {
            Severity: Minor
            Found in evaporate.js by eslint

            Limit Cyclomatic Complexity (complexity)

            Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

            function a(x) {
                if (true) {
                    return x; // 1st path
                } else if (false) {
                    return x+1; // 2nd path
                } else {
                    return 4; // 3rd path
                }
            }

            Rule Details

            This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

            Examples of incorrect code for a maximum of 2:

            /*eslint complexity: ["error", 2]*/
            
            function a(x) {
                if (true) {
                    return x;
                } else if (false) {
                    return x+1;
                } else {
                    return 4; // 3rd path
                }
            }

            Examples of correct code for a maximum of 2:

            /*eslint complexity: ["error", 2]*/
            
            function a(x) {
                if (true) {
                    return x;
                } else {
                    return 4;
                }
            }

            Options

            Optionally, you may specify a max object property:

            "complexity": ["error", 2]

            is equivalent to

            "complexity": ["error", { "max": 2 }]

            Deprecated: the object property maximum is deprecated. Please use the property max instead.

            When Not To Use It

            If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

            Further Reading

            Related Rules

            • [max-depth](max-depth.md)
            • [max-len](max-len.md)
            • [max-nested-callbacks](max-nested-callbacks.md)
            • [max-params](max-params.md)
            • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

            Function sendRequestToAWS has 56 lines of code (exceeds 25 allowed). Consider refactoring.
            Open

              SignedS3AWSRequest.prototype.sendRequestToAWS = function () {
                var self = this;
                return new Promise( function (resolve, reject) {
                  var xhr = new XMLHttpRequest();
                  self.currentXhr = xhr;
            Severity: Major
            Found in evaporate.js - About 2 hrs to fix

              Function has a complexity of 10.
              Open

                FileUpload.prototype.consumeSlots = function () {
              Severity: Minor
              Found in evaporate.js by eslint

              Limit Cyclomatic Complexity (complexity)

              Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

              function a(x) {
                  if (true) {
                      return x; // 1st path
                  } else if (false) {
                      return x+1; // 2nd path
                  } else {
                      return 4; // 3rd path
                  }
              }

              Rule Details

              This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

              Examples of incorrect code for a maximum of 2:

              /*eslint complexity: ["error", 2]*/
              
              function a(x) {
                  if (true) {
                      return x;
                  } else if (false) {
                      return x+1;
                  } else {
                      return 4; // 3rd path
                  }
              }

              Examples of correct code for a maximum of 2:

              /*eslint complexity: ["error", 2]*/
              
              function a(x) {
                  if (true) {
                      return x;
                  } else {
                      return 4;
                  }
              }

              Options

              Optionally, you may specify a max object property:

              "complexity": ["error", 2]

              is equivalent to

              "complexity": ["error", { "max": 2 }]

              Deprecated: the object property maximum is deprecated. Please use the property max instead.

              When Not To Use It

              If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

              Further Reading

              Related Rules

              • [max-depth](max-depth.md)
              • [max-len](max-len.md)
              • [max-nested-callbacks](max-nested-callbacks.md)
              • [max-params](max-params.md)
              • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

              Function has a complexity of 8.
              Open

                var Evaporate = function (config) {
              Severity: Minor
              Found in evaporate.js by eslint

              Limit Cyclomatic Complexity (complexity)

              Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

              function a(x) {
                  if (true) {
                      return x; // 1st path
                  } else if (false) {
                      return x+1; // 2nd path
                  } else {
                      return 4; // 3rd path
                  }
              }

              Rule Details

              This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

              Examples of incorrect code for a maximum of 2:

              /*eslint complexity: ["error", 2]*/
              
              function a(x) {
                  if (true) {
                      return x;
                  } else if (false) {
                      return x+1;
                  } else {
                      return 4; // 3rd path
                  }
              }

              Examples of correct code for a maximum of 2:

              /*eslint complexity: ["error", 2]*/
              
              function a(x) {
                  if (true) {
                      return x;
                  } else {
                      return 4;
                  }
              }

              Options

              Optionally, you may specify a max object property:

              "complexity": ["error", 2]

              is equivalent to

              "complexity": ["error", { "max": 2 }]

              Deprecated: the object property maximum is deprecated. Please use the property max instead.

              When Not To Use It

              If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

              Further Reading

              Related Rules

              • [max-depth](max-depth.md)
              • [max-len](max-len.md)
              • [max-nested-callbacks](max-nested-callbacks.md)
              • [max-params](max-params.md)
              • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

              Function has a complexity of 8.
              Open

                    return new Promise(function (resolve, reject) {
              Severity: Minor
              Found in evaporate.js by eslint

              Limit Cyclomatic Complexity (complexity)

              Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

              function a(x) {
                  if (true) {
                      return x; // 1st path
                  } else if (false) {
                      return x+1; // 2nd path
                  } else {
                      return 4; // 3rd path
                  }
              }

              Rule Details

              This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

              Examples of incorrect code for a maximum of 2:

              /*eslint complexity: ["error", 2]*/
              
              function a(x) {
                  if (true) {
                      return x;
                  } else if (false) {
                      return x+1;
                  } else {
                      return 4; // 3rd path
                  }
              }

              Examples of correct code for a maximum of 2:

              /*eslint complexity: ["error", 2]*/
              
              function a(x) {
                  if (true) {
                      return x;
                  } else {
                      return 4;
                  }
              }

              Options

              Optionally, you may specify a max object property:

              "complexity": ["error", 2]

              is equivalent to

              "complexity": ["error", { "max": 2 }]

              Deprecated: the object property maximum is deprecated. Please use the property max instead.

              When Not To Use It

              If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

              Further Reading

              Related Rules

              • [max-depth](max-depth.md)
              • [max-len](max-len.md)
              • [max-nested-callbacks](max-nested-callbacks.md)
              • [max-params](max-params.md)
              • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

              Function canonicalHeaders has 47 lines of code (exceeds 25 allowed). Consider refactoring.
              Open

                  AwsSignatureV4.prototype.canonicalHeaders = function () {
                    var canonicalHeaders = [],
                        keys = [],
                        i;
              
              
              Severity: Minor
              Found in evaporate.js - About 1 hr to fix

                Function authorize has 47 lines of code (exceeds 25 allowed). Consider refactoring.
                Open

                    AuthorizationMethod.prototype.authorize = function () {
                      return new Promise(function (resolve, reject) {
                        var xhr = new XMLHttpRequest();
                        awsRequest.currentXhr = xhr;
                
                
                Severity: Minor
                Found in evaporate.js - About 1 hr to fix

                  Function 'getSavedUploads' has a complexity of 7.
                  Open

                    function getSavedUploads(purge) {
                  Severity: Minor
                  Found in evaporate.js by eslint

                  Limit Cyclomatic Complexity (complexity)

                  Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

                  function a(x) {
                      if (true) {
                          return x; // 1st path
                      } else if (false) {
                          return x+1; // 2nd path
                      } else {
                          return 4; // 3rd path
                      }
                  }

                  Rule Details

                  This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

                  Examples of incorrect code for a maximum of 2:

                  /*eslint complexity: ["error", 2]*/
                  
                  function a(x) {
                      if (true) {
                          return x;
                      } else if (false) {
                          return x+1;
                      } else {
                          return 4; // 3rd path
                      }
                  }

                  Examples of correct code for a maximum of 2:

                  /*eslint complexity: ["error", 2]*/
                  
                  function a(x) {
                      if (true) {
                          return x;
                      } else {
                          return 4;
                      }
                  }

                  Options

                  Optionally, you may specify a max object property:

                  "complexity": ["error", 2]

                  is equivalent to

                  "complexity": ["error", { "max": 2 }]

                  Deprecated: the object property maximum is deprecated. Please use the property max instead.

                  When Not To Use It

                  If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

                  Further Reading

                  Related Rules

                  • [max-depth](max-depth.md)
                  • [max-len](max-len.md)
                  • [max-nested-callbacks](max-nested-callbacks.md)
                  • [max-params](max-params.md)
                  • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

                  Function has a complexity of 7.
                  Open

                      return new Promise( function (resolve, reject) {
                  Severity: Minor
                  Found in evaporate.js by eslint

                  Limit Cyclomatic Complexity (complexity)

                  Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

                  function a(x) {
                      if (true) {
                          return x; // 1st path
                      } else if (false) {
                          return x+1; // 2nd path
                      } else {
                          return 4; // 3rd path
                      }
                  }

                  Rule Details

                  This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

                  Examples of incorrect code for a maximum of 2:

                  /*eslint complexity: ["error", 2]*/
                  
                  function a(x) {
                      if (true) {
                          return x;
                      } else if (false) {
                          return x+1;
                      } else {
                          return 4; // 3rd path
                      }
                  }

                  Examples of correct code for a maximum of 2:

                  /*eslint complexity: ["error", 2]*/
                  
                  function a(x) {
                      if (true) {
                          return x;
                      } else {
                          return 4;
                      }
                  }

                  Options

                  Optionally, you may specify a max object property:

                  "complexity": ["error", 2]

                  is equivalent to

                  "complexity": ["error", { "max": 2 }]

                  Deprecated: the object property maximum is deprecated. Please use the property max instead.

                  When Not To Use It

                  If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

                  Further Reading

                  Related Rules

                  • [max-depth](max-depth.md)
                  • [max-len](max-len.md)
                  • [max-nested-callbacks](max-nested-callbacks.md)
                  • [max-params](max-params.md)
                  • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

                  Function has a complexity of 7.
                  Open

                      AwsSignatureV4.prototype.canonicalQueryString = function () {
                  Severity: Minor
                  Found in evaporate.js by eslint

                  Limit Cyclomatic Complexity (complexity)

                  Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold.

                  function a(x) {
                      if (true) {
                          return x; // 1st path
                      } else if (false) {
                          return x+1; // 2nd path
                      } else {
                          return 4; // 3rd path
                      }
                  }

                  Rule Details

                  This rule is aimed at reducing code complexity by capping the amount of cyclomatic complexity allowed in a program. As such, it will warn when the cyclomatic complexity crosses the configured threshold (default is 20).

                  Examples of incorrect code for a maximum of 2:

                  /*eslint complexity: ["error", 2]*/
                  
                  function a(x) {
                      if (true) {
                          return x;
                      } else if (false) {
                          return x+1;
                      } else {
                          return 4; // 3rd path
                      }
                  }

                  Examples of correct code for a maximum of 2:

                  /*eslint complexity: ["error", 2]*/
                  
                  function a(x) {
                      if (true) {
                          return x;
                      } else {
                          return 4;
                      }
                  }

                  Options

                  Optionally, you may specify a max object property:

                  "complexity": ["error", 2]

                  is equivalent to

                  "complexity": ["error", { "max": 2 }]

                  Deprecated: the object property maximum is deprecated. Please use the property max instead.

                  When Not To Use It

                  If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule.

                  Further Reading

                  Related Rules

                  • [max-depth](max-depth.md)
                  • [max-len](max-len.md)
                  • [max-nested-callbacks](max-nested-callbacks.md)
                  • [max-params](max-params.md)
                  • [max-statements](max-statements.md) Source: http://eslint.org/docs/rules/

                  Function validateEvaporateOptions has 41 lines of code (exceeds 25 allowed). Consider refactoring.
                  Open

                    Evaporate.prototype.validateEvaporateOptions = function () {
                      this.supported = !(
                      typeof File === 'undefined' ||
                      typeof Promise === 'undefined');
                  
                  
                  Severity: Minor
                  Found in evaporate.js - About 1 hr to fix

                    Function makeParts has 35 lines of code (exceeds 25 allowed). Consider refactoring.
                    Open

                      FileUpload.prototype.makeParts = function (firstPart) {
                        this.numParts = Math.ceil(this.sizeBytes / this.con.partSize) || 1; // issue #58
                        var partsDeferredPromises = [];
                    
                        var self = this;
                    Severity: Minor
                    Found in evaporate.js - About 1 hr to fix

                      Function streamToArrayBuffer has 30 lines of code (exceeds 25 allowed). Consider refactoring.
                      Open

                        PutPart.prototype.streamToArrayBuffer = function (stream) {
                          return new Promise(function (resolve, reject) {
                            // stream is empty or ended
                            if (!stream.readable) { return resolve([]); }
                      
                      
                      Severity: Minor
                      Found in evaporate.js - About 1 hr to fix

                        Function consumeSlots has 29 lines of code (exceeds 25 allowed). Consider refactoring.
                        Open

                          FileUpload.prototype.consumeSlots = function () {
                            if (this.partsToUpload.length === 0) { return -1 }
                            if (this.partsToUpload.length !== this.partsInProcess.length &&
                                this.status === EVAPORATING) {
                        
                        
                        Severity: Minor
                        Found in evaporate.js - About 1 hr to fix

                          Function progessStats has 28 lines of code (exceeds 25 allowed). Consider refactoring.
                          Open

                            FileUpload.prototype.progessStats = function () {
                              // Adapted from https://github.com/fkjaekel
                              // https://github.com/TTLabs/EvaporateJS/issues/13
                              if (this.fileTotalBytesUploaded === 0) {
                                return {
                          Severity: Minor
                          Found in evaporate.js - About 1 hr to fix

                            Function canonicalQueryString has 27 lines of code (exceeds 25 allowed). Consider refactoring.
                            Open

                                AwsSignatureV4.prototype.canonicalQueryString = function () {
                                  var qs = awsRequest.request.query_string || '',
                                      search = uri([awsRequest.awsUrl, this.request.path, qs].join("")).search,
                                      searchParts = search.length ? search.split('&') : [],
                                      encoded = [],
                            Severity: Minor
                            Found in evaporate.js - About 1 hr to fix

                              Function getLocalTimeOffset has 26 lines of code (exceeds 25 allowed). Consider refactoring.
                              Open

                                Evaporate.getLocalTimeOffset = function (config) {
                                  return new Promise(function (resolve, reject) {
                                    if (typeof config.localTimeOffset === 'number') {
                                      return resolve(config.localTimeOffset);
                                    }
                              Severity: Minor
                              Found in evaporate.js - About 1 hr to fix

                                Avoid too many return statements within this function.
                                Open

                                          return 'Option awsSignatureVersion is 4 but cryptoHexEncodedHash256 is not defined.';
                                Severity: Major
                                Found in evaporate.js - About 30 mins to fix

                                  Avoid too many return statements within this function.
                                  Open

                                        return 'Option awsSignatureVersion is 4 but computeContentMd5 is not enabled.';
                                  Severity: Major
                                  Found in evaporate.js - About 30 mins to fix

                                    Avoid too many return statements within this function.
                                    Open

                                        return true;
                                    Severity: Major
                                    Found in evaporate.js - About 30 mins to fix

                                      Avoid too many return statements within this function.
                                      Open

                                              return 'The browser\'s FileReader object does not support readAsArrayBuffer';
                                      Severity: Major
                                      Found in evaporate.js - About 30 mins to fix

                                        Avoid too many return statements within this function.
                                        Open

                                              return "The AWS 'bucket' option must be present.";
                                        Severity: Major
                                        Found in evaporate.js - About 30 mins to fix

                                          Avoid too many return statements within this function.
                                          Open

                                                  return 'Option computeContentMd5 has been set but cryptoMd5Method is not defined.'
                                          Severity: Major
                                          Found in evaporate.js - About 30 mins to fix

                                            Unexpected trailing comma.
                                            Open

                                                      fileSize: this.sizeBytes,
                                            Severity: Minor
                                            Found in evaporate.js by eslint

                                            require or disallow trailing commas (comma-dangle)

                                            Trailing commas in object literals are valid according to the ECMAScript 5 (and ECMAScript 3!) spec. However, IE8 (when not in IE8 document mode) and below will throw an error when it encounters trailing commas in JavaScript.

                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };

                                            Trailing commas simplify adding and removing items to objects and arrays, since only the lines you are modifying must be touched. Another argument in favor of trailing commas is that it improves the clarity of diffs when an item is added or removed from an object or array:

                                            Less clear:

                                            var foo = {
                                            -    bar: "baz",
                                            -    qux: "quux"
                                            +    bar: "baz"
                                             };

                                            More clear:

                                            var foo = {
                                                 bar: "baz",
                                            -    qux: "quux",
                                             };

                                            Rule Details

                                            This rule enforces consistent use of trailing commas in object and array literals.

                                            Options

                                            This rule has a string option or an object option:

                                            {
                                                "comma-dangle": ["error", "never"],
                                                // or
                                                "comma-dangle": ["error", {
                                                    "arrays": "never",
                                                    "objects": "never",
                                                    "imports": "never",
                                                    "exports": "never",
                                                    "functions": "ignore",
                                                }]
                                            }
                                            • "never" (default) disallows trailing commas
                                            • "always" requires trailing commas
                                            • "always-multiline" requires trailing commas when the last element or property is in a different line than the closing ] or } and disallows trailing commas when the last element or property is on the same line as the closing ] or }
                                            • "only-multiline" allows (but does not require) trailing commas when the last element or property is in a different line than the closing ] or } and disallows trailing commas when the last element or property is on the same line as the closing ] or }

                                            Trailing commas in function declarations and function calls are valid syntax since ECMAScript 2017; however, the string option does not check these situations for backwards compatibility.

                                            You can also use an object option to configure this rule for each type of syntax. Each of the following options can be set to "never", "always", "always-multiline", "only-multiline", or "ignore". The default for each option is "never" unless otherwise specified.

                                            • arrays is for array literals and array patterns of destructuring. (e.g. let [a,] = [1,];)
                                            • objects is for object literals and object patterns of destructuring. (e.g. let {a,} = {a: 1};)
                                            • imports is for import declarations of ES Modules. (e.g. import {a,} from "foo";)
                                            • exports is for export declarations of ES Modules. (e.g. export {a,};)
                                            • functions is for function declarations and function calls. (e.g. (function(a,){ })(b,);)
                                              functions is set to "ignore" by default for consistency with the string option.

                                            never

                                            Examples of incorrect code for this rule with the default "never" option:

                                            /*eslint comma-dangle: ["error", "never"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var arr = [1,2,];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });

                                            Examples of correct code for this rule with the default "never" option:

                                            /*eslint comma-dangle: ["error", "never"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var arr = [1,2];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            always

                                            Examples of incorrect code for this rule with the "always" option:

                                            /*eslint comma-dangle: ["error", "always"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var arr = [1,2];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            Examples of correct code for this rule with the "always" option:

                                            /*eslint comma-dangle: ["error", "always"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var arr = [1,2,];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });

                                            always-multiline

                                            Examples of incorrect code for this rule with the "always-multiline" option:

                                            /*eslint comma-dangle: ["error", "always-multiline"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var foo = { bar: "baz", qux: "quux", };
                                            
                                            var arr = [1,2,];
                                            
                                            var arr = [1,
                                                2,];
                                            
                                            var arr = [
                                                1,
                                                2
                                            ];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            Examples of correct code for this rule with the "always-multiline" option:

                                            /*eslint comma-dangle: ["error", "always-multiline"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var foo = {bar: "baz", qux: "quux"};
                                            var arr = [1,2];
                                            
                                            var arr = [1,
                                                2];
                                            
                                            var arr = [
                                                1,
                                                2,
                                            ];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });

                                            only-multiline

                                            Examples of incorrect code for this rule with the "only-multiline" option:

                                            /*eslint comma-dangle: ["error", "only-multiline"]*/
                                            
                                            var foo = { bar: "baz", qux: "quux", };
                                            
                                            var arr = [1,2,];
                                            
                                            var arr = [1,
                                                2,];

                                            Examples of correct code for this rule with the "only-multiline" option:

                                            /*eslint comma-dangle: ["error", "only-multiline"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var foo = {bar: "baz", qux: "quux"};
                                            var arr = [1,2];
                                            
                                            var arr = [1,
                                                2];
                                            
                                            var arr = [
                                                1,
                                                2,
                                            ];
                                            
                                            var arr = [
                                                1,
                                                2
                                            ];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            functions

                                            Examples of incorrect code for this rule with the {"functions": "never"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "never"}]*/
                                            
                                            function foo(a, b,) {
                                            }
                                            
                                            foo(a, b,);
                                            new foo(a, b,);

                                            Examples of correct code for this rule with the {"functions": "never"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "never"}]*/
                                            
                                            function foo(a, b) {
                                            }
                                            
                                            foo(a, b);
                                            new foo(a, b);

                                            Examples of incorrect code for this rule with the {"functions": "always"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "always"}]*/
                                            
                                            function foo(a, b) {
                                            }
                                            
                                            foo(a, b);
                                            new foo(a, b);

                                            Examples of correct code for this rule with the {"functions": "always"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "always"}]*/
                                            
                                            function foo(a, b,) {
                                            }
                                            
                                            foo(a, b,);
                                            new foo(a, b,);

                                            When Not To Use It

                                            You can turn this rule off if you are not concerned with dangling commas. Source: http://eslint.org/docs/rules/

                                            The function binding is unnecessary.
                                            Open

                                                  }.bind(this), reject);
                                            Severity: Minor
                                            Found in evaporate.js by eslint

                                            Disallow unnecessary function binding (no-extra-bind)

                                            The bind() method is used to create functions with specific this values and, optionally, binds arguments to specific values. When used to specify the value of this, it's important that the function actually use this in its function body. For example:

                                            var boundGetName = (function getName() {
                                                return this.name;
                                            }).bind({ name: "ESLint" });
                                            
                                            console.log(boundGetName());      // "ESLint"

                                            This code is an example of a good use of bind() for setting the value of this.

                                            Sometimes during the course of code maintenance, the this value is removed from the function body. In that case, you can end up with a call to bind() that doesn't accomplish anything:

                                            // useless bind
                                            var boundGetName = (function getName() {
                                                return "ESLint";
                                            }).bind({ name: "ESLint" });
                                            
                                            console.log(boundGetName());      // "ESLint"

                                            In this code, the reference to this has been removed but bind() is still used. In this case, the bind() is unnecessary overhead (and a performance hit) and can be safely removed.

                                            Rule Details

                                            This rule is aimed at avoiding the unnecessary use of bind() and as such will warn whenever an immediately-invoked function expression (IIFE) is using bind() and doesn't have an appropriate this value. This rule won't flag usage of bind() that includes function argument binding.

                                            Note: Arrow functions can never have their this value set using bind(). This rule flags all uses of bind() with arrow functions as a problem

                                            Examples of incorrect code for this rule:

                                            /*eslint no-extra-bind: "error"*/
                                            /*eslint-env es6*/
                                            
                                            var x = function () {
                                                foo();
                                            }.bind(bar);
                                            
                                            var x = (() => {
                                                foo();
                                            }).bind(bar);
                                            
                                            var x = (() => {
                                                this.foo();
                                            }).bind(bar);
                                            
                                            var x = function () {
                                                (function () {
                                                  this.foo();
                                                }());
                                            }.bind(bar);
                                            
                                            var x = function () {
                                                function foo() {
                                                  this.bar();
                                                }
                                            }.bind(baz);

                                            Examples of correct code for this rule:

                                            /*eslint no-extra-bind: "error"*/
                                            
                                            var x = function () {
                                                this.foo();
                                            }.bind(bar);
                                            
                                            var x = function (a) {
                                                return a + 1;
                                            }.bind(foo, bar);

                                            When Not To Use It

                                            If you are not concerned about unnecessary calls to bind(), you can safely disable this rule.

                                            Further Reading

                                            Unexpected trailing comma.
                                            Open

                                                    fileSize: this.sizeBytes,
                                            Severity: Minor
                                            Found in evaporate.js by eslint

                                            require or disallow trailing commas (comma-dangle)

                                            Trailing commas in object literals are valid according to the ECMAScript 5 (and ECMAScript 3!) spec. However, IE8 (when not in IE8 document mode) and below will throw an error when it encounters trailing commas in JavaScript.

                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };

                                            Trailing commas simplify adding and removing items to objects and arrays, since only the lines you are modifying must be touched. Another argument in favor of trailing commas is that it improves the clarity of diffs when an item is added or removed from an object or array:

                                            Less clear:

                                            var foo = {
                                            -    bar: "baz",
                                            -    qux: "quux"
                                            +    bar: "baz"
                                             };

                                            More clear:

                                            var foo = {
                                                 bar: "baz",
                                            -    qux: "quux",
                                             };

                                            Rule Details

                                            This rule enforces consistent use of trailing commas in object and array literals.

                                            Options

                                            This rule has a string option or an object option:

                                            {
                                                "comma-dangle": ["error", "never"],
                                                // or
                                                "comma-dangle": ["error", {
                                                    "arrays": "never",
                                                    "objects": "never",
                                                    "imports": "never",
                                                    "exports": "never",
                                                    "functions": "ignore",
                                                }]
                                            }
                                            • "never" (default) disallows trailing commas
                                            • "always" requires trailing commas
                                            • "always-multiline" requires trailing commas when the last element or property is in a different line than the closing ] or } and disallows trailing commas when the last element or property is on the same line as the closing ] or }
                                            • "only-multiline" allows (but does not require) trailing commas when the last element or property is in a different line than the closing ] or } and disallows trailing commas when the last element or property is on the same line as the closing ] or }

                                            Trailing commas in function declarations and function calls are valid syntax since ECMAScript 2017; however, the string option does not check these situations for backwards compatibility.

                                            You can also use an object option to configure this rule for each type of syntax. Each of the following options can be set to "never", "always", "always-multiline", "only-multiline", or "ignore". The default for each option is "never" unless otherwise specified.

                                            • arrays is for array literals and array patterns of destructuring. (e.g. let [a,] = [1,];)
                                            • objects is for object literals and object patterns of destructuring. (e.g. let {a,} = {a: 1};)
                                            • imports is for import declarations of ES Modules. (e.g. import {a,} from "foo";)
                                            • exports is for export declarations of ES Modules. (e.g. export {a,};)
                                            • functions is for function declarations and function calls. (e.g. (function(a,){ })(b,);)
                                              functions is set to "ignore" by default for consistency with the string option.

                                            never

                                            Examples of incorrect code for this rule with the default "never" option:

                                            /*eslint comma-dangle: ["error", "never"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var arr = [1,2,];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });

                                            Examples of correct code for this rule with the default "never" option:

                                            /*eslint comma-dangle: ["error", "never"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var arr = [1,2];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            always

                                            Examples of incorrect code for this rule with the "always" option:

                                            /*eslint comma-dangle: ["error", "always"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var arr = [1,2];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            Examples of correct code for this rule with the "always" option:

                                            /*eslint comma-dangle: ["error", "always"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var arr = [1,2,];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });

                                            always-multiline

                                            Examples of incorrect code for this rule with the "always-multiline" option:

                                            /*eslint comma-dangle: ["error", "always-multiline"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var foo = { bar: "baz", qux: "quux", };
                                            
                                            var arr = [1,2,];
                                            
                                            var arr = [1,
                                                2,];
                                            
                                            var arr = [
                                                1,
                                                2
                                            ];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            Examples of correct code for this rule with the "always-multiline" option:

                                            /*eslint comma-dangle: ["error", "always-multiline"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var foo = {bar: "baz", qux: "quux"};
                                            var arr = [1,2];
                                            
                                            var arr = [1,
                                                2];
                                            
                                            var arr = [
                                                1,
                                                2,
                                            ];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });

                                            only-multiline

                                            Examples of incorrect code for this rule with the "only-multiline" option:

                                            /*eslint comma-dangle: ["error", "only-multiline"]*/
                                            
                                            var foo = { bar: "baz", qux: "quux", };
                                            
                                            var arr = [1,2,];
                                            
                                            var arr = [1,
                                                2,];

                                            Examples of correct code for this rule with the "only-multiline" option:

                                            /*eslint comma-dangle: ["error", "only-multiline"]*/
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux",
                                            };
                                            
                                            var foo = {
                                                bar: "baz",
                                                qux: "quux"
                                            };
                                            
                                            var foo = {bar: "baz", qux: "quux"};
                                            var arr = [1,2];
                                            
                                            var arr = [1,
                                                2];
                                            
                                            var arr = [
                                                1,
                                                2,
                                            ];
                                            
                                            var arr = [
                                                1,
                                                2
                                            ];
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux",
                                            });
                                            
                                            foo({
                                              bar: "baz",
                                              qux: "quux"
                                            });

                                            functions

                                            Examples of incorrect code for this rule with the {"functions": "never"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "never"}]*/
                                            
                                            function foo(a, b,) {
                                            }
                                            
                                            foo(a, b,);
                                            new foo(a, b,);

                                            Examples of correct code for this rule with the {"functions": "never"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "never"}]*/
                                            
                                            function foo(a, b) {
                                            }
                                            
                                            foo(a, b);
                                            new foo(a, b);

                                            Examples of incorrect code for this rule with the {"functions": "always"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "always"}]*/
                                            
                                            function foo(a, b) {
                                            }
                                            
                                            foo(a, b);
                                            new foo(a, b);

                                            Examples of correct code for this rule with the {"functions": "always"} option:

                                            /*eslint comma-dangle: ["error", {"functions": "always"}]*/
                                            
                                            function foo(a, b,) {
                                            }
                                            
                                            foo(a, b,);
                                            new foo(a, b,);

                                            When Not To Use It

                                            You can turn this rule off if you are not concerned with dangling commas. Source: http://eslint.org/docs/rules/

                                            Similar blocks of code found in 2 locations. Consider refactoring.
                                            Open

                                              Evaporate.prototype.cancel = function (id) {
                                                return typeof id === 'undefined' ? this._cancelAll() : this._cancelOne(id);
                                              };
                                            Severity: Minor
                                            Found in evaporate.js and 1 other location - About 35 mins to fix
                                            evaporate.js on lines 346..348

                                            Duplicated Code

                                            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                            Tuning

                                            This issue has a mass of 51.

                                            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                            Refactorings

                                            Further Reading

                                            Similar blocks of code found in 2 locations. Consider refactoring.
                                            Open

                                              Evaporate.prototype.resume = function (id) {
                                                return typeof id === 'undefined' ? this._resumeAll() : this._resumeOne(id);
                                              };
                                            Severity: Minor
                                            Found in evaporate.js and 1 other location - About 35 mins to fix
                                            evaporate.js on lines 282..284

                                            Duplicated Code

                                            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

                                            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

                                            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

                                            Tuning

                                            This issue has a mass of 51.

                                            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

                                            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

                                            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

                                            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

                                            Refactorings

                                            Further Reading

                                            There are no issues that match your filters.

                                            Category
                                            Status