thegameofcode/cipherlayer

View on GitHub
src/managers/file_store.js

Summary

Maintainability
A
1 hr
Test Coverage

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

function uploadAvatarToAWS(httpsAvatarUrl, avatarName, cbk) {

    const validBucket = config.aws.buckets.avatars;

    https.get(httpsAvatarUrl, function (res) {
Severity: Minor
Found in src/managers/file_store.js - About 1 hr to fix

    Expected to return a value at the end of function.
    Open

                uploadFile(validBucket, avatarName, buf, function (err) {
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    require return statements to either always or never specify values (consistent-return)

    Unlike statically-typed languages which enforce that a function returns a specified type of value, JavaScript allows different code paths in a function to return different types of values.

    A confusing aspect of JavaScript is that a function returns undefined if any of the following are true:

    • it does not execute a return statement before it exits
    • it executes return which does not specify a value explicitly
    • it executes return undefined
    • it executes return void followed by an expression (for example, a function call)
    • it executes return followed by any other expression which evaluates to undefined

    If any code paths in a function return a value explicitly but some code path do not return a value explicitly, it might be a typing mistake, especially in a large function. In the following example:

    • a code path through the function returns a Boolean value true
    • another code path does not return a value explicitly, therefore returns undefined implicitly
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }

    Rule Details

    This rule requires return statements to either always or never specify values. This rule ignores function definitions where the name begins with an uppercase letter, because constructors (when invoked with the new operator) return the instantiated object implicitly if they do not return another object explicitly.

    Examples of incorrect code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }
    
    function doSomething(condition) {
        if (condition) {
            return true;
        }
    }

    Examples of correct code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return false;
        }
    }
    
    function Foo() {
        if (!(this instanceof Foo)) {
            return new Foo();
        }
    
        this.a = 0;
    }

    Options

    This rule has an object option:

    • "treatUndefinedAsUnspecified": false (default) always either specify values or return undefined implicitly only.
    • "treatUndefinedAsUnspecified": true always either specify values or return undefined explicitly or implicitly.

    treatUndefinedAsUnspecified

    Examples of incorrect code for this rule with the default { "treatUndefinedAsUnspecified": false } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    Examples of incorrect code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        return true;
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        return true;
    }

    Examples of correct code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    When Not To Use It

    If you want to allow functions to have different return behavior depending on code branching, then it is safe to disable this rule. Source: http://eslint.org/docs/rules/

    Expected to return a value at the end of function.
    Open

        https.get(httpsAvatarUrl, function (res) {
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    require return statements to either always or never specify values (consistent-return)

    Unlike statically-typed languages which enforce that a function returns a specified type of value, JavaScript allows different code paths in a function to return different types of values.

    A confusing aspect of JavaScript is that a function returns undefined if any of the following are true:

    • it does not execute a return statement before it exits
    • it executes return which does not specify a value explicitly
    • it executes return undefined
    • it executes return void followed by an expression (for example, a function call)
    • it executes return followed by any other expression which evaluates to undefined

    If any code paths in a function return a value explicitly but some code path do not return a value explicitly, it might be a typing mistake, especially in a large function. In the following example:

    • a code path through the function returns a Boolean value true
    • another code path does not return a value explicitly, therefore returns undefined implicitly
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }

    Rule Details

    This rule requires return statements to either always or never specify values. This rule ignores function definitions where the name begins with an uppercase letter, because constructors (when invoked with the new operator) return the instantiated object implicitly if they do not return another object explicitly.

    Examples of incorrect code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }
    
    function doSomething(condition) {
        if (condition) {
            return true;
        }
    }

    Examples of correct code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return false;
        }
    }
    
    function Foo() {
        if (!(this instanceof Foo)) {
            return new Foo();
        }
    
        this.a = 0;
    }

    Options

    This rule has an object option:

    • "treatUndefinedAsUnspecified": false (default) always either specify values or return undefined implicitly only.
    • "treatUndefinedAsUnspecified": true always either specify values or return undefined explicitly or implicitly.

    treatUndefinedAsUnspecified

    Examples of incorrect code for this rule with the default { "treatUndefinedAsUnspecified": false } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    Examples of incorrect code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        return true;
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        return true;
    }

    Examples of correct code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    When Not To Use It

    If you want to allow functions to have different return behavior depending on code branching, then it is safe to disable this rule. Source: http://eslint.org/docs/rules/

    Expected to return a value at the end of function.
    Open

        initAWS(function (started) {
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    require return statements to either always or never specify values (consistent-return)

    Unlike statically-typed languages which enforce that a function returns a specified type of value, JavaScript allows different code paths in a function to return different types of values.

    A confusing aspect of JavaScript is that a function returns undefined if any of the following are true:

    • it does not execute a return statement before it exits
    • it executes return which does not specify a value explicitly
    • it executes return undefined
    • it executes return void followed by an expression (for example, a function call)
    • it executes return followed by any other expression which evaluates to undefined

    If any code paths in a function return a value explicitly but some code path do not return a value explicitly, it might be a typing mistake, especially in a large function. In the following example:

    • a code path through the function returns a Boolean value true
    • another code path does not return a value explicitly, therefore returns undefined implicitly
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }

    Rule Details

    This rule requires return statements to either always or never specify values. This rule ignores function definitions where the name begins with an uppercase letter, because constructors (when invoked with the new operator) return the instantiated object implicitly if they do not return another object explicitly.

    Examples of incorrect code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }
    
    function doSomething(condition) {
        if (condition) {
            return true;
        }
    }

    Examples of correct code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return false;
        }
    }
    
    function Foo() {
        if (!(this instanceof Foo)) {
            return new Foo();
        }
    
        this.a = 0;
    }

    Options

    This rule has an object option:

    • "treatUndefinedAsUnspecified": false (default) always either specify values or return undefined implicitly only.
    • "treatUndefinedAsUnspecified": true always either specify values or return undefined explicitly or implicitly.

    treatUndefinedAsUnspecified

    Examples of incorrect code for this rule with the default { "treatUndefinedAsUnspecified": false } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    Examples of incorrect code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        return true;
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        return true;
    }

    Examples of correct code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    When Not To Use It

    If you want to allow functions to have different return behavior depending on code branching, then it is safe to disable this rule. Source: http://eslint.org/docs/rules/

    Expected to return a value at the end of function.
    Open

        initAWS(function (started) {
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    require return statements to either always or never specify values (consistent-return)

    Unlike statically-typed languages which enforce that a function returns a specified type of value, JavaScript allows different code paths in a function to return different types of values.

    A confusing aspect of JavaScript is that a function returns undefined if any of the following are true:

    • it does not execute a return statement before it exits
    • it executes return which does not specify a value explicitly
    • it executes return undefined
    • it executes return void followed by an expression (for example, a function call)
    • it executes return followed by any other expression which evaluates to undefined

    If any code paths in a function return a value explicitly but some code path do not return a value explicitly, it might be a typing mistake, especially in a large function. In the following example:

    • a code path through the function returns a Boolean value true
    • another code path does not return a value explicitly, therefore returns undefined implicitly
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }

    Rule Details

    This rule requires return statements to either always or never specify values. This rule ignores function definitions where the name begins with an uppercase letter, because constructors (when invoked with the new operator) return the instantiated object implicitly if they do not return another object explicitly.

    Examples of incorrect code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return;
        }
    }
    
    function doSomething(condition) {
        if (condition) {
            return true;
        }
    }

    Examples of correct code for this rule:

    /*eslint consistent-return: "error"*/
    
    function doSomething(condition) {
        if (condition) {
            return true;
        } else {
            return false;
        }
    }
    
    function Foo() {
        if (!(this instanceof Foo)) {
            return new Foo();
        }
    
        this.a = 0;
    }

    Options

    This rule has an object option:

    • "treatUndefinedAsUnspecified": false (default) always either specify values or return undefined implicitly only.
    • "treatUndefinedAsUnspecified": true always either specify values or return undefined explicitly or implicitly.

    treatUndefinedAsUnspecified

    Examples of incorrect code for this rule with the default { "treatUndefinedAsUnspecified": false } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    Examples of incorrect code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        return true;
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        return true;
    }

    Examples of correct code for this rule with the { "treatUndefinedAsUnspecified": true } option:

    /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/
    
    function foo(callback) {
        if (callback) {
            return void callback();
        }
        // no return statement
    }
    
    function bar(condition) {
        if (condition) {
            return undefined;
        }
        // no return statement
    }

    When Not To Use It

    If you want to allow functions to have different return behavior depending on code branching, then it is safe to disable this rule. Source: http://eslint.org/docs/rules/

    'err' is already declared in the upper scope.
    Open

                    getFileURL(validBucket, avatarName, function (err, fileURL) {
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    disallow variable declarations from shadowing variables declared in the outer scope (no-shadow)

    Shadowing is the process by which a local variable shares the same name as a variable in its containing scope. For example:

    var a = 3;
    function b() {
        var a = 10;
    }

    In this case, the variable a inside of b() is shadowing the variable a in the global scope. This can cause confusion while reading the code and it's impossible to access the global variable.

    Rule Details

    This rule aims to eliminate shadowed variable declarations.

    Examples of incorrect code for this rule:

    /*eslint no-shadow: "error"*/
    /*eslint-env es6*/
    
    var a = 3;
    function b() {
        var a = 10;
    }
    
    var b = function () {
        var a = 10;
    }
    
    function b(a) {
        a = 10;
    }
    b(a);
    
    if (true) {
        let a = 5;
    }

    Options

    This rule takes one option, an object, with properties "builtinGlobals", "hoist" and "allow".

    {
        "no-shadow": ["error", { "builtinGlobals": false, "hoist": "functions", "allow": [] }]
    }

    builtinGlobals

    The builtinGlobals option is false by default. If it is true, the rule prevents shadowing of built-in global variables: Object, Array, Number, and so on.

    Examples of incorrect code for the { "builtinGlobals": true } option:

    /*eslint no-shadow: ["error", { "builtinGlobals": true }]*/
    
    function foo() {
        var Object = 0;
    }

    hoist

    The hoist option has three settings:

    • functions (by default) - reports shadowing before the outer functions are defined.
    • all - reports all shadowing before the outer variables/functions are defined.
    • never - never report shadowing before the outer variables/functions are defined.

    hoist: functions

    Examples of incorrect code for the default { "hoist": "functions" } option:

    /*eslint no-shadow: ["error", { "hoist": "functions" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let b = 6;
    }
    
    function b() {}

    Although let b in the if statement is before the function declaration in the outer scope, it is incorrect.

    Examples of correct code for the default { "hoist": "functions" } option:

    /*eslint no-shadow: ["error", { "hoist": "functions" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let a = 3;
    }
    
    let a = 5;

    Because let a in the if statement is before the variable declaration in the outer scope, it is correct.

    hoist: all

    Examples of incorrect code for the { "hoist": "all" } option:

    /*eslint no-shadow: ["error", { "hoist": "all" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let a = 3;
        let b = 6;
    }
    
    let a = 5;
    function b() {}

    hoist: never

    Examples of correct code for the { "hoist": "never" } option:

    /*eslint no-shadow: ["error", { "hoist": "never" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let a = 3;
        let b = 6;
    }
    
    let a = 5;
    function b() {}

    Because let a and let b in the if statement are before the declarations in the outer scope, they are correct.

    allow

    The allow option is an array of identifier names for which shadowing is allowed. For example, "resolve", "reject", "done", "cb".

    Examples of correct code for the { "allow": ["done"] } option:

    /*eslint no-shadow: ["error", { "allow": ["done"] }]*/
    /*eslint-env es6*/
    
    import async from 'async';
    
    function foo(done) {
      async.map([1, 2], function (e, done) {
        done(null, e * 2)
      }, done);
    }
    
    foo(function (err, result) {
      console.log({ err, result });
    });

    Further Reading

    Related Rules

    TODO found
    Open

                // TODO: replace for with map()
    Severity: Minor
    Found in src/managers/file_store.js by fixme

    Definition for rule 'extra-rules/potential-point-free' was not found
    Open

    'use strict';
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    For more information visit Source: http://eslint.org/docs/rules/

    Definition for rule 'extra-rules/no-for-loops' was not found
    Open

    'use strict';
    Severity: Minor
    Found in src/managers/file_store.js by eslint

    For more information visit Source: http://eslint.org/docs/rules/

    There are no issues that match your filters.

    Category
    Status