all repos — caroster @ 4428fde33ccd0b8eecdb6cd3631c43e6af381ae6

[Octree] Group carpool to your event https://caroster.io

feat: đź’„ Add 'support' buttons, improve menu

#1
Tim Izzo tim@octree.ch
Thu, 26 Jan 2023 15:26:13 +0100
commit

4428fde33ccd0b8eecdb6cd3631c43e6af381ae6

parent

4357e242456ed35ecc4e37b0c79129428acd3bae

M backend/src/api/setting/content-types/setting/schema.jsonbackend/src/api/setting/content-types/setting/schema.json

@@ -56,6 +56,22 @@ "localized": false

} }, "type": "string" + }, + "opencollective_link": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "string" + }, + "code_link": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "string" } } }
M frontend/containers/GenericMenu/Action.tsxfrontend/containers/GenericMenu/Action.tsx

@@ -1,5 +1,5 @@

import {isValidElement} from 'react'; -import { styled } from '@mui/material/styles'; +import {styled} from '@mui/material/styles'; import Divider from '@mui/material/Divider'; import Typography from '@mui/material/Typography'; import MenuItem from '@mui/material/MenuItem';

@@ -7,24 +7,9 @@ const PREFIX = 'Action';

const classes = { divider: `${PREFIX}-divider`, - textItem: `${PREFIX}-textItem` + textItem: `${PREFIX}-textItem`, }; -const StyledTypography = styled(Typography)(( - { - theme - } -) => ({ - [`& .${classes.divider}`]: { - margin: theme.spacing(1, 0), - }, - - [`&.${classes.textItem}`]: { - margin: theme.spacing(1, 2), - '&:focus': {outline: 0}, - } -})); - export type ActionType = { divider?: boolean; label: JSX.Element | string;

@@ -40,9 +25,7 @@ const Action = (props: Props): JSX.Element => {

const {action} = props; const {divider, onClick, id, label, ...menuItemProps} = action; - - if (divider) - return <Divider variant="fullWidth" className={classes.divider} />; + if (divider) return <Divider variant="fullWidth" sx={{my: 1}} />; else if (isValidElement(label)) return label; else if (onClick) return (

@@ -57,5 +40,12 @@ {label}

</StyledTypography> ); }; + +const StyledTypography = styled(Typography)(({theme}) => ({ + [`&.${classes.textItem}`]: { + margin: theme.spacing(1, 2), + '&:focus': {outline: 0}, + }, +})); export default Action;
A frontend/containers/GenericMenu/ExternalLink.tsx

@@ -0,0 +1,20 @@

+import {Link, MenuItem} from '@mui/material'; +import React from 'react'; + +type Props = { + label: JSX.Element | string; + url: string; + id: string; +}; + +const ExternalLink = (props: Props) => { + const {label, url, id} = props; + + return ( + <Link href={url} target="_blank" underline="none"> + <MenuItem id={id}>{label}</MenuItem> + </Link> + ); +}; + +export default ExternalLink;
M frontend/containers/GenericMenu/index.tsxfrontend/containers/GenericMenu/index.tsx

@@ -4,6 +4,8 @@ import {signOut, useSession} from 'next-auth/react';

import useSettings from '../../hooks/useSettings'; import Languages from '../Languages/MenuItem'; import Action, {ActionType} from './Action'; +import ExternalLink from './ExternalLink'; +import {Chip, Typography} from '@mui/material'; interface Props { anchorEl: Element;

@@ -18,6 +20,53 @@ const settings = useSettings();

const session = useSession(); const isAuthenticated = session.status === 'authenticated'; + const supportItem = { + label: ( + <ExternalLink + id="SupportCaroster" + url={settings['opencollective_link']} + label={ + <Typography variant="caption" color="textSecondary"> + <Chip + label={t`supportCaroster`} + color="secondary" + sx={{fontDecoration: 'none', cursor: 'pointer'}} + /> + </Typography> + } + ></ExternalLink> + ), + }; + const languageMenuItem = { + label: <Languages />, + id: 'LanguageSelection', + }; + const aboutMenuItem = { + label: ( + <ExternalLink + id="AboutCaroster" + url={settings['about_link']} + label={ + <Typography variant="caption" color="textSecondary"> + {t('menu.about')} + </Typography> + } + ></ExternalLink> + ), + }; + const sourceCodeItem = { + label: ( + <ExternalLink + id="SourceCode" + url={settings['code_link']} + label={ + <Typography variant="caption" color="textSecondary"> + {t('menu.code')} + </Typography> + } + ></ExternalLink> + ), + }; const logoutMenuItem = isAuthenticated && { label: t('menu.logout'), onClick: () => {

@@ -28,25 +77,15 @@ });

}, id: 'LogoutTabs', }; - const aboutMenuItem = { - label: t('menu.about'), - onClick: () => { - window.location.href = settings['about_link']; - setAnchorEl(null); - }, - id: 'AboutTabs', - }; - const languageMenuItem = { - label: <Languages />, - id: 'LanguageSelection', - }; const validActions = [ ...actions, + supportItem, languageMenuItem, - aboutMenuItem, - {divider: true}, logoutMenuItem, + {divider: true}, + aboutMenuItem, + sourceCodeItem, ].filter(Boolean); return (
A frontend/containers/SupportCaroster/index.tsx

@@ -0,0 +1,22 @@

+import {Link} from '@mui/material'; +import {useTranslation} from 'react-i18next'; +import useSettings from '../../hooks/useSettings'; + +type Props = {}; + +const SupportCaroster = (props: Props) => { + const settings = useSettings(); + const {t} = useTranslation(); + + return ( + <Link + href={settings['opencollective_link']} + color="textSecondary" + target="_blank" + > + {t`supportCaroster`} + </Link> + ); +}; + +export default SupportCaroster;
M frontend/containers/TravelColumns/NoCar.tsxfrontend/containers/TravelColumns/NoCar.tsx

@@ -3,52 +3,58 @@ import {useTheme} from '@mui/material/styles';

import Box from '@mui/material/Box'; import {useTranslation} from 'react-i18next'; import ShareEvent from '../ShareEvent'; +import SupportCaroster from '../SupportCaroster'; interface Props { eventName: string; title: string; - image?: boolean; + showImage?: boolean; } -const NoCar = ({eventName, title, image}: Props) => { +const NoCar = ({eventName, title, showImage}: Props) => { const {t} = useTranslation(); const theme = useTheme(); return ( <Box - sx={{ - margin: `${theme.spacing(4)} auto`, - marginTop: image ? 0 : theme.spacing(8), - maxWidth: '100%', - width: 340, - paddingBottom: theme.spacing(16), - }} + my={4} + mx="auto" + pb={16} + mt={showImage ? 0 : 8} + maxWidth="100%" + width={340} > - <Typography variant="h5" align="center" sx={{mx: 2}}> + <Typography variant="h6" align="center" color="textSecondary"> {title} </Typography> - <Box - component="img" - sx={{ - width: image ? '100%' : 0, - height: image ? 'auto' : theme.spacing(6), - [theme.breakpoints.down('md')]: { - width: image ? '50%' : 0, - }, - }} - src="/assets/car.png" - /> - <Typography sx={{whiteSpace: 'pre-line'}}> + {showImage && ( + <Box + component="img" + sx={{ + width: '100%', + height: 'auto', + + [theme.breakpoints.down('md')]: { + width: '50%', + }, + }} + src="/assets/car.png" + /> + )} + <Typography sx={{whiteSpace: 'pre-line', mt: 4}} color="textSecondary"> {t('event.no_travel.desc')} </Typography> <ShareEvent color="primary" sx={{ - marginTop: theme.spacing(6), + mt: 4, backgroundColor: '#fff', }} title={`Caroster ${eventName}`} /> + <Box mt={4} display="flex" justifyContent="center"> + <SupportCaroster /> + </Box> </Box> ); };
M frontend/containers/TravelColumns/index.tsxfrontend/containers/TravelColumns/index.tsx

@@ -91,7 +91,7 @@ id="slider-dots"

/> {(travels?.length === 0 && ( <NoCar - image + showImage eventName={event?.name} title={t('event.no_travel.title')} />
M frontend/generated/graphql.tsxfrontend/generated/graphql.tsx

@@ -946,12 +946,14 @@ export type Setting = {

__typename?: 'Setting'; about_link?: Maybe<Scalars['String']>; announcement?: Maybe<Scalars['String']>; + code_link?: Maybe<Scalars['String']>; createdAt?: Maybe<Scalars['DateTime']>; faq_link?: Maybe<Scalars['String']>; gtm_id?: Maybe<Scalars['String']>; locale?: Maybe<Scalars['String']>; localizations?: Maybe<SettingRelationResponseCollection>; matomo_script_url?: Maybe<Scalars['String']>; + opencollective_link?: Maybe<Scalars['String']>; updatedAt?: Maybe<Scalars['DateTime']>; };

@@ -969,9 +971,11 @@

export type SettingInput = { about_link?: InputMaybe<Scalars['String']>; announcement?: InputMaybe<Scalars['String']>; + code_link?: InputMaybe<Scalars['String']>; faq_link?: InputMaybe<Scalars['String']>; gtm_id?: InputMaybe<Scalars['String']>; matomo_script_url?: InputMaybe<Scalars['String']>; + opencollective_link?: InputMaybe<Scalars['String']>; }; export type SettingRelationResponseCollection = {

@@ -1609,7 +1613,7 @@ locale: Scalars['I18NLocaleCode'];

}>; -export type SettingQuery = { __typename?: 'Query', setting?: { __typename?: 'SettingEntityResponse', data?: { __typename?: 'SettingEntity', id?: string | null, attributes?: { __typename?: 'Setting', gtm_id?: string | null, about_link?: string | null, faq_link?: string | null, announcement?: string | null, matomo_script_url?: string | null } | null } | null } | null }; +export type SettingQuery = { __typename?: 'Query', setting?: { __typename?: 'SettingEntityResponse', data?: { __typename?: 'SettingEntity', id?: string | null, attributes?: { __typename?: 'Setting', gtm_id?: string | null, about_link?: string | null, faq_link?: string | null, announcement?: string | null, matomo_script_url?: string | null, opencollective_link?: string | null, code_link?: string | null } | null } | null } | null }; export type TravelFieldsFragment = { __typename?: 'TravelEntity', id?: string | null, attributes?: { __typename?: 'Travel', meeting?: string | null, departure?: any | null, details?: string | null, vehicleName?: string | null, phone_number?: string | null, seats?: number | null, passengers?: { __typename?: 'PassengerRelationResponseCollection', data: Array<{ __typename?: 'PassengerEntity', id?: string | null, attributes?: { __typename?: 'Passenger', name: string, location?: string | null, user?: { __typename?: 'UsersPermissionsUserEntityResponse', data?: { __typename?: 'UsersPermissionsUserEntity', id?: string | null, attributes?: { __typename?: 'UsersPermissionsUser', firstName?: string | null, lastName?: string | null } | null } | null } | null } | null }> } | null } | null };

@@ -2163,6 +2167,8 @@ about_link

faq_link announcement matomo_script_url + opencollective_link + code_link } } }
M frontend/graphql/setting.gqlfrontend/graphql/setting.gql

@@ -8,6 +8,7 @@ about_link

faq_link announcement matomo_script_url + opencollective_link } } }
M frontend/locales/en.jsonfrontend/locales/en.json

