Merge branch 'lint' into 'beautiful-profile-save'

lint & build

See merge request discoursio/discoursio-webapp!16
This commit is contained in:
Igor 2023-02-10 10:52:15 +00:00
commit c839e4d379
52 changed files with 538 additions and 170 deletions

View File

@ -12,12 +12,16 @@
"selector-class-pattern": null, "selector-class-pattern": null,
"no-descending-specificity": null, "no-descending-specificity": null,
"scss/function-no-unknown": null, "scss/function-no-unknown": null,
"scss/no-global-function-names": null,
"function-url-quotes": null, "function-url-quotes": null,
"font-family-no-missing-generic-family-keyword": null, "font-family-no-missing-generic-family-keyword": null,
"order/order": [ "order/order": [
"custom-properties", "custom-properties",
"declarations" "declarations"
] ],
"scss/dollar-variable-pattern": ["^[a-z][a-zA-Z]+$", {
"ignore": "global"
}]
}, },
"defaultSeverity": "warning" "defaultSeverity": "warning"
} }

View File

@ -1,8 +1,27 @@
# How to start ## How to start
If you use yarn
``` ```
yarn yarn install
PUBLIC_API_URL=https://v2.discours.io yarn dev yarn start
```
with different backends
```
yarn run start:local
yarn run start:production
yarn run start:staging
```
## Useful commands
run checks
```
yarn run check
```
type checking with watch
```
yarn run typecheck:watch
```
## Code generation
generate new SolidJS context:
```
npx hygen context new NewContextName
``` ```

View File

@ -0,0 +1,27 @@
---
to: src/context/<%= h.changeCase.camel(name) %>.tsx
---
import type { Accessor, JSX } from 'solid-js'
import { createContext, createSignal, useContext } from 'solid-js'
type <%= h.changeCase.pascal(name) %>ContextType = {
actions: {
}
}
const <%= h.changeCase.pascal(name) %>Context = createContext<<%= h.changeCase.pascal(name) %>ContextType>()
export function use<%= h.changeCase.pascal(name) %>() {
return useContext(<%= h.changeCase.pascal(name) %>Context)
}
export const <%= h.changeCase.pascal(name) %>Provider = (props: { children: JSX.Element }) => {
const actions = {
}
const value: <%= h.changeCase.pascal(name) %>ContextType = { actions }
return <<%= h.changeCase.pascal(name) %>Context.Provider value={value}>{props.children}</<%= h.changeCase.pascal(name) %>Context.Provider>
}

View File

@ -0,0 +1,5 @@
---
message: |
hygen {bold generator new} --name [NAME] --action [ACTION]
hygen {bold generator with-prompt} --name [NAME] --action [ACTION]
---

View File

@ -0,0 +1,18 @@
---
to: _templates/<%= name %>/<%= action || 'new' %>/hello.ejs.t
---
---
to: app/hello.js
---
const hello = ```
Hello!
This is your first hygen template.
Learn what it can do here:
https://github.com/jondot/hygen
```
console.log(hello)

View File

@ -0,0 +1,18 @@
---
to: _templates/<%= name %>/<%= action || 'new' %>/hello.ejs.t
---
---
to: app/hello.js
---
const hello = ```
Hello!
This is your first prompt based hygen template.
Learn what it can do here:
https://github.com/jondot/hygen
```
console.log(hello)

View File

@ -0,0 +1,14 @@
---
to: _templates/<%= name %>/<%= action || 'new' %>/prompt.js
---
// see types of prompts:
// https://github.com/enquirer/enquirer/tree/master/examples
//
module.exports = [
{
type: 'input',
name: 'message',
message: "What's your message?"
}
]

View File

@ -0,0 +1,4 @@
---
setup: <%= name %>
force: true # this is because mostly, people init into existing folders is safe
---

View File

