Merge branch 'develop' into new/omnichannel-source-fields

pull/23224/head
Kevin Aleman 4 years ago committed by GitHub
commit 13b225dd1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      app/utils/client/lib/RestApiClient.js
  2. 3
      client/views/admin/users/AddUser.js
  3. 3
      client/views/admin/users/EditUser.js
  4. 4
      client/views/admin/users/UserInfo.js
  5. 10
      client/views/admin/users/UserInfoActions.js
  6. 53
      client/views/admin/users/UsersPage.js
  7. 51
      client/views/admin/users/UsersTable.js
  8. 316
      package-lock.json
  9. 2
      package.json

@ -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]) }`;
}
});
}

@ -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();
}
});

@ -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]);

@ -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}
/>
)
}

@ -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(
<GenericModal variant='success' onClose={handleClose} onConfirm={handleClose}>
<GenericModal variant='success' onClose={handleDeletedUser} onConfirm={handleDeletedUser}>
{t('User_has_been_deleted')}
</GenericModal>,
);

@ -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() {
</ButtonGroup>
</Page.Header>
<Page.Content>
<UsersTable />
<UsersTable users={data.users} total={data.total} />
</Page.Content>
</Page>
{context && (
@ -57,9 +102,9 @@ function UsersPage() {
<VerticalBar.Close onClick={handleVerticalBarCloseButtonClick} />
</VerticalBar.Header>
{context === 'info' && <UserInfoWithData uid={id} />}
{context === 'info' && <UserInfoWithData uid={id} reloadTable={reload} />}
{context === 'edit' && <EditUserWithData uid={id} />}
{context === 'new' && <AddUser />}
{context === 'new' && <AddUser reloadTable={reload} />}
{context === 'invite' && <InviteUsers />}
</VerticalBar>
)}

@ -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() {
</GenericTable.HeaderCell>
</>
}
results={data.users}
total={data.total}
results={props.users}
total={props.total}
setParams={setParams}
params={params}
renderFilter={({ onChange, ...props }) => (

316
package-lock.json generated

@ -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",

@ -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",

Loading…
Cancel
Save