- {/* I would like to make an "icon button" for this instead of "Help." Leaving it as help just for the function for now.*/}
- {inspectorData?.info && (
-
- )}
- >
- )
-
- if (!inspectorData) return
-
- return (
-
- {inspectorData.deprecated && (
-
-
WARNING
-
{inspectorData.deprecationMessage}
-
- )}
-
-
- )
-}
-
-export default Inspector
diff --git a/client/src/features/Thoth/workspaces/composer/index.tsx b/client/src/features/Thoth/workspaces/composer/index.tsx
deleted file mode 100644
index 1b48bc2a7..000000000
--- a/client/src/features/Thoth/workspaces/composer/index.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-import { useEffect, useRef } from 'react'
-
-import { store } from '@/state/store'
-import { useEditor } from '@thoth/contexts/EditorProvider'
-import { Layout } from '@thoth/contexts/LayoutProvider'
-import { useModule } from '@/contexts/ModuleProvider'
-import {
- useLazyGetSpellQuery,
- useSaveSpellMutation,
- selectSpellById,
-} from '@/state/api/spells'
-import { debounce } from '@/utils/debounce'
-import EditorWindow from '@thoth/windows/EditorWindow'
-import EventHandler from '@thoth/components/EventHandler'
-import Inspector from '@thoth/windows/InspectorWindow'
-import Playtest from '@thoth/windows/PlaytestWindow'
-import StateManager from '@thoth/windows/StateManagerWindow'
-import TextEditor from '@thoth/windows/TextEditorWindow'
-import DebugConsole from '@thoth/windows/DebugConsole'
-import { Spell } from '../../../../state/api/spells'
-
-const Workspace = ({ tab, tabs, pubSub }) => {
- const spellRef = useRef()
- const [loadSpell, { data: spellData }] = useLazyGetSpellQuery()
- const [saveSpell] = useSaveSpellMutation()
- const { saveModule } = useModule()
- const { editor } = useEditor()
-
- // Set up autosave for the workspaces
- useEffect(() => {
- if (!editor?.on) return
- return editor.on(
- 'save nodecreated noderemoved connectioncreated connectionremoved nodetranslated',
- debounce(() => {
- if (tab.type === 'spell') {
- saveSpell({ ...spellRef.current, chain: editor.toJSON() })
- }
- if (tab.type === 'module') {
- saveModule(tab.module, { data: editor.toJSON() }, false)
- // when a module is saved, we look for any open spell tabs, and check if they have the module.
- /// if they do, we trigger a save to ensure the module change is captured to the server
- tabs
- .filter(tab => tab.type === 'spell')
- .forEach(filteredTab => {
- if (filteredTab.spell) {
- const spell = selectSpellById(
- store.getState(),
- filteredTab.spell
- )
- if (
- spell?.modules &&
- spell?.modules.some(module => module.name === tab.module)
- )
- saveSpell({ ...spell })
- }
- })
- }
- }, 500)
- )
- }, [editor])
-
- useEffect(() => {
- if (!spellData) return
- spellRef.current = spellData
- }, [spellData])
-
- useEffect(() => {
- if (!tab || !tab.spell) return
- loadSpell(tab.spell)
- }, [tab])
-
- const factory = tab => {
- return node => {
- const props = {
- tab,
- node,
- }
- const component = node.getComponent()
- switch (component) {
- case 'stateManager':
- return
- case 'playtest':
- return
- case 'inspector':
- return
- case 'textEditor':
- return
- case 'editorWindow':
- return
- case 'debugConsole':
- return
- default:
- return
- }
- }
- }
-
- return (
- <>
-
-
- >
- )
-}
-
-const Wrapped = props => {
- return
-}
-
-export default Wrapped
diff --git a/client/src/global.d.ts b/client/src/global.d.ts
index a2700b521..fbd2fd5ba 100644
--- a/client/src/global.d.ts
+++ b/client/src/global.d.ts
@@ -1,7 +1,14 @@
// We need to tell TypeScript that when we write "import styles from './styles.scss' we mean to load a module (to look for a './styles.scss.d.ts').
declare module '*.css'
declare module '*.module.css'
+declare module '*.jpg'
declare module '*.png' {
const value: any
export default value
}
+
+declare global {
+ interface Window {
+ getLayout: any
+ }
+}
diff --git a/client/src/index.js b/client/src/index.tsx
similarity index 73%
rename from client/src/index.js
rename to client/src/index.tsx
index df1d8e078..c5e3d1dd2 100644
--- a/client/src/index.js
+++ b/client/src/index.tsx
@@ -4,19 +4,22 @@ import React from 'react'
import ReactDOM from 'react-dom'
import { Provider } from 'react-redux'
import { BrowserRouter as Router } from 'react-router-dom'
+import { PersistGate } from 'redux-persist/integration/react'
import App from './App'
import AppProviders from './contexts/AppProviders'
import reportWebVitals from './reportWebVitals'
-import { store } from './state/store'
+import { persistor, store } from './state/store'
ReactDOM.render(
-
-
-
+
+
+
+
+ ,
diff --git a/client/src/features/HomeScreen/HomeScreen.tsx b/client/src/screens/HomeScreen/HomeScreen.tsx
similarity index 74%
rename from client/src/features/HomeScreen/HomeScreen.tsx
rename to client/src/screens/HomeScreen/HomeScreen.tsx
index 86e327db8..85ccfba4d 100644
--- a/client/src/features/HomeScreen/HomeScreen.tsx
+++ b/client/src/screens/HomeScreen/HomeScreen.tsx
@@ -6,20 +6,19 @@ import {
useDeleteSpellMutation,
useNewSpellMutation,
} from '../../state/api/spells'
-import { useDB } from '../../contexts/DatabaseProvider'
-import { useTabManager } from '../../contexts/TabManagerProvider'
import AllProjects from './screens/AllProjects'
import CreateNew from './screens/CreateNew'
import OpenProject from './screens/OpenProject'
import css from './homeScreen.module.css'
-import LoadingScreen from '../common/LoadingScreen/LoadingScreen'
-import { ModelsType } from '../../types'
+import LoadingScreen from '../../components/LoadingScreen/LoadingScreen'
+import { closeTab, openTab } from '@/state/tabs'
+import { useDispatch } from 'react-redux'
//MAIN
const StartScreen = () => {
- const { models } = useDB() as unknown as ModelsType
- const { openTab, closeTabBySpellId } = useTabManager()
+ const dispatch = useDispatch()
+
const navigate = useNavigate()
const [deleteSpell] = useDeleteSpellMutation()
@@ -34,25 +33,20 @@ const StartScreen = () => {
}
// TODO check for proper values here and throw errors
- // Load modules from the spell
- if (spellData?.modules && spellData.modules.length > 0)
- await Promise.all(
- spellData.modules.map(module => {
- return models.modules.updateOrCreate(module)
- })
- )
-
// Create new spell
await newSpell({
chain: spellData.chain,
name: spellData.name,
+ gameState: spellData.gameState,
})
- await openTab({
- name: spellData.name,
- spellId: spellData.name,
- type: 'spell',
- })
+ dispatch(
+ openTab({
+ name: spellData.name,
+ spellId: spellData.name,
+ type: 'spell',
+ })
+ )
navigate('/thoth')
}
@@ -66,15 +60,15 @@ const StartScreen = () => {
const onDelete = async spellId => {
try {
await deleteSpell(spellId)
- await closeTabBySpellId(spellId)
+ dispatch(closeTab(spellId))
} catch (err) {
console.log('Error deleting spell', err)
}
}
const openSpell = async spell => {
- await openTab({ name: spell.name, spellId: spell.name, type: 'spell' })
- navigate('/thoth')
+ // dispatch(openTab({ name: spell.name, spellId: spell.name, type: 'spell' }))
+ navigate(`/thoth/${spell.name}`)
}
const [selectedSpell, setSelectedSpell] = useState(null)
diff --git a/client/src/features/HomeScreen/components/FileInput.jsx b/client/src/screens/HomeScreen/components/FileInput.jsx
similarity index 92%
rename from client/src/features/HomeScreen/components/FileInput.jsx
rename to client/src/screens/HomeScreen/components/FileInput.jsx
index dd2b73e43..edf7cc4a1 100644
--- a/client/src/features/HomeScreen/components/FileInput.jsx
+++ b/client/src/screens/HomeScreen/components/FileInput.jsx
@@ -1,6 +1,6 @@
import React from 'react'
-import Icon from '../../common/Icon/Icon'
+import Icon from '../../../components/Icon/Icon'
const FileInput = ({ loadFile }) => {
const hiddenFileInput = React.useRef(null)
diff --git a/client/src/features/HomeScreen/components/ProjectRow.jsx b/client/src/screens/HomeScreen/components/ProjectRow.tsx
similarity index 58%
rename from client/src/features/HomeScreen/components/ProjectRow.jsx
rename to client/src/screens/HomeScreen/components/ProjectRow.tsx
index bbecd3865..61ed81627 100644
--- a/client/src/features/HomeScreen/components/ProjectRow.jsx
+++ b/client/src/screens/HomeScreen/components/ProjectRow.tsx
@@ -1,25 +1,39 @@
-import Icon from '../../common/Icon/Icon'
+import { Spell } from '@latitudegames/thoth-core/types'
+import { CSSProperties } from 'react'
+import Icon from '../../../components/Icon/Icon'
import css from '../homeScreen.module.css'
+type ProjectProps = {
+ label: string
+ selectedSpell?: Spell
+ icon?: string
+ onClick: Function
+ spell?: Spell
+ style?: CSSProperties
+ onDelete?: Function
+}
+
const ProjectRow = ({
label,
selectedSpell,
- onClick,
- icon,
+ onClick = () => {},
+ icon = '',
spell,
- style,
- onDelete = false,
-}) => {
+ style = {},
+ onDelete,
+}: ProjectProps) => {
return (
{
+ onClick(e)
+ }}
style={style}
>
- {icon && (
+ {icon.length > 0 && (
)}
{label}
@@ -27,7 +41,7 @@ const ProjectRow = ({
{
- onDelete(spell.name)
+ spell?.name && onDelete(spell.name)
}}
style={{
marginRight: 'var(--extraSmall)',
diff --git a/client/src/features/HomeScreen/components/TemplatePanel.jsx b/client/src/screens/HomeScreen/components/TemplatePanel.jsx
similarity index 93%
rename from client/src/features/HomeScreen/components/TemplatePanel.jsx
rename to client/src/screens/HomeScreen/components/TemplatePanel.jsx
index 294c3d73d..eee6238a9 100644
--- a/client/src/features/HomeScreen/components/TemplatePanel.jsx
+++ b/client/src/screens/HomeScreen/components/TemplatePanel.jsx
@@ -1,4 +1,4 @@
-import Panel from '../../common/Panel/Panel'
+import Panel from '../../../components/Panel/Panel'
import css from '../homeScreen.module.css'
const TemplatePanel = ({ template, setSelectedTemplate, selectedTemplate }) => {
diff --git a/client/src/features/HomeScreen/empty.png b/client/src/screens/HomeScreen/empty.png
similarity index 100%
rename from client/src/features/HomeScreen/empty.png
rename to client/src/screens/HomeScreen/empty.png
diff --git a/client/src/features/HomeScreen/enki.png b/client/src/screens/HomeScreen/enki.png
similarity index 100%
rename from client/src/features/HomeScreen/enki.png
rename to client/src/screens/HomeScreen/enki.png
diff --git a/client/src/features/HomeScreen/homeScreen.module.css b/client/src/screens/HomeScreen/homeScreen.module.css
similarity index 100%
rename from client/src/features/HomeScreen/homeScreen.module.css
rename to client/src/screens/HomeScreen/homeScreen.module.css
diff --git a/client/src/features/HomeScreen/homeScreen.module.css.d.ts b/client/src/screens/HomeScreen/homeScreen.module.css.d.ts
similarity index 100%
rename from client/src/features/HomeScreen/homeScreen.module.css.d.ts
rename to client/src/screens/HomeScreen/homeScreen.module.css.d.ts
diff --git a/client/src/features/HomeScreen/lang.png b/client/src/screens/HomeScreen/lang.png
similarity index 100%
rename from client/src/features/HomeScreen/lang.png
rename to client/src/screens/HomeScreen/lang.png
diff --git a/client/src/features/HomeScreen/screens/AllProjects.jsx b/client/src/screens/HomeScreen/screens/AllProjects.jsx
similarity index 94%
rename from client/src/features/HomeScreen/screens/AllProjects.jsx
rename to client/src/screens/HomeScreen/screens/AllProjects.jsx
index e3b924966..d31524c22 100644
--- a/client/src/features/HomeScreen/screens/AllProjects.jsx
+++ b/client/src/screens/HomeScreen/screens/AllProjects.jsx
@@ -1,7 +1,7 @@
import { Scrollbars } from 'react-custom-scrollbars-2'
-import Icon from '../../common/Icon/Icon'
-import Panel from '../../common/Panel/Panel'
+import Icon from '../../../components/Icon/Icon'
+import Panel from '../../../components/Panel/Panel'
import css from '../homeScreen.module.css'
import FileInput from '../components/FileInput'
import ProjectRow from '../components/ProjectRow'
diff --git a/client/src/features/HomeScreen/screens/CreateNew.jsx b/client/src/screens/HomeScreen/screens/CreateNew.tsx
similarity index 62%
rename from client/src/features/HomeScreen/screens/CreateNew.jsx
rename to client/src/screens/HomeScreen/screens/CreateNew.tsx
index 6f7791f9f..d09683506 100644
--- a/client/src/features/HomeScreen/screens/CreateNew.jsx
+++ b/client/src/screens/HomeScreen/screens/CreateNew.tsx
@@ -1,5 +1,5 @@
import { useSnackbar } from 'notistack'
-import { useState, useEffect } from 'react'
+import { useState } from 'react'
import { useForm } from 'react-hook-form'
import {
uniqueNamesGenerator,
@@ -9,15 +9,14 @@ import {
import { useNavigate } from 'react-router-dom'
import { useNewSpellMutation } from '@/state/api/spells'
-import { useTabManager } from '@/contexts/TabManagerProvider'
-import Panel from '@common/Panel/Panel'
-import Input from '@common/Input/Input'
+import Panel from '../../../components/Panel/Panel'
import emptyImg from '../empty.png'
import enkiImg from '../enki.png'
import langImg from '../lang.png'
import css from '../homeScreen.module.css'
import TemplatePanel from '../components/TemplatePanel'
-import defaultChain from './chains/default'
+import defaultChain from '../../../data/chains/default'
+import { ChainData } from '@latitudegames/thoth-core/types'
const customConfig = {
dictionaries: [adjectives, colors],
@@ -25,19 +24,26 @@ const customConfig = {
length: 2,
}
-const templates = [
+export type Template = {
+ label: string
+ bg: string
+ chain: ChainData
+}
+
+export const thothTemplates = [
{ label: 'Starter', bg: emptyImg, chain: defaultChain },
{ label: 'Language example', bg: langImg, chain: defaultChain },
{ label: 'Enki example', bg: enkiImg, chain: defaultChain },
]
const CreateNew = () => {
- const [selectedTemplate, setSelectedTemplate] = useState(null)
- const [error, setError] = useState(null)
+ const [selectedTemplate, setSelectedTemplate] = useState(
+ null
+ )
+ const [error, setError] = useState(null)
const { enqueueSnackbar } = useSnackbar()
const navigate = useNavigate()
- const { openTab, clearTabs } = useTabManager()
const [newSpell] = useNewSpellMutation()
const {
@@ -47,29 +53,40 @@ const CreateNew = () => {
} = useForm()
const onCreate = handleSubmit(async data => {
- const placeholderName = uniqueNamesGenerator(customConfig)
- const name = data.name || placeholderName
- const response = await newSpell({
- chain: selectedTemplate.chain,
- name,
- })
-
- if (response.error) {
- const message = response.error.data.error.message
- setError(message)
- enqueueSnackbar(`Error saving spell. ${message}.`, {
- variant: 'error',
+ try {
+ const placeholderName = uniqueNamesGenerator(customConfig)
+ const name = data.name || placeholderName
+ const response = await newSpell({
+ chain: selectedTemplate?.chain,
+ name,
})
- return
- }
- await openTab({
- name: name,
- spellId: name,
- type: 'spell',
- })
+ if ('error' in response) {
+ console.log('error in response', response.error)
+ if ('status' in response.error) {
+ const err = response.error
+ // I am annoyed by RTK error typing.
+ // @ts-expect-error
+ const errMsg = err.data.error.message
+ setError(errMsg as string)
+ enqueueSnackbar(`Error saving spell. ${errMsg}.`, {
+ variant: 'error',
+ })
+ return
+ }
+ }
- setTimeout(() => navigate('/thoth'), 500)
+ navigate(`/thoth/${name}`)
+ // dispatch(
+ // openTab({
+ // name: name,
+ // spellId: name,
+ // type: 'spell',
+ // })
+ // )
+ } catch (err) {
+ console.log('ERROR!!', err)
+ }
})
return (
@@ -98,7 +115,7 @@ const CreateNew = () => {
gap: 'var(--extraSmall)',
}}
>
- {templates.map((template, i) => (
+ {thothTemplates.map((template, i) => (
'0.0.1'
@@ -17,7 +19,7 @@ const OpenProject = ({
loadFile,
openSpell,
}) => {
- const { tabs } = useTabManager()
+ const tabs = useSelector((state: RootState) => selectAllTabs(state.tabs))
const navigate = useNavigate()
return (
@@ -46,6 +48,7 @@ const OpenProject = ({
key={i}
selectedSpell={selectedSpell}
label={spell.name}
+ spell={spell}
onClick={() => {
setSelectedSpell(spell)
}}
diff --git a/client/src/features/HomeScreen/version-banner-0.0.0beta.jpg b/client/src/screens/HomeScreen/version-banner-0.0.0beta.jpg
similarity index 100%
rename from client/src/features/HomeScreen/version-banner-0.0.0beta.jpg
rename to client/src/screens/HomeScreen/version-banner-0.0.0beta.jpg
diff --git a/client/src/screens/Thoth/Thoth.tsx b/client/src/screens/Thoth/Thoth.tsx
new file mode 100644
index 000000000..df51a865c
--- /dev/null
+++ b/client/src/screens/Thoth/Thoth.tsx
@@ -0,0 +1,69 @@
+import { RootState } from '@/state/store'
+import { activeTabSelector, selectAllTabs, openTab } from '@/state/tabs'
+import { useEffect } from 'react'
+import { useHotkeys } from 'react-hotkeys-hook'
+import { useDispatch, useSelector } from 'react-redux'
+import { useNavigate, useParams } from 'react-router-dom'
+
+import { usePubSub } from '../../contexts/PubSubProvider'
+import LoadingScreen from '../../components/LoadingScreen/LoadingScreen'
+import TabLayout from '../../components/TabLayout/TabLayout'
+import Workspaces from '../../workspaces'
+
+const Thoth = ({ empty = false }) => {
+ const dispatch = useDispatch()
+ const navigate = useNavigate()
+ const tabs = useSelector((state: RootState) => selectAllTabs(state.tabs))
+ const activeTab = useSelector(activeTabSelector)
+
+ const pubSub = usePubSub()
+ const { spellName } = useParams()
+
+ const { events, publish } = pubSub
+
+ useEffect(() => {
+ if (!tabs) return
+
+ // If there are still tabs, grab one at random to open to for now.
+ // We should do better at this. Probably with some kind of tab ordering.
+ // Could fit in well with drag and drop for tabs
+ if (tabs.length > 0 && !activeTab && !spellName)
+ navigate(`/thoth/${tabs[0].spellId}`)
+
+ if (tabs.length === 0 && !activeTab && !spellName) navigate('/home')
+ }, [tabs])
+
+ useEffect(() => {
+ if (!spellName) return
+
+ dispatch(
+ openTab({
+ spellId: spellName,
+ name: spellName,
+ openNew: false,
+ type: 'spell',
+ })
+ )
+ }, [spellName])
+
+ useHotkeys(
+ 'Option+Delete',
+ () => {
+ if (!pubSub || !activeTab) return
+ publish(events.$DELETE(activeTab.id))
+ },
+ [pubSub, activeTab]
+ )
+
+ if (!activeTab) return
+
+ return (
+
+ {!empty && (
+
+ )}
+
+ )
+}
+
+export default Thoth
diff --git a/client/src/features/Thoth/components/EventHandler.jsx b/client/src/screens/Thoth/components/EventHandler.tsx
similarity index 58%
rename from client/src/features/Thoth/components/EventHandler.jsx
rename to client/src/screens/Thoth/components/EventHandler.tsx
index 4cd94e2a8..db96c05fa 100644
--- a/client/src/features/Thoth/components/EventHandler.jsx
+++ b/client/src/screens/Thoth/components/EventHandler.tsx
@@ -1,5 +1,5 @@
import { useEffect, useRef } from 'react'
-import { useSelector } from 'react-redux'
+import { ChainData, Spell } from '@latitudegames/thoth-core/dist/types'
import {
uniqueNamesGenerator,
@@ -9,12 +9,15 @@ import {
import {
useSaveSpellMutation,
- useGetSpellsQuery,
- selectSpellById,
+ useGetSpellQuery,
+ useSaveDiffMutation,
} from '../../../state/api/spells'
-import { useEditor } from '../contexts/EditorProvider'
-import { useLayout } from '../contexts/LayoutProvider'
-import { useModule } from '../../../contexts/ModuleProvider'
+import { useEditor } from '../../../workspaces/contexts/EditorProvider'
+import { useLayout } from '../../../workspaces/contexts/LayoutProvider'
+import { diff } from '@/utils/json0'
+import { useSnackbar } from 'notistack'
+import { sharedb } from '@/config'
+import { useSharedb } from '@/contexts/SharedbProvider'
// Config for unique name generator
const customConfig = {
@@ -26,46 +29,96 @@ const customConfig = {
const EventHandler = ({ pubSub, tab }) => {
// only using this to handle events, so not rendering anything with it.
const { createOrFocus, windowTypes } = useLayout()
+ const { enqueueSnackbar } = useSnackbar()
+ const { getSpellDoc } = useSharedb()
const [saveSpellMutation] = useSaveSpellMutation()
- const { data: spellsData } = useGetSpellsQuery()
- const spell = useSelector(state => selectSpellById(state, tab?.spell))
+ const [saveDiff] = useSaveDiffMutation()
+ const { data: spell } = useGetSpellQuery(tab.spellId)
// Spell ref because callbacks cant hold values from state without them
- const spellRef = useRef(null)
+ const spellRef = useRef(null)
+
useEffect(() => {
if (!spell) return
spellRef.current = spell
}, [spell])
- const { serialize, getEditor, undo, redo } = useEditor()
- const { getSpellModules } = useModule()
+ const { serialize, getEditor, undo, redo, del } = useEditor()
const { events, subscribe } = pubSub
const {
+ $DELETE,
$UNDO,
$REDO,
$SAVE_SPELL,
- $SAVE_SPELL_AS,
+ $SAVE_SPELL_DIFF,
$CREATE_STATE_MANAGER,
$CREATE_PLAYTEST,
$CREATE_INSPECTOR,
+ $CREATE_CONSOLE,
$CREATE_TEXT_EDITOR,
$SERIALIZE,
$EXPORT,
$CLOSE_EDITOR,
+ $PROCESS,
} = events
const saveSpell = async () => {
const currentSpell = spellRef.current
- const chain = serialize(currentSpell)
+ const chain = serialize() as ChainData
await saveSpellMutation({ ...currentSpell, chain })
}
- const saveSpellAs = async () => {
- console.log('Save spell as')
+ const sharedbDiff = async (event, update) => {
+ if (!spellRef.current) return
+ const doc = getSpellDoc(spellRef.current as Spell)
+ if (!doc) return
+
+ const updatedSpell = {
+ ...doc.data,
+ ...update,
+ }
+
+ const jsonDiff = diff(doc.data, updatedSpell)
+
+ if (jsonDiff.length === 0) return
+
+ console.log('JSON DIFF IN SHAREDB DIFF', jsonDiff)
+
+ doc.submitOp(jsonDiff)
+ }
+
+ const onSaveDiff = async (event, update) => {
+ if (!spellRef.current) return
+
+ const currentSpell = spellRef.current
+ const updatedSpell = {
+ ...currentSpell,
+ ...update,
+ }
+ const jsonDiff = diff(currentSpell, updatedSpell)
+
+ // no point saving if nothing has changed
+ if (jsonDiff.length === 0) return
+
+ const response = await saveDiff({
+ name: currentSpell.name,
+ diff: jsonDiff,
+ })
+
+ if ('error' in response) {
+ enqueueSnackbar('Error saving spell', {
+ variant: 'error',
+ })
+ return
+ }
+
+ enqueueSnackbar('Spell saved', {
+ variant: 'success',
+ })
}
const createStateManager = () => {
@@ -84,11 +137,22 @@ const EventHandler = ({ pubSub, tab }) => {
createOrFocus(windowTypes.TEXT_EDITOR, 'Text Editor')
}
+ const createConsole = () => {
+ createOrFocus(windowTypes.CONSOLE, 'Console')
+ }
+
const onSerialize = () => {
// eslint-disable-next-line no-console
console.log(serialize())
}
+ const onProcess = () => {
+ const editor = getEditor()
+ if (!editor) return
+
+ editor.runProcess()
+ }
+
const onUndo = () => {
undo()
}
@@ -97,13 +161,14 @@ const EventHandler = ({ pubSub, tab }) => {
redo()
}
+ const onDelete = () => {
+ del()
+ }
+
const onExport = async () => {
// refetch spell from local DB to ensure it is the most up to date
const spell = { ...spellRef.current }
- spell.chain = serialize()
- const modules = await getSpellModules(spell)
- // attach modules to spell to be exported
- spell.modules = modules
+ spell.chain = serialize() as ChainData
spell.name = uniqueNamesGenerator(customConfig)
const json = JSON.stringify(spell)
@@ -120,6 +185,8 @@ const EventHandler = ({ pubSub, tab }) => {
// Start download
link.click()
+ if (!link.parentNode) return
+
// Clean up and remove the link
link.parentNode.removeChild(link)
}
@@ -127,7 +194,7 @@ const EventHandler = ({ pubSub, tab }) => {
// clean up anything inside the editor which we need to shut down.
// mainly subscriptions, etc.
const onCloseEditor = () => {
- const editor = getEditor()
+ const editor = getEditor() as Record
if (editor.moduleSubscription) editor.moduleSubscription.unsubscribe()
}
@@ -137,11 +204,15 @@ const EventHandler = ({ pubSub, tab }) => {
[$CREATE_PLAYTEST(tab.id)]: createPlaytest,
[$CREATE_INSPECTOR(tab.id)]: createInspector,
[$CREATE_TEXT_EDITOR(tab.id)]: createTextEditor,
+ [$CREATE_CONSOLE(tab.id)]: createConsole,
[$SERIALIZE(tab.id)]: onSerialize,
[$EXPORT(tab.id)]: onExport,
[$CLOSE_EDITOR(tab.id)]: onCloseEditor,
[$UNDO(tab.id)]: onUndo,
[$REDO(tab.id)]: onRedo,
+ [$DELETE(tab.id)]: onDelete,
+ [$PROCESS(tab.id)]: onProcess,
+ [$SAVE_SPELL_DIFF(tab.id)]: sharedb ? sharedbDiff : onSaveDiff,
}
useEffect(() => {
diff --git a/client/src/features/Thoth/thoth.module.css b/client/src/screens/Thoth/thoth.module.css
similarity index 96%
rename from client/src/features/Thoth/thoth.module.css
rename to client/src/screens/Thoth/thoth.module.css
index df5451bd6..c8e73e2d3 100644
--- a/client/src/features/Thoth/thoth.module.css
+++ b/client/src/screens/Thoth/thoth.module.css
@@ -44,7 +44,7 @@
background-color: rgba(40, 40, 40, 0.95);
color: rgba(150, 150, 150, 0.95);
flex: 1;
- font-family: "IBM Plex Mono", "mono";
+ font-family: 'IBM Plex Mono', 'mono';
overflow-y: hidden;
display: flex;
}
@@ -76,6 +76,7 @@
.playtest-input input {
color: #fff;
+ width: 100%;
border-radius: 4px;
cursor: default;
background-color: var(--dark-2);
@@ -117,7 +118,7 @@
border-radius: var(--extraSmall) var(--extraSmall) 0px 0px;
}
.node-bottom-container {
- font-family: "IBM Plex Mono", monospace !important;
+ font-family: 'IBM Plex Mono', monospace !important;
padding: var(--extraSmall);
display: flex;
flex-direction: row;
diff --git a/client/src/features/Thoth/thoth.module.css.d.ts b/client/src/screens/Thoth/thoth.module.css.d.ts
similarity index 100%
rename from client/src/features/Thoth/thoth.module.css.d.ts
rename to client/src/screens/Thoth/thoth.module.css.d.ts
diff --git a/client/src/services/Modals.ts b/client/src/services/Modals.ts
index ae562220b..122a1d5ec 100644
--- a/client/src/services/Modals.ts
+++ b/client/src/services/Modals.ts
@@ -1,5 +1,5 @@
-import ExampleModal from '../features/common/Modals/ExampleModal'
-import InfoModal from '../features/common/Modals/InfoModal'
+import ExampleModal from '../components/Modals/ExampleModal'
+import InfoModal from '../components/Modals/InfoModal'
const modals = { example: ExampleModal, infoModal: InfoModal }
diff --git a/client/src/services/game-api/text.ts b/client/src/services/game-api/text.ts
index 8e1ee3ab0..f41c89c44 100644
--- a/client/src/services/game-api/text.ts
+++ b/client/src/services/game-api/text.ts
@@ -3,17 +3,16 @@ import { getAuthHeader } from '../../contexts/AuthProvider'
export const completion = async body => {
try {
- const response = await fetch(latitudeApiRootUrl + '/text/completions', {
+ const response = await fetch(latitudeApiRootUrl + '/text/completions_v2', {
method: 'POST',
- mode: 'cors',
headers: {
'Content-Type': 'application/json',
...(await getAuthHeader()),
},
body: JSON.stringify({ ...body, prompt: body.prompt.trimEnd() }),
})
- const { result } = await response.json()
- return result
+ const result = await response.json()
+ return result.completions[0].text
} catch (err) {
// eslint-disable-next-line no-console
console.warn('fetch error', err)
diff --git a/client/src/state/api/api.ts b/client/src/state/api/api.ts
index 398119698..4f69f76a4 100644
--- a/client/src/state/api/api.ts
+++ b/client/src/state/api/api.ts
@@ -14,6 +14,6 @@ export const rootApi = createApi({
return headers
},
}),
- tagTypes: ['Spell', 'Version'],
+ tagTypes: ['Spell', 'Spells', 'Version'],
endpoints: () => ({}),
})
diff --git a/client/src/state/api/spells.ts b/client/src/state/api/spells.ts
index 85b7b0478..8342beb76 100644
--- a/client/src/state/api/spells.ts
+++ b/client/src/state/api/spells.ts
@@ -1,11 +1,9 @@
import { createSelector } from '@reduxjs/toolkit'
import { FetchBaseQueryError } from '@reduxjs/toolkit/query/react'
-import { Spell as SpellType } from '@latitudegames/thoth-core/types'
-import { initDB } from '../../database'
import { QueryReturnValue } from '@reduxjs/toolkit/dist/query/baseQueryTypes'
-import { Module } from '../../database/schemas/module'
import { rootApi } from './api'
+import { ChainData, Spell } from '@latitudegames/thoth-core/types'
// function camelize(str) {
// return str
// .replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) {
@@ -13,22 +11,9 @@ import { rootApi } from './api'
// })
// .replace(/\s+/g, '')
// }
-
-const _moduleModel = async () => {
- const db = await initDB()
- if (!db) return
- const { modules } = db.models
- return modules
-}
-export interface Spell {
- id?: string
- user?: Record | null | undefined
+export interface Diff {
name: string
- chain: SpellType
- modules: Module[]
- gameState: Record
- createdAt?: number
- updatedAt?: number
+ diff: Record
}
export interface DeployedSpellVersion {
@@ -37,7 +22,7 @@ export interface DeployedSpellVersion {
message?: string
versionName?: string
url?: string
- chain?: SpellType
+ chain?: ChainData
}
export interface DeployArgs {
@@ -55,10 +40,16 @@ export interface PatchArgs {
update: Partial
}
+export interface RunSpell {
+ spellId: string
+ version?: string
+ inputs: Record
+}
+
export const spellApi = rootApi.injectEndpoints({
endpoints: builder => ({
getSpells: builder.query({
- providesTags: ['Spell'],
+ providesTags: ['Spells'],
query: () => 'game/spells',
}),
getSpell: builder.query({
@@ -69,14 +60,26 @@ export const spellApi = rootApi.injectEndpoints({
}
},
}),
+ runSpell: builder.mutation, RunSpell>({
+ query: ({ spellId, version = 'latest', inputs }) => ({
+ url: `game/chains/${spellId}/${version}`,
+ method: 'POST',
+ body: inputs,
+ }),
+ }),
+ saveDiff: builder.mutation({
+ // TODO this may introruce bugs. Though I don't think we need to invalidate the spell cache here since the chain is loaded in live to the rete editor.
+ invalidatesTags: ['Spell'],
+ query: diffData => ({
+ url: 'game/spells/saveDiff',
+ method: 'POST',
+ body: diffData,
+ }),
+ }),
saveSpell: builder.mutation, Partial | Spell>({
invalidatesTags: ['Spell'],
// needed to use queryFn as query option didnt seem to allow async functions.
async queryFn(spell, { dispatch }, extraOptions, baseQuery) {
- const moduleModel = await _moduleModel()
- const modules = await moduleModel.getSpellModules(spell)
- spell.modules = modules
-
const baseQueryOptions = {
url: 'game/spells/save',
body: spell,
@@ -93,7 +96,7 @@ export const spellApi = rootApi.injectEndpoints({
},
}),
newSpell: builder.mutation>({
- invalidatesTags: ['Spell'],
+ invalidatesTags: ['Spells'],
query: spellData => ({
url: 'game/spells',
method: 'POST',
@@ -113,7 +116,7 @@ export const spellApi = rootApi.injectEndpoints({
},
}),
deleteSpell: builder.mutation({
- invalidatesTags: ['Spell'],
+ invalidatesTags: ['Spells'],
query: spellId => ({
url: `game/spells/${spellId}`,
method: 'DELETE',
@@ -150,36 +153,15 @@ export const selectAllSpells = createSelector(
spellResult => spellResult?.data || emptySpells
)
-export const selectSpellById = createSelector(
- [
- selectAllSpells,
- (state, spellId) => {
- return spellId
- },
- ],
- (spells, spellId) =>
- spells.find(spell => {
- return spell.name === spellId
- })
-)
-
-export const selectSpellsByModuleName = createSelector(
- [selectAllSpells, (state, moduleName) => moduleName],
- (spells, moduleName) =>
- spells.filter(
- spell =>
- spell.modules &&
- spell?.modules.some(module => module.name === moduleName)
- )
-)
-
export const {
useGetSpellQuery,
useGetSpellsQuery,
useLazyGetSpellQuery,
useNewSpellMutation,
useDeleteSpellMutation,
+ useRunSpellMutation,
useSaveSpellMutation,
+ useSaveDiffMutation,
useDeploySpellMutation,
usePatchSpellMutation,
useGetDeploymentsQuery,
diff --git a/client/src/state/api/visualGenerationsApi.ts b/client/src/state/api/visualGenerationsApi.ts
index dae127db2..de14ca4a6 100644
--- a/client/src/state/api/visualGenerationsApi.ts
+++ b/client/src/state/api/visualGenerationsApi.ts
@@ -1,10 +1,10 @@
+import { ImageCacheResponse } from '@latitudegames/thoth-core/types'
import { rootApi } from './api'
-import { ImageType } from '@latitudegames/thoth-core/src/components/VisualGeneration'
export const visualGenerationsApi = rootApi.injectEndpoints({
endpoints: builder => ({
fetchFromImageCache: builder.mutation<
- ImageType[],
+ ImageCacheResponse,
{ caption: string; cacheTag?: string; topK?: number }
>({
query: searchOptions => ({
diff --git a/client/src/state/reducers.ts b/client/src/state/reducers.ts
new file mode 100644
index 000000000..96948d7c8
--- /dev/null
+++ b/client/src/state/reducers.ts
@@ -0,0 +1,9 @@
+import { combineReducers } from '@reduxjs/toolkit'
+
+import { spellApi } from './api/spells'
+import tabReducer from './tabs'
+
+export default combineReducers({
+ tabs: tabReducer,
+ [spellApi.reducerPath]: spellApi.reducer,
+})
diff --git a/client/src/state/store.ts b/client/src/state/store.ts
index c07352a1e..1194a25b5 100644
--- a/client/src/state/store.ts
+++ b/client/src/state/store.ts
@@ -1,19 +1,45 @@
import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit'
import { setupListeners } from '@reduxjs/toolkit/query/react'
-import tabReducer from './tabs'
+
+import rootReducer from './reducers'
+
+import {
+ persistStore,
+ persistReducer,
+ FLUSH,
+ REHYDRATE,
+ PAUSE,
+ PERSIST,
+ PURGE,
+ REGISTER,
+} from 'redux-persist'
+import storage from 'redux-persist/lib/storage'
+
import { spellApi } from './api/spells'
+const persistConfig = {
+ key: 'root',
+ version: 1,
+ storage,
+ blacklist: [spellApi.reducerPath],
+}
+
+const persistedReducer = persistReducer(persistConfig, rootReducer)
+
export const store = configureStore({
- reducer: {
- tabs: tabReducer,
- [spellApi.reducerPath]: spellApi.reducer,
- },
+ reducer: persistedReducer,
middleware: getDefaultMiddleware =>
- getDefaultMiddleware().concat(spellApi.middleware),
+ getDefaultMiddleware({
+ serializableCheck: {
+ ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
+ },
+ }).concat(spellApi.middleware),
})
setupListeners(store.dispatch)
+export const persistor = persistStore(store)
+
export type AppDispatch = typeof store.dispatch
export type RootState = ReturnType
export type AppThunk = ThunkAction<
diff --git a/client/src/state/tabs.ts b/client/src/state/tabs.ts
index cf4753b21..b040f1adb 100644
--- a/client/src/state/tabs.ts
+++ b/client/src/state/tabs.ts
@@ -7,7 +7,7 @@ import {
} from '@reduxjs/toolkit'
import { RootState } from './store'
-import defaultJson from '../contexts/layouts/defaultLayout.json'
+import defaultJson from '../data/layouts/defaultLayout.json'
// Used to set workspaces to tabs
const workspaceMap = {
@@ -21,6 +21,7 @@ export interface Tab {
type?: 'spell' | 'module'
// probably going to need to insert a proper spell type in here
spell?: string
+ spellId: string
// this will also be a ref to a property somewhere else
module: string
}
@@ -40,6 +41,12 @@ const _activeTabSelector = createDraftSafeSelector(
}
)
+const selectTabBySpellId = createDraftSafeSelector(
+ [tabSelectors.selectAll, (_, spellId) => spellId],
+ (tabs: Tab[], spellId) =>
+ Object.values(tabs).find(tab => tab.spellId === spellId)
+)
+
// Used to build a tab with various defaults set, as well as workspace json and UUID
const buildTab = (tab, properties = {}) => ({
...tab,
@@ -57,35 +64,51 @@ export const tabSlice = createSlice({
name: 'tabs',
initialState,
reducers: {
- tabOpened: (state, action) => {
+ openTab: (state, action) => {
+ const switchActive =
+ 'switchActive' in action.payload ? action.payload.switchActive : true
+
const activeTab = _activeTabSelector(state) as Tab
- if (activeTab)
+ if (activeTab && switchActive)
tabAdapater.updateOne(state, {
id: activeTab.id,
changes: { active: false },
})
+ // Check if the tab is already open.
+ const existingTab = selectTabBySpellId(state, action.payload.spellId)
+
+ if (existingTab && !switchActive) return
+
+ if (existingTab && !action.payload.openNew) {
+ tabAdapater.updateOne(state, {
+ id: existingTab.id,
+ changes: {
+ active: switchActive,
+ },
+ })
+ return
+ }
+ //
+
const tab = buildTab(action.payload, { active: true })
tabAdapater.addOne(state, tab)
},
- tabClosed: tabAdapater.removeOne,
- tabSwitched: tabAdapater.updateOne,
- tabsCleared: tabAdapater.removeAll,
- tabLayoutSaved: () => {},
+ closeTab: tabAdapater.removeOne,
+ switchTab: tabAdapater.updateOne,
+ clearTabs: tabAdapater.removeAll,
+ saveTabLayout: (state, action) => {},
},
})
// actions
-export const {
- tabOpened,
- tabClosed,
- tabSwitched,
- tabsCleared,
- tabLayoutSaved,
-} = tabSlice.actions
+export const { openTab, closeTab, switchTab, clearTabs, saveTabLayout } =
+ tabSlice.actions
// selectors
export const activeTabSelector = (state: RootState) =>
_activeTabSelector(state.tabs)
+export const { selectAll: selectAllTabs } = tabSelectors
+
export default tabSlice.reducer
diff --git a/client/src/utils/json0.ts b/client/src/utils/json0.ts
new file mode 100644
index 000000000..a9a5153f2
--- /dev/null
+++ b/client/src/utils/json0.ts
@@ -0,0 +1,4 @@
+import jsonDiff from 'json0-ot-diff'
+import diffMatchPatch from 'diff-match-patch'
+
+export const diff = (obj1, obj2) => jsonDiff(obj1, obj2, diffMatchPatch)
diff --git a/client/src/features/Thoth/contexts/EditorProvider.tsx b/client/src/workspaces/contexts/EditorProvider.tsx
similarity index 69%
rename from client/src/features/Thoth/contexts/EditorProvider.tsx
rename to client/src/workspaces/contexts/EditorProvider.tsx
index c9dfcfb7b..1273e6435 100644
--- a/client/src/features/Thoth/contexts/EditorProvider.tsx
+++ b/client/src/workspaces/contexts/EditorProvider.tsx
@@ -1,4 +1,10 @@
-import { initEditor } from '@latitudegames/thoth-core'
+import { initEditor, zoomAt } from '@latitudegames/thoth-core'
+import {
+ ChainData,
+ EditorContext,
+ Spell,
+ ThothEditor,
+} from '@latitudegames/thoth-core/dist/types'
import React, {
useRef,
useContext,
@@ -7,14 +13,13 @@ import React, {
useEffect,
} from 'react'
-import { useLazyGetSpellQuery, Spell } from '../../../state/api/spells'
+import { useLazyGetSpellQuery } from '../../state/api/spells'
-import LoadingScreen from '../../common/LoadingScreen/LoadingScreen'
-import { MyNode } from '../../common/Node/Node'
+import LoadingScreen from '../../components/LoadingScreen/LoadingScreen'
+import { MyNode } from '../../components/Node/Node'
import gridimg from '@/grid.png'
-import { usePubSub } from '../../../contexts/PubSubProvider'
-import { useRete, ReteContext } from './ReteProvider'
-// import { ThothTab } from './TabManagerProvider'
+import { usePubSub } from '../../contexts/PubSubProvider'
+import { useThothInterface } from './ThothInterfaceProvider'
export type ThothTab = {
layoutJson: string
@@ -26,17 +31,18 @@ export type ThothTab = {
active: boolean
}
+// TODO give better typing to the editor
const Context = createContext({
run: () => {},
- getEditor: () => {},
- editor: {} as any,
- serialize: () => {},
+ getEditor: (): ThothEditor | null => null,
+ editor: {} as ThothEditor | null,
+ serialize: (): ChainData | undefined => undefined,
buildEditor: (
el: HTMLDivElement,
// todo update this to use proper spell type
spell: Spell | undefined,
tab: ThothTab,
- reteInterface: ReteContext
+ reteInterface: EditorContext
) => {},
setEditor: (editor: any) => {},
getNodeMap: () => {},
@@ -45,19 +51,15 @@ const Context = createContext({
setContainer: () => {},
undo: () => {},
redo: () => {},
+ del: () => {},
+ centerNode: (nodeId: number): void => {},
})
export const useEditor = () => useContext(Context)
const EditorProvider = ({ children }) => {
- const [editor, setEditorState] = useState({
- components: [],
- loadGraph: (chain: any) => {},
- })
- const editorRef = useRef({
- trigger: (event: string) => {},
- toJSON: () => {},
- })
+ const [editor, setEditorState] = useState(null)
+ const editorRef = useRef(null)
const pubSub = usePubSub()
const setEditor = editor => {
@@ -66,6 +68,7 @@ const EditorProvider = ({ children }) => {
}
const getEditor = () => {
+ if (!editorRef.current) return null
return editorRef.current
}
@@ -74,7 +77,7 @@ const EditorProvider = ({ children }) => {
const newEditor = await initEditor({
container,
pubSub,
- // calling thoth during migration of features
+ // calling thoth during migration of screens
thoth,
tab,
// MyNode is a custom default style for nodes
@@ -101,14 +104,30 @@ const EditorProvider = ({ children }) => {
}
const undo = () => {
+ if (!editorRef.current) return
editorRef.current.trigger('undo')
}
+ const centerNode = (nodeId: number): void => {
+ if (!editorRef.current) return
+ const editor = editorRef.current
+ const node = editor.nodes.find(n => n.id === +nodeId)
+
+ if (node) zoomAt(editor, [node])
+ }
+
const redo = () => {
+ if (!editorRef.current) return
editorRef.current.trigger('redo')
}
+ const del = () => {
+ if (!editorRef.current) return
+ editorRef.current.trigger('delete')
+ }
+
const serialize = () => {
+ if (!editorRef.current) return
return editorRef.current.toJSON()
}
@@ -121,7 +140,8 @@ const EditorProvider = ({ children }) => {
}
const loadChain = graph => {
- editor.loadGraph(graph)
+ if (!editorRef.current) return
+ editorRef.current.loadGraph(graph)
}
const setContainer = () => {
@@ -141,7 +161,9 @@ const EditorProvider = ({ children }) => {
getEditor,
undo,
redo,
+ del,
setContainer,
+ centerNode,
}
return {children}
@@ -152,12 +174,12 @@ const RawEditor = ({ tab, children }) => {
const [loaded, setLoaded] = useState(false)
const { buildEditor } = useEditor()
// This will be the main interface between thoth and rete
- const reteInterface = useRete()
+ const reteInterface = useThothInterface()
useEffect(() => {
if (!tab) return
- if (tab?.spell) getSpell(tab.spell)
+ if (tab?.spellId) getSpell(tab.spellId)
}, [tab])
if (!tab || (tab.type === 'spell' && (isLoading || !spell)))
diff --git a/client/src/workspaces/contexts/InspectorProvider.tsx b/client/src/workspaces/contexts/InspectorProvider.tsx
new file mode 100644
index 000000000..d06029dfb
--- /dev/null
+++ b/client/src/workspaces/contexts/InspectorProvider.tsx
@@ -0,0 +1,112 @@
+import { usePubSub } from '@/contexts/PubSubProvider'
+import { InspectorData } from '@latitudegames/thoth-core/types'
+import { createContext, useContext, useEffect, useState } from 'react'
+
+export type TextEditorData = {
+ options?: Record | undefined
+ data?: string
+ control?: Record | undefined
+ name?: string
+}
+
+type InspectorContext = {
+ inspectorData: InspectorData | null
+ textEditorData: TextEditorData | null
+ saveTextEditor: Function
+ saveInspector: Function
+}
+
+const Context = createContext(undefined!)
+
+export const useInspector = () => useContext(Context)
+
+const InspectorProvider = ({ children, tab }) => {
+ const { subscribe, publish, events } = usePubSub()
+
+ const [inspectorData, setInspectorData] = useState(null)
+ const [textEditorData, setTextEditorData] = useState({})
+
+ const SET_INSPECTOR = events.$INSPECTOR_SET(tab.id)
+
+ // inspector subscription
+ useEffect(() => {
+ return subscribe(SET_INSPECTOR, (_, data: InspectorData) => {
+ // If the incoming data and existing data are at odds, clear inspector data
+ if (data?.nodeId !== inspectorData?.nodeId) setInspectorData(null)
+
+ // Set the inspector
+ setInspectorData(data)
+
+ if (!data.dataControls) return
+
+ // Handle components in a special way here. Could probaby abstract this better
+
+ Object.entries(data.dataControls).forEach(([, control]) => {
+ if (control?.options?.editor) {
+ // we relay data to the text editor component for display here as well.
+ const textData = {
+ data: data.data[control.dataKey],
+ nodeId: data.nodeId,
+ name: data.name,
+ control: control,
+ options: control.options,
+ }
+
+ setTextEditorData(textData)
+ }
+ })
+ }) as () => void
+ }, [events, subscribe, publish])
+
+ // text editor subscription
+ useEffect(() => {
+ return subscribe(events.$TEXT_EDITOR_SET(tab.id), (event, data) => {
+ setTextEditorData(data)
+ }) as () => void
+ }, [events, subscribe, publish])
+
+ // clear text editor subscription
+ useEffect(() => {
+ return subscribe(events.$TEXT_EDITOR_CLEAR(tab.id), () => {
+ setTextEditorData({})
+ }) as () => void
+ }, [events, subscribe, publish])
+
+ //
+ const saveTextEditor = textData => {
+ const textUpdate = {
+ [textData.control.dataKey]: textData.data,
+ }
+
+ if (!inspectorData) return
+
+ const update = {
+ ...inspectorData,
+ data: {
+ ...inspectorData.data,
+ ...textUpdate,
+ },
+ }
+
+ publish(events.$NODE_SET(tab.id, textData.nodeId), update)
+ if (inspectorData) {
+ setInspectorData(update)
+ }
+ }
+
+ const saveInspector = inspectorData => {
+ setInspectorData(inspectorData)
+ publish(events.$NODE_SET(tab.id, inspectorData.nodeId), inspectorData)
+ }
+
+ const publicInterface: InspectorContext = {
+ inspectorData,
+ textEditorData,
+ saveTextEditor,
+ saveInspector,
+ }
+
+ return {children}
+}
+
+export default InspectorProvider
diff --git a/client/src/workspaces/contexts/LayoutProvider.tsx b/client/src/workspaces/contexts/LayoutProvider.tsx
new file mode 100644
index 000000000..ae0887574
--- /dev/null
+++ b/client/src/workspaces/contexts/LayoutProvider.tsx
@@ -0,0 +1,182 @@
+import {
+ Layout as LayoutComponent,
+ Model,
+ Actions,
+ DockLocation,
+ TabNode,
+ TabSetNode,
+} from 'flexlayout-react'
+import { useContext, createContext, useEffect, useState, useRef } from 'react'
+
+import LoadingScreen from '../../components/LoadingScreen/LoadingScreen'
+import { saveTabLayout } from '@/state/tabs'
+import { useDispatch } from 'react-redux'
+// Component types are listed here which are used to load components from the data sent by rete
+const windowTypes: WindowTypes = {
+ TEXT_EDITOR: 'textEditor',
+ INSPECTOR: 'inspector',
+ STATE_MANAGER: 'stateManager',
+ EDITOR: 'editor',
+ PLAYTEST: 'playtest',
+ CONSOLE: 'debugConsole',
+}
+
+type WindowType =
+ | 'textEditor'
+ | 'inspector'
+ | 'stateManager'
+ | 'editor'
+ | 'playtest'
+ | 'debugConsole'
+
+type WindowTypes = Record
+
+// helpful resources
+// https://github.com/edemaine/comingle/blob/726d42e975307beb5281fddbf576591c36c1022d/client/Room.coffee#L365-L384
+// https://github.com/caplin/FlexLayout/blob/master/examples/demo/App.tsx
+
+declare global {
+ interface Window {
+ getLayout: any
+ }
+}
+
+type LayoutContext = {
+ currentModel: Model | null
+ createModel: Function
+ createOrFocus: Function
+ windowTypes: WindowTypes
+ currentRef
+ setCurrentRef
+}
+
+const Context = createContext(undefined!)
+
+export const useLayout = () => useContext(Context)
+
+const LayoutProvider = ({ children, tab }) => {
+ const currentModelRef = useRef(null)
+
+ const [currentModel, setCurrentModel] = useState(null)
+ const [currentRef, setCurrentRef] = useState(null)
+
+ const updateCurrentModel = (model: Model) => {
+ currentModelRef.current = model
+ setCurrentModel(model)
+ }
+
+ useEffect(() => {
+ window.getLayout = () =>
+ currentModelRef?.current && currentModelRef?.current?.toJson()
+ }, [currentModel])
+
+ const createModel = json => {
+ const model = Model.fromJson(json)
+ updateCurrentModel(model)
+
+ return model
+ }
+
+ const addWindow = (componentType, title) => {
+ // Solution partly taken from here.
+ // Programatic creation of a tabSet and a tab added to it.
+ // https://github.com/caplin/FlexLayout/issues/54
+ const tabJson = {
+ type: 'tab',
+ component: componentType,
+ weight: 12,
+ name: title,
+ }
+ const currentModel = currentModelRef.current
+
+ if (!currentModel) return
+
+ // TODO the types provided by react flex layout are wrong for these constructors. Fix with a PR or a fork of the library?
+ const rootNode = currentModel.getRoot()
+ // @ts-expect-error
+ const tabNode = new TabNode(currentModel, tabJson)
+ // @ts-expect-error
+ const tabSetNode = new TabSetNode(currentModel, {
+ type: 'tabset',
+ weight: 12,
+ })
+
+ // We are here using a provate variable, so TS isnt picking it up
+ // @ts-expect-error
+ rootNode._addChild(tabSetNode)
+
+ currentModel.doAction(
+ Actions.moveNode(
+ tabNode.getId(),
+ tabSetNode.getId(),
+ DockLocation.RIGHT,
+ 0
+ )
+ )
+ }
+
+ const createOrFocus = (componentName, title) => {
+ if (!currentModelRef.current || !currentModel) return
+
+ // We are here using a provate variable, so TS isnt picking it up
+ // @ts-expect-error
+ const component = Object.entries(currentModelRef.current._idMap).find(
+ ([, value]) => {
+ // Since there is not type for _idMap, we don't know the type value is.
+ // @ts-expect-error
+ return value._attributes?.component === componentName
+ }
+ )
+
+ // the nodeId is stored in the zeroth index of the find
+ if (component) currentModel.doAction(Actions.selectTab(component[0]))
+ if (!component) addWindow(componentName, title)
+ }
+
+ const publicInterface = {
+ currentModel,
+ createModel,
+ createOrFocus,
+ windowTypes,
+ currentRef,
+ setCurrentRef,
+ }
+
+ return {children}
+}
+
+export const Layout = ({ json, factory, tab }) => {
+ const dispatch = useDispatch()
+ const { currentModel, createModel, setCurrentRef } = useLayout()
+ const layoutRef = useRef(null)
+
+ useEffect(() => {
+ if (!json || currentModel) return
+ createModel(json)
+ }, [json, createModel, currentModel])
+
+ useEffect(() => {
+ setCurrentRef(layoutRef)
+ }, [layoutRef, setCurrentRef])
+
+ const onModelChange = () => {
+ if (!currentModel) return
+ dispatch(
+ saveTabLayout({ tabId: tab.id, layoutJson: currentModel.toJson() })
+ )
+ }
+
+ if (!currentModel) return
+
+ return (
+
+ )
+}
+
+export default LayoutProvider
diff --git a/client/src/features/Thoth/contexts/ReteProvider.tsx b/client/src/workspaces/contexts/ThothInterfaceProvider.tsx
similarity index 62%
rename from client/src/features/Thoth/contexts/ReteProvider.tsx
rename to client/src/workspaces/contexts/ThothInterfaceProvider.tsx
index 2c071dd6f..1e8403a92 100644
--- a/client/src/features/Thoth/contexts/ReteProvider.tsx
+++ b/client/src/workspaces/contexts/ThothInterfaceProvider.tsx
@@ -1,57 +1,33 @@
-import { EngineContext } from '@latitudegames/thoth-core'
+import {
+ EditorContext,
+ Spell,
+ ThothWorkerInputs,
+} from '@latitudegames/thoth-core/dist/types'
import { useContext, createContext, useRef, useEffect } from 'react'
-import { postEnkiCompletion } from '../../../services/game-api/enki'
-import { completion as _completion } from '../../../services/game-api/text'
-import { invokeInference } from '../../../utils/huggingfaceHelper'
-import { useDB } from '../../../contexts/DatabaseProvider'
-import { usePubSub } from '../../../contexts/PubSubProvider'
+import { postEnkiCompletion } from '../../services/game-api/enki'
+import { completion as _completion } from '../../services/game-api/text'
+import { invokeInference } from '../../utils/huggingfaceHelper'
+import { usePubSub } from '../../contexts/PubSubProvider'
import { useFetchFromImageCacheMutation } from '@/state/api/visualGenerationsApi'
-import { ModelsType } from '../../../types'
-import { ThothWorkerInputs } from '@latitudegames/thoth-core/types'
-import {
- Spell,
- useGetSpellQuery,
- useSaveSpellMutation,
-} from '@/state/api/spells'
+import { useGetSpellQuery, useRunSpellMutation } from '@/state/api/spells'
/*
Some notes here. The new rete provider, not to be confused with the old rete provider renamed to the editor provider, is designed to serve as the single source of truth for interfacing with the rete internal system. This unified interface will also allow us to replicate the same API in the server, where rete expects certain functions to exist but doesn't care what is behind these functions so long as they work.
Not all functions will be needed on the server, and functions which are not will be labeled as such.
*/
-export interface ReteContext extends EngineContext {
- onInspector: (node, callback) => void
- onPlaytest: (callback) => void
- sendToPlaytest: (data) => void
- sendToInspector: (data) => void
- sendToDebug: (data) => void
- onDebug: (node, callback) => void
- clearTextEditor: () => void
- getSpell: Function
- getModule: Function
- getModules: Function
- getCurrentGameState: () => Record
- updateCurrentGameState: (update) => void
- readFromImageCache: (caption, cacheTag, topK) => Promise>
- processCode: (
- code: unknown,
- inputs: ThothWorkerInputs,
- data: Record
- ) => void
-}
-
-const Context = createContext(undefined!)
+const Context = createContext(undefined!)
-export const useRete = () => useContext(Context)
+export const useThothInterface = () => useContext(Context)
-const ReteProvider = ({ children, tab }) => {
+const ThothInterfaceProvider = ({ children, tab }) => {
const { events, publish, subscribe } = usePubSub()
const spellRef = useRef(null)
const [fetchFromImageCache] = useFetchFromImageCacheMutation()
- const [saveSpell] = useSaveSpellMutation()
- const { data: _spell } = useGetSpellQuery(tab.spell, {
- skip: !tab.spell,
+ const [_runSpell] = useRunSpellMutation()
+ const { data: _spell } = useGetSpellQuery(tab.spellId, {
+ skip: !tab.spellId,
})
useEffect(() => {
@@ -59,8 +35,6 @@ const ReteProvider = ({ children, tab }) => {
spellRef.current = _spell
}, [_spell])
- const { models } = useDB() as unknown as ModelsType
-
const {
$PLAYTEST_INPUT,
$PLAYTEST_PRINT,
@@ -68,10 +42,12 @@ const ReteProvider = ({ children, tab }) => {
$DEBUG_PRINT,
$DEBUG_INPUT,
$TEXT_EDITOR_CLEAR,
+ $SAVE_SPELL_DIFF,
$NODE_SET,
- ADD_MODULE,
- UPDATE_MODULE,
- $MODULE_UPDATED,
+ ADD_SUBSPELL,
+ UPDATE_SUBSPELL,
+ $SUBSPELL_UPDATED,
+ $PROCESS,
} = events
const onInspector = (node, callback) => {
@@ -81,25 +57,25 @@ const ReteProvider = ({ children, tab }) => {
}
const onAddModule = callback => {
- return subscribe(ADD_MODULE, (event, data) => {
+ return subscribe(ADD_SUBSPELL, (event, data) => {
callback(data)
})
}
const onUpdateModule = callback => {
- return subscribe(UPDATE_MODULE, (event, data) => {
+ return subscribe(UPDATE_SUBSPELL, (event, data) => {
callback(data)
})
}
- const onModuleUpdated = (moduleName, callback) => {
- return subscribe($MODULE_UPDATED(moduleName), (event, data) => {
+ const onSubspellUpdated = (spellId: string, callback: Function) => {
+ return subscribe($SUBSPELL_UPDATED(spellId), (event, data) => {
callback(data)
})
}
const onDeleteModule = callback => {
- return subscribe(UPDATE_MODULE, (event, data) => {
+ return subscribe(UPDATE_SUBSPELL, (event, data) => {
callback(data)
})
}
@@ -124,7 +100,10 @@ const ReteProvider = ({ children, tab }) => {
const onPlaytest = callback => {
return subscribe($PLAYTEST_INPUT(tab.id), (event, data) => {
- callback(data)
+ publish($PROCESS(tab.id))
+ // weird hack. This staggers the process slightly to allow the published event to finish before the callback runs.
+ // No super elegant, but we need a better more centralised way to run the engine than these callbacks.
+ setTimeout(() => callback(data), 0)
})
}
@@ -149,7 +128,7 @@ const ReteProvider = ({ children, tab }) => {
cacheTag,
topK,
})
- if ('error' in result) return {}
+ if ('error' in result) throw new Error('Error reading from image cache')
return result.data
}
@@ -168,6 +147,17 @@ const ReteProvider = ({ children, tab }) => {
)
}
+ const runSpell = async (inputs, spellId) => {
+ console.log('RUN SPELL')
+ const response = await _runSpell({ inputs, spellId })
+
+ if ('error' in response) {
+ throw new Error(`Error running spell ${spellId}`)
+ }
+
+ return response.data.outputs
+ }
+
const clearTextEditor = () => {
publish($TEXT_EDITOR_CLEAR(tab.id))
}
@@ -178,19 +168,23 @@ const ReteProvider = ({ children, tab }) => {
return spellRef.current?.gameState ?? {}
}
- const updateCurrentGameState = update => {
+ const updateCurrentGameState = _update => {
if (!spellRef.current) return
const spell = spellRef.current
- const newSpell = {
- ...spell,
+ // lets delete out all undefined properties coming in
+ Object.keys(_update).forEach(
+ key => _update[key] === undefined && delete _update[key]
+ )
+
+ const update = {
gameState: {
...spell.gameState,
- ...update,
+ ..._update,
},
}
- saveSpell(newSpell as Spell)
+ publish($SAVE_SPELL_DIFF(tab.id), update)
}
const publicInterface = {
@@ -198,7 +192,7 @@ const ReteProvider = ({ children, tab }) => {
onAddModule,
onUpdateModule,
onDeleteModule,
- onModuleUpdated,
+ onSubspellUpdated,
sendToInspector,
sendToDebug,
onDebug,
@@ -212,13 +206,10 @@ const ReteProvider = ({ children, tab }) => {
getCurrentGameState,
updateCurrentGameState,
processCode,
- ...models.modules,
-
- // going to need to manuall create theses
- ...models.spells,
+ runSpell,
}
return {children}
}
-export default ReteProvider
+export default ThothInterfaceProvider
diff --git a/client/src/features/Thoth/contexts/WorkspaceProvider.jsx b/client/src/workspaces/contexts/WorkspaceProvider.jsx
similarity index 77%
rename from client/src/features/Thoth/contexts/WorkspaceProvider.jsx
rename to client/src/workspaces/contexts/WorkspaceProvider.jsx
index c51c1f131..a5c551822 100644
--- a/client/src/features/Thoth/contexts/WorkspaceProvider.jsx
+++ b/client/src/workspaces/contexts/WorkspaceProvider.jsx
@@ -1,8 +1,14 @@
import EditorProvider from './EditorProvider'
import LayoutProvider from './LayoutProvider'
-import ReteProvider from './ReteProvider'
+import ThothInterfaceProvider from './ThothInterfaceProvider'
+import InspectorProvider from './InspectorProvider'
-const providers = [ReteProvider, EditorProvider, LayoutProvider]
+const providers = [
+ ThothInterfaceProvider,
+ EditorProvider,
+ LayoutProvider,
+ InspectorProvider,
+]
function ComposeProviders({ providers, children, ...parentProps }) {
const _providers = [...providers].reverse()
diff --git a/client/src/features/Thoth/workspaces/index.tsx b/client/src/workspaces/index.tsx
similarity index 60%
rename from client/src/features/Thoth/workspaces/index.tsx
rename to client/src/workspaces/index.tsx
index 5f2309dd7..6920fd40d 100644
--- a/client/src/features/Thoth/workspaces/index.tsx
+++ b/client/src/workspaces/index.tsx
@@ -1,6 +1,9 @@
-import WorkspaceProvider from '../contexts/WorkspaceProvider'
-import Composer from './composer'
+import WorkspaceProvider from './contexts/WorkspaceProvider'
+import Composer from './spells'
+// TODO create a proper workspace component that can take in everything we need it to
+// for a standalone workspace environment. Factor, events, etc.
+// Workspace should register events with the events provider, etc.
const workspaceMap = {
spell: Composer,
module: Composer,
@@ -10,6 +13,8 @@ const Workspaces = ({ tabs, pubSub, activeTab }) => {
return (
<>
{tabs.map(tab => {
+ //TODO use a tab.fileType instead of tab.type
+ // this will allow us to begin to expand towards a file base approach to the application.
const Workspace = workspaceMap[tab.type]
const props = {
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/CodeControl.jsx b/client/src/workspaces/spells/DataControls/CodeControl.jsx
similarity index 81%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/CodeControl.jsx
rename to client/src/workspaces/spells/DataControls/CodeControl.jsx
index 438f7c517..1618d929e 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/CodeControl.jsx
+++ b/client/src/workspaces/spells/DataControls/CodeControl.jsx
@@ -1,4 +1,4 @@
-import { useLayout } from '@thoth/contexts/LayoutProvider'
+import { useLayout } from '../../contexts/LayoutProvider'
const CodeControl = () => {
const { createOrFocus, windowTypes } = useLayout()
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/DataControls.jsx b/client/src/workspaces/spells/DataControls/DataControls.jsx
similarity index 90%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/DataControls.jsx
rename to client/src/workspaces/spells/DataControls/DataControls.jsx
index cac6b7c7e..f30d2e6f7 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/DataControls.jsx
+++ b/client/src/workspaces/spells/DataControls/DataControls.jsx
@@ -1,4 +1,4 @@
-import { SimpleAccordion } from '../../../../common/Accordion'
+import { SimpleAccordion } from '../../../components/Accordion'
import CodeControl from './CodeControl'
import css from './datacontrols.module.css'
import EnkiSelect from './EnkiSelect'
@@ -6,11 +6,12 @@ import Info from './Info'
import Input from './Input'
import InputGenerator from './InputGenerator'
import LongText from './LongTextControl'
-import ModuleSelect from './ModuleSelect'
import OutputGenerator from './OutputGenerator'
+import DropdownSelect from './DropdownSelect'
import SocketGenerator from './SocketGenerator'
import PlaytestControl from './PlaytestControl'
import SwitchControl from './SwitchControl'
+import SpellSelect from './SpellSelect'
const StubComponent = props =>
+ )
+}
+
+export default DropdownSelect
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/EnkiSelect.jsx b/client/src/workspaces/spells/DataControls/EnkiSelect.jsx
similarity index 95%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/EnkiSelect.jsx
rename to client/src/workspaces/spells/DataControls/EnkiSelect.jsx
index 8c9eb1dcd..77ce32645 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/EnkiSelect.jsx
+++ b/client/src/workspaces/spells/DataControls/EnkiSelect.jsx
@@ -1,8 +1,8 @@
import { useState, useEffect } from 'react'
-import { getEnkiPrompt, getEnkis } from '../../../../../services/game-api/enki'
-import Chip from '../../../../common/Chip/Chip'
-import Select from '../../../../common/Select/Select'
+import { getEnkiPrompt, getEnkis } from '../../../services/game-api/enki'
+import Chip from '../../../components/Chip/Chip'
+import Select from '../../../components/Select/Select'
const EnkiDetails = ({ initialTask, addThroughput, update }) => {
const [activeEnki, selectEnki] = useState(initialTask)
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/Info.jsx b/client/src/workspaces/spells/DataControls/Info.jsx
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/Info.jsx
rename to client/src/workspaces/spells/DataControls/Info.jsx
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/Input.jsx b/client/src/workspaces/spells/DataControls/Input.jsx
similarity index 90%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/Input.jsx
rename to client/src/workspaces/spells/DataControls/Input.jsx
index 150c01370..ad7e6332e 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/Input.jsx
+++ b/client/src/workspaces/spells/DataControls/Input.jsx
@@ -1,6 +1,6 @@
import { useState } from 'react'
-import InputComponent from '../../../../common/Input/Input'
+import InputComponent from '../../../components/Input/Input'
const Input = ({ control, updateData, initialValue }) => {
const [value, setValue] = useState(initialValue)
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/InputGenerator.jsx b/client/src/workspaces/spells/DataControls/InputGenerator.jsx
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/InputGenerator.jsx
rename to client/src/workspaces/spells/DataControls/InputGenerator.jsx
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/LongTextControl.jsx b/client/src/workspaces/spells/DataControls/LongTextControl.jsx
similarity index 81%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/LongTextControl.jsx
rename to client/src/workspaces/spells/DataControls/LongTextControl.jsx
index b3a6cc396..66e445543 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/LongTextControl.jsx
+++ b/client/src/workspaces/spells/DataControls/LongTextControl.jsx
@@ -1,4 +1,4 @@
-import { useLayout } from '@thoth/contexts/LayoutProvider'
+import { useLayout } from '../../contexts/LayoutProvider'
const LongText = () => {
const { createOrFocus, windowTypes } = useLayout()
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/OutputGenerator.jsx b/client/src/workspaces/spells/DataControls/OutputGenerator.jsx
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/OutputGenerator.jsx
rename to client/src/workspaces/spells/DataControls/OutputGenerator.jsx
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/PlaytestControl.tsx b/client/src/workspaces/spells/DataControls/PlaytestControl.tsx
similarity index 64%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/PlaytestControl.tsx
rename to client/src/workspaces/spells/DataControls/PlaytestControl.tsx
index 85e47f7bb..3fb5db4b1 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/PlaytestControl.tsx
+++ b/client/src/workspaces/spells/DataControls/PlaytestControl.tsx
@@ -1,13 +1,6 @@
import { useState } from 'react'
-import Switch from '../../../../common/Switch/Switch'
-
-type SocketType = {
- name: string
- socketKey: string
- socketType: string
- taskType: string
-}
+import Switch from '../../../components/Switch/Switch'
const SwitchControl = ({ control, updateData, initialValue }) => {
const { dataKey, data } = control
@@ -22,21 +15,9 @@ const SwitchControl = ({ control, updateData, initialValue }) => {
const playtest = e.target.checked
setChecked(playtest)
- const outputs = [] as SocketType[]
-
- if (playtest) {
- outputs.push({
- name: 'Playtest trigger',
- socketKey: 'trigger',
- socketType: 'triggerSocket',
- taskType: 'option',
- })
- }
-
updateData({
[dataKey]: {
receivePlaytest: playtest,
- outputs,
},
})
}
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/SocketGenerator.jsx b/client/src/workspaces/spells/DataControls/SocketGenerator.jsx
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/SocketGenerator.jsx
rename to client/src/workspaces/spells/DataControls/SocketGenerator.jsx
diff --git a/client/src/workspaces/spells/DataControls/SpellSelect.tsx b/client/src/workspaces/spells/DataControls/SpellSelect.tsx
new file mode 100644
index 000000000..4c34c412e
--- /dev/null
+++ b/client/src/workspaces/spells/DataControls/SpellSelect.tsx
@@ -0,0 +1,116 @@
+import { useSnackbar } from 'notistack'
+
+import { useAppDispatch } from '@/state/hooks'
+import { openTab } from '@/state/tabs'
+// import { useModule } from '../../../contexts/ModuleProvider'
+import Select from '@components/Select/Select'
+import {
+ useLazyGetSpellQuery,
+ useGetSpellsQuery,
+ useNewSpellMutation,
+} from '@/state/api/spells'
+import defaultChain from '@/data/chains/default'
+import { ChainData } from '@latitudegames/thoth-core/types'
+import { useEffect } from 'react'
+
+const SpellSelect = ({ control, updateData, initialValue, tab }) => {
+ const dispatch = useAppDispatch()
+
+ const [getSpell, { data: spell }] = useLazyGetSpellQuery()
+ const { data: spells } = useGetSpellsQuery()
+ const [newSpell] = useNewSpellMutation()
+
+ const { enqueueSnackbar } = useSnackbar()
+ const { dataKey } = control
+
+ // Handle what happens when a new spell is selected and fetched
+ useEffect(() => {
+ if (!spell) return
+
+ // here we send the whole spell so the control can modify the nodes sockets.
+ // However, we only store the name of the spell after processing the full spell.
+ update(spell)
+ _openTab(spell)
+ }, [spell])
+
+ const optionArray = () => {
+ if (!spells) return
+ return (
+ spells
+ // Make sure we don't allow someone to select the current spell as a submodule. No infinite loops.
+ .filter(spell => spell.name !== tab.id)
+ .map((spell, index) => ({
+ value: spell.name,
+ label: spell.name,
+ }))
+ )
+ }
+
+ const _openTab = async spell => {
+ const tab = {
+ name: spell.name,
+ spellId: spell.name,
+ type: 'spell',
+ openNew: false,
+ switchActive: false,
+ }
+
+ dispatch(openTab(tab))
+ }
+
+ // TODO fix on change to handle loading a single spell
+ const onChange = async ({ value }) => {
+ getSpell(value)
+ }
+
+ const update = update => {
+ updateData({ [dataKey]: update })
+ }
+
+ const onCreateOption = async value => {
+ try {
+ await newSpell({
+ name: value,
+ chain: defaultChain as unknown as ChainData,
+ })
+
+ getSpell(value)
+ } catch (err) {
+ // eslint-disable-next-line no-console
+ console.warn('Error creating module', err)
+ enqueueSnackbar('Error creating module', {
+ variant: 'error',
+ })
+ }
+ }
+
+ const noOptionsMessage = inputValue => {
+ return Start typing to find or creat a spell
+ }
+
+ const isValidNewOption = (inputValue, selectValue, selectOptions) => {
+ return (
+ inputValue.length !== 0
+ // && selectOptions.some((option) => option.value !== inputValue)
+ )
+ }
+
+ return (
+
+
+
+ )
+}
+
+export default SpellSelect
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/SwitchControl.tsx b/client/src/workspaces/spells/DataControls/SwitchControl.tsx
similarity index 90%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/SwitchControl.tsx
rename to client/src/workspaces/spells/DataControls/SwitchControl.tsx
index 4a972008a..d20b16aa8 100644
--- a/client/src/features/Thoth/windows/InspectorWindow/DataControls/SwitchControl.tsx
+++ b/client/src/workspaces/spells/DataControls/SwitchControl.tsx
@@ -1,6 +1,6 @@
import { useState } from 'react'
-import Switch from '../../../../common/Switch/Switch'
+import Switch from '../../../components/Switch/Switch'
const SwitchControl = ({ control, updateData, initialValue }) => {
const { dataKey, data } = control
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/datacontrols.module.css b/client/src/workspaces/spells/DataControls/datacontrols.module.css
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/datacontrols.module.css
rename to client/src/workspaces/spells/DataControls/datacontrols.module.css
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/datacontrols.module.css.d.ts b/client/src/workspaces/spells/DataControls/datacontrols.module.css.d.ts
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/datacontrols.module.css.d.ts
rename to client/src/workspaces/spells/DataControls/datacontrols.module.css.d.ts
diff --git a/client/src/features/Thoth/windows/InspectorWindow/DataControls/index.jsx b/client/src/workspaces/spells/DataControls/index.jsx
similarity index 100%
rename from client/src/features/Thoth/windows/InspectorWindow/DataControls/index.jsx
rename to client/src/workspaces/spells/DataControls/index.jsx
diff --git a/client/src/features/Thoth/components/WindowMessage.jsx b/client/src/workspaces/spells/components/WindowMessage.jsx
similarity index 65%
rename from client/src/features/Thoth/components/WindowMessage.jsx
rename to client/src/workspaces/spells/components/WindowMessage.jsx
index 1a9d7bd95..28491de8d 100644
--- a/client/src/features/Thoth/components/WindowMessage.jsx
+++ b/client/src/workspaces/spells/components/WindowMessage.jsx
@@ -1,4 +1,4 @@
-import css from '../windows/InspectorWindow/DataControls/datacontrols.module.css'
+import css from '../DataControls/datacontrols.module.css'
const WindowMessage = ({ content = 'No component selected' }) => {
return
{content}
diff --git a/client/src/workspaces/spells/index.tsx b/client/src/workspaces/spells/index.tsx
new file mode 100644
index 000000000..0651310b7
--- /dev/null
+++ b/client/src/workspaces/spells/index.tsx
@@ -0,0 +1,126 @@
+import { useEffect, useRef, useState } from 'react'
+
+import { useEditor } from '@/workspaces/contexts/EditorProvider'
+import { Layout } from '@/workspaces/contexts/LayoutProvider'
+import { useLazyGetSpellQuery } from '@/state/api/spells'
+import { debounce } from '@/utils/debounce'
+import EditorWindow from './windows/EditorWindow/'
+import EventHandler from '@/screens/Thoth/components/EventHandler'
+import Inspector from './windows/InspectorWindow'
+import Playtest from './windows/PlaytestWindow'
+import StateManager from '@/workspaces/spells/windows/StateManagerWindow'
+import TextEditor from './windows/TextEditorWindow'
+import DebugConsole from './windows/DebugConsole'
+import { Spell } from '@latitudegames/thoth-core/types'
+import { usePubSub } from '@/contexts/PubSubProvider'
+import { useSharedb } from '@/contexts/SharedbProvider'
+import { sharedb } from '@/config'
+
+const Workspace = ({ tab, tabs, pubSub }) => {
+ const spellRef = useRef()
+ const { events, publish } = usePubSub()
+ const { getSpellDoc } = useSharedb()
+ const [loadSpell, { data: spellData }] = useLazyGetSpellQuery()
+ const { serialize, editor } = useEditor()
+
+ const [docLoaded, setDocLoaded] = useState(false)
+
+ // Set up autosave for the workspaces
+ useEffect(() => {
+ if (!editor?.on) return
+
+ const unsubscribe = editor.on(
+ 'save nodecreated noderemoved connectioncreated connectionremoved nodetranslated commentremoved commentcreated addcomment removecomment editcomment connectionpath',
+ debounce(async data => {
+ if (tab.type === 'spell' && spellRef.current) {
+ publish(events.$SAVE_SPELL_DIFF(tab.id), { chain: serialize() })
+ }
+ }, 1000)
+ )
+
+ return unsubscribe as () => void
+ }, [editor])
+
+ useEffect(() => {
+ if (!editor?.on) return
+
+ const unsubscribe = editor.on('nodecreated noderemoved', () => {
+ if (!spellRef.current) return
+ // TODO we can probably send this update to a spell namespace for this spell.
+ // then spells can subscribe to only their dependency updates.
+ const event = events.$SUBSPELL_UPDATED(spellRef.current.name)
+ const spell = {
+ ...spellRef.current,
+ chain: editor.toJSON(),
+ }
+ publish(event, spell)
+ }) as Function
+
+ return unsubscribe as () => void
+ }, [editor])
+
+ useEffect(() => {
+ if (!spellData) return
+ spellRef.current = spellData
+ }, [spellData])
+
+ useEffect(() => {
+ if (!spellData || !sharedb || docLoaded || !editor) return
+
+ const doc = getSpellDoc(spellData as Spell)
+
+ if (!doc) return
+
+ doc.on('op batch', (op, origin) => {
+ if (origin) return
+ console.log('UPDATED CHAIN', spellData.chain)
+ editor.loadGraph(doc.data.chain, true)
+ })
+
+ setDocLoaded(true)
+ }, [spellData, editor])
+
+ useEffect(() => {
+ if (!tab || !tab.spellId) return
+ loadSpell(tab.spellId)
+ }, [tab])
+
+ const factory = tab => {
+ return node => {
+ const props = {
+ tab,
+ node,
+ }
+ const component = node.getComponent()
+ switch (component) {
+ case 'stateManager':
+ return
+ case 'playtest':
+ return
+ case 'inspector':
+ return
+ case 'textEditor':
+ return
+ case 'editorWindow':
+ return
+ case 'debugConsole':
+ return
+ default:
+ return
+ }
+ }
+ }
+
+ return (
+ <>
+
+
+ >
+ )
+}
+
+const Wrapped = props => {
+ return
+}
+
+export default Wrapped
diff --git a/client/src/features/Thoth/windows/DebugConsole/index.tsx b/client/src/workspaces/spells/windows/DebugConsole/index.tsx
similarity index 89%
rename from client/src/features/Thoth/windows/DebugConsole/index.tsx
rename to client/src/workspaces/spells/windows/DebugConsole/index.tsx
index 39a8af5c9..b441dd413 100644
--- a/client/src/features/Thoth/windows/DebugConsole/index.tsx
+++ b/client/src/workspaces/spells/windows/DebugConsole/index.tsx
@@ -3,7 +3,8 @@ import { renderToString } from 'react-dom/server'
import Terminal from 'react-console-emulator'
import { useAuth } from '@/contexts/AuthProvider'
import { usePubSub } from '@/contexts/PubSubProvider'
-import Window from '@/features/common/Window/Window'
+import Window from '@components/Window/Window'
+import { useEditor } from '@/workspaces/contexts/EditorProvider'
export type DebugMessage = {
message: string
@@ -15,6 +16,7 @@ interface Terminal {
const DebugConsole = ({ tab }) => {
const [scrollToBottom, setScrollToBottom] = useState(false)
+ const { centerNode } = useEditor()
const { user } = useAuth()
const {
// publish,
@@ -85,7 +87,7 @@ const DebugConsole = ({ tab }) => {
useEffect(() => {
const unsubscribe = subscribe($DEBUG_PRINT(tab.id), printToDebugger)
- return unsubscribe
+ return unsubscribe as () => void
}, [subscribe, printToDebugger, $DEBUG_PRINT])
/**
@@ -99,6 +101,14 @@ const DebugConsole = ({ tab }) => {
return `${Array.from(arguments).join(' ')}`
},
},
+ node: {
+ description: 'Center a node on the editor',
+ usage: 'node ',
+ fn: function (nodeId) {
+ centerNode(nodeId)
+ return ''
+ },
+ },
}
// https://github.com/linuswillner/react-console-emulator/tree/e2b602f631e8b7c57c4a7407491cbfb84f357519
diff --git a/client/src/features/Thoth/windows/EditorWindow/Deployment.tsx b/client/src/workspaces/spells/windows/EditorWindow/Deployment.tsx
similarity index 92%
rename from client/src/features/Thoth/windows/EditorWindow/Deployment.tsx
rename to client/src/workspaces/spells/windows/EditorWindow/Deployment.tsx
index 5d4bfe6ce..eda8a15f3 100644
--- a/client/src/features/Thoth/windows/EditorWindow/Deployment.tsx
+++ b/client/src/workspaces/spells/windows/EditorWindow/Deployment.tsx
@@ -1,24 +1,23 @@
import { useEffect, useState } from 'react'
import { Scrollbars } from 'react-custom-scrollbars-2'
-import { useSelector } from 'react-redux'
import { useSnackbar } from 'notistack'
import css from './editorwindow.module.css'
-import WindowToolbar from '@common/Window/WindowToolbar'
-import { SimpleAccordion } from '@common/Accordion'
-import Input from '@common/Input/Input'
-import Panel from '@common/Panel/Panel'
+import WindowToolbar from '@components/Window/WindowToolbar'
+import { SimpleAccordion } from '@components/Accordion'
+import Input from '@components/Input/Input'
+import Panel from '@components/Panel/Panel'
import { useModal } from '@/contexts/ModalProvider'
import {
useGetDeploymentsQuery,
- selectSpellById,
useDeploySpellMutation,
useLazyGetDeploymentQuery,
useSaveSpellMutation,
+ useGetSpellQuery,
} from '@/state/api/spells'
-import { useEditor } from '@thoth/contexts/EditorProvider'
+import { useEditor } from '@/workspaces/contexts/EditorProvider'
import { latitudeApiRootUrl } from '@/config'
const DeploymentView = ({ open, setOpen, spellId, close }) => {
@@ -30,7 +29,9 @@ const DeploymentView = ({ open, setOpen, spellId, close }) => {
const [deploySpell] = useDeploySpellMutation()
const [saveSpell] = useSaveSpellMutation()
const [getDeplopyment, { data: deploymentData }] = useLazyGetDeploymentQuery()
- const spell = useSelector(state => selectSpellById(state, spellId))
+ const { data: spell } = useGetSpellQuery(spellId, {
+ skip: !spellId,
+ })
const name = spell?.name as string
const { data: deployments, isLoading } = useGetDeploymentsQuery(name, {
skip: !spell?.name,
@@ -43,7 +44,8 @@ const DeploymentView = ({ open, setOpen, spellId, close }) => {
}
const buildUrl = version => {
- return encodeURI(`${latitudeApiRootUrl}/games/spells/${spellId}/${version}`)
+ // return encodeURI(`${latitudeApiRootUrl}/games/spells/${spellId}/${version}`)
+ return encodeURI(`${latitudeApiRootUrl}/games/chains/${spellId}/${version}`)
}
const loadVersion = async version => {
diff --git a/client/src/features/Thoth/windows/EditorWindow/editorwindow.module.css b/client/src/workspaces/spells/windows/EditorWindow/editorwindow.module.css
similarity index 100%
rename from client/src/features/Thoth/windows/EditorWindow/editorwindow.module.css
rename to client/src/workspaces/spells/windows/EditorWindow/editorwindow.module.css
diff --git a/client/src/features/Thoth/windows/EditorWindow/editorwindow.module.css.d.ts b/client/src/workspaces/spells/windows/EditorWindow/editorwindow.module.css.d.ts
similarity index 100%
rename from client/src/features/Thoth/windows/EditorWindow/editorwindow.module.css.d.ts
rename to client/src/workspaces/spells/windows/EditorWindow/editorwindow.module.css.d.ts
diff --git a/client/src/features/Thoth/windows/EditorWindow/index.jsx b/client/src/workspaces/spells/windows/EditorWindow/index.jsx
similarity index 92%
rename from client/src/features/Thoth/windows/EditorWindow/index.jsx
rename to client/src/workspaces/spells/windows/EditorWindow/index.jsx
index ac4702725..4b45406d7 100644
--- a/client/src/features/Thoth/windows/EditorWindow/index.jsx
+++ b/client/src/workspaces/spells/windows/EditorWindow/index.jsx
@@ -1,10 +1,10 @@
import { useState, useEffect } from 'react'
import { createNode } from 'rete-context-menu-plugin/src/utils'
-import WindowToolbar from '@/features/common/Window/WindowToolbar'
-import { Editor, useEditor } from '../../contexts/EditorProvider'
+import WindowToolbar from '@/components/Window/WindowToolbar'
+import { Editor, useEditor } from '../../../contexts/EditorProvider'
import Deployment from './Deployment'
-import Select from '../../../common/Select/Select'
+import Select from '@components/Select/Select'
import css from './editorwindow.module.css'
const EditorWindow = ({ tab }) => {
@@ -102,7 +102,7 @@ const EditorWindow = ({ tab }) => {
open={deployOpen}
setOpen={setDeployOpen}
close={closeDeploy}
- spellId={tab.spell}
+ spellId={tab.spellId}
/>
)
diff --git a/client/src/workspaces/spells/windows/InspectorWindow.tsx b/client/src/workspaces/spells/windows/InspectorWindow.tsx
new file mode 100644
index 000000000..374112c2e
--- /dev/null
+++ b/client/src/workspaces/spells/windows/InspectorWindow.tsx
@@ -0,0 +1,162 @@
+import { useEffect, useState } from 'react'
+
+import { useModal } from '@/contexts/ModalProvider'
+import Icon, { componentCategories } from '../../../components/Icon/Icon'
+import Window from '../../../components/Window/Window'
+import DataControls from '../DataControls'
+import WindowMessage from '../components/WindowMessage'
+import { useInspector } from '@/workspaces/contexts/InspectorProvider'
+import { InspectorData } from '@latitudegames/thoth-core/types'
+import SwitchComponent from '@/components/Switch/Switch'
+import css from '../../../components/Icon/icon.module.css'
+
+const Inspector = props => {
+ const { inspectorData, saveInspector } = useInspector()
+ const [width, setWidth] = useState()
+ const { openModal } = useModal()
+
+ useEffect(() => {
+ if (props?.node?._rect?.width) {
+ setWidth(props.node._rect.width)
+ }
+
+ // this is to dynamically set the appriopriate height so that Monaco editor doesnt break flexbox when resizing
+ props.node.setEventListener('resize', data => {
+ setTimeout(() => {
+ setWidth(data.rect.width)
+ }, 0)
+ })
+
+ return () => {
+ props.node.removeEventListener('resize')
+ }
+ }, [props])
+
+ const updateControl = control => {
+ if (!inspectorData) return
+ const newData = {
+ ...inspectorData,
+ dataControls: {
+ ...inspectorData.dataControls,
+ ...control,
+ },
+ }
+
+ saveInspector(newData)
+ }
+
+ const updateData = update => {
+ if (!inspectorData) return
+ const newData = {
+ ...inspectorData,
+ data: {
+ ...inspectorData.data,
+ ...update,
+ },
+ }
+
+ saveInspector(newData)
+ }
+
+ const onLock = () => {
+ if (inspectorData?.data.nodeLocked && inspectorData?.category === 'I/O') {
+ openModal({
+ modal: 'infoModal',
+ content: 'Editing this node could break connection with your app.',
+ title: 'Warning',
+ })
+ }
+
+ const data = {
+ nodeLocked: !inspectorData?.data.nodeLocked,
+ }
+
+ updateData(data)
+ }
+
+ const toolbar = (
+ <>
+
+
+ {inspectorData?.name}
+
+
+ {/* I would like to make an "icon button" for this instead of "Help." Leaving it as help just for the function for now.*/}
+ {inspectorData?.info && (
+
+ )}
+ >
+ )
+
+ const DeprecationMessage = (inspectorData: InspectorData) => {
+ if (!inspectorData.deprecated) return <>>
+ return (
+
+
WARNING
+
{inspectorData.deprecationMessage}
+
+ )
+ }
+
+ const LockedOverlay = ({ isLocked }) => {
+ return (
+ <>
+ {isLocked && (
+ <>
+
+ >
+ )}
+ >
+ )
+ }
+
+ if (!inspectorData) return
+
+ return (
+
+ {DeprecationMessage(inspectorData)}
+
+
+
+ )
+}
+
+export default Inspector
diff --git a/client/src/features/Thoth/windows/PlaytestWindow.jsx b/client/src/workspaces/spells/windows/PlaytestWindow.jsx
similarity index 95%
rename from client/src/features/Thoth/windows/PlaytestWindow.jsx
rename to client/src/workspaces/spells/windows/PlaytestWindow.jsx
index 18d0eef61..a0ed73ae1 100644
--- a/client/src/features/Thoth/windows/PlaytestWindow.jsx
+++ b/client/src/workspaces/spells/windows/PlaytestWindow.jsx
@@ -3,8 +3,8 @@ import { Scrollbars } from 'react-custom-scrollbars-2'
import { useHotkeys } from 'react-hotkeys-hook'
import { usePubSub } from '../../../contexts/PubSubProvider'
-import Window from '../../common/Window/Window'
-import css from '../thoth.module.css'
+import Window from '../../../components/Window/Window'
+import css from '../../../screens/Thoth/thoth.module.css'
const Input = props => {
const ref = useRef()
diff --git a/client/src/features/Thoth/windows/StateManagerWindow.tsx b/client/src/workspaces/spells/windows/StateManagerWindow.tsx
similarity index 60%
rename from client/src/features/Thoth/windows/StateManagerWindow.tsx
rename to client/src/workspaces/spells/windows/StateManagerWindow.tsx
index 0eb40515d..a3b875240 100644
--- a/client/src/features/Thoth/windows/StateManagerWindow.tsx
+++ b/client/src/workspaces/spells/windows/StateManagerWindow.tsx
@@ -1,30 +1,23 @@
import Editor from '@monaco-editor/react'
import jsonFormat from 'json-format'
-// import debounce from 'lodash.debounce'
-import { useSnackbar } from 'notistack'
import { useState, useEffect } from 'react'
-import {
- useGetSpellQuery,
- useSaveSpellMutation,
-} from '../../../state/api/spells'
-import Window from '../../common/Window/Window'
+import { useGetSpellQuery } from '../../../state/api/spells'
+import Window from '../../../components/Window/Window'
-import '../thoth.module.css'
+import '../../../screens/Thoth/thoth.module.css'
import WindowMessage from '../components/WindowMessage'
+import { usePubSub } from '@/contexts/PubSubProvider'
const StateManager = ({ tab, ...props }) => {
- // const dispatch = useDispatch()
- const [saveSpell] = useSaveSpellMutation()
- const { data: spell } = useGetSpellQuery(tab.spell, {
- skip: !tab.spell,
+ const { publish, events } = usePubSub()
+ const { data: spell } = useGetSpellQuery(tab.spellId, {
+ skip: !tab.spellId,
})
- const { enqueueSnackbar } = useSnackbar()
const [typing, setTyping] = useState(false)
const [code, setCode] = useState('{}')
- const [height, setHeight] = useState()
- const bottomHeight = 50
+ const SAVE_SPELL_DIFF = events.$SAVE_SPELL_DIFF(tab.id)
const editorOptions = {
lineNumbers: false,
@@ -48,15 +41,15 @@ const StateManager = ({ tab, ...props }) => {
})
}
- useEffect(() => {
- if (props?.node?.rect?.height)
- setHeight((props.node.rect.height - bottomHeight) as number)
+ // useEffect(() => {
+ // if (props?.node?.rect?.height)
+ // setHeight((props.node.rect.height - bottomHeight) as number)
- // this is to dynamically set the appriopriate height so that Monaco editor doesnt break flexbox when resizing
- props.node.setEventListener('resize', data => {
- setTimeout(() => setHeight(data.rect.height - bottomHeight), 0)
- })
- }, [props.node])
+ // // this is to dynamically set the appriopriate height so that Monaco editor doesnt break flexbox when resizing
+ // props.node.setEventListener('resize', data => {
+ // setTimeout(() => setHeight(data.rect.height - bottomHeight), 0)
+ // })
+ // }, [props.node])
useEffect(() => {
if (!typing) return
@@ -93,20 +86,8 @@ const StateManager = ({ tab, ...props }) => {
...spell,
gameState: parsedState,
}
- const res = await saveSpell(spellUpdate)
- if ('error' in res) {
- enqueueSnackbar('Error saving state', {
- preventDuplicate: true,
- variant: 'error',
- })
- throw new Error('Error saving spell')
- }
- res.data.gameState && setCode(JSON.stringify(res.data.gameState?.state))
- enqueueSnackbar('State saved', {
- preventDuplicate: true,
- variant: 'success',
- })
+ publish(SAVE_SPELL_DIFF, spellUpdate)
} catch (err) {
console.log(err)
}
@@ -130,7 +111,6 @@ const StateManager = ({ tab, ...props }) => {
{
- const [code, setCode] = useState('')
- const [data, setData] = useState('')
- const [height, setHeight] = useState()
- const [editorOptions, setEditorOptions] = useState()
- const [typing, setTyping] = useState(null)
- const [language, setLanguage] = useState(null)
- const { textEditorData, saveTextEditor } = useLayout()
- const { enqueueSnackbar } = useSnackbar()
-
- const bottomHeight = 50
+ const [code, setCode] = useState(undefined)
+ const [data, setData] = useState(null)
+ // const [height, setHeight] = useState()
+ const [editorOptions, setEditorOptions] = useState>()
+ const [typing, setTyping] = useState(false)
+ const [language, setLanguage] = useState(undefined)
+
+ const { textEditorData, saveTextEditor } = useInspector()
+
+ // const bottomHeight = 50
const handleEditorWillMount = monaco => {
monaco.editor.defineTheme('sds-dark', {
base: 'vs-dark',
@@ -50,7 +52,7 @@ const TextEditor = props => {
useEffect(() => {
if (!textEditorData) return
setData(textEditorData)
- setCode(textEditorData.data)
+ setCode(textEditorData.data as string)
setTyping(false)
if (textEditorData?.options?.language) {
@@ -58,16 +60,6 @@ const TextEditor = props => {
}
}, [textEditorData])
- useEffect(() => {
- if (props?.node?.rect?.height)
- setHeight(props.node.rect.height - bottomHeight)
-
- // this is to dynamically set the appriopriate height so that Monaco editor doesnt break flexbox when resizing
- props.node.setEventListener('resize', data => {
- setTimeout(() => setHeight(data.rect.height - bottomHeight), 0)
- })
- }, [props.node])
-
// debounce for delayed save
useEffect(() => {
if (!typing) return
@@ -87,17 +79,14 @@ const TextEditor = props => {
}
setData(update)
saveTextEditor(update)
- enqueueSnackbar('Editor saved', {
- preventDuplicate: true,
- variant: 'success',
- })
}
const onSave = () => {
save(code)
}
- const updateCode = code => {
+ const updateCode = (rawCode: string) => {
+ const code = rawCode.replace('\r\n', '\n')
setCode(code)
const update = {
...data,
@@ -116,14 +105,14 @@ const TextEditor = props => {
>
)
- if (!textEditorData.control)
+ if (!textEditorData?.control)
return
return (
{
return {
- entry: ['regenerator-runtime/runtime.js', './src/index.js'],
+ entry: ['regenerator-runtime/runtime.js', './src/index.tsx'],
output: {
path: path.resolve(__dirname, '../build'),
filename: '[name].[contenthash].bundle.js',
@@ -34,8 +34,8 @@ module.exports = () => {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
- '@thoth': path.resolve(__dirname, 'src/features/Thoth'),
- '@common': path.resolve(__dirname, 'src/features/common'),
+ '@thoth': path.resolve(__dirname, 'src/screens/Thoth'),
+ '@components': path.resolve(__dirname, 'src/components'),
},
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json', '.css'],
fallback: {
diff --git a/core/@types/rete-comment-plugin.d.ts b/core/@types/rete-comment-plugin.d.ts
new file mode 100644
index 000000000..042ac41a9
--- /dev/null
+++ b/core/@types/rete-comment-plugin.d.ts
@@ -0,0 +1 @@
+declare module 'rete-comment-plugin'
diff --git a/core/index.ts b/core/index.ts
index e9e386913..904a13bd8 100644
--- a/core/index.ts
+++ b/core/index.ts
@@ -3,10 +3,10 @@ import { initEditor } from './src/editor'
import { initSharedEngine } from './src/engine'
import { Task } from './src/plugins/taskPlugin/task'
import { ThothComponent } from './src/thoth-component'
+export { zoomAt } from './src/plugins/areaPlugin/zoom-at'
export { getComponents } from './src/components/components'
export { initEditor } from './src/editor'
-export type { EngineContext } from './src/engine'
export { Task } from './src/plugins/taskPlugin/task'
export default {
diff --git a/core/server.ts b/core/server.ts
index 0f9108f08..d9327daac 100644
--- a/core/server.ts
+++ b/core/server.ts
@@ -2,10 +2,12 @@ import { getComponents, components } from './src/components/components'
import { initSharedEngine } from './src/engine'
import { Task } from './src/plugins/taskPlugin/task'
import { ThothComponent } from './src/thoth-component'
+import SpellRunner from './src/utils/SpellRunner'
export { getComponents } from './src/components/components'
-export type { EngineContext } from './src/engine'
export { Task } from './src/plugins/taskPlugin/task'
+export { initSharedEngine }
+export { SpellRunner }
export default {
components,
@@ -13,4 +15,5 @@ export default {
initSharedEngine,
Task,
ThothComponent,
+ SpellRunner,
}
diff --git a/core/src/components/ActionType.ts b/core/src/components/ActionType.ts
index 2c42e0591..e4b490ca4 100644
--- a/core/src/components/ActionType.ts
+++ b/core/src/components/ActionType.ts
@@ -1,13 +1,13 @@
import Rete from 'rete'
import {
+ EngineContext,
NodeData,
ThothNode,
ThothWorkerInputs,
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
import { stringSocket, triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
const fewshot = `Given an action classify the type of action it is
diff --git a/core/src/components/Code.ts b/core/src/components/Code.ts
index 59ba6ed59..7b80cb814 100644
--- a/core/src/components/Code.ts
+++ b/core/src/components/Code.ts
@@ -1,6 +1,7 @@
import Rete from 'rete'
import {
+ EngineContext,
NodeData,
ThothNode,
ThothWorkerInputs,
@@ -12,7 +13,6 @@ import { CodeControl } from '../dataControls/CodeControl'
//@ts-ignore
import { InputControl } from '../dataControls/InputControl'
import { SocketGeneratorControl } from '../dataControls/SocketGenerator'
-import { EngineContext } from '../engine'
import { triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
diff --git a/core/src/components/DifficultyDetector.ts b/core/src/components/DifficultyDetector.ts
index 72fcc64cc..575723810 100644
--- a/core/src/components/DifficultyDetector.ts
+++ b/core/src/components/DifficultyDetector.ts
@@ -7,7 +7,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { stringSocket, triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
// For simplicity quests should be ONE thing not complete X and Y
@@ -65,6 +65,7 @@ export class DifficultyDetectorComponent extends ThothComponent<
this.category = 'AI/ML'
this.info = info
this.display = true
+ this.deprecated = true
}
displayControl = {}
diff --git a/core/src/components/EnkiTask.ts b/core/src/components/EnkiTask.ts
index 8584e7c81..7c1d28c9b 100644
--- a/core/src/components/EnkiTask.ts
+++ b/core/src/components/EnkiTask.ts
@@ -5,7 +5,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { EnkiThroughputControl } from '../dataControls/EnkiThroughputControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { ThothComponent } from '../thoth-component'
const info = `Enki is a tool for building both fewshots, as well as entire data sets. The enki component allows you to select an enki which you or someone else has made in the Enki tool and utilize it in your spell chains.
@@ -24,6 +24,7 @@ export class EnkiTask extends ThothComponent<
this.category = 'AI/ML'
this.display = true
this.info = info
+ this.deprecated = true
}
node = {}
diff --git a/core/src/components/EntityDetector.ts b/core/src/components/EntityDetector.ts
index 4223cd8c1..db3ec3db9 100644
--- a/core/src/components/EntityDetector.ts
+++ b/core/src/components/EntityDetector.ts
@@ -7,7 +7,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { TaskOptions } from '../plugins/taskPlugin/task'
import { stringSocket, triggerSocket, arraySocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
diff --git a/core/src/components/Generator.ts b/core/src/components/Generator.ts
index ecc68c157..387ea8fbf 100644
--- a/core/src/components/Generator.ts
+++ b/core/src/components/Generator.ts
@@ -9,8 +9,9 @@ import {
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
import { InputControl } from '../dataControls/InputControl'
+import { DropdownControl } from '../dataControls/DropdownControl'
import { SocketGeneratorControl } from '../dataControls/SocketGenerator'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { triggerSocket, stringSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
const info = `The generator component is our general purpose completion component. You can define any number of inputs, and utilize those inputs in a templating language known as Handlebars. Any value which is wrapped like {{this}} in double braces will be replaced with the corresponding value coming in to the input with the same name. This allows you to write almost any fewshot you might need, and input values from anywhere else in your chain.
@@ -55,10 +56,17 @@ export class Generator extends ThothComponent> {
name: 'Component Name',
})
+ const modelControl = new DropdownControl({
+ dataKey: 'model',
+ name: 'Model',
+ defaultValue: (node.data?.model as string) || 'vanilla-davinci',
+ values: ['vanilla-davinci', 'aid-jumbo', 'vanilla-jumbo'],
+ })
+
const inputGenerator = new SocketGeneratorControl({
connectionType: 'input',
- name: 'Input Sockets',
ignored: ['trigger'],
+ name: 'Input Sockets',
})
const fewshotControl = new FewshotControl({
@@ -69,28 +77,33 @@ export class Generator extends ThothComponent> {
dataKey: 'stop',
name: 'Stop',
icon: 'stop-sign',
+ defaultValue: `\\n`,
})
const temperatureControl = new InputControl({
dataKey: 'temp',
name: 'Temperature',
icon: 'temperature',
+ defaultValue: 0.7,
})
const maxTokenControl = new InputControl({
dataKey: 'maxTokens',
name: 'Max Tokens',
icon: 'moon',
+ defaultValue: 50,
})
const frequencyPenalty = new InputControl({
dataKey: 'frequencyPenalty',
name: 'Frequency Penalty',
+ defaultValue: 0,
})
node.inspector
- .add(nameControl)
+ .add(modelControl)
.add(inputGenerator)
+ .add(nameControl)
.add(fewshotControl)
.add(stopControl)
.add(temperatureControl)
@@ -112,14 +125,22 @@ export class Generator extends ThothComponent> {
return acc
}, {} as Record)
- const fewshot = (node.data.fewshot as string) || ''
+ const model = (node.data.model as string) || 'vanilla-davinci'
+ // const model = node.data.model || 'davinci'
+
+ // Replace carriage returns with newlines because that's what the language models expect
+ const fewshot = (node.data.fewshot as string).replace('\r\n', '\n') || ''
const stopSequence = node.data.stop as string
- const template = Handlebars.compile(fewshot)
+
+ const template = Handlebars.compile(fewshot, { noEscape: true })
const prompt = template(inputs)
const stop = node?.data?.stop
- ? stopSequence.split(',').map(i => i.trim())
- : ['\n']
+ ? stopSequence.split(',').map(i => {
+ if (i.includes('\n')) return i
+ return i.trim()
+ })
+ : ''
const tempData = node.data.temp as string
const temperature = tempData ? parseFloat(tempData) : 0.7
@@ -130,7 +151,10 @@ export class Generator extends ThothComponent> {
? parseFloat(frequencyPenaltyData)
: 0
+ console.log({ model })
+
const body = {
+ model,
prompt,
stop,
maxTokens,
@@ -147,7 +171,9 @@ export class Generator extends ThothComponent> {
composed,
}
} catch (err) {
- throw new Error('Error in Generator component.')
+ // Typescript reporting wrong about number of arguments for error constructor
+ //@ts-ignore:next-line
+ throw new Error('Error in Generator component.', { cause: err })
}
}
}
diff --git a/core/src/components/Huggingface.ts b/core/src/components/Huggingface.ts
index 11c0a561b..93f71ea0e 100644
--- a/core/src/components/Huggingface.ts
+++ b/core/src/components/Huggingface.ts
@@ -10,7 +10,7 @@ import {
import { FewshotControl } from '../dataControls/FewshotControl'
import { InputControl } from '../dataControls/InputControl'
import { SocketGeneratorControl } from '../dataControls/SocketGenerator'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { triggerSocket, stringSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
const info = `The huggingface component is used to access models on huggingface.co. For now it is very simple. You define a number of inputs with the input generator, and you can use those in forming the request to your huggingface inference model. You input the name of the model from hugginface into the model name field, and you run it. It will call the model, and return the result.
@@ -20,12 +20,10 @@ NOTE: Hugginface models are on demand, and sometimes require time to "boot up".
Also note that you will likely need to parse the return from huggingface yourself inside a code component, or similar.`
type WorkerReturn = {
- result?:
- | {
- [key: string]: unknown
- error: unknown
- }
- | undefined
+ result: {
+ [key: string]: unknown
+ error?: unknown
+ }
}
export class HuggingfaceComponent extends ThothComponent<
@@ -42,6 +40,7 @@ export class HuggingfaceComponent extends ThothComponent<
}
this.category = 'AI/ML'
this.info = info
+ this.deprecated = true
}
builder(node: ThothNode) {
diff --git a/core/src/components/Input.ts b/core/src/components/Input.ts
index 5898a8dd6..199f4cae3 100644
--- a/core/src/components/Input.ts
+++ b/core/src/components/Input.ts
@@ -3,6 +3,7 @@ import Rete from 'rete'
import { v4 as uuidv4 } from 'uuid'
import {
+ EditorContext,
NodeData,
ThothNode,
ThothWorkerInputs,
@@ -12,7 +13,7 @@ import { TextInputControl } from '../controls/TextInputControl'
import { InputControl } from '../dataControls/InputControl'
import { PlaytestControl } from '../dataControls/PlaytestControl'
import { SwitchControl } from '../dataControls/SwitchControl'
-import { EngineContext } from '../engine'
+import {} from '../../types'
import { Task } from '../plugins/taskPlugin/task'
import { anySocket } from '../sockets'
@@ -57,7 +58,7 @@ export class InputComponent extends ThothComponent {
unsubscribe?: () => void
subscribeToPlaytest(node: ThothNode) {
- const { onPlaytest } = this.editor?.thoth as EngineContext
+ const { onPlaytest } = this.editor?.thoth as EditorContext
// check node for the right data attribute
if (onPlaytest) {
@@ -67,17 +68,11 @@ export class InputComponent extends ThothComponent {
const playtestToggle = node.data.playtestToggle as unknown as {
receivePlaytest: boolean
}
+
if (!playtestToggle.receivePlaytest) return
// attach the text to the nodes data for access in worker
node.data.text = text
-
- const task = this.nodeTaskMap[node.id]
-
- // will need to run this here with the stater rather than the text
- task?.run(text)
- task?.reset()
- this.editor?.trigger('process')
})
}
}
@@ -104,7 +99,6 @@ export class InputComponent extends ThothComponent {
const data = node?.data?.playtestToggle as
| {
receivePlaytest: boolean
- outputs: []
}
| undefined
@@ -112,11 +106,11 @@ export class InputComponent extends ThothComponent {
dataKey: 'playtestToggle',
name: 'Receive from playtest input',
defaultValue: {
- receivePlaytest: data?.receivePlaytest || false,
- outputs: data?.outputs || [],
+ receivePlaytest:
+ data?.receivePlaytest !== undefined ? data?.receivePlaytest : true,
},
ignored: ['output'],
- label: 'Toggle playtest',
+ label: 'Recieve from playtest',
})
const toggleDefault = new SwitchControl({
diff --git a/core/src/components/ItemDetector.ts b/core/src/components/ItemDetector.ts
index a3a5807e4..d272eb8b3 100644
--- a/core/src/components/ItemDetector.ts
+++ b/core/src/components/ItemDetector.ts
@@ -7,7 +7,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { stringSocket, triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
// For simplicity quests should be ONE thing not complete X and Y
diff --git a/core/src/components/Module.ts b/core/src/components/Module.ts
deleted file mode 100644
index 39cb0ba25..000000000
--- a/core/src/components/Module.ts
+++ /dev/null
@@ -1,114 +0,0 @@
-import isEqual from 'lodash/isEqual'
-
-import {
- ModuleType,
- ModuleWorkerOutput,
- NodeData,
- ThothNode,
- ThothWorkerInputs,
-} from '../../types'
-import { ModuleControl } from '../dataControls/ModuleControl'
-import { Task } from '../plugins/taskPlugin/task'
-import { ThothComponent } from '../thoth-component'
-
-const info = `The Module component allows you to add modules into your chain. A module is a bundled self contained chain that defines inputs, outputs, and triggers using components.`
-
-export class ModuleComponent extends ThothComponent {
- _task: Task
- updateModuleSockets: Function
- task
- info
- subscriptionMap: Record = {}
- editor: any
- noBuildUpdate: boolean
- category: string
-
- constructor() {
- super('Module')
- this.module = {
- nodeType: 'module',
- }
- this.task = {
- outputs: {},
- closed: [] as { [key: string]: string }[],
- }
- this.category = 'Core'
- this.info = info
- this.noBuildUpdate = true
- }
-
- builder(node: ThothNode) {
- const moduleControl = new ModuleControl({
- name: 'Module select',
- write: false,
- })
-
- if (node.data.module) {
- this.subscribe(node)
- }
-
- moduleControl.onData = (moduleName: string) => {
- this.updateSockets(node, moduleName)
- this.subscribe(node)
- }
-
- node.inspector.add(moduleControl)
-
- return node
- }
-
- destroyed(node: ThothNode) {
- this.unsubscribe(node)
- }
-
- unsubscribe(node: ThothNode) {
- if (!this.subscriptionMap[node.id]) return
-
- this.subscriptionMap[node.id]()
-
- delete this.subscriptionMap[node.id]
- }
-
- async subscribe(node: ThothNode) {
- if (!node.data.module) return
- let cache: ModuleType
-
- // this.unsubscribe(node)
-
- this.subscriptionMap[node.id] = this.editor.thoth.onModuleUpdated(
- node.data.module,
- (module: ModuleType) => {
- if (!isEqual(cache, module)) {
- this.editor.moduleManager.updateModule(module)
- this.updateSockets(node, module.name)
- }
- cache = module
- }
- )
- }
-
- updateSockets(node: ThothNode, moduleName: string) {
- node.data.module = moduleName
- this.updateModuleSockets(node)
- this.editor.trigger('process')
- node.update()
- }
-
- worker(
- node: NodeData,
- inputs: ThothWorkerInputs,
- outputs: { [key: string]: string },
- { module }: { module: { outputs: ModuleWorkerOutput[] } }
- ) {
- const open = Object.entries(module.outputs)
- .filter(([, value]) => typeof value === 'boolean' && value)
- .map(([key]) => key)
- // close all triggers first
- const dataOutputs = node.data.outputs as ModuleWorkerOutput[]
- this._task.closed = dataOutputs
- .map((out: { name: string }) => out.name)
- .filter((out: string) => !open.includes(out))
-
- return module.outputs
- }
-}
diff --git a/core/src/components/Output.ts b/core/src/components/Output.ts
index 80e1d2ed3..f81122ed9 100644
--- a/core/src/components/Output.ts
+++ b/core/src/components/Output.ts
@@ -2,6 +2,7 @@ import Rete from 'rete'
import { v4 as uuidv4 } from 'uuid'
import {
+ EditorContext,
NodeData,
ThothNode,
ThothWorkerInputs,
@@ -9,7 +10,6 @@ import {
} from '../../types'
import { InputControl } from '../dataControls/InputControl'
import { SwitchControl } from '../dataControls/SwitchControl'
-import { EngineContext } from '../engine'
import { triggerSocket, anySocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
const info = `The output component will pass values out from your spell. You can have multiple outputs in a spell and all output values will be collected. It also has an option to send the output to the playtest area for easy testing.`
@@ -72,11 +72,11 @@ export class Output extends ThothComponent {
node: NodeData,
inputs: ThothWorkerInputs,
outputs: ThothWorkerOutputs,
- { silent, thoth }: { silent: boolean; thoth: EngineContext }
+ { silent, thoth }: { silent: boolean; thoth: EditorContext }
) {
if (!inputs.input) throw new Error('No input provided to output component')
- const text = inputs.input.filter(Boolean)[0]
+ const text = inputs.input.filter(Boolean)[0] as string
//just need a new check here for playtest send boolean
const { sendToPlaytest } = thoth
diff --git a/core/src/components/ProseToScript.ts b/core/src/components/ProseToScript.ts
index 81e33450c..46e0cf081 100644
--- a/core/src/components/ProseToScript.ts
+++ b/core/src/components/ProseToScript.ts
@@ -6,7 +6,7 @@ import {
ThothWorkerInputs,
ThothWorkerOutputs,
} from '../../types'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { stringSocket, triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
const fewshot = (prose: string) => {
diff --git a/core/src/components/SafetyVerifier.ts b/core/src/components/SafetyVerifier.ts
index b932404a9..4e675204b 100644
--- a/core/src/components/SafetyVerifier.ts
+++ b/core/src/components/SafetyVerifier.ts
@@ -7,7 +7,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { stringSocket, triggerSocket, booleanSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
diff --git a/core/src/components/Spell.ts b/core/src/components/Spell.ts
new file mode 100644
index 000000000..9fbe0389e
--- /dev/null
+++ b/core/src/components/Spell.ts
@@ -0,0 +1,155 @@
+import isEqual from 'lodash/isEqual'
+import Rete from 'rete'
+import {
+ EngineContext,
+ ModuleWorkerOutput,
+ NodeData,
+ Spell,
+ ThothNode,
+ ThothWorkerInputs,
+} from '../../types'
+import { SpellControl } from '../dataControls/SpellControl'
+import { ThothEditor } from '../editor'
+import { Task } from '../plugins/taskPlugin/task'
+import { objectSocket } from '../sockets'
+import { ThothComponent } from '../thoth-component'
+import {
+ inputNameFromSocketKey,
+ socketKeyFromOutputName,
+} from '../utils/nodeHelpers'
+
+const info = `The Module component allows you to add modules into your chain. A module is a bundled self contained chain that defines inputs, outputs, and triggers using components.`
+
+export class SpellComponent extends ThothComponent<
+ Promise
+> {
+ _task: Task
+ updateModuleSockets: Function
+ task
+ info
+ subscriptionMap: Record = {}
+ editor: ThothEditor
+ noBuildUpdate: boolean
+ dev = true
+
+ constructor() {
+ super('Spell')
+ this.module = {
+ nodeType: 'module',
+ skip: true,
+ }
+ this.task = {
+ outputs: {},
+ closed: [] as { [key: string]: string }[],
+ }
+ this.category = 'Core'
+ this.info = info
+ this.noBuildUpdate = true
+ }
+
+ subscribe(node: ThothNode, spellId: string) {
+ if (this.subscriptionMap[node.id]) this.subscriptionMap[node.id]()
+
+ let cache: Spell
+
+ // Subscribe to any changes to that spell here
+ this.subscriptionMap[node.id] = this.editor.onSpellUpdated(
+ spellId,
+ (spell: Spell) => {
+ if (!isEqual(spell, cache)) {
+ // this can probably be better optimise this
+ this.updateSockets(node, spell)
+ }
+
+ cache = spell
+ }
+ )
+ }
+
+ builder(node: ThothNode) {
+ const spellControl = new SpellControl({
+ name: 'Spell Select',
+ write: false,
+ defaultValue: (node.data.spell as string) || '',
+ })
+
+ const stateSocket = new Rete.Input('state', 'State', objectSocket)
+
+ spellControl.onData = (spell: Spell) => {
+ // break out of it the nodes data already exists.
+ if (spell.name === node.data.spellId) return
+ node.data.spellId = spell.name
+
+ // Update the sockets
+ this.updateSockets(node, spell)
+
+ // here we handle writing the spells name to the spell itself
+ node.data.spell = spell.name
+
+ // Uodate the data name to display inside the node
+ node.data.name = spell.name
+
+ // subscribe to changes form the spell to update the sockets if there are changes
+ // Note: We could store all spells in a spell map here and rather than receive the whole spell, only receive the diff, make the changes, update the sockets, etc. Mayb improve speed?
+ this.subscribe(node, spell.name)
+ }
+
+ node.addInput(stateSocket)
+ node.inspector.add(spellControl)
+
+ if (node.data.spellId) {
+ setTimeout(() => {
+ this.subscribe(node, node.data.spellId as string)
+ }, 1000)
+ }
+
+ return node
+ }
+
+ updateSockets(node: ThothNode, spell: Spell) {
+ const chain = JSON.parse(JSON.stringify(spell.chain))
+ this.updateModuleSockets(node, chain, true)
+ node.update()
+ }
+
+ formatOutputs(node: NodeData, outputs: Record) {
+ return Object.entries(outputs).reduce((acc, [key, value]) => {
+ const socketKey = socketKeyFromOutputName(node, key)
+ if (!socketKey) return acc
+ acc[socketKey] = value
+ return acc
+ }, {} as Record)
+ }
+
+ formatInputs(node: NodeData, inputs: Record) {
+ return Object.entries(inputs).reduce((acc, [key, value]) => {
+ const name = inputNameFromSocketKey(node, key)
+ if (!name) return acc
+
+ acc[name] = value[0]
+ return acc
+ }, {} as Record)
+ }
+
+ async worker(
+ node: NodeData,
+ inputs: ThothWorkerInputs,
+ _outputs: { [key: string]: string },
+ {
+ module,
+ thoth,
+ }: { module: { outputs: ModuleWorkerOutput[] }; thoth: EngineContext }
+ ) {
+ // We format the inputs since these inputs rely on the use of the socket keys.
+ const flattenedInputs = this.formatInputs(node, inputs)
+
+ if (!thoth.runSpell) return {}
+ const outputs = await thoth.runSpell(
+ flattenedInputs,
+ node.data.spellId as string,
+ flattenedInputs.state
+ )
+
+ return outputs
+ }
+}
diff --git a/core/src/components/StateRead.ts b/core/src/components/StateRead.ts
index 99efd88cc..842d0d461 100644
--- a/core/src/components/StateRead.ts
+++ b/core/src/components/StateRead.ts
@@ -5,7 +5,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { SocketGeneratorControl } from '../dataControls/SocketGenerator'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { ThothComponent } from '../thoth-component'
const info = `The State Read component allows you to read values from the state. These can be found in and are managed by the State Manager window. This window consists of a JSON object. You can define any number of outputs where an outputs name corresponds to a key in the state manager. Whatever value is assigned to that key will be read ans passed into your chain.`
export class StateRead extends ThothComponent<
diff --git a/core/src/components/StateWrite.ts b/core/src/components/StateWrite.ts
index a9f615544..91cc20038 100644
--- a/core/src/components/StateWrite.ts
+++ b/core/src/components/StateWrite.ts
@@ -7,7 +7,7 @@ import {
} from '../../types'
import { SocketGeneratorControl } from '../dataControls/SocketGenerator'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
diff --git a/core/src/components/TenseTransformer.ts b/core/src/components/TenseTransformer.ts
index 5d7afbf9f..3966d6ae2 100644
--- a/core/src/components/TenseTransformer.ts
+++ b/core/src/components/TenseTransformer.ts
@@ -7,7 +7,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { stringSocket, triggerSocket } from '../sockets'
// @seang todo: convert data controls to typescript to remove this
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -138,6 +138,7 @@ export class TenseTransformer extends ThothComponent> {
stop: ['\n'],
maxTokens: 100,
temperature: 0.0,
+ model: 'vanilla-davinci',
}
try {
diff --git a/core/src/components/TimeDetector.ts b/core/src/components/TimeDetector.ts
index ccef9e25b..ea31e9eb7 100644
--- a/core/src/components/TimeDetector.ts
+++ b/core/src/components/TimeDetector.ts
@@ -7,7 +7,7 @@ import {
ThothWorkerOutputs,
} from '../../types'
import { FewshotControl } from '../dataControls/FewshotControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { stringSocket, triggerSocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
// For simplicity quests should be ONE thing not complete X and Y
diff --git a/core/src/components/TriggerIn.ts b/core/src/components/TriggerIn.ts
index f1c04f742..506ba1606 100644
--- a/core/src/components/TriggerIn.ts
+++ b/core/src/components/TriggerIn.ts
@@ -4,11 +4,12 @@ import Rete from 'rete'
//@ts-ignore
import { v4 as uuidv4 } from 'uuid'
-import { NodeData, ThothNode } from '../../types'
+import { EditorContext, NodeData, ThothNode } from '../../types'
import { InputControl } from '../dataControls/InputControl'
import { TaskOptions } from '../plugins/taskPlugin/task'
import { triggerSocket } from '../sockets'
import { ThothComponent, ThothTask } from '../thoth-component'
+import { PlaytestControl } from '../dataControls/PlaytestControl'
const info = `The trigger in allows you to pass values into your spell either from a higher level component or from the server. There must be one single trigger into a spell for now as the server does not support multiple triggers. Yet.`
export class TriggerIn extends ThothComponent {
@@ -45,15 +46,54 @@ export class TriggerIn extends ThothComponent {
this.info = info
}
+ subscriptionMap: Record = {}
+
+ unsubscribe?: () => void
+
+ subscribeToPlaytest(node: ThothNode) {
+ const { onPlaytest } = this.editor?.thoth as EditorContext
+
+ // check node for the right data attribute
+ if (onPlaytest) {
+ // store the unsubscribe function in our node map
+ this.subscriptionMap[node.id] = onPlaytest((text: string) => {
+ // if the node doesnt have playtest toggled on, do nothing
+ const playtestToggle = node.data.playtestToggle as unknown as {
+ receivePlaytest: boolean
+ }
+ if (!playtestToggle.receivePlaytest) return
+
+ const task = this.nodeTaskMap[node.id]
+
+ // will need to run this here with the stater rather than the text
+ task?.run(text)
+ task?.reset()
+ this.editor?.trigger('process')
+ })
+ }
+ }
+
+ destroyed(node: ThothNode) {
+ if (this.subscriptionMap[node.id]) this.subscriptionMap[node.id]()
+ delete this.subscriptionMap[node.id]
+ }
+
async run(node: ThothNode, data: NodeData) {
const task = this.nodeTaskMap[node.id]
- await task.run(data)
+ try {
+ await task.run(data)
+ } catch (err: any) {
+ throw err
+ }
}
// the builder is used to "assemble" the node component.
// when we have enki hooked up and have grabbed all few shots, we would use the builder
// to generate the appropriate inputs and ouputs for the fewshot at build time
builder(node: ThothNode) {
+ if (this.subscriptionMap[node.id]) this.subscriptionMap[node.id]()
+ delete this.subscriptionMap[node.id]
+
// create inputs here. First argument is the name, second is the type (matched to other components sockets), and third is the socket the i/o will use
const out = new Rete.Output('trigger', 'Trigger', triggerSocket)
node.data.socketKey = node?.data?.socketKey || uuidv4()
@@ -64,7 +104,27 @@ export class TriggerIn extends ThothComponent {
name: 'Trigger name',
})
- node.inspector.add(nameInput)
+ // subscribe the node to the playtest input data stream
+ this.subscribeToPlaytest(node)
+
+ const data = node?.data?.playtestToggle as
+ | {
+ receivePlaytest: boolean
+ }
+ | undefined
+
+ const togglePlaytest = new PlaytestControl({
+ dataKey: 'playtestToggle',
+ name: 'Receive from playtest input',
+ defaultValue: {
+ receivePlaytest:
+ data?.receivePlaytest !== undefined ? data?.receivePlaytest : true,
+ },
+ ignored: ['output'],
+ label: 'Receive from playtest',
+ })
+
+ node.inspector.add(nameInput).add(togglePlaytest)
return node.addOutput(out)
}
diff --git a/core/src/components/VisualGeneration.ts b/core/src/components/VisualGeneration.ts
index ea23a2f6b..877b834f6 100644
--- a/core/src/components/VisualGeneration.ts
+++ b/core/src/components/VisualGeneration.ts
@@ -1,12 +1,13 @@
import Rete from 'rete'
import {
+ ImageCacheResponse,
NodeData,
ThothNode,
ThothWorkerInputs,
ThothWorkerOutputs,
} from '../../types'
import { InputControl } from '../dataControls/InputControl'
-import { EngineContext } from '../engine'
+import { EngineContext } from '../../types'
import { triggerSocket, stringSocket, arraySocket } from '../sockets'
import { ThothComponent } from '../thoth-component'
@@ -16,20 +17,9 @@ caption- is a string related to what type of image you want to search for.
topK- number of (k) matches for a particular description. IE: if you submit as a caption: "castle" and k was 5, it would return a fortress, a keep, a battlement, a gatehouse, and a tower. The k=5 images most similar to the word "castle`
-export type ImageType = {
- id: string
- captionId: string
- imageCaption: string
- imageUrl: string
- tag: string
- score: number | string
-}
-
-type WorkerReturn = {
- images: ImageType[]
-}
-
-export class VisualGeneration extends ThothComponent> {
+export class VisualGeneration extends ThothComponent<
+ Promise
+> {
constructor() {
super('VisualGeneration')
this.task = {
@@ -85,10 +75,13 @@ export class VisualGeneration extends ThothComponent> {
const cacheTag = node.data.cacheTag ?? undefined
try {
- const images = await readFromImageCache(caption, cacheTag, node.data.topK)
- return {
- images,
- }
+ const images = await readFromImageCache(
+ caption as string,
+ cacheTag as string,
+ node.data.topK as number
+ )
+
+ return images
} catch (err) {
throw new Error('Error in VisualGeneration component')
}
diff --git a/core/src/components/components.ts b/core/src/components/components.ts
index 2ae1b5818..9a07fbee3 100644
--- a/core/src/components/components.ts
+++ b/core/src/components/components.ts
@@ -2,6 +2,12 @@ import { ActionTypeComponent } from './ActionType'
import { Alert } from './AlertMessage'
import { BooleanGate } from './BooleanGate'
import { Code } from './Code'
+import { InputFieldComponent } from './deprecated/InputField'
+import { ModuleInput } from './deprecated/ModuleInput'
+import { ModuleOutput } from './deprecated/ModuleOutput'
+import { PlaytestInput } from './deprecated/PlaytestInput'
+import { PlaytestPrint } from './deprecated/PlaytestPrint'
+import { RunInputComponent } from './deprecated/RunInput'
import { DifficultyDetectorComponent } from './DifficultyDetector'
import { EnkiTask } from './EnkiTask'
import { EntityDetector } from './EntityDetector'
@@ -9,26 +15,20 @@ import { ForEach } from './ForEach'
import { Generator } from './Generator'
import { HuggingfaceComponent } from './Huggingface'
import { InputComponent } from './Input'
-import { InputFieldComponent } from './deprecated/InputField'
import { ItemTypeComponent } from './ItemDetector'
import { JoinListComponent } from './JoinList'
-import { ModuleComponent } from './Module'
-import { ModuleInput } from './deprecated/ModuleInput'
-import { ModuleOutput } from './deprecated/ModuleOutput'
-import { TriggerIn } from './TriggerIn'
-import { TriggerOut } from './TriggerOut'
import { Output } from './Output'
-import { PlaytestInput } from './deprecated/PlaytestInput'
-import { PlaytestPrint } from './deprecated/PlaytestPrint'
import { ProseToScript } from './ProseToScript'
-import { RunInputComponent } from './deprecated/RunInput'
import { SafetyVerifier } from './SafetyVerifier'
+import { SpellComponent } from './Spell'
import { StateRead } from './StateRead'
import { StateWrite } from './StateWrite'
import { StringProcessor } from './StringProcessor'
import { SwitchGate } from './SwitchGate'
import { TenseTransformer } from './TenseTransformer'
import { TimeDetectorComponent } from './TimeDetector'
+import { TriggerIn } from './TriggerIn'
+import { TriggerOut } from './TriggerOut'
import { VisualGeneration } from './VisualGeneration'
// Here we load up all components of the builder into our editor for usage.
@@ -49,7 +49,7 @@ export const components = {
inputFieldComponent: () => new InputFieldComponent(),
itemTypeComponent: () => new ItemTypeComponent(),
joinListComponent: () => new JoinListComponent(),
- moduleComponent: () => new ModuleComponent(),
+ moduleComponent: () => new SpellComponent(),
moduleInput: () => new ModuleInput(),
moduleOutput: () => new ModuleOutput(),
output: () => new Output(),
diff --git a/core/src/components/deprecated/PlaytestInput.ts b/core/src/components/deprecated/PlaytestInput.ts
index 5f87f087a..f3f4217a0 100644
--- a/core/src/components/deprecated/PlaytestInput.ts
+++ b/core/src/components/deprecated/PlaytestInput.ts
@@ -5,8 +5,8 @@ import {
ThothNode,
ThothWorkerInputs,
ThothWorkerOutputs,
+ EditorContext,
} from '../../../types'
-import { EngineContext } from '../../engine'
import { Task } from '../../plugins/taskPlugin/task'
import { triggerSocket, stringSocket } from '../../sockets'
import { ThothComponent, ThothTask } from '../../thoth-component'
@@ -47,7 +47,7 @@ export class PlaytestInput extends ThothComponent {
unsubscribe?: () => void
subscribeToPlaytest(node: ThothNode) {
- const { onPlaytest } = this.editor?.thoth as EngineContext
+ const { onPlaytest } = this.editor?.thoth as EditorContext
if (onPlaytest) {
// store the unsubscribe function in our node map
diff --git a/core/src/components/deprecated/PlaytestPrint.ts b/core/src/components/deprecated/PlaytestPrint.ts
index b77de0ad0..c23a8159f 100644
--- a/core/src/components/deprecated/PlaytestPrint.ts
+++ b/core/src/components/deprecated/PlaytestPrint.ts
@@ -1,12 +1,12 @@
import Rete from 'rete'
import {
+ EditorContext,
NodeData,
ThothNode,
ThothWorkerInputs,
ThothWorkerOutputs,
} from '../../../types'
-import { EngineContext } from '../../engine'
import { triggerSocket, anySocket } from '../../sockets'
import { ThothComponent } from '../../thoth-component'
const info = `The Playtest Print component will print whatever value is attached to its input and print that valyue back to the playtest window.`
@@ -58,9 +58,9 @@ export class PlaytestPrint extends ThothComponent {
outputs: ThothWorkerOutputs,
{ silent }: { silent: boolean }
) {
- const { sendToPlaytest } = this.editor?.thoth as EngineContext
+ const { sendToPlaytest } = this.editor?.thoth as EditorContext
if (!inputs || !inputs.text) return {}
- const text = inputs.text.filter(Boolean)[0]
+ const text = inputs.text.filter(Boolean)[0] as string
if (sendToPlaytest) {
sendToPlaytest(text)
diff --git a/core/src/components/deprecated/RunInput.ts b/core/src/components/deprecated/RunInput.ts
index a4c399579..6f14aafd2 100644
--- a/core/src/components/deprecated/RunInput.ts
+++ b/core/src/components/deprecated/RunInput.ts
@@ -37,13 +37,13 @@ export class RunInputComponent extends ThothComponent {
// subscribe to the run function
// TODO abstract this into something more reusable.
// maybe modifyy the task plugin to set a run function to the node itself?
- const unsubscribe = this.editor?.on('run', args => {
- if (args.nodeId === node.id) {
- task.run()
- }
- })
+ // const unsubscribe = this.editor?.on('run', args => {
+ // if (args.nodeId === node.id) {
+ // task.run()
+ // }
+ // })
- this.subscriptionMap[node.id] = unsubscribe
+ // this.subscriptionMap[node.id] = unsubscribe
},
}
this.category = 'I/O'
diff --git a/core/src/dataControls/DropdownControl.ts b/core/src/dataControls/DropdownControl.ts
new file mode 100644
index 000000000..4bc619137
--- /dev/null
+++ b/core/src/dataControls/DropdownControl.ts
@@ -0,0 +1,33 @@
+import { DataControl } from '../plugins/inspectorPlugin'
+
+export class DropdownControl extends DataControl {
+ constructor({
+ name,
+ dataKey,
+ values,
+ defaultValue,
+ icon = 'properties',
+ write = true,
+ }: {
+ name: string
+ dataKey: string
+ defaultValue: string
+ values: string[]
+ icon?: string
+ write?: boolean
+ }) {
+ const options = {
+ dataKey,
+ name,
+ component: 'dropdownSelect',
+ write,
+ icon,
+ data: {
+ defaultValue,
+ values,
+ },
+ }
+
+ super(options)
+ }
+}
diff --git a/core/src/dataControls/InputControl.js b/core/src/dataControls/InputControl.js
deleted file mode 100644
index ff2c48fdb..000000000
--- a/core/src/dataControls/InputControl.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { DataControl } from '../plugins/inspectorPlugin'
-
-export class InputControl extends DataControl {
- constructor({ dataKey, name, icon = 'hand' }) {
- const options = {
- dataKey: dataKey,
- name: name,
- component: 'input',
- icon,
- }
-
- super(options)
- }
-
- onData() {
- return
- }
-}
diff --git a/core/src/dataControls/InputControl.ts b/core/src/dataControls/InputControl.ts
new file mode 100644
index 000000000..7f7dc6394
--- /dev/null
+++ b/core/src/dataControls/InputControl.ts
@@ -0,0 +1,27 @@
+import { DataControl } from '../plugins/inspectorPlugin'
+
+export class InputControl extends DataControl {
+ constructor({
+ dataKey = '',
+ name = '',
+ icon = 'hand',
+ defaultValue,
+ }: {
+ dataKey: string
+ name: string
+ icon?: string
+ defaultValue?: unknown
+ }) {
+ super({
+ dataKey: dataKey,
+ name: name,
+ component: 'input',
+ defaultValue,
+ icon,
+ })
+ }
+
+ onData = () => {
+ return
+ }
+}
diff --git a/core/src/dataControls/ModuleControl.ts b/core/src/dataControls/SpellControl.ts
similarity index 62%
rename from core/src/dataControls/ModuleControl.ts
rename to core/src/dataControls/SpellControl.ts
index 8066820be..166fd1fa3 100644
--- a/core/src/dataControls/ModuleControl.ts
+++ b/core/src/dataControls/SpellControl.ts
@@ -1,19 +1,22 @@
import { DataControl } from '../plugins/inspectorPlugin'
-export class ModuleControl extends DataControl {
+export class SpellControl extends DataControl {
constructor({
name,
icon = 'sieve',
write = false,
+ defaultValue = '',
}: {
name: string
icon?: string
write: boolean
+ defaultValue?: string
}) {
const options = {
- dataKey: 'module',
+ dataKey: 'spell',
name: name,
- component: 'moduleSelect',
+ component: 'spellSelect',
+ defaultValue,
write,
icon,
}
diff --git a/core/src/editor.ts b/core/src/editor.ts
index 0cc5d7667..a31f29dd8 100644
--- a/core/src/editor.ts
+++ b/core/src/editor.ts
@@ -1,3 +1,4 @@
+import { ThothNode } from './../types'
import { NodeEditor } from 'rete'
import ConnectionPlugin from 'rete-connection-plugin'
import ConnectionReroutePlugin from 'rete-connection-reroute-plugin'
@@ -5,27 +6,33 @@ import ContextMenuPlugin from 'rete-context-menu-plugin'
import ReactRenderPlugin from 'rete-react-render-plugin'
import { Data } from 'rete/types/core/data'
-import { EventsTypes, ModuleType } from '../types'
+import { EventsTypes, EditorContext } from '../types'
import { getComponents } from './components/components'
-import { EngineContext, initSharedEngine } from './engine'
+import { initSharedEngine } from './engine'
+import CommentPlugin from './plugins/commentPlugin'
import AreaPlugin from './plugins/areaPlugin'
import DisplayPlugin from './plugins/displayPlugin'
import HistoryPlugin from './plugins/historyPlugin'
import InspectorPlugin from './plugins/inspectorPlugin'
import LifecyclePlugin from './plugins/lifecyclePlugin'
-import ModulePlugin from './plugins/modulePlugin'
import { ModuleManager } from './plugins/modulePlugin/module-manager'
import SocketGenerator from './plugins/socketGenerator'
-import TaskPlugin from './plugins/taskPlugin'
+import TaskPlugin, { Task } from './plugins/taskPlugin'
import { PubSubContext, ThothComponent } from './thoth-component'
import DebuggerPlugin from './plugins/debuggerPlugin'
+import KeyCodePlugin from './plugins/keyCodePlugin'
+import ModulePlugin from './plugins/modulePlugin'
+import SelectionPlugin from './plugins/selectionPlugin'
export class ThothEditor extends NodeEditor {
+ tasks: Task[]
pubSub: PubSubContext
- thoth: EngineContext
+ thoth: EditorContext
tab: { type: string }
abort: unknown
- loadGraph: (graph: Data) => Promise
+ loadGraph: (graph: Data, relaoding?: boolean) => Promise
moduleManager: ModuleManager
+ runProcess: (callback?: Function) => Promise
+ onSpellUpdated: (spellId: string, callback: Function) => Function
}
/*
@@ -77,7 +84,6 @@ export const initEditor = async function ({
editor.use(ConnectionPlugin)
// @seang: temporarily disabling because dependencies of ConnectionReroutePlugin are failing validation on server import of thoth-core
editor.use(ConnectionReroutePlugin)
-
// React rendering for the editor
editor.use(ReactRenderPlugin, {
// this component parameter is a custom default style for nodes
@@ -90,12 +96,24 @@ export const initEditor = async function ({
rename(component: { contextMenuName: any; name: any }) {
return component.contextMenuName || component.name
},
+ nodeItems: (node: ThothNode) => {
+ if (node.data.nodeLocked) {
+ return { Delete: false }
+ }
+ return {
+ Deleted: true,
+ Clone: true,
+ }
+ },
allocate: (component: ThothComponent) => {
+ const isProd = process.env.NODE_ENV === 'production'
//@seang: disabling component filtering in anticipation of needing to treat spells as "top level modules" in the publishing workflow
const tabType = editor.tab.type
const { workspaceType } = component
+ if (isProd && component.dev) return null
if (component.deprecated) return null
+ if (component.hide) return null
if (workspaceType && workspaceType !== tabType) return null
return [component.category]
},
@@ -109,18 +127,6 @@ export const initEditor = async function ({
scaleExtent: { min: 0.25, max: 2 },
})
- const moduleDocs = await thoth.getModules()
-
- // Parse modules into dictionary of all modules and JSON values
- let modules: Record = moduleDocs
- .map((doc: { toJSON: Function }) => doc.toJSON())
- .reduce((acc: Record, module: ModuleType) => {
- // todo handle better mapping
- // see moduleSelect.tsx
- acc[module.name] = module
- return acc
- }, {} as Record)
-
// The engine is used to process/run the rete graph
const engine = initSharedEngine({
@@ -131,38 +137,25 @@ export const initEditor = async function ({
})
// @seang TODO: update types for editor.use rather than casting as unknown here, we may want to bring our custom rete directly into the monorepo at this point
+ editor.onSpellUpdated = (spellId: string, callback: Function) => {
+ return thoth.onSubspellUpdated(spellId, callback)
+ }
+
// WARNING: ModulePlugin needs to be initialized before TaskPlugin during engine setup
editor.use(DebuggerPlugin)
- editor.use(ModulePlugin, { engine, modules } as unknown as void)
+ editor.use(ModulePlugin, { engine, modules: {} } as unknown as void)
editor.use(TaskPlugin)
+ editor.use(KeyCodePlugin)
- // ███╗ ███╗ ██████╗ ██████╗ ██╗ ██╗██╗ ███████╗███████╗
- // ████╗ ████║██╔═══██╗██╔══██╗██║ ██║██║ ██╔════╝██╔════╝
- // ██╔████╔██║██║ ██║██║ ██║██║ ██║██║ █████╗ ███████╗
- // ██║╚██╔╝██║██║ ██║██║ ██║██║ ██║██║ ██╔══╝ ╚════██║
- // ██║ ╚═╝ ██║╚██████╔╝██████╔╝╚██████╔╝███████╗███████╗███████║
- // ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚══════╝
-
- // add initial modules to the module manager
- editor.moduleManager.setModules(modules)
-
- // listen for pubsub onAddModule event to add modules
- thoth.onAddModule((module: ModuleType) => {
- editor.moduleManager.addModule(module)
- })
+ editor.use(SelectionPlugin, { enabled: true })
- // listen for update module event to update a module
- thoth.onUpdateModule((module: ModuleType) => {
- editor.moduleManager.updateModule(module)
- })
-
- thoth.onDeleteModule((module: ModuleType) => {
- editor.moduleManager.deleteModule(module)
+ editor.use(CommentPlugin, {
+ margin: 20, // indent for new frame comments by default 30 (px)
})
// WARNING all the plugins from the editor get installed onto the component and modify it. This effects the components registered in the engine, which already have plugins installed.
components.forEach(c => {
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // eslint-disable-next-line @typescrip``t-eslint/ban-ts-comment
//@ts-ignore
// the problematic type here is coming directly from node modules, we may need to revisit further customizing the Editor Register type expectations or it's class
editor.register(c)
@@ -173,21 +166,13 @@ export const initEditor = async function ({
return source !== 'dblclick'
})
+ editor.on(['click'], () => {
+ editor.selected.list = []
+ })
+
editor.bind('run')
editor.bind('save')
- editor.on(
- 'process nodecreated noderemoved connectioncreated connectionremoved',
- async () => {
- // Here we would swap out local processing for an endpoint that we send the serialised JSON too.
- // Then we run the fewshots, etc on the backend rather than on the client.
- // Alternative for now is for the client to call our own /openai endpoint.
- // NOTE need to consider authentication against Latitude API from a web client
- await engine.abort()
- await engine.process(editor.toJSON(), null, { thoth: thoth })
- }
- )
-
// ██████╗ ██╗ ██╗██████╗ ██╗ ██╗ ██████╗
// ██╔══██╗██║ ██║██╔══██╗██║ ██║██╔════╝
// ██████╔╝██║ ██║██████╔╝██║ ██║██║
@@ -199,12 +184,22 @@ export const initEditor = async function ({
await engine.abort()
}
- editor.loadGraph = async (_graph: Data) => {
+ editor.runProcess = async (callback: Function) => {
+ await engine.abort()
+ await engine.process(editor.toJSON(), null, { thoth: thoth })
+ if (callback) callback()
+ }
+
+ editor.loadGraph = async (_graph: Data, reloading = false) => {
const graph = JSON.parse(JSON.stringify(_graph))
await engine.abort()
editor.fromJSON(graph)
+
editor.view.resize()
- AreaPlugin.zoomAt(editor)
+ if (!reloading) AreaPlugin.zoomAt(editor)
}
+
+ // Start the engine off on first load
+ editor.runProcess()
return editor
}
diff --git a/core/src/engine.ts b/core/src/engine.ts
index 4d3242967..5eb19934f 100644
--- a/core/src/engine.ts
+++ b/core/src/engine.ts
@@ -1,23 +1,16 @@
import Rete, { Engine } from 'rete'
-import { Node } from 'rete/types'
-import {
- ModelCompletionOpts,
- ModuleType,
- NodeData,
- OpenAIResultChoice,
- Spell,
- ThothWorkerInputs,
-} from '../types'
+import { ChainData, ModuleType, NodeData, ThothWorkerInputs } from '../types'
import debuggerPlugin from './plugins/debuggerPlugin'
import ModulePlugin from './plugins/modulePlugin'
-import TaskPlugin from './plugins/taskPlugin'
+import TaskPlugin, { Task } from './plugins/taskPlugin'
interface WorkerOutputs {
[key: string]: unknown
}
export interface ThothEngine extends Engine {
+ tasks: Task[]
activateDebugger?: Function
moduleManager?: any
}
@@ -40,35 +33,6 @@ export abstract class ThothEngineComponent {
}
// TODO separate the engine context out from the editor context for cleaner typing.
-export type EngineContext = {
- completion: (
- body: ModelCompletionOpts
- ) => Promise
- getCurrentGameState: () => Record
- updateCurrentGameState: (update: Record) => void
- enkiCompletion: (
- taskName: string,
- inputs: string[]
- ) => Promise<{ outputs: string[] }>
- huggingface: (
- model: string,
- request: string
- ) => Promise<{ error: unknown; [key: string]: unknown }>
- readFromImageCache: Function
- onPlaytest?: Function
- sendToDebug?: Function
- onAddModule?: Function
- onUpdateModule?: Function
- sendToPlaytest?: Function
- onInspector?: Function
- sendToInspector?: Function
- clearTextEditor?: Function
- processCode?: (
- code: unknown,
- inputs: ThothWorkerInputs,
- data: Record
- ) => void
-}
export type InitEngineArguments = {
name: string
@@ -104,10 +68,7 @@ export const initSharedEngine = ({
}
// this parses through all the nodes in the data and finds the nodes associated with the given map
-export const extractNodes = (
- nodes: Record,
- map: Set
-) => {
+export const extractNodes = (nodes: ChainData['nodes'], map: Set) => {
const names = Array.from(map.keys())
return Object.keys(nodes)
@@ -118,7 +79,7 @@ export const extractNodes = (
// This will get the node that was triggered given a socketKey associated with that node.
export const getTriggeredNode = (
- data: Spell,
+ data: ChainData,
socketKey: string,
map: Set
) => {
diff --git a/core/src/index.ts b/core/src/index.ts
index 562a0e4f7..6514e5d38 100644
--- a/core/src/index.ts
+++ b/core/src/index.ts
@@ -4,8 +4,9 @@ import { Task } from './plugins/taskPlugin/task'
export { getComponents } from './components/components'
export { initEditor } from './editor'
-export type { EngineContext } from './engine'
export { Task } from './plugins/taskPlugin/task'
+export { runChain } from './utils/runChain'
+export * from './utils/chainHelpers'
export default {
getComponents,
diff --git a/core/src/plugins/commentPlugin/comment.js b/core/src/plugins/commentPlugin/comment.js
new file mode 100644
index 000000000..a9fcddbc9
--- /dev/null
+++ b/core/src/plugins/commentPlugin/comment.js
@@ -0,0 +1,94 @@
+import Draggable from './draggable';
+
+export default class Comment {
+ constructor(text, editor) {
+ this.editor = editor;
+ this.text = text;
+ this.scale = 1;
+ this.x = 0;
+ this.y = 0;
+ this.dragPosition = [0, 0];
+ this.links = [];
+
+ this.initView();
+ this.update();
+ }
+
+ initView() {
+ this.el = document.createElement('div');
+ this.el.tabIndex = 1;
+ this.el.addEventListener('contextmenu', this.onContextMenu.bind(this));
+ this.el.addEventListener('focus', this.onFocus.bind(this));
+ this.el.addEventListener('blur', this.onBlur.bind(this));
+
+ this.draggable = new Draggable(this.el, () => this.onStart(), (dx, dy) => this.onTranslate(dx, dy));
+ }
+
+ linkTo(ids) {
+ this.links = ids || [];
+ }
+
+ linkedTo(node) {
+ return this.links.includes(node.id);
+ }
+
+ k() {
+ return 1;
+ }
+
+ onContextMenu(e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ this.editor.trigger('editcomment', this);
+ }
+
+ onFocus() {
+ this.scale = Math.max(1, 1 / this.k());
+ this.update();
+ this.editor.trigger('commentselected', this)
+ }
+
+ focused() {
+ return document.activeElement === this.el;
+ }
+
+ onBlur() {
+ this.scale = 1;
+ this.update()
+ }
+
+ blur() {
+ this.el.blur();
+ }
+
+ onStart() {
+ this.dragPosition = [this.x, this.y];
+ }
+
+ onTranslate (dx, dy) {
+ const [x, y] = this.dragPosition;
+
+ this.x = x + this.scale * dx;
+ this.y = y + this.scale * dy;
+
+ this.update();
+ }
+
+ update() {
+ this.el.innerText = this.text;
+ this.el.style.transform = `translate(${this.x}px, ${this.y}px) scale(${this.scale})`;
+ }
+
+ toJSON() {
+ return {
+ text: this.text,
+ position: [ this.x, this.y ],
+ links: this.links
+ }
+ }
+
+ destroy() {
+ this.draggable.destroy();
+ }
+}
\ No newline at end of file
diff --git a/core/src/plugins/commentPlugin/draggable.js b/core/src/plugins/commentPlugin/draggable.js
new file mode 100644
index 000000000..6724e5b11
--- /dev/null
+++ b/core/src/plugins/commentPlugin/draggable.js
@@ -0,0 +1,65 @@
+import { listenWindow } from './utils';
+
+export default class Draggable {
+
+ constructor(el, onStart = () => {}, onTranslate = () => {}, onDrag = () => {}) {
+ this.mouseStart = null;
+
+ this.el = el;
+ this.onStart = onStart;
+ this.onTranslate = onTranslate;
+ this.onDrag = onDrag;
+
+ this.destroy = this.initEvents(el);
+ }
+
+ initEvents(el) {
+ el.addEventListener('pointerdown', this.down.bind(this));
+
+ const destroyMove = listenWindow('pointermove', this.move.bind(this))
+ const destroyUp = listenWindow('pointerup', this.up.bind(this));
+
+ return () => {
+ destroyMove();
+ destroyUp();
+ }
+ }
+
+ getCoords(e) {
+ const props = e.touches ? e.touches[0] : e;
+
+ return [props.pageX, props.pageY];
+ }
+
+ down(e) {
+ e.stopPropagation();
+
+ if (e.which === 1) {
+ this.mouseStart = this.getCoords(e);
+ this.onStart();
+ }
+ }
+
+ move(e) {
+ if (!this.mouseStart) return;
+ e.preventDefault();
+ e.stopPropagation();
+
+ let [x, y] = this.getCoords(e);
+ let delta = [x - this.mouseStart[0], y - this.mouseStart[1]];
+ let zoom = this.el.getBoundingClientRect().width / this.el.offsetWidth;
+
+ this.onTranslate(delta[0] / zoom, delta[1] / zoom);
+ }
+
+ up() {
+ if (this.mouseStart) {
+ this.onDrag();
+ }
+
+ this.mouseStart = null;
+ }
+
+ // mutable method
+ destroy() { }
+}
diff --git a/core/src/plugins/commentPlugin/frame-comment.js b/core/src/plugins/commentPlugin/frame-comment.js
new file mode 100644
index 000000000..542c1272c
--- /dev/null
+++ b/core/src/plugins/commentPlugin/frame-comment.js
@@ -0,0 +1,52 @@
+import Comment from './comment';
+import { containsRect } from './utils';
+
+export default class FrameComment extends Comment {
+ constructor(text, editor) {
+ super(text, editor);
+
+ this.width = 0;
+ this.height = 0;
+ this.links = [];
+ this.el.className = 'frame-comment';
+ }
+
+ linkedNodesView() {
+ return this.links
+ .map(id => this.editor.nodes.find(n => n.id === id))
+ .map(node => this.editor.view.nodes.get(node));
+ }
+
+ onStart() {
+ super.onStart();
+ this.linkedNodesView().map(nodeView => nodeView.onStart())
+ }
+
+ onTranslate(dx, dy) {
+ super.onTranslate(dx, dy);
+ this.linkedNodesView().map(nodeView => nodeView.onDrag(dx, dy))
+ }
+
+ isContains(node) {
+ const commRect = this.el.getBoundingClientRect();
+ const view = this.editor.view.nodes.get(node);
+
+ return containsRect(commRect, view.el.getBoundingClientRect());
+ }
+
+ update() {
+ super.update();
+
+ this.el.style.width = this.width+'px';
+ this.el.style.height = this.height+'px';
+ }
+
+ toJSON() {
+ return {
+ ...super.toJSON(),
+ type: 'frame',
+ width: this.width,
+ height: this.height
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/plugins/commentPlugin/index.js b/core/src/plugins/commentPlugin/index.js
new file mode 100644
index 000000000..be8ead1ff
--- /dev/null
+++ b/core/src/plugins/commentPlugin/index.js
@@ -0,0 +1,173 @@
+import './style.css'
+import CommentManager from './manager'
+import FrameComment from './frame-comment'
+import InlineComment from './inline-comment'
+import { nodesBBox, listenWindow } from './utils'
+
+// eslint-disable-next-line max-statements
+function install(
+ editor,
+ {
+ margin = 30,
+ disableBuiltInEdit = false,
+ frameCommentKeys = {
+ code: 'KeyF',
+ shiftKey: true,
+ ctrlKey: false,
+ altKey: false,
+ },
+ inlineCommentKeys = {
+ code: 'KeyC',
+ shiftKey: true,
+ ctrlKey: false,
+ altKey: false,
+ },
+ deleteCommentKeys = {
+ code: 'Delete',
+ shiftKey: false,
+ ctrlKey: false,
+ altKey: false,
+ },
+ }
+) {
+ editor.bind('commentselected')
+ editor.bind('commentcreated')
+ editor.bind('commentremoved')
+ editor.bind('syncframes')
+ editor.bind('addcomment')
+ editor.bind('removecomment')
+ editor.bind('editcomment')
+
+ const manager = new CommentManager(editor)
+
+ if (!disableBuiltInEdit) {
+ editor.on('editcomment', comment => {
+ comment.text = prompt('Edit comment', comment.text)
+ comment.update()
+ })
+ }
+
+ const destroyKeyListener = listenWindow('keydown', function handleKey(e) {
+ const keyCombosMap = [
+ frameCommentKeys,
+ inlineCommentKeys,
+ deleteCommentKeys,
+ ].map(function (x) {
+ return (
+ e.code === x.code &&
+ e.shiftKey === x.shiftKey &&
+ e.ctrlKey === x.ctrlKey &&
+ e.altKey === x.altKey
+ )
+ })
+
+ if (keyCombosMap[0]) {
+ const ids = editor.selected.list.map(node => node.id)
+ const nodes = ids.map(id => editor.nodes.find(n => n.id === id))
+
+ editor.trigger('addcomment', { type: 'frame', nodes })
+ } else if (keyCombosMap[1]) {
+ const position = Object.values(editor.view.area.mouse)
+
+ editor.trigger('addcomment', { type: 'inline', position })
+ } else if (keyCombosMap[2]) {
+ manager.deleteFocusedComment()
+ }
+ })
+
+ editor.on('addcomment', ({ type, text, nodes, position }) => {
+ if (type === 'inline') {
+ manager.addInlineComment(text, position)
+ } else if (type === 'frame') {
+ const { left, top, width, height } = nodesBBox(editor, nodes, margin)
+ const ids = nodes.map(n => n.id)
+
+ manager.addFrameComment(text, position || [left, top], ids, width, height)
+ } else {
+ throw new Error(`type '${type}' not supported`)
+ }
+ })
+
+ editor.on('removecomment', ({ comment, type }) => {
+ if (comment) {
+ manager.deleteComment(comment)
+ } else if (type === 'inline') {
+ manager.comments
+ .filter(c => c instanceof InlineComment)
+ .map(c => manager.deleteComment(c))
+ } else if (type === 'frame') {
+ manager.comments
+ .filter(c => c instanceof FrameComment)
+ .map(c => manager.deleteComment(c))
+ }
+ })
+
+ editor.on('syncframes', () => {
+ manager.comments
+ .filter(comment => comment instanceof FrameComment)
+ .map(comment => {
+ const nodes = comment.links.map(id =>
+ editor.nodes.find(n => n.id === id)
+ )
+ const { left, top, width, height } = nodesBBox(editor, nodes, margin)
+
+ comment.x = left
+ comment.y = top
+ comment.width = width
+ comment.height = height
+
+ comment.update()
+ })
+ })
+
+ editor.on('nodetranslated', ({ node, prev }) => {
+ const dx = node.position[0] - prev[0]
+ const dy = node.position[1] - prev[1]
+
+ manager.comments
+ .filter(comment => comment instanceof InlineComment)
+ .filter(comment => comment.linkedTo(node))
+ .map(comment => comment.offset(dx, dy))
+ })
+
+ editor.on('nodedraged', node => {
+ manager.comments
+ .filter(comment => comment instanceof FrameComment)
+ .filter(comment => {
+ const contains = comment.isContains(node)
+ const links = comment.links.filter(id => id !== node.id)
+
+ comment.links = contains ? [...links, node.id] : links
+ })
+ })
+
+ editor.on('commentselected', () => {
+ const list = [...editor.selected.list]
+
+ editor.selected.clear()
+ list.map(node => (node.update ? node.update() : null))
+ })
+
+ editor.on('export', data => {
+ data.comments = manager.toJSON()
+ })
+
+ editor.on('import', data => {
+ manager.fromJSON(data.comments || [])
+ })
+
+ if (editor.exist('clear')) {
+ // compatibility with previous versions
+ editor.on('clear', () => manager.deleteComments())
+ }
+
+ editor.on('destroy', () => {
+ manager.destroy()
+ destroyKeyListener()
+ })
+}
+
+export default {
+ name: 'comment',
+ install,
+}
diff --git a/core/src/plugins/commentPlugin/inline-comment.js b/core/src/plugins/commentPlugin/inline-comment.js
new file mode 100644
index 000000000..4f98e539a
--- /dev/null
+++ b/core/src/plugins/commentPlugin/inline-comment.js
@@ -0,0 +1,42 @@
+import Comment from './comment';
+import { intersectRect } from './utils';
+
+export default class InlineComment extends Comment {
+ constructor(text, editor) {
+ super(text, editor);
+
+ this.el.className = 'inline-comment';
+ this.el.addEventListener('mouseup', this.onDrag.bind(this));
+ }
+
+ onDrag() {
+ const intersection = this.getIntersectNode();
+
+ this.linkTo(intersection ? [intersection.node.id] : []);
+ }
+
+ getIntersectNode() {
+ const commRect = this.el.getBoundingClientRect();
+
+ return Array.from(this.editor.view.nodes)
+ .map(([node, view]) => {
+ return { node, rect: view.el.getBoundingClientRect() };
+ })
+ .find(({ rect }) => {
+ return intersectRect(commRect, rect);
+ });
+ }
+
+ offset(dx, dy) {
+ this.x += dx;
+ this.y += dy;
+ this.update();
+ }
+
+ toJSON() {
+ return {
+ ...super.toJSON(),
+ type: 'inline'
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/plugins/commentPlugin/manager.js b/core/src/plugins/commentPlugin/manager.js
new file mode 100644
index 000000000..30f3708cc
--- /dev/null
+++ b/core/src/plugins/commentPlugin/manager.js
@@ -0,0 +1,82 @@
+import FrameComment from './frame-comment';
+import InlineComment from './inline-comment';
+
+export default class CommentManager {
+ constructor(editor) {
+ this.editor = editor;
+ this.comments = [];
+
+ editor.on('zoomed', () => {
+ this.comments.map(c => c.blur.call(c));
+ });
+ }
+
+ addInlineComment(text, [ x, y ], links = []) {
+ let comment = new InlineComment(text, this.editor);
+
+ comment.k = () => this.editor.view.area.transform.k;
+ comment.x = x;
+ comment.y = y;
+ comment.linkTo(links);
+
+ this.addComment(comment);
+ }
+
+ addFrameComment(text, [ x, y ], links = [], width = 0, height = 0) {
+ let comment = new FrameComment(text, this.editor);
+
+ comment.x = x;
+ comment.y = y;
+ comment.width = width;
+ comment.height = height;
+ comment.linkTo(links);
+
+ this.addComment(comment);
+ }
+
+ addComment(comment) {
+ comment.update();
+ this.comments.push(comment);
+
+ this.editor.view.area.appendChild(comment.el);
+ this.editor.trigger('commentcreated', comment);
+ }
+
+ deleteComment(comment) {
+ this.editor.view.area.removeChild(comment.el);
+ this.comments.splice(this.comments.indexOf(comment), 1);
+ comment.destroy();
+
+ this.editor.trigger('commentremoved', comment);
+ }
+
+ deleteFocusedComment() {
+ const focused = this.comments.find(c => c.focused());
+
+ if (focused)
+ this.deleteComment(focused)
+ }
+
+ deleteComments() {
+ [...this.comments].map(c => this.deleteComment(c));
+ }
+
+ toJSON() {
+ return this.comments.map(c => c.toJSON())
+ }
+
+ fromJSON(list) {
+ this.deleteComments();
+ list.map(item => {
+ if (item.type === 'frame') {
+ this.addFrameComment(item.text, item.position, item.links, item.width, item.height)
+ } else {
+ this.addInlineComment(item.text, item.position, item.links);
+ }
+ });
+ }
+
+ destroy() {
+ this.comments.forEach(comment => comment.destroy());
+ }
+}
\ No newline at end of file
diff --git a/core/src/plugins/commentPlugin/style.css b/core/src/plugins/commentPlugin/style.css
new file mode 100644
index 000000000..b33fb6329
--- /dev/null
+++ b/core/src/plugins/commentPlugin/style.css
@@ -0,0 +1,28 @@
+.inline-comment,
+.frame-comment {
+ color: black;
+ padding: 12px;
+ font-size: 140%;
+ color: white;
+ position: absolute;
+ cursor: move;
+ border-radius: 16px;
+}
+
+.frame-comment:focus,
+.inline-comment:focus {
+ outline: none;
+ border-color: #ffd92c;
+}
+
+.inline-comment {
+ z-index: 4;
+ background: #aec4ff;
+ border: 3px solid #aec4ff;
+}
+
+.frame-comment {
+ z-index: -10;
+ background: rgba(15, 80, 255, 0.2);
+ border: 6px solid transparent;
+}
diff --git a/core/src/plugins/commentPlugin/utils.js b/core/src/plugins/commentPlugin/utils.js
new file mode 100644
index 000000000..91bb94667
--- /dev/null
+++ b/core/src/plugins/commentPlugin/utils.js
@@ -0,0 +1,50 @@
+const min = (arr) => arr.length === 0 ? 0 : Math.min(...arr);
+const max = (arr) => arr.length === 0 ? 0 : Math.max(...arr);
+
+export function intersectRect(r1, r2) {
+ return !(
+ r2.left > r1.right ||
+ r2.right < r1.left ||
+ r2.top > r1.bottom ||
+ r2.bottom < r1.top
+ );
+}
+
+export function containsRect(r1, r2) {
+ return (
+ r2.left > r1.left &&
+ r2.right < r1.right &&
+ r2.top > r1.top &&
+ r2.bottom < r1.bottom
+ );
+}
+
+export function nodesBBox(editor, nodes, margin) {
+ const left = min(nodes.map(node => node.position[0])) - margin;
+ const top = min(nodes.map(node => node.position[1])) - margin;
+ const right = max(nodes.map(node => node.position[0] + editor.view.nodes.get(node).el.clientWidth)) + 2 * margin;
+ const bottom = max(nodes.map(node => node.position[1] + editor.view.nodes.get(node).el.clientHeight)) + 2 * margin;
+
+ return {
+ left,
+ right,
+ top,
+ bottom,
+ width: Math.abs(left - right),
+ height: Math.abs(top - bottom),
+ getCenter: () => {
+ return [
+ (left + right) / 2,
+ (top + bottom) / 2
+ ];
+ }
+ };
+}
+
+export function listenWindow(event, handler) {
+ window.addEventListener(event, handler);
+
+ return () => {
+ window.removeEventListener(event, handler);
+ }
+}
\ No newline at end of file
diff --git a/core/src/plugins/debuggerPlugin/index.ts b/core/src/plugins/debuggerPlugin/index.ts
index c68d5b30b..46263322b 100644
--- a/core/src/plugins/debuggerPlugin/index.ts
+++ b/core/src/plugins/debuggerPlugin/index.ts
@@ -17,7 +17,7 @@ function install(
editor.on('componentregister', (component: ThothComponent) => {
const worker = component.worker
- component.worker = (node, inputs, outputs, data, ...args) => {
+ component.worker = async (node, inputs, outputs, data, ...args) => {
node.console = new ThothConsole({
node,
component,
@@ -27,7 +27,7 @@ function install(
})
try {
- const result = worker.apply(component, [
+ const result = await worker.apply(component, [
node,
inputs,
outputs,
diff --git a/core/src/plugins/inspectorPlugin/DataControl.ts b/core/src/plugins/inspectorPlugin/DataControl.ts
index b2a640e4f..9f9639578 100644
--- a/core/src/plugins/inspectorPlugin/DataControl.ts
+++ b/core/src/plugins/inspectorPlugin/DataControl.ts
@@ -18,7 +18,6 @@ export abstract class DataControl {
options: object
icon: string
write: boolean
- //Jake added below
data: Record
constructor({
diff --git a/core/src/plugins/inspectorPlugin/Inspector.ts b/core/src/plugins/inspectorPlugin/Inspector.ts
index 5cbe22c99..704b1f13f 100644
--- a/core/src/plugins/inspectorPlugin/Inspector.ts
+++ b/core/src/plugins/inspectorPlugin/Inspector.ts
@@ -16,6 +16,17 @@ type InspectorConstructor = {
// todo improve this typing
type DataControlData = Record
+export type InspectorData = {
+ name: string
+ nodeId: number
+ dataControls: Record
+ data: Record
+ category?: string
+ info: string
+ deprecated: boolean
+ deprecationMessage: string
+}
+
export class Inspector {
// Stub of function. Can be a nodes catch all onData
cache: Record = {}
@@ -51,7 +62,8 @@ export class Inspector {
control.component = this.component
control.id = uuidv4()
- if (control.defaultValue)
+ // If we gave a dewfault value and there isnt already one on the node, add it.
+ if (control.defaultValue && !this.node.data[control.dataKey])
this.node.data[control.dataKey] = control.defaultValue
list.set(control.dataKey, control)
@@ -173,13 +185,18 @@ export class Inspector {
this.node.data.dataControls = cache
}
+ handleLock(update: Record) {
+ if (!('nodeLocked' in update.data)) return
+ this.node.data.nodeLocked = update.data.nodeLocked
+ }
+
handleData(update: Record) {
- console.log('Handling data!', update)
// store all data controls inside the nodes data
// WATCH in case our graphs start getting quite large.
if (update.dataControls) this.cacheControls(update.dataControls)
const { data } = update
+ this.handleLock(update)
// Send data to a possibel node global handler
// Turned off until the pattern might be useful
@@ -238,7 +255,7 @@ export class Inspector {
get() {}
// returns all data prepared for the pubsub to send it.
- data() {
+ data(): InspectorData {
const dataControls = Array.from(this.dataControls.entries()).reduce(
(acc, [key, val]) => {
const cache = this.node?.data?.dataControls as DataControlData
diff --git a/core/src/plugins/keyCodePlugin/index.ts b/core/src/plugins/keyCodePlugin/index.ts
new file mode 100644
index 000000000..80287b1f1
--- /dev/null
+++ b/core/src/plugins/keyCodePlugin/index.ts
@@ -0,0 +1,25 @@
+import { IRunContextEditor, ThothNode } from '../../../types'
+
+function install(editor: IRunContextEditor) {
+ editor.bind('delete')
+
+ let currentNode: ThothNode | undefined
+
+ editor.on('nodeselect', (node: ThothNode) => {
+ if (currentNode && node.id === currentNode.id) return
+ currentNode = node
+ })
+
+ editor.on('delete', () => {
+ if (!currentNode) return
+ if (currentNode.data.nodeLocked) return
+ editor.removeNode(currentNode)
+ })
+}
+
+const defaultExport = {
+ name: 'keycodePlugin',
+ install,
+}
+
+export default defaultExport
diff --git a/core/src/plugins/modulePlugin/index.ts b/core/src/plugins/modulePlugin/index.ts
index 2846393f6..b47abc0c9 100644
--- a/core/src/plugins/modulePlugin/index.ts
+++ b/core/src/plugins/modulePlugin/index.ts
@@ -2,7 +2,7 @@
import { Engine, NodeEditor, Component, Socket } from 'rete/types'
import { NodeData, WorkerInputs, WorkerOutputs } from 'rete/types/core/data'
-import { ThothNode } from '../../../types'
+import { ChainData, ThothNode } from '../../../types'
import { Module } from './module'
import { ModuleManager } from './module-manager'
import { addIO, removeIO } from './utils'
@@ -21,6 +21,7 @@ export interface IRunContextEditor extends NodeEditor {
type ModuleOptions = {
socket: Socket
nodeType: 'input' | 'output' | 'triggerIn' | 'triggerOut' | 'module'
+ skip?: boolean
}
interface IModuleComponent extends Component {
@@ -43,7 +44,7 @@ function install(
if (!component.module) return
// socket - Rete.Socket instance or function that returns a socket instance
- const { nodeType, socket } = component.module
+ const { nodeType, socket, skip } = component.module
const name = component.name
switch (nodeType) {
@@ -52,6 +53,8 @@ function install(
moduleManager.registerInput(name, socket)
+ if (skip) return
+
component.worker = (
node: NodeData,
inputs: WorkerInputs,
@@ -74,6 +77,8 @@ function install(
moduleManager.registerTriggerOut(name, socket)
+ if (skip) return
+
component.worker = (
node: NodeData,
inputs: WorkerInputs,
@@ -104,6 +109,8 @@ function install(
moduleManager.registerTriggerIn(name, socket)
+ if (skip) return
+
component.worker = (
node: NodeData,
inputs: WorkerInputs,
@@ -125,15 +132,23 @@ function install(
const builder: Function | undefined = component.builder
if (builder) {
- component.updateModuleSockets = (node: ThothNode) => {
+ component.updateModuleSockets = (
+ node: ThothNode,
+ chainData?: ChainData,
+ useSocketName: boolean = false
+ ) => {
const modules = moduleManager.modules
const currentNodeModule = node.data.module as string
- if (!node.data.module || !modules[currentNodeModule]) return
+ if (!modules[currentNodeModule] && !chainData) return
if (!node.data.inputs) node.data.inputs = []
if (!node.data.outputs) node.data.outputs = []
- const data = modules[currentNodeModule].data
+ const data = modules[currentNodeModule]
+ ? modules[currentNodeModule].data
+ : chainData
+
+ if (!data) return
const inputs = moduleManager.getInputs(data)
const outputs = moduleManager.getOutputs(data)
const triggerOuts = moduleManager.getTriggerOuts(data)
@@ -149,7 +164,14 @@ function install(
try {
// The arguments for this are getting bit crazy
- addIO(node, inputs, outputs, triggerOuts, triggerIns)
+ addIO({
+ node,
+ inputs,
+ outputs,
+ triggerOuts,
+ triggerIns,
+ useSocketName,
+ })
} catch (e) {
return runContext.trigger('warn', e)
}
@@ -163,6 +185,8 @@ function install(
const moduleWorker = component.worker
+ if (skip) return
+
component.worker = async (
node: NodeData,
inputs: WorkerInputs,
@@ -189,6 +213,8 @@ function install(
moduleManager.registerOutput(name, socket)
+ if (skip) return
+
component.worker = (
node: NodeData,
inputs: WorkerInputs,
diff --git a/core/src/plugins/modulePlugin/module-manager.ts b/core/src/plugins/modulePlugin/module-manager.ts
index abec20d17..498c6b4c7 100644
--- a/core/src/plugins/modulePlugin/module-manager.ts
+++ b/core/src/plugins/modulePlugin/module-manager.ts
@@ -2,6 +2,7 @@ import { Engine, Socket, Component } from 'rete'
import { Socket as SocketType } from 'rete/types'
import {
+ ChainData,
ModuleType,
ModuleWorkerOutput,
ThothNode,
@@ -11,6 +12,7 @@ import {
import { SocketNameType } from '../../sockets'
import { Module } from './module'
import { extractNodes } from './utils'
+import { NodeData } from 'rete/types/core/data'
interface ModuleComponent extends Component {
run: Function
}
@@ -56,7 +58,7 @@ export class ModuleManager {
}
getSockets(
- data: { nodes: Record },
+ data: ChainData,
typeMap: Map,
defaultName: string
): ModuleSocketType[] {
@@ -72,24 +74,24 @@ export class ModuleManager {
)
}
- getInputs(data: ModuleGraphData): ModuleSocketType[] {
+ getInputs(data: ChainData): ModuleSocketType[] {
return this.getSockets(data, this.inputs, 'input')
}
- getOutputs(data: ModuleGraphData): ModuleSocketType[] {
+ getOutputs(data: ChainData): ModuleSocketType[] {
return this.getSockets(data, this.outputs, 'output')
}
- getTriggerOuts(data: ModuleGraphData): ModuleSocketType[] {
+ getTriggerOuts(data: ChainData): ModuleSocketType[] {
return this.getSockets(data, this.triggerOuts, 'trigger')
}
- getTriggerIns(data: ModuleGraphData) {
+ getTriggerIns(data: ChainData) {
return this.getSockets(data, this.triggerIns, 'trigger')
}
socketFactory(
- node: ThothNode,
+ node: NodeData,
socket: Socket | Function | undefined
): SocketType {
// eslint-disable-next-line no-param-reassign
@@ -119,10 +121,7 @@ export class ModuleManager {
this.outputs.set(name, socket)
}
- getTriggeredNode(
- data: { nodes: Record },
- socketKey: string
- ) {
+ getTriggeredNode(data: ChainData, socketKey: string) {
return extractNodes(data.nodes, this.triggerIns).find(
node => node.data.socketKey === socketKey
)
diff --git a/core/src/plugins/modulePlugin/utils.ts b/core/src/plugins/modulePlugin/utils.ts
index 909136e1a..768eac90d 100644
--- a/core/src/plugins/modulePlugin/utils.ts
+++ b/core/src/plugins/modulePlugin/utils.ts
@@ -1,13 +1,13 @@
import { Input, NodeEditor, Output, Socket } from 'rete'
import { IRunContextEditor } from '.'
-import { DataSocketType, ThothNode } from '../../../types'
+import { ChainData, DataSocketType, ThothNode } from '../../../types'
import { socketNameMap, SocketNameType } from '../../sockets'
import { ModuleSocketType } from './module-manager'
export type ThroughPutType = 'outputs' | 'inputs'
export function extractNodes(
- nodes: Record,
+ nodes: ChainData['nodes'],
map: Map
) {
const names = Array.from(map.keys())
@@ -95,12 +95,21 @@ const updateSockets = (node: ThothNode, sockets: ModuleSocketType[]) => {
})
}
-const addSockets = (
- node: ThothNode,
- sockets: ModuleSocketType[],
- connectionType: 'input' | 'output',
- taskType: 'option' | 'output' = 'output'
-) => {
+type AddSockets = {
+ node: ThothNode
+ sockets: ModuleSocketType[]
+ connectionType: 'input' | 'output'
+ taskType?: 'option' | 'output'
+ useSocketName?: boolean
+}
+
+const addSockets = ({
+ node,
+ sockets,
+ connectionType,
+ taskType = 'output',
+ useSocketName = false,
+}: AddSockets) => {
const uniqueCount = new Set(sockets.map(i => i.name)).size
const currentConnection = node.data[
(connectionType + 's') as ThroughPutType
@@ -131,34 +140,72 @@ const addSockets = (
const currentConnection = node.data[
(connectionType + 's') as ThroughPutType
] as DataSocketType[]
+ const key = useSocketName ? name : socketKey
+
currentConnection.push({
name: name as SocketNameType,
taskType: taskType,
- socketKey: socketKey,
+ socketKey: key,
connectionType: connectionType,
socketType: socketNameMap[socket.name as SocketNameType],
})
node[addMethod](
- new Socket(socketKey, name, socket, taskType === 'option') as Input &
- Output
+ new Socket(key, name, socket, taskType === 'option') as Input & Output
)
if (connectionType === 'output')
- node.inspector.component.task.outputs[socketKey] = taskType
+ node.inspector.component.task.outputs[key] = taskType
})
}
-export function addIO(
- node: ThothNode,
- inputs: ModuleSocketType[],
- outputs: ModuleSocketType[],
- triggerOuts: ModuleSocketType[],
+type AddIO = {
+ node: ThothNode
+ inputs: ModuleSocketType[]
+ outputs: ModuleSocketType[]
+ triggerOuts: ModuleSocketType[]
triggerIns: ModuleSocketType[]
-) {
- if (inputs?.length > 0) addSockets(node, inputs, 'input')
- if (triggerIns?.length > 0) addSockets(node, triggerIns, 'input', 'option')
- if (outputs?.length > 0) addSockets(node, outputs, 'output')
- if (triggerOuts?.length > 0) addSockets(node, triggerOuts, 'output', 'option')
+ useSocketName: boolean
+}
+
+export function addIO({
+ node,
+ inputs,
+ outputs,
+ triggerOuts,
+ triggerIns,
+ useSocketName,
+}: AddIO) {
+ // This is SOOOOO messy.
+ if (inputs?.length > 0)
+ addSockets({
+ node,
+ sockets: inputs,
+ connectionType: 'input',
+ useSocketName,
+ })
+ if (triggerIns?.length > 0)
+ addSockets({
+ node,
+ sockets: triggerIns,
+ connectionType: 'input',
+ taskType: 'option',
+ useSocketName,
+ })
+ if (outputs?.length > 0)
+ addSockets({
+ node,
+ sockets: outputs,
+ connectionType: 'output',
+ useSocketName,
+ })
+ if (triggerOuts?.length > 0)
+ addSockets({
+ node,
+ sockets: triggerOuts,
+ connectionType: 'output',
+ taskType: 'option',
+ useSocketName,
+ })
}
// here we can only remove the inputs and outputs that are not supposed to be on the node.
diff --git a/core/src/plugins/selectionPlugin/index.ts b/core/src/plugins/selectionPlugin/index.ts
new file mode 100644
index 000000000..f3a5a25dd
--- /dev/null
+++ b/core/src/plugins/selectionPlugin/index.ts
@@ -0,0 +1,294 @@
+import { NodeEditor } from 'rete'
+
+declare module 'rete/types/events' {
+ interface EventsTypes {
+ multiselection: boolean
+ }
+}
+
+export interface Cfg {
+ selectionArea?: {
+ className?: string
+ }
+ selectionMode?: {
+ className?: string
+ }
+ enabled?: boolean
+ mode?: [string, string]
+}
+
+export interface Position {
+ x: number
+ y: number
+}
+
+export interface Size {
+ width: number
+ height: number
+}
+
+const MOUSE_LEFT_BUTTON = 0
+
+function drawSelectionArea(
+ area: HTMLDivElement,
+ position: Position,
+ size: Size
+) {
+ area.style.left = `${position.x}px`
+ area.style.top = `${position.y}px`
+ area.style.width = `${size.width}px`
+ area.style.height = `${size.height}px`
+ area.style.opacity = '0.2'
+}
+
+function cleanSelectionArea(area: HTMLDivElement) {
+ area.style.left = '0px'
+ area.style.top = '0px'
+ area.style.width = '0px'
+ area.style.height = '0px'
+ area.style.opacity = '0'
+}
+
+function applyTransform(
+ translateX: number,
+ translateY: number,
+ scale: number,
+ position: Position
+): Position {
+ return {
+ x: (position.x - translateX) / scale,
+ y: (position.y - translateY) / scale,
+ }
+}
+
+function install(editor: NodeEditor, params: Cfg) {
+ editor.bind('multiselection')
+
+ const cfg = params ?? {}
+
+ // #region
+ let accumulate = false
+ let pressing = false
+ const selection: [Position, Position] = [
+ { x: 0, y: 0 },
+ { x: 0, y: 0 },
+ ]
+ // #endregion
+
+ const canvas = editor.view.container.firstElementChild as HTMLDivElement
+
+ // #region
+ const getNodesFromSelectionArea = () => {
+ if (!cfg.enabled) {
+ return []
+ }
+
+ const {
+ x: translateX,
+ y: translateY,
+ k: scale,
+ } = editor.view.area.transform
+ const areaStart = applyTransform(translateX, translateY, scale, {
+ ...selection[0],
+ })
+ const areaEnd = applyTransform(translateX, translateY, scale, {
+ ...selection[1],
+ })
+
+ if (areaEnd.x < areaStart.x) {
+ const num = areaStart.x
+ areaStart.x = areaEnd.x
+ areaEnd.x = num
+ }
+ if (areaEnd.y < areaStart.y) {
+ const num = areaStart.y
+ areaStart.y = areaEnd.y
+ areaEnd.y = num
+ }
+
+ return editor.nodes.filter(item => {
+ const [x, y] = item.position
+ return (
+ x >= areaStart.x && x <= areaEnd.x && y >= areaStart.y && y <= areaEnd.y
+ )
+ })
+ }
+ // #endregion
+
+ // #region
+ const selectionArea = document.createElement('div')
+ selectionArea.classList.add('selection-area')
+ selectionArea.style.position = 'absolute'
+ selectionArea.style.boxSizing = 'border-box'
+ selectionArea.style.pointerEvents = 'none'
+ cleanSelectionArea(selectionArea)
+
+ const selectionMode = document.createElement('div')
+ selectionMode.classList.add('selection-mode')
+ selectionMode.style.position = 'absolute'
+ selectionMode.style.pointerEvents = 'none'
+ selectionMode.innerText = (cfg.mode ?? [])[0] ?? '单选模式'
+ // #endregion
+
+ // #region
+ {
+ const className = cfg.selectionArea?.className
+ if (className) {
+ selectionMode.classList.add(...className.split(' '))
+ } else {
+ selectionArea.style.backgroundColor = '#E3F2FD'
+ selectionArea.style.border = 'solid 1px #42A5F5'
+ selectionArea.style.borderRadius = '4px'
+ }
+ }
+ {
+ const className = cfg.selectionMode?.className
+ if (className) {
+ selectionMode.classList.add(...className.split(' '))
+ } else {
+ selectionMode.style.top = '16px'
+ selectionMode.style.left = '16px'
+ }
+ }
+ // #endregion
+
+ const handleMouseDown = (e: MouseEvent) => {
+ if (!cfg.enabled) {
+ return
+ }
+
+ if (e.button !== MOUSE_LEFT_BUTTON) {
+ return
+ }
+ if (!e.shiftKey) {
+ return
+ }
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ pressing = true
+
+ canvas.style.pointerEvents = 'none'
+ Array.from(canvas.querySelectorAll('path')).forEach(item => {
+ ;(item as SVGElement).style.pointerEvents = 'none'
+ })
+
+ cleanSelectionArea(selectionArea)
+ selection[0] = { x: e.offsetX, y: e.offsetY }
+ selection[1] = { x: e.offsetX, y: e.offsetY }
+ }
+
+ const handleMouseUp = (e: MouseEvent) => {
+ //e.preventDefault()
+ //e.stopPropagation()
+
+ const selectedNodes = getNodesFromSelectionArea()
+
+ pressing = false
+
+ canvas.style.pointerEvents = 'auto'
+ Array.from(canvas.querySelectorAll('path')).forEach(item => {
+ ;(item as SVGElement).style.pointerEvents = 'auto'
+ })
+
+ cleanSelectionArea(selectionArea)
+ selection[0] = { x: 0, y: 0 }
+ selection[1] = { x: 0, y: 0 }
+
+ if (!cfg.enabled) {
+ return
+ }
+ if (!e.shiftKey) {
+ return
+ }
+
+ selectedNodes.forEach(node => {
+ editor.selectNode(node, accumulate)
+ })
+ }
+
+ const handleMouseMove = (e: MouseEvent) => {
+ if (!cfg.enabled) {
+ return
+ }
+ if (!e.shiftKey) {
+ return
+ }
+ if (!pressing) {
+ return
+ }
+ if (editor.selected.list.length > 0) {
+ return
+ }
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ selection[1] = { x: e.offsetX, y: e.offsetY }
+
+ const size: Size = {
+ width: Math.abs(selection[1].x - selection[0].x),
+ height: Math.abs(selection[1].y - selection[0].y),
+ }
+ const position = { ...selection[0] }
+
+ if (selection[1].x < selection[0].x) {
+ position.x = selection[1].x
+ }
+ if (selection[1].y < selection[0].y) {
+ position.y = selection[1].y
+ }
+
+ drawSelectionArea(selectionArea, position, size)
+ }
+ // #endregion
+
+ // #region
+ editor.view.container.style.position = 'relative'
+ editor.view.container.appendChild(selectionArea)
+ editor.view.container.appendChild(selectionMode)
+
+ editor.view.container.addEventListener('mousedown', handleMouseDown)
+ editor.view.container.addEventListener('mouseup', handleMouseUp)
+ editor.view.container.addEventListener('mouseout', handleMouseUp)
+ editor.view.container.addEventListener('mousemove', handleMouseMove)
+
+ editor.on('destroy', () => {
+ editor.view.container.removeChild(selectionArea)
+ editor.view.container.removeChild(selectionMode)
+
+ editor.view.container.removeEventListener('mousedown', handleMouseDown)
+ editor.view.container.removeEventListener('mouseup', handleMouseUp)
+ editor.view.container.removeEventListener('mouseout', handleMouseUp)
+ editor.view.container.removeEventListener('mousemove', handleMouseMove)
+ })
+
+ editor.on('multiselection', enabled => {
+ cfg.enabled = enabled
+ })
+
+ editor.on('keydown', e => {
+ if (e.shiftKey) {
+ accumulate = true
+ selectionMode.innerText = (cfg.mode ?? [])[1] ?? 'multi'
+ }
+ })
+
+ editor.on('keyup', () => {
+ if (accumulate) {
+ accumulate = false
+ selectionMode.innerText = (cfg.mode ?? [])[0] ?? 'single'
+ }
+ })
+
+ editor.on('translate', () => {
+ return !accumulate
+ })
+ // #endregion
+}
+
+export default {
+ name: 'rete-selection-plugin',
+ install,
+}
diff --git a/core/src/plugins/taskPlugin/index.ts b/core/src/plugins/taskPlugin/index.ts
index f7f9483ad..4c7d5b920 100644
--- a/core/src/plugins/taskPlugin/index.ts
+++ b/core/src/plugins/taskPlugin/index.ts
@@ -1,12 +1,16 @@
-import { NodeEditor } from 'rete'
+import { Component } from 'rete'
import { NodeData } from 'rete/types/core/data'
-import { ThothWorkerInputs } from '../../../types'
+import { ThothEditor, ThothWorkerInputs } from '../../../types'
import { ThothComponent } from '../../thoth-component'
import { Task } from './task'
-function install(editor: NodeEditor) {
- editor.on('componentregister', (component: ThothComponent) => {
+function install(editor: ThothEditor) {
+ editor.on('componentregister', (_component: Component) => {
+ editor.tasks = []
+
+ const component = _component as unknown as ThothComponent
+
if (!component.task)
throw new Error('Task plugin requires a task property in component')
if (component.task.outputs.constructor !== Object)
@@ -80,6 +84,9 @@ function install(editor: NodeEditor) {
Object.keys(allOutputs).forEach(key => {
outputs[key] = { type: taskOptions.outputs[key], key, task }
})
+
+ // Probably need to reset this when spells change
+ editor.tasks.push(task)
}
})
}
diff --git a/core/src/plugins/taskPlugin/task.ts b/core/src/plugins/taskPlugin/task.ts
index d9bd9fc3a..98f854a30 100644
--- a/core/src/plugins/taskPlugin/task.ts
+++ b/core/src/plugins/taskPlugin/task.ts
@@ -79,6 +79,7 @@ export class Task {
reset() {
this.outputData = null
+ this.closed = []
}
async run(data: unknown = {}, options: RunOptions = {}) {
diff --git a/core/src/thoth-component.ts b/core/src/thoth-component.ts
index 7f613ef65..70e02f7a2 100644
--- a/core/src/thoth-component.ts
+++ b/core/src/thoth-component.ts
@@ -1,7 +1,7 @@
-import { Node, NodeEditor, Socket } from 'rete'
+import { Node, Socket } from 'rete'
-import { PubSubBase, ThothNode } from '../types'
-import { EngineContext, ThothEngineComponent } from './engine'
+import { PubSubBase, ThothEditor, ThothNode } from '../types'
+import { ThothEngineComponent } from './engine'
import { Task, TaskOptions } from './plugins/taskPlugin/task'
// Note: We do this so Typescript knows what extra properties we're
@@ -14,12 +14,6 @@ export type PubSubContext = {
PubSub: PubSubBase
}
-class ThothReteNodeEditor extends NodeEditor {
- pubSub: PubSubContext
- thoth: EngineContext
- tab: unknown
-}
-
export interface ThothTask extends Task {
outputs?: { [key: string]: string }
init?: (task?: ThothTask, node?: ThothNode) => void
@@ -29,6 +23,7 @@ export interface ThothTask extends Task {
export interface ModuleOptions {
nodeType: 'input' | 'output' | 'triggerIn' | 'triggerOut' | 'module'
socket?: Socket
+ skip?: boolean
}
export abstract class ThothComponent<
@@ -38,12 +33,14 @@ export abstract class ThothComponent<
task: TaskOptions
_task: ThothTask
// Original Class: https://github.com/latitudegames/rete/blob/master/src/component.ts
- editor: ThothReteNodeEditor | null = null
+ editor: ThothEditor | null = null
data: unknown = {}
category: string
info: string
display: boolean
deprecated: boolean = false
+ dev: boolean = false
+ hide: boolean = false
deprecationMessage: string | undefined
module: ModuleOptions
contextMenuName: string | undefined
diff --git a/core/src/utils/SpellRunner.ts b/core/src/utils/SpellRunner.ts
new file mode 100644
index 000000000..b72b39ade
--- /dev/null
+++ b/core/src/utils/SpellRunner.ts
@@ -0,0 +1,151 @@
+import {
+ getComponents,
+ initSharedEngine,
+} from '@latitudegames/thoth-core/server'
+import {
+ EngineContext,
+ ChainData,
+ ModuleComponent,
+ Spell as SpellType,
+} from '../../types'
+import { extractNodes, ThothEngine } from '../engine'
+import { Module } from '../plugins/modulePlugin/module'
+import { extractModuleInputKeys } from './chainHelpers'
+
+type RunSpellConstructor = {
+ thothInterface: EngineContext
+}
+
+class SpellRunner {
+ engine: ThothEngine
+ currentSpell!: SpellType
+ module: Module
+ thothInterface: EngineContext
+
+ constructor({ thothInterface }: RunSpellConstructor) {
+ // Initialize the engine
+ this.engine = initSharedEngine({
+ name: 'demo@0.1.0',
+ components: getComponents(),
+ server: true,
+ modules: {},
+ }) as ThothEngine
+
+ // Set up the module to interface with the runtime processes
+ this.module = new Module()
+
+ // Set the interface that this runner will use when running workers
+ this.thothInterface = thothInterface
+
+ // We should probably load up here all the "modules" the spell needds to run
+ // This would basicallyt be an array of spells pulled from the DB
+ }
+
+ // getter method for all triggers ins of the loaded spell
+ get triggerIns() {
+ return this.engine.moduleManager.triggerIns
+ }
+
+ get context() {
+ return {
+ module: this.module,
+ thoth: this.thothInterface,
+ silent: true,
+ }
+ }
+
+ get inputKeys() {
+ return extractModuleInputKeys(this.currentSpell.chain)
+ }
+
+ get outputData() {
+ const rawOutputs = {}
+ this.module.write(rawOutputs)
+ return this._formatOutputs(rawOutputs)
+ }
+
+ private _getComponent(componentName: string) {
+ return this.engine.components.get(componentName)
+ }
+
+ private _loadInputs(inputs: Record) {
+ this.module.read(inputs)
+ }
+
+ private _formatOutputs(rawOutputs: Record) {
+ const outputs = {} as Record
+ const graph = this.currentSpell.chain
+
+ Object.values(graph.nodes)
+ .filter((node: any) => {
+ return node.name.includes('Output')
+ })
+ .forEach((node: any) => {
+ outputs[(node as any).data.name as string] =
+ rawOutputs[(node as any).data.socketKey as string]
+ })
+
+ return outputs
+ }
+
+ /**
+ * temporary method until we have a better way to target specific nodes
+ * this is basically just using a "Default" trigger in
+ * and does not support multipel triggers in to a spell yet
+ */
+ private _getFirstNodeTrigger() {
+ const extractedNodes = extractNodes(
+ this.currentSpell.chain.nodes,
+ this.triggerIns
+ )
+ return extractedNodes[0]
+ }
+
+ private _resetTasks() {
+ this.engine.tasks.forEach(t => t.reset())
+ }
+
+ async loadSpell(spell: SpellType) {
+ this.currentSpell = spell
+
+ // We process the graph for the new spell which will set up all the task workers
+ await this.engine.process(spell.chain as ChainData, null, this.context)
+ }
+
+ /**
+ * Main spell runner. Processes inputs, gets the right component that starts the
+ * running. Would be even better iof we just took a node identifier, got its
+ * component, and ran the one triggered rather than this slightly hacky hard coded
+ * method.
+ */
+ async runComponent(inputs: Record, componentName: string) {
+ // ensaure we run from a clean sloate
+ this._resetTasks()
+
+ // laod the inputs into module memory
+ this._loadInputs(inputs)
+
+ const component = this._getComponent(componentName) as ModuleComponent
+ const triggeredNode = this._getFirstNodeTrigger()
+
+ // this running is where the main "work" happens.
+ // I do wonder whether we could make this even more elegant by having the node
+ // subscribe to a run pubsub and then we just use that. This would treat running
+ // from a trigger in node like any other data stream. Or even just pass in socket IO.
+ try {
+ await component.run(triggeredNode)
+ return this.outputData
+ } catch (err) {
+ console.log('err', err)
+ }
+ }
+
+ /**
+ * temporary function to be backwards compatible with current use of run spell
+ */
+ async defaultRun(inputs: Record) {
+ return this.runComponent(inputs, 'Module Trigger In')
+ }
+}
+
+export default SpellRunner
diff --git a/core/src/utils/chainHelpers.ts b/core/src/utils/chainHelpers.ts
new file mode 100644
index 000000000..2d6bf16c7
--- /dev/null
+++ b/core/src/utils/chainHelpers.ts
@@ -0,0 +1,25 @@
+import { NodesData } from 'rete/types/core/data'
+import { ChainData, NodeData } from '../../types'
+
+/**
+ * extracts all module inputs based upon a given key
+ */
+export const extractModuleInputKeys = (data: ChainData) =>
+ Object.values(data.nodes).reduce((inputKeys, node: NodeData) => {
+ if (node.name !== 'Universal Input') return inputKeys
+ if (node.data.name && !node.data.useDefault)
+ inputKeys.push(node.data.name as string)
+
+ return inputKeys
+ }, [] as string[])
+
+/**
+ * Extracts nodes from a map of nodes
+ */
+export function extractNodes(nodes: NodesData, map: Set) {
+ const names = Array.from(map.keys())
+ return Object.keys(nodes)
+ .filter(k => names.includes(nodes[k].name))
+ .map(k => nodes[k])
+ .sort((n1, n2) => n1.position[1] - n2.position[1])
+}
diff --git a/core/src/utils/modelHelper.ts b/core/src/utils/modelHelper.ts
deleted file mode 100644
index 517048b7e..000000000
--- a/core/src/utils/modelHelper.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-export const modelMap = {
- gptj: {
- name: 'GPT-J',
- model: 'gpt-j-6b-story-gutenberg-rw-bibliotik-raw',
- modelSource: 'coreweave',
- text: 'A long time ago, in a galaxy far far away there was',
- length: 45,
- topP: 0.9,
- n: 4,
- temperature: 1,
- universalFormat: true,
- },
- jurassicJumbo: {
- name: 'Jurassic Jumbo',
- model: 'j1-jumbo',
- modelSource: 'ai21',
- prompt: 'A long time ago, in a galaxy far far away there was',
- maxTokens: 45,
- n: 3,
- temperature: 1,
- stop: '\n',
- universalFormat: true,
- },
- jurassicLarge: {
- name: 'Jurassic Large',
- model: 'j1-large',
- modelSource: 'ai21',
- prompt: 'A long time ago, in a galaxy far far away there was',
- maxTokens: 45,
- n: 3,
- temperature: 1,
- stop: '\n',
- universalFormat: true,
- },
- openai: {
- modelSource: 'openai',
- model: 'davinci',
- prompt: 'Once upon a time in a forgotten forest',
- temperature: 0.7,
- maxTokens: 120,
- stop: '\n',
- n: 3,
- universalFormat: true,
- },
- forefront: {
- name: 'forefront',
- modelSource: 'forefront',
- model: 'forefront model',
- prompt: 'A long time ago, in a galaxy far far away there was',
- maxTokens: 50,
- topP: 0.9,
- n: 2,
- universalFormat: true,
- temperature: 1,
- },
-}
diff --git a/core/src/utils/nodeHelpers.ts b/core/src/utils/nodeHelpers.ts
new file mode 100644
index 000000000..690924bec
--- /dev/null
+++ b/core/src/utils/nodeHelpers.ts
@@ -0,0 +1,19 @@
+import { NodeData } from '../../types'
+
+type Inputs = {
+ socketKey: string
+ name: string
+}
+
+type Outputs = Inputs
+
+export const inputNameFromSocketKey = (node: NodeData, socketKey: string) => {
+ return (node.data.inputs as Inputs[]).find(
+ input => input.socketKey === socketKey
+ )?.name
+}
+
+export const socketKeyFromOutputName = (node: NodeData, name: string) => {
+ return (node.data.outputs as Outputs[]).find(output => output.name === name)
+ ?.socketKey
+}
diff --git a/core/src/utils/runChain.ts b/core/src/utils/runChain.ts
new file mode 100644
index 000000000..78085832c
--- /dev/null
+++ b/core/src/utils/runChain.ts
@@ -0,0 +1,95 @@
+import {
+ EngineContext,
+ ChainData,
+ ModuleComponent,
+ NodeData,
+ Subspell,
+} from '../../types'
+import { ThothEngine } from '../engine'
+import { Module } from '../plugins/modulePlugin/module'
+import { extractNodes } from './chainHelpers'
+
+type RunChainArguments = {
+ graph: ChainData
+ inputs: Record
+ thoth: EngineContext
+ engine: ThothEngine
+ subspells?: Subspell[]
+}
+
+function getFirstNodeTrigger(data: ChainData, map: Set) {
+ const extractedNodes = extractNodes(data.nodes, map)
+ return extractedNodes[0]
+}
+
+export const runChain = async ({
+ graph,
+ inputs,
+ thoth,
+ engine,
+ subspells,
+}: RunChainArguments) => {
+ // The module is an interface that the module system uses to write data to
+ // used internally by the module plugin, and we make use of it here too.
+ // TODO: Test runing nested modules and watch out for unexpected behaviour
+ // when child modules overwrite this with their own.
+
+ const module = new Module()
+
+ // Parse array of modules into a map of modules by module name
+ const subspellMap = subspells?.reduce((subspellList, subspell) => {
+ subspellList[subspell.name] = subspell
+ return subspellList
+ }, {} as Record)
+
+ // Update the modules available in the module manager during the graph run time
+ engine.moduleManager.setModules(subspellMap)
+
+ // Eventual outputs of running the Spell
+ const rawOutputs = {} as Record
+
+ //Attaching inputs to the module, which are passed in when the engine runs.
+ // you can see this at work in the 'workerInputs' function of module-manager
+ // work inputs worker reads from the module inputs via the key in node.data.name
+ // important to note: even single string values are wrapped in arrays due to match the client editor format
+ module.read(inputs)
+
+ // ThothContext: map of services expected by Thoth components,
+ // allowing client and server provide different sets of helpers that match the common interface
+
+ // EngineContext passed down into the engine and is used by workers.
+ const context = {
+ module,
+ thoth,
+ silent: true,
+ }
+ // Engine process to set up the tasks and prime the system for the first 'run' command.
+ await engine?.process(graph as any, null, context)
+
+ // Collect all the "trigger ins" that the module manager has gathered
+ const { triggerIns } = engine.moduleManager
+
+ // Standard default component to start the serverside run sequence from, which has the run function on it.
+ const component = engine?.components.get(
+ 'Module Trigger In'
+ ) as ModuleComponent
+
+ // Defaulting to the first node trigger to start our "run"
+ const triggeredNode = getFirstNodeTrigger(graph, triggerIns)
+
+ await component?.run(triggeredNode)
+ // Write all the raw data that was output by the module run to an object
+ module.write(rawOutputs)
+
+ const formattedOutputs: Record = {}
+
+ // Format raw outputs based on the names assigned to Module Outputs node data in the graph
+ Object.values(graph.nodes)
+ .filter(node => node.name === 'Module Output' || node.name === 'Output')
+ .forEach((node: NodeData) => {
+ formattedOutputs[node.data.name as string] =
+ rawOutputs[node.data.socketKey as string]
+ })
+
+ return formattedOutputs
+}
diff --git a/core/types.ts b/core/types.ts
index 9f517d248..9f301869b 100644
--- a/core/types.ts
+++ b/core/types.ts
@@ -11,12 +11,78 @@ import {
} from 'rete/types/core/data'
import { Inspector } from './src/plugins/inspectorPlugin/Inspector'
-import { ModuleGraphData } from './src/plugins/modulePlugin/module-manager'
import { TaskOutputTypes } from './src/plugins/taskPlugin/task'
import { SocketNameType, SocketType } from './src/sockets'
-import { EngineContext } from './src/engine'
import { ThothTask } from './src/thoth-component'
import { ThothConsole } from './src/plugins/debuggerPlugin/ThothConsole'
+import { Data } from 'rete/types/core/data'
+
+export { ThothEditor } from './src/editor'
+
+export type { InspectorData } from './src/plugins/inspectorPlugin/Inspector'
+
+export type ImageType = {
+ id: string
+ captionId: string
+ imageCaption: string
+ imageUrl: string
+ tag: string
+ score: number | string
+}
+
+export type ImageCacheResponse = {
+ images: ImageType[]
+}
+
+export type EngineContext = {
+ completion: (
+ body: ModelCompletionOpts
+ ) => Promise
+ getCurrentGameState: () => Record
+ updateCurrentGameState: (update: Record) => void
+ enkiCompletion: (
+ taskName: string,
+ inputs: string[] | string
+ ) => Promise<{ outputs: string[] }>
+ huggingface: (
+ model: string,
+ request: string
+ ) => Promise<{ error?: unknown; [key: string]: unknown }>
+ runSpell: (
+ flattenedInputs: Record,
+ spellId: string,
+ state: Record
+ ) => Record
+ readFromImageCache: (
+ caption: string,
+ cacheTag?: string,
+ topK?: number
+ ) => Promise
+ processCode: (
+ code: unknown,
+ inputs: ThothWorkerInputs,
+ data: Record
+ ) => void
+}
+
+export type EventPayload = Record
+
+export interface EditorContext extends EngineContext {
+ sendToPlaytest: (data: string) => void
+ sendToInspector: (data: EventPayload) => void
+ sendToDebug: (data: EventPayload) => void
+ onInspector: (node: ThothNode, callback: Function) => Function
+ onPlaytest: (callback: Function) => Function
+ onDebug: (node: NodeData, callback: Function) => Function
+ clearTextEditor: () => void
+ getCurrentGameState: () => Record
+ updateCurrentGameState: (update: EventPayload) => void
+ processCode: (
+ code: unknown,
+ inputs: ThothWorkerInputs,
+ data: Record
+ ) => void
+}
export type EventsTypes = {
run: void
@@ -33,8 +99,19 @@ export type EventsTypes = {
resetconnection: void
}
+export interface Spell {
+ id?: string
+ user?: Record | null | undefined
+ name: string
+ chain: ChainData
+ // Spells: Module[]
+ gameState: Record
+ createdAt?: number
+ updatedAt?: number
+}
+
export interface IRunContextEditor extends NodeEditor {
- thoth: EngineContext
+ thoth: EditorContext
abort: Function
}
@@ -61,7 +138,7 @@ export type ThothNode = Node & {
export type ModuleType = {
id: string
name: string
- data: ModuleGraphData
+ data: ChainData
createdAt: number
updatedAt: number
}
@@ -101,6 +178,8 @@ export type OpenAIResponse = {
finish_reason: string
}
+export type Subspell = { name: string; id: string; data: ChainData }
+
export type ModuleComponent = Component & {
run: Function
}
@@ -124,6 +203,8 @@ export type NodeOutputs = {
}
}
+export type ChainData = Data
+
export type NodeData = ReteNodeData & {
fewshot?: string
display: Function
@@ -140,10 +221,10 @@ export type NodeData = ReteNodeData & {
// position: number[]
// }
-export type Spell = {
- id: string
- nodes: Record
-}
+// export type Spell = {
+// id: string
+// nodes: Record
+// }
export type ThothReteInput = {
type: TaskOutputTypes
@@ -159,8 +240,9 @@ export type TaskOutput = {
}
export type ModuleWorkerOutput = WorkerOutputs & {
- [key: string]: string | string[]
+ [key: string]: any
}
+
export type ThothWorkerInput = string | unknown | unknown[]
export type ThothWorkerInputs = { [key: string]: ThothWorkerInput[] }
export type ThothWorkerOutputs = WorkerOutputs & {
diff --git a/netlify.toml b/netlify.toml
index 13e64e2fb..19ef49149 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -11,8 +11,19 @@
to = "/index.html"
status = 200
+# ALL DEPLOY PREVIEWS
[[context.deploy-preview.plugins]]
package = "/netlify/plugins/conditional-canary"
[context.deploy-preview.environment]
- REACT_APP_API_URL="https://latitude-api-staging.herokuapp.com"
\ No newline at end of file
+ REACT_APP_API_URL="https://latitude-api-staging.herokuapp.com"
+
+# STAGING DEPLOYMENT
+[[context.staging.plugins]]
+ package = "/netlify/plugins/staging-canary"
+
+[context.staging.environment]
+ REACT_APP_LAPI_ROOT_URL_PROD="https://latitude-api-staging.herokuapp.com"
+ REACT_APP_API_URL="https://latitude-api-staging.herokuapp.com"
+ REACT_APP_SITE_ROOT_URL_PROD="https://staging.thoth.latitude.io"
+ REACT_APP_OAUTH_CLIENT_ID="a89bb9dc-074c-4376-a5a4-a48c24bc4c42"
\ No newline at end of file
diff --git a/netlify/plugins/staging-canary/index.js b/netlify/plugins/staging-canary/index.js
new file mode 100644
index 000000000..1be3e5bf5
--- /dev/null
+++ b/netlify/plugins/staging-canary/index.js
@@ -0,0 +1,5 @@
+module.exports = {
+ onPreBuild: ({ netlifyConfig, utils: { git } }) => {
+ netlifyConfig.build.command = `cd client && yarn add @latitudegames/thoth-core@canary && cd .. && ${netlifyConfig.build.command}`
+ },
+}
diff --git a/netlify/plugins/staging-canary/manifest.yml b/netlify/plugins/staging-canary/manifest.yml
new file mode 100644
index 000000000..0e87f3f7a
--- /dev/null
+++ b/netlify/plugins/staging-canary/manifest.yml
@@ -0,0 +1 @@
+name: staging-canary
diff --git a/ot-notes.md b/ot-notes.md
new file mode 100644
index 000000000..13e650568
--- /dev/null
+++ b/ot-notes.md
@@ -0,0 +1,10 @@
+Important operations
+
+- delete node
+- add node
+- modify node
+ - node translated
+ - connection added
+ - connection removed
+ - data updated
+ - socket added/removed
diff --git a/package.json b/package.json
index 227df424d..34e73dbbd 100644
--- a/package.json
+++ b/package.json
@@ -12,13 +12,15 @@
"workspaces": {
"packages": [
"client",
- "core"
+ "core",
+ "sharedb"
]
},
"scripts": {
"start:core": "lerna exec --scope @latitudegames/thoth-core -- yarn start",
"start:client": "lerna exec --scope @thoth/client -- yarn start",
- "start": "concurrently \"yarn start:core\" \"sleep 15s && yarn start:client\"",
+ "start:sharedb": "lerna exec --scope @thoth/sharedb -- yarn start",
+ "start": "run-p start:core start:client",
"lint": "lerna run lint --parallel",
"lint:fix": "lerna run lint:fix --parallel",
"build": "copyfiles LICENSE.txt client && lerna exec --scope @thoth/client -- yarn build",
@@ -36,13 +38,16 @@
"lerna": "^4.0.0"
},
"dependencies": {
+ "@plotdb/json0": "^0.0.5",
"@typescript-eslint/eslint-plugin": "^4.31.1",
"@typescript-eslint/parser": "^4.31.1",
- "concurrently": "^6.2.1",
"copyfiles": "^2.4.1",
+ "diff-match-patch": "^1.0.5",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-prettier": "^4.0.0",
+ "json0-ot-diff": "^1.1.2",
+ "npm-run-all": "^4.1.5",
"prettier": "^2.4.1"
}
}
diff --git a/sharedb/@types/@teamwork/websocket-json-stream.d.ts b/sharedb/@types/@teamwork/websocket-json-stream.d.ts
new file mode 100644
index 000000000..4a56e5fd4
--- /dev/null
+++ b/sharedb/@types/@teamwork/websocket-json-stream.d.ts
@@ -0,0 +1 @@
+declare module '@teamwork/websocket-json-stream'
diff --git a/sharedb/index.ts b/sharedb/index.ts
new file mode 100644
index 000000000..debb352fb
--- /dev/null
+++ b/sharedb/index.ts
@@ -0,0 +1,21 @@
+import express from 'express'
+import http from 'http'
+import WebSocket from 'ws'
+import ShareDB from 'sharedb'
+import WebSocketJSONStream from '@teamwork/websocket-json-stream'
+
+const app = express()
+const server = http.createServer(app)
+const webSocketServer = new WebSocket.Server({ server: server })
+
+const backend = new ShareDB()
+
+webSocketServer.on('connection', webSocket => {
+ console.log('SHARE DB RUNNING!')
+ const stream = new WebSocketJSONStream(webSocket)
+ backend.listen(stream)
+})
+
+server.listen(8080, () => {
+ console.log('server listening on port 8080')
+})
diff --git a/sharedb/package.json b/sharedb/package.json
new file mode 100644
index 000000000..cd2190e16
--- /dev/null
+++ b/sharedb/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "@thoth/sharedb",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "start": "nodemon index.ts",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@teamwork/websocket-json-stream": "^2.0.0",
+ "express": "^4.17.3",
+ "sharedb": "^2.2.5",
+ "ws": "^8.5.0"
+ },
+ "devDependencies": {
+ "@types/express": "^4.17.13",
+ "@types/sharedb": "^2.2.0",
+ "@types/ws": "^8.5.3",
+ "nodemon": "^2.0.15"
+ }
+}
diff --git a/sharedb/tsconfig.json b/sharedb/tsconfig.json
new file mode 100644
index 000000000..5b169a6c3
--- /dev/null
+++ b/sharedb/tsconfig.json
@@ -0,0 +1,41 @@
+{
+ "compileOnSave": true,
+ "compilerOptions": {
+ "experimentalDecorators": true,
+ "allowJs": true,
+ "jsx": "react-jsx",
+
+ "allowUnreachableCode": false,
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "moduleResolution": "node",
+ "module": "commonjs",
+ "outDir": "dist",
+ "removeComments": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "target": "ES2021",
+ "typeRoots": ["./@types", "node_modules/@types"],
+ "types": ["node", "jest"],
+ "baseUrl": ".",
+ "paths": {
+ "gpt-3-encoder": ["@types/gpt-3-encoder.d.ts"],
+ "ot-json0": ["@types/ot-json0.d.ts"],
+ "@latitudegames/thoth-core": ["@types/thoth-core.d.ts"],
+ "@teamwork/websocket-json-stream": [
+ "@types/@teamwork/websocket-json-stream"
+ ]
+ },
+ "noImplicitAny": true,
+ "strictNullChecks": true
+ },
+ "include": [
+ "hocs/**/*.ts",
+ "jobs/**/*.ts",
+ "src/**/*.ts",
+ "@types/**/*.d.ts",
+ "__tests__/**/*.ts",
+ "index.ts"
+ ]
+}
diff --git a/yarn.lock b/yarn.lock
index 817ae02d7..06ed3c673 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -263,6 +263,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
+"@babel/helper-plugin-utils@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5"
+ integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==
+
"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f"
@@ -546,6 +551,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
+"@babel/plugin-syntax-jsx@^7.12.13":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665"
+ integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
+
"@babel/plugin-syntax-jsx@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"
@@ -1025,27 +1037,20 @@
core-js-pure "^3.16.0"
regenerator-runtime "^0.13.4"
-"@babel/runtime@7.14.6":
- version "7.14.6"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d"
- integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==
- dependencies:
- regenerator-runtime "^0.13.4"
-
-"@babel/runtime@7.9.6":
- version "7.9.6"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f"
- integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==
- dependencies:
- regenerator-runtime "^0.13.4"
-
-"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a"
integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.17.2":
+ version "7.17.8"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2"
+ integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@^7.15.4", "@babel/template@^7.3.3":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
@@ -1104,6 +1109,24 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3"
integrity sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==
+"@emotion/babel-plugin@^11.7.1":
+ version "11.7.2"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz#fec75f38a6ab5b304b0601c74e2a5e77c95e5fa0"
+ integrity sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/plugin-syntax-jsx" "^7.12.13"
+ "@babel/runtime" "^7.13.10"
+ "@emotion/hash" "^0.8.0"
+ "@emotion/memoize" "^0.7.5"
+ "@emotion/serialize" "^1.0.2"
+ babel-plugin-macros "^2.6.1"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^4.0.0"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+ stylis "4.0.13"
+
"@emotion/cache@^10.0.27":
version "10.0.29"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
@@ -1125,6 +1148,17 @@
"@emotion/weak-memoize" "^0.2.5"
stylis "^4.0.3"
+"@emotion/cache@^11.7.1":
+ version "11.7.1"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539"
+ integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==
+ dependencies:
+ "@emotion/memoize" "^0.7.4"
+ "@emotion/sheet" "^1.1.0"
+ "@emotion/utils" "^1.0.0"
+ "@emotion/weak-memoize" "^0.2.5"
+ stylis "4.0.13"
+
"@emotion/core@^10.0.0":
version "10.1.1"
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3"
@@ -1158,12 +1192,19 @@
dependencies:
"@emotion/memoize" "0.7.4"
+"@emotion/is-prop-valid@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz#34ad6e98e871aa6f7a20469b602911b8b11b3a95"
+ integrity sha512-3QnhqeL+WW88YjYbQL5gUIkthuMw7a0NGbZ7wfFVk2kg/CK5w8w5FFa0RzWjyY1+sujN0NWbtSHH6OJmWHtJpQ==
+ dependencies:
+ "@emotion/memoize" "^0.7.4"
+
"@emotion/memoize@0.7.4":
version "0.7.4"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
-"@emotion/memoize@^0.7.1", "@emotion/memoize@^0.7.4":
+"@emotion/memoize@^0.7.1", "@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
@@ -1181,6 +1222,19 @@
"@emotion/weak-memoize" "^0.2.5"
hoist-non-react-statics "^3.3.1"
+"@emotion/react@^11.8.2":
+ version "11.8.2"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.8.2.tgz#e51f5e6372e22e82780836c9288da19af4b51e70"
+ integrity sha512-+1bcHBaNJv5nkIIgnGKVsie3otS0wF9f1T1hteF3WeVvMNQEtfZ4YyFpnphGoot3ilU/wWMgP2SgIDuHLE/wAA==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ "@emotion/babel-plugin" "^11.7.1"
+ "@emotion/cache" "^11.7.1"
+ "@emotion/serialize" "^1.0.2"
+ "@emotion/utils" "^1.1.0"
+ "@emotion/weak-memoize" "^0.2.5"
+ hoist-non-react-statics "^3.3.1"
+
"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
version "0.11.16"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
@@ -1213,6 +1267,11 @@
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.0.2.tgz#1d9ffde531714ba28e62dac6a996a8b1089719d0"
integrity sha512-QQPB1B70JEVUHuNtzjHftMGv6eC3Y9wqavyarj4x4lg47RACkeSfNo5pxIOKizwS9AEFLohsqoaxGQj4p0vSIw==
+"@emotion/sheet@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2"
+ integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==
+
"@emotion/styled-base@^10.0.27":
version "10.0.31"
resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a"
@@ -1231,6 +1290,17 @@
"@emotion/styled-base" "^10.0.27"
babel-plugin-emotion "^10.0.27"
+"@emotion/styled@^11.8.1":
+ version "11.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.8.1.tgz#856f6f63aceef0eb783985fa2322e2bf66d04e17"
+ integrity sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ "@emotion/babel-plugin" "^11.7.1"
+ "@emotion/is-prop-valid" "^1.1.2"
+ "@emotion/serialize" "^1.0.2"
+ "@emotion/utils" "^1.1.0"
+
"@emotion/stylis@0.8.5":
version "0.8.5"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
@@ -1251,6 +1321,11 @@
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af"
integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==
+"@emotion/utils@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf"
+ integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==
+
"@emotion/weak-memoize@0.2.5", "@emotion/weak-memoize@^0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
@@ -1483,26 +1558,6 @@
"@types/yargs" "^16.0.0"
chalk "^4.0.0"
-"@latitudegames/thoth-core@0.0.65":
- version "0.0.65"
- resolved "https://npm.pkg.github.com/download/@latitudegames/thoth-core/0.0.65/5f38b6af91b27e4285a0b665b572209754c81f865bb988b2dae14f02913d8d4b#10eceb4003a9abcd6e81115203d422ab7cc3bc06"
- integrity sha512-YRoyD29A6n8vFwj3jACTOq9q+uwMV3PogQoftTJBb8CuUcA3AbKgMhHyNg7z1XDwMyzoOjJ0TMTBhFpInO8nsA==
- dependencies:
- deep-equal "^2.0.5"
- handlebars "^4.7.7"
- jsdom "^17.0.0"
- license-webpack-plugin "^4.0.2"
- path "^0.12.7"
- react "^17.0.2"
- regenerator-runtime "^0.13.9"
- rete "https://github.com/latitudegames/rete.git#master"
- rete-area-plugin "^0.2.1"
- rete-connection-plugin "^0.9.0"
- rete-context-menu-plugin "^0.6.0-rc.1"
- rete-module-plugin "^0.4.1"
- rete-react-render-plugin "^0.2.1"
- uuid "^8.3.2"
-
"@lerna/add@4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f"
@@ -2174,91 +2229,130 @@
npmlog "^4.1.2"
write-file-atomic "^3.0.3"
-"@material-ui/core@^4.12.1":
- version "4.12.3"
- resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.3.tgz#80d665caf0f1f034e52355c5450c0e38b099d3ca"
- integrity sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw==
- dependencies:
- "@babel/runtime" "^7.4.4"
- "@material-ui/styles" "^4.11.4"
- "@material-ui/system" "^4.12.1"
- "@material-ui/types" "5.1.0"
- "@material-ui/utils" "^4.11.2"
- "@types/react-transition-group" "^4.2.0"
- clsx "^1.0.4"
- hoist-non-react-statics "^3.3.2"
- popper.js "1.16.1-lts"
- prop-types "^15.7.2"
- react-is "^16.8.0 || ^17.0.0"
- react-transition-group "^4.4.0"
-
-"@material-ui/icons@^4.11.2":
- version "4.11.2"
- resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5"
- integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==
+"@monaco-editor/loader@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.1.1.tgz#37db648c81a86946d0febd391de00df9c28a0a3d"
+ integrity sha512-mkT4r4xDjIyOG9o9M6rJDSzEIeonwF80sYErxEvAAL4LncFVdcbNli8Qv6NDqF6nyv6sunuKkDzo4iFjxPL+uQ==
dependencies:
- "@babel/runtime" "^7.4.4"
+ state-local "^1.0.6"
-"@material-ui/styles@^4.11.4":
- version "4.11.4"
- resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d"
- integrity sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==
+"@monaco-editor/react@^4.2.1":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.2.2.tgz#636e5b8eb9519ef62f475f9a4a50f62ee0c493a8"
+ integrity sha512-yDDct+f/mZ946tJEXudvmMC8zXDygkELNujpJGjqJ0gS3WePZmS/IwBBsuJ8JyKQQC3Dy/+Ivg1sSpW+UvCv9g==
dependencies:
- "@babel/runtime" "^7.4.4"
- "@emotion/hash" "^0.8.0"
- "@material-ui/types" "5.1.0"
- "@material-ui/utils" "^4.11.2"
- clsx "^1.0.4"
- csstype "^2.5.2"
+ "@monaco-editor/loader" "^1.1.1"
+ prop-types "^15.7.2"
+
+"@mui/base@5.0.0-alpha.74":
+ version "5.0.0-alpha.74"
+ resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.74.tgz#15509242e7911446d5957375b1b18cbb72b3a750"
+ integrity sha512-pw3T1xNXpW8pLo9+BvtyazZb0CSjNJsjbzznlbV/aNkBfjNPXQVI3X1NDm3WSI8y6M96WDIVO7XrHAohOwALSQ==
+ dependencies:
+ "@babel/runtime" "^7.17.2"
+ "@emotion/is-prop-valid" "^1.1.2"
+ "@mui/types" "^7.1.3"
+ "@mui/utils" "^5.5.3"
+ "@popperjs/core" "^2.11.4"
+ clsx "^1.1.1"
+ prop-types "^15.7.2"
+ react-is "^17.0.2"
+
+"@mui/icons-material@^5.5.1":
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.5.1.tgz#848a57972617411370775980cbc6990588d4aafb"
+ integrity sha512-40f68p5+Yhq3dCn3QYHqQt5RETPyR3AkDw+fma8PtcjqvZ+d+jF84kFmT6NqwA3he7TlwluEtkyAmPzUE4uPdA==
+ dependencies:
+ "@babel/runtime" "^7.17.2"
+
+"@mui/material@^5.5.3":
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.5.3.tgz#411e53a69da3f9d6664e99f1bdcdaf2760540fdc"
+ integrity sha512-eADa3kUYbbr1jNjcufn0a7HeU8cSo0agbrkj720hodxVFNIfzq7a2e58Z+PaZqll55kMGBvlYJ7rTcXU399x5A==
+ dependencies:
+ "@babel/runtime" "^7.17.2"
+ "@mui/base" "5.0.0-alpha.74"
+ "@mui/system" "^5.5.3"
+ "@mui/types" "^7.1.3"
+ "@mui/utils" "^5.5.3"
+ "@types/react-transition-group" "^4.4.4"
+ clsx "^1.1.1"
+ csstype "^3.0.11"
hoist-non-react-statics "^3.3.2"
- jss "^10.5.1"
- jss-plugin-camel-case "^10.5.1"
- jss-plugin-default-unit "^10.5.1"
- jss-plugin-global "^10.5.1"
- jss-plugin-nested "^10.5.1"
- jss-plugin-props-sort "^10.5.1"
- jss-plugin-rule-value-function "^10.5.1"
- jss-plugin-vendor-prefixer "^10.5.1"
prop-types "^15.7.2"
+ react-is "^17.0.2"
+ react-transition-group "^4.4.2"
-"@material-ui/system@^4.12.1":
- version "4.12.1"
- resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.1.tgz#2dd96c243f8c0a331b2bb6d46efd7771a399707c"
- integrity sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==
+"@mui/private-theming@^5.5.3":
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.5.3.tgz#c232a39dd3c268fdef7e92ccc40d51bda9eec3ab"
+ integrity sha512-Wf7NurY7lk8SBWelSBY2U02zxLt1773JpIcXTHuEC9/GZdQA4CXCJGl2cVQzheKhee5rZ+8JwGulrRiVl1m+4A==
dependencies:
- "@babel/runtime" "^7.4.4"
- "@material-ui/utils" "^4.11.2"
- csstype "^2.5.2"
+ "@babel/runtime" "^7.17.2"
+ "@mui/utils" "^5.5.3"
prop-types "^15.7.2"
-"@material-ui/types@5.1.0":
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
- integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
-
-"@material-ui/utils@^4.11.2":
- version "4.11.2"
- resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a"
- integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==
+"@mui/styled-engine@^5.5.2":
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.5.2.tgz#1f92dd27d76f0b7df7aa52c7c7a710e59b2275a6"
+ integrity sha512-jkz5AHHbA43akBo5L3y1X1/X0f+RvXvCp3eXKt+iOf3qnKSAausbtlVz7gBbC4xIWDnP1Jb/6T+t/0/7gObRYA==
dependencies:
- "@babel/runtime" "^7.4.4"
+ "@babel/runtime" "^7.17.2"
+ "@emotion/cache" "^11.7.1"
prop-types "^15.7.2"
- react-is "^16.8.0 || ^17.0.0"
-"@monaco-editor/loader@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.1.1.tgz#37db648c81a86946d0febd391de00df9c28a0a3d"
- integrity sha512-mkT4r4xDjIyOG9o9M6rJDSzEIeonwF80sYErxEvAAL4LncFVdcbNli8Qv6NDqF6nyv6sunuKkDzo4iFjxPL+uQ==
+"@mui/styles@^5.5.3":
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.5.3.tgz#e462adec9a24ee4f6982394c172f20221bef30d7"
+ integrity sha512-jxiXgyzYXDh5pUdfKvs5ZTJqQRNFUgbG9Q/hOPh0nHrKYmlrikt2Z3b9Rjrkp2QCh9R3kuy8LHlv/u+QjnnIqg==
dependencies:
- state-local "^1.0.6"
+ "@babel/runtime" "^7.17.2"
+ "@emotion/hash" "^0.8.0"
+ "@mui/private-theming" "^5.5.3"
+ "@mui/types" "^7.1.3"
+ "@mui/utils" "^5.5.3"
+ clsx "^1.1.1"
+ csstype "^3.0.11"
+ hoist-non-react-statics "^3.3.2"
+ jss "^10.8.2"
+ jss-plugin-camel-case "^10.8.2"
+ jss-plugin-default-unit "^10.8.2"
+ jss-plugin-global "^10.8.2"
+ jss-plugin-nested "^10.8.2"
+ jss-plugin-props-sort "^10.8.2"
+ jss-plugin-rule-value-function "^10.8.2"
+ jss-plugin-vendor-prefixer "^10.8.2"
+ prop-types "^15.7.2"
-"@monaco-editor/react@^4.2.1":
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.2.2.tgz#636e5b8eb9519ef62f475f9a4a50f62ee0c493a8"
- integrity sha512-yDDct+f/mZ946tJEXudvmMC8zXDygkELNujpJGjqJ0gS3WePZmS/IwBBsuJ8JyKQQC3Dy/+Ivg1sSpW+UvCv9g==
+"@mui/system@^5.5.3":
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.5.3.tgz#c78d4c16009430389ffd3495d694945422d72ca5"
+ integrity sha512-J9JcySJuEqfEoP334K/2gEWm2vOx73Uqjii3qlFVhWRBOAJ0Pjyk0sN5W/eVRbwhUm95DNgh2V5s8dRK3vzyVw==
+ dependencies:
+ "@babel/runtime" "^7.17.2"
+ "@mui/private-theming" "^5.5.3"
+ "@mui/styled-engine" "^5.5.2"
+ "@mui/types" "^7.1.3"
+ "@mui/utils" "^5.5.3"
+ clsx "^1.1.1"
+ csstype "^3.0.11"
+ prop-types "^15.7.2"
+
+"@mui/types@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.3.tgz#d7636f3046110bcccc63e6acfd100e2ad9ca712a"
+ integrity sha512-DDF0UhMBo4Uezlk+6QxrlDbchF79XG6Zs0zIewlR4c0Dt6GKVFfUtzPtHCH1tTbcSlq/L2bGEdiaoHBJ9Y1gSA==
+
+"@mui/utils@^5.5.3":
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.5.3.tgz#f6e1f10c0e8f4d0bf750588c2c3a96ad819c5b65"
+ integrity sha512-t627eVRpl3SlxVya0cIVNs8jPl4KCEiGaTSWY9iKKTcMNaeDbuRML+zv/CFHDPr1zFv+FjJSP02ySB+tZ8xIag==
dependencies:
- "@monaco-editor/loader" "^1.1.1"
+ "@babel/runtime" "^7.17.2"
+ "@types/prop-types" "^15.7.4"
+ "@types/react-is" "^16.7.1 || ^17.0.0"
prop-types "^15.7.2"
+ react-is "^17.0.2"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -2476,11 +2570,25 @@
dependencies:
"@octokit/openapi-types" "^10.6.1"
+"@plotdb/json0@^0.0.5":
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/@plotdb/json0/-/json0-0.0.5.tgz#080b51f472796dc680d21f92aef1ce9f5f0de2b9"
+ integrity sha512-eerS2BBMXCL7QZ6y5w2TLcRsfRhXudf/LMRyfJ1+/XVaZTGAFPuZFjV0ys4RvWfQ9uW9/rkQJQRQ1rcO1Jx25g==
+ dependencies:
+ diff-match-patch "^1.0.4"
+ json0-ot-diff "^1.0.5"
+ ot-json0 "^1.1.0"
+
"@polka/url@^1.0.0-next.20":
version "1.0.0-next.20"
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.20.tgz#111b5db0f501aa89b05076fa31f0ea0e0c292cd3"
integrity sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==
+"@popperjs/core@^2.11.4":
+ version "2.11.5"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
+ integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
+
"@rebass/forms@^4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@rebass/forms/-/forms-4.0.6.tgz#19a3af64f855baa65dec65aecadda5cd95a09dd7"
@@ -2515,6 +2623,11 @@
estree-walker "^1.0.1"
picomatch "^2.2.2"
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
"@sinonjs/commons@^1.7.0":
version "1.8.3"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
@@ -2628,6 +2741,18 @@
"@styled-system/core" "^5.1.2"
"@styled-system/css" "^5.1.5"
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
+"@teamwork/websocket-json-stream@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@teamwork/websocket-json-stream/-/websocket-json-stream-2.0.0.tgz#4eba02b1fde23112beef0080a84a4e6db251877e"
+ integrity sha512-SCEM44hjNyxYwrtyJrjlHmeTd9RJlZr04BAMbHSBhdW0M2IXv0SC+4XeuRXPiY7U7pJ0W8TSUwVP/28MV/ds0w==
+
"@testing-library/dom@^7.28.1":
version "7.31.2"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a"
@@ -2716,9 +2841,9 @@
"@babel/types" "^7.3.0"
"@types/body-parser@*":
- version "1.19.1"
- resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c"
- integrity sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==
+ version "1.19.2"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
+ integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
dependencies:
"@types/connect" "*"
"@types/node" "*"
@@ -2730,11 +2855,6 @@
dependencies:
"@types/node" "*"
-"@types/clone@2.1.0":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@types/clone/-/clone-2.1.0.tgz#cb888a3fe5319275b566ae3a9bc606e310c533d4"
- integrity sha512-d/aS/lPOnUSruPhgNtT8jW39fHRVTLQy9sodysP1kkG8EdAtdZu1vt8NJaYA8w/6Z9j8izkAsx1A/yJhcYR1CA==
-
"@types/command-line-args@^5.0.0":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6"
@@ -2745,11 +2865,6 @@
resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.2.tgz#ba5e3f6ae5a2009d466679cc431b50635bf1a064"
integrity sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==
-"@types/common-tags@1.8.0":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@types/common-tags/-/common-tags-1.8.0.tgz#79d55e748d730b997be5b7fce4b74488d8b26a6b"
- integrity sha512-htRqZr5qn8EzMelhX/Xmx142z218lLyGaeZ3YR8jlze4TATRU9huKKvuBmAJEW4LCC4pnY1N6JAm6p85fMHjhg==
-
"@types/connect@*":
version "3.4.35"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
@@ -2757,23 +2872,6 @@
dependencies:
"@types/node" "*"
-"@types/cors@2.8.10":
- version "2.8.10"
- resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4"
- integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==
-
-"@types/debug@*":
- version "4.1.7"
- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
- integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
- dependencies:
- "@types/ms" "*"
-
-"@types/deep-equal@1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@types/deep-equal/-/deep-equal-1.0.1.tgz#71cfabb247c22bcc16d536111f50c0ed12476b03"
- integrity sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==
-
"@types/eslint-scope@^3.7.0":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e"
@@ -2801,18 +2899,18 @@
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/express-serve-static-core@^4.17.18":
- version "4.17.24"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07"
- integrity sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==
+ version "4.17.28"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
+ integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==
dependencies:
"@types/node" "*"
"@types/qs" "*"
"@types/range-parser" "*"
-"@types/express@4.17.12":
- version "4.17.12"
- resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.12.tgz#4bc1bf3cd0cfe6d3f6f2853648b40db7d54de350"
- integrity sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==
+"@types/express@^4.17.13":
+ version "4.17.13"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
+ integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "^4.17.18"
@@ -2846,13 +2944,6 @@
dependencies:
"@types/node" "*"
-"@types/is-my-json-valid@2.18.0":
- version "2.18.0"
- resolved "https://registry.yarnpkg.com/@types/is-my-json-valid/-/is-my-json-valid-2.18.0.tgz#4f2787cc1e5e67186f149680003cc6d2621faf0a"
- integrity sha512-iVsZirn9cYluADct+CpLx49TTEtHJfcEXD8WcqF3Bq+rfacJBOD9avZOEfNC0k64wCl2dZfXjzzh7KXn6g0N2g==
- dependencies:
- is-my-json-valid "*"
-
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
@@ -2893,11 +2984,6 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
-"@types/json-schema@7.0.7":
- version "7.0.7"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
- integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
-
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -2923,18 +3009,6 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
-"@types/ms@*":
- version "0.7.31"
- resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
- integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
-
-"@types/node-fetch@*":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-3.0.3.tgz#9d969c9a748e841554a40ee435d26e53fa3ee899"
- integrity sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==
- dependencies:
- node-fetch "*"
-
"@types/node@*", "@types/node@^16.4.3":
version "16.10.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.1.tgz#f3647623199ca920960006b3dccf633ea905f243"
@@ -2945,61 +3019,17 @@
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
-"@types/object-path@0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@types/object-path/-/object-path-0.11.0.tgz#0b744309b2573dc8bf867ef589b6288be998e602"
- integrity sha512-/tuN8jDbOXcPk+VzEVZzzAgw1Byz7s/itb2YI10qkSyy6nykJH02DuhfrflxVdAdE7AZ91h5X6Cn0dmVdFw2TQ==
-
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
-"@types/pouchdb-core@*":
- version "7.0.8"
- resolved "https://registry.yarnpkg.com/@types/pouchdb-core/-/pouchdb-core-7.0.8.tgz#95b20c6be8bff0d7bd820701268ee8d141140215"
- integrity sha512-99pGWgoxW/m1jLpnWQAfy7QGwXK3uCDSy+VtOG8sjuutjNJzX6nmOesbBq7ZpkquMH+X9vnT9CpWPunBpepEGg==
- dependencies:
- "@types/debug" "*"
- "@types/pouchdb-find" "*"
-
-"@types/pouchdb-core@7.0.6":
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/@types/pouchdb-core/-/pouchdb-core-7.0.6.tgz#16ce99513a47fc86da51a605aaae2910e83bdf3c"
- integrity sha512-MCTtOA3buNN+YVkCWFaojWzP6SsESLRp5uXtXcZE8aUm8RNM/hrVun+RVmzP4NTIGBjKQgO9U9X/bTd9k0jsXA==
- dependencies:
- "@types/debug" "*"
- "@types/node-fetch" "*"
- "@types/pouchdb-find" "*"
-
-"@types/pouchdb-find@*":
- version "6.3.7"
- resolved "https://registry.yarnpkg.com/@types/pouchdb-find/-/pouchdb-find-6.3.7.tgz#f713534a53c1a7f3fd8fbbfb74131a1b04711ddc"
- integrity sha512-b2dr9xoZRK5Mwl8UiRA9l5j9mmCxNfqXuu63H1KZHwJLILjoIIz7BntCvM0hnlnl7Q8P8wORq0IskuaMq5Nnnw==
- dependencies:
- "@types/pouchdb-core" "*"
-
-"@types/pouchdb-find@6.3.6":
- version "6.3.6"
- resolved "https://registry.yarnpkg.com/@types/pouchdb-find/-/pouchdb-find-6.3.6.tgz#a0b7bd980e0b2962750e41bd992d013f643c4d75"
- integrity sha512-qXgkYfmwUIMCtFcX959ywYyFYJp23Er3btfWNwm1wyYpPK9uuJD8Zh7OmcyFLzWKZG7c8eLHVvGGOp4NysHjDg==
- dependencies:
- "@types/pouchdb-core" "*"
-
-"@types/pouchdb-replication@6.4.2":
- version "6.4.2"
- resolved "https://registry.yarnpkg.com/@types/pouchdb-replication/-/pouchdb-replication-6.4.2.tgz#e523764cdc9872f6493d5e039ce7bf54ee0a2888"
- integrity sha512-BbuwkCv6nu8RUVjymUvhSw/Oo+VOCWyUpio3ujOoxhVdef/JZ5AUjsotgKWHiG0OtkZ8O5oCbAx5uH1Zf6w9XA==
- dependencies:
- "@types/pouchdb-core" "*"
- "@types/pouchdb-find" "*"
-
"@types/prettier@^2.1.5":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb"
integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==
-"@types/prop-types@*":
+"@types/prop-types@*", "@types/prop-types@^15.7.4":
version "15.7.4"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
@@ -3026,6 +3056,13 @@
dependencies:
"@types/react" "*"
+"@types/react-is@^16.7.1 || ^17.0.0":
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a"
+ integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==
+ dependencies:
+ "@types/react" "*"
+
"@types/react-redux@^7.1.16", "@types/react-redux@^7.1.18":
version "7.1.18"
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.18.tgz#2bf8fd56ebaae679a90ebffe48ff73717c438e04"
@@ -3036,10 +3073,10 @@
hoist-non-react-statics "^3.3.0"
redux "^4.0.0"
-"@types/react-transition-group@^4.2.0":
- version "4.4.3"
- resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.3.tgz#b0994da0a7023d67dbb4a8910a62112bc00d5688"
- integrity sha512-fUx5muOWSYP8Bw2BUQ9M9RK9+W1XBK/7FLJ8PTQpnpTEkn0ccyMffyEQvan4C3h53gHdx7KE5Qrxi/LnUGQtdg==
+"@types/react-transition-group@^4.4.4":
+ version "4.4.4"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e"
+ integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==
dependencies:
"@types/react" "*"
@@ -3070,16 +3107,16 @@
"@types/mime" "^1"
"@types/node" "*"
+"@types/sharedb@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@types/sharedb/-/sharedb-2.2.0.tgz#61a1ab5d1bc5596bf8b0933a7eafb5b7fad8b2f6"
+ integrity sha512-VbsWaKdU/m9I9CUBtBSj+hcWMT8jr0mEg0qAebUxEwR2nreRKHC6/3WbhXKYqqaC36jDXleKv3TXnMMgTUioSQ==
+
"@types/source-list-map@*":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
-"@types/spark-md5@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@types/spark-md5/-/spark-md5-3.0.2.tgz#da2e8a778a20335fc4f40b6471c4b0d86b70da55"
- integrity sha512-82E/lVRaqelV9qmRzzJ1PKTpyrpnT7mwdneKNJB9hUtypZDMggloDfFUCIqRRx3lYRxteCwXSq9c+W71Vf0QnQ==
-
"@types/stack-utils@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
@@ -3130,6 +3167,13 @@
anymatch "^3.0.0"
source-map "^0.6.0"
+"@types/ws@^8.5.3":
+ version "8.5.3"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d"
+ integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==
+ dependencies:
+ "@types/node" "*"
+
"@types/yargs-parser@*":
version "20.2.1"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
@@ -3537,35 +3581,6 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-abort-controller@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
- integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
- dependencies:
- event-target-shim "^5.0.0"
-
-abstract-leveldown@^6.2.1:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a"
- integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==
- dependencies:
- buffer "^5.5.0"
- immediate "^3.2.3"
- level-concat-iterator "~2.0.0"
- level-supports "~1.0.0"
- xtend "~4.0.0"
-
-abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3:
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb"
- integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==
- dependencies:
- buffer "^5.5.0"
- immediate "^3.2.3"
- level-concat-iterator "~2.0.0"
- level-supports "~1.0.0"
- xtend "~4.0.0"
-
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
@@ -3574,6 +3589,14 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
+accepts@~1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+ integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+ dependencies:
+ mime-types "~2.1.34"
+ negotiator "0.6.3"
+
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
@@ -3597,11 +3620,6 @@ acorn-walk@^8.0.0:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
-acorn@^5.2.1:
- version "5.7.4"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
- integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
-
acorn@^6.4.1:
version "6.4.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
@@ -3627,6 +3645,11 @@ add-stream@^1.0.0:
resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=
+add@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235"
+ integrity sha1-JI8Kn25aUo7yKV2+7DBTITCuIjU=
+
agent-base@6, agent-base@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@@ -3686,10 +3709,12 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
- integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+ansi-align@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
+ integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
+ dependencies:
+ string-width "^4.1.0"
ansi-colors@^4.1.1:
version "4.1.1"
@@ -3798,11 +3823,6 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
-argsarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb"
- integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs=
-
aria-query@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
@@ -3867,11 +3887,6 @@ array-includes@^3.1.3:
get-intrinsic "^1.1.1"
is-string "^1.0.5"
-array-push-at-sort-position@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/array-push-at-sort-position/-/array-push-at-sort-position-1.2.0.tgz#df6c03d4a4c30d5af5537a5a8228ebb9442d89fc"
- integrity sha512-33YkzjLE7OT+o/idj+n27YFau2NwGxMBN+lLkFpRnQJe4EkJntLY0z4YYfLRBZrqG7lixDk4Rt2iSC10CEmZsQ==
-
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -3922,6 +3937,11 @@ array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.4:
define-properties "^1.1.3"
es-abstract "^1.18.0-next.1"
+arraydiff@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/arraydiff/-/arraydiff-0.1.3.tgz#86a5436d7b72f1bdda5fd6d74e8724e42f83ce4d"
+ integrity sha1-hqVDbXty8b3aX9bXTock5C+Dzk0=
+
arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -3972,17 +3992,12 @@ assign-symbols@^1.0.0:
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-ast-types@0.9.6:
- version "0.9.6"
- resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
- integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=
-
async-each@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
-async@^2.6.2:
+async@^2.6.2, async@^2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
@@ -4149,7 +4164,7 @@ babel-plugin-jest-hoist@^27.2.0:
"@types/babel__core" "^7.0.0"
"@types/babel__traverse" "^7.0.6"
-babel-plugin-macros@^2.0.0:
+babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1:
version "2.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
@@ -4282,12 +4297,7 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-base62@^1.1.0:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.8.tgz#1264cb0fb848d875792877479dbe8bae6bae3428"
- integrity sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==
-
-base64-js@^1.0.2, base64-js@^1.3.1:
+base64-js@^1.0.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@@ -4322,21 +4332,11 @@ before-after-hook@^2.2.0:
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e"
integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==
-big-integer@^1.6.16:
- version "1.6.49"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.49.tgz#f6817d3ea5d4f3fb19e24df9f4b1b4471a8328ce"
- integrity sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==
-
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-binary-decision-diagram@1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/binary-decision-diagram/-/binary-decision-diagram-1.3.1.tgz#cf4d93e0a97ee80972f234bacd656450c028f64b"
- integrity sha512-Sp2bJadovYVc1/GTUtiayR9K3dYVPWHeINNd8S5e4wQ/qAl3NW3QV8USF1dcKd66ofWgml2z3eRhAbDm590P9w==
-
binary-extensions@^1.0.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
@@ -4385,6 +4385,22 @@ body-parser@1.19.0:
raw-body "2.4.0"
type-is "~1.6.17"
+body-parser@1.19.2:
+ version "1.19.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e"
+ integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==
+ dependencies:
+ bytes "3.1.2"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.8.1"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.9.7"
+ raw-body "2.4.3"
+ type-is "~1.6.18"
+
bonjour@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
@@ -4407,6 +4423,20 @@ bottleneck@^2.15.3:
resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91"
integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==
+boxen@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50"
+ integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^6.2.0"
+ chalk "^4.1.0"
+ cli-boxes "^2.2.1"
+ string-width "^4.2.2"
+ type-fest "^0.20.2"
+ widest-line "^3.1.0"
+ wrap-ansi "^7.0.0"
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -4438,20 +4468,6 @@ braces@^3.0.1, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
-broadcast-channel@3.7.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937"
- integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==
- dependencies:
- "@babel/runtime" "^7.7.2"
- detect-node "^2.1.0"
- js-sha3 "0.8.0"
- microseconds "0.2.0"
- nano-time "1.0.0"
- oblivious-set "1.0.0"
- rimraf "3.0.2"
- unload "2.2.0"
-
brorand@^1.0.1, brorand@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
@@ -4548,11 +4564,6 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
-buffer-from@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -4577,14 +4588,6 @@ buffer@^4.3.0:
ieee754 "^1.1.4"
isarray "^1.0.0"
-buffer@^5.5.0, buffer@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.1.13"
-
builtin-status-codes@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
@@ -4615,6 +4618,11 @@ bytes@3.1.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
cacache@^12.0.2:
version "12.0.4"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
@@ -4675,6 +4683,19 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -4831,6 +4852,21 @@ chokidar@^3.4.1, chokidar@^3.5.1:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^3.5.2:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
chownr@^1.1.1, chownr@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@@ -4896,6 +4932,11 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+cli-boxes@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
+ integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+
cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
@@ -4917,11 +4958,6 @@ cliui@^7.0.2:
strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
-clone-buffer@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
- integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg=
-
clone-deep@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
@@ -4931,17 +4967,19 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
+clone-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
+ integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ dependencies:
+ mimic-response "^1.0.0"
+
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-clone@^2.1.1, clone@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
- integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
-
-clsx@^1.0.4, clsx@^1.1.0:
+clsx@^1.1.0, clsx@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
@@ -5059,7 +5097,7 @@ command-line-usage@^6.0.0:
table-layout "^1.0.1"
typical "^5.2.0"
-commander@^2.19.0, commander@^2.20.0, commander@^2.5.0, commander@^2.7.1:
+commander@^2.19.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -5079,31 +5117,11 @@ commander@^7.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-common-tags@1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
- integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==
-
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-commoner@^0.10.1:
- version "0.10.8"
- resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5"
- integrity sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=
- dependencies:
- commander "^2.5.0"
- detective "^4.3.1"
- glob "^5.0.15"
- graceful-fs "^4.1.2"
- iconv-lite "^0.4.5"
- mkdirp "^0.5.0"
- private "^0.1.6"
- q "^1.1.2"
- recast "^0.11.17"
-
compare-func@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
@@ -5170,21 +5188,6 @@ concat-stream@^2.0.0:
readable-stream "^3.0.2"
typedarray "^0.0.6"
-concurrently@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-6.2.1.tgz#d880fc1d77559084732fa514092a3d5109a0d5bf"
- integrity sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==
- dependencies:
- chalk "^4.1.0"
- date-fns "^2.16.1"
- lodash "^4.17.21"
- read-pkg "^5.2.0"
- rxjs "^6.6.3"
- spawn-command "^0.0.2-1"
- supports-color "^8.1.0"
- tree-kill "^1.2.2"
- yargs "^16.2.0"
-
config-chain@^1.1.12:
version "1.1.13"
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
@@ -5193,6 +5196,18 @@ config-chain@^1.1.12:
ini "^1.3.4"
proto-list "~1.2.1"
+configstore@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
+ integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ dependencies:
+ dot-prop "^5.2.0"
+ graceful-fs "^4.1.2"
+ make-dir "^3.0.0"
+ unique-string "^2.0.0"
+ write-file-atomic "^3.0.0"
+ xdg-basedir "^4.0.0"
+
confusing-browser-globals@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59"
@@ -5225,6 +5240,13 @@ content-disposition@0.5.3:
dependencies:
safe-buffer "5.1.2"
+content-disposition@0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+ integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+ dependencies:
+ safe-buffer "5.2.1"
+
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
@@ -5329,6 +5351,11 @@ cookie@0.4.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+cookie@0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+ integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -5400,14 +5427,6 @@ core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-cors@2.8.5:
- version "2.8.5"
- resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
- integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
- dependencies:
- object-assign "^4"
- vary "^1"
-
cosmiconfig@7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
@@ -5488,6 +5507,17 @@ create-require@^1.1.0:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
cross-spawn@^7.0.0, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -5514,10 +5544,10 @@ crypto-browserify@^3.11.0, crypto-browserify@^3.12.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
-crypto-js@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc"
- integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
css-loader@^6.3.0:
version "6.3.0"
@@ -5606,23 +5636,21 @@ cssstyle@^2.3.0:
dependencies:
cssom "~0.3.6"
-csstype@^2.5.2, csstype@^2.5.7:
+csstype@^2.5.7:
version "2.6.18"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.18.tgz#980a8b53085f34af313410af064f2bd241784218"
integrity sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==
+csstype@^3.0.11:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
+ integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
+
csstype@^3.0.2:
version "3.0.9"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b"
integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==
-custom-idle-queue@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/custom-idle-queue/-/custom-idle-queue-3.0.1.tgz#d6f56ac2db8333951712b28aaf4f57b9a58b91e2"
- integrity sha512-n/c555GViLgmqj1364lrnlxCQtNXGBqZs/W8j/SXnLyZWXHtMq1xjQ2ba8Va8AZu6VZF+1AEnF+gcKfoHVAVNg==
- dependencies:
- "@babel/runtime" "7.9.6"
-
cyclist@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
@@ -5652,11 +5680,6 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
-data-uri-to-buffer@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
- integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
-
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@@ -5675,11 +5698,6 @@ data-urls@^3.0.0:
whatwg-mimetype "^3.0.0"
whatwg-url "^10.0.0"
-date-fns@^2.16.1:
- version "2.24.0"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.24.0.tgz#7d86dc0d93c87b76b63d213b4413337cfd1c105d"
- integrity sha512-6ujwvwgPID6zbI0o7UbURi2vlLDR9uP26+tW6Lg+Ji3w7dd0i3DOcjcClLjLPranT60SSEFBwdSyYwn/ZkPIuw==
-
dateformat@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
@@ -5734,6 +5752,13 @@ decode-uri-component@^0.2.0:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+decompress-response@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+ integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ dependencies:
+ mimic-response "^1.0.0"
+
dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
@@ -5751,7 +5776,7 @@ deep-equal@^1.0.1:
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
-deep-equal@^2.0.1, deep-equal@^2.0.5:
+deep-equal@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.5.tgz#55cd2fe326d83f9cbf7261ef0e060b3f724c5cb9"
integrity sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==
@@ -5801,18 +5826,10 @@ defaults@^1.0.3:
dependencies:
clone "^1.0.2"
-defekt@7.2.3:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/defekt/-/defekt-7.2.3.tgz#7a073e482d14fdfe47c07bb8434888aaf737875f"
- integrity sha512-EG1JyjSSrHl3jpvtGBQHleDFs1Q1eE9R/PJ9SN2502quo3+/41viDM2kqDrfKlQVhR1gnn3EEYyTKueXqFnwNg==
-
-deferred-leveldown@~5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058"
- integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==
- dependencies:
- abstract-leveldown "~6.2.1"
- inherits "^2.0.3"
+defer-to-connect@^1.0.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
+ integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
define-lazy-prop@^2.0.0:
version "2.0.0"
@@ -5848,11 +5865,6 @@ define-property@^2.0.2:
is-descriptor "^1.0.2"
isobject "^3.0.1"
-defined@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
- integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
-
del@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952"
@@ -5915,19 +5927,11 @@ detect-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-detect-node@^2.0.4, detect-node@^2.1.0:
+detect-node@^2.0.4:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-detective@^4.3.1:
- version "4.7.1"
- resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
- integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==
- dependencies:
- acorn "^5.2.1"
- defined "^1.0.0"
-
dezalgo@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
@@ -5936,7 +5940,12 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"
-diff-sequences@^26.6.2:
+diff-match-patch@^1.0.4, diff-match-patch@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37"
+ integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==
+
+diff-sequences@^26.6.2:
version "26.6.2"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
@@ -6085,7 +6094,7 @@ dot-case@^3.0.4:
no-case "^3.0.4"
tslib "^2.0.3"
-dot-prop@^5.1.0:
+dot-prop@^5.1.0, dot-prop@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
@@ -6118,10 +6127,10 @@ dotenv@^8.0.0, dotenv@^8.2.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
-double-ended-queue@2.1.0-0:
- version "2.1.0-0"
- resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
- integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
duplexer@^0.1.1, duplexer@^0.1.2:
version "0.1.2"
@@ -6189,17 +6198,7 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-encoding-down@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b"
- integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==
- dependencies:
- abstract-leveldown "^6.2.1"
- inherits "^2.0.3"
- level-codec "^9.0.0"
- level-errors "^2.0.0"
-
-encoding@^0.1.11, encoding@^0.1.12:
+encoding@^0.1.12:
version "0.1.13"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
@@ -6213,13 +6212,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
-end-stream@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/end-stream/-/end-stream-0.1.0.tgz#32003f3f438a2b0143168137f8fa6e9866c81ed5"
- integrity sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=
- dependencies:
- write-stream "~0.4.3"
-
endent@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88"
@@ -6354,7 +6346,7 @@ err-code@^2.0.2:
resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-errno@^0.1.3, errno@~0.1.1, errno@~0.1.7:
+errno@^0.1.3, errno@~0.1.7:
version "0.1.8"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
@@ -6392,6 +6384,32 @@ es-abstract@^1.17.4, es-abstract@^1.18.0, es-abstract@^1.18.0-next.1, es-abstrac
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.1"
+es-abstract@^1.19.1:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
+ integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.1.1"
+ get-symbol-description "^1.0.0"
+ has "^1.0.3"
+ has-symbols "^1.0.2"
+ internal-slot "^1.0.3"
+ is-callable "^1.2.4"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.1"
+ is-string "^1.0.7"
+ is-weakref "^1.0.1"
+ object-inspect "^1.11.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.4"
+ string.prototype.trimstart "^1.0.4"
+ unbox-primitive "^1.0.1"
+
es-array-method-boxes-properly@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
@@ -6425,20 +6443,16 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
-es3ify@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/es3ify/-/es3ify-0.2.2.tgz#5dae3e650e5be3684b88066513d528d092629862"
- integrity sha1-Xa4+ZQ5b42hLiAZlE9Uo0JJimGI=
- dependencies:
- esprima "^2.7.1"
- jstransform "~11.0.0"
- through "~2.3.4"
-
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+escape-goat@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
+ integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -6454,6 +6468,11 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
escodegen@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
@@ -6550,26 +6569,11 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-esprima-fb@^15001.1.0-dev-harmony-fb:
- version "15001.1.0-dev-harmony-fb"
- resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901"
- integrity sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=
-
-esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
- integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
-
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esprima@~3.1.0:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
- integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
-
esrecurse@^4.1.0, esrecurse@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
@@ -6602,20 +6606,6 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-event-reduce-js@1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/event-reduce-js/-/event-reduce-js-1.4.0.tgz#186efcfca4dfcc66aedc3317cdba05de71129dc9"
- integrity sha512-44gck8DwQPi1Rqchhtcjn5tq6TRSqbOguLCt8uwLyOt0w+muGHK29pxOk5U7qq4V1vQiwztUHJe0uInMcRy4bA==
- dependencies:
- array-push-at-sort-position "1.2.0"
- binary-decision-diagram "1.3.1"
- object-path "0.11.5"
-
-event-target-shim@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
- integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-
eventemitter3@^4.0.0, eventemitter3@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
@@ -6701,7 +6691,7 @@ expect@^27.2.3:
jest-message-util "^27.2.3"
jest-regex-util "^27.0.6"
-express@4.17.1, express@^4.17.1:
+express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
@@ -6737,6 +6727,42 @@ express@4.17.1, express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
+express@^4.17.3:
+ version "4.17.3"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1"
+ integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==
+ dependencies:
+ accepts "~1.3.8"
+ array-flatten "1.1.1"
+ body-parser "1.19.2"
+ content-disposition "0.5.4"
+ content-type "~1.0.4"
+ cookie "0.4.2"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.7"
+ qs "6.9.7"
+ range-parser "~1.2.1"
+ safe-buffer "5.2.1"
+ send "0.17.2"
+ serve-static "1.14.2"
+ setprototypeof "1.2.0"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
extend-shallow@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -6790,6 +6816,11 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
fast-deep-equal@^3.1.1:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -6852,20 +6883,6 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-fetch-blob@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.2.tgz#6bc438675f3851ecea51758ac91f6a1cd1bacabd"
- integrity sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==
- dependencies:
- web-streams-polyfill "^3.0.3"
-
-fetch-cookie@0.10.1:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.10.1.tgz#5ea88f3d36950543c87997c27ae2aeafb4b5c4d4"
- integrity sha512-beB+VEd4cNeVG1PY+ee74+PkuCQnik78pgLi5Ah/7qdUfov8IctU0vLUbBT8/10Ma5GMBeI4wtxhGrEfKNYs2g==
- dependencies:
- tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0"
-
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@@ -7176,20 +7193,6 @@ gauge@~2.7.3:
strip-ansi "^3.0.1"
wide-align "^1.1.0"
-generate-function@^2.0.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
- integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
- dependencies:
- is-property "^1.0.2"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
- dependencies:
- is-property "^1.0.0"
-
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -7200,16 +7203,6 @@ get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-graphql-from-jsonschema@8.0.8:
- version "8.0.8"
- resolved "https://registry.yarnpkg.com/get-graphql-from-jsonschema/-/get-graphql-from-jsonschema-8.0.8.tgz#7b21eaa17a8ee1b0554b10b8ae8728d7138dbf9a"
- integrity sha512-NUEPQedbz4lJs4L/xacW4T2hPJDhelX/fKW85VOrHPzNCbn3TRjeLzoZzehOAEvpLLxj0OxeI2sa4Xvm+AqQPQ==
- dependencies:
- "@types/common-tags" "1.8.0"
- "@types/json-schema" "7.0.7"
- common-tags "1.8.0"
- defekt "7.2.3"
-
get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
@@ -7247,7 +7240,14 @@ get-port@^5.1.1:
resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193"
integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==
-get-stream@^5.0.0:
+get-stream@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0, get-stream@^5.1.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
@@ -7363,17 +7363,6 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@^5.0.15:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
@@ -7386,6 +7375,13 @@ glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"
+ integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==
+ dependencies:
+ ini "2.0.0"
+
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -7420,18 +7416,28 @@ globby@^7.1.1:
pify "^3.0.0"
slash "^1.0.0"
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6:
version "4.2.8"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
-graphql-client@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/graphql-client/-/graphql-client-2.0.1.tgz#d4a85a9fd2b04a0ef732e242250fac132579a4da"
- integrity sha512-XXdjUD3mwsBDcUB7g+iXQeRt+3gmIbvA/Yx1nE5aq2RQmaJwiH4hEoYw27AW8cDR90pCrPlHJAb1jJq3zUMbZA==
- dependencies:
- isomorphic-fetch "^2.2.1"
-
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
@@ -7544,6 +7550,11 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@@ -7568,6 +7579,11 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
+hat@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a"
+ integrity sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=
+
he@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -7689,7 +7705,7 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
-http-cache-semantics@^4.1.0:
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
@@ -7710,6 +7726,17 @@ http-errors@1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
+http-errors@1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
+ integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.1"
+
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
@@ -7809,7 +7836,7 @@ hyphenate-style-name@^1.0.3:
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
-iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.5:
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -7828,7 +7855,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0:
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
-ieee754@^1.1.13, ieee754@^1.1.4:
+ieee754@^1.1.4:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
@@ -7838,6 +7865,11 @@ iferr@^0.1.5:
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+ignore-by-default@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+ integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
+
ignore-walk@^3.0.3:
version "3.0.4"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
@@ -7855,16 +7887,6 @@ ignore@^5.1.4, ignore@^5.1.8:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
-immediate@3.3.0, immediate@^3.2.3:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266"
- integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==
-
-immediate@~3.0.5:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
- integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
-
immer@^9.0.6:
version "9.0.6"
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73"
@@ -7892,6 +7914,11 @@ import-from@^3.0.0:
dependencies:
resolve-from "^5.0.0"
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
import-local@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
@@ -7938,6 +7965,11 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
@@ -8162,11 +8194,6 @@ is-docker@^2.0.0, is-docker@^2.1.1:
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-is-electron@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.0.tgz#8943084f09e8b731b3a7a0298a7b5d56f6b7eef0"
- integrity sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==
-
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -8206,13 +8233,6 @@ is-generator-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-is-generator-function@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
- integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
- dependencies:
- has-tostringtag "^1.0.0"
-
is-glob@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -8232,6 +8252,14 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3:
resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
+is-installed-globally@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+ integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
+ dependencies:
+ global-dirs "^3.0.0"
+ is-path-inside "^3.0.2"
+
is-ip@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8"
@@ -8249,27 +8277,16 @@ is-map@^2.0.1, is-map@^2.0.2:
resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
-is-my-ip-valid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
- integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==
-
-is-my-json-valid@*, is-my-json-valid@2.20.5:
- version "2.20.5"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz#5eca6a8232a687f68869b7361be1612e7512e5df"
- integrity sha512-VTPuvvGQtxvCeghwspQu1rBgjYUT6FGxPlvFKbYuFtgc4ADsX3U5ihZOYN0qyU6u+d4X9xXb0IT5O6QpXKt87A==
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- is-my-ip-valid "^1.0.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
is-negative-zero@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
+is-npm@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"
+ integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==
+
is-number-object@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
@@ -8336,11 +8353,6 @@ is-potential-custom-element-name@^1.0.1:
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-is-property@^1.0.0, is-property@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
- integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
-
is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.1, is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -8354,6 +8366,11 @@ is-set@^2.0.1, is-set@^2.0.2:
resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+is-shared-array-buffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
+ integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
+
is-ssh@^1.3.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e"
@@ -8361,11 +8378,6 @@ is-ssh@^1.3.0:
dependencies:
protocols "^1.1.0"
-is-stream@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-
is-stream@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
@@ -8397,7 +8409,7 @@ is-text-path@^1.0.1:
dependencies:
text-extensions "^1.0.0"
-is-typed-array@^1.1.3, is-typed-array@^1.1.7:
+is-typed-array@^1.1.7:
version "1.1.8"
resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79"
integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==
@@ -8423,6 +8435,13 @@ is-weakmap@^2.0.1:
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+is-weakref@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
is-weakset@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83"
@@ -8445,6 +8464,11 @@ is-wsl@^2.2.0:
dependencies:
is-docker "^2.0.0"
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -8477,14 +8501,6 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-isomorphic-fetch@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
- integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
- dependencies:
- node-fetch "^1.0.1"
- whatwg-fetch ">=0.10.0"
-
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -8981,11 +8997,6 @@ jest@^27.2.3:
import-local "^3.0.2"
jest-cli "^27.2.3"
-js-sha3@0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
- integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -9085,6 +9096,11 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+json-buffer@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
+ integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+
json-format@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-format/-/json-format-1.0.1.tgz#143f67e62af129d6bffed288a46265ea23d0df0c"
@@ -9115,6 +9131,13 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+json0-ot-diff@^1.0.5, json0-ot-diff@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/json0-ot-diff/-/json0-ot-diff-1.1.2.tgz#3565b8b016992b750c364558f5b5ffd56a0749c2"
+ integrity sha512-je6cDbmPc+BkbfyvKo7y1jgQLTrX81L8fkKEIPXRUGFSxK4HTSF6u44ELR35i12tEIWh5+8KfIJH2aJgzKrFww==
+ dependencies:
+ deep-equal "^1.0.1"
+
json5@2.x, json5@^2.1.2:
version "2.2.0"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
@@ -9143,16 +9166,6 @@ jsonparse@^1.2.0, jsonparse@^1.3.1:
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
-jsonpointer@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc"
- integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==
-
-jsonschema-key-compression@1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/jsonschema-key-compression/-/jsonschema-key-compression-1.4.0.tgz#49346627f64e132ab3585fd5abd4923d4aedc544"
- integrity sha512-ADDtLCnu5bUa4b9dDshc2u4Z1XXReX3kGhZLJ9OqZD6f7g+Gm/Dyn9ex4tgOag5tfFLfNK9N7p2I5LkVR/Eyiw==
-
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -9163,86 +9176,82 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
-jss-plugin-camel-case@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.0.tgz#575fd849202d36713a6970796458e375754446c7"
- integrity sha512-yxlXrXwcCdGw+H4BC187dEu/RFyW8joMcWfj8Rk9UPgWTKu2Xh7Sib4iW3xXjHe/t5phOHF1rBsHleHykWix7g==
+jss-plugin-camel-case@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7"
+ integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==
dependencies:
"@babel/runtime" "^7.3.1"
hyphenate-style-name "^1.0.3"
- jss "10.8.0"
+ jss "10.9.0"
-jss-plugin-default-unit@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.0.tgz#98db5962e62abbf43f1cc111e62cb70ffb09db59"
- integrity sha512-9XJV546cY9zV9OvIE/v/dOaxSi4062VfYQQfwbplRExcsU2a79Yn+qDz/4ciw6P4LV1Naq90U+OffAGRHfNq/Q==
+jss-plugin-default-unit@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991"
+ integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==
dependencies:
"@babel/runtime" "^7.3.1"
- jss "10.8.0"
+ jss "10.9.0"
-jss-plugin-global@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.8.0.tgz#0c2b0c056087f5846d600f3332eeb7a1a8b9c9f2"
- integrity sha512-H/8h/bHd4e7P0MpZ9zaUG8NQSB2ie9rWo/vcCP6bHVerbKLGzj+dsY22IY3+/FNRS8zDmUyqdZx3rD8k4nmH4w==
+jss-plugin-global@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f"
+ integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==
dependencies:
"@babel/runtime" "^7.3.1"
- jss "10.8.0"
+ jss "10.9.0"
-jss-plugin-nested@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.8.0.tgz#7ef9a815e9c9fbede41a8f52ce75cffb4c3b86d5"
- integrity sha512-MhmINZkSxyFILcFBuDoZmP1+wj9fik/b9SsjoaggkGjdvMQCES21mj4K5ZnRGVm448gIXyi9j/eZjtDzhaHUYQ==
+jss-plugin-nested@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3"
+ integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==
dependencies:
"@babel/runtime" "^7.3.1"
- jss "10.8.0"
+ jss "10.9.0"
tiny-warning "^1.0.2"
-jss-plugin-props-sort@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.0.tgz#2a83e8ca80d72828495bad57b485f7d55a33543b"
- integrity sha512-VY+Wt5WX5GMsXDmd+Ts8+O16fpiCM81svbox++U3LDbJSM/g9FoMx3HPhwUiDfmgHL9jWdqEuvSl/JAk+mh6mQ==
+jss-plugin-props-sort@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d"
+ integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==
dependencies:
"@babel/runtime" "^7.3.1"
- jss "10.8.0"
+ jss "10.9.0"
-jss-plugin-rule-value-function@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.0.tgz#e011ed180789229e7ea8f75c222d34810bcab520"
- integrity sha512-R8N8Ma6Oye1F9HroiUuHhVjpPsVq97uAh+rMI6XwKLqirIu2KFb5x33hPj+vNBMxSHc9jakhf5wG0BbQ7fSDOg==
+jss-plugin-rule-value-function@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67"
+ integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==
dependencies:
"@babel/runtime" "^7.3.1"
- jss "10.8.0"
+ jss "10.9.0"
tiny-warning "^1.0.2"
-jss-plugin-vendor-prefixer@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.0.tgz#024b6d77be50b68e5dfca2c75f68091d8b722d61"
- integrity sha512-G1zD0J8dFwKZQ+GaZaay7A/Tg7lhDw0iEkJ/iFFA5UPuvZFpMprCMQttXcTBhLlhhWnyZ8YPn4yqp+amrhQekw==
+jss-plugin-vendor-prefixer@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a"
+ integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==
dependencies:
"@babel/runtime" "^7.3.1"
css-vendor "^2.0.8"
- jss "10.8.0"
+ jss "10.9.0"
-jss@10.8.0, jss@^10.5.1:
- version "10.8.0"
- resolved "https://registry.yarnpkg.com/jss/-/jss-10.8.0.tgz#5063ee73aabd9f228ea3849df7962f0d2e213a42"
- integrity sha512-6fAMLJrVQ8epM5ghghxWqCwRR0ZamP2cKbOAtzPudcCMSNdAqtvmzQvljUZYR8OXJIeb/IpZeOXA1sDXms4R1w==
+jss@10.9.0, jss@^10.8.2:
+ version "10.9.0"
+ resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b"
+ integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==
dependencies:
"@babel/runtime" "^7.3.1"
csstype "^3.0.2"
is-in-browser "^1.1.3"
tiny-warning "^1.0.2"
-jstransform@~11.0.0:
- version "11.0.3"
- resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223"
- integrity sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
dependencies:
- base62 "^1.1.0"
- commoner "^0.10.1"
- esprima-fb "^15001.1.0-dev-harmony-fb"
- object-assign "^2.0.0"
- source-map "^0.4.2"
+ json-buffer "3.0.0"
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
@@ -9273,6 +9282,13 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+latest-version@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ dependencies:
+ package-json "^6.3.0"
+
lerna@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/lerna/-/lerna-4.0.0.tgz#b139d685d50ea0ca1be87713a7c2f44a5b678e9e"
@@ -9302,95 +9318,6 @@ levdist@^1.0.0:
resolved "https://registry.yarnpkg.com/levdist/-/levdist-1.0.0.tgz#91d7a3044964f2ccc421a0477cac827fe75c5718"
integrity sha1-kdejBElk8szEIaBHfKyCf+dcVxg=
-level-codec@9.0.2, level-codec@^9.0.0:
- version "9.0.2"
- resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc"
- integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==
- dependencies:
- buffer "^5.6.0"
-
-level-concat-iterator@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263"
- integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==
-
-level-errors@^2.0.0, level-errors@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8"
- integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==
- dependencies:
- errno "~0.1.1"
-
-level-iterator-stream@~4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c"
- integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==
- dependencies:
- inherits "^2.0.4"
- readable-stream "^3.4.0"
- xtend "^4.0.2"
-
-level-js@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55"
- integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==
- dependencies:
- abstract-leveldown "~6.2.3"
- buffer "^5.5.0"
- inherits "^2.0.3"
- ltgt "^2.1.2"
-
-level-packager@^5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939"
- integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==
- dependencies:
- encoding-down "^6.3.0"
- levelup "^4.3.2"
-
-level-supports@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d"
- integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==
- dependencies:
- xtend "^4.0.2"
-
-level-write-stream@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc"
- integrity sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=
- dependencies:
- end-stream "~0.1.0"
-
-level@6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6"
- integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==
- dependencies:
- level-js "^5.0.0"
- level-packager "^5.1.0"
- leveldown "^5.4.0"
-
-leveldown@5.6.0, leveldown@^5.4.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98"
- integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==
- dependencies:
- abstract-leveldown "~6.2.1"
- napi-macros "~2.0.0"
- node-gyp-build "~4.1.0"
-
-levelup@4.4.0, levelup@^4.3.2:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6"
- integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==
- dependencies:
- deferred-leveldown "~5.3.0"
- level-errors "~2.0.0"
- level-iterator-stream "~4.0.0"
- level-supports "~1.0.0"
- xtend "~4.0.0"
-
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -9432,13 +9359,6 @@ license-webpack-plugin@^4.0.2:
dependencies:
webpack-sources "^3.0.0"
-lie@3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
- integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
- dependencies:
- immediate "~3.0.5"
-
line-diff@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/line-diff/-/line-diff-2.1.1.tgz#a389799b931375a3b1e764964ad0b0b3ce60d6f6"
@@ -9557,7 +9477,7 @@ lodash.flattendeep@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
-lodash.get@^4, lodash.get@^4.4.2:
+lodash.get@^4:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
@@ -9619,6 +9539,16 @@ lower-case@^2.0.2:
dependencies:
tslib "^2.0.3"
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
@@ -9633,11 +9563,6 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-ltgt@2.2.1, ltgt@^2.1.2:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5"
- integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=
-
lz-string@^1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
@@ -9782,6 +9707,11 @@ memory-fs@^0.5.0:
errno "^0.1.3"
readable-stream "^2.0.1"
+memorystream@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
+ integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
+
meow@^8.0.0:
version "8.1.2"
resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
@@ -9851,11 +9781,6 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4:
braces "^3.0.1"
picomatch "^2.2.3"
-microseconds@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39"
- integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==
-
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -9869,6 +9794,11 @@ mime-db@1.49.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed"
integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
"mime-db@>= 1.43.0 < 2":
version "1.50.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f"
@@ -9881,6 +9811,13 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17,
dependencies:
mime-db "1.49.0"
+mime-types@~2.1.34:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
mime@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
@@ -9896,6 +9833,11 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+mimic-response@^1.0.0, mimic-response@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
min-indent@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
@@ -9911,7 +9853,7 @@ minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4:
+minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -10042,7 +9984,7 @@ mkdirp-infer-owner@^2.0.0:
infer-owner "^1.0.4"
mkdirp "^1.0.3"
-mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5:
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -10059,14 +10001,6 @@ modify-values@^1.0.0:
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
-modifyjs@0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/modifyjs/-/modifyjs-0.3.1.tgz#72469477fb4c470971d617a63ba1bbde9aaac7cf"
- integrity sha1-ckaUd/tMRwlx1hemO6G73pqqx88=
- dependencies:
- clone "^2.1.1"
- deep-equal "^1.0.1"
-
module-alias@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0"
@@ -10104,7 +10038,7 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-ms@^2.0.0, ms@^2.1.1:
+ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -10143,13 +10077,6 @@ nan@^2.12.1:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
-nano-time@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef"
- integrity sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=
- dependencies:
- big-integer "^1.6.16"
-
nanocolors@^0.1.0, nanocolors@^0.1.5:
version "0.1.12"
resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.1.12.tgz#8577482c58cbd7b5bb1681db4cf48f11a87fd5f6"
@@ -10182,11 +10109,6 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-napi-macros@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b"
- integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==
-
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -10207,6 +10129,11 @@ negotiator@0.6.2, negotiator@^0.6.2:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+negotiator@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+ integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
@@ -10217,6 +10144,11 @@ nested-error-stacks@~2.0.1:
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b"
integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -10225,32 +10157,11 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
-node-fetch@*:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.0.0.tgz#79da7146a520036f2c5f644e4a26095f17e411ea"
- integrity sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==
- dependencies:
- data-uri-to-buffer "^3.0.1"
- fetch-blob "^3.1.2"
-
-node-fetch@2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
- integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
-
node-fetch@2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
-node-fetch@^1.0.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
node-fetch@^2.6.1:
version "2.6.5"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd"
@@ -10263,11 +10174,6 @@ node-forge@^0.10.0:
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
-node-gyp-build@~4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb"
- integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==
-
node-gyp@^5.0.2:
version "5.1.1"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e"
@@ -10345,6 +10251,22 @@ node-releases@^1.1.76:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.76.tgz#df245b062b0cafbd5282ab6792f7dccc2d97f36e"
integrity sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==
+nodemon@^2.0.15:
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.15.tgz#504516ce3b43d9dc9a955ccd9ec57550a31a8d4e"
+ integrity sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==
+ dependencies:
+ chokidar "^3.5.2"
+ debug "^3.2.7"
+ ignore-by-default "^1.0.1"
+ minimatch "^3.0.4"
+ pstree.remy "^1.1.8"
+ semver "^5.7.1"
+ supports-color "^5.5.0"
+ touch "^3.1.0"
+ undefsafe "^2.0.5"
+ update-notifier "^5.1.0"
+
noms@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859"
@@ -10368,6 +10290,13 @@ nopt@^5.0.0:
dependencies:
abbrev "1"
+nopt@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+ integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
+ dependencies:
+ abbrev "1"
+
normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -10400,15 +10329,20 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+normalize-url@^4.1.0:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
+ integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
+
normalize-url@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-notistack@^1.0.9:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/notistack/-/notistack-1.0.10.tgz#8db90830034383467a04184f1fa8ff77f4fc58a5"
- integrity sha512-z0y4jJaVtOoH3kc3GtNUlhNTY+5LE04QDeLVujX3VPhhzg67zw055mZjrBF+nzpv3V9aiPNph1EgRU4+t8kQTQ==
+notistack@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/notistack/-/notistack-2.0.3.tgz#9007550e5cbc14df84d1d54e7a55ac0948eb59e8"
+ integrity sha512-krmVFtTO9kEY1Pa4NrbyexrjiRcV6TqBM2xLx8nuDea1g96Z/OZfkvVLmYKkTvoSJ3jyQntWK16z86ssW5kt4A==
dependencies:
clsx "^1.1.0"
hoist-non-react-statics "^3.3.0"
@@ -10501,6 +10435,21 @@ npm-registry-fetch@^9.0.0:
minizlib "^2.0.0"
npm-package-arg "^8.0.0"
+npm-run-all@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
+ integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ chalk "^2.4.1"
+ cross-spawn "^6.0.5"
+ memorystream "^0.3.1"
+ minimatch "^3.0.4"
+ pidtree "^0.3.0"
+ read-pkg "^3.0.0"
+ shell-quote "^1.6.1"
+ string.prototype.padend "^3.0.0"
+
npm-run-path@^4.0.0, npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
@@ -10540,12 +10489,7 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-object-assign@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
- integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=
-
-object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1:
+object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -10577,11 +10521,6 @@ object-keys@^1.0.12, object-keys@^1.1.1:
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-object-path@0.11.5:
- version "0.11.5"
- resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a"
- integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==
-
object-visit@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
@@ -10648,11 +10587,6 @@ objectorarray@^1.0.5:
resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5"
integrity sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==
-oblivious-set@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566"
- integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==
-
obuf@^1.0.0, obuf@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
@@ -10733,6 +10667,16 @@ osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
+ot-json0@^1.0.1, ot-json0@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ot-json0/-/ot-json0-1.1.0.tgz#f5edeff162673b62f0f136bb64724c40ac5e590d"
+ integrity sha512-wf5fci7GGpMYRDnbbdIFQymvhsbFACMHtxjivQo5KgvAHlxekyfJ9aPsRr6YfFQthQkk4bmsl5yESrZwC/oMYQ==
+
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
p-each-series@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
@@ -10854,6 +10798,16 @@ p-waterfall@^2.1.1:
dependencies:
p-reduce "^2.0.0"
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
pacote@^11.2.6:
version "11.3.5"
resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2"
@@ -11029,6 +10983,11 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -11085,6 +11044,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
+pidtree@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
+ integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
+
pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -11148,11 +11112,6 @@ pkg-up@^2.0.0:
dependencies:
find-up "^2.1.0"
-popper.js@1.16.1-lts:
- version "1.16.1-lts"
- resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
- integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
-
portfinder@^1.0.28:
version "1.0.28"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
@@ -11217,248 +11176,6 @@ postcss@^8.2.15:
nanoid "^3.1.25"
source-map-js "^0.6.2"
-pouchdb-abstract-mapreduce@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.2.2.tgz#dd1b10a83f8d24361dce9aaaab054614b39f766f"
- integrity sha512-7HWN/2yV2JkwMnGnlp84lGvFtnm0Q55NiBUdbBcaT810+clCGKvhssBCrXnmwShD1SXTwT83aszsgiSfW+SnBA==
- dependencies:
- pouchdb-binary-utils "7.2.2"
- pouchdb-collate "7.2.2"
- pouchdb-collections "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-fetch "7.2.2"
- pouchdb-mapreduce-utils "7.2.2"
- pouchdb-md5 "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-adapter-http@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-adapter-http/-/pouchdb-adapter-http-7.2.2.tgz#7b04a247aae5db67af6ea8567cc93b2aca8e282f"
- integrity sha512-6Z6umJq7b5sRXwDM3CLfHrGhJPMR02M5osUxkwH1PpqcTF0EXPJvX+PtzTjSPcXWfaK6kgH3zNrRKQDdpzjI9A==
- dependencies:
- argsarray "0.0.1"
- pouchdb-binary-utils "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-fetch "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-adapter-idb@^7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-adapter-idb/-/pouchdb-adapter-idb-7.2.2.tgz#0a4b6c6f6639f93e2e50cb20d50b5fb6eaf1e80e"
- integrity sha512-swSVQFm/p5CPKP0zyOmtv/hFpTyjtDlPAKTpxH4gEm9V+K30kDZ8ciAHaCkGEBSfWfZFYUI8/VOnAL2L0WIIeA==
- dependencies:
- pouchdb-adapter-utils "7.2.2"
- pouchdb-binary-utils "7.2.2"
- pouchdb-collections "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-json "7.2.2"
- pouchdb-merge "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-adapter-utils@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.2.2.tgz#c64426447d9044ba31517a18500d6d2d28abd47d"
- integrity sha512-2CzZkTyTyHZkr3ePiWFMTiD5+56lnembMjaTl8ohwegM0+hYhRyJux0biAZafVxgIL4gnCUC4w2xf6WVztzKdg==
- dependencies:
- pouchdb-binary-utils "7.2.2"
- pouchdb-collections "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-md5 "7.2.2"
- pouchdb-merge "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-all-dbs@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/pouchdb-all-dbs/-/pouchdb-all-dbs-1.1.1.tgz#85f04a39cafda52497ec49abf1c93bb5e72813f6"
- integrity sha512-UUnsdmcnRSQ8MAOYSJjfTwKkQNb/6fvOfd/f7dNNivWZ2YDYVuMfgw1WQdL634yEtcXTxAENZ/EyLRdzPCB41A==
- dependencies:
- argsarray "0.0.1"
- es3ify "^0.2.2"
- inherits "~2.0.1"
- pouchdb-promise "6.4.3"
- tiny-queue "^0.2.0"
-
-pouchdb-binary-utils@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.2.2.tgz#0690b348052c543b1e67f032f47092ca82bcb10e"
- integrity sha512-shacxlmyHbUrNfE6FGYpfyAJx7Q0m91lDdEAaPoKZM3SzAmbtB1i+OaDNtYFztXjJl16yeudkDb3xOeokVL3Qw==
- dependencies:
- buffer-from "1.1.1"
-
-pouchdb-changes-filter@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-changes-filter/-/pouchdb-changes-filter-7.2.2.tgz#e4d1ad5a9b57bd2d756e1ee2814463c4a91822b6"
- integrity sha512-1txJnTtL/C7zrq+spLt3pH9EDHTWmLLwp2zx8zUQrkt6eQtuLuXUI7G84xe+hfpU0rQvUzp/APYMnko0/6Rw0A==
- dependencies:
- pouchdb-errors "7.2.2"
- pouchdb-selector-core "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-checkpointer@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-checkpointer/-/pouchdb-checkpointer-7.2.2.tgz#8ecc8edf94dbb866a4c79f5e787a018cdeb9f475"
- integrity sha512-O2i0vjLnZwcuSI41omrdaiyPWofCRLPBs+Sw5ad/GtYQbvxRt0CJEqYCrOaDnAsgIVoRG5PK/9gDzszv2CQsvg==
- dependencies:
- pouchdb-collate "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-collate@7.2.2, pouchdb-collate@^7.1.1:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-7.2.2.tgz#fc261f5ef837c437e3445fb0abc3f125d982c37c"
- integrity sha512-/SMY9GGasslknivWlCVwXMRMnQ8myKHs4WryQ5535nq1Wj/ehpqWloMwxEQGvZE1Sda3LOm7/5HwLTcB8Our+w==
-
-pouchdb-collections@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.2.2.tgz#aeed77f33322429e3f59d59ea233b48ff0e68572"
- integrity sha512-6O9zyAYlp3UdtfneiMYuOCWdUCQNo2bgdjvNsMSacQX+3g8WvIoFQCYJjZZCpTttQGb+MHeRMr8m2U95lhJTew==
-
-pouchdb-core@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-core/-/pouchdb-core-7.2.2.tgz#519402cf0fcaffcc903db9d484d901fc9dde33d5"
- integrity sha512-AnMmSH+xx12Vk6oASDRQoElXfV9fSn8MIwfus0oa2lqkxowx4bvidofZbhZfKEiE6QgKwFEOBzs56MS3znI8TQ==
- dependencies:
- argsarray "0.0.1"
- inherits "2.0.4"
- pouchdb-changes-filter "7.2.2"
- pouchdb-collections "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-fetch "7.2.2"
- pouchdb-merge "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-errors@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.2.2.tgz#80d811d65c766c9d20b755c6e6cc123f8c3c4792"
- integrity sha512-6GQsiWc+7uPfgEHeavG+7wuzH3JZW29Dnrvz8eVbDFE50kVFxNDVm3EkYHskvo5isG7/IkOx7PV7RPTA3keG3g==
- dependencies:
- inherits "2.0.4"
-
-pouchdb-fetch@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-fetch/-/pouchdb-fetch-7.2.2.tgz#492791236d60c899d7e9973f9aca0d7b9cc02230"
- integrity sha512-lUHmaG6U3zjdMkh8Vob9GvEiRGwJfXKE02aZfjiVQgew+9SLkuOxNw3y2q4d1B6mBd273y1k2Lm0IAziRNxQnA==
- dependencies:
- abort-controller "3.0.0"
- fetch-cookie "0.10.1"
- node-fetch "2.6.0"
-
-pouchdb-find@7.2.2, pouchdb-find@^7.1.1, pouchdb-find@^7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-7.2.2.tgz#1227afdd761812d508fe0794b3e904518a721089"
- integrity sha512-BmFeFVQ0kHmDehvJxNZl9OmIztCjPlZlVSdpijuFbk/Fi1EFPU1BAv3kLC+6DhZuOqU/BCoaUBY9sn66pPY2ag==
- dependencies:
- pouchdb-abstract-mapreduce "7.2.2"
- pouchdb-collate "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-fetch "7.2.2"
- pouchdb-md5 "7.2.2"
- pouchdb-selector-core "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-generate-replication-id@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-generate-replication-id/-/pouchdb-generate-replication-id-7.2.2.tgz#1b38d45836e206e5dd9ea2b5a0cb0a26f1b1d94c"
- integrity sha512-kBr9jTM3/qEQQDhraXdIhhy+OSi18X6pMJnWCSaT43194XuWZltnjH1Hty0aJ0U9s1UanyxqZwrb7wJT6QUpzg==
- dependencies:
- pouchdb-collate "7.2.2"
- pouchdb-md5 "7.2.2"
-
-pouchdb-json@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.2.2.tgz#b939be24b91a7322e9a24b8880a6e21514ec5e1f"
- integrity sha512-3b2S2ynN+aoB7aCNyDZc/4c0IAdx/ir3nsHB+/RrKE9cM3QkQYbnnE3r/RvOD1Xvr6ji/KOCBie+Pz/6sxoaug==
- dependencies:
- vuvuzela "1.0.3"
-
-pouchdb-mapreduce-utils@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.2.2.tgz#13a46a3cc2a3f3b8e24861da26966904f2963146"
- integrity sha512-rAllb73hIkU8rU2LJNbzlcj91KuulpwQu804/F6xF3fhZKC/4JQMClahk+N/+VATkpmLxp1zWmvmgdlwVU4HtQ==
- dependencies:
- argsarray "0.0.1"
- inherits "2.0.4"
- pouchdb-collections "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-md5@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.2.2.tgz#415401acc5a844112d765bd1fb4e5d9f38fb0838"
- integrity sha512-c/RvLp2oSh8PLAWU5vFBnp6ejJABIdKqboZwRRUrWcfGDf+oyX8RgmJFlYlzMMOh4XQLUT1IoaDV8cwlsuryZw==
- dependencies:
- pouchdb-binary-utils "7.2.2"
- spark-md5 "3.0.1"
-
-pouchdb-merge@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.2.2.tgz#940d85a2b532d6a93a6cab4b250f5648511bcc16"
- integrity sha512-6yzKJfjIchBaS7Tusuk8280WJdESzFfQ0sb4jeMUNnrqs4Cx3b0DIEOYTRRD9EJDM+je7D3AZZ4AT0tFw8gb4A==
-
-pouchdb-promise@6.4.3:
- version "6.4.3"
- resolved "https://registry.yarnpkg.com/pouchdb-promise/-/pouchdb-promise-6.4.3.tgz#74516f4acf74957b54debd0fb2c0e5b5a68ca7b3"
- integrity sha512-ruJaSFXwzsxRHQfwNHjQfsj58LBOY1RzGzde4PM5CWINZwFjCQAhZwfMrch2o/0oZT6d+Xtt0HTWhq35p3b0qw==
- dependencies:
- lie "3.1.1"
-
-pouchdb-replication@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-replication/-/pouchdb-replication-7.2.2.tgz#927abe24f9e69b68951c7b130e4926f14b984b1c"
- integrity sha512-+Q2zqXWaHPOut0jGMABplmlML+8jUzkefyxZXgU6bXSbC9kEJCBAkjaFeZsF10HpsQZ9tHZ577g5EOqj7V1lTQ==
- dependencies:
- inherits "2.0.4"
- pouchdb-checkpointer "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-generate-replication-id "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-selector-core@7.2.2, pouchdb-selector-core@^7.1.1:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-7.2.2.tgz#264d7436a8c8ac3801f39960e79875ef7f3879a0"
- integrity sha512-XYKCNv9oiNmSXV5+CgR9pkEkTFqxQGWplnVhO3W9P154H08lU0ZoNH02+uf+NjZ2kjse7Q1fxV4r401LEcGMMg==
- dependencies:
- pouchdb-collate "7.2.2"
- pouchdb-utils "7.2.2"
-
-pouchdb-utils@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.2.2.tgz#c17c4788f1d052b0daf4ef8797bbc4aaa3945aa4"
- integrity sha512-XmeM5ioB4KCfyB2MGZXu1Bb2xkElNwF1qG+zVFbQsKQij0zvepdOUfGuWvLRHxTOmt4muIuSOmWZObZa3NOgzQ==
- dependencies:
- argsarray "0.0.1"
- clone-buffer "1.0.0"
- immediate "3.3.0"
- inherits "2.0.4"
- pouchdb-collections "7.2.2"
- pouchdb-errors "7.2.2"
- pouchdb-md5 "7.2.2"
- uuid "8.1.0"
-
-pouchdb@^7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.2.2.tgz#fcae82862db527e4cf7576ed8549d1384961f364"
- integrity sha512-5gf5nw5XH/2H/DJj8b0YkvG9fhA/4Jt6kL0Y8QjtztVjb1y4J19Rg4rG+fUbXu96gsUrlyIvZ3XfM0b4mogGmw==
- dependencies:
- abort-controller "3.0.0"
- argsarray "0.0.1"
- buffer-from "1.1.1"
- clone-buffer "1.0.0"
- double-ended-queue "2.1.0-0"
- fetch-cookie "0.10.1"
- immediate "3.3.0"
- inherits "2.0.4"
- level "6.0.1"
- level-codec "9.0.2"
- level-write-stream "1.0.0"
- leveldown "5.6.0"
- levelup "4.4.0"
- ltgt "2.2.1"
- node-fetch "2.6.0"
- readable-stream "1.1.14"
- spark-md5 "3.0.1"
- through2 "3.0.2"
- uuid "8.1.0"
- vuvuzela "1.0.3"
-
prefix-style@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06"
@@ -11469,6 +11186,11 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+prepend-http@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
+ integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+
prettier-linter-helpers@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
@@ -11536,11 +11258,6 @@ prismjs@^1.24.0:
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756"
integrity sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==
-private@^0.1.6, private@~0.1.5:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
- integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
-
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -11607,7 +11324,7 @@ protocols@^1.1.0, protocols@^1.4.0:
resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8"
integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==
-proxy-addr@~2.0.5:
+proxy-addr@~2.0.5, proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
@@ -11625,6 +11342,11 @@ psl@^1.1.28, psl@^1.1.33:
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+pstree.remy@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
+ integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
+
public-encrypt@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
@@ -11682,7 +11404,14 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-q@^1.1.2, q@^1.5.1:
+pupa@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
+ integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
+ dependencies:
+ escape-goat "^2.0.0"
+
+q@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
@@ -11692,6 +11421,11 @@ qs@6.7.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+qs@6.9.7:
+ version "6.9.7"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe"
+ integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==
+
qs@^6.9.4:
version "6.10.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
@@ -11754,11 +11488,6 @@ randexp@0.4.6:
discontinuous-range "1.0.0"
ret "~0.1.10"
-random-token@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/random-token/-/random-token-0.0.8.tgz#1cf845af3fb31e57f7caa4b9a173478c46483b61"
- integrity sha1-HPhFrz+zHlf3yqS5oXNHjEZIO2E=
-
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -11789,6 +11518,16 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+raw-body@2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c"
+ integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "1.8.1"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
rc@^1.2.8, rc@~1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@@ -11872,25 +11611,11 @@ react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1, react-
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1:
+react-is@^17.0.1, react-is@^17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-react-pouchdb@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/react-pouchdb/-/react-pouchdb-2.1.0.tgz#1f6956ef90cd7a2636c809b2d639b9ea36901fa2"
- integrity sha512-6WxazCEEHpsxn1YKahTtp+gBTslKt7LiyQ87O7AR+SOG7A0sWGYNTELxBtWXfY/fTu3xXPOiR1HR2p/SpoiEPA==
- dependencies:
- "@babel/runtime" "^7.6.3"
- fast-json-stable-stringify "^2.0.0"
- hoist-non-react-statics "^3.3.0"
- lodash "^4.17.15"
- pouchdb-collate "^7.1.1"
- pouchdb-find "^7.1.1"
- pouchdb-selector-core "^7.1.1"
- use-subscription "^1.1.1"
-
react-redux@^7.2.5:
version "7.2.5"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.5.tgz#213c1b05aa1187d9c940ddfc0b29450957f6a3b8"
@@ -11951,7 +11676,7 @@ react-test-renderer@^16.0.0-0:
react-is "^16.8.6"
scheduler "^0.19.1"
-react-transition-group@^4.3.0, react-transition-group@^4.4.0:
+react-transition-group@^4.3.0, react-transition-group@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==
@@ -12077,17 +11802,7 @@ read@1, read@~1.0.1:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-readable-stream@1.1.14:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
+readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@@ -12096,11 +11811,6 @@ readable-stream@1.1.14:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
-readable-stream@~0.0.2:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d"
- integrity sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=
-
readable-stream@~1.0.31:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
@@ -12144,16 +11854,6 @@ rebass@^4.0.7:
dependencies:
reflexbox "^4.0.6"
-recast@^0.11.17:
- version "0.11.23"
- resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
- integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=
- dependencies:
- ast-types "0.9.6"
- esprima "~3.1.0"
- private "~0.1.5"
- source-map "~0.5.0"
-
rechoir@^0.7.0:
version "0.7.1"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
@@ -12161,6 +11861,11 @@ rechoir@^0.7.0:
dependencies:
resolve "^1.9.0"
+reconnecting-websocket@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz#3b0e5b96ef119e78a03135865b8bb0af1b948783"
+ integrity sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==
+
redent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
@@ -12174,6 +11879,11 @@ reduce-flatten@^2.0.0:
resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27"
integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==
+redux-persist@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8"
+ integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==
+
redux-thunk@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
@@ -12264,7 +11974,14 @@ regexpu-core@^4.7.1:
unicode-match-property-ecmascript "^2.0.0"
unicode-match-property-value-ecmascript "^2.0.0"
-registry-url@^5.1.0:
+registry-auth-token@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"
+ integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==
+ dependencies:
+ rc "^1.2.8"
+
+registry-url@^5.0.0, registry-url@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
@@ -12406,6 +12123,13 @@ resolve@~1.7.1:
dependencies:
path-parse "^1.0.5"
+responselike@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
+ integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ dependencies:
+ lowercase-keys "^1.0.0"
+
restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
@@ -12424,6 +12148,11 @@ rete-area-plugin@^0.2.1:
resolved "https://registry.yarnpkg.com/rete-area-plugin/-/rete-area-plugin-0.2.1.tgz#0afe4581baf99c36c904d08e4f0a835ed6604d86"
integrity sha512-MOeQRmSC/gjkZIMo0fNuomzunRplALqd86V+jSzuhBYchCw0wshv2/iXu4xRxVZkw9r1HpZxlz9gLkbatCbXMw==
+rete-comment-plugin@^0.7.0-rc.1:
+ version "0.7.0-rc.1"
+ resolved "https://registry.yarnpkg.com/rete-comment-plugin/-/rete-comment-plugin-0.7.0-rc.1.tgz#a8cc0e0858a655e543eb432b4bd1b82fa631a50d"
+ integrity sha512-Bc8HOFaR6IMozikpbeRzq8OFlDFpIpaIh3WbNkVvXiEINHgyBAmZw2gEtwtpf62F1MHWR7gdxvuwiMaVHKYeUQ==
+
rete-connection-plugin@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/rete-connection-plugin/-/rete-connection-plugin-0.9.0.tgz#3a6df36f55493a5c2ea021ae3147a0f0a6ada6ed"
@@ -12477,13 +12206,6 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
rimraf@^2.5.4, rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@@ -12491,6 +12213,13 @@ rimraf@^2.5.4, rimraf@^2.6.3:
dependencies:
glob "^7.1.3"
+rimraf@^3.0.0, rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -12526,71 +12255,19 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
-rxdb@^9.21.0:
- version "9.21.0"
- resolved "https://registry.yarnpkg.com/rxdb/-/rxdb-9.21.0.tgz#a53e12f711dd4035e387ff70c0edc383e3f8a252"
- integrity sha512-y7IVPUlSJbIxV726WyfCxtSaPvlU3ZspqafbDXbZa7STwlo55LO4G93QnwqqQp8DDyB0wG6fjMQBaZG/RDgRkw==
- dependencies:
- "@babel/runtime" "7.14.6"
- "@types/clone" "2.1.0"
- "@types/cors" "2.8.10"
- "@types/deep-equal" "1.0.1"
- "@types/express" "4.17.12"
- "@types/is-my-json-valid" "2.18.0"
- "@types/object-path" "0.11.0"
- "@types/pouchdb-core" "7.0.6"
- "@types/pouchdb-find" "6.3.6"
- "@types/pouchdb-replication" "6.4.2"
- "@types/spark-md5" "3.0.2"
- broadcast-channel "3.7.0"
- clone "^2.1.2"
- cors "2.8.5"
- crypto-js "4.0.0"
- custom-idle-queue "3.0.1"
- deep-equal "^2.0.1"
- event-reduce-js "1.4.0"
- express "4.17.1"
- get-graphql-from-jsonschema "8.0.8"
- graphql-client "2.0.1"
- is-electron "2.2.0"
- is-my-json-valid "2.20.5"
- jsonschema-key-compression "1.4.0"
- modifyjs "0.3.1"
- object-path "0.11.5"
- pouchdb-adapter-http "7.2.2"
- pouchdb-all-dbs "1.1.1"
- pouchdb-core "7.2.2"
- pouchdb-find "7.2.2"
- pouchdb-md5 "7.2.2"
- pouchdb-replication "7.2.2"
- pouchdb-selector-core "7.2.2"
- pouchdb-utils "7.2.2"
- random-token "0.0.8"
- spark-md5 "^3.0.1"
- url "^0.11.0"
- util "0.12.4"
- z-schema "5.0.1"
-
-rxjs@^6.6.0, rxjs@^6.6.3:
+rxjs@^6.6.0:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
dependencies:
tslib "^1.9.0"
-rxjs@^7.2.0:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6"
- integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==
- dependencies:
- tslib "~2.1.0"
-
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -12669,7 +12346,14 @@ selfsigned@^1.10.11:
dependencies:
node-forge "^0.10.0"
-"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
+semver-diff@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"
+ integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==
+ dependencies:
+ semver "^6.3.0"
+
+"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -12686,7 +12370,7 @@ semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^
dependencies:
lru-cache "^6.0.0"
-semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -12710,6 +12394,25 @@ send@0.17.1:
range-parser "~1.2.1"
statuses "~1.5.0"
+send@0.17.2:
+ version "0.17.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
+ integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "1.8.1"
+ mime "1.6.0"
+ ms "2.1.3"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
serialize-javascript@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
@@ -12747,6 +12450,16 @@ serve-static@1.14.1:
parseurl "~1.3.3"
send "0.17.1"
+serve-static@1.14.2:
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa"
+ integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.2"
+
set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@@ -12777,6 +12490,11 @@ setprototypeof@1.1.1:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
sha.js@^2.4.0, sha.js@^2.4.8:
version "2.4.11"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
@@ -12792,6 +12510,24 @@ shallow-clone@^3.0.0:
dependencies:
kind-of "^6.0.2"
+sharedb@^2.2.5:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/sharedb/-/sharedb-2.2.5.tgz#8f6e0b4db86a89c226ebb09e0c98dcec4116f467"
+ integrity sha512-uCy8Npx8Azf21PmNUGqfIKRbnisH2U+N9Z0CJILWq23+HqcWRAA5n35m/dMm4ZuTQalYeWlR2/kaV8Wm0nXr3g==
+ dependencies:
+ arraydiff "^0.1.1"
+ async "^2.6.3"
+ fast-deep-equal "^2.0.1"
+ hat "0.0.3"
+ ot-json0 "^1.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -12799,11 +12535,21 @@ shebang-command@^2.0.0:
dependencies:
shebang-regex "^3.0.0"
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+shell-quote@^1.6.1:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
+ integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
+
side-channel@^1.0.3, side-channel@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
@@ -12991,14 +12737,7 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-source-map@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0:
+source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
@@ -13013,21 +12752,6 @@ source-map@^0.7.3, source-map@~0.7.2:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-spark-md5@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.1.tgz#83a0e255734f2ab4e5c466e5a2cfc9ba2aa2124d"
- integrity sha512-0tF3AGSD1ppQeuffsLDIOWlKUd3lS92tFxcsrh5Pe3ZphhnoK+oXIBTzOAThZCiuINZLvpiLH/1VS1/ANEJVig==
-
-spark-md5@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc"
- integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==
-
-spawn-command@^0.0.2-1:
- version "0.0.2-1"
- resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
- integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=
-
spdx-correct@^3.0.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
@@ -13232,7 +12956,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string-width@^4.1.0, string-width@^4.2.0:
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -13241,6 +12965,15 @@ string-width@^4.1.0, string-width@^4.2.0:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
+string.prototype.padend@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1"
+ integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.1"
+
string.prototype.trim@^1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd"
@@ -13373,6 +13106,11 @@ styled-system@^5.0.0, styled-system@^5.1.5:
"@styled-system/variant" "^5.1.5"
object-assign "^4.1.1"
+stylis@4.0.13:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91"
+ integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
+
stylis@^4.0.3:
version "4.0.10"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240"
@@ -13383,7 +13121,7 @@ supports-color@^2.0.0:
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-supports-color@^5.3.0:
+supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
@@ -13397,7 +13135,7 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
-supports-color@^8.0.0, supports-color@^8.1.0:
+supports-color@^8.0.0:
version "8.1.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
@@ -13550,14 +13288,6 @@ throat@^6.0.1:
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
-through2@3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
- integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
- dependencies:
- inherits "^2.0.4"
- readable-stream "2 || 3"
-
through2@^2.0.0, through2@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
@@ -13573,7 +13303,7 @@ through2@^4.0.0:
dependencies:
readable-stream "3"
-through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.4:
+through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
@@ -13590,11 +13320,6 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
-tiny-queue@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046"
- integrity sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=
-
tiny-warning@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
@@ -13651,6 +13376,11 @@ to-object-path@^0.3.0:
dependencies:
kind-of "^3.0.2"
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
to-regex-range@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
@@ -13688,12 +13418,24 @@ toidentifier@1.0.0:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
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@^2.3.3 || ^3.0.1 || ^4.0.0", tough-cookie@^4.0.0:
+touch@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
+ integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
+ dependencies:
+ nopt "~1.0.10"
+
+tough-cookie@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
@@ -13729,11 +13471,6 @@ tr46@~0.0.3:
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
-tree-kill@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
- integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
-
trim-newlines@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
@@ -13801,7 +13538,7 @@ tslib@1.10.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
-tslib@2.1.0, tslib@~2.1.0:
+tslib@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
@@ -13857,6 +13594,11 @@ type-fest@^0.18.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
type-fest@^0.21.1, type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -13942,6 +13684,11 @@ unbox-primitive@^1.0.1:
has-symbols "^1.0.2"
which-boxed-primitive "^1.0.2"
+undefsafe@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
+ integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
+
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
@@ -13994,6 +13741,13 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
universal-user-agent@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
@@ -14009,14 +13763,6 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-unload@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7"
- integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==
- dependencies:
- "@babel/runtime" "^7.6.2"
- detect-node "^2.0.4"
-
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -14045,6 +13791,26 @@ upath@^2.0.1:
resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
+update-notifier@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9"
+ integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==
+ dependencies:
+ boxen "^5.0.0"
+ chalk "^4.1.0"
+ configstore "^5.0.1"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.4.0"
+ is-npm "^5.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.1.0"
+ pupa "^2.1.1"
+ semver "^7.3.4"
+ semver-diff "^3.1.1"
+ xdg-basedir "^4.0.0"
+
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -14062,6 +13828,13 @@ url-join@^4.0.0:
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
+url-parse-lax@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
+ integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ dependencies:
+ prepend-http "^2.0.0"
+
url@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
@@ -14070,13 +13843,6 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
-use-subscription@^1.1.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
- integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
- dependencies:
- object-assign "^4.1.1"
-
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
@@ -14108,18 +13874,6 @@ util@0.10.3:
dependencies:
inherits "2.0.1"
-util@0.12.4:
- version "0.12.4"
- resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253"
- integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==
- dependencies:
- inherits "^2.0.3"
- is-arguments "^1.0.4"
- is-generator-function "^1.0.7"
- is-typed-array "^1.1.3"
- safe-buffer "^5.1.2"
- which-typed-array "^1.1.2"
-
util@^0.10.3:
version "0.10.4"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
@@ -14144,11 +13898,6 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-uuid@8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d"
- integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==
-
uuid@^3.3.2, uuid@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
@@ -14188,12 +13937,7 @@ validate-npm-package-name@^3.0.0:
dependencies:
builtins "^1.0.3"
-validator@^13.6.0:
- version "13.6.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-13.6.0.tgz#1e71899c14cdc7b2068463cb24c1cc16f6ec7059"
- integrity sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==
-
-vary@^1, vary@~1.1.2:
+vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
@@ -14222,11 +13966,6 @@ vue@^2.5.17:
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==
-vuvuzela@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b"
- integrity sha1-O+FF5YJxxzylUnndhR8SpoIRSws=
-
w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
@@ -14296,11 +14035,6 @@ wcwidth@^1.0.0:
dependencies:
defaults "^1.0.3"
-web-streams-polyfill@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.1.1.tgz#1516f2d4ea8f1bdbfed15eb65cb2df87098c8364"
- integrity sha512-Czi3fG883e96T4DLEPRvufrF2ydhOOW1+1a6c3gNjH2aIh50DNFBdfwh2AKoOf1rXvpvavAoA11Qdq9+BKjE0Q==
-
web-vitals@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-1.1.2.tgz#06535308168986096239aa84716e68b4c6ae6d1c"
@@ -14545,11 +14279,6 @@ whatwg-encoding@^1.0.5:
dependencies:
iconv-lite "0.4.24"
-whatwg-fetch@>=0.10.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
- integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-
whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
@@ -14626,7 +14355,7 @@ which-typed-array@^1.1.2:
has-tostringtag "^1.0.0"
is-typed-array "^1.1.7"
-which@^1.3.1:
+which@^1.2.9, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -14647,6 +14376,13 @@ wide-align@^1.1.0:
dependencies:
string-width "^1.0.2 || 2"
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
wildcard@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
@@ -14677,11 +14413,6 @@ worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"
-wouter@^2.7.4:
- version "2.7.5"
- resolved "https://registry.yarnpkg.com/wouter/-/wouter-2.7.5.tgz#c7466a2630bed3a4ec010aea0cda42a5bae69e5d"
- integrity sha512-TOI9gD1wa7a8wW+lh3rjg0C+MjYGKMV3eC+++6D+7n1z36ZJIBPWe2G9Hs1jYNPsV7oKiPTI3UFC5TGhZjQfrQ==
-
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -14748,13 +14479,6 @@ write-pkg@^4.0.0:
type-fest "^0.4.1"
write-json-file "^3.2.0"
-write-stream@~0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1"
- integrity sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=
- dependencies:
- readable-stream "~0.0.2"
-
ws@^7.3.1, ws@^7.4.6:
version "7.5.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
@@ -14770,6 +14494,16 @@ ws@^8.1.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.2.tgz#ca684330c6dd6076a737250ed81ac1606cb0a63e"
integrity sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==
+ws@^8.5.0:
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
+ integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
+
+xdg-basedir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
+ integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+
xml-name-validator@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
@@ -14780,7 +14514,7 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
-xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -14842,14 +14576,3 @@ yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
-
-z-schema@5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-5.0.1.tgz#f4d4efb1e8763c968b5539e42d11b6a47e91da62"
- integrity sha512-Gp8xU2lULhREqTWj9t4BEAeA7M835n4fWJ9KjGWksV3wmLUdOJo2hAr+QYvkVZIGOOTyeN274g1f95dKRsgYgQ==
- dependencies:
- lodash.get "^4.4.2"
- lodash.isequal "^4.5.0"
- validator "^13.6.0"
- optionalDependencies:
- commander "^2.7.1"