⚡ (embedBubble) Enable variable embed height
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import { VariablesButton } from '@/features/variables'
|
||||||
import {
|
import {
|
||||||
NumberInputProps,
|
NumberInputProps,
|
||||||
NumberInput,
|
NumberInput,
|
||||||
@@ -5,49 +6,80 @@ import {
|
|||||||
NumberInputStepper,
|
NumberInputStepper,
|
||||||
NumberIncrementStepper,
|
NumberIncrementStepper,
|
||||||
NumberDecrementStepper,
|
NumberDecrementStepper,
|
||||||
|
HStack,
|
||||||
|
FormControl,
|
||||||
|
FormLabel,
|
||||||
} from '@chakra-ui/react'
|
} from '@chakra-ui/react'
|
||||||
|
import { Variable, VariableString } from 'models'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { useDebouncedCallback } from 'use-debounce'
|
import { useDebouncedCallback } from 'use-debounce'
|
||||||
import { env } from 'utils'
|
import { env } from 'utils'
|
||||||
|
import { MoreInfoTooltip } from '../MoreInfoTooltip'
|
||||||
|
|
||||||
type Props = {
|
type Value<HasVariable> = HasVariable extends undefined | true
|
||||||
value?: number
|
? number | VariableString
|
||||||
|
: number
|
||||||
|
|
||||||
|
type Props<HasVariable extends boolean> = {
|
||||||
|
defaultValue?: Value<HasVariable>
|
||||||
debounceTimeout?: number
|
debounceTimeout?: number
|
||||||
withVariableButton?: boolean
|
withVariableButton?: HasVariable
|
||||||
onValueChange: (value?: number) => void
|
label?: string
|
||||||
} & NumberInputProps
|
moreInfoTooltip?: string
|
||||||
|
isRequired?: boolean
|
||||||
|
onValueChange: (value?: Value<HasVariable>) => void
|
||||||
|
} & Omit<NumberInputProps, 'defaultValue' | 'value' | 'onChange' | 'isRequired'>
|
||||||
|
|
||||||
export const SmartNumberInput = ({
|
export const SmartNumberInput = <HasVariable extends boolean>({
|
||||||
value,
|
defaultValue,
|
||||||
onValueChange,
|
onValueChange,
|
||||||
|
withVariableButton,
|
||||||
debounceTimeout = 1000,
|
debounceTimeout = 1000,
|
||||||
|
label,
|
||||||
|
moreInfoTooltip,
|
||||||
|
isRequired,
|
||||||
...props
|
...props
|
||||||
}: Props) => {
|
}: Props<HasVariable>) => {
|
||||||
const [currentValue, setCurrentValue] = useState(value?.toString() ?? '')
|
const [value, setValue] = useState(defaultValue?.toString() ?? '')
|
||||||
const debounced = useDebouncedCallback(
|
|
||||||
|
const onValueChangeDebounced = useDebouncedCallback(
|
||||||
onValueChange,
|
onValueChange,
|
||||||
env('E2E_TEST') === 'true' ? 0 : debounceTimeout
|
env('E2E_TEST') === 'true' ? 0 : debounceTimeout
|
||||||
)
|
)
|
||||||
|
|
||||||
useEffect(
|
useEffect(
|
||||||
() => () => {
|
() => () => {
|
||||||
debounced.flush()
|
onValueChangeDebounced.flush()
|
||||||
},
|
},
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
[onValueChangeDebounced]
|
||||||
[]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const handleValueChange = (value: string) => {
|
const handleValueChange = (value: string) => {
|
||||||
setCurrentValue(value)
|
setValue(value)
|
||||||
if (value.endsWith('.') || value.endsWith(',')) return
|
if (value.endsWith('.') || value.endsWith(',')) return
|
||||||
if (value === '') return debounced(undefined)
|
if (value === '') return onValueChangeDebounced(undefined)
|
||||||
|
if (
|
||||||
|
value.startsWith('{{') &&
|
||||||
|
value.endsWith('}}') &&
|
||||||
|
value.length > 4 &&
|
||||||
|
(withVariableButton ?? true)
|
||||||
|
) {
|
||||||
|
onValueChangeDebounced(value as Value<HasVariable>)
|
||||||
|
return
|
||||||
|
}
|
||||||
const newValue = parseFloat(value)
|
const newValue = parseFloat(value)
|
||||||
if (isNaN(newValue)) return
|
if (isNaN(newValue)) return
|
||||||
debounced(newValue)
|
onValueChangeDebounced(newValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
const handleVariableSelected = (variable?: Variable) => {
|
||||||
<NumberInput onChange={handleValueChange} value={currentValue} {...props}>
|
if (!variable) return
|
||||||
|
const newValue = `{{${variable.name}}}`
|
||||||
|
handleValueChange(newValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
const Input = (
|
||||||
|
<NumberInput onChange={handleValueChange} value={value} {...props}>
|
||||||
<NumberInputField placeholder={props.placeholder} />
|
<NumberInputField placeholder={props.placeholder} />
|
||||||
<NumberInputStepper>
|
<NumberInputStepper>
|
||||||
<NumberIncrementStepper />
|
<NumberIncrementStepper />
|
||||||
@@ -55,4 +87,29 @@ export const SmartNumberInput = ({
|
|||||||
</NumberInputStepper>
|
</NumberInputStepper>
|
||||||
</NumberInput>
|
</NumberInput>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormControl
|
||||||
|
as={HStack}
|
||||||
|
isRequired={isRequired}
|
||||||
|
justifyContent="space-between"
|
||||||
|
>
|
||||||
|
{label && (
|
||||||
|
<FormLabel mb="0" flexShrink={0}>
|
||||||
|
{label}{' '}
|
||||||
|
{moreInfoTooltip && (
|
||||||
|
<MoreInfoTooltip>{moreInfoTooltip}</MoreInfoTooltip>
|
||||||
|
)}
|
||||||
|
</FormLabel>
|
||||||
|
)}
|
||||||
|
{withVariableButton ?? true ? (
|
||||||
|
<HStack spacing={0}>
|
||||||
|
{Input}
|
||||||
|
<VariablesButton onSelectVariable={handleVariableSelected} />
|
||||||
|
</HStack>
|
||||||
|
) : (
|
||||||
|
Input
|
||||||
|
)}
|
||||||
|
</FormControl>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export const EmbedUploadContent = ({ content, onSubmit }: Props) => {
|
|||||||
onSubmit({ ...content, url: iframeUrl })
|
onSubmit({ ...content, url: iframeUrl })
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleHeightChange = (height?: number) =>
|
const handleHeightChange = (height?: EmbedBubbleContent['height']) =>
|
||||||
height && onSubmit({ ...content, height })
|
height && onSubmit({ ...content, height })
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -32,12 +32,13 @@ export const EmbedUploadContent = ({ content, onSubmit }: Props) => {
|
|||||||
</Text>
|
</Text>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
<HStack justify="space-between">
|
<HStack>
|
||||||
<Text>Height: </Text>
|
|
||||||
<SmartNumberInput
|
<SmartNumberInput
|
||||||
value={content?.height}
|
label="Height:"
|
||||||
|
defaultValue={content?.height}
|
||||||
onValueChange={handleHeightChange}
|
onValueChange={handleHeightChange}
|
||||||
/>
|
/>
|
||||||
|
<Text>px</Text>
|
||||||
</HStack>
|
</HStack>
|
||||||
</Stack>
|
</Stack>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { FormLabel, Stack } from '@chakra-ui/react'
|
import { FormLabel, HStack, Stack, Text } from '@chakra-ui/react'
|
||||||
import { CodeEditor } from '@/components/CodeEditor'
|
import { CodeEditor } from '@/components/CodeEditor'
|
||||||
import { FileInputOptions, Variable } from 'models'
|
import { FileInputOptions, Variable } from 'models'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
@@ -48,16 +48,16 @@ export const FileInputSettings = ({ options, onOptionsChange }: Props) => {
|
|||||||
initialValue={options.isMultipleAllowed}
|
initialValue={options.isMultipleAllowed}
|
||||||
onCheckChange={handleMultipleFilesChange}
|
onCheckChange={handleMultipleFilesChange}
|
||||||
/>
|
/>
|
||||||
<Stack>
|
<HStack>
|
||||||
<FormLabel mb="0" htmlFor="limit">
|
|
||||||
Size limit (MB):
|
|
||||||
</FormLabel>
|
|
||||||
<SmartNumberInput
|
<SmartNumberInput
|
||||||
id="limit"
|
label={'Size limit:'}
|
||||||
value={options.sizeLimit ?? 10}
|
defaultValue={options.sizeLimit ?? 10}
|
||||||
onValueChange={handleSizeLimitChange}
|
onValueChange={handleSizeLimitChange}
|
||||||
|
withVariableButton={false}
|
||||||
/>
|
/>
|
||||||
</Stack>
|
<Text>MB</Text>
|
||||||
|
</HStack>
|
||||||
|
|
||||||
<Stack>
|
<Stack>
|
||||||
<FormLabel mb="0">Placeholder:</FormLabel>
|
<FormLabel mb="0">Placeholder:</FormLabel>
|
||||||
<CodeEditor
|
<CodeEditor
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Input, SmartNumberInput } from '@/components/inputs'
|
import { Input, SmartNumberInput } from '@/components/inputs'
|
||||||
import { VariableSearchInput } from '@/components/VariableSearchInput'
|
import { VariableSearchInput } from '@/components/VariableSearchInput'
|
||||||
import { removeUndefinedFields } from '@/utils/helpers'
|
import { removeUndefinedFields } from '@/utils/helpers'
|
||||||
import { FormLabel, HStack, Stack } from '@chakra-ui/react'
|
import { FormLabel, Stack } from '@chakra-ui/react'
|
||||||
import { NumberInputOptions, Variable } from 'models'
|
import { NumberInputOptions, Variable } from 'models'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
@@ -50,36 +50,24 @@ export const NumberInputSettingsBody = ({
|
|||||||
onChange={handleButtonLabelChange}
|
onChange={handleButtonLabelChange}
|
||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
<HStack justifyContent="space-between">
|
<SmartNumberInput
|
||||||
<FormLabel mb="0" htmlFor="min">
|
label="Min:"
|
||||||
Min:
|
defaultValue={options.min}
|
||||||
</FormLabel>
|
onValueChange={handleMinChange}
|
||||||
<SmartNumberInput
|
withVariableButton={false}
|
||||||
id="min"
|
/>
|
||||||
value={options.min}
|
<SmartNumberInput
|
||||||
onValueChange={handleMinChange}
|
label="Max:"
|
||||||
/>
|
defaultValue={options.max}
|
||||||
</HStack>
|
onValueChange={handleMaxChange}
|
||||||
<HStack justifyContent="space-between">
|
withVariableButton={false}
|
||||||
<FormLabel mb="0" htmlFor="max">
|
/>
|
||||||
Max:
|
<SmartNumberInput
|
||||||
</FormLabel>
|
label="Step:"
|
||||||
<SmartNumberInput
|
defaultValue={options.step}
|
||||||
id="max"
|
onValueChange={handleBlockChange}
|
||||||
value={options.max}
|
withVariableButton={false}
|
||||||
onValueChange={handleMaxChange}
|
/>
|
||||||
/>
|
|
||||||
</HStack>
|
|
||||||
<HStack justifyContent="space-between">
|
|
||||||
<FormLabel mb="0" htmlFor="step">
|
|
||||||
Step:
|
|
||||||
</FormLabel>
|
|
||||||
<SmartNumberInput
|
|
||||||
id="step"
|
|
||||||
value={options.step}
|
|
||||||
onValueChange={handleBlockChange}
|
|
||||||
/>
|
|
||||||
</HStack>
|
|
||||||
<Stack>
|
<Stack>
|
||||||
<FormLabel mb="0" htmlFor="variable">
|
<FormLabel mb="0" htmlFor="variable">
|
||||||
Save answer in a variable:
|
Save answer in a variable:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Input, SmartNumberInput } from '@/components/inputs'
|
import { Input, SmartNumberInput } from '@/components/inputs'
|
||||||
import { SwitchWithLabel } from '@/components/SwitchWithLabel'
|
import { SwitchWithLabel } from '@/components/SwitchWithLabel'
|
||||||
import { FormControl, FormLabel, HStack, Stack } from '@chakra-ui/react'
|
import { Stack } from '@chakra-ui/react'
|
||||||
import { isDefined } from '@udecode/plate-common'
|
import { isDefined } from '@udecode/plate-common'
|
||||||
import { SmtpCredentialsData } from 'models'
|
import { SmtpCredentialsData } from 'models'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
@@ -73,14 +73,14 @@ export const SmtpConfigForm = ({ config, onConfigChange }: Props) => {
|
|||||||
onCheckChange={handleTlsCheck}
|
onCheckChange={handleTlsCheck}
|
||||||
moreInfoContent="If enabled, the connection will use TLS when connecting to server. If disabled then TLS is used if server supports the STARTTLS extension. In most cases enable it if you are connecting to port 465. For port 587 or 25 keep it disabled."
|
moreInfoContent="If enabled, the connection will use TLS when connecting to server. If disabled then TLS is used if server supports the STARTTLS extension. In most cases enable it if you are connecting to port 465. For port 587 or 25 keep it disabled."
|
||||||
/>
|
/>
|
||||||
<FormControl as={HStack} justifyContent="space-between" isRequired>
|
<SmartNumberInput
|
||||||
<FormLabel mb="0">Port number:</FormLabel>
|
isRequired
|
||||||
<SmartNumberInput
|
label="Port number:"
|
||||||
placeholder="25"
|
placeholder="25"
|
||||||
value={config.port}
|
defaultValue={config.port}
|
||||||
onValueChange={handlePortNumberChange}
|
onValueChange={handlePortNumberChange}
|
||||||
/>
|
withVariableButton={false}
|
||||||
</FormControl>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ test('should be configurable', async ({ page }) => {
|
|||||||
await page.waitForTimeout(1000)
|
await page.waitForTimeout(1000)
|
||||||
await page.click('input[value="My link typebot 2"]', { clickCount: 3 })
|
await page.click('input[value="My link typebot 2"]', { clickCount: 3 })
|
||||||
await page.press('input[value="My link typebot 2"]', 'Backspace')
|
await page.press('input[value="My link typebot 2"]', 'Backspace')
|
||||||
await page.click('button >> text=My link typebot 1')
|
await page.click('button >> text=Current typebot')
|
||||||
await page.click('input[placeholder="Select a block"]', {
|
await page.click('input[placeholder="Select a block"]', {
|
||||||
clickCount: 3,
|
clickCount: 3,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -36,32 +36,24 @@ export const TypingEmulationForm = ({ typingEmulation, onUpdate }: Props) => {
|
|||||||
</Flex>
|
</Flex>
|
||||||
{typingEmulation.enabled && (
|
{typingEmulation.enabled && (
|
||||||
<Stack pl={10}>
|
<Stack pl={10}>
|
||||||
<Flex justify="space-between" align="center">
|
<SmartNumberInput
|
||||||
<FormLabel htmlFor="speed" mb="0">
|
label="Words per minutes:"
|
||||||
Words per minutes:
|
data-testid="speed"
|
||||||
</FormLabel>
|
defaultValue={typingEmulation.speed}
|
||||||
<SmartNumberInput
|
onValueChange={handleSpeedChange}
|
||||||
id="speed"
|
withVariableButton={false}
|
||||||
data-testid="speed"
|
maxW="100px"
|
||||||
value={typingEmulation.speed}
|
step={30}
|
||||||
onValueChange={handleSpeedChange}
|
/>
|
||||||
maxW="100px"
|
<SmartNumberInput
|
||||||
step={30}
|
label="Max delay (in seconds):"
|
||||||
/>
|
data-testid="max-delay"
|
||||||
</Flex>
|
defaultValue={typingEmulation.maxDelay}
|
||||||
<Flex justify="space-between" align="center">
|
onValueChange={handleMaxDelayChange}
|
||||||
<FormLabel htmlFor="max-delay" mb="0">
|
withVariableButton={false}
|
||||||
Max delay (in seconds):
|
maxW="100px"
|
||||||
</FormLabel>
|
step={0.1}
|
||||||
<SmartNumberInput
|
/>
|
||||||
id="max-delay"
|
|
||||||
data-testid="max-delay"
|
|
||||||
value={typingEmulation.maxDelay}
|
|
||||||
onValueChange={handleMaxDelayChange}
|
|
||||||
maxW="100px"
|
|
||||||
step={0.1}
|
|
||||||
/>
|
|
||||||
</Flex>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
)}
|
)}
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { deepParseVariable } from '@/features/variables'
|
import { deepParseVariable } from '@/features/variables'
|
||||||
import {
|
import {
|
||||||
|
BubbleBlock,
|
||||||
|
BubbleBlockType,
|
||||||
ChatReply,
|
ChatReply,
|
||||||
Group,
|
Group,
|
||||||
InputBlock,
|
InputBlock,
|
||||||
@@ -38,7 +40,7 @@ export const executeGroup =
|
|||||||
|
|
||||||
if (isBubbleBlock(block)) {
|
if (isBubbleBlock(block)) {
|
||||||
messages.push(
|
messages.push(
|
||||||
deepParseVariable(newSessionState.typebot.variables)(block)
|
parseBubbleBlock(newSessionState.typebot.variables)(block)
|
||||||
)
|
)
|
||||||
lastBubbleBlockId = block.id
|
lastBubbleBlockId = block.id
|
||||||
continue
|
continue
|
||||||
@@ -126,3 +128,25 @@ const getPrefilledInputValue =
|
|||||||
)?.value ?? undefined
|
)?.value ?? undefined
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const parseBubbleBlock =
|
||||||
|
(variables: SessionState['typebot']['variables']) =>
|
||||||
|
(block: BubbleBlock): ChatReply['messages'][0] => {
|
||||||
|
switch (block.type) {
|
||||||
|
case BubbleBlockType.EMBED: {
|
||||||
|
const message = deepParseVariable(variables)(block)
|
||||||
|
return {
|
||||||
|
...message,
|
||||||
|
content: {
|
||||||
|
...message.content,
|
||||||
|
height:
|
||||||
|
typeof message.content.height === 'string'
|
||||||
|
? parseFloat(message.content.height)
|
||||||
|
: message.content.height,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return deepParseVariable(variables)(block)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -26,12 +26,12 @@
|
|||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cz-emoji": "1.3.2-canary.2",
|
"cz-emoji": "1.3.2-canary.2",
|
||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
"turbo": "1.7.4"
|
"turbo": "1.8.1"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"commitizen": {
|
"commitizen": {
|
||||||
"path": "node_modules/cz-emoji"
|
"path": "node_modules/cz-emoji"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@7.25.1"
|
"packageManager": "pnpm@7.27.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,12 @@ export const EmbedBubble = ({ block, onTransitionEnd }: Props) => {
|
|||||||
}
|
}
|
||||||
}, [isLoading, isTyping, onTypingEnd])
|
}, [isLoading, isTyping, onTypingEnd])
|
||||||
|
|
||||||
|
const height = block.content.height
|
||||||
|
? typeof block.content.height === 'string'
|
||||||
|
? parseVariables(typebot.variables)(block.content.height) + 'px'
|
||||||
|
: block.content.height
|
||||||
|
: '2rem'
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col w-full" ref={messageContainer}>
|
<div className="flex flex-col w-full" ref={messageContainer}>
|
||||||
<div className="flex mb-2 w-full lg:w-11/12 items-center">
|
<div className="flex mb-2 w-full lg:w-11/12 items-center">
|
||||||
@@ -61,7 +67,7 @@ export const EmbedBubble = ({ block, onTransitionEnd }: Props) => {
|
|||||||
(isTyping ? 'opacity-0' : 'opacity-100')
|
(isTyping ? 'opacity-0' : 'opacity-100')
|
||||||
}
|
}
|
||||||
style={{
|
style={{
|
||||||
height: isTyping ? '2rem' : block.content.height,
|
height: isTyping ? '2rem' : height,
|
||||||
borderRadius: '15px',
|
borderRadius: '15px',
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { z } from 'zod'
|
import { z } from 'zod'
|
||||||
|
import { variableStringSchema } from '../../utils'
|
||||||
import { blockBaseSchema } from '../baseSchemas'
|
import { blockBaseSchema } from '../baseSchemas'
|
||||||
import { BubbleBlockType } from './enums'
|
import { BubbleBlockType } from './enums'
|
||||||
|
|
||||||
export const embedBubbleContentSchema = z.object({
|
export const embedBubbleContentSchema = z.object({
|
||||||
url: z.string().optional(),
|
url: z.string().optional(),
|
||||||
height: z.number(),
|
height: z.number().or(variableStringSchema),
|
||||||
})
|
})
|
||||||
|
|
||||||
export const embedBubbleBlockSchema = blockBaseSchema.and(
|
export const embedBubbleBlockSchema = blockBaseSchema.and(
|
||||||
|
|||||||
@@ -84,7 +84,11 @@ const audioMessageSchema = z.object({
|
|||||||
|
|
||||||
const embedMessageSchema = z.object({
|
const embedMessageSchema = z.object({
|
||||||
type: z.enum([BubbleBlockType.EMBED]),
|
type: z.enum([BubbleBlockType.EMBED]),
|
||||||
content: embedBubbleContentSchema,
|
content: embedBubbleContentSchema
|
||||||
|
.omit({
|
||||||
|
height: true,
|
||||||
|
})
|
||||||
|
.and(z.object({ height: z.number().optional() })),
|
||||||
})
|
})
|
||||||
|
|
||||||
const chatMessageSchema = z
|
const chatMessageSchema = z
|
||||||
|
|||||||
@@ -7,3 +7,9 @@ export const schemaForType =
|
|||||||
<S extends z.ZodType<T, any, any>>(arg: S) => {
|
<S extends z.ZodType<T, any, any>>(arg: S) => {
|
||||||
return arg
|
return arg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const variableStringSchema = z.custom<`{{${string}}}`>((val) =>
|
||||||
|
/^{{.+}}$/g.test(val as string)
|
||||||
|
)
|
||||||
|
|
||||||
|
export type VariableString = z.infer<typeof variableStringSchema>
|
||||||
|
|||||||
139
pnpm-lock.yaml
generated
139
pnpm-lock.yaml
generated
@@ -7,12 +7,12 @@ importers:
|
|||||||
cross-env: 7.0.3
|
cross-env: 7.0.3
|
||||||
cz-emoji: 1.3.2-canary.2
|
cz-emoji: 1.3.2-canary.2
|
||||||
husky: ^8.0.3
|
husky: ^8.0.3
|
||||||
turbo: 1.7.4
|
turbo: 1.8.1
|
||||||
devDependencies:
|
devDependencies:
|
||||||
cross-env: 7.0.3
|
cross-env: 7.0.3
|
||||||
cz-emoji: 1.3.2-canary.2
|
cz-emoji: 1.3.2-canary.2
|
||||||
husky: 8.0.3
|
husky: 8.0.3
|
||||||
turbo: 1.7.4
|
turbo: 1.8.1
|
||||||
|
|
||||||
apps/builder:
|
apps/builder:
|
||||||
specifiers:
|
specifiers:
|
||||||
@@ -570,12 +570,12 @@ importers:
|
|||||||
eslint-plugin-react: 7.32.1
|
eslint-plugin-react: 7.32.1
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 8.32.0
|
eslint: 8.32.0
|
||||||
eslint-config-next: 13.1.6_et5x32uxl7z5ldub3ye5rhlyqm
|
eslint-config-next: 13.1.6_7uibuqfxkfaozanbtbziikiqje
|
||||||
eslint-config-prettier: 8.6.0_eslint@8.32.0
|
eslint-config-prettier: 8.6.0_eslint@8.32.0
|
||||||
eslint-plugin-react: 7.32.1_eslint@8.32.0
|
eslint-plugin-react: 7.32.1_eslint@8.32.0
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@typescript-eslint/eslint-plugin': 5.50.0_insdzuwemx2bpvgu2m32dsrzvm
|
'@typescript-eslint/eslint-plugin': 5.50.0_skqhap4rvjneq2n5v2vocxqt74
|
||||||
'@typescript-eslint/parser': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/parser': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
|
|
||||||
packages/js:
|
packages/js:
|
||||||
specifiers:
|
specifiers:
|
||||||
@@ -7183,7 +7183,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/yargs-parser': 21.0.0
|
'@types/yargs-parser': 21.0.0
|
||||||
|
|
||||||
/@typescript-eslint/eslint-plugin/5.50.0_insdzuwemx2bpvgu2m32dsrzvm:
|
/@typescript-eslint/eslint-plugin/5.50.0_skqhap4rvjneq2n5v2vocxqt74:
|
||||||
resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==}
|
resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -7194,10 +7194,10 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/parser': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/parser': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
'@typescript-eslint/scope-manager': 5.50.0
|
'@typescript-eslint/scope-manager': 5.50.0
|
||||||
'@typescript-eslint/type-utils': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/type-utils': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
'@typescript-eslint/utils': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/utils': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
eslint: 8.32.0
|
eslint: 8.32.0
|
||||||
grapheme-splitter: 1.0.4
|
grapheme-splitter: 1.0.4
|
||||||
@@ -7205,13 +7205,13 @@ packages:
|
|||||||
natural-compare-lite: 1.4.0
|
natural-compare-lite: 1.4.0
|
||||||
regexpp: 3.2.0
|
regexpp: 3.2.0
|
||||||
semver: 7.3.8
|
semver: 7.3.8
|
||||||
tsutils: 3.21.0_typescript@4.9.5
|
tsutils: 3.21.0_typescript@4.9.4
|
||||||
typescript: 4.9.5
|
typescript: 4.9.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/parser/5.50.0_et5x32uxl7z5ldub3ye5rhlyqm:
|
/@typescript-eslint/parser/5.50.0_7uibuqfxkfaozanbtbziikiqje:
|
||||||
resolution: {integrity: sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==}
|
resolution: {integrity: sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -7223,10 +7223,10 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/scope-manager': 5.50.0
|
'@typescript-eslint/scope-manager': 5.50.0
|
||||||
'@typescript-eslint/types': 5.50.0
|
'@typescript-eslint/types': 5.50.0
|
||||||
'@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5
|
'@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.4
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
eslint: 8.32.0
|
eslint: 8.32.0
|
||||||
typescript: 4.9.5
|
typescript: 4.9.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -7237,7 +7237,7 @@ packages:
|
|||||||
'@typescript-eslint/types': 5.50.0
|
'@typescript-eslint/types': 5.50.0
|
||||||
'@typescript-eslint/visitor-keys': 5.50.0
|
'@typescript-eslint/visitor-keys': 5.50.0
|
||||||
|
|
||||||
/@typescript-eslint/type-utils/5.50.0_et5x32uxl7z5ldub3ye5rhlyqm:
|
/@typescript-eslint/type-utils/5.50.0_7uibuqfxkfaozanbtbziikiqje:
|
||||||
resolution: {integrity: sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==}
|
resolution: {integrity: sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -7247,12 +7247,12 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5
|
'@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.4
|
||||||
'@typescript-eslint/utils': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/utils': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
eslint: 8.32.0
|
eslint: 8.32.0
|
||||||
tsutils: 3.21.0_typescript@4.9.5
|
tsutils: 3.21.0_typescript@4.9.4
|
||||||
typescript: 4.9.5
|
typescript: 4.9.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
@@ -7280,27 +7280,6 @@ packages:
|
|||||||
typescript: 4.9.4
|
typescript: 4.9.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/typescript-estree/5.50.0_typescript@4.9.5:
|
|
||||||
resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==}
|
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 5.50.0
|
|
||||||
'@typescript-eslint/visitor-keys': 5.50.0
|
|
||||||
debug: 4.3.4
|
|
||||||
globby: 11.1.0
|
|
||||||
is-glob: 4.0.3
|
|
||||||
semver: 7.3.8
|
|
||||||
tsutils: 3.21.0_typescript@4.9.5
|
|
||||||
typescript: 4.9.5
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
/@typescript-eslint/utils/5.50.0_7uibuqfxkfaozanbtbziikiqje:
|
/@typescript-eslint/utils/5.50.0_7uibuqfxkfaozanbtbziikiqje:
|
||||||
resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==}
|
resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==}
|
||||||
@@ -7322,26 +7301,6 @@ packages:
|
|||||||
- typescript
|
- typescript
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/utils/5.50.0_et5x32uxl7z5ldub3ye5rhlyqm:
|
|
||||||
resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==}
|
|
||||||
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.13
|
|
||||||
'@typescript-eslint/scope-manager': 5.50.0
|
|
||||||
'@typescript-eslint/types': 5.50.0
|
|
||||||
'@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5
|
|
||||||
eslint: 8.32.0
|
|
||||||
eslint-scope: 5.1.1
|
|
||||||
eslint-utils: 3.0.0_eslint@8.32.0
|
|
||||||
semver: 7.3.8
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
- typescript
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/visitor-keys/5.50.0:
|
/@typescript-eslint/visitor-keys/5.50.0:
|
||||||
resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==}
|
resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
@@ -10983,7 +10942,7 @@ packages:
|
|||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/eslint-config-next/13.1.6_et5x32uxl7z5ldub3ye5rhlyqm:
|
/eslint-config-next/13.1.6_7uibuqfxkfaozanbtbziikiqje:
|
||||||
resolution: {integrity: sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==}
|
resolution: {integrity: sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^7.23.0 || ^8.0.0
|
eslint: ^7.23.0 || ^8.0.0
|
||||||
@@ -10994,7 +10953,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@next/eslint-plugin-next': 13.1.6
|
'@next/eslint-plugin-next': 13.1.6
|
||||||
'@rushstack/eslint-patch': 1.2.0
|
'@rushstack/eslint-patch': 1.2.0
|
||||||
'@typescript-eslint/parser': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/parser': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
eslint: 8.32.0
|
eslint: 8.32.0
|
||||||
eslint-import-resolver-node: 0.3.7
|
eslint-import-resolver-node: 0.3.7
|
||||||
eslint-import-resolver-typescript: 3.5.3_ps7hf4l2dvbuxvtusmrfhmzsba
|
eslint-import-resolver-typescript: 3.5.3_ps7hf4l2dvbuxvtusmrfhmzsba
|
||||||
@@ -11002,7 +10961,7 @@ packages:
|
|||||||
eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0
|
eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0
|
||||||
eslint-plugin-react: 7.32.1_eslint@8.32.0
|
eslint-plugin-react: 7.32.1_eslint@8.32.0
|
||||||
eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0
|
eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0
|
||||||
typescript: 4.9.5
|
typescript: 4.9.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -11068,7 +11027,7 @@ packages:
|
|||||||
eslint-import-resolver-webpack:
|
eslint-import-resolver-webpack:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/parser': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/parser': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
eslint: 8.32.0
|
eslint: 8.32.0
|
||||||
eslint-import-resolver-node: 0.3.7
|
eslint-import-resolver-node: 0.3.7
|
||||||
@@ -11086,7 +11045,7 @@ packages:
|
|||||||
'@typescript-eslint/parser':
|
'@typescript-eslint/parser':
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/parser': 5.50.0_et5x32uxl7z5ldub3ye5rhlyqm
|
'@typescript-eslint/parser': 5.50.0_7uibuqfxkfaozanbtbziikiqje
|
||||||
array-includes: 3.1.6
|
array-includes: 3.1.6
|
||||||
array.prototype.flat: 1.3.1
|
array.prototype.flat: 1.3.1
|
||||||
array.prototype.flatmap: 1.3.1
|
array.prototype.flatmap: 1.3.1
|
||||||
@@ -19268,16 +19227,6 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib: 1.14.1
|
tslib: 1.14.1
|
||||||
typescript: 4.9.4
|
typescript: 4.9.4
|
||||||
dev: true
|
|
||||||
|
|
||||||
/tsutils/3.21.0_typescript@4.9.5:
|
|
||||||
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
|
|
||||||
engines: {node: '>= 6'}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
|
|
||||||
dependencies:
|
|
||||||
tslib: 1.14.1
|
|
||||||
typescript: 4.9.5
|
|
||||||
|
|
||||||
/tsx/3.12.2:
|
/tsx/3.12.2:
|
||||||
resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==}
|
resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==}
|
||||||
@@ -19290,65 +19239,65 @@ packages:
|
|||||||
fsevents: 2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/turbo-darwin-64/1.7.4:
|
/turbo-darwin-64/1.8.1:
|
||||||
resolution: {integrity: sha512-ZyYrQlUl8K/mYN1e6R7bEhPPYjMakz0DYMaexkyD7TAijQtWmTSd4a+I7VknOYNEssnUZ/v41GU3gPV1JAzxxQ==}
|
resolution: {integrity: sha512-H7pxGF/vsYG7kbY+vB8h+3r8VXn2L6hhYQi0XWA+EjZ1e2zu7+TzEMRWFYmvJPx8TRo5cV5txtg0I22/Y7bxUA==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/turbo-darwin-arm64/1.7.4:
|
/turbo-darwin-arm64/1.8.1:
|
||||||
resolution: {integrity: sha512-CKIXg9uqp1a+Yeq/c4U0alPOqvwLUq5SBZf1PGYhGqJsfG0fRBtJfkUjHuBsuJIOGXg8rCmcGSWGIsIF6fqYuw==}
|
resolution: {integrity: sha512-zMcvplVGluR6v4oJXW7S1/R9QFsHdDkXMhPq8PIdvT3HwTb69ms0MNv7aKiQ0ZFy5D/eKCTyBRUFZvjorZmBqA==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/turbo-linux-64/1.7.4:
|
/turbo-linux-64/1.8.1:
|
||||||
resolution: {integrity: sha512-RIUl4RUFFyzD2T024vL7509Ygwcw+SEa8NOwPfaN6TtJHK7RZV/SBP3fLNVOptG9WRLnOWX3OvsLMbiOqDLLyA==}
|
resolution: {integrity: sha512-eJNx8iWDn5Lt8d0221RFd6lBjViLiPCVWNFF5JtqOohgRYplvepY3y/THa1GivMxY4px6zjTiy2oPE/VscVP4w==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/turbo-linux-arm64/1.7.4:
|
/turbo-linux-arm64/1.8.1:
|
||||||
resolution: {integrity: sha512-Bg65F0AjYYYxqE6RPf2H5TIGuA/EyWMeGOATHVSZOWAbYcnG3Ly03GZii8AHnUi7ntWBdjwvXf/QbOS1ayNB6A==}
|
resolution: {integrity: sha512-hFZkm8tq9kLE8tdbOzD6EbNzftdzMR4JEuuoKC6AbTzx1ZsWRvXJ/BGTeSH9/dYYm/wfuIEUiOP7HeXWiZRx7g==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/turbo-windows-64/1.7.4:
|
/turbo-windows-64/1.8.1:
|
||||||
resolution: {integrity: sha512-rTaV50XZ2BRxRHOHqt1UsWfeDmYLbn8UKE6g2D2ED+uW+kmnTvR9s01nmlGWd2sAuWcRYQyQ2V+O09VfKPKcQw==}
|
resolution: {integrity: sha512-o3oDg0lTYZl5KZD3Mi753On2vQT51unIiungoUmHDCeDH5JXfWPFu+6p+GAoIyRwQkZPvaEzMLuUtRgklKcBJw==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/turbo-windows-arm64/1.7.4:
|
/turbo-windows-arm64/1.8.1:
|
||||||
resolution: {integrity: sha512-h8sxdKPvHTnWUPtwnYszFMmSO0P/iUUwmYY9n7iYThA71zSao28UeZ0H0Gw75cY3MPjvkjn2C4EBAUGPjuZJLw==}
|
resolution: {integrity: sha512-NDYr2Mra21KOdl18BhMRoH2jQmlu+oqkpqRd+cGB8+c5P0B6LDVCM83cfcXQ+PNqX9S3Y1eZDRENZJx9I03sSw==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/turbo/1.7.4:
|
/turbo/1.8.1:
|
||||||
resolution: {integrity: sha512-8RLedDoUL0kkVKWEZ/RMM70BvKLyDFen06QuKKhYC2XNOfNKqFDqzIdcY/vGick869bNIWalChoy4O07k0HLsA==}
|
resolution: {integrity: sha512-g8RltmG5zd0nYbKpkBQwnTSXTWUiup9+yileQ1TETNzpjxI3TL5k7kt2WkgUHEqR947IPUV+ckIduZHVITJmIQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
turbo-darwin-64: 1.7.4
|
turbo-darwin-64: 1.8.1
|
||||||
turbo-darwin-arm64: 1.7.4
|
turbo-darwin-arm64: 1.8.1
|
||||||
turbo-linux-64: 1.7.4
|
turbo-linux-64: 1.8.1
|
||||||
turbo-linux-arm64: 1.7.4
|
turbo-linux-arm64: 1.8.1
|
||||||
turbo-windows-64: 1.7.4
|
turbo-windows-64: 1.8.1
|
||||||
turbo-windows-arm64: 1.7.4
|
turbo-windows-arm64: 1.8.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/type-check/0.3.2:
|
/type-check/0.3.2:
|
||||||
|
|||||||
Reference in New Issue
Block a user