diff --git a/app/utils/client/lib/RestApiClient.js b/app/utils/client/lib/RestApiClient.js index 863e32fbef1..ba23a1cf3c0 100644 --- a/app/utils/client/lib/RestApiClient.js +++ b/app/utils/client/lib/RestApiClient.js @@ -50,10 +50,11 @@ export const APIClient = { query += query === '' ? '?' : '&'; if (Array.isArray(params[key])) { - const joinedArray = params[key].join(`&${ key }[]=`); + const encodedParams = params[key].map((value) => encodeURIComponent(value)); + const joinedArray = encodedParams.join(`&${ key }[]=`); query += `${ key }[]=${ joinedArray }`; } else { - query += `${ key }=${ params[key] }`; + query += `${ key }=${ encodeURIComponent(params[key]) }`; } }); } diff --git a/client/views/admin/users/AddUser.js b/client/views/admin/users/AddUser.js index e7e1ff2a1fa..72578264d18 100644 --- a/client/views/admin/users/AddUser.js +++ b/client/views/admin/users/AddUser.js @@ -9,7 +9,7 @@ import { useEndpointData } from '../../../hooks/useEndpointData'; import { useForm } from '../../../hooks/useForm'; import UserForm from './UserForm'; -export function AddUser({ roles, ...props }) { +export function AddUser({ roles, reloadTable, ...props }) { const t = useTranslation(); const router = useRoute('admin-users'); @@ -93,6 +93,7 @@ export function AddUser({ roles, ...props }) { const result = await saveAction(); if (result.success) { goToUser(result.user._id); + reloadTable(); } }); diff --git a/client/views/admin/users/EditUser.js b/client/views/admin/users/EditUser.js index c6f27b5a366..9e58c96c514 100644 --- a/client/views/admin/users/EditUser.js +++ b/client/views/admin/users/EditUser.js @@ -26,7 +26,7 @@ const getInitialValue = (data) => ({ statusText: data.statusText ?? '', }); -function EditUser({ data, roles, ...props }) { +function EditUser({ data, roles, reloadTable, ...props }) { const t = useTranslation(); const [avatarObj, setAvatarObj] = useState(); @@ -143,6 +143,7 @@ function EditUser({ data, roles, ...props }) { if (avatarObj) { await updateAvatar(); } + reloadTable(); goToUser(data._id); } }, [avatarObj, data._id, goToUser, saveAction, updateAvatar, values, errors, validationKeys]); diff --git a/client/views/admin/users/UserInfo.js b/client/views/admin/users/UserInfo.js index 319c1386897..63d94b1b4ce 100644 --- a/client/views/admin/users/UserInfo.js +++ b/client/views/admin/users/UserInfo.js @@ -14,7 +14,7 @@ import { getUserEmailVerified } from '../../../lib/getUserEmailVerified'; import UserInfo from '../../room/contextualBar/UserInfo/UserInfo'; import { UserInfoActions } from './UserInfoActions'; -export function UserInfoWithData({ uid, username, ...props }) { +export function UserInfoWithData({ uid, username, reloadTable, ...props }) { const t = useTranslation(); const showRealNames = useSetting('UI_Use_Real_Name'); const approveManuallyUsers = useSetting('Accounts_ManuallyApproveNewUsers'); @@ -33,6 +33,7 @@ export function UserInfoWithData({ uid, username, ...props }) { ); const onChange = useMutableCallback(() => reload()); + const onDelete = useMutableCallback(() => (reloadTable ? reloadTable() : null)); const user = useMemo(() => { const { user } = data || { user: {} }; @@ -99,6 +100,7 @@ export function UserInfoWithData({ uid, username, ...props }) { _id={data.user._id} username={data.user.username} onChange={onChange} + onDelete={onDelete} /> ) } diff --git a/client/views/admin/users/UserInfoActions.js b/client/views/admin/users/UserInfoActions.js index 263a00e96b6..ebc4fd2ffc4 100644 --- a/client/views/admin/users/UserInfoActions.js +++ b/client/views/admin/users/UserInfoActions.js @@ -13,7 +13,7 @@ import { useTranslation } from '../../../contexts/TranslationContext'; import { useActionSpread } from '../../hooks/useActionSpread'; import UserInfo from '../../room/contextualBar/UserInfo'; -export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange }) => { +export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange, onDelete }) => { const t = useTranslation(); const setModal = useSetModal(); @@ -36,6 +36,12 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange }) onChange(); }, [setModal, onChange]); + const handleDeletedUser = () => { + setModal(); + userRoute.push({}); + onDelete(); + }; + const confirmOwnerChanges = (action, modalProps = {}) => async () => { @@ -79,7 +85,7 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange }) const result = await deleteUserEndpoint(deleteUserQuery); if (result.success) { setModal( - + {t('User_has_been_deleted')} , ); diff --git a/client/views/admin/users/UsersPage.js b/client/views/admin/users/UsersPage.js index 90c0d1c5170..e436d1daec4 100644 --- a/client/views/admin/users/UsersPage.js +++ b/client/views/admin/users/UsersPage.js @@ -1,16 +1,51 @@ import { Button, ButtonGroup, Icon } from '@rocket.chat/fuselage'; -import React from 'react'; +import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; +import React, { useMemo, useState } from 'react'; import Page from '../../../components/Page'; import VerticalBar from '../../../components/VerticalBar'; import { useRoute, useCurrentRoute } from '../../../contexts/RouterContext'; import { useTranslation } from '../../../contexts/TranslationContext'; +import { useEndpointData } from '../../../hooks/useEndpointData'; import { AddUser } from './AddUser'; import EditUserWithData from './EditUserWithData'; import { InviteUsers } from './InviteUsers'; import { UserInfoWithData } from './UserInfo'; import UsersTable from './UsersTable'; +const sortDir = (sortDir) => (sortDir === 'asc' ? 1 : -1); + +const useQuery = ({ text, itemsPerPage, current }, sortFields) => + useMemo( + () => ({ + fields: JSON.stringify({ + name: 1, + username: 1, + emails: 1, + roles: 1, + status: 1, + avatarETag: 1, + active: 1, + }), + query: JSON.stringify({ + $or: [ + { 'emails.address': { $regex: text || '', $options: 'i' } }, + { username: { $regex: text || '', $options: 'i' } }, + { name: { $regex: text || '', $options: 'i' } }, + ], + }), + sort: JSON.stringify( + sortFields.reduce((agg, [column, direction]) => { + agg[column] = sortDir(direction); + return agg; + }, {}), + ), + ...(itemsPerPage && { count: itemsPerPage }), + ...(current && { offset: current }), + }), + [text, itemsPerPage, current, sortFields], + ); + function UsersPage() { const t = useTranslation(); @@ -28,6 +63,16 @@ function UsersPage() { usersRoute.push({ context: 'invite' }); }; + const [params] = useState({ text: '', current: 0, itemsPerPage: 25 }); + const [sort] = useState([ + ['name', 'asc'], + ['usernames', 'asc'], + ]); + + const debouncedParams = useDebouncedValue(params, 500); + const debouncedSort = useDebouncedValue(sort, 500); + const query = useQuery(debouncedParams, debouncedSort); + const { value: data = {}, reload } = useEndpointData('users.list', query); const [, { context, id }] = useCurrentRoute(); return ( @@ -44,7 +89,7 @@ function UsersPage() { - + {context && ( @@ -57,9 +102,9 @@ function UsersPage() { - {context === 'info' && } + {context === 'info' && } {context === 'edit' && } - {context === 'new' && } + {context === 'new' && } {context === 'invite' && } )} diff --git a/client/views/admin/users/UsersTable.js b/client/views/admin/users/UsersTable.js index af96033e811..60031db4ca6 100644 --- a/client/views/admin/users/UsersTable.js +++ b/client/views/admin/users/UsersTable.js @@ -1,61 +1,20 @@ -import { useDebouncedValue, useMediaQuery } from '@rocket.chat/fuselage-hooks'; -import React, { useMemo, useCallback, useState } from 'react'; +import { useMediaQuery } from '@rocket.chat/fuselage-hooks'; +import React, { useCallback, useState } from 'react'; import FilterByText from '../../../components/FilterByText'; import GenericTable from '../../../components/GenericTable'; import { useRoute } from '../../../contexts/RouterContext'; import { useTranslation } from '../../../contexts/TranslationContext'; -import { useEndpointData } from '../../../hooks/useEndpointData'; import UserRow from './UserRow'; -const sortDir = (sortDir) => (sortDir === 'asc' ? 1 : -1); - -const useQuery = ({ text, itemsPerPage, current }, sortFields) => - useMemo( - () => ({ - fields: JSON.stringify({ - name: 1, - username: 1, - emails: 1, - roles: 1, - status: 1, - avatarETag: 1, - active: 1, - }), - query: JSON.stringify({ - $or: [ - { 'emails.address': { $regex: text || '', $options: 'i' } }, - { username: { $regex: text || '', $options: 'i' } }, - { name: { $regex: text || '', $options: 'i' } }, - ], - }), - sort: JSON.stringify( - sortFields.reduce((agg, [column, direction]) => { - agg[column] = sortDir(direction); - return agg; - }, {}), - ), - ...(itemsPerPage && { count: itemsPerPage }), - ...(current && { offset: current }), - }), - [text, itemsPerPage, current, sortFields], - ); - -function UsersTable() { +function UsersTable(props) { const t = useTranslation(); - const [params, setParams] = useState({ text: '', current: 0, itemsPerPage: 25 }); const [sort, setSort] = useState([ ['name', 'asc'], ['usernames', 'asc'], ]); - const debouncedParams = useDebouncedValue(params, 500); - const debouncedSort = useDebouncedValue(sort, 500); - const query = useQuery(debouncedParams, debouncedSort); - - const { value: data = {} } = useEndpointData('users.list', query); - const usersRoute = useRoute('admin-users'); const onClick = useCallback( @@ -159,8 +118,8 @@ function UsersTable() { } - results={data.users} - total={data.total} + results={props.users} + total={props.total} setParams={setParams} params={params} renderFilter={({ onChange, ...props }) => ( diff --git a/package-lock.json b/package-lock.json index eb361b8bd78..ca0e2969c00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -746,12 +746,6 @@ "node-releases": "^1.1.71" } }, - "caniuse-lite": { - "version": "1.0.30001237", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", - "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4565,6 +4559,103 @@ "glob-to-regexp": "^0.3.0" } }, + "@napi-rs/pinyin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin/-/pinyin-1.6.2.tgz", + "integrity": "sha512-MvBxqtE1JzTYvsKp+XSDg7X+1dUJ+uKiMdt2L5xm7MscsGxynmHaz8mgpNyZuosX0xXC7aeH2h7SUxC4Pgz50A==", + "requires": { + "@napi-rs/pinyin-android-arm64": "^1.6.2", + "@napi-rs/pinyin-darwin-arm64": "^1.6.2", + "@napi-rs/pinyin-darwin-x64": "^1.6.2", + "@napi-rs/pinyin-freebsd-x64": "^1.6.2", + "@napi-rs/pinyin-linux-arm-gnueabihf": "^1.6.2", + "@napi-rs/pinyin-linux-arm64-gnu": "^1.6.2", + "@napi-rs/pinyin-linux-arm64-musl": "^1.6.2", + "@napi-rs/pinyin-linux-x64-gnu": "^1.6.2", + "@napi-rs/pinyin-linux-x64-musl": "^1.6.2", + "@napi-rs/pinyin-win32-arm64-msvc": "^1.6.2", + "@napi-rs/pinyin-win32-ia32-msvc": "^1.6.2", + "@napi-rs/pinyin-win32-x64-msvc": "^1.6.2", + "@node-rs/helper": "^1.2.0" + } + }, + "@napi-rs/pinyin-android-arm64": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-android-arm64/-/pinyin-android-arm64-1.6.2.tgz", + "integrity": "sha512-aHsp9p7kac3xHBqhennlIB8VN8nNqVguoLP+YHyfy8mTXzCxvW4ncu8LD/j4ZtrOoxpqOXfMmS+nV8v7f8BLuA==", + "optional": true + }, + "@napi-rs/pinyin-darwin-arm64": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-darwin-arm64/-/pinyin-darwin-arm64-1.6.2.tgz", + "integrity": "sha512-dchVuvS960Ag7lMyCSCP+GrOkYZt5kBu0a5O4d+hT2GVdpBAj5j/uG2nh6JjflwR2YJiQ35LCEDbspaO2mYE5g==", + "optional": true + }, + "@napi-rs/pinyin-darwin-x64": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-darwin-x64/-/pinyin-darwin-x64-1.6.2.tgz", + "integrity": "sha512-+t5HH1dJM3RTbzoq4h1zFHBv7IRAnEVy4DvgIXMBUA0XOgzDjD4OQ4HSPQxmWbFcGfNI8VbidaT4JUTATQL1rA==", + "optional": true + }, + "@napi-rs/pinyin-freebsd-x64": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-freebsd-x64/-/pinyin-freebsd-x64-1.6.2.tgz", + "integrity": "sha512-6HIaV8cExEYpSA+IE71CUf0eeg7bY4ZAHpdtZaScLKdUF92UEKlf8fe5tsxGh3F/sgWIIBV5oBa9coPnHfgGYA==", + "optional": true + }, + "@napi-rs/pinyin-linux-arm-gnueabihf": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-linux-arm-gnueabihf/-/pinyin-linux-arm-gnueabihf-1.6.2.tgz", + "integrity": "sha512-Yi8UCe0KGRuiahsuXzhXbx7qkNZN/oUiVyGGPARaaulRRw0OmEC+0k91jn6pLfXZrF1IcTYvxt7pRboOehbr+g==", + "optional": true + }, + "@napi-rs/pinyin-linux-arm64-gnu": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-linux-arm64-gnu/-/pinyin-linux-arm64-gnu-1.6.2.tgz", + "integrity": "sha512-BMyCQ+gP3e1BjjcEtl/EIYvRUx1PQloHcGOUrgtZhu2MZMCOWbGl9X6Te59M6/+bo3/maemYcgIVgGI8/gXIkw==", + "optional": true + }, + "@napi-rs/pinyin-linux-arm64-musl": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-linux-arm64-musl/-/pinyin-linux-arm64-musl-1.6.2.tgz", + "integrity": "sha512-vzWEnpgn8kothEaxbipOBSN1EupL67Igc8TvZa75pKcmlgdCGmSL/UsMvW40K57ltE7godose/2vMPHveRUT4A==", + "optional": true + }, + "@napi-rs/pinyin-linux-x64-gnu": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-linux-x64-gnu/-/pinyin-linux-x64-gnu-1.6.2.tgz", + "integrity": "sha512-Rx7Y6eyZLQfGPFUWZ+0nZ965939HZUBNWNl2Z09pAn1Q7mVzjM8Jqc2Gf6hNqfUzHmNsaQR+2uGkndZY/0yZQg==", + "optional": true + }, + "@napi-rs/pinyin-linux-x64-musl": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-linux-x64-musl/-/pinyin-linux-x64-musl-1.6.2.tgz", + "integrity": "sha512-4T8xNPNaX2DGDEP+RhSNOv6YAFe9ti/75P7SHeLGdIIiudacBCKAdPXMS8Koo/6+DQTyfmanq7lWQ8a0/i424g==", + "optional": true + }, + "@napi-rs/pinyin-win32-arm64-msvc": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-win32-arm64-msvc/-/pinyin-win32-arm64-msvc-1.6.2.tgz", + "integrity": "sha512-J25UvOGXo/YYtHxMpoWCUZ2d8zInez1dEMDziB5+VoEIRhCqmsOifS7ffhvjAqd/7VSUK+TgTyF+PwMjSZ4Miw==", + "optional": true + }, + "@napi-rs/pinyin-win32-ia32-msvc": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-win32-ia32-msvc/-/pinyin-win32-ia32-msvc-1.6.2.tgz", + "integrity": "sha512-6+4hq4ERX/LnW5GYH3UzlAU6TkO1wVdv9U1t7X92lz6S/kTkQmcOOijMvANHykN0Oic//uosOO3kvE5LQMoTuQ==", + "optional": true + }, + "@napi-rs/pinyin-win32-x64-msvc": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@napi-rs/pinyin-win32-x64-msvc/-/pinyin-win32-x64-msvc-1.6.2.tgz", + "integrity": "sha512-5Dwpg0RPhebpFTGTBGooOfBWpCVw3ajmo7ejnMfrsewuIhN5lyh3UKF7k5xrAGjCZysQdqFvTj6F5maVSFwUlw==", + "optional": true + }, + "@napi-rs/triples": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", + "integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==" + }, "@nivo/annotations": { "version": "0.73.0", "resolved": "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.73.0.tgz", @@ -4959,6 +5050,14 @@ } } }, + "@node-rs/helper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz", + "integrity": "sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg==", + "requires": { + "@napi-rs/triples": "^1.0.3" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -15805,14 +15904,6 @@ "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001237", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", - "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", - "dev": true - } } }, "bs58": { @@ -16166,9 +16257,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001207", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz", - "integrity": "sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw==" + "version": "1.0.30001257", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz", + "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==" }, "capital-case": { "version": "1.0.4", @@ -23910,15 +24001,6 @@ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "image-size": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", @@ -25587,11 +25669,6 @@ } } }, - "keypress": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", - "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=" - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -25809,13 +25886,6 @@ "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001241", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz", - "integrity": "sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==" - } } }, "chalk": { @@ -25954,12 +26024,12 @@ "dev": true }, "limax": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/limax/-/limax-2.1.0.tgz", - "integrity": "sha512-OQdMI5PlkGb/UYQz/AiF7C8ybx7JV2LV3FubzIHRB/amFuzuM+//wxGyUrdG6eutIfDTsD7C9hLDFMuB8+HG5Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/limax/-/limax-3.0.0.tgz", + "integrity": "sha512-7O14piibxAkJlQuAvhbJY5uubV7xszi1kQgnr5z+RkDJXyKYoStilqqpH8//LJq+HQpQN7TJmj3qxXzaEJOSfg==", "requires": { - "hepburn": "^1.1.3", - "pinyin": "^2.9.1", + "@napi-rs/pinyin": "^1.5.0", + "hepburn": "^1.2.0", "speakingurl": "^14.0.1" } }, @@ -29025,49 +29095,6 @@ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "optional": true }, - "needle": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", - "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "optional": true - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -29361,51 +29388,6 @@ "asn1": "^0.2.4" } }, - "nodejieba": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/nodejieba/-/nodejieba-2.4.1.tgz", - "integrity": "sha512-fxlVloaO5baDBmpnQ2egDCe6FT9SJdfbFak7tK7dKH16d7SxA5bLdv47EdTwtKS9DRbnXnMlyX5Wc33XAnaQuA==", - "optional": true, - "requires": { - "nan": "^2.14.0", - "node-pre-gyp": "^0.14.0" - }, - "dependencies": { - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "optional": true - }, - "node-pre-gyp": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "optional": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "nodemailer": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.2.tgz", @@ -29416,16 +29398,6 @@ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -29464,32 +29436,6 @@ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", "dev": true }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -29984,22 +29930,14 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "ospath": { "version": "1.2.2", @@ -30478,26 +30416,6 @@ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" }, - "pinyin": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/pinyin/-/pinyin-2.9.1.tgz", - "integrity": "sha512-U7kHlVP6yUYl2DV2bX4brlYWdgaAlwtqJrdkboiyri9ixRDVqVO3LD98te3PT5deN5EA9W8ywuG9GaYZfiiIlw==", - "requires": { - "commander": "~1.1.1", - "nodejieba": "^2.2.1", - "object-assign": "^4.0.1" - }, - "dependencies": { - "commander": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", - "integrity": "sha1-UNFlGGiuYOzP8KLZ80WVN2vGsEE=", - "requires": { - "keypress": "0.1.x" - } - } - } - }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", diff --git a/package.json b/package.json index 24086d105e0..06a7edede51 100644 --- a/package.json +++ b/package.json @@ -236,7 +236,7 @@ "ldapjs": "^1.0.2", "less": "https://github.com/meteor/less.js/tarball/8130849eb3d7f0ecf0ca8d0af7c4207b0442e3f6", "less-plugin-autoprefixer": "^2.1.0", - "limax": "^2.1.0", + "limax": "^3.0.0", "localforage": "^1.9.0", "lodash.clonedeep": "^4.5.0", "lodash.get": "^4.4.2",