1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00

fixed ramda imports to reduce bundle size

This commit is contained in:
Fedor Katurov 2022-01-25 11:24:42 +07:00
parent a497912049
commit 097b091abd
47 changed files with 208 additions and 91 deletions

View file

@ -1,17 +1,22 @@
/** used to transpile UMD and CJS modules */ /** used to transpile UMD and CJS modules */
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
});
const withTM = require('next-transpile-modules')(['ramda']); const withTM = require('next-transpile-modules')(['ramda']);
module.exports = withTM({ module.exports = withBundleAnalyzer(
/** rewrite old-style node paths */ withTM({
async rewrites() { /** rewrite old-style node paths */
return [ async rewrites() {
{ return [
source: '/post:id', {
destination: '/node/:id', source: '/post:id',
}, destination: '/node/:id',
]; },
}, ];
},
/** don't try to optimize fonts */ /** don't try to optimize fonts */
optimizeFonts: false, optimizeFonts: false,
}); })
);

View file

@ -51,14 +51,15 @@
"yup": "^0.32.9" "yup": "^0.32.9"
}, },
"scripts": { "scripts": {
"start": "craco start",
"build": "craco build",
"ts-check": "tsc -p tsconfig.json --noEmit", "ts-check": "tsc -p tsconfig.json --noEmit",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx", "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"prepare": "husky install", "prepare": "husky install",
"next:dev": "next dev", "next:dev": "next dev",
"next:build": "next build", "next:build": "next build",
"next:start": "next start -p 80" "next:start": "next start -p 80",
"analyze": "ANALYZE=true next build",
"analyze:server": "BUNDLE_ANALYZE=server next build",
"analyze:browser": "BUNDLE_ANALYZE=browser next build"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
@ -79,6 +80,7 @@
}, },
"devDependencies": { "devDependencies": {
"@craco/craco": "^6.4.3", "@craco/craco": "^6.4.3",
"@next/bundle-analyzer": "^12.0.8",
"@next/eslint-plugin-next": "^12.0.8", "@next/eslint-plugin-next": "^12.0.8",
"@types/classnames": "^2.2.7", "@types/classnames": "^2.2.7",
"@types/marked": "^1.2.2", "@types/marked": "^1.2.2",
@ -86,6 +88,7 @@
"@types/ramda": "^0.26.33", "@types/ramda": "^0.26.33",
"@types/throttle-debounce": "^2.1.0", "@types/throttle-debounce": "^2.1.0",
"@types/yup": "^0.29.11", "@types/yup": "^0.29.11",
"babel-plugin-transform-imports": "^2.0.0",
"craco-alias": "^2.3.1", "craco-alias": "^2.3.1",
"eslint-plugin-import": "^2.25.4", "eslint-plugin-import": "^2.25.4",
"husky": "^7.0.4", "husky": "^7.0.4",

View file

@ -1,11 +1,10 @@
import React, { useCallback, VFC } from 'react'; import React, { useCallback, VFC } from 'react';
import { path } from 'ramda';
import { Icon } from '~/components/input/Icon'; import { Icon } from '~/components/input/Icon';
import { PlayerState } from '~/constants/player'; import { PlayerState } from '~/constants/player';
import { IFile } from '~/types'; import { IFile } from '~/types';
import { PlayerProgress } from '~/types/player'; import { PlayerProgress } from '~/types/player';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,11 +1,11 @@
import React, { FC, useCallback, useState } from 'react'; import React, { FC, useCallback, useState } from 'react';
import { path } from 'ramda';
import { Manager, Popper, Reference } from 'react-popper'; import { Manager, Popper, Reference } from 'react-popper';
import { Avatar } from '~/components/common/Avatar'; import { Avatar } from '~/components/common/Avatar';
import { useRandomPhrase } from '~/constants/phrases'; import { useRandomPhrase } from '~/constants/phrases';
import { IUser } from '~/types/auth'; import { IUser } from '~/types/auth';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -2,8 +2,6 @@ import React, { createElement, FC, Fragment, memo, useCallback, useMemo, useStat
import classnames from 'classnames'; import classnames from 'classnames';
import classNames from 'classnames'; import classNames from 'classnames';
import { append, assocPath, path } from 'ramda';
import reduce from 'ramda/es/reduce';
import { CommentForm } from '~/components/comment/CommentForm'; import { CommentForm } from '~/components/comment/CommentForm';
import { Group } from '~/components/containers/Group'; import { Group } from '~/components/containers/Group';
@ -13,14 +11,12 @@ import { UploadType } from '~/constants/uploads';
import { PRESETS } from '~/constants/urls'; import { PRESETS } from '~/constants/urls';
import { IComment, IFile } from '~/types'; import { IComment, IFile } from '~/types';
import { formatCommentText, getPrettyDate, getURL } from '~/utils/dom'; import { formatCommentText, getPrettyDate, getURL } from '~/utils/dom';
import { append, assocPath, path, reduce } from '~/utils/ramda';
import { CommentMenu } from '../CommentMenu'; import { CommentMenu } from '../CommentMenu';
import styles from './styles.module.scss'; import styles from './styles.module.scss';
interface IProps { interface IProps {
nodeId: number; nodeId: number;
comment: IComment; comment: IComment;

View file

@ -1,10 +1,10 @@
import React, { FC } from 'react'; import React, { FC } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { path } from 'ramda';
import { CommentAvatar } from '~/components/comment/CommentAvatar'; import { CommentAvatar } from '~/components/comment/CommentAvatar';
import { IUser } from '~/types/auth'; import { IUser } from '~/types/auth';
import { path } from '~/utils/ramda';
import { DivProps } from '~/utils/types'; import { DivProps } from '~/utils/types';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,7 +1,5 @@
import React, { FC, useCallback, useMemo } from 'react'; import React, { FC, useCallback, useMemo } from 'react';
import { values } from 'ramda';
import { UploadDropzone } from '~/components/upload/UploadDropzone'; import { UploadDropzone } from '~/components/upload/UploadDropzone';
import { UploadType } from '~/constants/uploads'; import { UploadType } from '~/constants/uploads';
import { useNodeAudios } from '~/hooks/node/useNodeAudios'; import { useNodeAudios } from '~/hooks/node/useNodeAudios';
@ -9,13 +7,13 @@ import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik';
import { useNodeImages } from '~/hooks/node/useNodeImages'; import { useNodeImages } from '~/hooks/node/useNodeImages';
import { NodeEditorProps } from '~/types/node'; import { NodeEditorProps } from '~/types/node';
import { useUploaderContext } from '~/utils/context/UploaderContextProvider'; import { useUploaderContext } from '~/utils/context/UploaderContextProvider';
import { values } from '~/utils/ramda';
import { AudioGrid } from '../AudioGrid'; import { AudioGrid } from '../AudioGrid';
import { ImageGrid } from '../ImageGrid'; import { ImageGrid } from '../ImageGrid';
import styles from './styles.module.scss'; import styles from './styles.module.scss';
type IProps = NodeEditorProps; type IProps = NodeEditorProps;
const AudioEditor: FC<IProps> = () => { const AudioEditor: FC<IProps> = () => {

View file

@ -1,9 +1,8 @@
import React, { createElement, FC } from 'react'; import React, { createElement, FC } from 'react';
import { has } from 'ramda';
import { NODE_PANEL_COMPONENTS } from '~/constants/node'; import { NODE_PANEL_COMPONENTS } from '~/constants/node';
import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik'; import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik';
import { has } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,11 +1,10 @@
import React, { FC } from 'react'; import React, { FC } from 'react';
import { values } from 'ramda';
import { ImageGrid } from '~/components/editors/ImageGrid'; import { ImageGrid } from '~/components/editors/ImageGrid';
import { UploadDropzone } from '~/components/upload/UploadDropzone'; import { UploadDropzone } from '~/components/upload/UploadDropzone';
import { NodeEditorProps } from '~/types/node'; import { NodeEditorProps } from '~/types/node';
import { useUploaderContext } from '~/utils/context/UploaderContextProvider'; import { useUploaderContext } from '~/utils/context/UploaderContextProvider';
import { values } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,11 +1,10 @@
import React, { FC, useCallback } from 'react'; import React, { FC, useCallback } from 'react';
import { path } from 'ramda';
import { Textarea } from '~/components/input/Textarea'; import { Textarea } from '~/components/input/Textarea';
import { useRandomPhrase } from '~/constants/phrases'; import { useRandomPhrase } from '~/constants/phrases';
import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik'; import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik';
import { NodeEditorProps } from '~/types/node'; import { NodeEditorProps } from '~/types/node';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,12 +1,12 @@
import React, { FC, useCallback, useMemo } from 'react'; import React, { FC, useCallback, useMemo } from 'react';
import classnames from 'classnames'; import classnames from 'classnames';
import { path } from 'ramda';
import { InputText } from '~/components/input/InputText'; import { InputText } from '~/components/input/InputText';
import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik'; import { useNodeFormContext } from '~/hooks/node/useNodeFormFormik';
import { NodeEditorProps } from '~/types/node'; import { NodeEditorProps } from '~/types/node';
import { getYoutubeThumb } from '~/utils/dom'; import { getYoutubeThumb } from '~/utils/dom';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,16 +1,14 @@
import React, { FC, useMemo } from 'react'; import React, { FC, useMemo } from 'react';
import { path } from 'ramda';
import { Markdown } from '~/components/containers/Markdown'; import { Markdown } from '~/components/containers/Markdown';
import { Paragraph } from '~/components/placeholders/Paragraph'; import { Paragraph } from '~/components/placeholders/Paragraph';
import { INodeComponentProps } from '~/constants/node'; import { INodeComponentProps } from '~/constants/node';
import { useGotoNode } from '~/hooks/node/useGotoNode'; import { useGotoNode } from '~/hooks/node/useGotoNode';
import { formatTextParagraphs } from '~/utils/dom'; import { formatTextParagraphs } from '~/utils/dom';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';
const LabText: FC<INodeComponentProps> = ({ node, isLoading }) => { const LabText: FC<INodeComponentProps> = ({ node, isLoading }) => {
const content = useMemo(() => formatTextParagraphs(path(['blocks', 0, 'text'], node) || ''), [ const content = useMemo(() => formatTextParagraphs(path(['blocks', 0, 'text'], node) || ''), [
node, node,

View file

@ -1,11 +1,10 @@
import React, { FC } from 'react'; import React, { FC } from 'react';
import { path } from 'ramda';
import { INodeComponentProps } from '~/constants/node'; import { INodeComponentProps } from '~/constants/node';
import { PRESETS } from '~/constants/urls'; import { PRESETS } from '~/constants/urls';
import { useNodeImages } from '~/hooks/node/useNodeImages'; import { useNodeImages } from '~/hooks/node/useNodeImages';
import { getURL } from '~/utils/dom'; import { getURL } from '~/utils/dom';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,15 +1,14 @@
import React, { FC, memo } from 'react'; import React, { FC, memo } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import range from 'ramda/es/range';
import { Group } from '~/components/containers/Group'; import { Group } from '~/components/containers/Group';
import cell_style from '~/components/node/NodeRelatedItem/styles.module.scss'; import cell_style from '~/components/node/NodeRelatedItem/styles.module.scss';
import { Placeholder } from '~/components/placeholders/Placeholder'; import { Placeholder } from '~/components/placeholders/Placeholder';
import { range } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';
interface IProps {} interface IProps {}
const NodeRelatedPlaceholder: FC<IProps> = memo(() => { const NodeRelatedPlaceholder: FC<IProps> = memo(() => {

View file

@ -1,15 +1,14 @@
import React, { FC, useMemo } from 'react'; import React, { FC, useMemo } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { path } from 'ramda';
import { INodeComponentProps } from '~/constants/node'; import { INodeComponentProps } from '~/constants/node';
import markdown from '~/styles/common/markdown.module.scss'; import markdown from '~/styles/common/markdown.module.scss';
import { formatTextParagraphs } from '~/utils/dom'; import { formatTextParagraphs } from '~/utils/dom';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';
interface IProps extends INodeComponentProps {} interface IProps extends INodeComponentProps {}
const NodeTextBlock: FC<IProps> = ({ node }) => { const NodeTextBlock: FC<IProps> = ({ node }) => {

View file

@ -1,8 +1,7 @@
import React, { FC, useMemo } from 'react'; import React, { FC, useMemo } from 'react';
import { path } from 'ramda';
import { INodeComponentProps } from '~/constants/node'; import { INodeComponentProps } from '~/constants/node';
import { path } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,7 +1,6 @@
import React, { FC } from 'react'; import React, { FC } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { has } from 'ramda';
import { Filler } from '~/components/containers/Filler'; import { Filler } from '~/components/containers/Filler';
import { Group } from '~/components/containers/Group'; import { Group } from '~/components/containers/Group';
@ -13,7 +12,7 @@ import { ProfileAccounts } from '~/containers/profile/ProfileAccounts';
import { usePatchUser } from '~/hooks/auth/usePatchUser'; import { usePatchUser } from '~/hooks/auth/usePatchUser';
import { useUser } from '~/hooks/auth/useUser'; import { useUser } from '~/hooks/auth/useUser';
import { useProfileForm } from '~/hooks/profile/useProfileForm'; import { useProfileForm } from '~/hooks/profile/useProfileForm';
import { has } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,12 +1,11 @@
import React, { FC, useCallback, useMemo, useRef } from 'react'; import React, { FC, useCallback, useMemo, useRef } from 'react';
import { values } from 'ramda';
import { EMPTY_NODE, NODE_TYPES } from '~/constants/node'; import { EMPTY_NODE, NODE_TYPES } from '~/constants/node';
import { EditorDialog } from '~/containers/dialogs/EditorDialog'; import { EditorDialog } from '~/containers/dialogs/EditorDialog';
import { useCreateNode } from '~/hooks/node/useCreateNode'; import { useCreateNode } from '~/hooks/node/useCreateNode';
import { INode } from '~/types'; import { INode } from '~/types';
import { DialogComponentProps } from '~/types/modal'; import { DialogComponentProps } from '~/types/modal';
import { values } from '~/utils/ramda';
export interface EditorCreateDialogProps extends DialogComponentProps { export interface EditorCreateDialogProps extends DialogComponentProps {
type: typeof NODE_TYPES[keyof typeof NODE_TYPES]; type: typeof NODE_TYPES[keyof typeof NODE_TYPES];

View file

@ -2,7 +2,6 @@ import React, { createElement, FC, useCallback, useMemo, useState } from 'react'
import { FormikProvider } from 'formik'; import { FormikProvider } from 'formik';
import { observer } from 'mobx-react-lite'; import { observer } from 'mobx-react-lite';
import { prop } from 'ramda';
import { CoverBackdrop } from '~/components/containers/CoverBackdrop'; import { CoverBackdrop } from '~/components/containers/CoverBackdrop';
import { BetterScrollDialog } from '~/components/dialogs/BetterScrollDialog'; import { BetterScrollDialog } from '~/components/dialogs/BetterScrollDialog';
@ -16,7 +15,7 @@ import { useNodeFormFormik } from '~/hooks/node/useNodeFormFormik';
import { INode } from '~/types'; import { INode } from '~/types';
import { DialogComponentProps } from '~/types/modal'; import { DialogComponentProps } from '~/types/modal';
import { UploaderContextProvider } from '~/utils/context/UploaderContextProvider'; import { UploaderContextProvider } from '~/utils/context/UploaderContextProvider';
import { prop } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,11 +1,11 @@
import React, { FC } from 'react'; import React, { FC } from 'react';
import { observer } from 'mobx-react-lite'; import { observer } from 'mobx-react-lite';
import { has } from 'ramda';
import { ModalWrapper } from '~/components/dialogs/ModalWrapper'; import { ModalWrapper } from '~/components/dialogs/ModalWrapper';
import { DIALOG_CONTENT } from '~/constants/modal'; import { DIALOG_CONTENT } from '~/constants/modal';
import { useModalStore } from '~/store/modal/useModalStore'; import { useModalStore } from '~/store/modal/useModalStore';
import { has } from '~/utils/ramda';
type IProps = {}; type IProps = {};

View file

@ -1,12 +1,12 @@
import React, { FC } from 'react'; import React, { FC } from 'react';
import { values } from 'ramda';
import Masonry from 'react-masonry-css'; import Masonry from 'react-masonry-css';
import { InfiniteScroll } from '~/components/containers/InfiniteScroll'; import { InfiniteScroll } from '~/components/containers/InfiniteScroll';
import { LabNode } from '~/components/lab/LabNode'; import { LabNode } from '~/components/lab/LabNode';
import { EMPTY_NODE, NODE_TYPES } from '~/constants/node'; import { EMPTY_NODE, NODE_TYPES } from '~/constants/node';
import { useLabContext } from '~/utils/context/LabContextProvider'; import { useLabContext } from '~/utils/context/LabContextProvider';
import { values } from '~/utils/ramda';
import styles from './styles.module.scss'; import styles from './styles.module.scss';

View file

@ -1,11 +1,10 @@
import React, { FC, HTMLAttributes, useCallback, useMemo, useState } from 'react'; import React, { FC, HTMLAttributes, useCallback, useMemo, useState } from 'react';
import { uniq } from 'ramda';
import { TagField } from '~/components/containers/TagField'; import { TagField } from '~/components/containers/TagField';
import { Tag } from '~/components/tags/Tag'; import { Tag } from '~/components/tags/Tag';
import { TagInput } from '~/containers/tags/TagInput'; import { TagInput } from '~/containers/tags/TagInput';
import { ITag } from '~/types'; import { ITag } from '~/types';
import { uniq } from '~/utils/ramda';
import { separateTags } from '~/utils/tag'; import { separateTags } from '~/utils/tag';
type IProps = HTMLAttributes<HTMLDivElement> & { type IProps = HTMLAttributes<HTMLDivElement> & {

View file

@ -1,12 +1,11 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import { includes, path, values } from 'ramda';
import { EventMessageType } from '~/constants/events'; import { EventMessageType } from '~/constants/events';
import { Dialog } from '~/constants/modal'; import { Dialog } from '~/constants/modal';
import { useAuth } from '~/hooks/auth/useAuth'; import { useAuth } from '~/hooks/auth/useAuth';
import { useOAuth } from '~/hooks/auth/useOAuth'; import { useOAuth } from '~/hooks/auth/useOAuth';
import { useModal } from '~/hooks/modal/useModal'; import { useModal } from '~/hooks/modal/useModal';
import { includes, path, values } from '~/utils/ramda';
/** reacts to events passed by window.postMessage */ /** reacts to events passed by window.postMessage */
export const useMessageEventReactions = () => { export const useMessageEventReactions = () => {

View file

@ -1,6 +1,5 @@
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { path } from 'ramda';
import useSWR from 'swr'; import useSWR from 'swr';
import { apiAttachSocial, apiDropSocial, apiGetSocials, apiLoginWithSocial } from '~/api/auth'; import { apiAttachSocial, apiDropSocial, apiGetSocials, apiLoginWithSocial } from '~/api/auth';
@ -10,6 +9,7 @@ import { useAuth } from '~/hooks/auth/useAuth';
import { useModal } from '~/hooks/modal/useModal'; import { useModal } from '~/hooks/modal/useModal';
import { OAuthProvider } from '~/types/auth'; import { OAuthProvider } from '~/types/auth';
import { showErrorToast } from '~/utils/errors/showToast'; import { showErrorToast } from '~/utils/errors/showToast';
import { path } from '~/utils/ramda';
export const useOAuth = () => { export const useOAuth = () => {
const { isUser, setToken } = useAuth(); const { isUser, setToken } = useAuth();

View file

@ -1,12 +1,12 @@
import { useCallback, useEffect, useRef } from 'react'; import { useCallback, useEffect, useRef } from 'react';
import { FormikHelpers, useFormik, useFormikContext } from 'formik'; import { FormikHelpers, useFormik, useFormikContext } from 'formik';
import { hasPath, path } from 'ramda';
import { array, object, string } from 'yup'; import { array, object, string } from 'yup';
import { IComment, INode } from '~/types'; import { IComment, INode } from '~/types';
import { Uploader } from '~/utils/context/UploaderContextProvider'; import { Uploader } from '~/utils/context/UploaderContextProvider';
import { showErrorToast } from '~/utils/errors/showToast'; import { showErrorToast } from '~/utils/errors/showToast';
import { hasPath, path } from '~/utils/ramda';
const validationSchema = object().shape({ const validationSchema = object().shape({
text: string(), text: string(),

View file

@ -1,12 +1,12 @@
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { flatten, isNil } from 'ramda';
import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite'; import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite';
import { apiGetNodeComments } from '~/api/node'; import { apiGetNodeComments } from '~/api/node';
import { API } from '~/constants/api'; import { API } from '~/constants/api';
import { COMMENTS_DISPLAY } from '~/constants/node'; import { COMMENTS_DISPLAY } from '~/constants/node';
import { IComment } from '~/types'; import { IComment } from '~/types';
import { flatten, isNil } from '~/utils/ramda';
const getKey: (nodeId: number) => SWRInfiniteKeyLoader = (nodeId: number) => ( const getKey: (nodeId: number) => SWRInfiniteKeyLoader = (nodeId: number) => (
pageIndex, pageIndex,

View file

@ -1,8 +1,7 @@
import { useMemo } from 'react'; import { useMemo } from 'react';
import { has } from 'ramda';
import { ERROR_LITERAL } from '~/constants/errors'; import { ERROR_LITERAL } from '~/constants/errors';
import { has } from '~/utils/ramda';
export const useTranslatedError = (error: string | undefined) => { export const useTranslatedError = (error: string | undefined) => {
return useMemo(() => { return useMemo(() => {

View file

@ -1,7 +1,6 @@
import { useCallback } from 'react'; import { useCallback } from 'react';
import { useLocalObservable } from 'mobx-react-lite'; import { useLocalObservable } from 'mobx-react-lite';
import { keys } from 'ramda';
import uuid from 'uuid4'; import uuid from 'uuid4';
import { apiUploadFile } from '~/api/uploads'; import { apiUploadFile } from '~/api/uploads';
@ -9,7 +8,7 @@ import { UploadSubject, UploadTarget } from '~/constants/uploads';
import { UploaderStore } from '~/store/uploader/UploaderStore'; import { UploaderStore } from '~/store/uploader/UploaderStore';
import { IFile } from '~/types'; import { IFile } from '~/types';
import { showErrorToast } from '~/utils/errors/showToast'; import { showErrorToast } from '~/utils/errors/showToast';
import { keys } from '~/utils/ramda';
export const useUploader = ( export const useUploader = (
subject: UploadSubject, subject: UploadSubject,

View file

@ -1,11 +1,11 @@
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { runInAction } from 'mobx'; import { runInAction } from 'mobx';
import { uniq } from 'ramda';
import { getNodeDiff } from '~/api/node'; import { getNodeDiff } from '~/api/node';
import { useFlowStore } from '~/store/flow/useFlowStore'; import { useFlowStore } from '~/store/flow/useFlowStore';
import { showErrorToast } from '~/utils/errors/showToast'; import { showErrorToast } from '~/utils/errors/showToast';
import { uniq } from '~/utils/ramda';
export const useFlowLoader = () => { export const useFlowLoader = () => {
const [isSyncing, setIsSyncing] = useState(false); const [isSyncing, setIsSyncing] = useState(false);

View file

@ -1,6 +1,5 @@
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { flatten, last, uniqBy } from 'ramda';
import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite'; import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite';
import { getLabNodes } from '~/api/lab'; import { getLabNodes } from '~/api/lab';
@ -8,6 +7,7 @@ import { useAuth } from '~/hooks/auth/useAuth';
import { useLabStore } from '~/store/lab/useLabStore'; import { useLabStore } from '~/store/lab/useLabStore';
import { INode } from '~/types'; import { INode } from '~/types';
import { GetLabNodesRequest, ILabNode } from '~/types/lab'; import { GetLabNodesRequest, ILabNode } from '~/types/lab';
import { flatten, last, uniqBy } from '~/utils/ramda';
const getKey: (isUser: boolean) => SWRInfiniteKeyLoader = isUser => (index, prev: ILabNode[]) => { const getKey: (isUser: boolean) => SWRInfiniteKeyLoader = isUser => (index, prev: ILabNode[]) => {
if (!isUser) return null; if (!isUser) return null;

View file

@ -1,9 +1,14 @@
import { createElement, FC, useCallback, useMemo } from 'react'; import { createElement, FC, useCallback, useMemo } from 'react';
import { isNil, prop } from 'ramda'; import {
INodeComponentProps,
import { INodeComponentProps, LAB_PREVIEW_LAYOUT, NODE_COMPONENTS, NODE_HEADS, NODE_INLINES } from '~/constants/node'; LAB_PREVIEW_LAYOUT,
NODE_COMPONENTS,
NODE_HEADS,
NODE_INLINES,
} from '~/constants/node';
import { INode } from '~/types'; import { INode } from '~/types';
import { isNil, prop } from '~/utils/ramda';
// useNodeBlocks returns head, block and inline blocks of node // useNodeBlocks returns head, block and inline blocks of node
export const useNodeBlocks = (node: INode, isLoading: boolean) => { export const useNodeBlocks = (node: INode, isLoading: boolean) => {

View file

@ -1,11 +1,11 @@
import { useCallback, useEffect, useMemo, useState } from 'react'; import { useCallback, useEffect, useMemo, useState } from 'react';
import { flatten } from 'ramda';
import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite'; import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite';
import { getSearchResults } from '~/api/flow'; import { getSearchResults } from '~/api/flow';
import { INode } from '~/types'; import { INode } from '~/types';
import { GetSearchResultsRequest } from '~/types/flow'; import { GetSearchResultsRequest } from '~/types/flow';
import { flatten } from '~/utils/ramda';
const RESULTS_COUNT = 20; const RESULTS_COUNT = 20;

View file

@ -1,11 +1,11 @@
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { flatten, isNil } from 'ramda';
import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite'; import useSWRInfinite, { SWRInfiniteKeyLoader } from 'swr/infinite';
import { apiGetNodesOfTag } from '~/api/tags'; import { apiGetNodesOfTag } from '~/api/tags';
import { API } from '~/constants/api'; import { API } from '~/constants/api';
import { INode } from '~/types'; import { INode } from '~/types';
import { flatten, isNil } from '~/utils/ramda';
const PAGE_SIZE = 10; const PAGE_SIZE = 10;

View file

@ -1,7 +1,7 @@
import { autorun, makeAutoObservable, runInAction } from 'mobx'; import { autorun, makeAutoObservable, runInAction } from 'mobx';
import { keys, values, without } from 'ramda';
import { EmbedMetadata } from '~/types/metadata'; import { EmbedMetadata } from '~/types/metadata';
import { keys, values, without } from '~/utils/ramda';
const MAX_QUEUE_SIZE = 25; const MAX_QUEUE_SIZE = 25;

View file

@ -1,9 +1,9 @@
import { makeAutoObservable, runInAction } from 'mobx'; import { makeAutoObservable, runInAction } from 'mobx';
import { has, omit, values } from 'ramda';
import { ERROR_LITERAL, ERRORS } from '~/constants/errors'; import { ERROR_LITERAL, ERRORS } from '~/constants/errors';
import { UploadType } from '~/constants/uploads'; import { UploadType } from '~/constants/uploads';
import { IFile, UUID } from '~/types'; import { IFile, UUID } from '~/types';
import { has, omit, values } from '~/utils/ramda';
import { getFileType, uploadGetThumb } from '~/utils/uploader'; import { getFileType, uploadGetThumb } from '~/utils/uploader';
export interface UploadStatus { export interface UploadStatus {

View file

@ -1,8 +1,8 @@
import axios, { AxiosError, AxiosResponse } from 'axios'; import axios, { AxiosError, AxiosResponse } from 'axios';
import { assocPath } from 'ramda';
import { API } from '~/constants/api'; import { API } from '~/constants/api';
import { getMOBXStore } from '~/store'; import { getMOBXStore } from '~/store';
import { assocPath } from '~/utils/ramda';
export const api = axios.create({ export const api = axios.create({
baseURL: API.BASE, baseURL: API.BASE,

View file

@ -4,7 +4,6 @@ import format from 'date-fns/format';
import formatDistanceToNow from 'date-fns/formatDistanceToNow'; import formatDistanceToNow from 'date-fns/formatDistanceToNow';
import isAfter from 'date-fns/isAfter'; import isAfter from 'date-fns/isAfter';
import ru from 'date-fns/locale/ru'; import ru from 'date-fns/locale/ru';
import { pipe } from 'ramda';
import { COMMENT_BLOCK_DETECTORS, COMMENT_BLOCK_TYPES, ICommentBlock } from '~/constants/comment'; import { COMMENT_BLOCK_DETECTORS, COMMENT_BLOCK_TYPES, ICommentBlock } from '~/constants/comment';
import { PRESETS } from '~/constants/urls'; import { PRESETS } from '~/constants/urls';
@ -20,6 +19,7 @@ import {
formatTextSanitizeYoutube, formatTextSanitizeYoutube,
formatTextTodos, formatTextTodos,
} from '~/utils/formatText'; } from '~/utils/formatText';
import { pipe } from '~/utils/ramda';
import { splitTextByYoutube, splitTextOmitEmpty } from '~/utils/splitText'; import { splitTextByYoutube, splitTextOmitEmpty } from '~/utils/splitText';
function polarToCartesian(centerX, centerY, radius, angleInDegrees) { function polarToCartesian(centerX, centerY, radius, angleInDegrees) {

View file

@ -1,6 +1,5 @@
import { has, path } from 'ramda';
import { ERROR_LITERAL, ERRORS } from '~/constants/errors'; import { ERROR_LITERAL, ERRORS } from '~/constants/errors';
import { has, path } from '~/utils/ramda';
export const getErrorMessage = (error: unknown): string | undefined => { export const getErrorMessage = (error: unknown): string | undefined => {
if (error === undefined) { if (error === undefined) {

View file

@ -1,4 +1,4 @@
import { hasPath, path } from 'ramda'; import { hasPath, path } from '~/utils/ramda';
export const getValidationErrors = (error: unknown): Record<string, string> | undefined => { export const getValidationErrors = (error: unknown): Record<string, string> | undefined => {
if (hasPath(['response', 'data', 'errors'], error)) { if (hasPath(['response', 'data', 'errors'], error)) {

View file

@ -1,7 +1,7 @@
import { isAfter, isValid, parseISO } from 'date-fns'; import { isAfter, isValid, parseISO } from 'date-fns';
import { curry, insert, nth, path, remove } from 'ramda';
import { IComment, ICommentGroup } from '~/types'; import { IComment, ICommentGroup } from '~/types';
import { curry, insert, nth, path, remove } from '~/utils/ramda';
export const moveArrItem = curry((at, to, list) => insert(to, nth(at, list), remove(at, 1, list))); export const moveArrItem = curry((at, to, list) => insert(to, nth(at, list), remove(at, 1, list)));
export const objFromArray = (array: any[], key: string) => export const objFromArray = (array: any[], key: string) =>

View file

@ -1,9 +1,8 @@
import { path } from 'ramda';
import { Role } from '~/constants/auth'; import { Role } from '~/constants/auth';
import { NODE_TYPES } from '~/constants/node'; import { NODE_TYPES } from '~/constants/node';
import { ICommentGroup, INode } from '~/types'; import { ICommentGroup, INode } from '~/types';
import { IUser } from '~/types/auth'; import { IUser } from '~/types/auth';
import { path } from '~/utils/ramda';
export const canEditNode = (node?: Partial<INode>, user?: Partial<IUser>): boolean => export const canEditNode = (node?: Partial<INode>, user?: Partial<IUser>): boolean =>
path(['role'], user) === Role.Admin || path(['user', 'id'], node) === path(['id'], user); path(['role'], user) === Role.Admin || path(['user', 'id'], node) === path(['id'], user);

View file

@ -1,11 +1,18 @@
import React, { createContext, FC, useCallback, useContext, useEffect, useRef, useState } from 'react'; import React, {
createContext,
import { path } from 'ramda'; FC,
useCallback,
useContext,
useEffect,
useRef,
useState,
} from 'react';
import { PlayerState } from '~/constants/player'; import { PlayerState } from '~/constants/player';
import { IFile } from '~/types'; import { IFile } from '~/types';
import { PlayerProgress } from '~/types/player'; import { PlayerProgress } from '~/types/player';
import { getURL } from '~/utils/dom'; import { getURL } from '~/utils/dom';
import { path } from '~/utils/ramda';
interface AudioPlayerProps { interface AudioPlayerProps {
file?: IFile; file?: IFile;

View file

@ -1,11 +1,11 @@
import React, { createContext, FC, useContext, useMemo } from 'react'; import React, { createContext, FC, useContext, useMemo } from 'react';
import { observer } from 'mobx-react-lite'; import { observer } from 'mobx-react-lite';
import { uniq } from 'ramda';
import { useFlow } from '~/hooks/flow/useFlow'; import { useFlow } from '~/hooks/flow/useFlow';
import { FlowDisplay, IFlowNode, INode } from '~/types'; import { FlowDisplay, IFlowNode, INode } from '~/types';
import { GetNodeDiffResult } from '~/types/node'; import { GetNodeDiffResult } from '~/types/node';
import { uniq } from '~/utils/ramda';
export interface FlowProviderProps { export interface FlowProviderProps {
fallbackData?: GetNodeDiffResult; fallbackData?: GetNodeDiffResult;

24
src/utils/ramda.ts Normal file
View file

@ -0,0 +1,24 @@
export { default as has } from 'ramda/es/has';
export { default as path } from 'ramda/es/path';
export { default as append } from 'ramda/es/append';
export { default as assocPath } from 'ramda/es/assocPath';
export { default as reduce } from 'ramda/es/reduce';
export { default as values } from 'ramda/es/values';
export { default as range } from 'ramda/es/range';
export { default as prop } from 'ramda/es/prop';
export { default as includes } from 'ramda/es/includes';
export { default as hasPath } from 'ramda/es/hasPath';
export { default as isNil } from 'ramda/es/isNil';
export { default as flatten } from 'ramda/es/flatten';
export { default as keys } from 'ramda/es/keys';
export { default as uniq } from 'ramda/es/uniq';
export { default as last } from 'ramda/es/last';
export { default as uniqBy } from 'ramda/es/uniqBy';
export { default as omit } from 'ramda/es/omit';
export { default as curry } from 'ramda/es/curry';
export { default as pipe } from 'ramda/es/pipe';
export { default as without } from 'ramda/es/without';
export { default as nth } from 'ramda/es/nth';
export { default as insert } from 'ramda/es/insert';
export { default as isEmpty } from 'ramda/es/isEmpty';
export { default as remove } from 'ramda/es/remove';

View file

@ -1,4 +1,4 @@
import { flatten, isEmpty } from 'ramda'; import { flatten, isEmpty } from '~/utils/ramda';
export const splitTextByYoutube = (strings: string[]): string[] => export const splitTextByYoutube = (strings: string[]): string[] =>
flatten( flatten(

File diff suppressed because one or more lines are too long

104
yarn.lock
View file

@ -1084,6 +1084,14 @@
"@babel/helper-validator-identifier" "^7.16.7" "@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.4":
version "7.16.8"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1"
integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==
dependencies:
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3": "@bcoe/v8-coverage@^0.2.3":
version "0.2.3" version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@ -1368,6 +1376,13 @@
resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c" resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c"
integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA== integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==
"@next/bundle-analyzer@^12.0.8":
version "12.0.8"
resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.0.8.tgz#a4fef1b14f8a4a87c09d97a3d909deddc88d12f8"
integrity sha512-tRwFyAkJA0h+rwt4exq31T59qo4qwp7vPoR3yC8gIpK/E5NAwafyk40aNpk4OWhiQ2IvJMFutukMzY3xl79NXA==
dependencies:
webpack-bundle-analyzer "4.3.0"
"@next/env@12.0.7": "@next/env@12.0.7":
version "12.0.7" version "12.0.7"
resolved "https://registry.yarnpkg.com/@next/env/-/env-12.0.7.tgz#316f7bd1b6b69f554d2676cfc91a16bc7e32ee79" resolved "https://registry.yarnpkg.com/@next/env/-/env-12.0.7.tgz#316f7bd1b6b69f554d2676cfc91a16bc7e32ee79"
@ -1498,6 +1513,11 @@
schema-utils "^3.0.0" schema-utils "^3.0.0"
source-map "^0.7.3" source-map "^0.7.3"
"@polka/url@^1.0.0-next.20":
version "1.0.0-next.21"
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
"@popperjs/core@^2.5.4": "@popperjs/core@^2.5.4":
version "2.11.2" version "2.11.2"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
@ -2384,7 +2404,7 @@ acorn-walk@^7.0.0, acorn-walk@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
acorn-walk@^8.1.1: acorn-walk@^8.0.0, acorn-walk@^8.1.1:
version "8.2.0" version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
@ -2399,7 +2419,7 @@ acorn@^7.0.0, acorn@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.0: acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.0:
version "8.7.0" version "8.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
@ -2885,6 +2905,14 @@ babel-plugin-polyfill-regenerator@^0.3.0:
dependencies: dependencies:
"@babel/helper-define-polyfill-provider" "^0.3.0" "@babel/helper-define-polyfill-provider" "^0.3.0"
babel-plugin-transform-imports@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-imports/-/babel-plugin-transform-imports-2.0.0.tgz#9e5f49f751a9d34ba8f4bb988c7e48ed2419c6b6"
integrity sha512-65ewumYJ85QiXdcB/jmiU0y0jg6eL6CdnDqQAqQ8JMOKh1E52VPG3NJzbVKWcgovUR5GBH8IWpCXQ7I8Q3wjgw==
dependencies:
"@babel/types" "^7.4"
is-valid-path "^0.1.1"
babel-plugin-transform-react-remove-prop-types@^0.4.24: babel-plugin-transform-react-remove-prop-types@^0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
@ -3537,6 +3565,11 @@ commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^6.2.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
commander@^7.2.0: commander@^7.2.0:
version "7.2.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@ -5951,6 +5984,11 @@ is-docker@^2.0.0, is-docker@^2.1.1:
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
is-extglob@^2.1.1: is-extglob@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@ -5995,6 +6033,13 @@ is-generator-function@^1.0.7:
dependencies: dependencies:
has-tostringtag "^1.0.0" has-tostringtag "^1.0.0"
is-glob@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
dependencies:
is-extglob "^1.0.0"
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@ -6002,6 +6047,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies: dependencies:
is-extglob "^2.1.1" is-extglob "^2.1.1"
is-invalid-path@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34"
integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=
dependencies:
is-glob "^2.0.0"
is-module@^1.0.0: is-module@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
@ -6120,6 +6172,13 @@ is-utf8@^0.2.0:
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-valid-path@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df"
integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=
dependencies:
is-invalid-path "^0.1.0"
is-weakref@^1.0.1: is-weakref@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
@ -7256,6 +7315,11 @@ mobx@^6.3.10:
resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.3.12.tgz#2ceb4f632081a8bf8757ba7e5e01b5810800022f" resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.3.12.tgz#2ceb4f632081a8bf8757ba7e5e01b5810800022f"
integrity sha512-5Hx2IjhBtySVQlSFe+sHczKgOQ+cCyi8hN2wEvWzpJEEMRflQoDzDwJJ+m7SBWBQhfrWMWb1RGZNk4X1XtxJkQ== integrity sha512-5Hx2IjhBtySVQlSFe+sHczKgOQ+cCyi8hN2wEvWzpJEEMRflQoDzDwJJ+m7SBWBQhfrWMWb1RGZNk4X1XtxJkQ==
mrmime@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b"
integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@ -7670,6 +7734,11 @@ open@^8.0.9, open@^8.4.0:
is-docker "^2.1.1" is-docker "^2.1.1"
is-wsl "^2.2.0" is-wsl "^2.2.0"
opener@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
optionator@^0.8.1: optionator@^0.8.1:
version "0.8.3" version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@ -9613,6 +9682,15 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
sirv@^1.0.7:
version "1.0.19"
resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==
dependencies:
"@polka/url" "^1.0.0-next.20"
mrmime "^1.0.0"
totalist "^1.0.0"
sisteransi@^1.0.5: sisteransi@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@ -10399,6 +10477,11 @@ toposort@^2.0.2:
resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
totalist@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
tough-cookie@^4.0.0: tough-cookie@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
@ -10821,6 +10904,21 @@ webidl-conversions@^6.1.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
webpack-bundle-analyzer@4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.3.0.tgz#2f3c0ca9041d5ee47fa418693cf56b4a518b578b"
integrity sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==
dependencies:
acorn "^8.0.4"
acorn-walk "^8.0.0"
chalk "^4.1.0"
commander "^6.2.0"
gzip-size "^6.0.0"
lodash "^4.17.20"
opener "^1.5.2"
sirv "^1.0.7"
ws "^7.3.1"
webpack-dev-middleware@^5.3.0: webpack-dev-middleware@^5.3.0:
version "5.3.0" version "5.3.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz#8fc02dba6e72e1d373eca361623d84610f27be7c" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz#8fc02dba6e72e1d373eca361623d84610f27be7c"
@ -11249,7 +11347,7 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2" signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5" typedarray-to-buffer "^3.1.5"
ws@^7.4.6: ws@^7.3.1, ws@^7.4.6:
version "7.5.6" version "7.5.6"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==