diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 000000000..58993aaee
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+pnpm lint
diff --git a/apps/builder/.eslintrc.js b/apps/builder/.eslintrc.js
index c8da3b24f..b56159ea9 100644
--- a/apps/builder/.eslintrc.js
+++ b/apps/builder/.eslintrc.js
@@ -1,43 +1,4 @@
module.exports = {
- ignorePatterns: ['node_modules'],
- env: {
- browser: true,
- es6: true,
- },
- extends: [
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react/recommended',
- 'next/core-web-vitals',
- ],
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
- sourceType: 'module', // Allows for the use of imports
- ecmaFeatures: {
- jsx: true, // Allows for the parsing of JSX
- },
- },
- settings: {
- react: {
- version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use
- },
- },
- plugins: ['react', '@typescript-eslint'],
- rules: {
- 'react/no-unescaped-entities': [0],
- 'react/display-name': [0],
- 'no-restricted-imports': [
- 'error',
- {
- patterns: [
- '*/src/*',
- 'src/*',
- '*/src',
- '@/features/*/*',
- '!@/features/blocks/*',
- '!@/features/*/api',
- ],
- },
- ],
- },
+ root: true,
+ extends: ['custom'],
}
diff --git a/apps/builder/package.json b/apps/builder/package.json
index bd2d9a6bd..469b163c5 100644
--- a/apps/builder/package.json
+++ b/apps/builder/package.json
@@ -106,20 +106,16 @@
"@types/qs": "6.9.7",
"@types/react": "18.0.25",
"@types/tinycolor2": "1.4.3",
- "@typescript-eslint/eslint-plugin": "5.43.0",
- "@typescript-eslint/parser": "5.43.0",
- "configs": "workspace:*",
"db": "workspace:*",
"dotenv": "16.0.3",
- "eslint": "8.27.0",
- "eslint-config-next": "13.0.3",
- "eslint-plugin-react": "7.31.10",
"models": "workspace:*",
"next-transpile-modules": "10.0.0",
"superjson": "^1.11.0",
"tsconfig": "workspace:*",
"typescript": "4.8.4",
"utils": "workspace:*",
- "zod": "3.19.1"
+ "zod": "3.19.1",
+ "eslint": "8.28.0",
+ "eslint-config-custom": "workspace:*"
}
}
diff --git a/apps/builder/playwright.config.ts b/apps/builder/playwright.config.ts
index d4bed65dd..bfc5e56ba 100644
--- a/apps/builder/playwright.config.ts
+++ b/apps/builder/playwright.config.ts
@@ -1,6 +1,6 @@
import { PlaywrightTestConfig } from '@playwright/test'
import path from 'path'
-import { playwrightBaseConfig } from 'configs/playwright'
+import { playwrightBaseConfig } from 'utils/playwright/baseConfig'
const config: PlaywrightTestConfig = {
...playwrightBaseConfig,
diff --git a/apps/builder/src/components/SearchableDropdown.tsx b/apps/builder/src/components/SearchableDropdown.tsx
index fd7f5979e..00a00c0b1 100644
--- a/apps/builder/src/components/SearchableDropdown.tsx
+++ b/apps/builder/src/components/SearchableDropdown.tsx
@@ -36,7 +36,6 @@ export const SearchableDropdown = ({
const { onOpen, onClose, isOpen } = useDisclosure()
const [inputValue, setInputValue] = useState(selectedItem ?? '')
const debounced = useDebouncedCallback(
- // eslint-disable-next-line @typescript-eslint/no-empty-function
onValueChange ? onValueChange : () => {},
env('E2E_TEST') === 'true' ? 0 : debounceTimeout
)
diff --git a/apps/builder/src/components/VariableSearchInput.tsx b/apps/builder/src/components/VariableSearchInput.tsx
index d8e0084bb..ee0f19341 100644
--- a/apps/builder/src/components/VariableSearchInput.tsx
+++ b/apps/builder/src/components/VariableSearchInput.tsx
@@ -209,7 +209,7 @@ export const VariableSearchInput = ({
leftIcon={ }
bgColor={keyboardFocusIndex === 0 ? 'gray.200' : 'transparent'}
>
- Create "{inputValue}"
+ Create "{inputValue}"
)}
{filteredItems.length > 0 && (
diff --git a/apps/builder/src/features/account/UserProvider.tsx b/apps/builder/src/features/account/UserProvider.tsx
index ac046a196..b1a60e304 100644
--- a/apps/builder/src/features/account/UserProvider.tsx
+++ b/apps/builder/src/features/account/UserProvider.tsx
@@ -24,7 +24,6 @@ const userContext = createContext<{
currentWorkspaceId?: string
updateUser: (newUser: Partial) => void
saveUser: (newUser?: Partial) => Promise
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/apps/builder/src/features/auth/components/SignInPage.tsx b/apps/builder/src/features/auth/components/SignInPage.tsx
index d77f4f8e3..b95658239 100644
--- a/apps/builder/src/features/auth/components/SignInPage.tsx
+++ b/apps/builder/src/features/auth/components/SignInPage.tsx
@@ -24,7 +24,7 @@ export const SignInPage = ({ type }: Props) => {
{type === 'signin' ? (
- Don't have an account?{' '}
+ Don't have an account?{' '}
Sign up for free
) : (
diff --git a/apps/builder/src/features/billing/components/BillingContent/UsageContent/UsageContent.tsx b/apps/builder/src/features/billing/components/BillingContent/UsageContent/UsageContent.tsx
index 77a8f7972..3399fae88 100644
--- a/apps/builder/src/features/billing/components/BillingContent/UsageContent/UsageContent.tsx
+++ b/apps/builder/src/features/billing/components/BillingContent/UsageContent/UsageContent.tsx
@@ -52,8 +52,8 @@ export const UsageContent = ({ workspace }: Props) => {
p="3"
label={
- Your typebots are popular! You will soon reach your plan's
- chats limit. 🚀
+ Your typebots are popular! You will soon reach your
+ plan's chats limit. 🚀
Make sure to update your plan to increase
@@ -111,8 +111,8 @@ export const UsageContent = ({ workspace }: Props) => {
p="3"
label={
- Your typebots are popular! You will soon reach your plan's
- storage limit. 🚀
+ Your typebots are popular! You will soon reach your
+ plan's storage limit. 🚀
Make sure to update your plan in order to
diff --git a/apps/builder/src/features/billing/components/ChangePlanForm/ChangePlanForm.tsx b/apps/builder/src/features/billing/components/ChangePlanForm/ChangePlanForm.tsx
index 05d193a67..69db458bf 100644
--- a/apps/builder/src/features/billing/components/ChangePlanForm/ChangePlanForm.tsx
+++ b/apps/builder/src/features/billing/components/ChangePlanForm/ChangePlanForm.tsx
@@ -90,7 +90,7 @@ export const ChangePlanForm = () => {
Need custom limits? Specific features?{' '}
- Let's chat!
+ Let's chat!
diff --git a/apps/builder/src/features/blocks/integrations/googleSheets/components/GoogleSheetsSettingsBody/GoogleSheetsSettingsBody.tsx b/apps/builder/src/features/blocks/integrations/googleSheets/components/GoogleSheetsSettingsBody/GoogleSheetsSettingsBody.tsx
index eeed8b6a9..0e8622f62 100644
--- a/apps/builder/src/features/blocks/integrations/googleSheets/components/GoogleSheetsSettingsBody/GoogleSheetsSettingsBody.tsx
+++ b/apps/builder/src/features/blocks/integrations/googleSheets/components/GoogleSheetsSettingsBody/GoogleSheetsSettingsBody.tsx
@@ -162,14 +162,20 @@ const ActionOptions = ({
onOptionsChange({ ...options, cellsToExtract } as GoogleSheetsOptions)
const UpdatingCellItem = useMemo(
- () => (props: TableListItemProps) =>
- ,
+ () =>
+ function Component(props: TableListItemProps) {
+ return
+ },
[sheet?.columns]
)
const ExtractingCellItem = useMemo(
- () => (props: TableListItemProps) =>
- ,
+ () =>
+ function Component(props: TableListItemProps) {
+ return (
+
+ )
+ },
[sheet?.columns]
)
diff --git a/apps/builder/src/features/blocks/integrations/webhook/components/WebhookSettings/WebhookSettings.tsx b/apps/builder/src/features/blocks/integrations/webhook/components/WebhookSettings/WebhookSettings.tsx
index 19d06e17b..991828d6f 100644
--- a/apps/builder/src/features/blocks/integrations/webhook/components/WebhookSettings/WebhookSettings.tsx
+++ b/apps/builder/src/features/blocks/integrations/webhook/components/WebhookSettings/WebhookSettings.tsx
@@ -143,8 +143,10 @@ export const WebhookSettings = ({
}
const ResponseMappingInputs = useMemo(
- () => (props: TableListItemProps) =>
- ,
+ () =>
+ function Component(props: TableListItemProps) {
+ return
+ },
[responseKeys]
)
diff --git a/apps/builder/src/features/blocks/integrations/webhook/utils/getDeepKeys.ts b/apps/builder/src/features/blocks/integrations/webhook/utils/getDeepKeys.ts
index b4f82088a..3ceffc657 100644
--- a/apps/builder/src/features/blocks/integrations/webhook/utils/getDeepKeys.ts
+++ b/apps/builder/src/features/blocks/integrations/webhook/utils/getDeepKeys.ts
@@ -1,4 +1,3 @@
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const getDeepKeys = (obj: any): string[] => {
let keys: string[] = []
for (const key in obj) {
diff --git a/apps/builder/src/features/dashboard/components/AnnoucementModal.tsx b/apps/builder/src/features/dashboard/components/AnnoucementModal.tsx
index 3055a218c..b2fecfe7a 100644
--- a/apps/builder/src/features/dashboard/components/AnnoucementModal.tsx
+++ b/apps/builder/src/features/dashboard/components/AnnoucementModal.tsx
@@ -36,7 +36,7 @@ export const AnnoucementModal = ({ isOpen, onClose }: Props) => {
- What's new in Typebot 2.0?
+ What's new in Typebot 2.0?
Typebo 2.0 has been launched February the 15th 🎉.
diff --git a/apps/builder/src/features/dashboard/components/OnboardingModal.tsx b/apps/builder/src/features/dashboard/components/OnboardingModal.tsx
index 9a9290cbd..5e95abd36 100644
--- a/apps/builder/src/features/dashboard/components/OnboardingModal.tsx
+++ b/apps/builder/src/features/dashboard/components/OnboardingModal.tsx
@@ -8,7 +8,7 @@ import {
} from '@chakra-ui/react'
import { TypebotViewer } from 'bot-engine'
import { useUser } from '@/features/account'
-import { Answer, Typebot } from 'models'
+import { AnswerInput, Typebot } from 'models'
import React, { useEffect, useRef, useState } from 'react'
import { getViewerUrl, sendRequest } from 'utils'
import confetti from 'canvas-confetti'
@@ -79,7 +79,7 @@ export const OnboardingModal = ({ totalTypebots }: Props) => {
setTypebot(data as Typebot)
}
- const handleNewAnswer = async (answer: Answer) => {
+ const handleNewAnswer = async (answer: AnswerInput) => {
const isName = answer.variableId === 'cl126f4hf000i2e6d8zvzc3t1'
const isCompany = answer.variableId === 'cl126jqww000w2e6dq9yv4ifq'
const isCategories = answer.variableId === 'cl126mo3t001b2e6dvyi16bkd'
diff --git a/apps/builder/src/features/editor/hooks/useUndo.ts b/apps/builder/src/features/editor/hooks/useUndo.ts
index e4964d8fa..a649772b8 100644
--- a/apps/builder/src/features/editor/hooks/useUndo.ts
+++ b/apps/builder/src/features/editor/hooks/useUndo.ts
@@ -11,7 +11,7 @@ enum ActionType {
Flush = 'FLUSH',
}
-export interface Actions {
+export interface Actions {
set: (
newPresent: T | ((current: T) => T),
options?: { updateDate: boolean }
@@ -24,13 +24,13 @@ export interface Actions {
presentRef: React.MutableRefObject
}
-interface Action {
+interface Action {
type: ActionType
newPresent?: T
updateDate?: boolean
}
-export interface State {
+export interface State {
past: T[]
present: T
future: T[]
@@ -42,7 +42,10 @@ const initialState = {
future: [],
}
-const reducer = (state: State, action: Action) => {
+const reducer = (
+ state: State,
+ action: Action
+) => {
const { past, present, future } = state
switch (action.type) {
@@ -98,8 +101,6 @@ const reducer = (state: State, action: Action) => {
past: [...past, present].filter(isDefined),
present: {
...newPresent,
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- //@ts-ignore
updatedAt: updateDate ? new Date() : newPresent.updatedAt,
},
future: [],
@@ -111,11 +112,13 @@ const reducer = (state: State, action: Action) => {
}
}
-const useUndo = (initialPresent: T): [State, Actions] => {
+const useUndo = (
+ initialPresent: T
+): [State, Actions] => {
const [state, dispatch] = useReducer(reducer, {
...initialState,
present: initialPresent,
- }) as [State, React.Dispatch>]
+ })
const presentRef = useRef(initialPresent)
const canUndo = state.past.length !== 0
@@ -136,7 +139,7 @@ const useUndo = (initialPresent: T): [State, Actions] => {
const set = useCallback(
(newPresent: T | ((current: T) => T), options = { updateDate: true }) => {
const updatedTypebot =
- 'id' in newPresent
+ newPresent && 'id' in newPresent
? newPresent
: (newPresent as (current: T) => T)(presentRef.current)
presentRef.current = updatedTypebot
@@ -153,7 +156,10 @@ const useUndo = (initialPresent: T): [State, Actions] => {
dispatch({ type: ActionType.Flush })
}, [])
- return [state, { set, undo, redo, flush, canUndo, canRedo, presentRef }]
+ return [
+ state as State,
+ { set, undo, redo, flush, canUndo, canRedo, presentRef },
+ ]
}
export default useUndo
diff --git a/apps/builder/src/features/editor/providers/EditorProvider.tsx b/apps/builder/src/features/editor/providers/EditorProvider.tsx
index af3a747ac..ad5766260 100644
--- a/apps/builder/src/features/editor/providers/EditorProvider.tsx
+++ b/apps/builder/src/features/editor/providers/EditorProvider.tsx
@@ -16,7 +16,6 @@ const editorContext = createContext<{
setRightPanel: Dispatch>
startPreviewAtGroup: string | undefined
setStartPreviewAtGroup: Dispatch>
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/apps/builder/src/features/editor/providers/TypebotProvider/TypebotProvider.tsx b/apps/builder/src/features/editor/providers/TypebotProvider/TypebotProvider.tsx
index ec9e4e667..b40c9fbab 100644
--- a/apps/builder/src/features/editor/providers/TypebotProvider/TypebotProvider.tsx
+++ b/apps/builder/src/features/editor/providers/TypebotProvider/TypebotProvider.tsx
@@ -88,7 +88,6 @@ const typebotContext = createContext<
ItemsActions &
VariablesActions &
EdgesActions
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
>({})
diff --git a/apps/builder/src/features/folders/TypebotDndProvider.tsx b/apps/builder/src/features/folders/TypebotDndProvider.tsx
index 353dafe8e..ef83215ab 100644
--- a/apps/builder/src/features/folders/TypebotDndProvider.tsx
+++ b/apps/builder/src/features/folders/TypebotDndProvider.tsx
@@ -14,7 +14,6 @@ const typebotDndContext = createContext<{
setDraggedTypebot: Dispatch>
mouseOverFolderId?: string | null
setMouseOverFolderId: Dispatch>
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
}>({})
diff --git a/apps/builder/src/features/graph/components/Nodes/GroupNode/GroupNode.tsx b/apps/builder/src/features/graph/components/Nodes/GroupNode/GroupNode.tsx
index a10c49591..341588e5a 100644
--- a/apps/builder/src/features/graph/components/Nodes/GroupNode/GroupNode.tsx
+++ b/apps/builder/src/features/graph/components/Nodes/GroupNode/GroupNode.tsx
@@ -47,197 +47,196 @@ export const GroupNode = ({ group, groupIndex }: Props) => {
)
}
-const DraggableGroupNode = memo(
- ({
- group,
- groupIndex,
- onGroupDrag,
- }: Props & { onGroupDrag: (newCoord: Coordinates) => void }) => {
- const {
- connectingIds,
- setConnectingIds,
- previewingEdge,
- isReadOnly,
- focusedGroupId,
- setFocusedGroupId,
- graphPosition,
- } = useGraph()
- const { typebot, updateGroup } = useTypebot()
- const { setMouseOverGroup, mouseOverGroup } = useBlockDnd()
- const { setRightPanel, setStartPreviewAtGroup } = useEditor()
+const NonMemoizedDraggableGroupNode = ({
+ group,
+ groupIndex,
+ onGroupDrag,
+}: Props & { onGroupDrag: (newCoord: Coordinates) => void }) => {
+ const {
+ connectingIds,
+ setConnectingIds,
+ previewingEdge,
+ isReadOnly,
+ focusedGroupId,
+ setFocusedGroupId,
+ graphPosition,
+ } = useGraph()
+ const { typebot, updateGroup } = useTypebot()
+ const { setMouseOverGroup, mouseOverGroup } = useBlockDnd()
+ const { setRightPanel, setStartPreviewAtGroup } = useEditor()
- const [isMouseDown, setIsMouseDown] = useState(false)
- const [isConnecting, setIsConnecting] = useState(false)
- const [currentCoordinates, setCurrentCoordinates] = useState(
- group.graphCoordinates
+ const [isMouseDown, setIsMouseDown] = useState(false)
+ const [isConnecting, setIsConnecting] = useState(false)
+ const [currentCoordinates, setCurrentCoordinates] = useState(
+ group.graphCoordinates
+ )
+ const [groupTitle, setGroupTitle] = useState(group.title)
+
+ // When the group is moved from external action (e.g. undo/redo), update the current coordinates
+ useEffect(() => {
+ setCurrentCoordinates({
+ x: group.graphCoordinates.x,
+ y: group.graphCoordinates.y,
+ })
+ }, [group.graphCoordinates.x, group.graphCoordinates.y])
+
+ // Same for group title
+ useEffect(() => {
+ setGroupTitle(group.title)
+ }, [group.title])
+
+ const isPreviewing =
+ previewingEdge?.from.groupId === group.id ||
+ (previewingEdge?.to.groupId === group.id &&
+ isNotDefined(previewingEdge.to.blockId))
+ const isStartGroup =
+ isDefined(group.blocks[0]) && group.blocks[0].type === 'start'
+
+ const groupRef = useRef(null)
+ const [debouncedGroupPosition] = useDebounce(currentCoordinates, 100)
+ useEffect(() => {
+ if (!currentCoordinates || isReadOnly) return
+ if (
+ currentCoordinates?.x === group.graphCoordinates.x &&
+ currentCoordinates.y === group.graphCoordinates.y
)
- const [groupTitle, setGroupTitle] = useState(group.title)
+ return
+ updateGroup(groupIndex, { graphCoordinates: currentCoordinates })
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [debouncedGroupPosition])
- // When the group is moved from external action (e.g. undo/redo), update the current coordinates
- useEffect(() => {
- setCurrentCoordinates({
- x: group.graphCoordinates.x,
- y: group.graphCoordinates.y,
- })
- }, [group.graphCoordinates.x, group.graphCoordinates.y])
-
- // Same for group title
- useEffect(() => {
- setGroupTitle(group.title)
- }, [group.title])
-
- const isPreviewing =
- previewingEdge?.from.groupId === group.id ||
- (previewingEdge?.to.groupId === group.id &&
- isNotDefined(previewingEdge.to.blockId))
- const isStartGroup =
- isDefined(group.blocks[0]) && group.blocks[0].type === 'start'
-
- const groupRef = useRef(null)
- const [debouncedGroupPosition] = useDebounce(currentCoordinates, 100)
- useEffect(() => {
- if (!currentCoordinates || isReadOnly) return
- if (
- currentCoordinates?.x === group.graphCoordinates.x &&
- currentCoordinates.y === group.graphCoordinates.y
- )
- return
- updateGroup(groupIndex, { graphCoordinates: currentCoordinates })
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [debouncedGroupPosition])
-
- useEffect(() => {
- setIsConnecting(
- connectingIds?.target?.groupId === group.id &&
- isNotDefined(connectingIds.target?.blockId)
- )
- }, [connectingIds, group.id])
-
- const handleTitleSubmit = (title: string) =>
- title.length > 0 ? updateGroup(groupIndex, { title }) : undefined
-
- const handleMouseDown = (e: React.MouseEvent) => {
- e.stopPropagation()
- }
-
- const handleMouseEnter = () => {
- if (isReadOnly) return
- if (mouseOverGroup?.id !== group.id && !isStartGroup)
- setMouseOverGroup({ id: group.id, ref: groupRef })
- if (connectingIds)
- setConnectingIds({ ...connectingIds, target: { groupId: group.id } })
- }
-
- const handleMouseLeave = () => {
- if (isReadOnly) return
- setMouseOverGroup(undefined)
- if (connectingIds)
- setConnectingIds({ ...connectingIds, target: undefined })
- }
-
- const startPreviewAtThisGroup = () => {
- setStartPreviewAtGroup(group.id)
- setRightPanel(RightPanel.PREVIEW)
- }
-
- useDrag(
- ({ first, last, offset: [offsetX, offsetY], event, target }) => {
- event.stopPropagation()
- if ((target as HTMLElement).classList.contains('prevent-group-drag'))
- return
- if (first) {
- setFocusedGroupId(group.id)
- setIsMouseDown(true)
- }
- if (last) {
- setIsMouseDown(false)
- }
- const newCoord = {
- x: offsetX / graphPosition.scale,
- y: offsetY / graphPosition.scale,
- }
- setCurrentCoordinates(newCoord)
- onGroupDrag(newCoord)
- },
- {
- target: groupRef,
- pointer: { keys: false },
- from: () => [
- currentCoordinates.x * graphPosition.scale,
- currentCoordinates.y * graphPosition.scale,
- ],
- }
+ useEffect(() => {
+ setIsConnecting(
+ connectingIds?.target?.groupId === group.id &&
+ isNotDefined(connectingIds.target?.blockId)
)
+ }, [connectingIds, group.id])
- return (
-
- renderMenu={() => }
- isDisabled={isReadOnly || isStartGroup}
- >
- {(ref, isOpened) => (
-
-
-
-
-
- {typebot && (
-
- )}
- }
- aria-label={'Preview bot from this group'}
- pos="absolute"
- right={2}
- top={0}
- size="sm"
- variant="outline"
- onClick={startPreviewAtThisGroup}
- />
-
- )}
-
- )
+ const handleTitleSubmit = (title: string) =>
+ title.length > 0 ? updateGroup(groupIndex, { title }) : undefined
+
+ const handleMouseDown = (e: React.MouseEvent) => {
+ e.stopPropagation()
}
-)
+
+ const handleMouseEnter = () => {
+ if (isReadOnly) return
+ if (mouseOverGroup?.id !== group.id && !isStartGroup)
+ setMouseOverGroup({ id: group.id, ref: groupRef })
+ if (connectingIds)
+ setConnectingIds({ ...connectingIds, target: { groupId: group.id } })
+ }
+
+ const handleMouseLeave = () => {
+ if (isReadOnly) return
+ setMouseOverGroup(undefined)
+ if (connectingIds) setConnectingIds({ ...connectingIds, target: undefined })
+ }
+
+ const startPreviewAtThisGroup = () => {
+ setStartPreviewAtGroup(group.id)
+ setRightPanel(RightPanel.PREVIEW)
+ }
+
+ useDrag(
+ ({ first, last, offset: [offsetX, offsetY], event, target }) => {
+ event.stopPropagation()
+ if ((target as HTMLElement).classList.contains('prevent-group-drag'))
+ return
+ if (first) {
+ setFocusedGroupId(group.id)
+ setIsMouseDown(true)
+ }
+ if (last) {
+ setIsMouseDown(false)
+ }
+ const newCoord = {
+ x: offsetX / graphPosition.scale,
+ y: offsetY / graphPosition.scale,
+ }
+ setCurrentCoordinates(newCoord)
+ onGroupDrag(newCoord)
+ },
+ {
+ target: groupRef,
+ pointer: { keys: false },
+ from: () => [
+ currentCoordinates.x * graphPosition.scale,
+ currentCoordinates.y * graphPosition.scale,
+ ],
+ }
+ )
+
+ return (
+
+ renderMenu={() => }
+ isDisabled={isReadOnly || isStartGroup}
+ >
+ {(ref, isOpened) => (
+
+
+
+
+
+ {typebot && (
+
+ )}
+ }
+ aria-label={'Preview bot from this group'}
+ pos="absolute"
+ right={2}
+ top={0}
+ size="sm"
+ variant="outline"
+ onClick={startPreviewAtThisGroup}
+ />
+
+ )}
+
+ )
+}
+
+export const DraggableGroupNode = memo(NonMemoizedDraggableGroupNode)
diff --git a/apps/builder/src/features/graph/providers/GraphDndProvider.tsx b/apps/builder/src/features/graph/providers/GraphDndProvider.tsx
index a147e0a46..b90c1b428 100644
--- a/apps/builder/src/features/graph/providers/GraphDndProvider.tsx
+++ b/apps/builder/src/features/graph/providers/GraphDndProvider.tsx
@@ -27,7 +27,6 @@ const graphDndContext = createContext<{
setMouseOverGroup: Dispatch>
mouseOverBlock?: NodeInfo
setMouseOverBlock: Dispatch>
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/apps/builder/src/features/graph/providers/GraphProvider.tsx b/apps/builder/src/features/graph/providers/GraphProvider.tsx
index 11bda3fb8..5c42512c3 100644
--- a/apps/builder/src/features/graph/providers/GraphProvider.tsx
+++ b/apps/builder/src/features/graph/providers/GraphProvider.tsx
@@ -74,7 +74,6 @@ const graphContext = createContext<{
isReadOnly: boolean
focusedGroupId?: string
setFocusedGroupId: Dispatch>
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({
graphPosition: graphPositionDefaultValue,
diff --git a/apps/builder/src/features/graph/providers/GroupsCoordinateProvider.tsx b/apps/builder/src/features/graph/providers/GroupsCoordinateProvider.tsx
index 7fa122dab..3d070d508 100644
--- a/apps/builder/src/features/graph/providers/GroupsCoordinateProvider.tsx
+++ b/apps/builder/src/features/graph/providers/GroupsCoordinateProvider.tsx
@@ -12,7 +12,6 @@ import { GroupsCoordinates, Coordinates } from './GraphProvider'
const groupsCoordinatesContext = createContext<{
groupsCoordinates: GroupsCoordinates
updateGroupCoordinates: (groupId: string, newCoord: Coordinates) => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/apps/builder/src/features/results/ResultsProvider.tsx b/apps/builder/src/features/results/ResultsProvider.tsx
index 0495e511e..f5fe6d21c 100644
--- a/apps/builder/src/features/results/ResultsProvider.tsx
+++ b/apps/builder/src/features/results/ResultsProvider.tsx
@@ -17,7 +17,6 @@ const resultsContext = createContext<{
onDeleteResults: (totalResultsDeleted: number) => void
fetchNextPage: () => void
refetchResults: () => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/apps/builder/src/features/results/components/ResultsTable/ColumnsSettingsButton.tsx b/apps/builder/src/features/results/components/ResultsTable/ColumnsSettingsButton.tsx
index 8588327d5..84e6d6102 100644
--- a/apps/builder/src/features/results/components/ResultsTable/ColumnsSettingsButton.tsx
+++ b/apps/builder/src/features/results/components/ResultsTable/ColumnsSettingsButton.tsx
@@ -13,7 +13,7 @@ import {
} from '@chakra-ui/react'
import { ToolIcon, EyeIcon, EyeOffIcon, GripIcon } from '@/components/icons'
import { ResultHeaderCell } from 'models'
-import React, { forwardRef, useState } from 'react'
+import React, { useState } from 'react'
import { isNotDefined } from 'utils'
import {
DndContext,
@@ -128,7 +128,7 @@ export const ColumnSettingsButton = ({
- {draggingColumnId ? : null}
+ {draggingColumnId ? : null}
@@ -210,9 +210,3 @@ const SortableColumns = ({
)
}
-
-const SortableColumnOverlay = forwardRef(
- (_, ref: React.LegacyRef) => {
- return
- }
-)
diff --git a/apps/builder/src/features/results/components/ResultsTable/IndeterminateCheckbox.tsx b/apps/builder/src/features/results/components/ResultsTable/IndeterminateCheckbox.tsx
new file mode 100644
index 000000000..a59ad1678
--- /dev/null
+++ b/apps/builder/src/features/results/components/ResultsTable/IndeterminateCheckbox.tsx
@@ -0,0 +1,23 @@
+import { Checkbox, Flex } from '@chakra-ui/react'
+import React from 'react'
+
+const TableCheckBox = (
+ { indeterminate, checked, ...rest }: any,
+ ref: React.LegacyRef
+) => {
+ const defaultRef = React.useRef()
+ const resolvedRef: any = ref || defaultRef
+
+ return (
+
+
+
+ )
+}
+
+export const IndeterminateCheckbox = React.forwardRef(TableCheckBox)
diff --git a/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx b/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx
index 0af92bb06..69e988f9c 100644
--- a/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx
+++ b/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx
@@ -2,7 +2,6 @@ import {
Box,
Button,
chakra,
- Checkbox,
Flex,
HStack,
Stack,
@@ -26,6 +25,7 @@ import { Row } from './Row'
import { HeaderRow } from './HeaderRow'
import { CellValueType, TableData } from '../../types'
import { HeaderIcon } from '../../utils'
+import { IndeterminateCheckbox } from './IndeterminateCheckbox'
type ResultsTableProps = {
resultHeader: ResultHeaderCell[]
@@ -238,23 +238,3 @@ export const ResultsTable = ({
)
}
-
-const IndeterminateCheckbox = React.forwardRef(
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- ({ indeterminate, checked, ...rest }: any, ref) => {
- const defaultRef = React.useRef()
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const resolvedRef: any = ref || defaultRef
-
- return (
-
-
-
- )
- }
-)
diff --git a/apps/builder/src/features/workspace/WorkspaceProvider.tsx b/apps/builder/src/features/workspace/WorkspaceProvider.tsx
index 362848f3f..f5d219f8c 100644
--- a/apps/builder/src/features/workspace/WorkspaceProvider.tsx
+++ b/apps/builder/src/features/workspace/WorkspaceProvider.tsx
@@ -30,7 +30,6 @@ const workspaceContext = createContext<{
) => Promise
deleteCurrentWorkspace: () => Promise
refreshWorkspace: (expectedUpdates: Partial) => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/apps/builder/src/features/workspace/components/WorkspaceSettingsForm.tsx b/apps/builder/src/features/workspace/components/WorkspaceSettingsForm.tsx
index 1559210a7..32a6e8eb2 100644
--- a/apps/builder/src/features/workspace/components/WorkspaceSettingsForm.tsx
+++ b/apps/builder/src/features/workspace/components/WorkspaceSettingsForm.tsx
@@ -88,7 +88,7 @@ const DeleteWorkspaceButton = ({
message={
Are you sure you want to delete {workspaceName} workspace? All its
- folders, typebots and results will be deleted forever.'
+ folders, typebots and results will be deleted forever.
}
confirmButtonLabel="Delete"
diff --git a/apps/builder/src/hooks/useAutoSave.ts b/apps/builder/src/hooks/useAutoSave.ts
index 7a3eb98f2..3be4b4b2b 100644
--- a/apps/builder/src/hooks/useAutoSave.ts
+++ b/apps/builder/src/hooks/useAutoSave.ts
@@ -7,8 +7,7 @@ export const useAutoSave = (
item,
debounceTimeout,
}: {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- handler: () => Promise
+ handler: () => Promise
item?: T
debounceTimeout: number
},
diff --git a/apps/builder/src/lib/theme.ts b/apps/builder/src/lib/theme.ts
index a7bfe83d3..e2c71c5f0 100644
--- a/apps/builder/src/lib/theme.ts
+++ b/apps/builder/src/lib/theme.ts
@@ -106,5 +106,4 @@ const components = {
},
}
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const customTheme: any = extendTheme({ colors, fonts, components })
diff --git a/apps/builder/src/pages/_error.tsx b/apps/builder/src/pages/_error.tsx
index 2514cf6f1..3a14bde16 100644
--- a/apps/builder/src/pages/_error.tsx
+++ b/apps/builder/src/pages/_error.tsx
@@ -1,4 +1,4 @@
-import NextErrorComponent from 'next/error'
+import NextErrorComponent, { ErrorProps } from 'next/error'
import * as Sentry from '@sentry/nextjs'
import { NextPageContext } from 'next'
@@ -24,14 +24,14 @@ const MyError = ({
}
MyError.getInitialProps = async (context: NextPageContext) => {
- const errorInitialProps = await NextErrorComponent.getInitialProps(context)
+ const errorInitialProps = (await NextErrorComponent.getInitialProps(
+ context
+ )) as ErrorProps & { hasGetInitialPropsRun: boolean }
const { res, err, asPath } = context
// Workaround for https://github.com/vercel/next.js/issues/8592, mark when
// getInitialProps has run
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
errorInitialProps.hasGetInitialPropsRun = true
// Returning early because we don't want to log 404 errors to Sentry.
diff --git a/apps/builder/src/pages/api/integrations/google-sheets/spreadsheets.ts b/apps/builder/src/pages/api/integrations/google-sheets/spreadsheets.ts
index 385e7faa1..6cd0e4d27 100644
--- a/apps/builder/src/pages/api/integrations/google-sheets/spreadsheets.ts
+++ b/apps/builder/src/pages/api/integrations/google-sheets/spreadsheets.ts
@@ -18,8 +18,6 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
return res.status(404).send("Couldn't find credentials in database")
const response = await drive({
version: 'v3',
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
auth: auth.client,
}).files.list({
q: "mimeType='application/vnd.google-apps.spreadsheet'",
diff --git a/apps/builder/src/pages/api/stripe/webhook.ts b/apps/builder/src/pages/api/stripe/webhook.ts
index 836ac2919..c540531df 100644
--- a/apps/builder/src/pages/api/stripe/webhook.ts
+++ b/apps/builder/src/pages/api/stripe/webhook.ts
@@ -128,5 +128,4 @@ const webhookHandler = async (req: NextApiRequest, res: NextApiResponse) => {
return methodNotAllowed(res)
}
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
export default withSentry(cors(webhookHandler as any))
diff --git a/apps/builder/src/utils/helpers.ts b/apps/builder/src/utils/helpers.ts
index 300898307..ea182b898 100644
--- a/apps/builder/src/utils/helpers.ts
+++ b/apps/builder/src/utils/helpers.ts
@@ -76,9 +76,9 @@ export const readFile = (file: File): Promise => {
}
export const timeSince = (date: string) => {
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- //@ts-ignore
- const seconds = Math.floor((new Date() - new Date(date)) / 1000)
+ const seconds = Math.floor(
+ (new Date().getTime() - new Date(date).getTime()) / 1000
+ )
let interval = seconds / 31536000
diff --git a/apps/builder/tsconfig.json b/apps/builder/tsconfig.json
index 37ab40a73..03b552ee6 100644
--- a/apps/builder/tsconfig.json
+++ b/apps/builder/tsconfig.json
@@ -6,6 +6,5 @@
"@/*": ["src/*"]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
- "exclude": ["node_modules"]
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}
diff --git a/apps/landing-page/.eslintrc.js b/apps/landing-page/.eslintrc.js
index 96e7baf9e..b56159ea9 100644
--- a/apps/landing-page/.eslintrc.js
+++ b/apps/landing-page/.eslintrc.js
@@ -1,29 +1,4 @@
module.exports = {
- ignorePatterns: ['node_modules'],
- env: {
- browser: true,
- es6: true,
- },
- extends: [
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react/recommended',
- 'next/core-web-vitals',
- ],
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
- sourceType: 'module', // Allows for the use of imports
- ecmaFeatures: {
- jsx: true, // Allows for the parsing of JSX
- },
- },
- settings: {
- react: {
- version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use
- },
- },
- plugins: ['react', '@typescript-eslint'],
- rules: {
- 'react/no-unescaped-entities': [0],
- },
+ root: true,
+ extends: ['custom'],
}
diff --git a/apps/landing-page/components/Homepage/EasyEmbed.tsx b/apps/landing-page/components/Homepage/EasyEmbed.tsx
index 5087be876..9cdea96e9 100644
--- a/apps/landing-page/components/Homepage/EasyEmbed.tsx
+++ b/apps/landing-page/components/Homepage/EasyEmbed.tsx
@@ -38,7 +38,7 @@ export const EasyEmbed = () => {
>
Embedding your typebot in your applications is a walk in the park.
Typebot gives you several step-by-step platform-specific
- instructions. Your typebot will always feel "native".
+ instructions. Your typebot will always feel "native".
| |
{
data-aos="fade"
>
One of the main advantage of a chat application is that you collect
- the user's responses on each question.{' '}
- You won't loose any valuable data.
+ the user's responses on each question.{' '}
+ You won't loose any valuable data.
{
- They've tried, they never looked back. 💙
+ They've tried, they never looked back. 💙
{
textAlign="justify"
>
- Typebot's story
+ Typebot's story
- Typebot's team is composed of only me, Baptiste Arnaud, a Software
- Engineer based in France.
+ Typebot's team is composed of only me, Baptiste Arnaud, a
+ Software Engineer based in France.
@@ -35,13 +35,13 @@ const AboutPage = () => {
- I'm passionate about great product UX and, during the first COVID
+ I'm passionate about great product UX and, during the first COVID
lockdown, I decided to create my own Typeform alternative.
Typebot was launched in July 2020. It is completely independent,
- self-funded, and bootstrapped. At the current stage, I'm not
+ self-funded, and bootstrapped. At the current stage, I'm not
interested in raising funds or taking investments.
@@ -55,15 +55,16 @@ const AboutPage = () => {
With Typebot, I want to create the best bot-building experience. My
goal is to empower you as a user and help you build great user
experiences. Also, privacy comes first. While using Typebot, you
- aren't tracked by some third-party analytics tool.
+ aren't tracked by some third-party analytics tool.
- I'm working hard on making a living from Typebot with a simple
+ I'm working hard on making a living from Typebot with a simple
business model:
You can use the tool for free but your forms will contain a
- "Made with Typebot" small badge that potentially gets people to know
- about the product. If you want to remove it and also have access to
- other advanced features, you have to subscribe for $39 per month.
+ "Made with Typebot" small badge that potentially gets people
+ to know about the product. If you want to remove it and also have
+ access to other advanced features, you have to subscribe for $39 per
+ month.
If you have any questions, feel free to reach out to me at{' '}
diff --git a/apps/landing-page/pages/pricing.tsx b/apps/landing-page/pages/pricing.tsx
index db69de1f2..a58a5f6e8 100644
--- a/apps/landing-page/pages/pricing.tsx
+++ b/apps/landing-page/pages/pricing.tsx
@@ -56,7 +56,7 @@ const Pricing = () => {
Plans fit for you
- Whether you're a{' '}
+ Whether you're a{' '}
solo business owner
{' '}
@@ -100,7 +100,7 @@ const Pricing = () => {
Need custom limits? Specific features?{' '}
- Let's chat!
+ Let's chat!
@@ -155,9 +155,9 @@ const Faq = () => {
You will receive an email notification once you reached 80% of this
limit. Then, once you reach 100%, your users will still be able to
- chat with your bot but their uploads won't be stored anymore. You will
- need to upgrade the limit or free up some space to continue collecting
- your users' files.
+ chat with your bot but their uploads won't be stored anymore. You
+ will need to upgrade the limit or free up some space to continue
+ collecting your users' files.
@@ -189,7 +189,7 @@ const Faq = () => {
shoot me an email
{' '}
- and we'll figure things out 😀
+ and we'll figure things out 😀
diff --git a/apps/landing-page/tsconfig.json b/apps/landing-page/tsconfig.json
index 5329cebd0..03b552ee6 100644
--- a/apps/landing-page/tsconfig.json
+++ b/apps/landing-page/tsconfig.json
@@ -1,22 +1,10 @@
{
+ "extends": "tsconfig/nextjs.json",
"compilerOptions": {
- "target": "es5",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "incremental": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
"baseUrl": ".",
- "composite": true
+ "paths": {
+ "@/*": ["src/*"]
+ }
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
- "exclude": ["node_modules"]
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}
diff --git a/apps/viewer/.eslintrc.js b/apps/viewer/.eslintrc.js
index c8da3b24f..b56159ea9 100644
--- a/apps/viewer/.eslintrc.js
+++ b/apps/viewer/.eslintrc.js
@@ -1,43 +1,4 @@
module.exports = {
- ignorePatterns: ['node_modules'],
- env: {
- browser: true,
- es6: true,
- },
- extends: [
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react/recommended',
- 'next/core-web-vitals',
- ],
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
- sourceType: 'module', // Allows for the use of imports
- ecmaFeatures: {
- jsx: true, // Allows for the parsing of JSX
- },
- },
- settings: {
- react: {
- version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use
- },
- },
- plugins: ['react', '@typescript-eslint'],
- rules: {
- 'react/no-unescaped-entities': [0],
- 'react/display-name': [0],
- 'no-restricted-imports': [
- 'error',
- {
- patterns: [
- '*/src/*',
- 'src/*',
- '*/src',
- '@/features/*/*',
- '!@/features/blocks/*',
- '!@/features/*/api',
- ],
- },
- ],
- },
+ root: true,
+ extends: ['custom'],
}
diff --git a/apps/viewer/package.json b/apps/viewer/package.json
index 0dbb247ad..99afb3212 100644
--- a/apps/viewer/package.json
+++ b/apps/viewer/package.json
@@ -39,21 +39,17 @@
"@types/qs": "6.9.7",
"@types/react": "18.0.25",
"@types/sanitize-html": "2.6.2",
- "@typescript-eslint/eslint-plugin": "5.43.0",
- "@typescript-eslint/parser": "5.43.0",
"dotenv": "16.0.3",
"emails": "workspace:*",
- "eslint": "8.27.0",
- "eslint-config-next": "13.0.3",
- "eslint-plugin-react": "7.31.10",
- "eslint-plugin-react-hooks": "4.6.0",
+ "eslint": "8.28.0",
+ "eslint-config-custom": "workspace:*",
"google-auth-library": "8.7.0",
"models": "workspace:*",
"next-transpile-modules": "10.0.0",
"node-fetch": "^3.3.0",
"papaparse": "5.3.2",
+ "tsconfig": "workspace:*",
"typescript": "4.8.4",
- "utils": "workspace:*",
- "configs": "workspace:*"
+ "utils": "workspace:*"
}
}
diff --git a/apps/viewer/playwright.config.ts b/apps/viewer/playwright.config.ts
index 113074003..f08e0cf5e 100644
--- a/apps/viewer/playwright.config.ts
+++ b/apps/viewer/playwright.config.ts
@@ -1,6 +1,6 @@
import { PlaywrightTestConfig } from '@playwright/test'
import path from 'path'
-import { playwrightBaseConfig } from 'configs/playwright'
+import { playwrightBaseConfig } from 'utils/playwright/baseConfig'
const config: PlaywrightTestConfig = {
...playwrightBaseConfig,
diff --git a/apps/viewer/src/components/TypebotPage.tsx b/apps/viewer/src/components/TypebotPage.tsx
index d7140a740..2f84556b7 100644
--- a/apps/viewer/src/components/TypebotPage.tsx
+++ b/apps/viewer/src/components/TypebotPage.tsx
@@ -1,5 +1,11 @@
import { TypebotViewer } from 'bot-engine'
-import { Answer, PublicTypebot, Typebot, VariableWithValue } from 'models'
+import {
+ Answer,
+ AnswerInput,
+ PublicTypebot,
+ Typebot,
+ VariableWithValue,
+} from 'models'
import { useRouter } from 'next/router'
import React, { useEffect, useState } from 'react'
import { isDefined, isNotDefined } from 'utils'
@@ -106,7 +112,7 @@ export const TypebotPage = ({
}
const handleNewAnswer = async (
- answer: Answer & { uploadedFiles: boolean }
+ answer: AnswerInput & { uploadedFiles: boolean }
) => {
if (!resultId) return setError(new Error('Error: result was not created'))
if (publishedTypebot.settings.general.isResultSavingEnabled !== false) {
diff --git a/apps/viewer/src/features/answers/queries/upsertAnswerQuery.ts b/apps/viewer/src/features/answers/queries/upsertAnswerQuery.ts
index 73f9a2a14..d2df48498 100644
--- a/apps/viewer/src/features/answers/queries/upsertAnswerQuery.ts
+++ b/apps/viewer/src/features/answers/queries/upsertAnswerQuery.ts
@@ -1,8 +1,8 @@
-import { Answer } from 'models'
+import { Answer, AnswerInput } from 'models'
import { sendRequest } from 'utils'
export const upsertAnswerQuery = async (
- answer: Answer & { resultId: string } & { uploadedFiles?: boolean }
+ answer: AnswerInput & { resultId: string } & { uploadedFiles?: boolean }
) =>
sendRequest({
url: `/api/typebots/t/results/r/answers`,
diff --git a/apps/viewer/src/features/settings/settings.spec.ts b/apps/viewer/src/features/settings/settings.spec.ts
index 7f05d8212..aefae5288 100644
--- a/apps/viewer/src/features/settings/settings.spec.ts
+++ b/apps/viewer/src/features/settings/settings.spec.ts
@@ -151,22 +151,30 @@ test('Should correctly parse metadata', async ({ page }) => {
).toBe(customMetadata.title)
expect(
await page.evaluate(
- () => (document.querySelector('meta[name="description"]') as any).content
+ () =>
+ (document.querySelector('meta[name="description"]') as HTMLMetaElement)
+ .content
)
).toBe(customMetadata.description)
expect(
await page.evaluate(
- () => (document.querySelector('meta[property="og:image"]') as any).content
+ () =>
+ (document.querySelector('meta[property="og:image"]') as HTMLMetaElement)
+ .content
)
).toBe(customMetadata.imageUrl)
expect(
await page.evaluate(() =>
- (document.querySelector('link[rel="icon"]') as any).getAttribute('href')
+ (
+ document.querySelector('link[rel="icon"]') as HTMLLinkElement
+ ).getAttribute('href')
)
).toBe(customMetadata.favIconUrl)
expect(
await page.evaluate(
- () => (document.querySelector('meta[name="author"]') as any).content
+ () =>
+ (document.querySelector('meta[name="author"]') as HTMLMetaElement)
+ .content
)
).toBe('John Doe')
await expect(
diff --git a/apps/viewer/src/pages/_error.tsx b/apps/viewer/src/pages/_error.tsx
index 2514cf6f1..3a14bde16 100644
--- a/apps/viewer/src/pages/_error.tsx
+++ b/apps/viewer/src/pages/_error.tsx
@@ -1,4 +1,4 @@
-import NextErrorComponent from 'next/error'
+import NextErrorComponent, { ErrorProps } from 'next/error'
import * as Sentry from '@sentry/nextjs'
import { NextPageContext } from 'next'
@@ -24,14 +24,14 @@ const MyError = ({
}
MyError.getInitialProps = async (context: NextPageContext) => {
- const errorInitialProps = await NextErrorComponent.getInitialProps(context)
+ const errorInitialProps = (await NextErrorComponent.getInitialProps(
+ context
+ )) as ErrorProps & { hasGetInitialPropsRun: boolean }
const { res, err, asPath } = context
// Workaround for https://github.com/vercel/next.js/issues/8592, mark when
// getInitialProps has run
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
errorInitialProps.hasGetInitialPropsRun = true
// Returning early because we don't want to log 404 errors to Sentry.
diff --git a/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts b/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts
index de59fcf1b..59e785b50 100644
--- a/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts
+++ b/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts
@@ -84,18 +84,19 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
}`,
})
} catch (err) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const error = err as any
- return 'raw' in error
- ? res.status(error.raw.statusCode).send({
- error: {
- name: `${error.raw.type} ${error.raw.param}`,
- message: error.raw.message,
- },
- })
- : res.status(500).send({
- error,
- })
+ if (typeof err === 'object' && err && 'raw' in err) {
+ const error = (err as { raw: Stripe.StripeRawError }).raw
+ res.status(error.statusCode ?? 500).send({
+ error: {
+ name: `${error.type} ${error.param}`,
+ message: error.message,
+ },
+ })
+ } else {
+ res.status(500).send({
+ err,
+ })
+ }
}
}
return methodNotAllowed(res)
diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts
index 062a8e91c..3ca27907d 100644
--- a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts
+++ b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts
@@ -25,6 +25,7 @@ import { saveErrorLog, saveSuccessLog } from '@/features/logs/api'
import { parseSampleResult } from '@/features/webhook/api'
const cors = initMiddleware(Cors())
+
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
await cors(req, res)
if (req.method === 'POST') {
@@ -34,11 +35,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const { resultValues, variables } = (
typeof req.body === 'string' ? JSON.parse(req.body) : req.body
) as {
- resultValues:
- | (Omit & {
- createdAt: string
- })
- | undefined
+ resultValues: ResultValues | undefined
variables: Variable[]
}
const typebot = (await prisma.typebot.findUnique({
@@ -87,9 +84,7 @@ export const executeWebhook =
webhook: Webhook,
variables: Variable[],
groupId: string,
- resultValues?: Omit & {
- createdAt: string
- },
+ resultValues?: ResultValues,
resultId?: string
): Promise => {
if (!webhook.url || !webhook.method)
@@ -199,9 +194,7 @@ const getBodyContent =
groupId,
}: {
body?: string | null
- resultValues?: Omit & {
- createdAt: string
- }
+ resultValues?: ResultValues
groupId: string
}): Promise => {
if (!body) return
@@ -228,7 +221,6 @@ const convertKeyValueTableToObject = (
}, {})
}
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
const safeJsonParse = (json: string): { data: any; isJson: boolean } => {
try {
return { data: JSON.parse(json), isJson: true }
diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/executeWebhook.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/executeWebhook.ts
index 0fd3bfb51..2456b5362 100644
--- a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/executeWebhook.ts
+++ b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/executeWebhook.ts
@@ -16,6 +16,7 @@ import Cors from 'cors'
import { executeWebhook } from '../../executeWebhook'
const cors = initMiddleware(Cors())
+
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
await cors(req, res)
if (req.method === 'POST') {
@@ -26,11 +27,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const { resultValues, variables } = (
typeof req.body === 'string' ? JSON.parse(req.body) : req.body
) as {
- resultValues:
- | (Omit & {
- createdAt: string
- })
- | undefined
+ resultValues: ResultValues
variables: Variable[]
}
const typebot = (await prisma.typebot.findUnique({
diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/storage/upload-url.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/storage/upload-url.ts
index ef28cdbe8..fe7cf2728 100644
--- a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/storage/upload-url.ts
+++ b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/storage/upload-url.ts
@@ -1,16 +1,11 @@
import { withSentry } from '@sentry/nextjs'
-import { WorkspaceRole } from 'db'
import prisma from '@/lib/prisma'
import { InputBlockType, PublicTypebot } from 'models'
import { NextApiRequest, NextApiResponse } from 'next'
import { badRequest, generatePresignedUrl, methodNotAllowed } from 'utils/api'
-import { byId, getStorageLimit, isDefined, env } from 'utils'
-import {
- sendAlmostReachedStorageLimitEmail,
- sendReachedStorageLimitEmail,
-} from 'emails'
+import { byId } from 'utils'
-const LIMIT_EMAIL_TRIGGER_PERCENT = 0.8
+// const LIMIT_EMAIL_TRIGGER_PERCENT = 0.8
const handler = async (
req: NextApiRequest,
@@ -57,112 +52,111 @@ const handler = async (
return methodNotAllowed(res)
}
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-const checkStorageLimit = async (typebotId: string) => {
- const typebot = await prisma.typebot.findFirst({
- where: { id: typebotId },
- include: {
- workspace: {
- select: {
- id: true,
- additionalStorageIndex: true,
- plan: true,
- storageLimitFirstEmailSentAt: true,
- storageLimitSecondEmailSentAt: true,
- customStorageLimit: true,
- },
- },
- },
- })
- if (!typebot?.workspace) throw new Error('Workspace not found')
- const { workspace } = typebot
- const {
- _sum: { storageUsed: totalStorageUsed },
- } = await prisma.answer.aggregate({
- where: {
- storageUsed: { gt: 0 },
- result: {
- typebot: {
- workspace: {
- id: typebot?.workspaceId,
- },
- },
- },
- },
- _sum: { storageUsed: true },
- })
- if (!totalStorageUsed) return false
- const hasSentFirstEmail = workspace.storageLimitFirstEmailSentAt !== null
- const hasSentSecondEmail = workspace.storageLimitSecondEmailSentAt !== null
- const storageLimit = getStorageLimit(typebot.workspace)
- const storageLimitBytes = storageLimit * 1024 * 1024 * 1024
- if (
- totalStorageUsed >= storageLimitBytes * LIMIT_EMAIL_TRIGGER_PERCENT &&
- !hasSentFirstEmail &&
- env('E2E_TEST') !== 'true'
- )
- await sendAlmostReachStorageLimitNotification({
- workspaceId: workspace.id,
- storageLimit,
- })
- if (
- totalStorageUsed >= storageLimitBytes &&
- !hasSentSecondEmail &&
- env('E2E_TEST') !== 'true'
- )
- await sendReachStorageLimitNotification({
- workspaceId: workspace.id,
- storageLimit,
- })
- return totalStorageUsed >= storageLimitBytes
-}
+// const checkStorageLimit = async (typebotId: string) => {
+// const typebot = await prisma.typebot.findFirst({
+// where: { id: typebotId },
+// include: {
+// workspace: {
+// select: {
+// id: true,
+// additionalStorageIndex: true,
+// plan: true,
+// storageLimitFirstEmailSentAt: true,
+// storageLimitSecondEmailSentAt: true,
+// customStorageLimit: true,
+// },
+// },
+// },
+// })
+// if (!typebot?.workspace) throw new Error('Workspace not found')
+// const { workspace } = typebot
+// const {
+// _sum: { storageUsed: totalStorageUsed },
+// } = await prisma.answer.aggregate({
+// where: {
+// storageUsed: { gt: 0 },
+// result: {
+// typebot: {
+// workspace: {
+// id: typebot?.workspaceId,
+// },
+// },
+// },
+// },
+// _sum: { storageUsed: true },
+// })
+// if (!totalStorageUsed) return false
+// const hasSentFirstEmail = workspace.storageLimitFirstEmailSentAt !== null
+// const hasSentSecondEmail = workspace.storageLimitSecondEmailSentAt !== null
+// const storageLimit = getStorageLimit(typebot.workspace)
+// const storageLimitBytes = storageLimit * 1024 * 1024 * 1024
+// if (
+// totalStorageUsed >= storageLimitBytes * LIMIT_EMAIL_TRIGGER_PERCENT &&
+// !hasSentFirstEmail &&
+// env('E2E_TEST') !== 'true'
+// )
+// await sendAlmostReachStorageLimitNotification({
+// workspaceId: workspace.id,
+// storageLimit,
+// })
+// if (
+// totalStorageUsed >= storageLimitBytes &&
+// !hasSentSecondEmail &&
+// env('E2E_TEST') !== 'true'
+// )
+// await sendReachStorageLimitNotification({
+// workspaceId: workspace.id,
+// storageLimit,
+// })
+// return totalStorageUsed >= storageLimitBytes
+// }
-const sendAlmostReachStorageLimitNotification = async ({
- workspaceId,
- storageLimit,
-}: {
- workspaceId: string
- storageLimit: number
-}) => {
- const members = await prisma.memberInWorkspace.findMany({
- where: { role: WorkspaceRole.ADMIN, workspaceId },
- include: { user: { select: { email: true } } },
- })
+// const sendAlmostReachStorageLimitNotification = async ({
+// workspaceId,
+// storageLimit,
+// }: {
+// workspaceId: string
+// storageLimit: number
+// }) => {
+// const members = await prisma.memberInWorkspace.findMany({
+// where: { role: WorkspaceRole.ADMIN, workspaceId },
+// include: { user: { select: { email: true } } },
+// })
- await sendAlmostReachedStorageLimitEmail({
- to: members.map((member) => member.user.email).filter(isDefined),
- storageLimit,
- url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
- })
+// await sendAlmostReachedStorageLimitEmail({
+// to: members.map((member) => member.user.email).filter(isDefined),
+// storageLimit,
+// url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
+// })
- await prisma.workspace.update({
- where: { id: workspaceId },
- data: { storageLimitFirstEmailSentAt: new Date() },
- })
-}
+// await prisma.workspace.update({
+// where: { id: workspaceId },
+// data: { storageLimitFirstEmailSentAt: new Date() },
+// })
+// }
-const sendReachStorageLimitNotification = async ({
- workspaceId,
- storageLimit,
-}: {
- workspaceId: string
- storageLimit: number
-}) => {
- const members = await prisma.memberInWorkspace.findMany({
- where: { role: WorkspaceRole.ADMIN, workspaceId },
- include: { user: { select: { email: true } } },
- })
+// const sendReachStorageLimitNotification = async ({
+// workspaceId,
+// storageLimit,
+// }: {
+// workspaceId: string
+// storageLimit: number
+// }) => {
+// const members = await prisma.memberInWorkspace.findMany({
+// where: { role: WorkspaceRole.ADMIN, workspaceId },
+// include: { user: { select: { email: true } } },
+// })
- await sendReachedStorageLimitEmail({
- to: members.map((member) => member.user.email).filter(isDefined),
- storageLimit,
- url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
- })
+// await sendReachedStorageLimitEmail({
+// to: members.map((member) => member.user.email).filter(isDefined),
+// storageLimit,
+// url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
+// })
- await prisma.workspace.update({
- where: { id: workspaceId },
- data: { storageLimitSecondEmailSentAt: new Date() },
- })
-}
+// await prisma.workspace.update({
+// where: { id: workspaceId },
+// data: { storageLimitSecondEmailSentAt: new Date() },
+// })
+// }
export default withSentry(handler)
diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx b/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx
index 2b59bdafd..753dd4f4a 100644
--- a/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx
+++ b/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx
@@ -31,7 +31,7 @@ const defaultTransportOptions = {
const defaultFrom = {
name: process.env.SMTP_FROM?.split(' <')[0].replace(/"/g, ''),
- email: process.env.SMTP_FROM?.match(/\<(.*)\>/)?.pop(),
+ email: process.env.SMTP_FROM?.match(/<(.*)>/)?.pop(),
}
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
@@ -54,9 +54,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
} = (
typeof req.body === 'string' ? JSON.parse(req.body) : req.body
) as SendEmailOptions & {
- resultValues: Omit & {
- createdAt: string
- }
+ resultValues: ResultValues
fileUrls?: string
}
const { name: replyToName } = parseEmailRecipient(replyTo)
@@ -166,9 +164,7 @@ const getEmailBody = async ({
resultValues,
}: {
typebotId: string
- resultValues: Omit & {
- createdAt: string
- }
+ resultValues: ResultValues
} & Pick): Promise<
{ html?: string; text?: string } | undefined
> => {
diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts
index 44f3d0f22..194c7720f 100644
--- a/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts
+++ b/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts
@@ -1,16 +1,10 @@
import { authenticateUser } from '@/features/auth/api'
import prisma from '@/lib/prisma'
-import { Workspace, WorkspaceRole } from 'db'
-import {
- sendAlmostReachedChatsLimitEmail,
- sendReachedChatsLimitEmail,
-} from 'emails'
import { ResultWithAnswers } from 'models'
import { NextApiRequest, NextApiResponse } from 'next'
-import { env, getChatsLimit, isDefined } from 'utils'
import { methodNotAllowed } from 'utils/api'
-const LIMIT_EMAIL_TRIGGER_PERCENT = 0.8
+// const LIMIT_EMAIL_TRIGGER_PERCENT = 0.8
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method === 'GET') {
@@ -63,106 +57,105 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
methodNotAllowed(res)
}
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-const checkChatsUsage = async (
- workspace: Pick<
- Workspace,
- | 'id'
- | 'plan'
- | 'additionalChatsIndex'
- | 'chatsLimitFirstEmailSentAt'
- | 'chatsLimitSecondEmailSentAt'
- | 'customChatsLimit'
- >
-) => {
- const chatsLimit = getChatsLimit(workspace)
- if (chatsLimit === -1) return
- const now = new Date()
- const firstDayOfMonth = new Date(now.getFullYear(), now.getMonth(), 1)
- const lastDayOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0)
- const firstDayOfNextMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1)
- const chatsCount = await prisma.result.count({
- where: {
- typebot: { workspaceId: workspace.id },
- hasStarted: true,
- createdAt: { gte: firstDayOfMonth, lte: lastDayOfMonth },
- },
- })
- const hasSentFirstEmail =
- workspace.chatsLimitFirstEmailSentAt !== null &&
- workspace.chatsLimitFirstEmailSentAt < firstDayOfNextMonth &&
- workspace.chatsLimitFirstEmailSentAt > firstDayOfMonth
- const hasSentSecondEmail =
- workspace.chatsLimitSecondEmailSentAt !== null &&
- workspace.chatsLimitSecondEmailSentAt < firstDayOfNextMonth &&
- workspace.chatsLimitSecondEmailSentAt > firstDayOfMonth
- if (
- chatsCount >= chatsLimit * LIMIT_EMAIL_TRIGGER_PERCENT &&
- !hasSentFirstEmail &&
- env('E2E_TEST') !== 'true'
- )
- await sendAlmostReachChatsLimitNotification({
- workspaceId: workspace.id,
- chatsLimit,
- })
- if (
- chatsCount >= chatsLimit &&
- !hasSentSecondEmail &&
- env('E2E_TEST') !== 'true'
- )
- await sendReachedAlertNotification({
- workspaceId: workspace.id,
- chatsLimit,
- })
- return chatsCount >= chatsLimit
-}
+// const checkChatsUsage = async (
+// workspace: Pick<
+// Workspace,
+// | 'id'
+// | 'plan'
+// | 'additionalChatsIndex'
+// | 'chatsLimitFirstEmailSentAt'
+// | 'chatsLimitSecondEmailSentAt'
+// | 'customChatsLimit'
+// >
+// ) => {
+// const chatsLimit = getChatsLimit(workspace)
+// if (chatsLimit === -1) return
+// const now = new Date()
+// const firstDayOfMonth = new Date(now.getFullYear(), now.getMonth(), 1)
+// const lastDayOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0)
+// const firstDayOfNextMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1)
+// const chatsCount = await prisma.result.count({
+// where: {
+// typebot: { workspaceId: workspace.id },
+// hasStarted: true,
+// createdAt: { gte: firstDayOfMonth, lte: lastDayOfMonth },
+// },
+// })
+// const hasSentFirstEmail =
+// workspace.chatsLimitFirstEmailSentAt !== null &&
+// workspace.chatsLimitFirstEmailSentAt < firstDayOfNextMonth &&
+// workspace.chatsLimitFirstEmailSentAt > firstDayOfMonth
+// const hasSentSecondEmail =
+// workspace.chatsLimitSecondEmailSentAt !== null &&
+// workspace.chatsLimitSecondEmailSentAt < firstDayOfNextMonth &&
+// workspace.chatsLimitSecondEmailSentAt > firstDayOfMonth
+// if (
+// chatsCount >= chatsLimit * LIMIT_EMAIL_TRIGGER_PERCENT &&
+// !hasSentFirstEmail &&
+// env('E2E_TEST') !== 'true'
+// )
+// await sendAlmostReachChatsLimitNotification({
+// workspaceId: workspace.id,
+// chatsLimit,
+// })
+// if (
+// chatsCount >= chatsLimit &&
+// !hasSentSecondEmail &&
+// env('E2E_TEST') !== 'true'
+// )
+// await sendReachedAlertNotification({
+// workspaceId: workspace.id,
+// chatsLimit,
+// })
+// return chatsCount >= chatsLimit
+// }
-const sendAlmostReachChatsLimitNotification = async ({
- workspaceId,
- chatsLimit,
-}: {
- workspaceId: string
- chatsLimit: number
-}) => {
- const members = await prisma.memberInWorkspace.findMany({
- where: { role: WorkspaceRole.ADMIN, workspaceId },
- include: { user: { select: { email: true } } },
- })
+// const sendAlmostReachChatsLimitNotification = async ({
+// workspaceId,
+// chatsLimit,
+// }: {
+// workspaceId: string
+// chatsLimit: number
+// }) => {
+// const members = await prisma.memberInWorkspace.findMany({
+// where: { role: WorkspaceRole.ADMIN, workspaceId },
+// include: { user: { select: { email: true } } },
+// })
- await sendAlmostReachedChatsLimitEmail({
- to: members.map((member) => member.user.email).filter(isDefined),
- chatsLimit,
- url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
- })
+// await sendAlmostReachedChatsLimitEmail({
+// to: members.map((member) => member.user.email).filter(isDefined),
+// chatsLimit,
+// url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
+// })
- await prisma.workspace.update({
- where: { id: workspaceId },
- data: { chatsLimitFirstEmailSentAt: new Date() },
- })
-}
+// await prisma.workspace.update({
+// where: { id: workspaceId },
+// data: { chatsLimitFirstEmailSentAt: new Date() },
+// })
+// }
-const sendReachedAlertNotification = async ({
- workspaceId,
- chatsLimit,
-}: {
- workspaceId: string
- chatsLimit: number
-}) => {
- const members = await prisma.memberInWorkspace.findMany({
- where: { role: WorkspaceRole.ADMIN, workspaceId },
- include: { user: { select: { email: true } } },
- })
+// const sendReachedAlertNotification = async ({
+// workspaceId,
+// chatsLimit,
+// }: {
+// workspaceId: string
+// chatsLimit: number
+// }) => {
+// const members = await prisma.memberInWorkspace.findMany({
+// where: { role: WorkspaceRole.ADMIN, workspaceId },
+// include: { user: { select: { email: true } } },
+// })
- await sendReachedChatsLimitEmail({
- to: members.map((member) => member.user.email).filter(isDefined),
- chatsLimit,
- url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
- })
+// await sendReachedChatsLimitEmail({
+// to: members.map((member) => member.user.email).filter(isDefined),
+// chatsLimit,
+// url: `${process.env.NEXTAUTH_URL}/typebots?workspaceId=${workspaceId}`,
+// })
- await prisma.workspace.update({
- where: { id: workspaceId },
- data: { chatsLimitSecondEmailSentAt: new Date() },
- })
-}
+// await prisma.workspace.update({
+// where: { id: workspaceId },
+// data: { chatsLimitSecondEmailSentAt: new Date() },
+// })
+// }
export default handler
diff --git a/apps/viewer/tsconfig.json b/apps/viewer/tsconfig.json
index 2442294dd..03b552ee6 100644
--- a/apps/viewer/tsconfig.json
+++ b/apps/viewer/tsconfig.json
@@ -1,26 +1,10 @@
{
+ "extends": "tsconfig/nextjs.json",
"compilerOptions": {
- "target": "es5",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "incremental": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
- },
- "composite": true,
- "downlevelIteration": true
+ }
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
- "exclude": ["node_modules"]
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}
diff --git a/package.json b/package.json
index f42a6b1ac..598e3b3a7 100644
--- a/package.json
+++ b/package.json
@@ -20,10 +20,13 @@
"test:viewer": "cd apps/viewer && pnpm test",
"db:migrate": "cd packages/db && pnpm migration:deploy",
"build:ci": "turbo run build --filter=builder... --filter=viewer... && ENVSH_ENV=./apps/builder/.env.docker ENVSH_OUTPUT=./apps/builder/public/__env.js bash env.sh && ENVSH_ENV=./apps/viewer/.env.docker ENVSH_OUTPUT=./apps/viewer/public/__env.js bash env.sh",
- "generate-change-log": "pnpx gitmoji-changelog"
+ "generate-change-log": "pnpx gitmoji-changelog",
+ "lint": "turbo run lint",
+ "prepare": "husky install"
},
"devDependencies": {
"cz-emoji": "1.3.2-canary.2",
+ "husky": "^8.0.2",
"turbo": "1.6.3"
},
"config": {
@@ -31,5 +34,5 @@
"path": "node_modules/cz-emoji"
}
},
- "packageManager": "pnpm@7.16.1"
+ "packageManager": "pnpm@7.17.0"
}
diff --git a/packages/bot-engine/.eslintrc.js b/packages/bot-engine/.eslintrc.js
index 5690d4958..100e2781e 100644
--- a/packages/bot-engine/.eslintrc.js
+++ b/packages/bot-engine/.eslintrc.js
@@ -1,48 +1,8 @@
module.exports = {
- ignorePatterns: ['node_modules'],
- env: {
- browser: true,
- es6: true,
- },
- extends: [
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react/recommended',
- 'next/core-web-vitals',
- 'prettier',
- ],
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
- sourceType: 'module', // Allows for the use of imports
- ecmaFeatures: {
- jsx: true, // Allows for the parsing of JSX
- },
- },
- settings: {
- react: {
- version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use
- },
- },
- plugins: ['prettier', 'react', '@typescript-eslint'],
- ignorePatterns: 'dist',
+ root: true,
+ extends: ['custom'],
rules: {
- 'react/no-unescaped-entities': [0],
- 'prettier/prettier': 'error',
- 'react/display-name': [0],
- '@next/next/no-img-element': [0],
- 'no-restricted-imports': [
- 'error',
- {
- patterns: [
- '*/src/*',
- 'src/*',
- '*/src',
- '@/features/*/*',
- '@/index',
- '!@/features/blocks/*',
- '!@/features/*/api',
- ],
- },
- ],
+ '@next/next/no-img-element': 'off',
+ '@next/next/no-html-link-for-pages': 'off',
},
}
diff --git a/packages/bot-engine/package.json b/packages/bot-engine/package.json
index 5b4047cff..304113985 100644
--- a/packages/bot-engine/package.json
+++ b/packages/bot-engine/package.json
@@ -6,9 +6,9 @@
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"scripts": {
- "build": "tsup",
+ "build": "pnpm tsc --noEmit && tsup",
"dev": "tsup --watch",
- "lint": "eslint --fix -c ./.eslintrc.js \"./src/**/*.ts*\""
+ "lint": "eslint \"src/**/*.ts*\""
},
"dependencies": {
"@stripe/react-stripe-js": "1.15.0",
@@ -28,16 +28,11 @@
"@types/react-phone-number-input": "3.0.14",
"@types/react-scroll": "1.8.5",
"@types/react-transition-group": "4.4.5",
- "@typescript-eslint/eslint-plugin": "5.43.0",
- "@typescript-eslint/parser": "5.43.0",
"autoprefixer": "10.4.13",
- "baptistearno-tsup": "^0.1.0",
+ "tsup": "6.5.0",
"db": "workspace:*",
- "eslint": "8.27.0",
- "eslint-config-next": "13.0.3",
- "eslint-config-prettier": "8.5.0",
- "eslint-plugin-prettier": "4.2.1",
- "eslint-plugin-react": "7.31.10",
+ "eslint": "8.28.0",
+ "eslint-config-custom": "workspace:*",
"models": "workspace:*",
"postcss": "8.4.19",
"prettier": "2.7.1",
@@ -46,7 +41,8 @@
"tailwindcss": "3.2.4",
"typescript": "4.8.4",
"utils": "workspace:*",
- "typebot-js": "workspace:*"
+ "typebot-js": "workspace:*",
+ "tsconfig": "workspace:*"
},
"peerDependencies": {
"db": "workspace:*",
diff --git a/packages/bot-engine/src/components/ChatGroup/AvatarSideContainer.tsx b/packages/bot-engine/src/components/ChatGroup/AvatarSideContainer.tsx
index 70b845aef..a114d10df 100644
--- a/packages/bot-engine/src/components/ChatGroup/AvatarSideContainer.tsx
+++ b/packages/bot-engine/src/components/ChatGroup/AvatarSideContainer.tsx
@@ -13,59 +13,60 @@ import { ResizeObserver } from 'resize-observer'
type Props = { hostAvatarSrc?: string; keepShowing: boolean }
-export const AvatarSideContainer = forwardRef(
- ({ hostAvatarSrc, keepShowing }: Props, ref: ForwardedRef) => {
- const { document } = useFrame()
- const [show, setShow] = useState(false)
- const [avatarTopOffset, setAvatarTopOffset] = useState(0)
+export const AvatarSideContainer = forwardRef(function AvatarSideContainer(
+ { hostAvatarSrc, keepShowing }: Props,
+ ref: ForwardedRef
+) {
+ const { document } = useFrame()
+ const [show, setShow] = useState(false)
+ const [avatarTopOffset, setAvatarTopOffset] = useState(0)
- const refreshTopOffset = () => {
- if (!scrollingSideGroupRef.current || !avatarContainer.current) return
- const { height } = scrollingSideGroupRef.current.getBoundingClientRect()
- const { height: avatarHeight } =
- avatarContainer.current.getBoundingClientRect()
- setAvatarTopOffset(height - avatarHeight)
- }
- const scrollingSideGroupRef = useRef(null)
- const avatarContainer = useRef(null)
- useImperativeHandle(ref, () => ({
- refreshTopOffset,
- }))
-
- useEffect(() => {
- if (!document) return
- setShow(true)
- const resizeObserver = new ResizeObserver(refreshTopOffset)
- resizeObserver.observe(document.body)
- return () => {
- resizeObserver.disconnect()
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [])
-
- return (
-
- )
+ const refreshTopOffset = () => {
+ if (!scrollingSideGroupRef.current || !avatarContainer.current) return
+ const { height } = scrollingSideGroupRef.current.getBoundingClientRect()
+ const { height: avatarHeight } =
+ avatarContainer.current.getBoundingClientRect()
+ setAvatarTopOffset(height - avatarHeight)
}
-)
+ const scrollingSideGroupRef = useRef(null)
+ const avatarContainer = useRef(null)
+ useImperativeHandle(ref, () => ({
+ refreshTopOffset,
+ }))
+
+ useEffect(() => {
+ if (!document) return
+ setShow(true)
+ const resizeObserver = new ResizeObserver(refreshTopOffset)
+ resizeObserver.observe(document.body)
+ return () => {
+ resizeObserver.disconnect()
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [])
+
+ return (
+
+ )
+})
diff --git a/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx b/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx
index ced9ea62f..737d772ea 100644
--- a/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx
+++ b/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx
@@ -53,7 +53,7 @@ export const InputChatBlock = ({
blockId: block.id,
groupId: block.groupId,
content: value,
- variableId: variableId ?? null,
+ variableId,
uploadedFiles: block.type === InputBlockType.FILE,
})
if (!isEditting) onTransitionEnd({ label, value, itemId }, isRetry)
diff --git a/packages/bot-engine/src/components/ChatGroup/ChatGroup.tsx b/packages/bot-engine/src/components/ChatGroup/ChatGroup.tsx
index b18e7c890..0ddf7b945 100644
--- a/packages/bot-engine/src/components/ChatGroup/ChatGroup.tsx
+++ b/packages/bot-engine/src/components/ChatGroup/ChatGroup.tsx
@@ -246,7 +246,6 @@ const ChatChunks = ({
}: Props) => {
const [isSkipped, setIsSkipped] = useState(false)
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
const avatarSideContainerRef = useRef()
useEffect(() => {
diff --git a/packages/bot-engine/src/components/TypebotViewer.tsx b/packages/bot-engine/src/components/TypebotViewer.tsx
index 4a4ecb285..b8fad9c35 100644
--- a/packages/bot-engine/src/components/TypebotViewer.tsx
+++ b/packages/bot-engine/src/components/TypebotViewer.tsx
@@ -8,6 +8,7 @@ import { ConversationContainer } from './ConversationContainer'
import { AnswersProvider } from '../providers/AnswersProvider'
import {
Answer,
+ AnswerInput,
BackgroundType,
Edge,
PublicTypebot,
@@ -27,7 +28,9 @@ export type TypebotViewerProps = {
startGroupId?: string
isLoading?: boolean
onNewGroupVisible?: (edge: Edge) => void
- onNewAnswer?: (answer: Answer & { uploadedFiles: boolean }) => Promise
+ onNewAnswer?: (
+ answer: AnswerInput & { uploadedFiles: boolean }
+ ) => Promise
onNewLog?: (log: Omit) => void
onCompleted?: () => void
onVariablesUpdated?: (variables: VariableWithValue[]) => void
@@ -58,7 +61,7 @@ export const TypebotViewer = ({
const handleNewGroupVisible = (edge: Edge) =>
onNewGroupVisible && onNewGroupVisible(edge)
- const handleNewAnswer = (answer: Answer & { uploadedFiles: boolean }) =>
+ const handleNewAnswer = (answer: AnswerInput & { uploadedFiles: boolean }) =>
onNewAnswer && onNewAnswer(answer)
const handleNewLog = (log: Omit) =>
diff --git a/packages/bot-engine/src/components/inputs/ShortTextInput.tsx b/packages/bot-engine/src/components/inputs/ShortTextInput.tsx
index 75cd927b7..bcc5ca054 100644
--- a/packages/bot-engine/src/components/inputs/ShortTextInput.tsx
+++ b/packages/bot-engine/src/components/inputs/ShortTextInput.tsx
@@ -5,21 +5,19 @@ type ShortTextInputProps = {
onChange: (value: string) => void
} & Omit, 'onChange'>
-export const ShortTextInput = React.forwardRef(
- (
- { onChange, ...props }: ShortTextInputProps,
- ref: React.ForwardedRef
- ) => {
- return (
- onChange(e.target.value)}
- {...props}
- />
- )
- }
-)
+export const ShortTextInput = React.forwardRef(function ShortTextInput(
+ { onChange, ...props }: ShortTextInputProps,
+ ref: React.ForwardedRef
+) {
+ return (
+ onChange(e.target.value)}
+ {...props}
+ />
+ )
+})
diff --git a/packages/bot-engine/src/components/inputs/Textarea.tsx b/packages/bot-engine/src/components/inputs/Textarea.tsx
index 1b1ee79b9..a48eb2db3 100644
--- a/packages/bot-engine/src/components/inputs/Textarea.tsx
+++ b/packages/bot-engine/src/components/inputs/Textarea.tsx
@@ -5,11 +5,11 @@ type TextareaProps = {
onChange: (value: string) => void
} & Omit, 'onChange'>
-export const Textarea = React.forwardRef(
- (
- { onChange, ...props }: TextareaProps,
- ref: React.ForwardedRef
- ) => (
+export const Textarea = React.forwardRef(function Textarea(
+ { onChange, ...props }: TextareaProps,
+ ref: React.ForwardedRef
+) {
+ return (
)
-)
+})
diff --git a/packages/bot-engine/src/features/blocks/inputs/payment/components/PaymentForm/StripePaymentForm.tsx b/packages/bot-engine/src/features/blocks/inputs/payment/components/PaymentForm/StripePaymentForm.tsx
index 4ab066e9d..ac1afe88f 100644
--- a/packages/bot-engine/src/features/blocks/inputs/payment/components/PaymentForm/StripePaymentForm.tsx
+++ b/packages/bot-engine/src/features/blocks/inputs/payment/components/PaymentForm/StripePaymentForm.tsx
@@ -9,6 +9,7 @@ import { parseVariables } from '@/features/variables'
import { useChat } from '@/providers/ChatProvider'
import { useTypebot } from '@/providers/TypebotProvider'
import { createPaymentIntentQuery } from '../../queries/createPaymentIntentQuery'
+import { Stripe } from '@stripe/stripe-js'
type Props = {
options: PaymentInputOptions
@@ -23,8 +24,7 @@ export const StripePaymentForm = ({ options, onSuccess }: Props) => {
onNewLog,
} = useTypebot()
const { window: frameWindow, document: frameDocument } = useFrame()
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const [stripe, setStripe] = useState(null)
+ const [stripe, setStripe] = useState(null)
const [clientSecret, setClientSecret] = useState('')
const [amountLabel, setAmountLabel] = useState('')
diff --git a/packages/bot-engine/src/features/blocks/inputs/phone/components/PhoneInput.tsx b/packages/bot-engine/src/features/blocks/inputs/phone/components/PhoneInput.tsx
index 625236f65..491a897e1 100644
--- a/packages/bot-engine/src/features/blocks/inputs/phone/components/PhoneInput.tsx
+++ b/packages/bot-engine/src/features/blocks/inputs/phone/components/PhoneInput.tsx
@@ -19,7 +19,6 @@ export const PhoneInput = ({
hasGuestAvatar,
}: PhoneInputProps) => {
const [inputValue, setInputValue] = useState(defaultValue ?? '')
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
const inputRef = useRef(null)
const handleChange = (inputValue: Value | undefined) =>
diff --git a/packages/bot-engine/src/lib/gtag.ts b/packages/bot-engine/src/lib/gtag.ts
index ea6e9f936..096b32154 100644
--- a/packages/bot-engine/src/lib/gtag.ts
+++ b/packages/bot-engine/src/lib/gtag.ts
@@ -1,7 +1,14 @@
import { GoogleAnalyticsOptions } from 'models'
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-declare const gtag: any
+declare const gtag: (
+ type: string,
+ action: string | undefined,
+ options: {
+ event_category: string | undefined
+ event_label: string | undefined
+ value: number | undefined
+ }
+) => void
const initGoogleAnalytics = (id: string): Promise =>
new Promise((resolve) => {
diff --git a/packages/bot-engine/src/providers/AnswersProvider.tsx b/packages/bot-engine/src/providers/AnswersProvider.tsx
index 6d2eca3d9..8abd5c4f3 100644
--- a/packages/bot-engine/src/providers/AnswersProvider.tsx
+++ b/packages/bot-engine/src/providers/AnswersProvider.tsx
@@ -1,20 +1,20 @@
import { safeStringify } from '@/features/variables'
import {
Answer,
+ AnswerInput,
ResultValues,
VariableWithUnknowValue,
VariableWithValue,
} from 'models'
-import React, { createContext, ReactNode, useContext, useState } from 'react'
+import { createContext, ReactNode, useContext, useState } from 'react'
const answersContext = createContext<{
resultId?: string
resultValues: ResultValues
addAnswer: (
- answer: Answer & { uploadedFiles: boolean }
+ answer: AnswerInput & { uploadedFiles: boolean }
) => Promise | undefined
updateVariables: (variables: VariableWithUnknowValue[]) => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
@@ -26,7 +26,7 @@ export const AnswersProvider = ({
}: {
resultId?: string
onNewAnswer: (
- answer: Answer & { uploadedFiles: boolean }
+ answer: AnswerInput & { uploadedFiles: boolean }
) => Promise | undefined
onVariablesUpdated?: (variables: VariableWithValue[]) => void
children: ReactNode
@@ -34,10 +34,10 @@ export const AnswersProvider = ({
const [resultValues, setResultValues] = useState({
answers: [],
variables: [],
- createdAt: new Date().toISOString(),
+ createdAt: new Date(),
})
- const addAnswer = (answer: Answer & { uploadedFiles: boolean }) => {
+ const addAnswer = (answer: AnswerInput & { uploadedFiles: boolean }) => {
setResultValues((resultValues) => ({
...resultValues,
answers: [...resultValues.answers, answer],
diff --git a/packages/bot-engine/src/providers/ChatProvider.tsx b/packages/bot-engine/src/providers/ChatProvider.tsx
index 9eda2e281..575bf4baa 100644
--- a/packages/bot-engine/src/providers/ChatProvider.tsx
+++ b/packages/bot-engine/src/providers/ChatProvider.tsx
@@ -2,7 +2,6 @@ import React, { createContext, ReactNode, useContext } from 'react'
const chatContext = createContext<{
scroll: () => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/packages/bot-engine/src/providers/TypebotProvider.tsx b/packages/bot-engine/src/providers/TypebotProvider.tsx
index 273f410d5..676b21dc8 100644
--- a/packages/bot-engine/src/providers/TypebotProvider.tsx
+++ b/packages/bot-engine/src/providers/TypebotProvider.tsx
@@ -39,7 +39,6 @@ const typebotContext = createContext<{
edgeId: string
}) => void
onNewLog: (log: Omit) => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({})
diff --git a/packages/bot-engine/tsconfig.json b/packages/bot-engine/tsconfig.json
index 0097d8a7d..3df73deb1 100644
--- a/packages/bot-engine/tsconfig.json
+++ b/packages/bot-engine/tsconfig.json
@@ -1,24 +1,10 @@
{
+ "extends": "tsconfig/react-library.json",
+ "include": ["src/**/*"],
"compilerOptions": {
- "lib": ["ES2017", "DOM"],
- "target": "es5",
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "strict": true,
- "skipLibCheck": true,
- "jsx": "react",
- "module": "ESNext",
- "declaration": true,
- "declarationDir": "types",
- "sourceMap": true,
- "outDir": "dist",
- "moduleResolution": "node",
- "allowSyntheticDefaultImports": true,
- "emitDeclarationOnly": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
- },
- "downlevelIteration": true
+ }
}
}
diff --git a/packages/bot-engine/tsup.config.js b/packages/bot-engine/tsup.config.js
index d4b8305bb..72e65ad96 100644
--- a/packages/bot-engine/tsup.config.js
+++ b/packages/bot-engine/tsup.config.js
@@ -1,4 +1,4 @@
-import { defineConfig } from 'baptistearno-tsup'
+import { defineConfig } from 'tsup'
export default defineConfig((options) => ({
entry: ['src/index.ts'],
diff --git a/packages/configs/package.json b/packages/configs/package.json
deleted file mode 100644
index 634f40906..000000000
--- a/packages/configs/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "configs",
- "version": "1.0.0",
- "license": "AGPL-3.0-or-later",
- "private": true,
- "devDependencies": {
- "@playwright/test": "1.27.1",
- "@types/node": "18.11.9",
- "dotenv": "16.0.3",
- "utils": "workspace:*"
- }
-}
diff --git a/packages/configs/playwright/index.ts b/packages/configs/playwright/index.ts
deleted file mode 100644
index a69a786b1..000000000
--- a/packages/configs/playwright/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { playwrightBaseConfig } from './baseConfig'
diff --git a/packages/configs/tsconfig.json b/packages/configs/tsconfig.json
deleted file mode 100644
index 8edb147a3..000000000
--- a/packages/configs/tsconfig.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "compilerOptions": {
- "moduleResolution": "node",
- "esModuleInterop": true
- }
-}
diff --git a/packages/db/package.json b/packages/db/package.json
index 176f24df8..a71903702 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -19,9 +19,9 @@
"@prisma/client": "4.6.1"
},
"devDependencies": {
- "prisma": "4.6.1",
- "typescript": "4.8.4",
"dotenv-cli": "6.0.0",
- "tsconfig": "workspace:*"
+ "prisma": "4.6.1",
+ "tsconfig": "workspace:*",
+ "typescript": "4.8.4"
}
}
diff --git a/packages/emails/.eslintrc.js b/packages/emails/.eslintrc.js
new file mode 100644
index 000000000..b56159ea9
--- /dev/null
+++ b/packages/emails/.eslintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: ['custom'],
+}
diff --git a/packages/emails/package.json b/packages/emails/package.json
index 9c70a774a..936a26555 100644
--- a/packages/emails/package.json
+++ b/packages/emails/package.json
@@ -2,12 +2,13 @@
"name": "emails",
"version": "1.0.0",
"description": "",
- "main": "./index.ts",
- "types": "./index.ts",
+ "main": "./src/index.ts",
+ "types": "./src/index.ts",
"scripts": {
"preview": "concurrently \"pnpm run watch\" \"sleep 5 && pnpm run serve\" -n \"watch,serve\" -c \"bgBlue.bold,bgMagenta.bold\"",
"watch": "tsx watch ./preview.tsx --clear-screen=false",
- "serve": "http-server dist -a localhost -p 3223 -o"
+ "serve": "http-server dist -a localhost -p 3223 -o",
+ "lint": "eslint \"src/**/*.ts*\""
},
"keywords": [],
"author": "Baptiste Arnaud",
@@ -22,7 +23,10 @@
"nodemailer": "6.8.0",
"react": "18.2.0",
"tsx": "3.12.1",
- "utils": "workspace:*"
+ "utils": "workspace:*",
+ "eslint": "8.28.0",
+ "eslint-config-custom": "workspace:*",
+ "tsconfig": "workspace:*"
},
"peerDependencies": {
"@faire/mjml-react": "2.1.4",
diff --git a/packages/emails/components/Button.tsx b/packages/emails/src/components/Button.tsx
similarity index 100%
rename from packages/emails/components/Button.tsx
rename to packages/emails/src/components/Button.tsx
diff --git a/packages/emails/components/Head.tsx b/packages/emails/src/components/Head.tsx
similarity index 100%
rename from packages/emails/components/Head.tsx
rename to packages/emails/src/components/Head.tsx
diff --git a/packages/emails/components/HeroImage.tsx b/packages/emails/src/components/HeroImage.tsx
similarity index 100%
rename from packages/emails/components/HeroImage.tsx
rename to packages/emails/src/components/HeroImage.tsx
diff --git a/packages/emails/components/Text.tsx b/packages/emails/src/components/Text.tsx
similarity index 100%
rename from packages/emails/components/Text.tsx
rename to packages/emails/src/components/Text.tsx
diff --git a/packages/emails/components/index.ts b/packages/emails/src/components/index.ts
similarity index 100%
rename from packages/emails/components/index.ts
rename to packages/emails/src/components/index.ts
diff --git a/packages/emails/emails/AlmostReachedChatsLimitEmail.tsx b/packages/emails/src/emails/AlmostReachedChatsLimitEmail.tsx
similarity index 85%
rename from packages/emails/emails/AlmostReachedChatsLimitEmail.tsx
rename to packages/emails/src/emails/AlmostReachedChatsLimitEmail.tsx
index 9303d0492..fd18b59c9 100644
--- a/packages/emails/emails/AlmostReachedChatsLimitEmail.tsx
+++ b/packages/emails/src/emails/AlmostReachedChatsLimitEmail.tsx
@@ -42,15 +42,15 @@ export const AlmostReachedChatsLimitEmail = ({
- Your bots are chatting a lot. That's amazing. 💙
+ Your bots are chatting a lot. That's amazing. 💙
- This means you've almost reached your monthly chats limit. You
- currently reached 80% of {readableChatsLimit} chats.
+ This means you've almost reached your monthly chats limit.
+ You currently reached 80% of {readableChatsLimit} chats.
This limit will be reset on {readableResetDate}.
- Your bots won't start the chat if you reach the limit before this
- date❗
+ Your bots won't start the chat if you reach the limit before
+ this date❗
If you need more monthly responses, you will need to upgrade your
diff --git a/packages/emails/emails/AlmostReachedStorageLimitEmail.tsx b/packages/emails/src/emails/AlmostReachedStorageLimitEmail.tsx
similarity index 76%
rename from packages/emails/emails/AlmostReachedStorageLimitEmail.tsx
rename to packages/emails/src/emails/AlmostReachedStorageLimitEmail.tsx
index 0bccf3c3a..aac20e13d 100644
--- a/packages/emails/emails/AlmostReachedStorageLimitEmail.tsx
+++ b/packages/emails/src/emails/AlmostReachedStorageLimitEmail.tsx
@@ -33,17 +33,18 @@ export const AlmostReachedStorageLimitEmail = ({
- Your bots are working a lot. That's amazing. 🤖
+ Your bots are working a lot. That's amazing. 🤖
- This means you've almost reached your storage limit. You currently
- reached 80% of your {readableStorageLimit} storage limit.
+ This means you've almost reached your storage limit. You
+ currently reached 80% of your {readableStorageLimit} storage
+ limit.
- Your bots won't collect new files once you reach the limit❗
+ Your bots won't collect new files once you reach the limit❗
- To make sure it won't happen, you need to upgrade your plan or
- delete existing results to free up space.
+ To make sure it won't happen, you need to upgrade your plan
+ or delete existing results to free up space.
Upgrade workspace
diff --git a/packages/emails/emails/DefaultBotNotificationEmail.tsx b/packages/emails/src/emails/DefaultBotNotificationEmail.tsx
similarity index 100%
rename from packages/emails/emails/DefaultBotNotificationEmail.tsx
rename to packages/emails/src/emails/DefaultBotNotificationEmail.tsx
diff --git a/packages/emails/emails/GuestInvitationEmail.tsx b/packages/emails/src/emails/GuestInvitationEmail.tsx
similarity index 96%
rename from packages/emails/emails/GuestInvitationEmail.tsx
rename to packages/emails/src/emails/GuestInvitationEmail.tsx
index 4e0dd4b5e..0ac75a82a 100644
--- a/packages/emails/emails/GuestInvitationEmail.tsx
+++ b/packages/emails/src/emails/GuestInvitationEmail.tsx
@@ -42,7 +42,7 @@ export const GuestInvitationEmail = ({
From now on you will see this typebot in your dashboard under his
- workspace "{workspaceName}" 👍
+ workspace "{workspaceName}" 👍
Make sure to log in as {guestEmail} .
diff --git a/packages/emails/emails/ReachedChatsLimitEmail.tsx b/packages/emails/src/emails/ReachedChatsLimitEmail.tsx
similarity index 87%
rename from packages/emails/emails/ReachedChatsLimitEmail.tsx
rename to packages/emails/src/emails/ReachedChatsLimitEmail.tsx
index 15958df2a..d7e88bf6e 100644
--- a/packages/emails/emails/ReachedChatsLimitEmail.tsx
+++ b/packages/emails/src/emails/ReachedChatsLimitEmail.tsx
@@ -43,15 +43,15 @@ export const ReachedChatsLimitEmail = ({
- It just happened, you've reached your monthly {readableChatsLimit}{' '}
- chats limit 😮
+ It just happened, you've reached your monthly{' '}
+ {readableChatsLimit} chats limit 😮
It means your bots are closed until {readableResetDate}❗
- If you'd like to continue chatting with your users this month,
- then you need to upgrade your plan. 🚀
+ If you'd like to continue chatting with your users this
+ month, then you need to upgrade your plan. 🚀
diff --git a/packages/emails/emails/ReachedStorageLimitEmail.tsx b/packages/emails/src/emails/ReachedStorageLimitEmail.tsx
similarity index 86%
rename from packages/emails/emails/ReachedStorageLimitEmail.tsx
rename to packages/emails/src/emails/ReachedStorageLimitEmail.tsx
index 6212ae865..229fd71c1 100644
--- a/packages/emails/emails/ReachedStorageLimitEmail.tsx
+++ b/packages/emails/src/emails/ReachedStorageLimitEmail.tsx
@@ -34,14 +34,14 @@ export const ReachedStorageLimitEmail = ({
- It just happened, you've reached your {readableStorageLimit}{' '}
+ It just happened, you've reached your {readableStorageLimit}{' '}
storage limit 😮
- It means your bots won't collect new files from your users❗
+ It means your bots won't collect new files from your users❗
- If you'd like to continue collecting files, then you need to
+ If you'd like to continue collecting files, then you need to
upgrade your plan or remove existing results to free up space. 🚀
diff --git a/packages/emails/emails/WorkspaceMemberInvitationEmail.tsx b/packages/emails/src/emails/WorkspaceMemberInvitationEmail.tsx
similarity index 100%
rename from packages/emails/emails/WorkspaceMemberInvitationEmail.tsx
rename to packages/emails/src/emails/WorkspaceMemberInvitationEmail.tsx
diff --git a/packages/emails/emails/index.ts b/packages/emails/src/emails/index.ts
similarity index 100%
rename from packages/emails/emails/index.ts
rename to packages/emails/src/emails/index.ts
diff --git a/packages/emails/index.ts b/packages/emails/src/index.ts
similarity index 100%
rename from packages/emails/index.ts
rename to packages/emails/src/index.ts
diff --git a/packages/emails/preview.tsx b/packages/emails/src/preview.tsx
similarity index 100%
rename from packages/emails/preview.tsx
rename to packages/emails/src/preview.tsx
diff --git a/packages/emails/sendEmail.ts b/packages/emails/src/sendEmail.ts
similarity index 100%
rename from packages/emails/sendEmail.ts
rename to packages/emails/src/sendEmail.ts
diff --git a/packages/emails/theme.ts b/packages/emails/src/theme.ts
similarity index 100%
rename from packages/emails/theme.ts
rename to packages/emails/src/theme.ts
diff --git a/packages/emails/tsconfig.json b/packages/emails/tsconfig.json
index f6c5fa35d..4b5bf15ea 100644
--- a/packages/emails/tsconfig.json
+++ b/packages/emails/tsconfig.json
@@ -1,6 +1,5 @@
{
- "compilerOptions": {
- "jsx": "react",
- "esModuleInterop": true
- }
+ "extends": "tsconfig/react-library.json",
+ "include": ["src/**/*"],
+ "exclude": ["dist", "node_modules"]
}
diff --git a/packages/eslint-config-custom/index.js b/packages/eslint-config-custom/index.js
new file mode 100644
index 000000000..6ed47b22f
--- /dev/null
+++ b/packages/eslint-config-custom/index.js
@@ -0,0 +1,23 @@
+module.exports = {
+ extends: ['next', 'prettier'],
+ settings: {
+ react: {
+ version: 'detect',
+ },
+ },
+ rules: {
+ 'no-restricted-imports': [
+ 'error',
+ {
+ patterns: [
+ '*/src/*',
+ 'src/*',
+ '*/src',
+ '@/features/*/*',
+ '!@/features/blocks/*',
+ '!@/features/*/api',
+ ],
+ },
+ ],
+ },
+}
diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json
new file mode 100644
index 000000000..ba2de4d33
--- /dev/null
+++ b/packages/eslint-config-custom/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "eslint-config-custom",
+ "main": "index.js",
+ "dependencies": {
+ "eslint": "8.28.0",
+ "eslint-config-next": "13.0.4",
+ "eslint-config-prettier": "8.5.0",
+ "eslint-plugin-react": "7.31.11"
+ }
+}
diff --git a/packages/models/.eslintrc.js b/packages/models/.eslintrc.js
new file mode 100644
index 000000000..b56159ea9
--- /dev/null
+++ b/packages/models/.eslintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: ['custom'],
+}
diff --git a/packages/models/src/features/answer.ts b/packages/models/src/features/answer.ts
index 6c00a894f..3f42e75a4 100644
--- a/packages/models/src/features/answer.ts
+++ b/packages/models/src/features/answer.ts
@@ -10,6 +10,20 @@ export const answerSchema = z.object({
storageUsed: z.number().nullable(),
})
+export const answerInputSchema = answerSchema
+ .omit({
+ createdAt: true,
+ resultId: true,
+ variableId: true,
+ storageUsed: true,
+ })
+ .and(
+ z.object({
+ variableId: z.string().nullish(),
+ storageUsed: z.number().nullish(),
+ })
+ )
+
export type Stats = {
totalViews: number
totalStarts: number
@@ -17,3 +31,5 @@ export type Stats = {
}
export type Answer = z.infer
+
+export type AnswerInput = z.infer
diff --git a/packages/models/src/features/result.ts b/packages/models/src/features/result.ts
index d860c388e..1433955a4 100644
--- a/packages/models/src/features/result.ts
+++ b/packages/models/src/features/result.ts
@@ -1,5 +1,5 @@
import { z } from 'zod'
-import { answerSchema } from './answer'
+import { answerInputSchema, answerSchema } from './answer'
import { InputBlockType } from './blocks'
import { variableWithValueSchema } from './typebot/variable'
@@ -20,6 +20,12 @@ export const resultWithAnswersSchema = resultSchema.and(
})
)
+export const resultWithAnswersInputSchema = resultSchema.and(
+ z.object({
+ answers: z.array(answerInputSchema),
+ })
+)
+
export const logSchema = z.object({
id: z.string(),
createdAt: z.date(),
@@ -33,10 +39,14 @@ export type Result = z.infer
export type ResultWithAnswers = z.infer
+export type ResultWithAnswersInput = z.infer<
+ typeof resultWithAnswersInputSchema
+>
+
export type Log = z.infer
export type ResultValues = Pick<
- ResultWithAnswers,
+ ResultWithAnswersInput,
'answers' | 'createdAt' | 'variables'
>
diff --git a/packages/scripts/.eslintrc.js b/packages/scripts/.eslintrc.js
new file mode 100644
index 000000000..b56159ea9
--- /dev/null
+++ b/packages/scripts/.eslintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: ['custom'],
+}
diff --git a/packages/tsconfig/nextjs.json b/packages/tsconfig/nextjs.json
index 51a6ada38..6af13474e 100644
--- a/packages/tsconfig/nextjs.json
+++ b/packages/tsconfig/nextjs.json
@@ -13,7 +13,5 @@
"noEmit": true,
"resolveJsonModule": true,
"target": "es5"
- },
- "include": ["src", "next-env.d.ts"],
- "exclude": ["node_modules"]
+ }
}
diff --git a/packages/tsconfig/react-library.json b/packages/tsconfig/react-library.json
new file mode 100644
index 000000000..66033cb1a
--- /dev/null
+++ b/packages/tsconfig/react-library.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "display": "React Library",
+ "extends": "./base.json",
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "lib": ["ES2015", "dom", "dom.iterable"],
+ "module": "ESNext",
+ "target": "es6"
+ }
+}
diff --git a/packages/typebot-js/.eslintignore b/packages/typebot-js/.eslintignore
deleted file mode 100644
index 62f6d2230..000000000
--- a/packages/typebot-js/.eslintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.js
-*.html
\ No newline at end of file
diff --git a/packages/typebot-js/.eslintrc.js b/packages/typebot-js/.eslintrc.js
index 0be52c041..602cd521d 100644
--- a/packages/typebot-js/.eslintrc.js
+++ b/packages/typebot-js/.eslintrc.js
@@ -1,12 +1,5 @@
module.exports = {
- parser: "@typescript-eslint/parser",
- plugins: ["@typescript-eslint", "prettier"],
- extends: [
- "eslint:recommended",
- "plugin:@typescript-eslint/eslint-recommended",
- ],
- rules: {
- "no-unused-vars": "off",
- "@typescript-eslint/no-unused-vars": ["off"],
- },
-};
+ root: true,
+ extends: ['custom'],
+ ignorePatterns: ['/tests'],
+}
diff --git a/packages/typebot-js/package.json b/packages/typebot-js/package.json
index e6c7c4be2..506f8a08b 100644
--- a/packages/typebot-js/package.json
+++ b/packages/typebot-js/package.json
@@ -7,22 +7,19 @@
"scripts": {
"dev": "tsup --watch",
"build": "tsup",
- "lint": "eslint src --ext .ts && eslint tests --ext .ts",
+ "lint": "eslint \"src/**/*.ts*\"",
"test": "pnpm jest"
},
"devDependencies": {
"@types/jest": "29.2.3",
- "@typescript-eslint/eslint-plugin": "5.43.0",
- "@typescript-eslint/parser": "5.43.0",
- "baptistearno-tsup": "^0.1.0",
- "eslint": "8.27.0",
- "eslint-plugin-functional": "4.4.1",
- "eslint-plugin-jest": "27.1.5",
- "eslint-plugin-prettier": "4.2.1",
+ "tsup": "6.5.0",
+ "eslint": "8.28.0",
+ "eslint-config-custom": "workspace:*",
"jest": "29.3.1",
"jest-environment-jsdom": "29.3.1",
"prettier": "2.7.1",
"ts-jest": "29.0.3",
- "typescript": "4.8.4"
+ "typescript": "4.8.4",
+ "tsconfig": "workspace:*"
}
}
diff --git a/packages/typebot-js/src/index.ts b/packages/typebot-js/src/index.ts
index 80417e1a3..f4fdbf06f 100644
--- a/packages/typebot-js/src/index.ts
+++ b/packages/typebot-js/src/index.ts
@@ -16,7 +16,7 @@ export {
hideMessage,
}
-export default {
+const defaultExports = {
initContainer,
initPopup,
initBubble,
@@ -29,4 +29,6 @@ export default {
hideMessage,
}
+export default defaultExports
+
export * from './types'
diff --git a/packages/typebot-js/tests/container.spec.ts b/packages/typebot-js/tests/container.spec.ts
index 0fad11e25..80112ed16 100644
--- a/packages/typebot-js/tests/container.spec.ts
+++ b/packages/typebot-js/tests/container.spec.ts
@@ -3,11 +3,9 @@ import { initContainer } from '../src/embedTypes/container'
const observe = jest.fn()
const unobserve = jest.fn()
-// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
window.IntersectionObserver = jest.fn(() => ({
observe,
unobserve,
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
})) as any
describe('initContainer', () => {
diff --git a/packages/typebot-js/tsconfig.json b/packages/typebot-js/tsconfig.json
index 2cf8e3b18..05c514f3e 100644
--- a/packages/typebot-js/tsconfig.json
+++ b/packages/typebot-js/tsconfig.json
@@ -1,10 +1,5 @@
{
- "compilerOptions": {
- "declaration": true,
- "moduleResolution": "Node",
- "declarationDir": ".",
- "strict": true
- },
- "include": ["./src/**/*.ts"],
- "exclude": ["./tests/**/*"]
+ "extends": "tsconfig/base.json",
+ "include": ["src/**/*"],
+ "exclude": ["dist", "node_modules"]
}
diff --git a/packages/typebot-js/tsup.config.js b/packages/typebot-js/tsup.config.js
index a75054944..ed716053e 100644
--- a/packages/typebot-js/tsup.config.js
+++ b/packages/typebot-js/tsup.config.js
@@ -1,4 +1,4 @@
-import { defineConfig } from 'baptistearno-tsup'
+import { defineConfig } from 'tsup'
export default defineConfig((options) => ({
entry: ['src/index.ts'],
diff --git a/packages/utils/.eslintrc.js b/packages/utils/.eslintrc.js
new file mode 100644
index 000000000..b56159ea9
--- /dev/null
+++ b/packages/utils/.eslintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: ['custom'],
+}
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 0db5889cf..5ff826ae7 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -11,11 +11,12 @@
"aws-sdk": "2.1254.0",
"cuid": "2.1.8",
"db": "workspace:*",
+ "dotenv": "16.0.3",
"models": "workspace:*",
"next": "13.0.3",
"nodemailer": "6.8.0",
- "typescript": "4.8.4",
- "tsconfig": "workspace:*"
+ "tsconfig": "workspace:*",
+ "typescript": "4.8.4"
},
"peerDependencies": {
"aws-sdk": "2.1152.0",
diff --git a/packages/configs/playwright/baseConfig.ts b/packages/utils/playwright/baseConfig.ts
similarity index 100%
rename from packages/configs/playwright/baseConfig.ts
rename to packages/utils/playwright/baseConfig.ts
diff --git a/packages/configs/playwright/globalSetup.ts b/packages/utils/playwright/globalSetup.ts
similarity index 77%
rename from packages/configs/playwright/globalSetup.ts
rename to packages/utils/playwright/globalSetup.ts
index bf739f4bd..0a92188ab 100644
--- a/packages/configs/playwright/globalSetup.ts
+++ b/packages/utils/playwright/globalSetup.ts
@@ -1,5 +1,5 @@
import { FullConfig } from '@playwright/test'
-import { setupDatabase, teardownDatabase } from 'utils/playwright/databaseSetup'
+import { setupDatabase, teardownDatabase } from './databaseSetup'
async function globalSetup(config: FullConfig) {
const { baseURL } = config.projects[0].use
diff --git a/packages/utils/pricing.ts b/packages/utils/pricing.ts
index a3939a58a..b282ce55f 100644
--- a/packages/utils/pricing.ts
+++ b/packages/utils/pricing.ts
@@ -169,7 +169,7 @@ const europeanUnionExclusiveLanguageCodes = [
]
export const guessIfUserIsEuropean = () =>
- navigator.languages.some((language) => {
+ window.navigator.languages.some((language) => {
const [languageCode, countryCode] = language.split('-')
return countryCode
? europeanUnionCountryCodes.includes(countryCode)
diff --git a/packages/utils/results.ts b/packages/utils/results.ts
index 142828e50..c9714ba0c 100644
--- a/packages/utils/results.ts
+++ b/packages/utils/results.ts
@@ -7,6 +7,7 @@ import {
Answer,
VariableWithValue,
Typebot,
+ ResultWithAnswersInput,
} from 'models'
import { isInputBlock, isDefined, byId } from './utils'
@@ -177,14 +178,16 @@ export const parseAnswers =
createdAt,
answers,
variables: resultVariables,
- }: Pick & {
- createdAt: string
+ }: Pick & {
+ // TODO: remove once we are using 100% tRPC
+ createdAt: Date | string
}): {
[key: string]: string
} => {
const header = parseResultHeader(typebot, linkedTypebots)
return {
- submittedAt: createdAt,
+ submittedAt:
+ typeof createdAt === 'string' ? createdAt : createdAt.toISOString(),
...[...answers, ...resultVariables].reduce<{
[key: string]: string
}>((o, answerOrVariable) => {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b9e78d180..26efe03bf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,9 +5,11 @@ importers:
.:
specifiers:
cz-emoji: 1.3.2-canary.2
+ husky: ^8.0.2
turbo: 1.6.3
devDependencies:
cz-emoji: 1.3.2-canary.2
+ husky: 8.0.2
turbo: 1.6.3
apps/builder:
@@ -54,8 +56,6 @@ importers:
'@types/qs': 6.9.7
'@types/react': 18.0.25
'@types/tinycolor2': 1.4.3
- '@typescript-eslint/eslint-plugin': 5.43.0
- '@typescript-eslint/parser': 5.43.0
'@udecode/plate-basic-marks': 18.9.0
'@udecode/plate-common': ^7.0.2
'@udecode/plate-core': 18.9.0
@@ -69,7 +69,6 @@ importers:
browser-image-compression: 2.0.0
canvas-confetti: 1.6.0
codemirror: 6.0.1
- configs: workspace:*
cuid: 2.1.8
db: workspace:*
deep-object-diff: 1.1.9
@@ -77,9 +76,8 @@ importers:
dotenv: 16.0.3
emails: workspace:*
emojilib: 3.0.7
- eslint: 8.27.0
- eslint-config-next: 13.0.3
- eslint-plugin-react: 7.31.10
+ eslint: 8.28.0
+ eslint-config-custom: workspace:*
focus-visible: 5.2.0
framer-motion: 7.6.6
google-auth-library: 8.7.0
@@ -215,14 +213,10 @@ importers:
'@types/qs': 6.9.7
'@types/react': 18.0.25
'@types/tinycolor2': 1.4.3
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- configs: link:../../packages/configs
db: link:../../packages/db
dotenv: 16.0.3
- eslint: 8.27.0
- eslint-config-next: 13.0.3_rmayb2veg2btbq6mbmnyivgasy
- eslint-plugin-react: 7.31.10_eslint@8.27.0
+ eslint: 8.28.0
+ eslint-config-custom: link:../../packages/eslint-config-custom
models: link:../../packages/models
next-transpile-modules: 10.0.0
superjson: 1.11.0
@@ -280,16 +274,13 @@ importers:
'@types/aos': 3.0.4
'@types/node': 18.11.9
'@types/react': 18.0.25
- '@typescript-eslint/eslint-plugin': 5.43.0
- '@typescript-eslint/parser': 5.43.0
aos: 2.3.4
autoprefixer: 10.4.13
bot-engine: workspace:*
cross-env: 7.0.3
db: workspace:*
- eslint: 8.27.0
- eslint-config-next: 13.0.3
- eslint-plugin-react: 7.31.10
+ eslint: 8.28.0
+ eslint-config-custom: workspace:*
focus-visible: 5.2.0
framer-motion: 7.6.6
models: workspace:*
@@ -299,6 +290,7 @@ importers:
prettier: 2.7.1
react: 18.2.0
react-dom: 18.2.0
+ tsconfig: workspace:*
typescript: 4.8.4
utils: workspace:*
dependencies:
@@ -323,16 +315,14 @@ importers:
'@types/aos': 3.0.4
'@types/node': 18.11.9
'@types/react': 18.0.25
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
autoprefixer: 10.4.13_postcss@8.4.19
cross-env: 7.0.3
- eslint: 8.27.0
- eslint-config-next: 13.0.3_rmayb2veg2btbq6mbmnyivgasy
- eslint-plugin-react: 7.31.10_eslint@8.27.0
+ eslint: 8.28.0
+ eslint-config-custom: link:../../packages/eslint-config-custom
next-transpile-modules: 10.0.0
postcss: 8.4.19
prettier: 2.7.1
+ tsconfig: link:../../packages/tsconfig
typescript: 4.8.4
apps/viewer:
@@ -349,20 +339,15 @@ importers:
'@types/qs': 6.9.7
'@types/react': 18.0.25
'@types/sanitize-html': 2.6.2
- '@typescript-eslint/eslint-plugin': 5.43.0
- '@typescript-eslint/parser': 5.43.0
aws-sdk: 2.1254.0
bot-engine: '*'
- configs: workspace:*
cors: 2.8.5
cuid: 2.1.8
db: workspace:*
dotenv: 16.0.3
emails: workspace:*
- eslint: 8.27.0
- eslint-config-next: 13.0.3
- eslint-plugin-react: 7.31.10
- eslint-plugin-react-hooks: 4.6.0
+ eslint: 8.28.0
+ eslint-config-custom: workspace:*
google-auth-library: 8.7.0
google-spreadsheet: 3.3.0
got: 12.5.2
@@ -377,6 +362,7 @@ importers:
react-dom: 18.2.0
sanitize-html: 2.7.3
stripe: 10.17.0
+ tsconfig: workspace:*
typescript: 4.8.4
utils: workspace:*
dependencies:
@@ -407,20 +393,16 @@ importers:
'@types/qs': 6.9.7
'@types/react': 18.0.25
'@types/sanitize-html': 2.6.2
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- configs: link:../../packages/configs
dotenv: 16.0.3
emails: link:../../packages/emails
- eslint: 8.27.0
- eslint-config-next: 13.0.3_rmayb2veg2btbq6mbmnyivgasy
- eslint-plugin-react: 7.31.10_eslint@8.27.0
- eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
+ eslint: 8.28.0
+ eslint-config-custom: link:../../packages/eslint-config-custom
google-auth-library: 8.7.0
models: link:../../packages/models
next-transpile-modules: 10.0.0
node-fetch: 3.3.0
papaparse: 5.3.2
+ tsconfig: link:../../packages/tsconfig
typescript: 4.8.4
utils: link:../../packages/utils
@@ -434,16 +416,10 @@ importers:
'@types/react-phone-number-input': 3.0.14
'@types/react-scroll': 1.8.5
'@types/react-transition-group': 4.4.5
- '@typescript-eslint/eslint-plugin': 5.43.0
- '@typescript-eslint/parser': 5.43.0
autoprefixer: 10.4.13
- baptistearno-tsup: ^0.1.0
db: workspace:*
- eslint: 8.27.0
- eslint-config-next: 13.0.3
- eslint-config-prettier: 8.5.0
- eslint-plugin-prettier: 4.2.1
- eslint-plugin-react: 7.31.10
+ eslint: 8.28.0
+ eslint-config-custom: workspace:*
models: workspace:*
postcss: 8.4.19
prettier: 2.7.1
@@ -457,6 +433,8 @@ importers:
react-transition-group: 4.4.5
resize-observer: 1.0.4
tailwindcss: 3.2.4
+ tsconfig: workspace:*
+ tsup: 6.5.0
typebot-js: workspace:*
typescript: 4.8.4
utils: workspace:*
@@ -477,38 +455,22 @@ importers:
'@types/react-phone-number-input': 3.0.14
'@types/react-scroll': 1.8.5
'@types/react-transition-group': 4.4.5
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
autoprefixer: 10.4.13_postcss@8.4.19
- baptistearno-tsup: 0.1.0_wj7eq4dpcmr2qz6e5enuabn7dy
db: link:../db
- eslint: 8.27.0
- eslint-config-next: 13.0.3_rmayb2veg2btbq6mbmnyivgasy
- eslint-config-prettier: 8.5.0_eslint@8.27.0
- eslint-plugin-prettier: 4.2.1_v7o5sx5x3wbs57ifz6wc4f76we
- eslint-plugin-react: 7.31.10_eslint@8.27.0
+ eslint: 8.28.0
+ eslint-config-custom: link:../eslint-config-custom
models: link:../models
postcss: 8.4.19
prettier: 2.7.1
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
tailwindcss: 3.2.4_postcss@8.4.19
+ tsconfig: link:../tsconfig
+ tsup: 6.5.0_wj7eq4dpcmr2qz6e5enuabn7dy
typebot-js: link:../typebot-js
typescript: 4.8.4
utils: link:../utils
- packages/configs:
- specifiers:
- '@playwright/test': 1.27.1
- '@types/node': 18.11.9
- dotenv: 16.0.3
- utils: workspace:*
- devDependencies:
- '@playwright/test': 1.27.1
- '@types/node': 18.11.9
- dotenv: 16.0.3
- utils: link:../utils
-
packages/db:
specifiers:
'@prisma/client': 4.6.1
@@ -531,9 +493,12 @@ importers:
'@types/nodemailer': 6.4.6
'@types/react': 18.0.25
concurrently: 7.5.0
+ eslint: 8.28.0
+ eslint-config-custom: workspace:*
http-server: 14.1.1
nodemailer: 6.8.0
react: 18.2.0
+ tsconfig: workspace:*
tsx: 3.12.1
utils: workspace:*
devDependencies:
@@ -542,12 +507,27 @@ importers:
'@types/nodemailer': 6.4.6
'@types/react': 18.0.25
concurrently: 7.5.0
+ eslint: 8.28.0
+ eslint-config-custom: link:../eslint-config-custom
http-server: 14.1.1
nodemailer: 6.8.0
react: 18.2.0
+ tsconfig: link:../tsconfig
tsx: 3.12.1
utils: link:../utils
+ packages/eslint-config-custom:
+ specifiers:
+ eslint: 8.28.0
+ eslint-config-next: 13.0.4
+ eslint-config-prettier: 8.5.0
+ eslint-plugin-react: 7.31.11
+ dependencies:
+ eslint: 8.28.0
+ eslint-config-next: 13.0.4_zksrc6ykdxhogxjbhb5axiabwi
+ eslint-config-prettier: 8.5.0_eslint@8.28.0
+ eslint-plugin-react: 7.31.11_eslint@8.28.0
+
packages/models:
specifiers:
db: workspace:*
@@ -593,31 +573,25 @@ importers:
packages/typebot-js:
specifiers:
'@types/jest': 29.2.3
- '@typescript-eslint/eslint-plugin': 5.43.0
- '@typescript-eslint/parser': 5.43.0
- baptistearno-tsup: ^0.1.0
- eslint: 8.27.0
- eslint-plugin-functional: 4.4.1
- eslint-plugin-jest: 27.1.5
- eslint-plugin-prettier: 4.2.1
+ eslint: 8.28.0
+ eslint-config-custom: workspace:*
jest: 29.3.1
jest-environment-jsdom: 29.3.1
prettier: 2.7.1
ts-jest: 29.0.3
+ tsconfig: workspace:*
+ tsup: 6.5.0
typescript: 4.8.4
devDependencies:
'@types/jest': 29.2.3
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- baptistearno-tsup: 0.1.0_typescript@4.8.4
- eslint: 8.27.0
- eslint-plugin-functional: 4.4.1_rmayb2veg2btbq6mbmnyivgasy
- eslint-plugin-jest: 27.1.5_bf5qejdbjbrfwwaumpbpeb3h4e
- eslint-plugin-prettier: 4.2.1_mbd4zptqpjbepwpyh2zbtslqey
+ eslint: 8.28.0
+ eslint-config-custom: link:../eslint-config-custom
jest: 29.3.1
jest-environment-jsdom: 29.3.1
prettier: 2.7.1
ts-jest: 29.0.3_v72o2yzbigfissiesqypkt53yu
+ tsconfig: link:../tsconfig
+ tsup: 6.5.0_typescript@4.8.4
typescript: 4.8.4
packages/utils:
@@ -627,6 +601,7 @@ importers:
aws-sdk: 2.1254.0
cuid: 2.1.8
db: workspace:*
+ dotenv: 16.0.3
models: workspace:*
next: 13.0.3
nodemailer: 6.8.0
@@ -638,6 +613,7 @@ importers:
aws-sdk: 2.1254.0
cuid: 2.1.8
db: link:../db
+ dotenv: 16.0.3
models: link:../models
next: 13.0.3_biqbaboplfbrettd7655fr4n2y
nodemailer: 6.8.0
@@ -2111,6 +2087,7 @@ packages:
dependencies:
core-js-pure: 3.25.3
regenerator-runtime: 0.13.9
+ dev: false
/@babel/runtime/7.19.0:
resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==}
@@ -4430,7 +4407,6 @@ packages:
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- dev: true
/@faire/mjml-react/2.1.4_7tbcn2mecc3yvuxakflodiks3m:
resolution: {integrity: sha512-BK2ntEnBzocmO1L6NhQLY3cdGilYl5n1efmE/LKs9/KUaNXiIxGwHqkFyQ3NE7DVE74zm4DyS5UhektcaZXIYg==}
@@ -4572,16 +4548,13 @@ packages:
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- dev: true
/@humanwhocodes/module-importer/1.0.1:
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- dev: true
/@humanwhocodes/object-schema/1.2.1:
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
- dev: true
/@istanbuljs/load-nyc-config/1.1.0:
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
@@ -5013,11 +4986,11 @@ packages:
/@next/env/13.0.3:
resolution: {integrity: sha512-/4WzeG61Ot/PxsghXkSqQJ6UohFfwXoZ3dtsypmR9EBP+OIax9JRq0trq8Z/LCT9Aq4JbihVkaazRWguORjTAw==}
- /@next/eslint-plugin-next/13.0.3:
- resolution: {integrity: sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==}
+ /@next/eslint-plugin-next/13.0.4:
+ resolution: {integrity: sha512-jZ4urKT+aO9QHm3ttihrIQscQISDSKK8isAom750+EySn9o3LCSkTdPGBtvBqY7Yku+NqhfQempR5J58DqTaVg==}
dependencies:
glob: 7.1.7
- dev: true
+ dev: false
/@next/swc-android-arm-eabi/13.0.3:
resolution: {integrity: sha512-uxfUoj65CdFc1gX2q7GtBX3DhKv9Kn343LMqGNvXyuTpYTGMmIiVY7b9yF8oLWRV0gVKqhZBZifUmoPE8SJU6Q==}
@@ -5145,6 +5118,18 @@ packages:
resolution: {integrity: sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==}
dev: false
+ /@pkgr/utils/2.3.1:
+ resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ dependencies:
+ cross-spawn: 7.0.3
+ is-glob: 4.0.3
+ open: 8.4.0
+ picocolors: 1.0.0
+ tiny-glob: 0.2.9
+ tslib: 2.4.0
+ dev: false
+
/@playwright/test/1.27.1:
resolution: {integrity: sha512-mrL2q0an/7tVqniQQF6RBL2saskjljXzqNcCOVMUjRIgE6Y38nCNaP+Dc2FBW06bcpD3tqIws/HT9qiMHbNU0A==}
engines: {node: '>=14'}
@@ -5246,7 +5231,7 @@ packages:
/@rushstack/eslint-patch/1.2.0:
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
- dev: true
+ dev: false
/@sentry/browser/7.19.0:
resolution: {integrity: sha512-dWi5VjEwiLb4ofata0UCLdTbXLD1uDUebe9rNSBkHZ3fHF4eap4ZJlu3dYePKB0CKZhZrjzbydimMhaMUNdnug==}
@@ -5906,7 +5891,7 @@ packages:
/@types/json5/0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- dev: true
+ dev: false
/@types/jsonwebtoken/8.5.9:
resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==}
@@ -6087,10 +6072,6 @@ packages:
/@types/scheduler/0.16.2:
resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
- /@types/semver/7.3.12:
- resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==}
- dev: true
-
/@types/serve-index/1.9.1:
resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==}
dependencies:
@@ -6140,34 +6121,7 @@ packages:
dependencies:
'@types/yargs-parser': 21.0.0
- /@typescript-eslint/eslint-plugin/5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i:
- resolution: {integrity: sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- '@typescript-eslint/parser': ^5.0.0
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- '@typescript-eslint/scope-manager': 5.43.0
- '@typescript-eslint/type-utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- debug: 4.3.4
- eslint: 8.27.0
- ignore: 5.2.0
- natural-compare-lite: 1.4.0
- regexpp: 3.2.0
- semver: 7.3.7
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/parser/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
+ /@typescript-eslint/parser/5.43.0_zksrc6ykdxhogxjbhb5axiabwi:
resolution: {integrity: sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -6181,19 +6135,11 @@ packages:
'@typescript-eslint/types': 5.43.0
'@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
debug: 4.3.4
- eslint: 8.27.0
+ eslint: 8.28.0
typescript: 4.8.4
transitivePeerDependencies:
- supports-color
- dev: true
-
- /@typescript-eslint/scope-manager/5.38.1:
- resolution: {integrity: sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.38.1
- '@typescript-eslint/visitor-keys': 5.38.1
- dev: true
+ dev: false
/@typescript-eslint/scope-manager/5.43.0:
resolution: {integrity: sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==}
@@ -6201,58 +6147,12 @@ packages:
dependencies:
'@typescript-eslint/types': 5.43.0
'@typescript-eslint/visitor-keys': 5.43.0
- dev: true
-
- /@typescript-eslint/type-utils/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: '*'
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
- '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- debug: 4.3.4
- eslint: 8.27.0
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@typescript-eslint/types/5.38.1:
- resolution: {integrity: sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
+ dev: false
/@typescript-eslint/types/5.43.0:
resolution: {integrity: sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
-
- /@typescript-eslint/typescript-estree/5.38.1_typescript@4.8.4:
- resolution: {integrity: sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/types': 5.38.1
- '@typescript-eslint/visitor-keys': 5.38.1
- debug: 4.3.4
- globby: 11.1.0
- is-glob: 4.0.3
- semver: 7.3.7
- tsutils: 3.21.0_typescript@4.8.4
- typescript: 4.8.4
- transitivePeerDependencies:
- - supports-color
- dev: true
+ dev: false
/@typescript-eslint/typescript-estree/5.43.0_typescript@4.8.4:
resolution: {integrity: sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==}
@@ -6273,53 +6173,7 @@ packages:
typescript: 4.8.4
transitivePeerDependencies:
- supports-color
- dev: true
-
- /@typescript-eslint/utils/5.38.1_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- dependencies:
- '@types/json-schema': 7.0.11
- '@typescript-eslint/scope-manager': 5.38.1
- '@typescript-eslint/types': 5.38.1
- '@typescript-eslint/typescript-estree': 5.38.1_typescript@4.8.4
- eslint: 8.27.0
- eslint-scope: 5.1.1
- eslint-utils: 3.0.0_eslint@8.27.0
- transitivePeerDependencies:
- - supports-color
- - typescript
- dev: true
-
- /@typescript-eslint/utils/5.43.0_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- dependencies:
- '@types/json-schema': 7.0.11
- '@types/semver': 7.3.12
- '@typescript-eslint/scope-manager': 5.43.0
- '@typescript-eslint/types': 5.43.0
- '@typescript-eslint/typescript-estree': 5.43.0_typescript@4.8.4
- eslint: 8.27.0
- eslint-scope: 5.1.1
- eslint-utils: 3.0.0_eslint@8.27.0
- semver: 7.3.7
- transitivePeerDependencies:
- - supports-color
- - typescript
- dev: true
-
- /@typescript-eslint/visitor-keys/5.38.1:
- resolution: {integrity: sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- '@typescript-eslint/types': 5.38.1
- eslint-visitor-keys: 3.3.0
- dev: true
+ dev: false
/@typescript-eslint/visitor-keys/5.43.0:
resolution: {integrity: sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==}
@@ -6327,7 +6181,7 @@ packages:
dependencies:
'@typescript-eslint/types': 5.43.0
eslint-visitor-keys: 3.3.0
- dev: true
+ dev: false
/@udecode/plate-basic-marks/18.9.0_gmohhyxeb2dq4peb7jfnhckv34:
resolution: {integrity: sha512-L/n0fBGr8GsN+TTSLWLSddCP4QlDDNYOzGzReb9YAiF1AvzSTE8gTgic+T2rfk7uv04Gig/MiBcnK6uU/iekMQ==}
@@ -6912,7 +6766,6 @@ packages:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
acorn: 8.8.0
- dev: true
/acorn-node/1.8.2:
resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
@@ -7179,7 +7032,7 @@ packages:
dependencies:
'@babel/runtime': 7.19.0
'@babel/runtime-corejs3': 7.19.1
- dev: true
+ dev: false
/array-flatten/1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
@@ -7189,16 +7042,16 @@ packages:
resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==}
dev: false
- /array-includes/3.1.5:
- resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==}
+ /array-includes/3.1.6:
+ resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
get-intrinsic: 1.1.3
is-string: 1.0.7
- dev: true
+ dev: false
/array-union/2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
@@ -7210,19 +7063,29 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
es-shim-unscopables: 1.0.0
- dev: true
+ dev: false
- /array.prototype.flatmap/1.3.0:
- resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==}
+ /array.prototype.flatmap/1.3.1:
+ resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
es-shim-unscopables: 1.0.0
- dev: true
+ dev: false
+
+ /array.prototype.tosorted/1.1.1:
+ resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.4
+ es-shim-unscopables: 1.0.0
+ get-intrinsic: 1.1.3
+ dev: false
/arrify/2.0.1:
resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
@@ -7243,7 +7106,7 @@ packages:
/ast-types-flow/0.0.7:
resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
- dev: true
+ dev: false
/async/2.6.4:
resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
@@ -7317,7 +7180,7 @@ packages:
/axe-core/4.4.3:
resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==}
engines: {node: '>=4'}
- dev: true
+ dev: false
/axios/0.21.4:
resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
@@ -7347,7 +7210,7 @@ packages:
/axobject-query/2.2.0:
resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==}
- dev: true
+ dev: false
/babel-jest/29.3.1_@babel+core@7.20.2:
resolution: {integrity: sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==}
@@ -7553,79 +7416,6 @@ packages:
/balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- /baptistearno-tsup/0.1.0_typescript@4.8.4:
- resolution: {integrity: sha512-5ADinnL+X/mx15WAJJxYz0t/SzPhilQeoD5YsvnQV1XHiE+Zhj6BbW8X/1ko8i4SRr5ate/Kb9NF3SjVsCrhAQ==}
- engines: {node: '>=14'}
- hasBin: true
- peerDependencies:
- '@swc/core': ^1
- postcss: ^8.4.12
- typescript: ^4.1.0
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- postcss:
- optional: true
- typescript:
- optional: true
- dependencies:
- bundle-require: 3.1.0_esbuild@0.15.10
- cac: 6.7.14
- chokidar: 3.5.3
- debug: 4.3.4
- esbuild: 0.15.10
- execa: 5.1.1
- globby: 11.1.0
- joycon: 3.1.1
- postcss-load-config: 3.1.4
- resolve-from: 5.0.0
- rollup: 2.79.1
- source-map: 0.8.0-beta.0
- sucrase: 3.27.0
- tree-kill: 1.2.2
- typescript: 4.8.4
- transitivePeerDependencies:
- - supports-color
- - ts-node
- dev: true
-
- /baptistearno-tsup/0.1.0_wj7eq4dpcmr2qz6e5enuabn7dy:
- resolution: {integrity: sha512-5ADinnL+X/mx15WAJJxYz0t/SzPhilQeoD5YsvnQV1XHiE+Zhj6BbW8X/1ko8i4SRr5ate/Kb9NF3SjVsCrhAQ==}
- engines: {node: '>=14'}
- hasBin: true
- peerDependencies:
- '@swc/core': ^1
- postcss: ^8.4.12
- typescript: ^4.1.0
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- postcss:
- optional: true
- typescript:
- optional: true
- dependencies:
- bundle-require: 3.1.0_esbuild@0.15.10
- cac: 6.7.14
- chokidar: 3.5.3
- debug: 4.3.4
- esbuild: 0.15.10
- execa: 5.1.1
- globby: 11.1.0
- joycon: 3.1.1
- postcss: 8.4.19
- postcss-load-config: 3.1.4_postcss@8.4.19
- resolve-from: 5.0.0
- rollup: 2.79.1
- source-map: 0.8.0-beta.0
- sucrase: 3.27.0
- tree-kill: 1.2.2
- typescript: 4.8.4
- transitivePeerDependencies:
- - supports-color
- - ts-node
- dev: true
-
/base16/1.0.0:
resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==}
dev: false
@@ -7853,8 +7643,8 @@ packages:
ieee754: 1.1.13
isarray: 1.0.0
- /bundle-require/3.1.0_esbuild@0.15.10:
- resolution: {integrity: sha512-IIXtAO7fKcwPHNPt9kY/WNVJqy7NDy6YqJvv6ENH0TOZoJ+yjpEsn1w40WKZbR2ibfu5g1rfgJTvmFHpm5aOMA==}
+ /bundle-require/3.1.2_esbuild@0.15.10:
+ resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
peerDependencies:
esbuild: '>=0.13'
@@ -8494,6 +8284,7 @@ packages:
/core-js-pure/3.25.3:
resolution: {integrity: sha512-T/7qvgv70MEvRkZ8p6BasLZmOVYKzOaWNBEHAU8FmveCJkl4nko2quqPQOmy6AJIp5MBanhz9no3A94NoRb0XA==}
requiresBuild: true
+ dev: false
/core-js/2.6.12:
resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
@@ -8948,7 +8739,7 @@ packages:
/damerau-levenshtein/1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dev: true
+ dev: false
/data-uri-to-buffer/4.0.0:
resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
@@ -8978,6 +8769,7 @@ packages:
optional: true
dependencies:
ms: 2.0.0
+ dev: false
/debug/3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -8988,7 +8780,6 @@ packages:
optional: true
dependencies:
ms: 2.1.3
- dev: true
/debug/4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -9047,17 +8838,11 @@ packages:
/deep-is/0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- dev: true
/deep-object-diff/1.1.9:
resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==}
dev: false
- /deepmerge-ts/4.2.2:
- resolution: {integrity: sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==}
- engines: {node: '>=12.4.0'}
- dev: true
-
/deepmerge/4.2.2:
resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
engines: {node: '>=0.10.0'}
@@ -9260,14 +9045,13 @@ packages:
engines: {node: '>=0.10.0'}
dependencies:
esutils: 2.0.3
- dev: true
+ dev: false
/doctrine/3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
dependencies:
esutils: 2.0.3
- dev: true
/dom-converter/0.2.0:
resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
@@ -9430,6 +9214,7 @@ packages:
/emoji-regex/9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ dev: false
/emojilib/3.0.7:
resolution: {integrity: sha512-8WkrBgnqeRS0pdgx3+vh3hkmb6jnxYHOyTy5xrYgFoovm7Cp2ufAiw/yvq9D53vQp8a80i6c0Hbm82Q61yx1RA==}
@@ -9487,8 +9272,8 @@ packages:
stackframe: 1.3.4
dev: false
- /es-abstract/1.20.3:
- resolution: {integrity: sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==}
+ /es-abstract/1.20.4:
+ resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
@@ -9523,7 +9308,7 @@ packages:
resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
dependencies:
has: 1.0.3
- dev: true
+ dev: false
/es-to-primitive/1.2.1:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
@@ -9790,8 +9575,8 @@ packages:
source-map: 0.6.1
dev: true
- /eslint-config-next/13.0.3_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==}
+ /eslint-config-next/13.0.4_zksrc6ykdxhogxjbhb5axiabwi:
+ resolution: {integrity: sha512-moEC7BW2TK7JKq3QfnaauqRjWzVcEf71gp5DbClpFPHM6QXE0u0uVvSTiHlmOgtCe1vyWAO+AhF87ZITd8mIDw==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1'
@@ -9799,30 +9584,30 @@ packages:
typescript:
optional: true
dependencies:
- '@next/eslint-plugin-next': 13.0.3
+ '@next/eslint-plugin-next': 13.0.4
'@rushstack/eslint-patch': 1.2.0
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- eslint: 8.27.0
+ '@typescript-eslint/parser': 5.43.0_zksrc6ykdxhogxjbhb5axiabwi
+ eslint: 8.28.0
eslint-import-resolver-node: 0.3.6
- eslint-import-resolver-typescript: 2.7.1_dcpv4nbdr5ks2h5677xdltrk6e
- eslint-plugin-import: 2.26.0_wbsj7pk5g7hogwvhsif6xntns4
- eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0
- eslint-plugin-react: 7.31.10_eslint@8.27.0
- eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0
+ eslint-import-resolver-typescript: 3.5.2_ktrec6dplf4now6nlbc6d67jee
+ eslint-plugin-import: 2.26.0_eslint@8.28.0
+ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.28.0
+ eslint-plugin-react: 7.31.11_eslint@8.28.0
+ eslint-plugin-react-hooks: 4.6.0_eslint@8.28.0
typescript: 4.8.4
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
- dev: true
+ dev: false
- /eslint-config-prettier/8.5.0_eslint@8.27.0:
+ /eslint-config-prettier/8.5.0_eslint@8.28.0:
resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.27.0
- dev: true
+ eslint: 8.28.0
+ dev: false
/eslint-import-resolver-node/0.3.6:
resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==}
@@ -9831,27 +9616,29 @@ packages:
resolve: 1.22.1
transitivePeerDependencies:
- supports-color
- dev: true
+ dev: false
- /eslint-import-resolver-typescript/2.7.1_dcpv4nbdr5ks2h5677xdltrk6e:
- resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
- engines: {node: '>=4'}
+ /eslint-import-resolver-typescript/3.5.2_ktrec6dplf4now6nlbc6d67jee:
+ resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
eslint-plugin-import: '*'
dependencies:
debug: 4.3.4
- eslint: 8.27.0
- eslint-plugin-import: 2.26.0_wbsj7pk5g7hogwvhsif6xntns4
- glob: 7.2.3
+ enhanced-resolve: 5.10.0
+ eslint: 8.28.0
+ eslint-plugin-import: 2.26.0_eslint@8.28.0
+ get-tsconfig: 4.2.0
+ globby: 13.1.2
+ is-core-module: 2.10.0
is-glob: 4.0.3
- resolve: 1.22.1
- tsconfig-paths: 3.14.1
+ synckit: 0.8.4
transitivePeerDependencies:
- supports-color
- dev: true
+ dev: false
- /eslint-module-utils/2.7.4_7n62batgpjg7oa6ssbsyzoyo34:
+ /eslint-module-utils/2.7.4_sjge656jyd3rr27cepuzx7h5u4:
resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
engines: {node: '>=4'}
peerDependencies:
@@ -9872,38 +9659,14 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
debug: 3.2.7
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-import-resolver-node: 0.3.6
transitivePeerDependencies:
- supports-color
- dev: true
+ dev: false
- /eslint-plugin-functional/4.4.1_rmayb2veg2btbq6mbmnyivgasy:
- resolution: {integrity: sha512-YhSfHS52Si62Sn126g9wGx+XnWMoWhwEt6ctVXfcJj+xMUiggjOqUVMca7fuLNzX8jYiNBIeU1Y0teHGePZ3NA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^8.0.0
- tsutils: ^3.0.0
- typescript: ^3.4.1 || ^4.0.0
- peerDependenciesMeta:
- tsutils:
- optional: true
- typescript:
- optional: true
- dependencies:
- '@typescript-eslint/utils': 5.38.1_rmayb2veg2btbq6mbmnyivgasy
- deepmerge-ts: 4.2.2
- escape-string-regexp: 4.0.0
- eslint: 8.27.0
- semver: 7.3.7
- typescript: 4.8.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /eslint-plugin-import/2.26.0_wbsj7pk5g7hogwvhsif6xntns4:
+ /eslint-plugin-import/2.26.0_eslint@8.28.0:
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
engines: {node: '>=4'}
peerDependencies:
@@ -9913,50 +9676,27 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- array-includes: 3.1.5
+ array-includes: 3.1.6
array.prototype.flat: 1.3.0
debug: 2.6.9
doctrine: 2.1.0
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-import-resolver-node: 0.3.6
- eslint-module-utils: 2.7.4_7n62batgpjg7oa6ssbsyzoyo34
+ eslint-module-utils: 2.7.4_sjge656jyd3rr27cepuzx7h5u4
has: 1.0.3
is-core-module: 2.10.0
is-glob: 4.0.3
minimatch: 3.1.2
- object.values: 1.1.5
+ object.values: 1.1.6
resolve: 1.22.1
tsconfig-paths: 3.14.1
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- dev: true
+ dev: false
- /eslint-plugin-jest/27.1.5_bf5qejdbjbrfwwaumpbpeb3h4e:
- resolution: {integrity: sha512-CK2dekZ5VBdzsOSOH5Fc1rwC+cWXjkcyrmf1RV714nDUDKu+o73TTJiDxpbILG8PtPPpAAl3ywzh5QA7Ft0mjA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- peerDependencies:
- '@typescript-eslint/eslint-plugin': ^5.0.0
- eslint: ^7.0.0 || ^8.0.0
- jest: '*'
- peerDependenciesMeta:
- '@typescript-eslint/eslint-plugin':
- optional: true
- jest:
- optional: true
- dependencies:
- '@typescript-eslint/eslint-plugin': 5.43.0_yy4vf4gcvxiubmg7fqa55dqe2i
- '@typescript-eslint/utils': 5.43.0_rmayb2veg2btbq6mbmnyivgasy
- eslint: 8.27.0
- jest: 29.3.1
- transitivePeerDependencies:
- - supports-color
- - typescript
- dev: true
-
- /eslint-plugin-jsx-a11y/6.6.1_eslint@8.27.0:
+ /eslint-plugin-jsx-a11y/6.6.1_eslint@8.28.0:
resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -9964,84 +9704,52 @@ packages:
dependencies:
'@babel/runtime': 7.19.0
aria-query: 4.2.2
- array-includes: 3.1.5
+ array-includes: 3.1.6
ast-types-flow: 0.0.7
axe-core: 4.4.3
axobject-query: 2.2.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.27.0
+ eslint: 8.28.0
has: 1.0.3
jsx-ast-utils: 3.3.3
language-tags: 1.0.5
minimatch: 3.1.2
semver: 6.3.0
- dev: true
+ dev: false
- /eslint-plugin-prettier/4.2.1_mbd4zptqpjbepwpyh2zbtslqey:
- resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- eslint: '>=7.28.0'
- eslint-config-prettier: '*'
- prettier: '>=2.0.0'
- peerDependenciesMeta:
- eslint-config-prettier:
- optional: true
- dependencies:
- eslint: 8.27.0
- prettier: 2.7.1
- prettier-linter-helpers: 1.0.0
- dev: true
-
- /eslint-plugin-prettier/4.2.1_v7o5sx5x3wbs57ifz6wc4f76we:
- resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- eslint: '>=7.28.0'
- eslint-config-prettier: '*'
- prettier: '>=2.0.0'
- peerDependenciesMeta:
- eslint-config-prettier:
- optional: true
- dependencies:
- eslint: 8.27.0
- eslint-config-prettier: 8.5.0_eslint@8.27.0
- prettier: 2.7.1
- prettier-linter-helpers: 1.0.0
- dev: true
-
- /eslint-plugin-react-hooks/4.6.0_eslint@8.27.0:
+ /eslint-plugin-react-hooks/4.6.0_eslint@8.28.0:
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.27.0
- dev: true
+ eslint: 8.28.0
+ dev: false
- /eslint-plugin-react/7.31.10_eslint@8.27.0:
- resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==}
+ /eslint-plugin-react/7.31.11_eslint@8.28.0:
+ resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
dependencies:
- array-includes: 3.1.5
- array.prototype.flatmap: 1.3.0
+ array-includes: 3.1.6
+ array.prototype.flatmap: 1.3.1
+ array.prototype.tosorted: 1.1.1
doctrine: 2.1.0
- eslint: 8.27.0
+ eslint: 8.28.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.3
minimatch: 3.1.2
- object.entries: 1.1.5
- object.fromentries: 2.0.5
- object.hasown: 1.1.1
- object.values: 1.1.5
+ object.entries: 1.1.6
+ object.fromentries: 2.0.6
+ object.hasown: 1.1.2
+ object.values: 1.1.6
prop-types: 15.8.1
resolve: 2.0.0-next.4
semver: 6.3.0
- string.prototype.matchall: 4.0.7
- dev: true
+ string.prototype.matchall: 4.0.8
+ dev: false
/eslint-scope/5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
@@ -10056,30 +9764,26 @@ packages:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
- dev: true
- /eslint-utils/3.0.0_eslint@8.27.0:
+ /eslint-utils/3.0.0_eslint@8.28.0:
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5'
dependencies:
- eslint: 8.27.0
+ eslint: 8.28.0
eslint-visitor-keys: 2.1.0
- dev: true
/eslint-visitor-keys/2.1.0:
resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
engines: {node: '>=10'}
- dev: true
/eslint-visitor-keys/3.3.0:
resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
- /eslint/8.27.0:
- resolution: {integrity: sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==}
+ /eslint/8.28.0:
+ resolution: {integrity: sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
@@ -10094,7 +9798,7 @@ packages:
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.1.1
- eslint-utils: 3.0.0_eslint@8.27.0
+ eslint-utils: 3.0.0_eslint@8.28.0
eslint-visitor-keys: 3.3.0
espree: 9.4.0
esquery: 1.4.0
@@ -10124,7 +9828,6 @@ packages:
text-table: 0.2.0
transitivePeerDependencies:
- supports-color
- dev: true
/espree/9.4.0:
resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==}
@@ -10133,7 +9836,6 @@ packages:
acorn: 8.8.0
acorn-jsx: 5.3.2_acorn@8.8.0
eslint-visitor-keys: 3.3.0
- dev: true
/esprima/4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
@@ -10145,7 +9847,6 @@ packages:
engines: {node: '>=0.10'}
dependencies:
estraverse: 5.3.0
- dev: true
/esrecurse/4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
@@ -10312,10 +10013,6 @@ packages:
/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- /fast-diff/1.2.0:
- resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
- dev: true
-
/fast-glob/3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
@@ -10331,7 +10028,6 @@ packages:
/fast-levenshtein/2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- dev: true
/fast-shallow-equal/1.0.0:
resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==}
@@ -10428,7 +10124,6 @@ packages:
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
flat-cache: 3.0.4
- dev: true
/file-loader/6.2.0_webpack@5.74.0:
resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==}
@@ -10512,11 +10207,9 @@ packages:
dependencies:
flatted: 3.2.7
rimraf: 3.0.2
- dev: true
/flatted/3.2.7:
resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
- dev: true
/flux/4.0.3_react@17.0.2:
resolution: {integrity: sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==}
@@ -10691,7 +10384,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
functions-have-names: 1.2.3
/functions-have-names/1.2.3:
@@ -10818,7 +10511,6 @@ packages:
/get-tsconfig/4.2.0:
resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==}
- dev: true
/github-slugger/1.4.0:
resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==}
@@ -10858,7 +10550,7 @@ packages:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
- dev: true
+ dev: false
/glob/7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
@@ -10912,7 +10604,10 @@ packages:
engines: {node: '>=8'}
dependencies:
type-fest: 0.20.2
- dev: true
+
+ /globalyzer/0.1.0:
+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
+ dev: false
/globby/11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
@@ -10936,6 +10631,10 @@ packages:
slash: 4.0.0
dev: false
+ /globrex/0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+ dev: false
+
/google-auth-library/6.1.6:
resolution: {integrity: sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==}
engines: {node: '>=10'}
@@ -11054,7 +10753,6 @@ packages:
/grapheme-splitter/1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
- dev: true
/gray-matter/4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
@@ -11487,6 +11185,12 @@ packages:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
+ /husky/8.0.2:
+ resolution: {integrity: sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
/hyphenate-style-name/1.0.4:
resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==}
dev: false
@@ -11950,7 +11654,7 @@ packages:
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.2
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
for-each: 0.3.3
has-tostringtag: 1.0.0
@@ -12660,7 +12364,6 @@ packages:
/js-sdsl/4.1.5:
resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==}
- dev: true
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -12756,7 +12459,6 @@ packages:
/json-stable-stringify-without-jsonify/1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
- dev: true
/json-stream/1.0.0:
resolution: {integrity: sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==}
@@ -12767,7 +12469,7 @@ packages:
hasBin: true
dependencies:
minimist: 1.2.6
- dev: true
+ dev: false
/json5/2.2.1:
resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
@@ -12802,9 +12504,9 @@ packages:
resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
engines: {node: '>=4.0'}
dependencies:
- array-includes: 3.1.5
+ array-includes: 3.1.6
object.assign: 4.1.4
- dev: true
+ dev: false
/juice/7.0.0:
resolution: {integrity: sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==}
@@ -12874,13 +12576,13 @@ packages:
/language-subtag-registry/0.3.22:
resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
- dev: true
+ dev: false
/language-tags/1.0.5:
resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
dependencies:
language-subtag-registry: 0.3.22
- dev: true
+ dev: false
/latest-version/5.1.0:
resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==}
@@ -12907,7 +12609,6 @@ packages:
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
- dev: true
/libphonenumber-js/1.10.14:
resolution: {integrity: sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==}
@@ -13031,7 +12732,6 @@ packages:
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- dev: true
/lodash.mergewith/4.6.2:
resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
@@ -13721,6 +13421,7 @@ packages:
/ms/2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: false
/ms/2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -13770,13 +13471,8 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- /natural-compare-lite/1.4.0:
- resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
- dev: true
-
/natural-compare/1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- dev: true
/negotiator/0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
@@ -14088,39 +13784,39 @@ packages:
has-symbols: 1.0.3
object-keys: 1.1.1
- /object.entries/1.1.5:
- resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==}
+ /object.entries/1.1.6:
+ resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
+ es-abstract: 1.20.4
+ dev: false
- /object.fromentries/2.0.5:
- resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==}
+ /object.fromentries/2.0.6:
+ resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
+ es-abstract: 1.20.4
+ dev: false
- /object.hasown/1.1.1:
- resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==}
+ /object.hasown/1.1.2:
+ resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
dependencies:
define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
+ es-abstract: 1.20.4
+ dev: false
- /object.values/1.1.5:
- resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==}
+ /object.values/1.1.6:
+ resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
+ es-abstract: 1.20.4
+ dev: false
/obuf/1.1.2:
resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
@@ -14209,7 +13905,6 @@ packages:
prelude-ls: 1.2.1
type-check: 0.4.0
word-wrap: 1.2.3
- dev: true
/os-tmpdir/1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
@@ -15289,20 +14984,12 @@ packages:
/prelude-ls/1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- dev: true
/prepend-http/2.0.0:
resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==}
engines: {node: '>=4'}
dev: false
- /prettier-linter-helpers/1.0.0:
- resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
- engines: {node: '>=6.0.0'}
- dependencies:
- fast-diff: 1.2.0
- dev: true
-
/prettier/1.19.1:
resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==}
engines: {node: '>=4'}
@@ -15397,6 +15084,7 @@ packages:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
+ dev: false
/property-information/5.6.0:
resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
@@ -15713,6 +15401,7 @@ packages:
/react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ dev: false
/react-is/18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
@@ -16089,7 +15778,6 @@ packages:
/regexpp/3.2.0:
resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
engines: {node: '>=8'}
- dev: true
/regexpu-core/5.2.1:
resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==}
@@ -16265,7 +15953,7 @@ packages:
is-core-module: 2.10.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- dev: true
+ dev: false
/responselike/1.0.2:
resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==}
@@ -16317,9 +16005,9 @@ packages:
fsevents: 2.3.2
dev: false
- /rollup/2.79.1:
- resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
- engines: {node: '>=10.0.0'}
+ /rollup/3.3.0:
+ resolution: {integrity: sha512-wqOV/vUJCYEbWsXvwCkgGWvgaEnsbn4jxBQWKpN816CqsmCimDmCNJI83c6if7QVD4v/zlyRzxN7U2yDT5rfoA==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
@@ -16979,32 +16667,32 @@ packages:
strip-ansi: 7.0.1
dev: false
- /string.prototype.matchall/4.0.7:
- resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==}
+ /string.prototype.matchall/4.0.8:
+ resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
get-intrinsic: 1.1.3
has-symbols: 1.0.3
internal-slot: 1.0.3
regexp.prototype.flags: 1.4.3
side-channel: 1.0.4
- dev: true
+ dev: false
/string.prototype.trimend/1.0.5:
resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
/string.prototype.trimstart/1.0.5:
resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==}
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
/string_decoder/1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -17062,7 +16750,7 @@ packages:
/strip-bom/3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
- dev: true
+ dev: false
/strip-bom/4.0.0:
resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
@@ -17277,6 +16965,14 @@ packages:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
dev: true
+ /synckit/0.8.4:
+ resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ dependencies:
+ '@pkgr/utils': 2.3.1
+ tslib: 2.4.0
+ dev: false
+
/tailwindcss/3.2.4_postcss@8.4.19:
resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
engines: {node: '>=12.13.0'}
@@ -17396,6 +17092,13 @@ packages:
resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
dev: false
+ /tiny-glob/0.2.9:
+ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
+ dependencies:
+ globalyzer: 0.1.0
+ globrex: 0.1.2
+ dev: false
+
/tiny-invariant/1.0.6:
resolution: {integrity: sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==}
dev: false
@@ -17569,14 +17272,88 @@ packages:
json5: 1.0.1
minimist: 1.2.6
strip-bom: 3.0.0
- dev: true
+ dev: false
/tslib/1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: false
/tslib/2.4.0:
resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
+ /tsup/6.5.0_typescript@4.8.4:
+ resolution: {integrity: sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': ^1
+ postcss: ^8.4.12
+ typescript: ^4.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ postcss:
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ bundle-require: 3.1.2_esbuild@0.15.10
+ cac: 6.7.14
+ chokidar: 3.5.3
+ debug: 4.3.4
+ esbuild: 0.15.10
+ execa: 5.1.1
+ globby: 11.1.0
+ joycon: 3.1.1
+ postcss-load-config: 3.1.4
+ resolve-from: 5.0.0
+ rollup: 3.3.0
+ source-map: 0.8.0-beta.0
+ sucrase: 3.27.0
+ tree-kill: 1.2.2
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - supports-color
+ - ts-node
+ dev: true
+
+ /tsup/6.5.0_wj7eq4dpcmr2qz6e5enuabn7dy:
+ resolution: {integrity: sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': ^1
+ postcss: ^8.4.12
+ typescript: ^4.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ postcss:
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ bundle-require: 3.1.2_esbuild@0.15.10
+ cac: 6.7.14
+ chokidar: 3.5.3
+ debug: 4.3.4
+ esbuild: 0.15.10
+ execa: 5.1.1
+ globby: 11.1.0
+ joycon: 3.1.1
+ postcss: 8.4.19
+ postcss-load-config: 3.1.4_postcss@8.4.19
+ resolve-from: 5.0.0
+ rollup: 3.3.0
+ source-map: 0.8.0-beta.0
+ sucrase: 3.27.0
+ tree-kill: 1.2.2
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - supports-color
+ - ts-node
+ dev: true
+
/tsutils/3.21.0_typescript@4.8.4:
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
@@ -17585,7 +17362,7 @@ packages:
dependencies:
tslib: 1.14.1
typescript: 4.8.4
- dev: true
+ dev: false
/tsx/3.12.1:
resolution: {integrity: sha512-Rcg1x+rNe7qwlP8j7kx4VjP/pJo/V57k+17hlrn6a7FuQLNwkaw5W4JF75tYornNVCxkXdSUnqlIT8JY/ttvIw==}
@@ -17671,7 +17448,6 @@ packages:
engines: {node: '>= 0.8.0'}
dependencies:
prelude-ls: 1.2.1
- dev: true
/type-detect/4.0.8:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
@@ -18484,7 +18260,7 @@ packages:
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.2
- es-abstract: 1.20.3
+ es-abstract: 1.20.4
for-each: 0.3.3
has-tostringtag: 1.0.0
is-typed-array: 1.1.9
@@ -18530,7 +18306,6 @@ packages:
/word-wrap/1.2.3:
resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
engines: {node: '>=0.10.0'}
- dev: true
/wrap-ansi/7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
diff --git a/turbo.json b/turbo.json
index 71838c1d8..635bde19c 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,6 +1,9 @@
{
"baseBranch": "origin/main",
"pipeline": {
+ "lint": {
+ "outputs": []
+ },
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "dist/**", "build/**"],