@@ -1,4 +1,5 @@

{ + "supportCaroster": "Support Caroster", "drawer.information": "Information", "drawer.travels": "Travels", "drawer.waitingList": "Waiting list",

@@ -43,7 +44,8 @@ "joyride.close": "Close",

"joyride.last": "Finish", "joyride.next": "Next", "joyride.skip": "Skip", - "menu.about": "About Caroster", + "menu.about": "Discover more about Caroster", + "menu.code": "Caroster is Open Source", "menu.tour": "Caroster tour", "menu.dashboard": "My Carosters", "menu.language": "Change language",

@@ -59,7 +61,6 @@ "event.no_other_travel.title": "There are currently no other car",

"event.no_travel.desc": "1. Subscribe to the waiting list\n2. Share the event\n3. You will be notified when a new travel is added", "event.details.modify": "Modify", "event.details.save": "Save", - "event.details.aboutCaroster": "Learn more about Caroster", "event.fields.name": "Name of the event", "event.fields.date": "Event date", "event.fields.date_placeholder": "DD/MM/YYYY",
M frontend/locales/fr.jsonfrontend/locales/fr.json

@@ -1,4 +1,5 @@

{ + "supportCaroster": "Soutenir Caroster", "drawer.information": "Information", "drawer.travels": "Trajets", "drawer.waitingList": "Liste d'attente",

@@ -43,7 +44,8 @@ "joyride.close": "Fermer",

"joyride.last": "Terminer", "joyride.next": "Suivant", "joyride.skip": "Fermer", - "menu.about": "Ă€ propos de Caroster", + "menu.about": "En savoir plus sur Caroster", + "menu.code": "Caroster est Open Source", "menu.tour": "DĂ©couverte de Caroster", "menu.dashboard": "Mes Carosters", "menu.language": "Changer la langue",

@@ -59,7 +61,6 @@ "event.no_other_travel.title": "Pas d'autres voitures pour le moment",

"event.no_travel.desc": "1. Inscrivez-vous dans la liste d’attente \n2. Partagez l’événement \n3. Vous serez notifié lorsqu’un nouveau trajet sera ajouté", "event.details.modify": "Modifier", "event.details.save": "Enregistrer", - "event.details.aboutCaroster": "En savoir plus sur Caroster", "event.fields.name": "Nom de l'événement", "event.fields.date": "Date de l'événement", "event.fields.date_placeholder": "DD/MM/YYYY",
M frontend/package.jsonfrontend/package.json

@@ -46,6 +46,7 @@ "@types/node": "^18.7.16",

"@types/react": "^18.0.18", "eslint": "^7.31.0", "eslint-config-next": "^11.1.2", - "eslint-config-prettier": "^8.3.0" + "eslint-config-prettier": "^8.3.0", + "ts-node": "^10.9.1" } }
M frontend/pages/e/[uuid]/details.tsxfrontend/pages/e/[uuid]/details.tsx

@@ -21,6 +21,7 @@ import {

EventByUuidDocument, useUpdateEventMutation, } from '../../../generated/graphql'; +import SupportCaroster from '../../../containers/SupportCaroster'; interface Props { eventUUID: string;

@@ -205,18 +206,13 @@ <Box sx={sectionSx}>

<Typography variant="h6">{t('event.fields.link')}</Typography> <Typography>{t('event.fields.link_desc')}</Typography> </Box> - <Box py={4} justifyContent="center" display="flex"> - <ShareEvent - title={`Caroster ${event.name}`} - />{' '} - </Box> - <Divider variant="middle" /> - <Box pt={2} justifyContent="center" display="flex"> - <Link href={settings?.about_link} target="_blank" rel="noopener"> - {t('event.details.aboutCaroster')} - </Link> + <Box pt={4} pb={2} justifyContent="center" display="flex"> + <ShareEvent title={`Caroster ${event.name}`} />{' '} </Box> </Paper> + <Box mt={4} display="flex" justifyContent="center"> + <SupportCaroster /> + </Box> </Container> </Box> );
M frontend/pages/e/[uuid]/waitingList.tsxfrontend/pages/e/[uuid]/waitingList.tsx

@@ -5,6 +5,8 @@ import useProfile from '../../../hooks/useProfile';

