many breaking changes/fixes
|
@ -15,7 +15,10 @@ export default function ({ collection }: { collection: Collection }) {
|
||||||
<div className="p-5 bg-gray-100 h-40 w-60 rounded-md border-sky-100 border-solid border flex flex-col justify-between cursor-pointer hover:bg-gray-50 duration-100">
|
<div className="p-5 bg-gray-100 h-40 w-60 rounded-md border-sky-100 border-solid border flex flex-col justify-between cursor-pointer hover:bg-gray-50 duration-100">
|
||||||
<div className="flex justify-between text-sky-900 items-center">
|
<div className="flex justify-between text-sky-900 items-center">
|
||||||
<p className="text-lg w-max">{collection.name}</p>
|
<p className="text-lg w-max">{collection.name}</p>
|
||||||
<FontAwesomeIcon icon={faChevronRight} className="w-3" />
|
<FontAwesomeIcon
|
||||||
|
icon={faChevronRight}
|
||||||
|
className="w-3 h-3 text-gray-500"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-sm text-sky-300 font-bold">{formattedDate}</p>
|
<p className="text-sm text-sky-300 font-bold">{formattedDate}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,7 +5,17 @@ import CreatableSelect from "react-select/creatable";
|
||||||
import { styles } from "./styles";
|
import { styles } from "./styles";
|
||||||
import { Options } from "./types";
|
import { Options } from "./types";
|
||||||
|
|
||||||
export default function ({ onChange }: any) {
|
type Props = {
|
||||||
|
onChange: any;
|
||||||
|
defaultValue:
|
||||||
|
| {
|
||||||
|
value: number;
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
|
| undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function ({ onChange, defaultValue }: Props) {
|
||||||
const { collections } = useCollectionStore();
|
const { collections } = useCollectionStore();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
|
@ -17,10 +27,8 @@ export default function ({ onChange }: any) {
|
||||||
return e.id === collectionId;
|
return e.id === collectionId;
|
||||||
});
|
});
|
||||||
|
|
||||||
let defaultCollection = null;
|
if (activeCollection && !defaultValue) {
|
||||||
|
defaultValue = {
|
||||||
if (activeCollection) {
|
|
||||||
defaultCollection = {
|
|
||||||
value: activeCollection?.id,
|
value: activeCollection?.id,
|
||||||
label: activeCollection?.name,
|
label: activeCollection?.name,
|
||||||
};
|
};
|
||||||
|
@ -28,7 +36,7 @@ export default function ({ onChange }: any) {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const formatedCollections = collections.map((e) => {
|
const formatedCollections = collections.map((e) => {
|
||||||
return { value: e.id, label: e.name };
|
return { value: e.id, label: e.name, ownerId: e.ownerId };
|
||||||
});
|
});
|
||||||
|
|
||||||
setOptions(formatedCollections);
|
setOptions(formatedCollections);
|
||||||
|
@ -40,7 +48,7 @@ export default function ({ onChange }: any) {
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
options={options}
|
options={options}
|
||||||
styles={styles}
|
styles={styles}
|
||||||
defaultValue={defaultCollection}
|
defaultValue={defaultValue}
|
||||||
menuPosition="fixed"
|
menuPosition="fixed"
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,7 +4,15 @@ import CreatableSelect from "react-select/creatable";
|
||||||
import { styles } from "./styles";
|
import { styles } from "./styles";
|
||||||
import { Options } from "./types";
|
import { Options } from "./types";
|
||||||
|
|
||||||
export default function ({ onChange }: any) {
|
type Props = {
|
||||||
|
onChange: any;
|
||||||
|
defaultValue?: {
|
||||||
|
value: number;
|
||||||
|
label: string;
|
||||||
|
}[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function ({ onChange, defaultValue }: Props) {
|
||||||
const { tags } = useTagStore();
|
const { tags } = useTagStore();
|
||||||
|
|
||||||
const [options, setOptions] = useState<Options[]>([]);
|
const [options, setOptions] = useState<Options[]>([]);
|
||||||
|
@ -23,6 +31,7 @@ export default function ({ onChange }: any) {
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
options={options}
|
options={options}
|
||||||
styles={styles}
|
styles={styles}
|
||||||
|
defaultValue={defaultValue}
|
||||||
menuPosition="fixed"
|
menuPosition="fixed"
|
||||||
isMulti
|
isMulti
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -3,17 +3,17 @@ import {
|
||||||
faFolder,
|
faFolder,
|
||||||
faArrowUpRightFromSquare,
|
faArrowUpRightFromSquare,
|
||||||
faEllipsis,
|
faEllipsis,
|
||||||
faStar,
|
|
||||||
faPenToSquare,
|
faPenToSquare,
|
||||||
faTrashCan,
|
faTrashCan,
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
import { faFileImage, faFilePdf } from "@fortawesome/free-regular-svg-icons";
|
import { faFileImage, faFilePdf } from "@fortawesome/free-regular-svg-icons";
|
||||||
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Dropdown from "./Dropdown";
|
import Dropdown from "./Dropdown";
|
||||||
import useLinkStore from "@/store/links";
|
import useLinkStore from "@/store/links";
|
||||||
|
import Modal from "./Modal";
|
||||||
|
import EditLink from "./Modal/EditLink";
|
||||||
|
|
||||||
export default function ({
|
export default function ({
|
||||||
link,
|
link,
|
||||||
|
@ -23,6 +23,7 @@ export default function ({
|
||||||
count: number;
|
count: number;
|
||||||
}) {
|
}) {
|
||||||
const [editDropdown, setEditDropdown] = useState(false);
|
const [editDropdown, setEditDropdown] = useState(false);
|
||||||
|
const [editModal, setEditModal] = useState(false);
|
||||||
const [archiveLabel, setArchiveLabel] = useState("Archived Formats");
|
const [archiveLabel, setArchiveLabel] = useState("Archived Formats");
|
||||||
|
|
||||||
const { removeLink } = useLinkStore();
|
const { removeLink } = useLinkStore();
|
||||||
|
@ -34,14 +35,24 @@ export default function ({
|
||||||
day: "numeric",
|
day: "numeric",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const toggleEditModal = () => {
|
||||||
|
setEditModal(!editModal);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx-auto border border-sky-100 mb-5 bg-gray-100 p-2 rounded-md flex items-start relative gap-5 group/item">
|
<div className="border border-sky-100 bg-gray-100 p-5 rounded-md flex items-start relative gap-5 sm:gap-14 group/item">
|
||||||
|
{editModal ? (
|
||||||
|
<Modal toggleModal={toggleEditModal}>
|
||||||
|
<EditLink toggleLinkModal={toggleEditModal} link={link} />
|
||||||
|
</Modal>
|
||||||
|
) : null}
|
||||||
|
|
||||||
<Image
|
<Image
|
||||||
src={`http://icons.duckduckgo.com/ip3/${shortendURL}.ico`}
|
src={`http://icons.duckduckgo.com/ip3/${shortendURL}.ico`}
|
||||||
width={32}
|
width={32}
|
||||||
height={32}
|
height={32}
|
||||||
alt=""
|
alt=""
|
||||||
className="opacity-100 duration-100 select-none mt-3"
|
className="select-none mt-3 z-10 rounded-md"
|
||||||
draggable="false"
|
draggable="false"
|
||||||
onError={(e) => {
|
onError={(e) => {
|
||||||
const target = e.target as HTMLElement;
|
const target = e.target as HTMLElement;
|
||||||
|
@ -53,7 +64,7 @@ export default function ({
|
||||||
width={80}
|
width={80}
|
||||||
height={80}
|
height={80}
|
||||||
alt=""
|
alt=""
|
||||||
className="blur-sm absolute left-0 opacity-50 select-none"
|
className="blur-sm absolute left-2 opacity-50 select-none hidden sm:block"
|
||||||
draggable="false"
|
draggable="false"
|
||||||
onError={(e) => {
|
onError={(e) => {
|
||||||
const target = e.target as HTMLElement;
|
const target = e.target as HTMLElement;
|
||||||
|
@ -65,9 +76,6 @@ export default function ({
|
||||||
<div className="flex items-baseline gap-1">
|
<div className="flex items-baseline gap-1">
|
||||||
<p className="text-sm text-sky-300 font-bold">{count + 1}.</p>
|
<p className="text-sm text-sky-300 font-bold">{count + 1}.</p>
|
||||||
<p className="text-lg text-sky-600">{link.name}</p>
|
<p className="text-lg text-sky-600">{link.name}</p>
|
||||||
{link.starred ? (
|
|
||||||
<FontAwesomeIcon icon={faStar} className="w-3 text-amber-400" />
|
|
||||||
) : null}
|
|
||||||
</div>
|
</div>
|
||||||
<p className="text-sky-400 text-sm font-medium">{link.title}</p>
|
<p className="text-sky-400 text-sm font-medium">{link.title}</p>
|
||||||
<div className="flex gap-3 items-center flex-wrap my-3">
|
<div className="flex gap-3 items-center flex-wrap my-3">
|
||||||
|
@ -101,20 +109,25 @@ export default function ({
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex flex-col justify-between items-end relative">
|
<div className="flex flex-col justify-between items-end relative">
|
||||||
<FontAwesomeIcon
|
<div
|
||||||
icon={faEllipsis}
|
|
||||||
title="More"
|
|
||||||
className="w-6 h-6 text-gray-500 rounded-md cursor-pointer hover:bg-white hover:outline outline-sky-100 outline-1 duration-100 p-1"
|
|
||||||
onClick={() => setEditDropdown(!editDropdown)}
|
onClick={() => setEditDropdown(!editDropdown)}
|
||||||
id="edit-dropdown"
|
id="edit-dropdown"
|
||||||
/>
|
className="text-gray-500 inline-flex rounded-md cursor-pointer hover:bg-white hover:outline outline-sky-100 outline-1 duration-100 p-1"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon
|
||||||
|
icon={faEllipsis}
|
||||||
|
title="More"
|
||||||
|
className="w-6 h-6"
|
||||||
|
id="edit-dropdown"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p className="text-center text-sky-400 text-sm font-bold">
|
<p className="text-center text-sky-400 text-sm font-bold">
|
||||||
{archiveLabel}
|
{archiveLabel}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
className="flex justify-between mt-3 gap-3"
|
className="flex justify-center mt-3 gap-3"
|
||||||
onMouseLeave={() => setArchiveLabel("Archived Formats")}
|
onMouseLeave={() => setArchiveLabel("Archived Formats")}
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
|
@ -152,25 +165,28 @@ export default function ({
|
||||||
{editDropdown ? (
|
{editDropdown ? (
|
||||||
<Dropdown
|
<Dropdown
|
||||||
items={[
|
items={[
|
||||||
{
|
|
||||||
name: "Star",
|
|
||||||
icon: <FontAwesomeIcon icon={faStar} />,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "Edit",
|
name: "Edit",
|
||||||
icon: <FontAwesomeIcon icon={faPenToSquare} />,
|
icon: <FontAwesomeIcon icon={faPenToSquare} />,
|
||||||
|
onClick: () => {
|
||||||
|
setEditModal(true);
|
||||||
|
setEditDropdown(false);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Delete",
|
name: "Delete",
|
||||||
icon: <FontAwesomeIcon icon={faTrashCan} />,
|
icon: <FontAwesomeIcon icon={faTrashCan} />,
|
||||||
onClick: () => removeLink(link),
|
onClick: () => {
|
||||||
|
removeLink(link);
|
||||||
|
setEditDropdown(false);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
onClickOutside={(e: Event) => {
|
onClickOutside={(e: Event) => {
|
||||||
const target = e.target as HTMLInputElement;
|
const target = e.target as HTMLInputElement;
|
||||||
if (target.id !== "edit-dropdown") setEditDropdown(false);
|
if (target.id !== "edit-dropdown") setEditDropdown(false);
|
||||||
}}
|
}}
|
||||||
className="absolute top-8 right-0"
|
className="absolute top-9 right-0"
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,46 +1,76 @@
|
||||||
import React, { useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import CollectionSelection from "./InputSelect/CollectionSelection";
|
import CollectionSelection from "@/components/InputSelect/CollectionSelection";
|
||||||
import TagSelection from "./InputSelect/TagSelection";
|
import TagSelection from "@/components/InputSelect/TagSelection";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { faPlus } from "@fortawesome/free-solid-svg-icons";
|
import { faPlus } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { useRouter } from "next/router";
|
import { ExtendedLink, NewLink } from "@/types/global";
|
||||||
import { NewLink } from "@/types/global";
|
|
||||||
import useLinkStore from "@/store/links";
|
import useLinkStore from "@/store/links";
|
||||||
|
import { useRouter } from "next/router";
|
||||||
|
import useCollectionStore from "@/store/collections";
|
||||||
|
|
||||||
export default function ({ toggleLinkModal }: { toggleLinkModal: Function }) {
|
type Props = {
|
||||||
|
toggleLinkModal: Function;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function AddLink({ toggleLinkModal }: Props) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const [newLink, setNewLink] = useState<NewLink>({
|
const [newLink, setNewLink] = useState<NewLink>({
|
||||||
name: "",
|
name: "",
|
||||||
url: "",
|
url: "",
|
||||||
tags: [],
|
tags: [],
|
||||||
collection: { id: Number(router.query.id) },
|
collection: {
|
||||||
|
id: undefined,
|
||||||
|
name: "",
|
||||||
|
ownerId: undefined,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const { addLink } = useLinkStore();
|
const { addLink } = useLinkStore();
|
||||||
|
const { collections } = useCollectionStore();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (router.query.id) {
|
||||||
|
const currentCollection = collections.find(
|
||||||
|
(e) => e.id == Number(router.query.id)
|
||||||
|
);
|
||||||
|
|
||||||
|
setNewLink({
|
||||||
|
...newLink,
|
||||||
|
collection: {
|
||||||
|
id: currentCollection?.id,
|
||||||
|
name: currentCollection?.name,
|
||||||
|
ownerId: currentCollection?.ownerId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
const setTags = (e: any) => {
|
const setTags = (e: any) => {
|
||||||
const tagNames = e.map((e: any) => {
|
const tagNames = e.map((e: any) => {
|
||||||
return e.label;
|
return { name: e.label };
|
||||||
});
|
});
|
||||||
|
|
||||||
setNewLink({ ...newLink, tags: tagNames });
|
setNewLink({ ...newLink, tags: tagNames });
|
||||||
};
|
};
|
||||||
|
|
||||||
const setCollection = (e: any) => {
|
const setCollection = (e: any) => {
|
||||||
const collection = { id: e?.value, isNew: e?.__isNew__ };
|
if (e?.__isNew__) e.value = null;
|
||||||
|
|
||||||
setNewLink({ ...newLink, collection: collection });
|
setNewLink({
|
||||||
|
...newLink,
|
||||||
|
collection: { id: e?.value, name: e?.label, ownerId: e?.ownerId },
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const submitLink = async () => {
|
const submitLink = async () => {
|
||||||
const response = await addLink(newLink);
|
console.log(newLink);
|
||||||
|
|
||||||
|
const response = await addLink(newLink as ExtendedLink);
|
||||||
|
|
||||||
if (response) toggleLinkModal();
|
if (response) toggleLinkModal();
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="slide-up border-sky-100 rounded-md border-solid border rounded-md-md shadow-lg p-5 bg-white flex flex-col gap-3">
|
<div className="flex flex-col gap-3">
|
||||||
<p className="font-bold text-sky-300 mb-2 text-center">New Link</p>
|
<p className="font-bold text-sky-300 mb-2 text-center">New Link</p>
|
||||||
|
|
||||||
<div className="flex gap-5 items-center justify-between">
|
<div className="flex gap-5 items-center justify-between">
|
||||||
|
@ -72,7 +102,14 @@ export default function ({ toggleLinkModal }: { toggleLinkModal: Function }) {
|
||||||
|
|
||||||
<div className="flex gap-5 items-center justify-between">
|
<div className="flex gap-5 items-center justify-between">
|
||||||
<p className="text-sm font-bold text-sky-300">Collection</p>
|
<p className="text-sm font-bold text-sky-300">Collection</p>
|
||||||
<CollectionSelection onChange={setCollection} />
|
<CollectionSelection
|
||||||
|
defaultValue={
|
||||||
|
newLink.collection.name && newLink.collection.id
|
||||||
|
? { value: newLink.collection.id, label: newLink.collection.name }
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
onChange={setCollection}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
|
@ -0,0 +1,101 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import CollectionSelection from "@/components/InputSelect/CollectionSelection";
|
||||||
|
import TagSelection from "@/components/InputSelect/TagSelection";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { ExtendedLink } from "@/types/global";
|
||||||
|
import { faPenToSquare } from "@fortawesome/free-regular-svg-icons";
|
||||||
|
import useLinkStore from "@/store/links";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
toggleLinkModal: Function;
|
||||||
|
link: ExtendedLink;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function EditLink({ toggleLinkModal, link }: Props) {
|
||||||
|
const [currentLink, setCurrentLink] = useState<ExtendedLink>(link);
|
||||||
|
|
||||||
|
const { updateLink } = useLinkStore();
|
||||||
|
|
||||||
|
const setTags = (e: any) => {
|
||||||
|
const tagNames = e.map((e: any) => {
|
||||||
|
return { name: e.label };
|
||||||
|
});
|
||||||
|
|
||||||
|
setCurrentLink({ ...currentLink, tags: tagNames });
|
||||||
|
};
|
||||||
|
|
||||||
|
const setCollection = (e: any) => {
|
||||||
|
if (e?.__isNew__) e.value = null;
|
||||||
|
|
||||||
|
setCurrentLink({
|
||||||
|
...currentLink,
|
||||||
|
collection: { id: e?.value, name: e?.label, ownerId: e?.ownerId } as any,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const submitLink = async () => {
|
||||||
|
updateLink(currentLink);
|
||||||
|
toggleLinkModal();
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex flex-col gap-3">
|
||||||
|
<p className="font-bold text-sky-300 mb-2 text-center">New Link</p>
|
||||||
|
|
||||||
|
<div className="flex gap-5 items-center justify-between">
|
||||||
|
<p className="text-sm font-bold text-sky-300">Name</p>
|
||||||
|
<input
|
||||||
|
value={currentLink.name}
|
||||||
|
onChange={(e) =>
|
||||||
|
setCurrentLink({ ...currentLink, name: e.target.value })
|
||||||
|
}
|
||||||
|
type="text"
|
||||||
|
placeholder="e.g. Example Link"
|
||||||
|
className="w-60 rounded-md p-3 border-sky-100 border-solid border text-sm outline-none focus:border-sky-500 duration-100"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex gap-5 items-center justify-between">
|
||||||
|
<p className="text-sm font-bold text-sky-300">URL</p>
|
||||||
|
<input
|
||||||
|
value={currentLink.url}
|
||||||
|
onChange={(e) =>
|
||||||
|
setCurrentLink({ ...currentLink, url: e.target.value })
|
||||||
|
}
|
||||||
|
type="text"
|
||||||
|
placeholder="e.g. http://example.com/"
|
||||||
|
className="w-60 rounded-md p-3 border-sky-100 border-solid border text-sm outline-none focus:border-sky-500 duration-100"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex gap-5 items-center justify-between">
|
||||||
|
<p className="text-sm font-bold text-sky-300">Tags</p>
|
||||||
|
<TagSelection
|
||||||
|
onChange={setTags}
|
||||||
|
defaultValue={link.tags.map((e) => {
|
||||||
|
return { label: e.name, value: e.id };
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex gap-5 items-center justify-between">
|
||||||
|
<p className="text-sm font-bold text-sky-300">Collection</p>
|
||||||
|
<CollectionSelection
|
||||||
|
onChange={setCollection}
|
||||||
|
defaultValue={{
|
||||||
|
label: link.collection.name,
|
||||||
|
value: link.collection.id,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className="mx-auto mt-2 bg-sky-500 text-white flex items-center gap-2 py-2 px-5 rounded-md select-none font-bold cursor-pointer duration-100 hover:bg-sky-400"
|
||||||
|
onClick={submitLink}
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon icon={faPenToSquare} className="h-5" />
|
||||||
|
Edit Link
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { ReactNode } from "react";
|
||||||
|
import ClickAwayHandler from "@/components/ClickAwayHandler";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
toggleModal: Function;
|
||||||
|
children: ReactNode;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function ({ toggleModal, children }: Props) {
|
||||||
|
return (
|
||||||
|
<div className="fixed top-0 bottom-0 right-0 left-0 bg-gray-500 bg-opacity-10 flex items-center fade-in z-30">
|
||||||
|
<ClickAwayHandler onClickOutside={toggleModal} className="w-fit mx-auto">
|
||||||
|
<div className="slide-up border-sky-100 rounded-md border-solid border shadow-lg p-5 bg-white">
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
</ClickAwayHandler>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,62 +1,25 @@
|
||||||
import { useRouter } from "next/router";
|
|
||||||
import useCollectionStore from "@/store/collections";
|
|
||||||
import { Collection, Tag } from "@prisma/client";
|
|
||||||
import ClickAwayHandler from "./ClickAwayHandler";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { signOut } from "next-auth/react";
|
||||||
|
import { useSession } from "next-auth/react";
|
||||||
import {
|
import {
|
||||||
faPlus,
|
faPlus,
|
||||||
faFolder,
|
|
||||||
faBox,
|
|
||||||
faHashtag,
|
|
||||||
faBookmark,
|
|
||||||
faMagnifyingGlass,
|
faMagnifyingGlass,
|
||||||
IconDefinition,
|
faCircleUser,
|
||||||
|
faSliders,
|
||||||
|
faArrowRightFromBracket,
|
||||||
|
faChevronDown,
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
import { useEffect, useState } from "react";
|
import { useState } from "react";
|
||||||
import AddLinkModal from "./AddLinkModal";
|
import Dropdown from "@/components/Dropdown";
|
||||||
import useTagStore from "@/store/tags";
|
import Modal from "./Modal";
|
||||||
|
import AddLink from "./Modal/AddLink";
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
const router = useRouter();
|
const { data: session } = useSession();
|
||||||
const [pageName, setPageName] = useState<string | null>("");
|
|
||||||
const [pageIcon, setPageIcon] = useState<IconDefinition | null>(null);
|
|
||||||
|
|
||||||
const { collections } = useCollectionStore();
|
const [profileDropdown, setProfileDropdown] = useState(false);
|
||||||
const { tags } = useTagStore();
|
|
||||||
|
|
||||||
useEffect(() => {
|
const user = session?.user;
|
||||||
if (router.route === "/collections/[id]") {
|
|
||||||
const collectionId = router.query.id;
|
|
||||||
|
|
||||||
const activeCollection: Collection | undefined = collections.find(
|
|
||||||
(e) => e.id.toString() == collectionId
|
|
||||||
);
|
|
||||||
|
|
||||||
if (activeCollection) {
|
|
||||||
setPageName(activeCollection?.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
setPageIcon(faFolder);
|
|
||||||
} else if (router.route === "/tags/[id]") {
|
|
||||||
const tagId = router.query.id;
|
|
||||||
|
|
||||||
const activeTag: Tag | undefined = tags.find(
|
|
||||||
(e) => e.id.toString() == tagId
|
|
||||||
);
|
|
||||||
|
|
||||||
if (activeTag) {
|
|
||||||
setPageName(activeTag?.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
setPageIcon(faHashtag);
|
|
||||||
} else if (router.route === "/collections") {
|
|
||||||
setPageName("All Collections");
|
|
||||||
setPageIcon(faBox);
|
|
||||||
} else if (router.route === "/links") {
|
|
||||||
setPageName("All Links");
|
|
||||||
setPageIcon(faBookmark);
|
|
||||||
}
|
|
||||||
}, [router, collections, tags]);
|
|
||||||
|
|
||||||
const [linkModal, setLinkModal] = useState(false);
|
const [linkModal, setLinkModal] = useState(false);
|
||||||
|
|
||||||
|
@ -65,50 +28,75 @@ export default function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex justify-between items-center p-2 border-solid border-b-sky-100 border-b">
|
<div className="flex justify-between gap-2 items-center px-5 py-2 border-solid border-b-sky-100 border-b">
|
||||||
<div className="text-sky-900 rounded-md my-1 flex items-center gap-2 font-bold">
|
<div className="flex items-center relative">
|
||||||
{pageIcon ? (
|
<label
|
||||||
<FontAwesomeIcon icon={pageIcon} className="w-4 text-sky-300" />
|
htmlFor="search-box"
|
||||||
) : null}
|
className="inline-flex w-fit absolute right-0 cursor-pointer select-none rounded-md p-1 text-sky-500"
|
||||||
<p>{pageName}</p>
|
>
|
||||||
|
<FontAwesomeIcon icon={faMagnifyingGlass} className="w-5 h-5" />
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="search-box"
|
||||||
|
type="text"
|
||||||
|
placeholder="Search for Links"
|
||||||
|
className="border border-sky-100 rounded-md pr-6 w-60 focus:border-sky-500 sm:focus:w-80 hover:border-sky-500 duration-100 outline-none p-1 text-sm"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
<div className="flex items-center gap-2 justify-between">
|
<div
|
||||||
<div className="flex items-center relative">
|
|
||||||
<label
|
|
||||||
htmlFor="search-box"
|
|
||||||
className="inline-flex w-fit absolute right-0 cursor-pointer"
|
|
||||||
title="Search"
|
|
||||||
>
|
|
||||||
<FontAwesomeIcon
|
|
||||||
icon={faMagnifyingGlass}
|
|
||||||
className="select-none w-5 h-5 rounded-md p-1 text-sky-500 "
|
|
||||||
/>
|
|
||||||
</label>
|
|
||||||
<input
|
|
||||||
id="search-box"
|
|
||||||
type="text"
|
|
||||||
placeholder="Search for Links"
|
|
||||||
className="border border-sky-100 rounded-md pr-6 w-6 focus:border-sky-500 focus:w-60 hover:border-sky-500 duration-100 outline-none p-1 text-sm"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<FontAwesomeIcon
|
|
||||||
icon={faPlus}
|
|
||||||
onClick={toggleLinkModal}
|
onClick={toggleLinkModal}
|
||||||
title="New Link"
|
title="New Link"
|
||||||
className="select-none cursor-pointer w-5 h-5 text-sky-500 p-1 rounded-md hover:outline-sky-500 outline duration-100 hover:bg-white outline-sky-100 outline-1"
|
className="inline-flex gap-1 items-center select-none cursor-pointer p-1 text-sky-500 rounded-md hover:outline-sky-500 outline duration-100 bg-white outline-sky-100 outline-1"
|
||||||
/>
|
>
|
||||||
|
<FontAwesomeIcon icon={faPlus} className="w-5 h-5" />
|
||||||
|
</div>
|
||||||
|
|
||||||
{linkModal ? (
|
{linkModal ? (
|
||||||
<div className="fixed top-0 bottom-0 right-0 left-0 bg-gray-500 bg-opacity-10 flex items-center fade-in z-10">
|
<Modal toggleModal={toggleLinkModal}>
|
||||||
<ClickAwayHandler
|
<AddLink toggleLinkModal={toggleLinkModal} />
|
||||||
onClickOutside={toggleLinkModal}
|
</Modal>
|
||||||
className="w-fit mx-auto"
|
|
||||||
>
|
|
||||||
<AddLinkModal toggleLinkModal={toggleLinkModal} />
|
|
||||||
</ClickAwayHandler>
|
|
||||||
</div>
|
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
|
<div className="relative">
|
||||||
|
<div
|
||||||
|
className="flex gap-2 items-center p-1 w-fit bg-white text-gray-600 cursor-pointer border border-sky-100 hover:border-sky-500 rounded-md duration-100"
|
||||||
|
onClick={() => setProfileDropdown(!profileDropdown)}
|
||||||
|
id="profile-dropdown"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon
|
||||||
|
icon={faCircleUser}
|
||||||
|
className="h-5 w-5 pointer-events-none"
|
||||||
|
/>
|
||||||
|
<div className="flex items-center gap-1 pointer-events-none">
|
||||||
|
<p className="font-bold leading-3">{user?.name}</p>
|
||||||
|
<FontAwesomeIcon icon={faChevronDown} className="h-3 w-3" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{profileDropdown ? (
|
||||||
|
<Dropdown
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
name: "Settings",
|
||||||
|
icon: <FontAwesomeIcon icon={faSliders} />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Logout",
|
||||||
|
icon: <FontAwesomeIcon icon={faArrowRightFromBracket} />,
|
||||||
|
onClick: () => {
|
||||||
|
signOut();
|
||||||
|
setProfileDropdown(!profileDropdown);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
onClickOutside={(e: Event) => {
|
||||||
|
const target = e.target as HTMLInputElement;
|
||||||
|
if (target.id !== "profile-dropdown") setProfileDropdown(false);
|
||||||
|
}}
|
||||||
|
className="absolute top-8 right-0 z-20"
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,37 +1,25 @@
|
||||||
import { useSession } from "next-auth/react";
|
|
||||||
import ClickAwayHandler from "@/components/ClickAwayHandler";
|
import ClickAwayHandler from "@/components/ClickAwayHandler";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import useCollectionStore from "@/store/collections";
|
import useCollectionStore from "@/store/collections";
|
||||||
import { signOut } from "next-auth/react";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import {
|
import {
|
||||||
faPlus,
|
faPlus,
|
||||||
faChevronDown,
|
|
||||||
faFolder,
|
faFolder,
|
||||||
faBox,
|
faBox,
|
||||||
faHashtag,
|
faHashtag,
|
||||||
faBookmark,
|
faBookmark,
|
||||||
faCircleUser,
|
|
||||||
faSliders,
|
|
||||||
faArrowRightFromBracket,
|
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
import SidebarItem from "./SidebarItem";
|
import SidebarItem from "./SidebarItem";
|
||||||
import useTagStore from "@/store/tags";
|
import useTagStore from "@/store/tags";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import Dropdown from "@/components/Dropdown";
|
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
const { data: session } = useSession();
|
|
||||||
|
|
||||||
const [collectionInput, setCollectionInput] = useState(false);
|
const [collectionInput, setCollectionInput] = useState(false);
|
||||||
const [profileDropdown, setProfileDropdown] = useState(false);
|
|
||||||
|
|
||||||
const { collections, addCollection } = useCollectionStore();
|
const { collections, addCollection } = useCollectionStore();
|
||||||
|
|
||||||
const { tags } = useTagStore();
|
const { tags } = useTagStore();
|
||||||
|
|
||||||
const user = session?.user;
|
|
||||||
|
|
||||||
const toggleCollectionInput = () => {
|
const toggleCollectionInput = () => {
|
||||||
setCollectionInput(!collectionInput);
|
setCollectionInput(!collectionInput);
|
||||||
};
|
};
|
||||||
|
@ -48,48 +36,12 @@ export default function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="fixed bg-gray-100 top-0 bottom-0 left-0 w-80 p-2 overflow-y-auto hide-scrollbar border-solid border-r-sky-100 border z-10">
|
<div className="fixed bg-gray-100 top-0 bottom-0 left-0 w-80 p-2 overflow-y-auto hide-scrollbar border-solid border-r-sky-100 border z-20">
|
||||||
<div className="relative w-fit">
|
<p className="p-2 text-sky-500 font-bold text-xl mb-5 leading-4">
|
||||||
<div
|
Linkwarden
|
||||||
className="flex gap-2 items-center mb-5 p-2 w-fit text-gray-600 cursor-pointer hover:outline outline-sky-100 outline-1 hover:bg-gray-50 rounded-md duration-100"
|
</p>
|
||||||
onClick={() => setProfileDropdown(!profileDropdown)}
|
|
||||||
id="profile-dropdown"
|
|
||||||
>
|
|
||||||
<FontAwesomeIcon
|
|
||||||
icon={faCircleUser}
|
|
||||||
className="h-5 pointer-events-none"
|
|
||||||
/>
|
|
||||||
<div className="flex items-center gap-1 pointer-events-none">
|
|
||||||
<p className="font-bold">{user?.name}</p>
|
|
||||||
<FontAwesomeIcon icon={faChevronDown} className="h-3" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{profileDropdown ? (
|
|
||||||
<Dropdown
|
|
||||||
items={[
|
|
||||||
{
|
|
||||||
name: "Settings",
|
|
||||||
icon: <FontAwesomeIcon icon={faSliders} />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Logout",
|
|
||||||
icon: <FontAwesomeIcon icon={faArrowRightFromBracket} />,
|
|
||||||
onClick: () => {
|
|
||||||
signOut();
|
|
||||||
setProfileDropdown(!profileDropdown);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
onClickOutside={(e: Event) => {
|
|
||||||
const target = e.target as HTMLInputElement;
|
|
||||||
if (target.id !== "profile-dropdown") setProfileDropdown(false);
|
|
||||||
}}
|
|
||||||
className="absolute top-10 left-0"
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Link href="links">
|
<Link href="/links">
|
||||||
<div className="hover:bg-gray-50 hover:outline outline-sky-100 outline-1 duration-100 text-sky-900 rounded-md my-1 p-2 cursor-pointer flex items-center gap-2">
|
<div className="hover:bg-gray-50 hover:outline outline-sky-100 outline-1 duration-100 text-sky-900 rounded-md my-1 p-2 cursor-pointer flex items-center gap-2">
|
||||||
<FontAwesomeIcon icon={faBookmark} className="w-4 text-sky-300" />
|
<FontAwesomeIcon icon={faBookmark} className="w-4 text-sky-300" />
|
||||||
<p>All Links</p>
|
<p>All Links</p>
|
||||||
|
@ -119,12 +71,13 @@ export default function () {
|
||||||
/>
|
/>
|
||||||
</ClickAwayHandler>
|
</ClickAwayHandler>
|
||||||
) : (
|
) : (
|
||||||
<FontAwesomeIcon
|
<div
|
||||||
icon={faPlus}
|
|
||||||
onClick={toggleCollectionInput}
|
|
||||||
title="Add Collection"
|
title="Add Collection"
|
||||||
className="select-none text-gray-500 rounded-md cursor-pointer hover:bg-white hover:outline outline-sky-100 outline-1 duration-100 p-1 w-3"
|
onClick={toggleCollectionInput}
|
||||||
/>
|
className="select-none text-gray-500 rounded-md cursor-pointer hover:bg-white hover:outline outline-sky-100 outline-1 duration-100 p-1"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon icon={faPlus} className="h-3 w-3" />
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import Head from "next/head";
|
|
||||||
import Navbar from "@/components/Navbar";
|
import Navbar from "@/components/Navbar";
|
||||||
import Sidebar from "@/components/Sidebar";
|
import Sidebar from "@/components/Sidebar";
|
||||||
import { ReactNode } from "react";
|
import { ReactNode } from "react";
|
||||||
|
@ -23,11 +22,6 @@ export default function ({ children }: Props) {
|
||||||
if (status === "authenticated" && !redirection && routeExists)
|
if (status === "authenticated" && !redirection && routeExists)
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Head>
|
|
||||||
<title>Linkwarden</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="icon" href="/favicon.ico" />
|
|
||||||
</Head>
|
|
||||||
<Sidebar />
|
<Sidebar />
|
||||||
<div className="ml-80">
|
<div className="ml-80">
|
||||||
<Navbar />
|
<Navbar />
|
||||||
|
@ -36,15 +30,6 @@ export default function ({ children }: Props) {
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
else if ((status === "unauthenticated" && !redirection) || !routeExists)
|
else if ((status === "unauthenticated" && !redirection) || !routeExists)
|
||||||
return (
|
return <>{children}</>;
|
||||||
<>
|
|
||||||
<Head>
|
|
||||||
<title>Linkwarden</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="icon" href="/favicon.ico" />
|
|
||||||
</Head>
|
|
||||||
{children}
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
else return <Loader />;
|
else return <Loader />;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +1,62 @@
|
||||||
import { chromium, devices } from "playwright";
|
import { Page } from "puppeteer";
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
|
import puppeteer from "puppeteer-extra";
|
||||||
|
import AdblockerPlugin from "puppeteer-extra-plugin-adblocker";
|
||||||
|
import StealthPlugin from "puppeteer-extra-plugin-stealth";
|
||||||
|
|
||||||
export default async (url: string, collectionId: number, linkId: number) => {
|
export default async (url: string, collectionId: number, linkId: number) => {
|
||||||
const archivePath = `data/archives/${collectionId}/${linkId}`;
|
const archivePath = `data/archives/${collectionId}/${linkId}`;
|
||||||
|
|
||||||
const browser = await chromium.launch();
|
const browser = await puppeteer.launch();
|
||||||
const context = await browser.newContext(devices["Desktop Chrome"]);
|
|
||||||
const page = await context.newPage();
|
|
||||||
|
|
||||||
// const contexts = browser.contexts();
|
try {
|
||||||
// console.log(contexts.length);
|
puppeteer.use(AdblockerPlugin()).use(StealthPlugin());
|
||||||
|
|
||||||
await page.goto(url);
|
const page = await browser.newPage();
|
||||||
|
|
||||||
const linkExists = await prisma.link.findFirst({
|
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 300000 });
|
||||||
where: {
|
|
||||||
id: linkId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (linkExists) {
|
await page.setViewport({ width: 1080, height: 1024 });
|
||||||
await Promise.all([
|
|
||||||
page.pdf({ path: archivePath + ".pdf" }),
|
await autoScroll(page);
|
||||||
page.screenshot({ fullPage: true, path: archivePath + ".png" }),
|
|
||||||
]);
|
const linkExists = await prisma.link.findFirst({
|
||||||
|
where: {
|
||||||
|
id: linkId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (linkExists) {
|
||||||
|
await Promise.all([
|
||||||
|
page.pdf({ path: archivePath + ".pdf", format: "a4" }),
|
||||||
|
page.screenshot({ fullPage: true, path: archivePath + ".png" }),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
await browser.close();
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
await browser.close();
|
||||||
}
|
}
|
||||||
|
};
|
||||||
await context.close();
|
|
||||||
await browser.close();
|
const autoScroll = async (page: Page) => {
|
||||||
|
await page.evaluate(async () => {
|
||||||
|
await new Promise<void>((resolve, reject) => {
|
||||||
|
let totalHeight = 0;
|
||||||
|
let distance = 100;
|
||||||
|
let scrollDown = setInterval(() => {
|
||||||
|
let scrollHeight = document.body.scrollHeight;
|
||||||
|
window.scrollBy(0, distance);
|
||||||
|
totalHeight += distance;
|
||||||
|
if (totalHeight >= scrollHeight) {
|
||||||
|
clearInterval(scrollDown);
|
||||||
|
window.scroll(0, 0);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
|
||||||
|
await new Promise((r) => setTimeout(r, 2000));
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,19 +1,11 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
import { Session } from "next-auth";
|
|
||||||
|
|
||||||
export default async function (
|
export default async function (userId: number) {
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse,
|
|
||||||
session: Session
|
|
||||||
) {
|
|
||||||
const collections = await prisma.collection.findMany({
|
const collections = await prisma.collection.findMany({
|
||||||
where: {
|
where: {
|
||||||
ownerId: session?.user.id,
|
ownerId: userId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return res.status(200).json({
|
return { response: collections, status: 200 };
|
||||||
response: collections || [],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,16 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
import { Session } from "next-auth";
|
|
||||||
import { existsSync, mkdirSync } from "fs";
|
import { existsSync, mkdirSync } from "fs";
|
||||||
|
|
||||||
export default async function (
|
export default async function (collectionName: string, userId: number) {
|
||||||
req: NextApiRequest,
|
if (!collectionName)
|
||||||
res: NextApiResponse,
|
return {
|
||||||
session: Session
|
response: "Please enter a valid name for the collection.",
|
||||||
) {
|
status: 400,
|
||||||
if (!session?.user?.email) {
|
};
|
||||||
return res.status(401).json({ response: "You must be logged in." });
|
|
||||||
}
|
|
||||||
|
|
||||||
const email: string = session.user.email;
|
const findCollection = await prisma.user.findUnique({
|
||||||
const collectionName: string = req?.body?.collectionName;
|
|
||||||
|
|
||||||
if (!collectionName) {
|
|
||||||
return res
|
|
||||||
.status(401)
|
|
||||||
.json({ response: "Please enter a valid name for the collection." });
|
|
||||||
}
|
|
||||||
|
|
||||||
const findCollection = await prisma.user.findFirst({
|
|
||||||
where: {
|
where: {
|
||||||
email,
|
id: userId,
|
||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
collections: {
|
collections: {
|
||||||
|
@ -36,15 +23,14 @@ export default async function (
|
||||||
|
|
||||||
const checkIfCollectionExists = findCollection?.collections[0];
|
const checkIfCollectionExists = findCollection?.collections[0];
|
||||||
|
|
||||||
if (checkIfCollectionExists) {
|
if (checkIfCollectionExists)
|
||||||
return res.status(400).json({ response: "Collection already exists." });
|
return { response: "Collection already exists.", status: 400 };
|
||||||
}
|
|
||||||
|
|
||||||
const newCollection = await prisma.collection.create({
|
const newCollection = await prisma.collection.create({
|
||||||
data: {
|
data: {
|
||||||
owner: {
|
owner: {
|
||||||
connect: {
|
connect: {
|
||||||
id: session.user.id,
|
id: userId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
name: collectionName,
|
name: collectionName,
|
||||||
|
@ -55,7 +41,5 @@ export default async function (
|
||||||
if (!existsSync(collectionPath))
|
if (!existsSync(collectionPath))
|
||||||
mkdirSync(collectionPath, { recursive: true });
|
mkdirSync(collectionPath, { recursive: true });
|
||||||
|
|
||||||
return res.status(200).json({
|
return { response: newCollection, status: 200 };
|
||||||
response: newCollection,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,37 +1,23 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
import { Session } from "next-auth";
|
|
||||||
import { ExtendedLink } from "@/types/global";
|
import { ExtendedLink } from "@/types/global";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import { Link, UsersAndCollections } from "@prisma/client";
|
import { Link, UsersAndCollections } from "@prisma/client";
|
||||||
import hasAccessToCollection from "@/lib/api/hasAccessToCollection";
|
import hasAccessToCollection from "@/lib/api/hasAccessToCollection";
|
||||||
|
|
||||||
export default async function (
|
export default async function (link: ExtendedLink, userId: number) {
|
||||||
req: NextApiRequest,
|
if (!link) return { response: "Please choose a valid link.", status: 401 };
|
||||||
res: NextApiResponse,
|
|
||||||
session: Session
|
|
||||||
) {
|
|
||||||
if (!session?.user?.email) {
|
|
||||||
return res.status(401).json({ response: "You must be logged in." });
|
|
||||||
}
|
|
||||||
|
|
||||||
const link: ExtendedLink = req?.body;
|
|
||||||
|
|
||||||
if (!link) {
|
|
||||||
return res.status(401).json({ response: "Please choose a valid link." });
|
|
||||||
}
|
|
||||||
|
|
||||||
const collectionIsAccessible = await hasAccessToCollection(
|
const collectionIsAccessible = await hasAccessToCollection(
|
||||||
session.user.id,
|
userId,
|
||||||
link.collectionId
|
link.collectionId
|
||||||
);
|
);
|
||||||
|
|
||||||
const memberHasAccess = collectionIsAccessible?.members.some(
|
const memberHasAccess = collectionIsAccessible?.members.some(
|
||||||
(e: UsersAndCollections) => e.userId === session.user.id && e.canDelete
|
(e: UsersAndCollections) => e.userId === userId && e.canDelete
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!(collectionIsAccessible?.ownerId === session.user.id || memberHasAccess))
|
if (!(collectionIsAccessible?.ownerId === userId || memberHasAccess))
|
||||||
return res.status(401).json({ response: "Collection is not accessible." });
|
return { response: "Collection is not accessible.", status: 401 };
|
||||||
|
|
||||||
const deleteLink: Link = await prisma.link.delete({
|
const deleteLink: Link = await prisma.link.delete({
|
||||||
where: {
|
where: {
|
||||||
|
@ -47,7 +33,5 @@ export default async function (
|
||||||
if (err) console.log(err);
|
if (err) console.log(err);
|
||||||
});
|
});
|
||||||
|
|
||||||
return res.status(200).json({
|
return { response: deleteLink, status: 200 };
|
||||||
response: deleteLink,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,16 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
import { Session } from "next-auth";
|
export default async function (userId: number) {
|
||||||
|
const links = await prisma.link.findMany({
|
||||||
export default async function (
|
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse,
|
|
||||||
session: Session
|
|
||||||
) {
|
|
||||||
const tags = await prisma.link.findMany({
|
|
||||||
where: {
|
where: {
|
||||||
collection: {
|
collection: {
|
||||||
OR: [
|
OR: [
|
||||||
{
|
{
|
||||||
ownerId: session?.user.id,
|
ownerId: userId,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
members: {
|
members: {
|
||||||
some: {
|
some: {
|
||||||
userId: session?.user.id,
|
userId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -30,7 +23,5 @@ export default async function (
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return res.status(200).json({
|
return { response: links, status: 200 };
|
||||||
response: tags || [],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
import { Session } from "next-auth";
|
import { ExtendedLink } from "@/types/global";
|
||||||
import { ExtendedLink, NewLink } from "@/types/global";
|
|
||||||
import { existsSync, mkdirSync } from "fs";
|
import { existsSync, mkdirSync } from "fs";
|
||||||
import getTitle from "../../getTitle";
|
import getTitle from "../../getTitle";
|
||||||
import archive from "../../archive";
|
import archive from "../../archive";
|
||||||
|
@ -9,77 +7,31 @@ import { Link, UsersAndCollections } from "@prisma/client";
|
||||||
import AES from "crypto-js/aes";
|
import AES from "crypto-js/aes";
|
||||||
import hasAccessToCollection from "@/lib/api/hasAccessToCollection";
|
import hasAccessToCollection from "@/lib/api/hasAccessToCollection";
|
||||||
|
|
||||||
export default async function (
|
export default async function (link: ExtendedLink, userId: number) {
|
||||||
req: NextApiRequest,
|
link.collection.name = link.collection.name.trim();
|
||||||
res: NextApiResponse,
|
|
||||||
session: Session
|
|
||||||
) {
|
|
||||||
if (!session?.user?.email) {
|
|
||||||
return res.status(401).json({ response: "You must be logged in." });
|
|
||||||
}
|
|
||||||
|
|
||||||
const email: string = session.user.email;
|
|
||||||
const link: NewLink = req?.body;
|
|
||||||
|
|
||||||
if (!link.name) {
|
if (!link.name) {
|
||||||
return res
|
return { response: "Please enter a valid name for the link.", status: 401 };
|
||||||
.status(401)
|
} else if (!link.collection.name) {
|
||||||
.json({ response: "Please enter a valid name for the link." });
|
return { response: "Please enter a valid collection name.", status: 401 };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (link.collection.isNew) {
|
if (link.collection.ownerId) {
|
||||||
const collectionId = link.collection.id as string;
|
const collectionIsAccessible = await hasAccessToCollection(
|
||||||
|
userId,
|
||||||
|
link.collection.id
|
||||||
|
);
|
||||||
|
|
||||||
const findCollection = await prisma.user.findFirst({
|
const memberHasAccess = collectionIsAccessible?.members.some(
|
||||||
where: {
|
(e: UsersAndCollections) => e.userId === userId && e.canCreate
|
||||||
email,
|
);
|
||||||
},
|
|
||||||
select: {
|
|
||||||
collections: {
|
|
||||||
where: {
|
|
||||||
name: collectionId,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const checkIfCollectionExists = findCollection?.collections[0];
|
if (!(collectionIsAccessible?.ownerId === userId || memberHasAccess))
|
||||||
|
return { response: "Collection is not accessible.", status: 401 };
|
||||||
if (checkIfCollectionExists)
|
} else {
|
||||||
return res.status(400).json({ response: "Collection already exists." });
|
link.collection.ownerId = userId;
|
||||||
|
|
||||||
const newCollection = await prisma.collection.create({
|
|
||||||
data: {
|
|
||||||
owner: {
|
|
||||||
connect: {
|
|
||||||
id: session.user.id,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
name: collectionId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const collectionPath = `data/archives/${newCollection.id}`;
|
|
||||||
if (!existsSync(collectionPath))
|
|
||||||
mkdirSync(collectionPath, { recursive: true });
|
|
||||||
|
|
||||||
link.collection.id = newCollection.id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const collectionId = link.collection.id as number;
|
|
||||||
|
|
||||||
const collectionIsAccessible = await hasAccessToCollection(
|
|
||||||
session.user.id,
|
|
||||||
collectionId
|
|
||||||
);
|
|
||||||
|
|
||||||
const memberHasAccess = collectionIsAccessible?.members.some(
|
|
||||||
(e: UsersAndCollections) => e.userId === session.user.id && e.canCreate
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!(collectionIsAccessible?.ownerId === session.user.id || memberHasAccess))
|
|
||||||
return res.status(401).json({ response: "Collection is not accessible." });
|
|
||||||
|
|
||||||
const title = await getTitle(link.url);
|
const title = await getTitle(link.url);
|
||||||
|
|
||||||
const newLink: Link = await prisma.link.create({
|
const newLink: Link = await prisma.link.create({
|
||||||
|
@ -87,35 +39,45 @@ export default async function (
|
||||||
name: link.name,
|
name: link.name,
|
||||||
url: link.url,
|
url: link.url,
|
||||||
collection: {
|
collection: {
|
||||||
connect: {
|
connectOrCreate: {
|
||||||
id: collectionId,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
tags: {
|
|
||||||
connectOrCreate: link.tags.map((name) => ({
|
|
||||||
where: {
|
where: {
|
||||||
name_collectionId: {
|
name_ownerId: {
|
||||||
name,
|
ownerId: link.collection.ownerId,
|
||||||
collectionId,
|
name: link.collection.name,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
create: {
|
create: {
|
||||||
name,
|
name: link.collection.name,
|
||||||
collections: {
|
ownerId: userId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tags: {
|
||||||
|
connectOrCreate: link.tags.map((tag) => ({
|
||||||
|
where: {
|
||||||
|
name_ownerId: {
|
||||||
|
name: tag.name,
|
||||||
|
ownerId: link.collection.ownerId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
name: tag.name,
|
||||||
|
owner: {
|
||||||
connect: {
|
connect: {
|
||||||
id: collectionId,
|
id: link.collection.ownerId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})),
|
})),
|
||||||
},
|
},
|
||||||
title,
|
title,
|
||||||
starred: false,
|
|
||||||
screenshotPath: "",
|
screenshotPath: "",
|
||||||
pdfPath: "",
|
pdfPath: "",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log(newLink);
|
||||||
|
|
||||||
const AES_SECRET = process.env.AES_SECRET as string;
|
const AES_SECRET = process.env.AES_SECRET as string;
|
||||||
|
|
||||||
const screenshotHashedPath = AES.encrypt(
|
const screenshotHashedPath = AES.encrypt(
|
||||||
|
@ -136,7 +98,5 @@ export default async function (
|
||||||
|
|
||||||
archive(updatedLink.url, updatedLink.collectionId, updatedLink.id);
|
archive(updatedLink.url, updatedLink.collectionId, updatedLink.id);
|
||||||
|
|
||||||
return res.status(200).json({
|
return { response: updatedLink, status: 200 };
|
||||||
response: updatedLink,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import { prisma } from "@/lib/api/db";
|
import { prisma } from "@/lib/api/db";
|
||||||
import { Session } from "next-auth";
|
|
||||||
|
|
||||||
export default async function (
|
export default async function (userId: number) {
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse,
|
|
||||||
session: Session
|
|
||||||
) {
|
|
||||||
// tag cleanup
|
// tag cleanup
|
||||||
await prisma.tag.deleteMany({
|
await prisma.tag.deleteMany({
|
||||||
where: {
|
where: {
|
||||||
|
@ -18,15 +12,22 @@ export default async function (
|
||||||
|
|
||||||
const tags = await prisma.tag.findMany({
|
const tags = await prisma.tag.findMany({
|
||||||
where: {
|
where: {
|
||||||
collections: {
|
ownerId: userId,
|
||||||
|
owner: {
|
||||||
OR: [
|
OR: [
|
||||||
{
|
{
|
||||||
ownerId: session?.user.id,
|
id: userId,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
members: {
|
collections: {
|
||||||
some: {
|
some: {
|
||||||
userId: session?.user.id,
|
members: {
|
||||||
|
some: {
|
||||||
|
user: {
|
||||||
|
id: userId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -35,7 +36,5 @@ export default async function (
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return res.status(200).json({
|
return { response: tags, status: 200 };
|
||||||
response: tags || [],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,10 @@
|
||||||
"eslint-config-next": "13.1.6",
|
"eslint-config-next": "13.1.6",
|
||||||
"next": "13.1.6",
|
"next": "13.1.6",
|
||||||
"next-auth": "^4.19.1",
|
"next-auth": "^4.19.1",
|
||||||
"playwright": "^1.31.2",
|
"puppeteer": "^19.8.0",
|
||||||
|
"puppeteer-extra": "^3.3.6",
|
||||||
|
"puppeteer-extra-plugin-adblocker": "^2.13.6",
|
||||||
|
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-select": "^5.7.0",
|
"react-select": "^5.7.0",
|
||||||
|
|
|
@ -3,10 +3,33 @@ import MainLayout from "@/layouts/MainLayout";
|
||||||
import "@/styles/globals.css";
|
import "@/styles/globals.css";
|
||||||
import { SessionProvider } from "next-auth/react";
|
import { SessionProvider } from "next-auth/react";
|
||||||
import type { AppProps } from "next/app";
|
import type { AppProps } from "next/app";
|
||||||
|
import Head from "next/head";
|
||||||
|
|
||||||
export default function App({ Component, pageProps }: AppProps) {
|
export default function App({ Component, pageProps }: AppProps) {
|
||||||
return (
|
return (
|
||||||
<SessionProvider session={pageProps.session}>
|
<SessionProvider session={pageProps.session}>
|
||||||
|
<Head>
|
||||||
|
<title>Linkwarden</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link
|
||||||
|
rel="apple-touch-icon"
|
||||||
|
sizes="180x180"
|
||||||
|
href="/apple-touch-icon.png"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
type="image/png"
|
||||||
|
sizes="32x32"
|
||||||
|
href="/favicon-32x32.png"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
type="image/png"
|
||||||
|
sizes="16x16"
|
||||||
|
href="/favicon-16x16.png"
|
||||||
|
/>
|
||||||
|
<link rel="manifest" href="/site.webmanifest" />
|
||||||
|
</Head>
|
||||||
<MainLayout>
|
<MainLayout>
|
||||||
<Component {...pageProps} />
|
<Component {...pageProps} />
|
||||||
</MainLayout>
|
</MainLayout>
|
||||||
|
|
|
@ -35,6 +35,8 @@ export const authOptions: AuthOptions = {
|
||||||
passwordMatches = bcrypt.compareSync(password, findUser.password);
|
passwordMatches = bcrypt.compareSync(password, findUser.password);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(passwordMatches);
|
||||||
|
|
||||||
if (passwordMatches) {
|
if (passwordMatches) {
|
||||||
return {
|
return {
|
||||||
id: findUser?.id,
|
id: findUser?.id,
|
||||||
|
|
|
@ -4,21 +4,25 @@ import { authOptions } from "pages/api/auth/[...nextauth]";
|
||||||
import getCollections from "@/lib/api/controllers/collections/getCollections";
|
import getCollections from "@/lib/api/controllers/collections/getCollections";
|
||||||
import postCollection from "@/lib/api/controllers/collections/postCollection";
|
import postCollection from "@/lib/api/controllers/collections/postCollection";
|
||||||
|
|
||||||
type Data = {
|
export default async function (req: NextApiRequest, res: NextApiResponse) {
|
||||||
response: object[] | string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function (
|
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse<Data>
|
|
||||||
) {
|
|
||||||
const session = await getServerSession(req, res, authOptions);
|
const session = await getServerSession(req, res, authOptions);
|
||||||
|
|
||||||
if (!session?.user?.email) {
|
if (!session?.user?.email) {
|
||||||
return res.status(401).json({ response: "You must be logged in." });
|
return res.status(401).json({ response: "You must be logged in." });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.method === "GET") return await getCollections(req, res, session);
|
if (req.method === "GET") {
|
||||||
|
const collections = await getCollections(session.user.id);
|
||||||
if (req.method === "POST") return await postCollection(req, res, session);
|
return res
|
||||||
|
.status(collections.status)
|
||||||
|
.json({ response: collections.response });
|
||||||
|
} else if (req.method === "POST") {
|
||||||
|
const newCollection = await postCollection(
|
||||||
|
req.body.collectionName.trim(),
|
||||||
|
session.user.id
|
||||||
|
);
|
||||||
|
return res
|
||||||
|
.status(newCollection.status)
|
||||||
|
.json({ response: newCollection.response });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,21 +5,25 @@ import getLinks from "@/lib/api/controllers/links/getLinks";
|
||||||
import postLink from "@/lib/api/controllers/links/postLink";
|
import postLink from "@/lib/api/controllers/links/postLink";
|
||||||
import deleteLink from "@/lib/api/controllers/links/deleteLink";
|
import deleteLink from "@/lib/api/controllers/links/deleteLink";
|
||||||
|
|
||||||
type Data = {
|
export default async function (req: NextApiRequest, res: NextApiResponse) {
|
||||||
response: object[] | string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function (
|
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse<Data>
|
|
||||||
) {
|
|
||||||
const session = await getServerSession(req, res, authOptions);
|
const session = await getServerSession(req, res, authOptions);
|
||||||
|
|
||||||
if (!session?.user?.email) {
|
if (!session?.user?.email) {
|
||||||
return res.status(401).json({ response: "You must be logged in." });
|
return res.status(401).json({ response: "You must be logged in." });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.method === "GET") return await getLinks(req, res, session);
|
if (req.method === "GET") {
|
||||||
else if (req.method === "POST") return await postLink(req, res, session);
|
const links = await getLinks(session.user.id);
|
||||||
else if (req.method === "DELETE") return await deleteLink(req, res, session);
|
return res.status(links.status).json({ response: links.response });
|
||||||
|
} else if (req.method === "POST") {
|
||||||
|
const newlink = await postLink(req.body, session.user.id);
|
||||||
|
return res.status(newlink.status).json({
|
||||||
|
response: newlink.response,
|
||||||
|
});
|
||||||
|
} else if (req.method === "DELETE") {
|
||||||
|
const deleted = await deleteLink(req.body, session.user.id);
|
||||||
|
return res.status(deleted.status).json({
|
||||||
|
response: deleted.response,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,5 +17,8 @@ export default async function (
|
||||||
return res.status(401).json({ response: "You must be logged in." });
|
return res.status(401).json({ response: "You must be logged in." });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.method === "GET") return await getTags(req, res, session);
|
if (req.method === "GET") {
|
||||||
|
const tags = await getTags(session.user.id);
|
||||||
|
return res.status(tags.status).json({ response: tags.response });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,7 @@ export default function () {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// ml-80
|
// ml-80
|
||||||
<div className="p-2">
|
<div className="p-5 flex flex-col gap-5 w-full">
|
||||||
<p className="text-right mb-2 text-gray-500 font-bold text-sm">
|
|
||||||
{linksByCollection.length || 0} Links Found
|
|
||||||
</p>
|
|
||||||
{linksByCollection.map((e, i) => {
|
{linksByCollection.map((e, i) => {
|
||||||
return <LinkList key={i} link={e} count={i} />;
|
return <LinkList key={i} link={e} count={i} />;
|
||||||
})}
|
})}
|
||||||
|
|
|
@ -1,20 +1,56 @@
|
||||||
import { useSession } from "next-auth/react";
|
|
||||||
import useCollectionStore from "@/store/collections";
|
import useCollectionStore from "@/store/collections";
|
||||||
|
import { faAdd, faBox, faEllipsis } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import CollectionCard from "@/components/CollectionCard";
|
import CollectionCard from "@/components/CollectionCard";
|
||||||
|
import Dropdown from "@/components/Dropdown";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
const { collections } = useCollectionStore();
|
const { collections } = useCollectionStore();
|
||||||
const { data: session, status } = useSession();
|
const [editDropdown, setEditDropdown] = useState(false);
|
||||||
|
|
||||||
const user = session?.user;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// ml-80
|
// ml-80
|
||||||
<div className="flex flex-wrap p-2 gap-2">
|
<div className="p-5">
|
||||||
{collections.map((e, i) => {
|
<div className="flex gap-3 items-center mb-5">
|
||||||
return <CollectionCard key={i} collection={e} />;
|
<div className="flex gap-2 items-center">
|
||||||
})}
|
<FontAwesomeIcon icon={faBox} className="w-5 h-5 text-sky-300" />
|
||||||
|
<p className="text-lg text-sky-900">All Collections</p>
|
||||||
|
</div>
|
||||||
|
<div className="relative">
|
||||||
|
<div
|
||||||
|
onClick={() => setEditDropdown(!editDropdown)}
|
||||||
|
id="edit-dropdown"
|
||||||
|
className="inline-flex rounded-md cursor-pointer hover:bg-white hover:border-sky-500 border-sky-100 border duration-100 p-1"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon
|
||||||
|
icon={faEllipsis}
|
||||||
|
id="edit-dropdown"
|
||||||
|
className="w-4 h-4 text-gray-500"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{editDropdown ? (
|
||||||
|
<Dropdown
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
name: "New",
|
||||||
|
icon: <FontAwesomeIcon icon={faAdd} />,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
onClickOutside={(e: Event) => {
|
||||||
|
const target = e.target as HTMLInputElement;
|
||||||
|
if (target.id !== "edit-dropdown") setEditDropdown(false);
|
||||||
|
}}
|
||||||
|
className="absolute top-7 left-0"
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-wrap gap-5">
|
||||||
|
{collections.map((e, i) => {
|
||||||
|
return <CollectionCard key={i} collection={e} />;
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
import LinkList from "@/components/LinkList";
|
||||||
|
import useLinkStore from "@/store/links";
|
||||||
|
|
||||||
|
export default function Links() {
|
||||||
|
const { links } = useLinkStore();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="p-5 flex flex-col gap-5 w-full">
|
||||||
|
{links.map((e, i) => {
|
||||||
|
return <LinkList key={i} link={e} count={i} />;
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -21,6 +21,8 @@ export default function () {
|
||||||
password: form.password,
|
password: form.password,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log(res?.status);
|
||||||
|
|
||||||
if (res?.ok) {
|
if (res?.ok) {
|
||||||
setForm({
|
setForm({
|
||||||
email: "",
|
email: "",
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "Link" RENAME COLUMN "isFavorites" TO "starred";
|
|
|
@ -37,7 +37,6 @@ CREATE TABLE "Link" (
|
||||||
"url" TEXT NOT NULL,
|
"url" TEXT NOT NULL,
|
||||||
"title" TEXT NOT NULL,
|
"title" TEXT NOT NULL,
|
||||||
"collectionId" INTEGER NOT NULL,
|
"collectionId" INTEGER NOT NULL,
|
||||||
"isFavorites" BOOLEAN NOT NULL,
|
|
||||||
"screenshotPath" TEXT NOT NULL,
|
"screenshotPath" TEXT NOT NULL,
|
||||||
"pdfPath" TEXT NOT NULL,
|
"pdfPath" TEXT NOT NULL,
|
||||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
@ -50,6 +49,7 @@ CREATE TABLE "Tag" (
|
||||||
"id" SERIAL NOT NULL,
|
"id" SERIAL NOT NULL,
|
||||||
"name" TEXT NOT NULL,
|
"name" TEXT NOT NULL,
|
||||||
"collectionId" INTEGER NOT NULL,
|
"collectionId" INTEGER NOT NULL,
|
||||||
|
"ownerId" INTEGER NOT NULL,
|
||||||
|
|
||||||
CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
|
CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
|
||||||
);
|
);
|
||||||
|
@ -63,6 +63,12 @@ CREATE TABLE "_LinkToTag" (
|
||||||
-- CreateIndex
|
-- CreateIndex
|
||||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Collection_name_ownerId_key" ON "Collection"("name", "ownerId");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Tag_name_ownerId_key" ON "Tag"("name", "ownerId");
|
||||||
|
|
||||||
-- CreateIndex
|
-- CreateIndex
|
||||||
CREATE UNIQUE INDEX "Tag_name_collectionId_key" ON "Tag"("name", "collectionId");
|
CREATE UNIQUE INDEX "Tag_name_collectionId_key" ON "Tag"("name", "collectionId");
|
||||||
|
|
||||||
|
@ -87,6 +93,9 @@ ALTER TABLE "Link" ADD CONSTRAINT "Link_collectionId_fkey" FOREIGN KEY ("collect
|
||||||
-- AddForeignKey
|
-- AddForeignKey
|
||||||
ALTER TABLE "Tag" ADD CONSTRAINT "Tag_collectionId_fkey" FOREIGN KEY ("collectionId") REFERENCES "Collection"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
ALTER TABLE "Tag" ADD CONSTRAINT "Tag_collectionId_fkey" FOREIGN KEY ("collectionId") REFERENCES "Collection"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Tag" ADD CONSTRAINT "Tag_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
-- AddForeignKey
|
-- AddForeignKey
|
||||||
ALTER TABLE "_LinkToTag" ADD CONSTRAINT "_LinkToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Link"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
ALTER TABLE "_LinkToTag" ADD CONSTRAINT "_LinkToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Link"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- DropIndex
|
||||||
|
DROP INDEX "Tag_name_collectionId_key";
|
|
@ -0,0 +1,11 @@
|
||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the column `collectionId` on the `Tag` table. All the data in the column will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Tag" DROP CONSTRAINT "Tag_collectionId_fkey";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Tag" DROP COLUMN "collectionId";
|
|
@ -13,6 +13,7 @@ model User {
|
||||||
email String @unique
|
email String @unique
|
||||||
password String
|
password String
|
||||||
collections Collection[]
|
collections Collection[]
|
||||||
|
tags Tag[]
|
||||||
collectionsJoined UsersAndCollections[]
|
collectionsJoined UsersAndCollections[]
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
}
|
}
|
||||||
|
@ -24,8 +25,9 @@ model Collection {
|
||||||
ownerId Int
|
ownerId Int
|
||||||
members UsersAndCollections[]
|
members UsersAndCollections[]
|
||||||
links Link[]
|
links Link[]
|
||||||
tags Tag[]
|
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
|
|
||||||
|
@@unique([name, ownerId])
|
||||||
}
|
}
|
||||||
|
|
||||||
model UsersAndCollections {
|
model UsersAndCollections {
|
||||||
|
@ -50,7 +52,6 @@ model Link {
|
||||||
collection Collection @relation(fields: [collectionId], references: [id])
|
collection Collection @relation(fields: [collectionId], references: [id])
|
||||||
collectionId Int
|
collectionId Int
|
||||||
tags Tag[]
|
tags Tag[]
|
||||||
starred Boolean
|
|
||||||
screenshotPath String
|
screenshotPath String
|
||||||
pdfPath String
|
pdfPath String
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
|
@ -60,8 +61,8 @@ model Tag {
|
||||||
id Int @id @default(autoincrement())
|
id Int @id @default(autoincrement())
|
||||||
name String
|
name String
|
||||||
links Link[]
|
links Link[]
|
||||||
collections Collection @relation(fields: [collectionId], references: [id])
|
owner User @relation(fields: [ownerId], references: [id])
|
||||||
collectionId Int
|
ownerId Int
|
||||||
|
|
||||||
@@unique([name, collectionId])
|
@@unique([name, ownerId])
|
||||||
}
|
}
|
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 402 B |
After Width: | Height: | Size: 767 B |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 21 KiB |
|
@ -0,0 +1 @@
|
||||||
|
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
|
@ -1,12 +1,12 @@
|
||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
import { ExtendedLink, NewLink } from "@/types/global";
|
import { ExtendedLink } from "@/types/global";
|
||||||
import useTagStore from "./tags";
|
import useTagStore from "./tags";
|
||||||
import useCollectionStore from "./collections";
|
import useCollectionStore from "./collections";
|
||||||
|
|
||||||
type LinkStore = {
|
type LinkStore = {
|
||||||
links: ExtendedLink[];
|
links: ExtendedLink[];
|
||||||
setLinks: () => void;
|
setLinks: () => void;
|
||||||
addLink: (linkName: NewLink) => Promise<boolean>;
|
addLink: (linkName: ExtendedLink) => Promise<boolean>;
|
||||||
updateLink: (link: ExtendedLink) => void;
|
updateLink: (link: ExtendedLink) => void;
|
||||||
removeLink: (link: ExtendedLink) => void;
|
removeLink: (link: ExtendedLink) => void;
|
||||||
};
|
};
|
||||||
|
@ -31,6 +31,8 @@ const useLinkStore = create<LinkStore>()((set) => ({
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
if (response.ok)
|
if (response.ok)
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
links: [...state.links, data.response],
|
links: [...state.links, data.response],
|
||||||
|
@ -43,7 +45,7 @@ const useLinkStore = create<LinkStore>()((set) => ({
|
||||||
},
|
},
|
||||||
updateLink: (link) =>
|
updateLink: (link) =>
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
links: state.links.map((c) => (c.id === link.id ? link : c)),
|
links: state.links.map((e) => (e.id === link.id ? link : e)),
|
||||||
})),
|
})),
|
||||||
removeLink: async (link) => {
|
removeLink: async (link) => {
|
||||||
const response = await fetch("/api/routes/links", {
|
const response = await fetch("/api/routes/links", {
|
||||||
|
|
|
@ -8,9 +8,10 @@ export interface ExtendedLink extends Link {
|
||||||
export interface NewLink {
|
export interface NewLink {
|
||||||
name: string;
|
name: string;
|
||||||
url: string;
|
url: string;
|
||||||
tags: string[];
|
tags: Tag[];
|
||||||
collection: {
|
collection: {
|
||||||
id: string | number;
|
id: number | undefined;
|
||||||
isNew?: boolean;
|
name: string | undefined;
|
||||||
|
ownerId: number | undefined;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
575
yarn.lock
|
@ -58,6 +58,41 @@
|
||||||
"@babel/helper-validator-identifier" "^7.19.1"
|
"@babel/helper-validator-identifier" "^7.19.1"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
|
"@cliqz/adblocker-content@^1.23.8", "@cliqz/adblocker-content@^1.26.3":
|
||||||
|
version "1.26.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@cliqz/adblocker-content/-/adblocker-content-1.26.3.tgz#6f0c78883d6574f0d0ce081a6a79d052c1c89e47"
|
||||||
|
integrity sha512-Bg6Ex5LNBUnijhlQlkeZqrtKqViqfcTXiXvpXQHMY01pdeZQ70rYBT7HRV5FpQYV3xWkRaQrClanhWz36XWRew==
|
||||||
|
dependencies:
|
||||||
|
"@cliqz/adblocker-extended-selectors" "^1.26.3"
|
||||||
|
|
||||||
|
"@cliqz/adblocker-extended-selectors@^1.26.3":
|
||||||
|
version "1.26.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@cliqz/adblocker-extended-selectors/-/adblocker-extended-selectors-1.26.3.tgz#7553158ae78e7a50a263bfc595e521746cceec00"
|
||||||
|
integrity sha512-wLcP7gkc3YVee/iqkIbFoeweSMbX9aaNUissIlzqDz+8BAci0RXOt4SHj+Ri/TIpTkR5urvhKsmQ8sb1hnJX6Q==
|
||||||
|
|
||||||
|
"@cliqz/adblocker-puppeteer@1.23.8":
|
||||||
|
version "1.23.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@cliqz/adblocker-puppeteer/-/adblocker-puppeteer-1.23.8.tgz#e74636cd200459d1734929e41504a76939504311"
|
||||||
|
integrity sha512-Ca1/DBqQXsOpKTFVAHX6OpLTSEupXmUkUWHj6iXhLLleC7RPISN5B0b801VDmaGRqoC5zKRxn0vYbIfpgCWVug==
|
||||||
|
dependencies:
|
||||||
|
"@cliqz/adblocker" "^1.23.8"
|
||||||
|
"@cliqz/adblocker-content" "^1.23.8"
|
||||||
|
tldts-experimental "^5.6.21"
|
||||||
|
|
||||||
|
"@cliqz/adblocker@^1.23.8":
|
||||||
|
version "1.26.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@cliqz/adblocker/-/adblocker-1.26.3.tgz#8ae59ffaf731d26ee515eeb3a9b3d51c28480b90"
|
||||||
|
integrity sha512-RdXlgNRWEvT+QAVuc81hsitSOObXFkAJiXPL/8PmJ8rFKh0RHfkOpdXl8Xb2GOh2HUbKhy5u9vAhSFMCBKCbCg==
|
||||||
|
dependencies:
|
||||||
|
"@cliqz/adblocker-content" "^1.26.3"
|
||||||
|
"@cliqz/adblocker-extended-selectors" "^1.26.3"
|
||||||
|
"@remusao/guess-url-type" "^1.1.2"
|
||||||
|
"@remusao/small" "^1.1.2"
|
||||||
|
"@remusao/smaz" "^1.7.1"
|
||||||
|
"@types/chrome" "^0.0.224"
|
||||||
|
"@types/firefox-webext-browser" "^111.0.0"
|
||||||
|
tldts-experimental "^5.6.21"
|
||||||
|
|
||||||
"@emotion/babel-plugin@^11.10.6":
|
"@emotion/babel-plugin@^11.10.6":
|
||||||
version "11.10.6"
|
version "11.10.6"
|
||||||
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz#a68ee4b019d661d6f37dec4b8903255766925ead"
|
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz#a68ee4b019d661d6f37dec4b8903255766925ead"
|
||||||
|
@ -377,6 +412,41 @@
|
||||||
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.9.0.tgz#05a1411964e047c1bc43f777c7a1c69f86a2a26c"
|
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.9.0.tgz#05a1411964e047c1bc43f777c7a1c69f86a2a26c"
|
||||||
integrity sha512-t1pt0Gsp+HcgPJrHFc+d/ZSAaKKWar2G/iakrE07yeKPNavDP3iVKPpfXP22OTCHZUWf7OelwKJxQgKAm5hkgw==
|
integrity sha512-t1pt0Gsp+HcgPJrHFc+d/ZSAaKKWar2G/iakrE07yeKPNavDP3iVKPpfXP22OTCHZUWf7OelwKJxQgKAm5hkgw==
|
||||||
|
|
||||||
|
"@remusao/guess-url-type@^1.1.2":
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@remusao/guess-url-type/-/guess-url-type-1.2.1.tgz#b3e7c32abdf98d0fb4f93cc67cad580b5fe4ba57"
|
||||||
|
integrity sha512-rbOqre2jW8STjheOsOaQHLgYBaBZ9Owbdt8NO7WvNZftJlaG3y/K9oOkl8ZUpuFBisIhmBuMEW6c+YrQl5inRA==
|
||||||
|
|
||||||
|
"@remusao/small@^1.1.2":
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@remusao/small/-/small-1.2.1.tgz#63bfe4548832289f94ac868a0c305970c9a0e5f9"
|
||||||
|
integrity sha512-7MjoGt0TJMVw1GPKgWq6SJPws1SLsUXQRa43Umht+nkyw2jnpy3WpiLNqGdwo5rHr5Wp9B2W/Pm5RQp656UJdw==
|
||||||
|
|
||||||
|
"@remusao/smaz-compress@^1.9.1":
|
||||||
|
version "1.9.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@remusao/smaz-compress/-/smaz-compress-1.9.1.tgz#fc75eaf9bcac2d58bc4c3d518183a7cb9612d275"
|
||||||
|
integrity sha512-E2f48TwloQu3r6BdLOGF2aczeH7bJ/32oJGqvzT9SKur0cuUnLcZ7ZXP874E2fwmdE+cXzfC7bKzp79cDnmeyw==
|
||||||
|
dependencies:
|
||||||
|
"@remusao/trie" "^1.4.1"
|
||||||
|
|
||||||
|
"@remusao/smaz-decompress@^1.9.1":
|
||||||
|
version "1.9.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@remusao/smaz-decompress/-/smaz-decompress-1.9.1.tgz#8094f997e8fb591a678cda9cf08c209c825eba5b"
|
||||||
|
integrity sha512-TfjKKprYe3n47od8auhvJ/Ikj9kQTbDTe71ynKlxslrvvUhlIV3VQSuwYuMWMbdz1fIs0H/fxCN1Z8/H3km6/A==
|
||||||
|
|
||||||
|
"@remusao/smaz@^1.7.1":
|
||||||
|
version "1.9.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@remusao/smaz/-/smaz-1.9.1.tgz#a2b9b045385f81e1615a68d932b7cc8b04c9db8d"
|
||||||
|
integrity sha512-e6BLuP8oaXCZ9+v46Is4ilAZ/Vq6YLgmBP204Ixgk1qTjXmqvFYG7+AS7v9nsZdGOy96r9DWGFbbDVgMxwu1rA==
|
||||||
|
dependencies:
|
||||||
|
"@remusao/smaz-compress" "^1.9.1"
|
||||||
|
"@remusao/smaz-decompress" "^1.9.1"
|
||||||
|
|
||||||
|
"@remusao/trie@^1.4.1":
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@remusao/trie/-/trie-1.4.1.tgz#755d09f8a007476334e611f42719b2d581f00720"
|
||||||
|
integrity sha512-yvwa+aCyYI/UjeD39BnpMypG8N06l86wIDW1/PAc6ihBRnodIfZDwccxQN3n1t74wduzaz74m4ZMHZnB06567Q==
|
||||||
|
|
||||||
"@rushstack/eslint-patch@^1.1.3":
|
"@rushstack/eslint-patch@^1.1.3":
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
|
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
|
||||||
|
@ -396,16 +466,58 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/chrome@^0.0.224":
|
||||||
|
version "0.0.224"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.224.tgz#0138497299eaaf261d61ece62d7d6af3868ce856"
|
||||||
|
integrity sha512-YkL7q3KDV7OAKgVCBNIfH73rnjNMbIzAYHzTa2DKhSK/2z0Wf/n8yJnK/UoW+lvuYJJR4LtAkG3YvsIZTy7BOA==
|
||||||
|
dependencies:
|
||||||
|
"@types/filesystem" "*"
|
||||||
|
"@types/har-format" "*"
|
||||||
|
|
||||||
"@types/crypto-js@^4.1.1":
|
"@types/crypto-js@^4.1.1":
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d"
|
resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d"
|
||||||
integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==
|
integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==
|
||||||
|
|
||||||
|
"@types/debug@^4.1.0":
|
||||||
|
version "4.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
|
||||||
|
integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
|
||||||
|
dependencies:
|
||||||
|
"@types/ms" "*"
|
||||||
|
|
||||||
|
"@types/filesystem@*":
|
||||||
|
version "0.0.32"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.32.tgz#307df7cc084a2293c3c1a31151b178063e0a8edf"
|
||||||
|
integrity sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/filewriter" "*"
|
||||||
|
|
||||||
|
"@types/filewriter@*":
|
||||||
|
version "0.0.29"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee"
|
||||||
|
integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==
|
||||||
|
|
||||||
|
"@types/firefox-webext-browser@^111.0.0":
|
||||||
|
version "111.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/firefox-webext-browser/-/firefox-webext-browser-111.0.0.tgz#16311d8da94e21a715d1688ba8547069eb89cf5a"
|
||||||
|
integrity sha512-KboW0ughUYzuYAvzWGJsiSMmH9AgJDvnstjsNrXMgf6cpJ5g1eBGzkqpjPzVqkOyTH/mFl7gd15+XyaVQhKywA==
|
||||||
|
|
||||||
|
"@types/har-format@*":
|
||||||
|
version "1.2.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.10.tgz#7b4e1e0ada4d17684ac3b05d601a4871cfab11fc"
|
||||||
|
integrity sha512-o0J30wqycjF5miWDKYKKzzOU1ZTLuA42HZ4HE7/zqTOc/jTLdQ5NhYWvsRQo45Nfi1KHoRdNhteSI4BAxTF1Pg==
|
||||||
|
|
||||||
"@types/json5@^0.0.29":
|
"@types/json5@^0.0.29":
|
||||||
version "0.0.29"
|
version "0.0.29"
|
||||||
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||||
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
|
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
|
||||||
|
|
||||||
|
"@types/ms@*":
|
||||||
|
version "0.7.31"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
|
||||||
|
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "18.11.19"
|
version "18.11.19"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d"
|
||||||
|
@ -454,6 +566,13 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
|
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
|
||||||
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
|
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
|
||||||
|
|
||||||
|
"@types/yauzl@^2.9.1":
|
||||||
|
version "2.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
|
||||||
|
integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@typescript-eslint/parser@^5.42.0":
|
"@typescript-eslint/parser@^5.42.0":
|
||||||
version "5.49.0"
|
version "5.49.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.49.0.tgz#d699734b2f20e16351e117417d34a2bc9d7c4b90"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.49.0.tgz#d699734b2f20e16351e117417d34a2bc9d7c4b90"
|
||||||
|
@ -606,6 +725,11 @@ aria-query@^5.1.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
deep-equal "^2.0.5"
|
deep-equal "^2.0.5"
|
||||||
|
|
||||||
|
arr-union@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
|
||||||
|
integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
|
||||||
|
|
||||||
array-includes@^3.1.5, array-includes@^3.1.6:
|
array-includes@^3.1.5, array-includes@^3.1.6:
|
||||||
version "3.1.6"
|
version "3.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
|
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
|
||||||
|
@ -701,6 +825,11 @@ balanced-match@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||||
|
|
||||||
|
base64-js@^1.3.1:
|
||||||
|
version "1.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||||
|
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||||
|
|
||||||
bcrypt@^5.1.0:
|
bcrypt@^5.1.0:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.0.tgz#bbb27665dbc400480a524d8991ac7434e8529e17"
|
resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.0.tgz#bbb27665dbc400480a524d8991ac7434e8529e17"
|
||||||
|
@ -714,6 +843,15 @@ binary-extensions@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||||
|
|
||||||
|
bl@^4.0.3:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
|
||||||
|
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.5.0"
|
||||||
|
inherits "^2.0.4"
|
||||||
|
readable-stream "^3.4.0"
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
@ -739,6 +877,19 @@ browserslist@^4.21.4:
|
||||||
node-releases "^2.0.6"
|
node-releases "^2.0.6"
|
||||||
update-browserslist-db "^1.0.9"
|
update-browserslist-db "^1.0.9"
|
||||||
|
|
||||||
|
buffer-crc32@~0.2.3:
|
||||||
|
version "0.2.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||||
|
integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
|
||||||
|
|
||||||
|
buffer@^5.2.1, buffer@^5.5.0:
|
||||||
|
version "5.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
||||||
|
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
||||||
|
dependencies:
|
||||||
|
base64-js "^1.3.1"
|
||||||
|
ieee754 "^1.1.13"
|
||||||
|
|
||||||
call-bind@^1.0.0, call-bind@^1.0.2:
|
call-bind@^1.0.0, call-bind@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
||||||
|
@ -794,16 +945,39 @@ chokidar@^3.5.3:
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "~2.3.2"
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
chownr@^1.1.1:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||||
|
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||||
|
|
||||||
chownr@^2.0.0:
|
chownr@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||||
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
||||||
|
|
||||||
|
chromium-bidi@0.4.5:
|
||||||
|
version "0.4.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.5.tgz#a352e755536dde609bd2c77e4b1f0906bff8784e"
|
||||||
|
integrity sha512-rkav9YzRfAshSTG3wNXF7P7yNiI29QAo1xBXElPoCoSQR5n20q3cOyVhDv6S7+GlF/CJ/emUxlQiR0xOPurkGg==
|
||||||
|
dependencies:
|
||||||
|
mitt "3.0.0"
|
||||||
|
|
||||||
client-only@0.0.1:
|
client-only@0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
|
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
|
||||||
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
|
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
|
||||||
|
|
||||||
|
clone-deep@^0.2.4:
|
||||||
|
version "0.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6"
|
||||||
|
integrity sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==
|
||||||
|
dependencies:
|
||||||
|
for-own "^0.1.3"
|
||||||
|
is-plain-object "^2.0.1"
|
||||||
|
kind-of "^3.0.2"
|
||||||
|
lazy-cache "^1.0.3"
|
||||||
|
shallow-clone "^0.1.2"
|
||||||
|
|
||||||
color-convert@^1.9.0:
|
color-convert@^1.9.0:
|
||||||
version "1.9.3"
|
version "1.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||||
|
@ -853,6 +1027,16 @@ cookie@^0.5.0:
|
||||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
||||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||||
|
|
||||||
|
cosmiconfig@8.1.3:
|
||||||
|
version "8.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689"
|
||||||
|
integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==
|
||||||
|
dependencies:
|
||||||
|
import-fresh "^3.2.1"
|
||||||
|
js-yaml "^4.1.0"
|
||||||
|
parse-json "^5.0.0"
|
||||||
|
path-type "^4.0.0"
|
||||||
|
|
||||||
cosmiconfig@^7.0.0:
|
cosmiconfig@^7.0.0:
|
||||||
version "7.1.0"
|
version "7.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
|
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
|
||||||
|
@ -864,6 +1048,13 @@ cosmiconfig@^7.0.0:
|
||||||
path-type "^4.0.0"
|
path-type "^4.0.0"
|
||||||
yaml "^1.10.0"
|
yaml "^1.10.0"
|
||||||
|
|
||||||
|
cross-fetch@3.1.5:
|
||||||
|
version "3.1.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
|
||||||
|
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
|
||||||
|
dependencies:
|
||||||
|
node-fetch "2.6.7"
|
||||||
|
|
||||||
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||||
version "7.0.3"
|
version "7.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||||
|
@ -893,7 +1084,7 @@ damerau-levenshtein@^1.0.8:
|
||||||
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
|
||||||
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
|
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
|
||||||
|
|
||||||
debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
|
debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
|
||||||
version "4.3.4"
|
version "4.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
@ -935,6 +1126,11 @@ deep-is@^0.1.3:
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
||||||
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
||||||
|
|
||||||
|
deepmerge@^4.2.2:
|
||||||
|
version "4.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
|
||||||
|
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
|
||||||
|
|
||||||
define-lazy-prop@^2.0.0:
|
define-lazy-prop@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
|
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
|
||||||
|
@ -972,6 +1168,11 @@ detective@^5.2.1:
|
||||||
defined "^1.0.0"
|
defined "^1.0.0"
|
||||||
minimist "^1.2.6"
|
minimist "^1.2.6"
|
||||||
|
|
||||||
|
devtools-protocol@0.0.1107588:
|
||||||
|
version "0.0.1107588"
|
||||||
|
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz#f8cac707840b97cc30b029359341bcbbb0ad8ffa"
|
||||||
|
integrity sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==
|
||||||
|
|
||||||
didyoumean@^1.2.2:
|
didyoumean@^1.2.2:
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
|
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
|
||||||
|
@ -1026,6 +1227,13 @@ emoji-regex@^9.2.2:
|
||||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
|
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
|
||||||
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
|
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
|
||||||
|
|
||||||
|
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
||||||
|
version "1.4.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||||
|
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||||
|
dependencies:
|
||||||
|
once "^1.4.0"
|
||||||
|
|
||||||
enhanced-resolve@^5.10.0:
|
enhanced-resolve@^5.10.0:
|
||||||
version "5.12.0"
|
version "5.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
|
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
|
||||||
|
@ -1351,6 +1559,17 @@ esutils@^2.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||||
|
|
||||||
|
extract-zip@2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
||||||
|
integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.1"
|
||||||
|
get-stream "^5.1.0"
|
||||||
|
yauzl "^2.10.0"
|
||||||
|
optionalDependencies:
|
||||||
|
"@types/yauzl" "^2.9.1"
|
||||||
|
|
||||||
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
||||||
version "3.1.3"
|
version "3.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||||
|
@ -1384,6 +1603,13 @@ fastq@^1.6.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
reusify "^1.0.4"
|
reusify "^1.0.4"
|
||||||
|
|
||||||
|
fd-slicer@~1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
|
||||||
|
integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
|
||||||
|
dependencies:
|
||||||
|
pend "~1.2.0"
|
||||||
|
|
||||||
file-entry-cache@^6.0.1:
|
file-entry-cache@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
|
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
|
||||||
|
@ -1431,11 +1657,42 @@ for-each@^0.3.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-callable "^1.1.3"
|
is-callable "^1.1.3"
|
||||||
|
|
||||||
|
for-in@^0.1.3:
|
||||||
|
version "0.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
|
||||||
|
integrity sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==
|
||||||
|
|
||||||
|
for-in@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||||
|
integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
|
||||||
|
|
||||||
|
for-own@^0.1.3:
|
||||||
|
version "0.1.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
|
||||||
|
integrity sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==
|
||||||
|
dependencies:
|
||||||
|
for-in "^1.0.1"
|
||||||
|
|
||||||
fraction.js@^4.2.0:
|
fraction.js@^4.2.0:
|
||||||
version "4.2.0"
|
version "4.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
|
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
|
||||||
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
|
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
|
||||||
|
|
||||||
|
fs-constants@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||||
|
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||||
|
|
||||||
|
fs-extra@^10.0.0:
|
||||||
|
version "10.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
|
||||||
|
integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.2.0"
|
||||||
|
jsonfile "^6.0.1"
|
||||||
|
universalify "^2.0.0"
|
||||||
|
|
||||||
fs-minipass@^2.0.0:
|
fs-minipass@^2.0.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
||||||
|
@ -1497,6 +1754,13 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3:
|
||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
has-symbols "^1.0.3"
|
has-symbols "^1.0.3"
|
||||||
|
|
||||||
|
get-stream@^5.1.0:
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
|
||||||
|
integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
|
||||||
|
dependencies:
|
||||||
|
pump "^3.0.0"
|
||||||
|
|
||||||
get-symbol-description@^1.0.0:
|
get-symbol-description@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
|
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
|
||||||
|
@ -1602,6 +1866,11 @@ gopd@^1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
get-intrinsic "^1.1.3"
|
get-intrinsic "^1.1.3"
|
||||||
|
|
||||||
|
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||||
|
version "4.2.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
||||||
|
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||||
|
|
||||||
graceful-fs@^4.2.4:
|
graceful-fs@^4.2.4:
|
||||||
version "4.2.10"
|
version "4.2.10"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
|
||||||
|
@ -1670,7 +1939,7 @@ hoist-non-react-statics@^3.3.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
react-is "^16.7.0"
|
react-is "^16.7.0"
|
||||||
|
|
||||||
https-proxy-agent@^5.0.0:
|
https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
|
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
|
||||||
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
|
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
|
||||||
|
@ -1678,6 +1947,11 @@ https-proxy-agent@^5.0.0:
|
||||||
agent-base "6"
|
agent-base "6"
|
||||||
debug "4"
|
debug "4"
|
||||||
|
|
||||||
|
ieee754@^1.1.13:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||||
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||||
|
|
||||||
ignore@^5.2.0:
|
ignore@^5.2.0:
|
||||||
version "5.2.4"
|
version "5.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
|
||||||
|
@ -1704,7 +1978,7 @@ inflight@^1.0.4:
|
||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@2, inherits@^2.0.3:
|
inherits@2, inherits@^2.0.3, inherits@^2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
|
@ -1762,6 +2036,11 @@ is-boolean-object@^1.1.0:
|
||||||
call-bind "^1.0.2"
|
call-bind "^1.0.2"
|
||||||
has-tostringtag "^1.0.0"
|
has-tostringtag "^1.0.0"
|
||||||
|
|
||||||
|
is-buffer@^1.0.2, is-buffer@^1.1.5:
|
||||||
|
version "1.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||||
|
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
||||||
|
|
||||||
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
|
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
|
||||||
version "1.2.7"
|
version "1.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
|
||||||
|
@ -1786,6 +2065,11 @@ is-docker@^2.0.0, is-docker@^2.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
|
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
|
||||||
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
|
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
|
||||||
|
|
||||||
|
is-extendable@^0.1.1:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
|
||||||
|
integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
|
||||||
|
|
||||||
is-extglob@^2.1.1:
|
is-extglob@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
|
@ -1830,6 +2114,13 @@ is-path-inside@^3.0.3:
|
||||||
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
|
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
|
||||||
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
|
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
|
||||||
|
|
||||||
|
is-plain-object@^2.0.1:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
|
||||||
|
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
|
||||||
|
dependencies:
|
||||||
|
isobject "^3.0.1"
|
||||||
|
|
||||||
is-regex@^1.1.4:
|
is-regex@^1.1.4:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
|
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
|
||||||
|
@ -1912,6 +2203,11 @@ isexe@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||||
|
|
||||||
|
isobject@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||||
|
integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
|
||||||
|
|
||||||
jose@^4.10.0, jose@^4.9.3:
|
jose@^4.10.0, jose@^4.9.3:
|
||||||
version "4.11.2"
|
version "4.11.2"
|
||||||
resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.2.tgz#d9699307c02e18ff56825843ba90e2fae9f09e23"
|
resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.2.tgz#d9699307c02e18ff56825843ba90e2fae9f09e23"
|
||||||
|
@ -1956,6 +2252,15 @@ json5@^1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
|
|
||||||
|
jsonfile@^6.0.1:
|
||||||
|
version "6.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
|
||||||
|
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
|
||||||
|
dependencies:
|
||||||
|
universalify "^2.0.0"
|
||||||
|
optionalDependencies:
|
||||||
|
graceful-fs "^4.1.6"
|
||||||
|
|
||||||
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
|
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
|
||||||
version "3.3.3"
|
version "3.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
|
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
|
||||||
|
@ -1964,6 +2269,20 @@ json5@^1.0.1:
|
||||||
array-includes "^3.1.5"
|
array-includes "^3.1.5"
|
||||||
object.assign "^4.1.3"
|
object.assign "^4.1.3"
|
||||||
|
|
||||||
|
kind-of@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
|
||||||
|
integrity sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==
|
||||||
|
dependencies:
|
||||||
|
is-buffer "^1.0.2"
|
||||||
|
|
||||||
|
kind-of@^3.0.2:
|
||||||
|
version "3.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
|
||||||
|
integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
|
||||||
|
dependencies:
|
||||||
|
is-buffer "^1.1.5"
|
||||||
|
|
||||||
language-subtag-registry@~0.3.2:
|
language-subtag-registry@~0.3.2:
|
||||||
version "0.3.22"
|
version "0.3.22"
|
||||||
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
|
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
|
||||||
|
@ -1976,6 +2295,16 @@ language-tags@=1.0.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
language-subtag-registry "~0.3.2"
|
language-subtag-registry "~0.3.2"
|
||||||
|
|
||||||
|
lazy-cache@^0.2.3:
|
||||||
|
version "0.2.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
|
||||||
|
integrity sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==
|
||||||
|
|
||||||
|
lazy-cache@^1.0.3:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
|
||||||
|
integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==
|
||||||
|
|
||||||
levn@^0.4.1:
|
levn@^0.4.1:
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
|
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
|
||||||
|
@ -2032,6 +2361,15 @@ memoize-one@^6.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||||
|
|
||||||
|
merge-deep@^3.0.1:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.3.tgz#1a2b2ae926da8b2ae93a0ac15d90cd1922766003"
|
||||||
|
integrity sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==
|
||||||
|
dependencies:
|
||||||
|
arr-union "^3.1.0"
|
||||||
|
clone-deep "^0.2.4"
|
||||||
|
kind-of "^3.0.2"
|
||||||
|
|
||||||
merge2@^1.3.0, merge2@^1.4.1:
|
merge2@^1.3.0, merge2@^1.4.1:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
|
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
|
||||||
|
@ -2077,6 +2415,24 @@ minizlib@^2.1.1:
|
||||||
minipass "^3.0.0"
|
minipass "^3.0.0"
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
|
mitt@3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd"
|
||||||
|
integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==
|
||||||
|
|
||||||
|
mixin-object@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
|
||||||
|
integrity sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==
|
||||||
|
dependencies:
|
||||||
|
for-in "^0.1.3"
|
||||||
|
is-extendable "^0.1.1"
|
||||||
|
|
||||||
|
mkdirp-classic@^0.5.2:
|
||||||
|
version "0.5.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
|
||||||
|
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
|
||||||
|
|
||||||
mkdirp@^1.0.3:
|
mkdirp@^1.0.3:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||||
|
@ -2147,7 +2503,14 @@ node-addon-api@^5.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762"
|
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762"
|
||||||
integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==
|
integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==
|
||||||
|
|
||||||
node-fetch@^2.6.7:
|
node-fetch@2.6.7:
|
||||||
|
version "2.6.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||||
|
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||||
|
dependencies:
|
||||||
|
whatwg-url "^5.0.0"
|
||||||
|
|
||||||
|
node-fetch@^2.6.0, node-fetch@^2.6.7:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
|
||||||
integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
|
integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
|
||||||
|
@ -2274,7 +2637,7 @@ oidc-token-hash@^5.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6"
|
resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6"
|
||||||
integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==
|
integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==
|
||||||
|
|
||||||
once@^1.3.0:
|
once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
|
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
|
||||||
|
@ -2368,6 +2731,11 @@ path-type@^4.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||||
|
|
||||||
|
pend@~1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||||
|
integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
|
||||||
|
|
||||||
picocolors@^1.0.0:
|
picocolors@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||||
|
@ -2383,18 +2751,6 @@ pify@^2.3.0:
|
||||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||||
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
|
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
|
||||||
|
|
||||||
playwright-core@1.31.2:
|
|
||||||
version "1.31.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.31.2.tgz#debf4b215d14cb619adb7e511c164d068075b2ed"
|
|
||||||
integrity sha512-a1dFgCNQw4vCsG7bnojZjDnPewZcw7tZUNFN0ZkcLYKj+mPmXvg4MpaaKZ5SgqPsOmqIf2YsVRkgqiRDxD+fDQ==
|
|
||||||
|
|
||||||
playwright@^1.31.2:
|
|
||||||
version "1.31.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.31.2.tgz#4252280586c596746122cd1fdf9f8ff6a63fa852"
|
|
||||||
integrity sha512-jpC47n2PKQNtzB7clmBuWh6ftBRS/Bt5EGLigJ9k2QAKcNeYXZkEaDH5gmvb6+AbcE0DO6GnXdbl9ogG6Eh+og==
|
|
||||||
dependencies:
|
|
||||||
playwright-core "1.31.2"
|
|
||||||
|
|
||||||
postcss-import@^14.1.0:
|
postcss-import@^14.1.0:
|
||||||
version "14.1.0"
|
version "14.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0"
|
resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0"
|
||||||
|
@ -2486,6 +2842,11 @@ prisma@^4.9.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
"@prisma/engines" "4.9.0"
|
"@prisma/engines" "4.9.0"
|
||||||
|
|
||||||
|
progress@2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||||
|
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||||
|
|
||||||
prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1:
|
prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1:
|
||||||
version "15.8.1"
|
version "15.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||||
|
@ -2495,11 +2856,108 @@ prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1:
|
||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
react-is "^16.13.1"
|
react-is "^16.13.1"
|
||||||
|
|
||||||
|
proxy-from-env@1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
||||||
|
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
|
||||||
|
|
||||||
|
pump@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||||
|
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
|
||||||
|
dependencies:
|
||||||
|
end-of-stream "^1.1.0"
|
||||||
|
once "^1.3.1"
|
||||||
|
|
||||||
punycode@^2.1.0:
|
punycode@^2.1.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
|
||||||
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
|
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
|
||||||
|
|
||||||
|
puppeteer-core@19.8.0:
|
||||||
|
version "19.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-19.8.0.tgz#0152f652a64274f93f681b52ed03baf7de7905dd"
|
||||||
|
integrity sha512-5gBkLR9nae7chWDhI3mpj5QA+hPmjEOW29qw5ap5g51Uo5Lxe5Yip1uyQwZSjg5Wn/eyE9grh2Lyx3m8rPK90A==
|
||||||
|
dependencies:
|
||||||
|
chromium-bidi "0.4.5"
|
||||||
|
cross-fetch "3.1.5"
|
||||||
|
debug "4.3.4"
|
||||||
|
devtools-protocol "0.0.1107588"
|
||||||
|
extract-zip "2.0.1"
|
||||||
|
https-proxy-agent "5.0.1"
|
||||||
|
proxy-from-env "1.1.0"
|
||||||
|
tar-fs "2.1.1"
|
||||||
|
unbzip2-stream "1.4.3"
|
||||||
|
ws "8.13.0"
|
||||||
|
|
||||||
|
puppeteer-extra-plugin-adblocker@^2.13.6:
|
||||||
|
version "2.13.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-extra-plugin-adblocker/-/puppeteer-extra-plugin-adblocker-2.13.6.tgz#99828243579b59ed81e8b1da23d16a3a0dbae557"
|
||||||
|
integrity sha512-AftgnUZ1rg2RPe9RpX6rkYAxEohwp3iFeGIyjsAuTaIiw4VLZqOb1LSY8/S60vAxpeat60fbCajxoUetmLy4Dw==
|
||||||
|
dependencies:
|
||||||
|
"@cliqz/adblocker-puppeteer" "1.23.8"
|
||||||
|
debug "^4.1.1"
|
||||||
|
node-fetch "^2.6.0"
|
||||||
|
puppeteer-extra-plugin "^3.2.3"
|
||||||
|
|
||||||
|
puppeteer-extra-plugin-stealth@^2.11.2:
|
||||||
|
version "2.11.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz#bd3f5a1781cac8a98c983d148086585a84fcc8f1"
|
||||||
|
integrity sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.1"
|
||||||
|
puppeteer-extra-plugin "^3.2.3"
|
||||||
|
puppeteer-extra-plugin-user-preferences "^2.4.1"
|
||||||
|
|
||||||
|
puppeteer-extra-plugin-user-data-dir@^2.4.1:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz#4ea9d56d20455672a54fe086309a102a5126411c"
|
||||||
|
integrity sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.1"
|
||||||
|
fs-extra "^10.0.0"
|
||||||
|
puppeteer-extra-plugin "^3.2.3"
|
||||||
|
rimraf "^3.0.2"
|
||||||
|
|
||||||
|
puppeteer-extra-plugin-user-preferences@^2.4.1:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz#db8ec63c04a6a10a8f8997e15fdffdf13272161d"
|
||||||
|
integrity sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.1"
|
||||||
|
deepmerge "^4.2.2"
|
||||||
|
puppeteer-extra-plugin "^3.2.3"
|
||||||
|
puppeteer-extra-plugin-user-data-dir "^2.4.1"
|
||||||
|
|
||||||
|
puppeteer-extra-plugin@^3.2.3:
|
||||||
|
version "3.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz#50c9f0749c005bbc7b8b208bcd00a9d46a15b585"
|
||||||
|
integrity sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==
|
||||||
|
dependencies:
|
||||||
|
"@types/debug" "^4.1.0"
|
||||||
|
debug "^4.1.1"
|
||||||
|
merge-deep "^3.0.1"
|
||||||
|
|
||||||
|
puppeteer-extra@^3.3.6:
|
||||||
|
version "3.3.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz#fc16ff396aae52664842da9a557ea8fa51eaa8b7"
|
||||||
|
integrity sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==
|
||||||
|
dependencies:
|
||||||
|
"@types/debug" "^4.1.0"
|
||||||
|
debug "^4.1.1"
|
||||||
|
deepmerge "^4.2.2"
|
||||||
|
|
||||||
|
puppeteer@^19.8.0:
|
||||||
|
version "19.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-19.8.0.tgz#2d2225fb24ba6813cd31304d41c6b8340c9f3582"
|
||||||
|
integrity sha512-MpQClmttCUxv4bVokX/YSXLCU12CUApuRf0rIJyGknYcIrDQNkLUx1N7hNt88Ya4lq9VDsdiDEJ3bcPijqJYPQ==
|
||||||
|
dependencies:
|
||||||
|
cosmiconfig "8.1.3"
|
||||||
|
https-proxy-agent "5.0.1"
|
||||||
|
progress "2.0.3"
|
||||||
|
proxy-from-env "1.1.0"
|
||||||
|
puppeteer-core "19.8.0"
|
||||||
|
|
||||||
queue-microtask@^1.2.2:
|
queue-microtask@^1.2.2:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||||
|
@ -2562,6 +3020,15 @@ read-cache@^1.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
pify "^2.3.0"
|
pify "^2.3.0"
|
||||||
|
|
||||||
|
readable-stream@^3.1.1, readable-stream@^3.4.0:
|
||||||
|
version "3.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
|
||||||
|
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
|
||||||
|
dependencies:
|
||||||
|
inherits "^2.0.3"
|
||||||
|
string_decoder "^1.1.1"
|
||||||
|
util-deprecate "^1.0.1"
|
||||||
|
|
||||||
readable-stream@^3.6.0:
|
readable-stream@^3.6.0:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||||
|
@ -2677,6 +3144,16 @@ set-blocking@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
|
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
|
||||||
|
|
||||||
|
shallow-clone@^0.1.2:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
|
||||||
|
integrity sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==
|
||||||
|
dependencies:
|
||||||
|
is-extendable "^0.1.1"
|
||||||
|
kind-of "^2.0.1"
|
||||||
|
lazy-cache "^0.2.3"
|
||||||
|
mixin-object "^2.0.1"
|
||||||
|
|
||||||
shebang-command@^2.0.0:
|
shebang-command@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||||
|
@ -2868,6 +3345,27 @@ tapable@^2.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
||||||
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
||||||
|
|
||||||
|
tar-fs@2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
|
||||||
|
integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
|
||||||
|
dependencies:
|
||||||
|
chownr "^1.1.1"
|
||||||
|
mkdirp-classic "^0.5.2"
|
||||||
|
pump "^3.0.0"
|
||||||
|
tar-stream "^2.1.4"
|
||||||
|
|
||||||
|
tar-stream@^2.1.4:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
|
||||||
|
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
|
||||||
|
dependencies:
|
||||||
|
bl "^4.0.3"
|
||||||
|
end-of-stream "^1.4.1"
|
||||||
|
fs-constants "^1.0.0"
|
||||||
|
inherits "^2.0.3"
|
||||||
|
readable-stream "^3.1.1"
|
||||||
|
|
||||||
tar@^6.1.11:
|
tar@^6.1.11:
|
||||||
version "6.1.13"
|
version "6.1.13"
|
||||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b"
|
||||||
|
@ -2885,6 +3383,11 @@ text-table@^0.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
||||||
|
|
||||||
|
through@^2.3.8:
|
||||||
|
version "2.3.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
|
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
|
||||||
|
|
||||||
tiny-glob@^0.2.9:
|
tiny-glob@^0.2.9:
|
||||||
version "0.2.9"
|
version "0.2.9"
|
||||||
resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
|
resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
|
||||||
|
@ -2893,6 +3396,18 @@ tiny-glob@^0.2.9:
|
||||||
globalyzer "0.1.0"
|
globalyzer "0.1.0"
|
||||||
globrex "^0.1.2"
|
globrex "^0.1.2"
|
||||||
|
|
||||||
|
tldts-core@^5.7.112:
|
||||||
|
version "5.7.112"
|
||||||
|
resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.7.112.tgz#168459aa79495f5d46407a685a7a9f0cdc9a272b"
|
||||||
|
integrity sha512-mutrEUgG2sp0e/MIAnv9TbSLR0IPbvmAImpzqul5O/HJ2XM1/I1sajchQ/fbj0fPdA31IiuWde8EUhfwyldY1Q==
|
||||||
|
|
||||||
|
tldts-experimental@^5.6.21:
|
||||||
|
version "5.7.112"
|
||||||
|
resolved "https://registry.yarnpkg.com/tldts-experimental/-/tldts-experimental-5.7.112.tgz#6a44be12811161e7daf2e89950563b8e7da94ed1"
|
||||||
|
integrity sha512-Nq5qWN4OiLziAOOOEoSME7cZI4Hz8Srt+9q6cl8mZ5EAhCfmeE6l7K5XjuIKN+pySuGUvthE5aPiD185YU1/lg==
|
||||||
|
dependencies:
|
||||||
|
tldts-core "^5.7.112"
|
||||||
|
|
||||||
to-fast-properties@^2.0.0:
|
to-fast-properties@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
||||||
|
@ -2973,6 +3488,19 @@ unbox-primitive@^1.0.2:
|
||||||
has-symbols "^1.0.3"
|
has-symbols "^1.0.3"
|
||||||
which-boxed-primitive "^1.0.2"
|
which-boxed-primitive "^1.0.2"
|
||||||
|
|
||||||
|
unbzip2-stream@1.4.3:
|
||||||
|
version "1.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
|
||||||
|
integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.2.1"
|
||||||
|
through "^2.3.8"
|
||||||
|
|
||||||
|
universalify@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
|
||||||
|
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
||||||
|
|
||||||
update-browserslist-db@^1.0.9:
|
update-browserslist-db@^1.0.9:
|
||||||
version "1.0.10"
|
version "1.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
|
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
|
||||||
|
@ -3078,6 +3606,11 @@ wrappy@1:
|
||||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
||||||
|
|
||||||
|
ws@8.13.0:
|
||||||
|
version "8.13.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
|
||||||
|
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
|
||||||
|
|
||||||
xtend@^4.0.2:
|
xtend@^4.0.2:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||||
|
@ -3093,6 +3626,14 @@ yaml@^1.10.0, yaml@^1.10.2:
|
||||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||||
|
|
||||||
|
yauzl@^2.10.0:
|
||||||
|
version "2.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
||||||
|
integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
|
||||||
|
dependencies:
|
||||||
|
buffer-crc32 "~0.2.3"
|
||||||
|
fd-slicer "~1.1.0"
|
||||||
|
|
||||||
yocto-queue@^0.1.0:
|
yocto-queue@^0.1.0:
|
||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||||
|
|