????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.148.211.202 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/appsrv.astacus.se/forge/node_modules/eslint/lib/rules/ |
Upload File : |
/** * @fileoverview Rule to flag use of duplicate keys in an object. * @author Ian Christian Myers */ "use strict"; //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ const astUtils = require("../util/ast-utils"); //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ const GET_KIND = /^(?:init|get)$/u; const SET_KIND = /^(?:init|set)$/u; /** * The class which stores properties' information of an object. */ class ObjectInfo { /** * @param {ObjectInfo|null} upper - The information of the outer object. * @param {ASTNode} node - The ObjectExpression node of this information. */ constructor(upper, node) { this.upper = upper; this.node = node; this.properties = new Map(); } /** * Gets the information of the given Property node. * @param {ASTNode} node - The Property node to get. * @returns {{get: boolean, set: boolean}} The information of the property. */ getPropertyInfo(node) { const name = astUtils.getStaticPropertyName(node); if (!this.properties.has(name)) { this.properties.set(name, { get: false, set: false }); } return this.properties.get(name); } /** * Checks whether the given property has been defined already or not. * @param {ASTNode} node - The Property node to check. * @returns {boolean} `true` if the property has been defined. */ isPropertyDefined(node) { const entry = this.getPropertyInfo(node); return ( (GET_KIND.test(node.kind) && entry.get) || (SET_KIND.test(node.kind) && entry.set) ); } /** * Defines the given property. * @param {ASTNode} node - The Property node to define. * @returns {void} */ defineProperty(node) { const entry = this.getPropertyInfo(node); if (GET_KIND.test(node.kind)) { entry.get = true; } if (SET_KIND.test(node.kind)) { entry.set = true; } } } //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = { meta: { type: "problem", docs: { description: "disallow duplicate keys in object literals", category: "Possible Errors", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-keys" }, schema: [], messages: { unexpected: "Duplicate key '{{name}}'." } }, create(context) { let info = null; return { ObjectExpression(node) { info = new ObjectInfo(info, node); }, "ObjectExpression:exit"() { info = info.upper; }, Property(node) { const name = astUtils.getStaticPropertyName(node); // Skip destructuring. if (node.parent.type !== "ObjectExpression") { return; } // Skip if the name is not static. if (!name) { return; } // Reports if the name is defined already. if (info.isPropertyDefined(node)) { context.report({ node: info.node, loc: node.key.loc, messageId: "unexpected", data: { name } }); } // Update info. info.defineProperty(node); } }; } };