Compare commits
3 Commits
feat/persi
...
fix/increm
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
09f58f18ae | ||
|
|
0a44b5b5d1 | ||
|
|
0def1d30a6 |
@@ -364,7 +364,7 @@ const Accounts: FC<AccountProps> = props => {
|
||||
<Text>{account.name} </Text>
|
||||
<Text
|
||||
css={{
|
||||
color: "$mauve9",
|
||||
color: "$textMuted",
|
||||
wordBreak: "break-word",
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -66,6 +66,12 @@ export const StyledButton = styled("button", {
|
||||
},
|
||||
},
|
||||
variant: {
|
||||
link: {
|
||||
textDecoration: "underline",
|
||||
fontSize: "inherit",
|
||||
color: "$textMuted",
|
||||
textUnderlineOffset: "2px",
|
||||
},
|
||||
default: {
|
||||
backgroundColor: "$mauve12",
|
||||
boxShadow: "inset 0 0 0 1px $colors$mauve12",
|
||||
@@ -81,8 +87,7 @@ export const StyledButton = styled("button", {
|
||||
boxShadow: "inset 0 0 0 1px $colors$mauve11",
|
||||
},
|
||||
"&:focus": {
|
||||
boxShadow:
|
||||
"inset 0 0 0 1px $colors$mauve12, inset 0 0 0 2px $colors$mauve12",
|
||||
boxShadow: "inset 0 0 0 1px $colors$mauve12, inset 0 0 0 2px $colors$mauve12",
|
||||
},
|
||||
'&[data-radix-popover-trigger][data-state="open"], &[data-radix-dropdown-menu-trigger][data-state="open"]':
|
||||
{
|
||||
@@ -137,7 +142,11 @@ export const StyledButton = styled("button", {
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
muted: {
|
||||
true: {
|
||||
color: "$textMuted",
|
||||
},
|
||||
},
|
||||
outline: {
|
||||
true: {
|
||||
backgroundColor: "transparent",
|
||||
@@ -227,21 +236,16 @@ export const StyledButton = styled("button", {
|
||||
},
|
||||
});
|
||||
|
||||
const CustomButton: React.FC<
|
||||
React.ComponentProps<typeof StyledButton> & { as?: string }
|
||||
> = React.forwardRef(({ children, as = "button", ...rest }, ref) => (
|
||||
// @ts-expect-error
|
||||
<StyledButton {...rest} ref={ref} as={as}>
|
||||
<Flex
|
||||
as="span"
|
||||
css={{ gap: "$2", alignItems: "center" }}
|
||||
className="button-content"
|
||||
>
|
||||
{children}
|
||||
</Flex>
|
||||
{rest.isLoading && <Spinner css={{ position: "absolute" }} />}
|
||||
</StyledButton>
|
||||
));
|
||||
const CustomButton: React.FC<React.ComponentProps<typeof StyledButton> & { as?: string }> =
|
||||
React.forwardRef(({ children, as = "button", ...rest }, ref) => (
|
||||
// @ts-expect-error
|
||||
<StyledButton {...rest} ref={ref} as={as}>
|
||||
<Flex as="span" css={{ gap: "$2", alignItems: "center" }} className="button-content">
|
||||
{children}
|
||||
</Flex>
|
||||
{rest.isLoading && <Spinner css={{ position: "absolute" }} />}
|
||||
</StyledButton>
|
||||
));
|
||||
|
||||
CustomButton.displayName = "CustomButton";
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import React, { useRef } from "react";
|
||||
import React, { useRef, useState } from "react";
|
||||
import { useSnapshot, ref } from "valtio";
|
||||
import Editor, { loader } from "@monaco-editor/react";
|
||||
import type monaco from "monaco-editor";
|
||||
import { useTheme } from "next-themes";
|
||||
import { useRouter } from "next/router";
|
||||
import NextLink from "next/link";
|
||||
import ReactTimeAgo from "react-time-ago";
|
||||
import filesize from "filesize";
|
||||
|
||||
import Box from "./Box";
|
||||
import Container from "./Container";
|
||||
@@ -13,8 +15,7 @@ import light from "../theme/editor/xcode_default.json";
|
||||
import state from "../state";
|
||||
|
||||
import EditorNavigation from "./EditorNavigation";
|
||||
import Text from "./Text";
|
||||
import Link from "./Link";
|
||||
import { Button, Text, Link, Flex } from ".";
|
||||
|
||||
loader.config({
|
||||
paths: {
|
||||
@@ -22,11 +23,65 @@ loader.config({
|
||||
},
|
||||
});
|
||||
|
||||
const FILESIZE_BREAKPOINTS: [number, number] = [2 * 1024, 5 * 1024];
|
||||
|
||||
const DeployEditor = () => {
|
||||
const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();
|
||||
const snap = useSnapshot(state);
|
||||
const router = useRouter();
|
||||
const { theme } = useTheme();
|
||||
|
||||
const [showContent, setShowContent] = useState(false);
|
||||
|
||||
const activeFile = snap.files[snap.active];
|
||||
const compiledSize = activeFile?.compiledContent?.byteLength || 0;
|
||||
const color =
|
||||
compiledSize > FILESIZE_BREAKPOINTS[1]
|
||||
? "$error"
|
||||
: compiledSize > FILESIZE_BREAKPOINTS[0]
|
||||
? "$warning"
|
||||
: "$success";
|
||||
|
||||
const CompiledStatView = activeFile && (
|
||||
<Flex
|
||||
column
|
||||
align="center"
|
||||
css={{
|
||||
fontSize: "$sm",
|
||||
fontFamily: "$monospace",
|
||||
textAlign: "center",
|
||||
}}
|
||||
>
|
||||
<Flex row align="center">
|
||||
<Text css={{ mr: "$1" }}>Compiled {activeFile.name.split(".")[0] + ".wasm"}</Text>
|
||||
{activeFile?.lastCompiled && <ReactTimeAgo date={activeFile.lastCompiled} locale="en-US" />}
|
||||
{activeFile.compiledContent?.byteLength && (
|
||||
<Text css={{ ml: "$2", color }}>({filesize(activeFile.compiledContent.byteLength)})</Text>
|
||||
)}
|
||||
</Flex>
|
||||
<Button variant="link" onClick={() => setShowContent(true)}>
|
||||
View as WAT-file
|
||||
</Button>
|
||||
</Flex>
|
||||
);
|
||||
const NoContentView = !snap.loading && router.isReady && (
|
||||
<Text
|
||||
css={{
|
||||
mt: "-60px",
|
||||
fontSize: "$sm",
|
||||
fontFamily: "$monospace",
|
||||
maxWidth: "300px",
|
||||
textAlign: "center",
|
||||
}}
|
||||
>
|
||||
{`You haven't compiled any files yet, compile files on `}
|
||||
<NextLink shallow href={`/develop/${router.query.slug}`} passHref>
|
||||
<Link as="a">develop view</Link>
|
||||
</NextLink>
|
||||
</Text>
|
||||
);
|
||||
const isContent =
|
||||
snap.files?.filter(file => file.compiledWatContent).length > 0 && router.isReady;
|
||||
return (
|
||||
<Box
|
||||
css={{
|
||||
@@ -39,60 +94,45 @@ const DeployEditor = () => {
|
||||
}}
|
||||
>
|
||||
<EditorNavigation showWat />
|
||||
{snap.files?.filter((file) => file.compiledWatContent).length > 0 &&
|
||||
router.isReady ? (
|
||||
<Editor
|
||||
className="hooks-editor"
|
||||
// keepCurrentModel
|
||||
defaultLanguage={snap.files?.[snap.active]?.language}
|
||||
language={snap.files?.[snap.active]?.language}
|
||||
path={`file://tmp/c/${snap.files?.[snap.active]?.name}.wat`}
|
||||
value={snap.files?.[snap.active]?.compiledWatContent || ""}
|
||||
beforeMount={(monaco) => {
|
||||
if (!state.editorCtx) {
|
||||
state.editorCtx = ref(monaco.editor);
|
||||
// @ts-expect-error
|
||||
monaco.editor.defineTheme("dark", dark);
|
||||
// @ts-expect-error
|
||||
monaco.editor.defineTheme("light", light);
|
||||
}
|
||||
}}
|
||||
onMount={(editor, monaco) => {
|
||||
editorRef.current = editor;
|
||||
editor.updateOptions({
|
||||
glyphMargin: true,
|
||||
readOnly: true,
|
||||
});
|
||||
}}
|
||||
theme={theme === "dark" ? "dark" : "light"}
|
||||
/>
|
||||
) : (
|
||||
<Container
|
||||
css={{
|
||||
display: "flex",
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
{!snap.loading && router.isReady && (
|
||||
<Text
|
||||
css={{
|
||||
mt: "-60px",
|
||||
fontSize: "14px",
|
||||
fontFamily: "$monospace",
|
||||
maxWidth: "300px",
|
||||
textAlign: "center",
|
||||
}}
|
||||
>
|
||||
{`You haven't compiled any files yet, compile files on `}
|
||||
<NextLink shallow href={`/develop/${router.query.slug}`} passHref>
|
||||
<Link as="a">develop view</Link>
|
||||
</NextLink>
|
||||
</Text>
|
||||
)}
|
||||
</Container>
|
||||
)}
|
||||
<Container
|
||||
css={{
|
||||
display: "flex",
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
{!isContent ? (
|
||||
NoContentView
|
||||
) : !showContent ? (
|
||||
CompiledStatView
|
||||
) : (
|
||||
<Editor
|
||||
className="hooks-editor"
|
||||
defaultLanguage={snap.files?.[snap.active]?.language}
|
||||
language={snap.files?.[snap.active]?.language}
|
||||
path={`file://tmp/c/${snap.files?.[snap.active]?.name}.wat`}
|
||||
value={snap.files?.[snap.active]?.compiledWatContent || ""}
|
||||
beforeMount={monaco => {
|
||||
if (!state.editorCtx) {
|
||||
state.editorCtx = ref(monaco.editor);
|
||||
// @ts-expect-error
|
||||
monaco.editor.defineTheme("dark", dark);
|
||||
// @ts-expect-error
|
||||
monaco.editor.defineTheme("light", light);
|
||||
}
|
||||
}}
|
||||
onMount={(editor, monaco) => {
|
||||
editorRef.current = editor;
|
||||
editor.updateOptions({
|
||||
glyphMargin: true,
|
||||
readOnly: true,
|
||||
});
|
||||
}}
|
||||
theme={theme === "dark" ? "dark" : "light"}
|
||||
/>
|
||||
)}
|
||||
</Container>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -62,7 +62,7 @@ import { styled } from "../stitches.config";
|
||||
const DEFAULT_EXTENSION = ".c";
|
||||
|
||||
const ErrorText = styled(Text, {
|
||||
color: "$crimson9",
|
||||
color: "$error",
|
||||
mt: "$1",
|
||||
display: "block",
|
||||
});
|
||||
|
||||
@@ -16,9 +16,37 @@ const Flex = styled(Box, {
|
||||
},
|
||||
fluid: {
|
||||
true: {
|
||||
width: '100%'
|
||||
}
|
||||
}
|
||||
width: "100%",
|
||||
},
|
||||
},
|
||||
align: {
|
||||
start: {
|
||||
alignItems: "start",
|
||||
},
|
||||
center: {
|
||||
alignItems: "center",
|
||||
},
|
||||
end: {
|
||||
alignItems: "end",
|
||||
},
|
||||
},
|
||||
justify: {
|
||||
start: {
|
||||
justifyContent: "start",
|
||||
},
|
||||
center: {
|
||||
justifyContent: "center",
|
||||
},
|
||||
end: {
|
||||
justifyContent: "end",
|
||||
},
|
||||
"space-between": {
|
||||
justifyContent: "space-between",
|
||||
},
|
||||
"space-around": {
|
||||
justifyContent: "space-around",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -11,13 +11,13 @@ const Text = styled("span", {
|
||||
color: "$text",
|
||||
},
|
||||
warning: {
|
||||
color: "$amber11",
|
||||
color: "$warning",
|
||||
},
|
||||
error: {
|
||||
color: "$crimson11",
|
||||
color: "$error",
|
||||
},
|
||||
success: {
|
||||
color: "$grass11",
|
||||
color: "$success",
|
||||
},
|
||||
},
|
||||
capitalize: {
|
||||
|
||||
@@ -19,7 +19,7 @@ import { Plus, X } from "phosphor-react";
|
||||
import { styled } from "../stitches.config";
|
||||
|
||||
const ErrorText = styled(Text, {
|
||||
color: "$crimson9",
|
||||
color: "$error",
|
||||
mt: "$1",
|
||||
display: "block",
|
||||
});
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
export { default as Flex } from './Flex'
|
||||
export { default as Container } from './Container'
|
||||
export { default as Heading } from './Heading'
|
||||
export { default as Stack } from './Stack'
|
||||
export { default as Text } from './Text'
|
||||
export { default as Input } from './Input'
|
||||
export { default as Select } from './Select'
|
||||
export * from './Tabs'
|
||||
export * from './AlertDialog'
|
||||
export { default as Box } from './Box'
|
||||
export { default as Button } from './Button'
|
||||
export { default as ButtonGroup } from './ButtonGroup'
|
||||
export { default as DeployFooter } from './DeployFooter'
|
||||
export * from './Dialog'
|
||||
export * from './DropdownMenu'
|
||||
export { default as Flex } from "./Flex";
|
||||
export { default as Link } from "./Link";
|
||||
export { default as Container } from "./Container";
|
||||
export { default as Heading } from "./Heading";
|
||||
export { default as Stack } from "./Stack";
|
||||
export { default as Text } from "./Text";
|
||||
export { default as Input } from "./Input";
|
||||
export { default as Select } from "./Select";
|
||||
export * from "./Tabs";
|
||||
export * from "./AlertDialog";
|
||||
export { default as Box } from "./Box";
|
||||
export { default as Button } from "./Button";
|
||||
export { default as ButtonGroup } from "./ButtonGroup";
|
||||
export { default as DeployFooter } from "./DeployFooter";
|
||||
export * from "./Dialog";
|
||||
export * from "./DropdownMenu";
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
"base64-js": "^1.5.1",
|
||||
"dinero.js": "^1.9.1",
|
||||
"file-saver": "^2.0.5",
|
||||
"filesize": "^8.0.7",
|
||||
"javascript-time-ago": "^2.3.11",
|
||||
"jszip": "^3.7.1",
|
||||
"monaco-editor": "^0.30.1",
|
||||
"next": "^12.0.4",
|
||||
@@ -43,6 +45,7 @@
|
||||
"react-select": "^5.2.1",
|
||||
"react-split": "^2.0.14",
|
||||
"react-stay-scrolled": "^7.4.0",
|
||||
"react-time-ago": "^7.1.9",
|
||||
"reconnecting-websocket": "^4.4.0",
|
||||
"valtio": "^1.2.5",
|
||||
"vscode-languageserver": "^7.0.0",
|
||||
|
||||
@@ -13,6 +13,10 @@ import Navigation from "../components/Navigation";
|
||||
import { fetchFiles } from "../state/actions";
|
||||
import state from "../state";
|
||||
|
||||
import TimeAgo from "javascript-time-ago";
|
||||
import en from "javascript-time-ago/locale/en.json";
|
||||
TimeAgo.addDefaultLocale(en);
|
||||
|
||||
function MyApp({ Component, pageProps: { session, ...pageProps } }: AppProps) {
|
||||
const router = useRouter();
|
||||
const slug = router.query?.slug;
|
||||
|
||||
@@ -66,6 +66,7 @@ export const compileCode = async (activeId: number) => {
|
||||
// Decode base64 encoded wasm that is coming back from the endpoint
|
||||
const bufferData = await decodeBinary(json.output);
|
||||
state.files[state.active].compiledContent = ref(bufferData);
|
||||
state.files[state.active].lastCompiled = new Date();
|
||||
// Import wabt from and create human readable version of wasm file and
|
||||
// put it into state
|
||||
import("wabt").then((wabt) => {
|
||||
|
||||
@@ -24,6 +24,10 @@ export const sendTransaction = async (account: IAccount, txOptions: TransactionO
|
||||
Fee, // TODO auto-fillable
|
||||
...opts
|
||||
};
|
||||
const currAcc = state.accounts.find(acc => acc.address === account.address);
|
||||
if (currAcc) {
|
||||
currAcc.sequence = account.sequence + 1;
|
||||
}
|
||||
const { logPrefix = '' } = options || {}
|
||||
try {
|
||||
const signedAccount = derive.familySeed(account.secret);
|
||||
|
||||
@@ -9,6 +9,7 @@ export interface IFile {
|
||||
content: string;
|
||||
compiledContent?: ArrayBuffer | null;
|
||||
compiledWatContent?: string | null;
|
||||
lastCompiled?: Date
|
||||
}
|
||||
|
||||
export interface FaucetAccountRes {
|
||||
|
||||
@@ -19,6 +19,8 @@ import {
|
||||
mauveDark,
|
||||
amberDark,
|
||||
purpleDark,
|
||||
red,
|
||||
redDark,
|
||||
} from "@radix-ui/colors";
|
||||
|
||||
export const {
|
||||
@@ -41,11 +43,16 @@ export const {
|
||||
...mauve,
|
||||
...amber,
|
||||
...purple,
|
||||
...red,
|
||||
accent: "#9D2DFF",
|
||||
background: "$gray1",
|
||||
backgroundAlt: "$gray4",
|
||||
text: "$gray12",
|
||||
textMuted: "$gray10",
|
||||
primary: "$plum",
|
||||
error: '$red9',
|
||||
warning: '$amber11',
|
||||
success: "$grass11",
|
||||
white: "white",
|
||||
black: "black",
|
||||
deep: "rgb(244, 244, 244)",
|
||||
@@ -348,6 +355,7 @@ export const darkTheme = createTheme("dark", {
|
||||
...mauveDark,
|
||||
...amberDark,
|
||||
...purpleDark,
|
||||
...redDark,
|
||||
deep: "rgb(10, 10, 10)",
|
||||
// backgroundA: transparentize(0.1, grayDark.gray1),
|
||||
},
|
||||
|
||||
38
yarn.lock
38
yarn.lock
@@ -2273,6 +2273,11 @@ file-uri-to-path@1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
|
||||
|
||||
filesize@^8.0.7:
|
||||
version "8.0.7"
|
||||
resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
|
||||
integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
@@ -2833,6 +2838,13 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
javascript-time-ago@^2.3.11:
|
||||
version "2.3.11"
|
||||
resolved "https://registry.yarnpkg.com/javascript-time-ago/-/javascript-time-ago-2.3.11.tgz#b488ae765b7f42ff003f3830977a92411ef1fe92"
|
||||
integrity sha512-R6Ux0IGv7RmAZ7vB04r/gevGaLDJeZY7+6jTYyYsPAF5x4PSv6up+dW2hLK99+OUY8xwdeXPItZFiUppIRUaoQ==
|
||||
dependencies:
|
||||
relative-time-format "^1.0.6"
|
||||
|
||||
jest-worker@27.0.0-next.5:
|
||||
version "27.0.0-next.5"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28"
|
||||
@@ -3608,6 +3620,11 @@ pbkdf2@^3.0.3, pbkdf2@^3.0.9:
|
||||
safe-buffer "^5.0.1"
|
||||
sha.js "^2.4.8"
|
||||
|
||||
performance-now@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
phosphor-react@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/phosphor-react/-/phosphor-react-1.3.1.tgz#96e33f44370d83cda15b60cccc17087ad0060684"
|
||||
@@ -3754,6 +3771,13 @@ queue@6.0.2:
|
||||
dependencies:
|
||||
inherits "~2.0.3"
|
||||
|
||||
raf@^3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
|
||||
integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
|
||||
dependencies:
|
||||
performance-now "^2.1.0"
|
||||
|
||||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||
@@ -3889,6 +3913,15 @@ react-style-singleton@^2.1.0:
|
||||
invariant "^2.2.4"
|
||||
tslib "^1.0.0"
|
||||
|
||||
react-time-ago@^7.1.9:
|
||||
version "7.1.9"
|
||||
resolved "https://registry.yarnpkg.com/react-time-ago/-/react-time-ago-7.1.9.tgz#df3999f1184b71ab09aaf1d05dda2a19b76e0bb8"
|
||||
integrity sha512-jN4EsEgqm3a5eLJV0ZrRpom3iG+w4bullS2NHc2htIucGUIr2FbgHXjU0wIkuN9uWM87aFvIfkUDpS/ju7Mazg==
|
||||
dependencies:
|
||||
memoize-one "^6.0.0"
|
||||
prop-types "^15.7.2"
|
||||
raf "^3.4.1"
|
||||
|
||||
react-transition-group@^4.3.0:
|
||||
version "4.4.2"
|
||||
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
|
||||
@@ -3969,6 +4002,11 @@ regexpp@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
|
||||
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
|
||||
|
||||
relative-time-format@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/relative-time-format/-/relative-time-format-1.0.6.tgz#4956f6aa161f63cbab8a7f2d8b2e92d7b6a888a3"
|
||||
integrity sha512-voemOJLxlKun4P1fAo4PEg2WXNGjhqfE/G8Xen4gcy24Hyu/djn5bT5axmhx4MnjynoZ8f0HCOjk3RZpsY6X/g==
|
||||
|
||||
require-from-string@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
|
||||
|
||||
Reference in New Issue
Block a user