import WaitingList from '../../../containers/WaitingList'; import {AddPassengerToWaitingList} from '../../../containers/NewPassengerDialog'; import pageUtils from '../../../lib/pageUtils'; +import Box from '@mui/material/Box'; +import SupportCaroster from '../../../containers/SupportCaroster'; interface NewPassengerDialogContext { addSelf: boolean;

@@ -44,6 +46,9 @@ canAddSelf={canAddSelf}

getToggleNewPassengerDialogFunction={(addSelf: boolean) => () => toggleNewPassengerToWaitingList({addSelf})} /> + <Box mt={4} display="flex" justifyContent="center"> + <SupportCaroster /> + </Box> {!!addPassengerToWaitingListContext && ( <AddPassengerToWaitingList open={!!addPassengerToWaitingListContext}
M frontend/yarn.lockfrontend/yarn.lock

@@ -1009,6 +1009,13 @@ "@babel/helper-string-parser" "^7.19.4"

"@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@date-io/core@^1.3.13": version "1.3.13" resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa"

@@ -1679,7 +1686,7 @@ "@jridgewell/set-array" "^1.0.1"

"@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==

@@ -1701,6 +1708,14 @@ "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":

version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17"

@@ -2055,6 +2070,26 @@ version "2.0.0"

resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"

@@ -2254,12 +2289,17 @@ version "5.3.2"

resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.5.0: +acorn@^8.4.1, acorn@^8.5.0: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==

@@ -2343,6 +2383,11 @@ dependencies:

normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"

@@ -2961,6 +3006,11 @@ parse-json "^5.0.0"

path-type "^4.0.0" yaml "^1.10.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"

@@ -3109,6 +3159,11 @@ detect-indent@^6.0.0:

version "6.1.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1"

@@ -4806,6 +4861,11 @@ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==

dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"

@@ -6232,6 +6292,25 @@ version "2.2.5"

resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.5.tgz#aef3252f1143d11047e2cb6f7cfaac7408d96623" integrity sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"

@@ -6419,6 +6498,11 @@ uuid@^8.3.2:

version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3: version "2.3.0"

@@ -6827,6 +6911,11 @@ require-directory "^2.1.1"

string-width "^4.2.3" y18n "^5.0.5" yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0"