@ -13,7 +13,7 @@ export default async (req, res) => {
const client = mailgun.client(mgOptions) const client = mailgun.client(mgOptions)
try { try {
const response = await client.lists.members.createMember(mgOptions.domain, { await client.lists.members.createMember(mgOptions.domain, {
address: email, address: email,
subscribed: true, subscribed: true,
upsert: 'yes' upsert: 'yes'

View File

@ -1,10 +1,9 @@
import { defineConfig, AstroUserConfig } from 'astro/config' import { defineConfig, AstroUserConfig } from 'astro/config'
import vercel from '@astrojs/vercel/serverless' import vercel from '@astrojs/vercel/serverless'
import solidJs from '@astrojs/solid-js' import solidJs from '@astrojs/solid-js'
import type { CSSOptions } from 'vite'
import defaultGenerateScopedName from 'postcss-modules/build/generateScopedName' import defaultGenerateScopedName from 'postcss-modules/build/generateScopedName'
import { isDev } from './src/utils/config' import { isDev } from './src/utils/config'
import { visualizer } from 'rollup-plugin-visualizer' // import { visualizer } from 'rollup-plugin-visualizer'
const PATH_PREFIX = '/src/' const PATH_PREFIX = '/src/'
@ -18,18 +17,6 @@ const getDevCssClassPrefix = (filename: string): string => {
const devGenerateScopedName = (name: string, filename: string, css: string) => const devGenerateScopedName = (name: string, filename: string, css: string) =>
getDevCssClassPrefix(filename) + '_' + defaultGenerateScopedName(name, filename, css) getDevCssClassPrefix(filename) + '_' + defaultGenerateScopedName(name, filename, css)
const css: CSSOptions = {
preprocessorOptions: {
scss: {
additionalData: '@import "src/styles/imports";\n'
}
},
modules: {
generateScopedName: isDev ? devGenerateScopedName : defaultGenerateScopedName,
localsConvention: null
}
}
const astroConfig: AstroUserConfig = { const astroConfig: AstroUserConfig = {
site: 'https://new.discours.io', site: 'https://new.discours.io',
integrations: [solidJs()], integrations: [solidJs()],
@ -39,7 +26,7 @@ const astroConfig: AstroUserConfig = {
build: { build: {
chunkSizeWarningLimit: 777, chunkSizeWarningLimit: 777,
rollupOptions: { rollupOptions: {
plugins: [visualizer()], // plugins: [visualizer()],
output: { output: {
// eslint-disable-next-line sonarjs/cognitive-complexity // eslint-disable-next-line sonarjs/cognitive-complexity
/* /*
@ -71,7 +58,17 @@ const astroConfig: AstroUserConfig = {
external: [] external: []
} }
}, },
css css: {
preprocessorOptions: {
scss: {
additionalData: '@import "src/styles/imports";\n'
}
},
modules: {
generateScopedName: isDev ? devGenerateScopedName : defaultGenerateScopedName,
localsConvention: null
}
}
} }
} }

View File

@ -92,6 +92,7 @@
"graphql-ws": "^5.11.2", "graphql-ws": "^5.11.2",
"hast-util-select": "^5.0.4", "hast-util-select": "^5.0.4",
"husky": "^8.0.3", "husky": "^8.0.3",
"hygen": "^6.2.11",
"idb": "^7.1.1", "idb": "^7.1.1",
"jest": "^29.3.1", "jest": "^29.3.1",
"lint-staged": "^13.1.0", "lint-staged": "^13.1.0",

View File

@ -13,13 +13,14 @@
} }
.comment { .comment {
&:before, &::before,
&:after { &::after {
content: ''; content: '';
left: 0; left: 0;
position: absolute; position: absolute;
} }
&:before {
&::before {
border-bottom: 2px solid #ccc; border-bottom: 2px solid #ccc;
border-left: 2px solid #ccc; border-left: 2px solid #ccc;
border-radius: 0 0 0 1.2rem; border-radius: 0 0 0 1.2rem;
@ -27,20 +28,24 @@
height: 2.4rem; height: 2.4rem;
width: 1.2rem; width: 1.2rem;
} }
&:after {
&::after {
background: #ccc; background: #ccc;
height: 100%; height: 100%;
top: 0; top: 0;
width: 2px; width: 2px;
} }
&:last-child:after {
&:last-child::after {
display: none; display: none;
} }
} }
.shout-body { .shout-body {
@include font-size(1.5rem); @include font-size(1.5rem);
margin-bottom: 1em; margin-bottom: 1em;
*:last-child { *:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
@ -105,6 +110,7 @@
&:hover { &:hover {
background: #000; background: #000;
color: #fff; color: #fff;
.icon { .icon {
filter: invert(1); filter: invert(1);
opacity: 1; opacity: 1;
@ -116,6 +122,7 @@
margin-right: 0.3em; margin-right: 0.3em;
opacity: 0.6; opacity: 0.6;
transition: filter 0.3s, opacity 0.2s; transition: filter 0.3s, opacity 0.2s;
img { img {
margin-bottom: -0.1em; margin-bottom: -0.1em;
} }
@ -166,7 +173,6 @@
gap: 1rem; gap: 1rem;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
color: rgba(0, 0, 0, 0.3);
font-size: 1.2rem; font-size: 1.2rem;
margin-bottom: 4px; margin-bottom: 4px;
color: rgb(0 0 0 / 30%); color: rgb(0 0 0 / 30%);

View File

@ -1,5 +1,5 @@
import { Show, createMemo, createSignal, onMount, For } from 'solid-js' import { Show, createMemo, createSignal, onMount, For } from 'solid-js'
import Comment from './Comment' import { Comment } from './Comment'
import { t } from '../../utils/intl' import { t } from '../../utils/intl'
import styles from '../../styles/Article.module.scss' import styles from '../../styles/Article.module.scss'
import { createReaction, useReactionsStore } from '../../stores/zine/reactions' import { createReaction, useReactionsStore } from '../../stores/zine/reactions'
@ -14,7 +14,6 @@ import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient'
import Button from '../_shared/Button' import Button from '../_shared/Button'
const ARTICLE_COMMENTS_PAGE_SIZE = 50 const ARTICLE_COMMENTS_PAGE_SIZE = 50
const MAX_COMMENT_LEVEL = 6
type Props = { type Props = {
commentAuthors: Author[] commentAuthors: Author[]
@ -48,13 +47,7 @@ export const CommentsTree = (props: Props) => {
setIsCommentsLoading(false) setIsCommentsLoading(false)
} }
} }
const getCommentById = (cid: number) => reactions().find((r: Reaction) => r.id === cid)
const getCommentLevel = (c: Reaction, level = 0) => {
if (c && c.replyTo && level < MAX_COMMENT_LEVEL) {
return getCommentLevel(getCommentById(c.replyTo), level + 1)
}
return level
}
onMount(async () => await loadMore()) onMount(async () => await loadMore())
const [submitted, setSubmitted] = createSignal<boolean>(false) const [submitted, setSubmitted] = createSignal<boolean>(false)

View File

@ -6,7 +6,7 @@ import { createMemo, For, Match, onMount, Show, Switch } from 'solid-js'
import type { Author, Shout } from '../../graphql/types.gen' import type { Author, Shout } from '../../graphql/types.gen'
import { t } from '../../utils/intl' import { t } from '../../utils/intl'
import MD from './MD' import MD from './MD'
import { getShareUrl, SharePopup } from './SharePopup' import { SharePopup } from './SharePopup'
import { getDescription } from '../../utils/meta' import { getDescription } from '../../utils/meta'
import stylesHeader from '../Nav/Header.module.scss' import stylesHeader from '../Nav/Header.module.scss'
import styles from '../../styles/Article.module.scss' import styles from '../../styles/Article.module.scss'

View File

@ -201,6 +201,7 @@
.authorName { .authorName {
@include font-size(3.4rem); @include font-size(3.4rem);
font-weight: 500; font-weight: 500;
margin-bottom: 0.2em; margin-bottom: 0.2em;
} }
@ -313,6 +314,7 @@
.authorName { .authorName {
@include font-size(1.2rem); @include font-size(1.2rem);
margin-bottom: 0; margin-bottom: 0;
} }

View File

@ -39,8 +39,6 @@ export const AuthorCard = (props: AuthorCardProps) => {
actions: { loadSession } actions: { loadSession }
} = useSession() } = useSession()
if (!props.author) return false // FIXME: с сервера должен приходить автор реакции (ApiClient.CreateReaction)
const [isSubscribing, setIsSubscribing] = createSignal(false) const [isSubscribing, setIsSubscribing] = createSignal(false)
const subscribed = createMemo<boolean>(() => { const subscribed = createMemo<boolean>(() => {

View File

@ -17,6 +17,7 @@
.author-page { .author-page {
.view-switcher { .view-switcher {
@include font-size(1.5rem); @include font-size(1.5rem);
margin-top: 0; margin-top: 0;
button { button {

View File

@ -1,3 +1,5 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { inputRules } from 'prosemirror-inputrules' import { inputRules } from 'prosemirror-inputrules'
import type { Mark, MarkType } from 'prosemirror-model' import type { Mark, MarkType } from 'prosemirror-model'
import type { EditorState, Transaction } from 'prosemirror-state' import type { EditorState, Transaction } from 'prosemirror-state'

View File

@ -1,3 +1,5 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { Plugin, PluginKey, TextSelection, Transaction } from 'prosemirror-state' import { Plugin, PluginKey, TextSelection, Transaction } from 'prosemirror-state'
import type { EditorView } from 'prosemirror-view' import type { EditorView } from 'prosemirror-view'
import type { Mark, Node, Schema } from 'prosemirror-model' import type { Mark, Node, Schema } from 'prosemirror-model'

View File

@ -1,3 +1,5 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { Plugin } from 'prosemirror-state' import { Plugin } from 'prosemirror-state'
import type { EditorView } from 'prosemirror-view' import type { EditorView } from 'prosemirror-view'
import type { ProseMirrorExtension } from '../helpers' import type { ProseMirrorExtension } from '../helpers'

View File

@ -1,3 +1,5 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { renderGrouped } from 'prosemirror-menu' import { renderGrouped } from 'prosemirror-menu'
import { EditorState, Plugin } from 'prosemirror-state' import { EditorState, Plugin } from 'prosemirror-state'
import styles from '../styles/ProseMirror.module.scss' import styles from '../styles/ProseMirror.module.scss'

View File

@ -411,12 +411,13 @@
} }
.shoutCardDetails { .shoutCardDetails {
@include font-size(1.5rem);
align-items: flex-start; align-items: flex-start;
border-top: 2px solid #141414; border-top: 2px solid #141414;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
@include font-size(1.5rem);
margin-top: 1em; margin-top: 1em;
padding: 1em 0 0; padding: 1em 0 0;
position: relative; position: relative;

View File

@ -1,6 +1,6 @@
.feedArticlePopup { .feedArticlePopup {
box-shadow: none !important; box-shadow: none !important;
border: 1px solid rgb(0 0 0 / 0.15); border: 1px solid rgb(0 0 0 / 15%);
border-radius: 1.6rem; border-radius: 1.6rem;
padding: 1.6rem !important; padding: 1.6rem !important;

View File

@ -7,12 +7,13 @@
} }
.counter { .counter {
@include font-size(1.2rem);
align-items: center; align-items: center;
align-self: flex-start; align-self: flex-start;
background: #f6f6f6; background: #f6f6f6;
border-radius: 0.8rem; border-radius: 0.8rem;
display: flex; display: flex;
@include font-size(1.2rem);
font-weight: 500; font-weight: 500;
padding: 0.2em 0.5em; padding: 0.2em 0.5em;
} }

View File

@ -73,6 +73,7 @@
&.opened, &.opened,
&.opened:hover { &.opened:hover {
background: #000; background: #000;
.name, .name,
.message, .message,
.time { .time {

View File

@ -51,10 +51,12 @@ $actionsWidth: 32px * 2;
z-index: -1; z-index: -1;
transition: 0.3s ease-in-out; transition: 0.3s ease-in-out;
} }
&.popupVisible { &.popupVisible {
position: relative; position: relative;
z-index: 100; z-index: 100;
} }
&.popupVisible, &.popupVisible,
&:hover { &:hover {
.actions { .actions {
@ -101,6 +103,7 @@ $actionsWidth: 32px * 2;
right: unset; right: unset;
left: -$actionsWidth/2; left: -$actionsWidth/2;
flex-direction: row-reverse; flex-direction: row-reverse;
.reply { .reply {
transform: scaleX(-1); transform: scaleX(-1);
} }

View File

@ -4,7 +4,7 @@ import { Modal } from './Modal'
import { AuthModal } from './AuthModal' import { AuthModal } from './AuthModal'
import { t } from '../../utils/intl' import { t } from '../../utils/intl'
import { useModalStore } from '../../stores/ui' import { useModalStore } from '../../stores/ui'
import { router, Routes, useRouter } from '../../stores/router' import { router, useRouter } from '../../stores/router'
import styles from './Header.module.scss' import styles from './Header.module.scss'
import { getPagePath } from '@nanostores/router' import { getPagePath } from '@nanostores/router'
import { clsx } from 'clsx' import { clsx } from 'clsx'
@ -13,7 +13,7 @@ import { getShareUrl, SharePopup } from '../Article/SharePopup'
import { getDescription } from '../../utils/meta' import { getDescription } from '../../utils/meta'
import { Snackbar } from './Snackbar' import { Snackbar } from './Snackbar'
const resources: { name: string; route: keyof Routes }[] = [ const resources: { name: string; route: 'home' | 'feed' | 'topics' }[] = [
{ name: t('zine'), route: 'home' }, { name: t('zine'), route: 'home' },
{ name: t('feed'), route: 'feed' }, { name: t('feed'), route: 'feed' },
{ name: t('topics'), route: 'topics' } { name: t('topics'), route: 'topics' }
@ -111,7 +111,7 @@ export const Header = (props: Props) => {
<For each={resources}> <For each={resources}>
{(r) => ( {(r) => (
<li classList={{ [styles.selected]: r.route === page().route }}> <li classList={{ [styles.selected]: r.route === page().route }}>
<a href={getPagePath(router, r.route, null)}>{r.name}</a> <a href={getPagePath(router, r.route)}>{r.name}</a>
</li> </li>
)} )}
</For> </For>

View File

@ -1,13 +1,14 @@
.snackbar { .snackbar {
min-height: 4px; min-height: 4px;
background-color: #141414; background-color: #141414;
color: #ffffff; color: #fff;
transition: background-color 0.3s; transition: background-color 0.3s;
&.error { &.error {
background-color: #d00820; background-color: #d00820;
} }
} }
.content { .content {
transition: height 0.3s, color 0.3s; transition: height 0.3s, color 0.3s;
height: 60px; height: 60px;

View File

@ -1,7 +1,6 @@
import { createSignal, Show } from 'solid-js' import { createSignal, Show } from 'solid-js'
import { PageWrap } from '../../_shared/PageWrap' import { PageWrap } from '../../_shared/PageWrap'
import { Icon } from '../../_shared/Icon' import { Icon } from '../../_shared/Icon'
import { showModal } from '../../../stores/ui'
// const title = t('Terms of use') // const title = t('Terms of use')

View File

@ -1,11 +1,10 @@
import { PageWrap } from '../../_shared/PageWrap' import { PageWrap } from '../../_shared/PageWrap'
import type { PageProps } from '../../types'
import styles from './Settings.module.scss' import styles from './Settings.module.scss'
import { Icon } from '../../_shared/Icon' import { Icon } from '../../_shared/Icon'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation' import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation'
export const ProfileSecurityPage = (props: PageProps) => { export const ProfileSecurityPage = () => {
return ( return (
<PageWrap> <PageWrap>
<div class="wide-container"> <div class="wide-container">

View File

@ -2,7 +2,7 @@ import { PageWrap } from '../../_shared/PageWrap'
import { t } from '../../../utils/intl' import { t } from '../../../utils/intl'
import { Icon } from '../../_shared/Icon' import { Icon } from '../../_shared/Icon'
import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation' import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation'
import { For, createSignal, Show, onMount, createEffect } from 'solid-js' import { For, createSignal, Show, onMount } from 'solid-js'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import styles from './Settings.module.scss' import styles from './Settings.module.scss'
import { useProfileForm } from '../../../context/profile' import { useProfileForm } from '../../../context/profile'
@ -13,6 +13,16 @@ import { useSession } from '../../../context/session'
import Button from '../../_shared/Button' import Button from '../../_shared/Button'
import { useSnackbar } from '../../../context/snackbar' import { useSnackbar } from '../../../context/snackbar'
const handleFileUpload = async (uploadFile: UploadFile) => {
const formData = new FormData()
formData.append('file', uploadFile.file, uploadFile.name)
const response = await fetch('/api/upload', {
method: 'POST',
body: formData
})
return response.json()
}
export const ProfileSettingsPage = () => { export const ProfileSettingsPage = () => {
const [addLinkForm, setAddLinkForm] = createSignal(false) const [addLinkForm, setAddLinkForm] = createSignal(false)
const [incorrectUrl, setIncorrectUrl] = createSignal(false) const [incorrectUrl, setIncorrectUrl] = createSignal(false)
@ -54,16 +64,6 @@ export const ProfileSettingsPage = () => {
const { selectFiles } = createFileUploader({ multiple: false, accept: 'image/*' }) const { selectFiles } = createFileUploader({ multiple: false, accept: 'image/*' })
const handleFileUpload = async (uploadFile: UploadFile) => {
const formData = new FormData()
formData.append('file', uploadFile.file, uploadFile.name)
const response = await fetch('/api/upload', {
method: 'POST',
body: formData
})
return response.json()
}
const handleAvatarClick = async () => { const handleAvatarClick = async () => {
await selectFiles(async ([uploadFile]) => { await selectFiles(async ([uploadFile]) => {
try { try {

View File

@ -1,12 +1,11 @@
import { PageWrap } from '../../_shared/PageWrap' import { PageWrap } from '../../_shared/PageWrap'
import type { PageProps } from '../../types'
import styles from './Settings.module.scss' import styles from './Settings.module.scss'
import stylesSettings from '../../../styles/FeedSettings.module.scss' import stylesSettings from '../../../styles/FeedSettings.module.scss'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation' import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation'
import { SearchField } from '../../_shared/SearchField' import { SearchField } from '../../_shared/SearchField'
export const ProfileSubscriptionsPage = (props: PageProps) => { export const ProfileSubscriptionsPage = () => {
return ( return (
<PageWrap> <PageWrap>
<div class="wide-container"> <div class="wide-container">

View File

@ -28,9 +28,6 @@ h5 {
top: 0; top: 0;
width: 100%; width: 100%;
cursor: pointer; cursor: pointer;
}
.avatar {
background: #ccc; background: #ccc;
border: none; border: none;
object-fit: cover; object-fit: cover;

View File

@ -3,7 +3,7 @@
import { MODALS, setLocale, showModal } from '../stores/ui' import { MODALS, setLocale, showModal } from '../stores/ui'
import { Component, createEffect, createMemo } from 'solid-js' import { Component, createEffect, createMemo } from 'solid-js'
import { Routes, useRouter } from '../stores/router' import { ROUTES, useRouter } from '../stores/router'
import { Dynamic, isServer } from 'solid-js/web' import { Dynamic, isServer } from 'solid-js/web'
import type { PageProps, RootSearchParams } from './types' import type { PageProps, RootSearchParams } from './types'
@ -35,13 +35,13 @@ import { SessionProvider } from '../context/session'
import { ProfileSettingsPage } from './Pages/profile/ProfileSettingsPage' import { ProfileSettingsPage } from './Pages/profile/ProfileSettingsPage'
import { ProfileSecurityPage } from './Pages/profile/ProfileSecurityPage' import { ProfileSecurityPage } from './Pages/profile/ProfileSecurityPage'
import { ProfileSubscriptionsPage } from './Pages/profile/ProfileSubscriptionsPage' import { ProfileSubscriptionsPage } from './Pages/profile/ProfileSubscriptionsPage'
import CreateSettingsPage from './Pages/CreateSettingsPage' import { CreateSettingsPage } from './Pages/CreateSettingsPage'
import { SnackbarProvider } from '../context/snackbar' import { SnackbarProvider } from '../context/snackbar'
// TODO: lazy load // TODO: lazy load
// const SomePage = lazy(() => import('./Pages/SomePage')) // const SomePage = lazy(() => import('./Pages/SomePage'))
const pagesMap: Record<keyof Routes, Component<PageProps>> = { const pagesMap: Record<keyof typeof ROUTES, Component<PageProps>> = {
inbox: InboxPage, inbox: InboxPage,
expo: LayoutShoutsPage, expo: LayoutShoutsPage,
connect: ConnectPage, connect: ConnectPage,

View File

@ -5,7 +5,6 @@ import type { Topic } from '../../graphql/types.gen'
import { FollowingEntity } from '../../graphql/types.gen' import { FollowingEntity } from '../../graphql/types.gen'
import { t } from '../../utils/intl' import { t } from '../../utils/intl'
import { follow, unfollow } from '../../stores/zine/common' import { follow, unfollow } from '../../stores/zine/common'
import { getLogger } from '../../utils/logger'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { useSession } from '../../context/session' import { useSession } from '../../context/session'
import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient' import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient'

View File

@ -11,7 +11,6 @@ import { translit } from '../../utils/ru2en'
import styles from '../../styles/AllTopics.module.scss' import styles from '../../styles/AllTopics.module.scss'
import { SearchField } from '../_shared/SearchField' import { SearchField } from '../_shared/SearchField'
import { scrollHandler } from '../../utils/scroll' import { scrollHandler } from '../../utils/scroll'
import { StatMetrics } from '../_shared/StatMetrics'
type AllAuthorsPageSearchParams = { type AllAuthorsPageSearchParams = {
by: '' | 'name' | 'shouts' | 'followers' by: '' | 'name' | 'shouts' | 'followers'

View File

@ -1,11 +1,13 @@
.ratingContainer { .ratingContainer {
@include font-size(1.5rem); @include font-size(1.5rem);
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
} }
.ratingControl { .ratingControl {
@include font-size(1.5rem); @include font-size(1.5rem);
display: inline-flex; display: inline-flex;
margin-left: 1em; margin-left: 1em;
vertical-align: middle; vertical-align: middle;
@ -35,10 +37,11 @@
} }
.subscribersCounter { .subscribersCounter {
@include font-size(1rem);
background: #fff; background: #fff;
border: 2px solid #000; border: 2px solid #000;
border-radius: 100%; border-radius: 100%;
@include font-size(1rem);
font-weight: bold; font-weight: bold;
height: 32px; height: 32px;
line-height: 30px; line-height: 30px;

View File

@ -6,8 +6,6 @@ import { AuthorFull } from '../Author/Full'
import { t } from '../../utils/intl' import { t } from '../../utils/intl'
import { useAuthorsStore } from '../../stores/zine/authors' import { useAuthorsStore } from '../../stores/zine/authors'
import { loadShouts, useArticlesStore } from '../../stores/zine/articles' import { loadShouts, useArticlesStore } from '../../stores/zine/articles'
import { useTopicsStore } from '../../stores/zine/topics'
import { useRouter } from '../../stores/router' import { useRouter } from '../../stores/router'
import { restoreScrollPosition, saveScrollPosition } from '../../utils/scroll' import { restoreScrollPosition, saveScrollPosition } from '../../utils/scroll'
import { splitToPages } from '../../utils/splitToPages' import { splitToPages } from '../../utils/splitToPages'
@ -18,7 +16,6 @@ import { clsx } from 'clsx'
import Userpic from '../Author/Userpic' import Userpic from '../Author/Userpic'
import { Popup } from '../_shared/Popup' import { Popup } from '../_shared/Popup'
import { AuthorCard } from '../Author/Card' import { AuthorCard } from '../Author/Card'
import { loadReactionsBy, REACTIONS_AMOUNT_PER_PAGE } from '../../stores/zine/reactions'
import { apiClient } from '../../utils/apiClient' import { apiClient } from '../../utils/apiClient'
import { Comment } from '../Article/Comment' import { Comment } from '../Article/Comment'
@ -43,7 +40,6 @@ export const AuthorView = (props: AuthorProps) => {
shouts: props.shouts shouts: props.shouts
}) })
const { authorEntities } = useAuthorsStore({ authors: [props.author] }) const { authorEntities } = useAuthorsStore({ authors: [props.author] })
const { topicsByAuthor } = useTopicsStore()
const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false) const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false)
const author = createMemo(() => authorEntities()[props.authorSlug]) const author = createMemo(() => authorEntities()[props.authorSlug])

View File

@ -1,5 +1,6 @@
.feedNavigation { .feedNavigation {
@include font-size(1.5rem); @include font-size(1.5rem);
font-weight: 500; font-weight: 500;
h4 { h4 {
@ -40,6 +41,7 @@
.feedAside { .feedAside {
h4 { h4 {
@include font-size(2.2rem); @include font-size(2.2rem);
font-weight: bold; font-weight: bold;
margin-bottom: 2.4rem; margin-bottom: 2.4rem;
text-transform: lowercase; text-transform: lowercase;
@ -69,7 +71,7 @@
a { a {
position: static; position: static;
&:before { &::before {
content: ''; content: '';
height: 100%; height: 100%;
left: 0; left: 0;
@ -88,6 +90,7 @@
ul { ul {
@include font-size(1.4rem); @include font-size(1.4rem);
font-weight: bold; font-weight: bold;
margin: 1rem 0 0; margin: 1rem 0 0;
line-height: 1.4; line-height: 1.4;
@ -106,6 +109,7 @@
.comment { .comment {
@include font-size(1.5rem); @include font-size(1.5rem);
line-height: 1.4; line-height: 1.4;
margin-bottom: 2.4rem; margin-bottom: 2.4rem;
@ -126,6 +130,7 @@
.commentArticleTitle { .commentArticleTitle {
@include font-size(1.2rem); @include font-size(1.2rem);
line-clamp: 1; line-clamp: 1;
-webkit-line-clamp: 1; -webkit-line-clamp: 1;
} }

View File

@ -2,7 +2,6 @@ import { createEffect, createMemo, createSignal, For, onMount, Show } from 'soli
import '../../styles/Feed.scss' import '../../styles/Feed.scss'
import stylesBeside from '../../components/Feed/Beside.module.scss' import stylesBeside from '../../components/Feed/Beside.module.scss'
import { Icon } from '../_shared/Icon' import { Icon } from '../_shared/Icon'
import { TopicCard } from '../Topic/Card'
import { ArticleCard } from '../Feed/Card' import { ArticleCard } from '../Feed/Card'
import { AuthorCard } from '../Author/Card' import { AuthorCard } from '../Author/Card'
import { t } from '../../utils/intl' import { t } from '../../utils/intl'
@ -14,12 +13,9 @@ import { useAuthorsStore } from '../../stores/zine/authors'
import { useTopicsStore } from '../../stores/zine/topics' import { useTopicsStore } from '../../stores/zine/topics'
import { useTopAuthorsStore } from '../../stores/zine/topAuthors' import { useTopAuthorsStore } from '../../stores/zine/topAuthors'
import { useSession } from '../../context/session' import { useSession } from '../../context/session'
import stylesArticle from '../../styles/Article.module.scss'
import stylesTopic from '../Feed/CardTopic.module.scss' import stylesTopic from '../Feed/CardTopic.module.scss'
import styles from './Feed.module.scss' import styles from './Feed.module.scss'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import Userpic from '../Author/Userpic'
import type { Author } from '../../graphql/types.gen'
// const AUTHORSHIP_REACTIONS = [ // const AUTHORSHIP_REACTIONS = [
// ReactionKind.Accept, // ReactionKind.Accept,

View File

@ -22,12 +22,12 @@ type InboxSearchParams = {
initChat: string initChat: string
chat: string chat: string
} }
const userSearch = (array: Author[], keyword: string) => { // const userSearch = (array: Author[], keyword: string) => {
const searchTerm = keyword.toLowerCase() // const searchTerm = keyword.toLowerCase()
return array.filter((value) => { // return array.filter((value) => {
return value.name.toLowerCase().match(new RegExp(searchTerm, 'g')) // return value.name.toLowerCase().match(new RegExp(searchTerm, 'g'))
}) // })
} // }
export const InboxView = () => { export const InboxView = () => {
const { const {

View File

@ -1,4 +1,4 @@
import { blockTypeItem, icons, MenuItem, wrapItem } from 'prosemirror-menu' import { icons, MenuItem, wrapItem } from 'prosemirror-menu'
import { toggleMark } from 'prosemirror-commands' import { toggleMark } from 'prosemirror-commands'
const markActive = (state, type) => { const markActive = (state, type) => {

View File

@ -12,7 +12,7 @@ export const schema = new Schema({
paragraph: { paragraph: {
content: 'inline*', content: 'inline*',
group: 'block', group: 'block',
toDOM: function toDOM(node) { toDOM: function toDOM() {
return ['p', { class: 'paragraph' }, 0] return ['p', { class: 'paragraph' }, 0]
} }
}, },

View File

@ -18,6 +18,7 @@
display: flex; display: flex;
flex-direction: row; flex-direction: row;
} }
.buttons { .buttons {
gap: 10px; gap: 10px;
} }

View File

@ -27,6 +27,7 @@
&.bordered { &.bordered {
@include font-size(1.6rem); @include font-size(1.6rem);
border: 2px solid #000; border: 2px solid #000;
padding: 2.4rem; padding: 2.4rem;
@ -41,7 +42,8 @@
&.tiny { &.tiny {
@include font-size(1.4rem); @include font-size(1.4rem);
box-shadow: 0 4px 60px rgba(0, 0, 0, 0.1);
box-shadow: 0 4px 60px rgb(0 0 0 / 10%);
padding: 1rem; padding: 1rem;
ul li { ul li {

View File

@ -2,7 +2,6 @@ import { createEffect, createSignal, JSX, Show } from 'solid-js'
import styles from './Popup.module.scss' import styles from './Popup.module.scss'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { useOutsideClickHandler } from '../../../utils/useOutsideClickHandler' import { useOutsideClickHandler } from '../../../utils/useOutsideClickHandler'
import { set } from 'husky'
type HorizontalAnchor = 'center' | 'right' type HorizontalAnchor = 'center' | 'right'

View File

@ -1,5 +1,5 @@
import { Accessor, createMemo, JSX } from 'solid-js' import type { Accessor, JSX } from 'solid-js'
import { createContext, createSignal, useContext } from 'solid-js' import { createContext, createSignal, useContext, createMemo } from 'solid-js'
import { createChatClient } from '../graphql/privateGraphQLClient' import { createChatClient } from '../graphql/privateGraphQLClient'
import type { Chat, Message, MutationCreateMessageArgs } from '../graphql/types.gen' import type { Chat, Message, MutationCreateMessageArgs } from '../graphql/types.gen'
import { apiClient } from '../utils/apiClient' import { apiClient } from '../utils/apiClient'

View File

@ -3,39 +3,7 @@ import { createRouter, createSearchParams } from '@nanostores/router'
import { isServer } from 'solid-js/web' import { isServer } from 'solid-js/web'
import { useStore } from '@nanostores/solid' import { useStore } from '@nanostores/solid'
// TODO: more export const ROUTES = {
export interface Routes {
home: void
connect: void
create: void
createSettings: void
topics: void
topic: 'slug'
authors: void
author: 'slug'
feed: void
article: 'slug'
search: 'q'
dogma: void
discussionRules: void
guide: void
help: void
manifest: void
partners: void
principles: void
projects: void
termsOfUse: void
thanks: void
expo: 'layout'
inbox: void // TODO: добавить ID текущего юзера
profileSettings: void
profileSecurity: void
profileSubscriptions: void
}
const searchParamsStore = createSearchParams()
const routerStore = createRouter<Routes>(
{
home: '/', home: '/',
inbox: '/inbox', inbox: '/inbox',
connect: '/connect', connect: '/connect',
@ -62,12 +30,13 @@ const routerStore = createRouter<Routes>(
profileSettings: '/profile/settings', profileSettings: '/profile/settings',
profileSecurity: '/profile/security', profileSecurity: '/profile/security',
profileSubscriptions: '/profile/subscriptions' profileSubscriptions: '/profile/subscriptions'
}, } as const
{
const searchParamsStore = createSearchParams()
const routerStore = createRouter(ROUTES, {
search: false, search: false,
links: false links: false
} })
)
export const router = routerStore export const router = routerStore

View File

@ -1,6 +1,6 @@
import type { Reaction, ReactionInput } from '../../graphql/types.gen' import type { Reaction, ReactionInput } from '../../graphql/types.gen'
import { apiClient } from '../../utils/apiClient' import { apiClient } from '../../utils/apiClient'
import { createEffect, createSignal } from 'solid-js' import { createSignal } from 'solid-js'
// TODO: import { roomConnect } from '../../utils/p2p' // TODO: import { roomConnect } from '../../utils/p2p'
export const REACTIONS_AMOUNT_PER_PAGE = 100 export const REACTIONS_AMOUNT_PER_PAGE = 100

View File

@ -56,9 +56,10 @@
} }
.feed-filter { .feed-filter {
@include font-size(1.7rem);
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@include font-size(1.7rem);
font-weight: 500; font-weight: 500;
list-style: none; list-style: none;
margin: 0 0 1.6rem; margin: 0 0 1.6rem;

View File

@ -38,7 +38,7 @@ main {
padding: 10px; padding: 10px;
height: calc(100% - 10px); height: calc(100% - 10px);
$fade-height: 10px; $fadeHeight: 10px;
.sidebarHeader { .sidebarHeader {
display: flex; display: flex;
@ -50,7 +50,7 @@ main {
overflow: hidden; overflow: hidden;
flex: 1; flex: 1;
position: relative; position: relative;
padding: $fade-height 0; padding: $fadeHeight 0;
&::before, &::before,
&::after { &::after {
@ -59,17 +59,17 @@ main {
width: 100%; width: 100%;
right: 0; right: 0;
z-index: 1; z-index: 1;
height: $fade-height; height: $fadeHeight;
} }
&::before { &::before {
top: 0; top: 0;
background: linear-gradient(white, transparent $fade-height); background: linear-gradient(white, transparent $fadeHeight);
} }
&::after { &::after {
bottom: 0; bottom: 0;
background: linear-gradient(transparent, white $fade-height); background: linear-gradient(transparent, white $fadeHeight);
} }
.dialogs { .dialogs {
@ -207,6 +207,7 @@ main {
flex: 1; flex: 1;
overflow: auto; overflow: auto;
position: relative; position: relative;
.messagesContainer { .messagesContainer {
left: 0; left: 0;
height: 100%; height: 100%;
@ -216,6 +217,7 @@ main {
width: 100%; width: 100%;
scroll-behavior: smooth; scroll-behavior: smooth;
} }
.conversation__date { .conversation__date {
position: relative; position: relative;
text-align: center; text-align: center;

288
yarn.lock
View File

@ -3323,6 +3323,11 @@
resolved "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz" resolved "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz"
integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng== integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==
"@types/node@^17.0.19":
version "17.0.45"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
"@types/node@^18.11.18": "@types/node@^18.11.18":
version "18.11.18" version "18.11.18"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
@ -3726,6 +3731,11 @@ ansi-align@^3.0.1:
dependencies: dependencies:
string-width "^4.1.0" string-width "^4.1.0"
ansi-colors@^4.1.1:
version "4.1.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: ansi-escapes@^4.2.1, ansi-escapes@^4.3.0:
version "4.3.2" version "4.3.2"
resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
@ -3996,6 +4006,11 @@ async-sema@^3.1.1:
resolved "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz" resolved "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz"
integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==
async@^3.2.3:
version "3.2.4"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
asynckit@^0.4.0: asynckit@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
@ -4248,6 +4263,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0" balanced-match "^1.0.0"
concat-map "0.0.1" concat-map "0.0.1"
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
braces@^3.0.2, braces@~3.0.2: braces@^3.0.2, braces@~3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
@ -4331,6 +4353,14 @@ callsites@^3.0.0:
resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camel-case@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==
dependencies:
no-case "^2.2.0"
upper-case "^1.1.1"
camel-case@^4.1.2: camel-case@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz"
@ -4397,7 +4427,7 @@ chalk@^2.0.0:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@ -4442,6 +4472,30 @@ change-case-all@1.0.15:
upper-case "^2.0.2" upper-case "^2.0.2"
upper-case-first "^2.0.2" upper-case-first "^2.0.2"
change-case@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.1.0.tgz#0e611b7edc9952df2e8513b27b42de72647dd17e"
integrity sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==
dependencies:
camel-case "^3.0.0"
constant-case "^2.0.0"
dot-case "^2.1.0"
header-case "^1.0.0"
is-lower-case "^1.1.0"
is-upper-case "^1.1.0"
lower-case "^1.1.1"
lower-case-first "^1.0.0"
no-case "^2.3.2"
param-case "^2.1.0"
pascal-case "^2.0.0"
path-case "^2.1.0"
sentence-case "^2.1.0"
snake-case "^2.1.0"
swap-case "^1.1.0"
title-case "^2.1.0"
upper-case "^1.1.1"
upper-case-first "^1.1.0"
change-case@^4.1.2: change-case@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz"
@ -4691,6 +4745,14 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0:
resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
constant-case@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46"
integrity sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==
dependencies:
snake-case "^2.1.0"
upper-case "^1.1.1"
constant-case@^3.0.4: constant-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz" resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz"
@ -4832,7 +4894,7 @@ debounce@^1.2.0:
resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz"
integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4" version "4.3.4"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@ -4929,6 +4991,11 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0" has-property-descriptors "^1.0.0"
object-keys "^1.1.1" object-keys "^1.1.1"
degit@^2.8.4:
version "2.8.4"
resolved "https://registry.yarnpkg.com/degit/-/degit-2.8.4.tgz#3bb9c5c00f157c44724dd4a50724e4aa75a54d38"
integrity sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==
delayed-stream@~1.0.0: delayed-stream@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
@ -5040,6 +5107,13 @@ dom7@^4.0.4:
dependencies: dependencies:
ssr-window "^4.0.0" ssr-window "^4.0.0"
dot-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee"
integrity sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==
dependencies:
no-case "^2.2.0"
dot-case@^3.0.4: dot-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz"
@ -5070,6 +5144,13 @@ ecdsa-sig-formatter@1.0.11:
dependencies: dependencies:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
ejs@^3.1.6:
version "3.1.8"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b"
integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==
dependencies:
jake "^10.8.5"
electron-to-chromium@^1.4.251: electron-to-chromium@^1.4.251:
version "1.4.284" version "1.4.284"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz"
@ -5106,6 +5187,13 @@ enhanced-resolve@^5.10.0:
graceful-fs "^4.2.4" graceful-fs "^4.2.4"
tapable "^2.2.0" tapable "^2.2.0"
enquirer@^2.3.6:
version "2.3.6"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
dependencies:
ansi-colors "^4.1.1"
entities@~3.0.1: entities@~3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz" resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz"
@ -5973,6 +6061,13 @@ file-uri-to-path@1.0.0:
resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
filelist@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
dependencies:
minimatch "^5.0.1"
fill-range@^7.0.1: fill-range@^7.0.1:
version "7.0.1" version "7.0.1"
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
@ -6070,6 +6165,22 @@ formidable@^2.1.1:
once "^1.4.0" once "^1.4.0"
qs "^6.11.0" qs "^6.11.0"
front-matter@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5"
integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==
dependencies:
js-yaml "^3.13.1"
fs-extra@^10.0.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-minipass@^2.0.0: fs-minipass@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"
@ -6297,7 +6408,7 @@ gopd@^1.0.1:
dependencies: dependencies:
get-intrinsic "^1.1.3" get-intrinsic "^1.1.3"
graceful-fs@^4.1.5, graceful-fs@^4.2.4, graceful-fs@^4.2.9: graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.10" version "4.2.10"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
@ -6566,6 +6677,14 @@ hastscript@^7.0.0:
property-information "^6.0.0" property-information "^6.0.0"
space-separated-tokens "^2.0.0" space-separated-tokens "^2.0.0"
header-case@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d"
integrity sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==
dependencies:
no-case "^2.2.0"
upper-case "^1.1.3"
header-case@^2.0.4: header-case@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz" resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz"
@ -6648,6 +6767,26 @@ husky@^8.0.3:
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
hygen@^6.2.11:
version "6.2.11"
resolved "https://registry.yarnpkg.com/hygen/-/hygen-6.2.11.tgz#c8fd1a5da6799783d6511f416048db02df1c2dda"
integrity sha512-t6/zLI2XozP5gvV74nnl8LZSbwpVNFUkUs/O9DwuOdiiBbws5k4AQNVwKZ9FGzcKjdJ5EBBYkVzlcUHkLyY0FQ==
dependencies:
"@types/node" "^17.0.19"
chalk "^4.1.2"
change-case "^3.1.0"
debug "^4.3.3"
degit "^2.8.4"
ejs "^3.1.6"
enquirer "^2.3.6"
execa "^5.0.0"
front-matter "^4.0.2"
fs-extra "^10.0.0"
ignore-walk "^4.0.1"
inflection "^1.12.0"
ora "^5.0.0"
yargs-parser "^21.0.0"
iconv-lite@^0.4.24: iconv-lite@^0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
@ -6675,6 +6814,13 @@ ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1:
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore-walk@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3"
integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==
dependencies:
minimatch "^3.0.4"
ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.1: ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.1:
version "5.2.4" version "5.2.4"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
@ -6726,6 +6872,11 @@ indent-string@^4.0.0:
resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
inflection@^1.12.0:
version "1.13.4"
resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32"
integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==
inflight@^1.0.4: inflight@^1.0.4:
version "1.0.6" version "1.0.6"
resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
@ -6937,6 +7088,13 @@ is-interactive@^2.0.0:
resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz"
integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
is-lower-case@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393"
integrity sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==
dependencies:
lower-case "^1.1.0"
is-lower-case@^2.0.2: is-lower-case@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz" resolved "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz"
@ -7065,6 +7223,13 @@ is-unicode-supported@^1.1.0:
resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz"
integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
is-upper-case@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f"
integrity sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==
dependencies:
upper-case "^1.1.0"
is-upper-case@^2.0.2: is-upper-case@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz" resolved "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz"
@ -7174,6 +7339,16 @@ istanbul-reports@^3.1.3:
html-escaper "^2.0.0" html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0" istanbul-lib-report "^3.0.0"
jake@^10.8.5:
version "10.8.5"
resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
dependencies:
async "^3.2.3"
chalk "^4.0.2"
filelist "^1.0.1"
minimatch "^3.0.4"
jest-changed-files@^29.2.0: jest-changed-files@^29.2.0:
version "29.2.0" version "29.2.0"
resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz"
@ -7642,6 +7817,15 @@ jsonc-parser@^3.0.0:
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
dependencies:
universalify "^2.0.0"
optionalDependencies:
graceful-fs "^4.1.6"
jsonify@~0.0.0: jsonify@~0.0.0:
version "0.0.1" version "0.0.1"
resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz"
@ -7913,6 +8097,13 @@ loose-envify@^1.0.0:
dependencies: dependencies:
js-tokens "^3.0.0 || ^4.0.0" js-tokens "^3.0.0 || ^4.0.0"
lower-case-first@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1"
integrity sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==
dependencies:
lower-case "^1.1.2"
lower-case-first@^2.0.2: lower-case-first@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz" resolved "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz"
@ -7920,6 +8111,11 @@ lower-case-first@^2.0.2:
dependencies: dependencies:
tslib "^2.0.3" tslib "^2.0.3"
lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==
lower-case@^2.0.2: lower-case@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz"
@ -8526,6 +8722,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies: dependencies:
brace-expansion "^1.1.7" brace-expansion "^1.1.7"
minimatch@^5.0.1:
version "5.1.6"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
dependencies:
brace-expansion "^2.0.1"
minimist-options@4.1.0: minimist-options@4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz"
@ -8612,6 +8815,13 @@ nlcst-to-string@^3.0.0:
dependencies: dependencies:
"@types/nlcst" "^1.0.0" "@types/nlcst" "^1.0.0"
no-case@^2.2.0, no-case@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
dependencies:
lower-case "^1.1.1"
no-case@^3.0.4: no-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz"
@ -8829,7 +9039,7 @@ optionator@^0.9.1:
type-check "^0.4.0" type-check "^0.4.0"
word-wrap "^1.2.3" word-wrap "^1.2.3"
ora@^5.4.1: ora@^5.0.0, ora@^5.4.1:
version "5.4.1" version "5.4.1"
resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz"
integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
@ -8909,6 +9119,13 @@ p-try@^2.0.0:
resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
param-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==
dependencies:
no-case "^2.2.0"
param-case@^3.0.4: param-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz"
@ -8957,6 +9174,14 @@ parse5@^6.0.0:
resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
pascal-case@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e"
integrity sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==
dependencies:
camel-case "^3.0.0"
upper-case-first "^1.1.0"
pascal-case@^3.1.2: pascal-case@^3.1.2:
version "3.1.2" version "3.1.2"
resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz"
@ -8965,6 +9190,13 @@ pascal-case@^3.1.2:
no-case "^3.0.4" no-case "^3.0.4"
tslib "^2.0.3" tslib "^2.0.3"
path-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5"
integrity sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==
dependencies:
no-case "^2.2.0"
path-case@^3.0.4: path-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz" resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz"
@ -9928,6 +10160,14 @@ semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
dependencies: dependencies:
lru-cache "^6.0.0" lru-cache "^6.0.0"
sentence-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4"
integrity sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==
dependencies:
no-case "^2.2.0"
upper-case-first "^1.1.2"
sentence-case@^3.0.4: sentence-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz"
@ -10056,6 +10296,13 @@ slice-ansi@^5.0.0:
ansi-styles "^6.0.0" ansi-styles "^6.0.0"
is-fullwidth-code-point "^4.0.0" is-fullwidth-code-point "^4.0.0"
snake-case@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f"
integrity sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==
dependencies:
no-case "^2.2.0"
snake-case@^3.0.4: snake-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz"
@ -10527,6 +10774,14 @@ svg-tags@^1.0.0:
resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz"
integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
swap-case@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3"
integrity sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==
dependencies:
lower-case "^1.1.1"
upper-case "^1.1.1"
swap-case@^2.0.2: swap-case@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz" resolved "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz"
@ -10605,6 +10860,14 @@ tiny-glob@^0.2.9:
globalyzer "0.1.0" globalyzer "0.1.0"
globrex "^0.1.2" globrex "^0.1.2"
title-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa"
integrity sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==
dependencies:
no-case "^2.2.0"
upper-case "^1.0.3"
title-case@^3.0.3: title-case@^3.0.3:
version "3.0.3" version "3.0.3"
resolved "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz" resolved "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz"
@ -10912,6 +11175,11 @@ unist-util-visit@^4.0.0, unist-util-visit@^4.1.0:
unist-util-is "^5.0.0" unist-util-is "^5.0.0"
unist-util-visit-parents "^5.1.1" unist-util-visit-parents "^5.1.1"
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
unixify@^1.0.0: unixify@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz" resolved "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz"
@ -10927,6 +11195,13 @@ update-browserslist-db@^1.0.9:
escalade "^3.1.1" escalade "^3.1.1"
picocolors "^1.0.0" picocolors "^1.0.0"
upper-case-first@^1.1.0, upper-case-first@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115"
integrity sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==
dependencies:
upper-case "^1.1.1"
upper-case-first@^2.0.2: upper-case-first@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz" resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz"
@ -10934,6 +11209,11 @@ upper-case-first@^2.0.2:
dependencies: dependencies:
tslib "^2.0.3" tslib "^2.0.3"
upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==
upper-case@^2.0.2: upper-case@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz" resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz"