diff --git a/package-lock.json b/package-lock.json index 6a0aa5382..06437a705 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-transition-group": "^4.4.5", - "trim": "^1.0.1", "url-join": "^1.1.0", "validator": "^13.15.22" }, @@ -273,6 +272,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2584,6 +2584,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2607,6 +2608,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -4807,6 +4809,7 @@ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4872,6 +4875,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -6086,6 +6090,7 @@ "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, + "peer": true, "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", @@ -6260,6 +6265,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7438,6 +7444,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -7986,7 +7993,8 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dezalgo": { "version": "1.0.4", @@ -8462,6 +8470,7 @@ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", "dev": true, + "peer": true, "dependencies": { "array.prototype.flat": "^1.2.3", "cheerio": "^1.0.0-rc.3", @@ -8786,6 +8795,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -10627,6 +10637,7 @@ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, + "peer": true, "dependencies": { "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", @@ -13673,6 +13684,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -13903,6 +13915,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -17420,6 +17433,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -17431,6 +17445,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -19946,6 +19961,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -20257,12 +20273,6 @@ "node": ">=6" } }, - "node_modules/trim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-1.0.1.tgz", - "integrity": "sha512-3JVP2YVqITUisXblCDq/Bi4P9457G/sdEamInkyvCsjbTcXLXIiG7XCb4kGMFWh6JGXesS3TKxOPtrncN/xe8w==", - "deprecated": "Use String.prototype.trim() instead" - }, "node_modules/trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -20871,6 +20881,7 @@ "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, + "peer": true, "dependencies": { "anymatch": "^3.1.0", "browserify": "^17.0.0", @@ -20965,6 +20976,7 @@ "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -21012,6 +21024,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -21089,6 +21102,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -21201,6 +21215,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -21299,6 +21314,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", diff --git a/package.json b/package.json index 93580450b..67994993c 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-transition-group": "^4.4.5", - "trim": "^1.0.1", "url-join": "^1.1.0", "validator": "^13.15.22" }, diff --git a/src/avatar/gravatar_provider.js b/src/avatar/gravatar_provider.js index e45ee7817..8f554e9f0 100644 --- a/src/avatar/gravatar_provider.js +++ b/src/avatar/gravatar_provider.js @@ -1,12 +1,11 @@ import blueimp from 'blueimp-md5'; -import trim from 'trim'; import jsonp from '../utils/jsonp_utils'; import { validateEmail } from '../field/email'; const md5 = blueimp.md5 || blueimp; function normalize(str) { - return typeof str === 'string' ? trim(str.toLowerCase()) : ''; + return typeof str === 'string' ? str.toLowerCase().trim() : ''; } export function displayName(email, cb) { diff --git a/src/connection/database/index.js b/src/connection/database/index.js index 8c43a002c..a8004c23f 100644 --- a/src/connection/database/index.js +++ b/src/connection/database/index.js @@ -9,7 +9,6 @@ import { } from '../../field/index'; import { dataFns } from '../../utils/data_utils'; import sync from '../../sync'; -import trim from 'trim'; import { defaultDirectory } from '../../core/tenant'; import { findADConnectionWithoutDomain } from '../../connection/enterprise'; @@ -41,7 +40,7 @@ function assertMaybeEnum(opts, name, a) { function assertMaybeString(opts, name) { const valid = - opts[name] === undefined || (typeof opts[name] === 'string' && trim(opts[name]).length > 0); + opts[name] === undefined || (typeof opts[name] === 'string' && opts[name].trim().length > 0); if (!valid) l.warn(opts, `The \`${name}\` option will be ignored, because it is not a non-empty string.`); return valid; diff --git a/src/core/index.js b/src/core/index.js index 4afd08749..726fcb276 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -4,7 +4,6 @@ import { isSmallScreen } from '../utils/media_utils'; import { endsWith } from '../utils/string_utils'; import { getLocationFromUrl, getOriginFromUrl } from '../utils/url_utils'; import * as i18n from '../i18n'; -import trim from 'trim'; import * as gp from '../avatar/gravatar_provider'; import { dataFns } from '../utils/data_utils'; import { clientConnections, hasFreeSubscription } from './client/index'; @@ -201,7 +200,7 @@ function extractUIOptions(id, options) { closable: closable, hideMainScreenTitle: !!hideMainScreenTitle, labeledSubmitButton: undefined === labeledSubmitButton ? true : !!labeledSubmitButton, - language: undefined === options.language ? 'en' : trim(options.language || '').toLowerCase(), + language: undefined === options.language ? 'en' : (options.language || '').trim().toLowerCase(), dict: typeof options.languageDictionary === 'object' ? options.languageDictionary : {}, disableWarnings: options.disableWarnings === undefined ? false : !!options.disableWarnings, mobile: undefined === options.mobile ? false : !!options.mobile, diff --git a/src/field/email.js b/src/field/email.js index bc469c660..135a97815 100644 --- a/src/field/email.js +++ b/src/field/email.js @@ -1,4 +1,3 @@ -import trim from 'trim'; import _isEmail from 'validator/lib/isEmail'; import { setField } from './index'; @@ -13,7 +12,7 @@ export function isEmail(str, strictValidation = false) { if (typeof str !== 'string') { return false; } - const trimmed = trim(str); + const trimmed = str.trim(); return strictValidation ? _isEmail(str) : trimmed.indexOf('@') >= 0 && trimmed.indexOf('.') >= 0 && trimmed.indexOf(' ') === -1; diff --git a/src/field/index.js b/src/field/index.js index 04875d6ae..8398d6f72 100644 --- a/src/field/index.js +++ b/src/field/index.js @@ -1,6 +1,5 @@ import React from 'react'; import { Map } from 'immutable'; -import trim from 'trim'; import OptionSelectionPane from './option_selection_pane'; import * as l from '../core/index'; @@ -10,14 +9,13 @@ const getDefaultValidator = field => { switch (field) { case 'family_name': case 'given_name': - return str => minMax(trim(str), 1, 150); + return str => minMax(str.trim(), 1, 150); case 'name': - return str => minMax(trim(str), 1, 300); + return str => minMax(str.trim(), 1, 300); case 'nickname': - return str => minMax(trim(str), 1, 300); - + return str => minMax(str.trim(), 1, 300); default: - return str => trim(str).length > 0; + return str => str.trim().length > 0; } }; diff --git a/src/field/mfa_code.js b/src/field/mfa_code.js index 873c19805..8b6e055e4 100644 --- a/src/field/mfa_code.js +++ b/src/field/mfa_code.js @@ -1,13 +1,12 @@ import { setField } from './index'; import { validateEmail } from './email'; import { databaseConnection } from '../connection/database'; -import trim from 'trim'; const DEFAULT_VALIDATION = { mfa_code: { length: 6 } }; const regExp = /^[0-9]+$/; function validateMFACode(str, settings = DEFAULT_VALIDATION.mfa_code) { - const value = trim(str); + const value = str.trim(); // check min value matched if (value.length < settings.length) { diff --git a/src/field/username.js b/src/field/username.js index c437e1b59..8a200c558 100644 --- a/src/field/username.js +++ b/src/field/username.js @@ -1,7 +1,6 @@ import { setField } from './index'; import { validateEmail } from './email'; import { databaseConnection } from '../connection/database'; -import trim from 'trim'; const DEFAULT_CONNECTION_VALIDATION = { username: { min: 1, max: 15 } }; const regExp = /^[a-zA-Z0-9_+\-.!#\$\^`~@']*$/; @@ -15,10 +14,10 @@ function validateUsername( // If the connection does not have validation settings, it should only check if the field is empty. // validateFormat overrides this logic to disable validation on login (login should never validate format) if (!validateFormat || settings == null) { - return trim(str).length > 0; + return str.trim().length > 0; } - const lowercased = trim(str.toLowerCase()); + const lowercased = str.toLowerCase().trim(); // check min value matched if (lowercased.length < settings.min) {