mirror of
https://github.com/DefectingCat/DefectingCat.github.io
synced 2025-07-16 01:01:38 +00:00
Add comment component
* add in browser view hook
This commit is contained in:
7
components/loading/PostCommentLoading.tsx
Normal file
7
components/loading/PostCommentLoading.tsx
Normal file
@ -0,0 +1,7 @@
|
||||
import React from 'react';
|
||||
|
||||
const PostCommentLoading = () => {
|
||||
return <div>loading...</div>;
|
||||
};
|
||||
|
||||
export default PostCommentLoading;
|
56
components/post/PostComment.tsx
Normal file
56
components/post/PostComment.tsx
Normal file
@ -0,0 +1,56 @@
|
||||
import { FC, useCallback, useEffect, useState } from 'react';
|
||||
import { Giscus } from '@giscus/react';
|
||||
import dynamic from 'next/dynamic';
|
||||
import cn from 'classnames';
|
||||
import useDarkMode from '../../lib/hooks/useDarkMode';
|
||||
|
||||
const PostCommentLoading = dynamic(
|
||||
() => import('components/loading/PostCommentLoading')
|
||||
);
|
||||
|
||||
const ready = /\[iFrameSizer\]\iFrameResizer.*?\:init/;
|
||||
|
||||
const PostComment: FC = () => {
|
||||
const [commentLoaded, setCommentLoaded] = useState(false);
|
||||
const { isDark } = useDarkMode();
|
||||
|
||||
/**
|
||||
* Listen the window.parent.postMessage() from Giscus componenet.
|
||||
* When get the message, its mean Giscus component loading completed.
|
||||
*/
|
||||
const handleMessage = useCallback((event: MessageEvent) => {
|
||||
if (event.origin === 'https://giscus.app' && ready.test(event.data)) {
|
||||
setCommentLoaded(true);
|
||||
}
|
||||
// if (!(typeof event.data === 'object' && event.data.giscus)) return;
|
||||
// const giscusData = event.data.giscus;
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener('message', handleMessage);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('message', handleMessage);
|
||||
};
|
||||
}, [handleMessage]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={cn('mt-8', { hidden: !commentLoaded })}>
|
||||
<Giscus
|
||||
repo="DefectingCat/DefectingCat.github.io"
|
||||
repoId={process.env.REPO_ID ?? ''}
|
||||
categoryId={process.env.CATEGORY_ID ?? ''}
|
||||
category="Announcements"
|
||||
mapping="title"
|
||||
reactionsEnabled="1"
|
||||
emitMetadata="0"
|
||||
theme={isDark ? 'dark_dimmed' : 'light'}
|
||||
/>
|
||||
</div>
|
||||
{commentLoaded || <PostCommentLoading />}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default PostComment;
|
@ -8,16 +8,13 @@ interface Props {
|
||||
}
|
||||
|
||||
const PostIframe: FC<Props> = ({ src }) => {
|
||||
const { initSrc, blur, targetRef } = useLazyLoad(src);
|
||||
const { initSrc, targetRef } = useLazyLoad(src);
|
||||
const isLargerThan640 = useMediaQuery('(min-width: 640px)');
|
||||
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'rounded-md overflow-hidden',
|
||||
{
|
||||
blur: blur,
|
||||
},
|
||||
{ 'aspect-video': isLargerThan640 },
|
||||
{ 'aspect-square': !isLargerThan640 }
|
||||
)}
|
||||
|
25
lib/hooks/useInView.ts
Normal file
25
lib/hooks/useInView.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { useEffect, useRef, useState } from 'react';
|
||||
|
||||
const useInView = () => {
|
||||
const targetRef = useRef(null);
|
||||
const [inView, setInView] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const observer = new IntersectionObserver((entries, observer) => {
|
||||
entries.forEach((entry) => {
|
||||
if (entry.isIntersecting) {
|
||||
if (targetRef.current) {
|
||||
setInView(true);
|
||||
observer.unobserve(targetRef.current);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
targetRef.current && observer.observe(targetRef.current);
|
||||
}, []);
|
||||
|
||||
return { targetRef, inView };
|
||||
};
|
||||
|
||||
export default useInView;
|
@ -10,10 +10,14 @@
|
||||
"test:coverage": "CI=true yarn test --env=jsdom --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@giscus/react": "^1.0.1",
|
||||
"@mdx-js/loader": "^1.6.22",
|
||||
"@mdx-js/react": "^1.6.22",
|
||||
"@next/mdx": "^12.0.8",
|
||||
"algoliasearch": "^4.12.0",
|
||||
"classnames": "^2.3.1",
|
||||
"date-fns": "^2.28.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"highlight.js": "^11.3.1",
|
||||
"next": "12.0.8",
|
||||
"react": "^17.0.2",
|
||||
@ -33,10 +37,8 @@
|
||||
"remark-rehype": "^10.0.1",
|
||||
"remark-toc": "^8.0.1",
|
||||
"sharp": "^0.29.3",
|
||||
"unified": "^10.1.0",
|
||||
"strip-markdown": "^5.0.0",
|
||||
"classnames": "^2.3.1",
|
||||
"gray-matter": "^4.0.3"
|
||||
"unified": "^10.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@testing-library/jest-dom": "^5.16.1",
|
||||
@ -47,6 +49,7 @@
|
||||
"@types/react": "17.0.38",
|
||||
"@types/react-stickynode": "^4.0.0",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"dotenv": "^14.2.0",
|
||||
"eslint": "8.6.0",
|
||||
"eslint-config-next": "12.0.8",
|
||||
"jest": "^27.4.7",
|
||||
|
@ -3,11 +3,10 @@ import 'styles/rua.css';
|
||||
import type { AppProps } from 'next/app';
|
||||
import { NextPage } from 'next';
|
||||
import { ReactElement, ReactNode } from 'react';
|
||||
import useRouterLoading from 'lib/hooks/useRouteLoading';
|
||||
import Head from 'next/head';
|
||||
import { MDXProvider } from '@mdx-js/react';
|
||||
import dynamic from 'next/dynamic';
|
||||
import RUAStore from '../lib/store';
|
||||
import RUAStore from 'lib/store';
|
||||
|
||||
const H2 = dynamic(() => import('components/MDX/MDXH2'));
|
||||
|
||||
@ -26,7 +25,6 @@ type AppPropsWithLayout = AppProps & {
|
||||
|
||||
function MyApp({ Component, pageProps }: AppPropsWithLayout) {
|
||||
const getLayout = Component.getLayout ?? ((page) => page);
|
||||
const [loading] = useRouterLoading();
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -22,6 +22,7 @@ import Sticky from 'react-stickynode';
|
||||
import useMediaQuery from 'lib/hooks/useMediaQuery';
|
||||
import { useRUAContext } from 'lib/store';
|
||||
import Link from 'next/link';
|
||||
import useInView from 'lib/hooks/useInView';
|
||||
|
||||
const Button = dynamic(() => import('components/RUA/RUAButton'));
|
||||
const RUALink = dynamic(() => import('components/RUA/RUALink'));
|
||||
@ -30,6 +31,12 @@ const PostHeader = dynamic(() => import('components/post/PostHeader'));
|
||||
const PostImage = dynamic(() => import('components/post/PostImage'));
|
||||
const PostIframe = dynamic(() => import('components/post/PostIframe'));
|
||||
const Footer = dynamic(() => import('components/Footer'));
|
||||
const PostCommentLoading = dynamic(
|
||||
() => import('components/loading/PostCommentLoading')
|
||||
);
|
||||
const PostComment = dynamic(() => import('components/post/PostComment'), {
|
||||
loading: () => <PostCommentLoading />,
|
||||
});
|
||||
|
||||
const processedContent = unified()
|
||||
.use(remarkParse)
|
||||
@ -57,6 +64,8 @@ const processedContent = unified()
|
||||
});
|
||||
|
||||
const Post = ({ postData }: InferGetStaticPropsType<typeof getStaticProps>) => {
|
||||
const { targetRef, inView } = useInView();
|
||||
|
||||
const matched = useMediaQuery('(max-width: 640px)');
|
||||
const { state } = useRUAContext();
|
||||
const { backPath } = state;
|
||||
@ -125,6 +134,7 @@ const Post = ({ postData }: InferGetStaticPropsType<typeof getStaticProps>) => {
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<div ref={targetRef}>{inView && <PostComment />}</div>
|
||||
<Footer />
|
||||
</main>
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 25 KiB |
@ -1,4 +0,0 @@
|
||||
<svg width="283" height="64" viewBox="0 0 283 64" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
98
scripts/build-search.mjs
Normal file
98
scripts/build-search.mjs
Normal file
@ -0,0 +1,98 @@
|
||||
import { config } from 'dotenv';
|
||||
import algoliasearch from 'algoliasearch/lite.js';
|
||||
import { readdir, readFile } from 'fs/promises';
|
||||
import { join } from 'path';
|
||||
import matter from 'gray-matter';
|
||||
import { remark } from 'remark';
|
||||
import strip from 'strip-markdown';
|
||||
|
||||
const postsDirectory = join(process.cwd(), 'public/posts');
|
||||
|
||||
/**
|
||||
* Get all sorted posts
|
||||
* @returns
|
||||
*/
|
||||
async function getSortedPostsData() {
|
||||
// Get file names under /posts
|
||||
const fileNames = await readdir(postsDirectory);
|
||||
const allPostsData = await Promise.all(
|
||||
fileNames.map(async (fileName) => {
|
||||
// Remove ".md" from file name to get id
|
||||
const id = fileName.replace(/\.md$/, '');
|
||||
|
||||
// Read markdown file as string
|
||||
const fullPath = join(postsDirectory, fileName);
|
||||
const fileContents = await readFile(fullPath, 'utf8');
|
||||
|
||||
// Use gray-matter to parse the post metadata section
|
||||
const matterResult = matter(fileContents);
|
||||
|
||||
// Process markdown to plain text
|
||||
const contentText = await remark()
|
||||
.use(strip)
|
||||
.process(matterResult.content);
|
||||
|
||||
// Combine the data with the id
|
||||
return {
|
||||
objectID: id,
|
||||
id,
|
||||
// Add post description
|
||||
desc: `${contentText.toString().slice(0, 100)}...`,
|
||||
...{
|
||||
...matterResult.data,
|
||||
date: matterResult.data.date.toISOString(),
|
||||
},
|
||||
};
|
||||
})
|
||||
);
|
||||
|
||||
// Sort posts by date
|
||||
return allPostsData.sort(({ date: a }, { date: b }) => {
|
||||
if (a < b) {
|
||||
return 1;
|
||||
} else if (a > b) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
(async function () {
|
||||
// initialize environment variables
|
||||
config();
|
||||
|
||||
if (
|
||||
!process.env.NEXT_PUBLIC_ALGOLIA_APP_ID &&
|
||||
!process.env.ALGOLIA_SEARCH_ADMIN_KEY
|
||||
) {
|
||||
return console.log('API key not found!');
|
||||
}
|
||||
|
||||
try {
|
||||
const posts = await getSortedPostsData();
|
||||
|
||||
// initialize the client with your environment variables
|
||||
const client = algoliasearch(
|
||||
process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,
|
||||
process.env.ALGOLIA_SEARCH_ADMIN_KEY
|
||||
);
|
||||
|
||||
// initialize the index with your index name
|
||||
const index = client.initIndex('rua');
|
||||
|
||||
// save the objects!
|
||||
const algoliaResponse = await index.replaceAllObjects(posts);
|
||||
|
||||
// check the output of the response in the console
|
||||
console.log(
|
||||
`🎉 Sucessfully added ${
|
||||
algoliaResponse.objectIDs.length
|
||||
} records to Algolia search. Object IDs:\n${algoliaResponse.objectIDs.join(
|
||||
'\n'
|
||||
)}`
|
||||
);
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
})();
|
158
yarn.lock
158
yarn.lock
@ -2,6 +2,110 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@algolia/cache-browser-local-storage@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/download/@algolia/cache-browser-local-storage-4.12.0.tgz#1f873e4f28a39d25b0a589ebe8f826509458e1fb"
|
||||
integrity sha512-l+G560B6N1k0rIcOjTO1yCzFUbg2Zy2HCii9s03e13jGgqduVQmk79UUCYszjsJ5GPJpUEKcVEtAIpP7tjsXVA==
|
||||
dependencies:
|
||||
"@algolia/cache-common" "4.12.0"
|
||||
|
||||
"@algolia/cache-common@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/cache-common/download/@algolia/cache-common-4.12.0.tgz#c1111a4d3e9ba2d52cadb4523152580db0887293"
|
||||
integrity sha512-2Z8BV+NX7oN7RmmQbLqmW8lfN9aAjOexX1FJjzB0YfKC9ifpi9Jl4nSxlnbU+iLR6QhHo0IfuyQ7wcnucCGCGQ==
|
||||
|
||||
"@algolia/cache-in-memory@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/cache-in-memory/download/@algolia/cache-in-memory-4.12.0.tgz#f4bdcbf8a6419f0166cfc7ef5594af871741e29e"
|
||||
integrity sha512-b6ANkZF6vGAo+sYv6g25W5a0u3o6F549gEAgtTDTVA1aHcdWwe/HG/dTJ7NsnHbuR+A831tIwnNYQjRp3/V/Jw==
|
||||
dependencies:
|
||||
"@algolia/cache-common" "4.12.0"
|
||||
|
||||
"@algolia/client-account@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-account/download/@algolia/client-account-4.12.0.tgz#b28445b47e2abf81dc76982d16ba8458f5c99521"
|
||||
integrity sha512-gzXN75ZydNheNXUN3epS+aLsKnB/PHFVlGUUjXL8WHs4lJP3B5FtHvaA/NCN5DsM3aamhuY5p0ff1XIA+Lbcrw==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.12.0"
|
||||
"@algolia/client-search" "4.12.0"
|
||||
"@algolia/transporter" "4.12.0"
|
||||
|
||||
"@algolia/client-analytics@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-analytics/download/@algolia/client-analytics-4.12.0.tgz#470f115517256c92a5605ae95762531c7906ec74"
|
||||
integrity sha512-rO2cZCt00Opk66QBZb7IBGfCq4ZE3EiuGkXssf2Monb5urujy0r8CknK2i7bzaKtPbd2vlvhmLP4CEHQqF6SLQ==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.12.0"
|
||||
"@algolia/client-search" "4.12.0"
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
"@algolia/transporter" "4.12.0"
|
||||
|
||||
"@algolia/client-common@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-common/download/@algolia/client-common-4.12.0.tgz#402395e2cffad89188d76b83615acffb3e45e658"
|
||||
integrity sha512-fcrFN7FBmxiSyjeu3sF4OnPkC1l7/8oyQ8RMM8CHpVY8cad6/ay35MrfRfgfqdzdFA8LzcBYO7fykuJv0eOqxw==
|
||||
dependencies:
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
"@algolia/transporter" "4.12.0"
|
||||
|
||||
"@algolia/client-personalization@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-personalization/download/@algolia/client-personalization-4.12.0.tgz#09c89c1558a91db3bfa60d17f7258ae63861352b"
|
||||
integrity sha512-wCJfSQEmX6ZOuJBJGjy+sbXiW0iy7tMNAhsVMV9RRaJE4727e5WAqwFWZssD877WQ74+/nF/VyTaB1+wejo33Q==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.12.0"
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
"@algolia/transporter" "4.12.0"
|
||||
|
||||
"@algolia/client-search@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-search/download/@algolia/client-search-4.12.0.tgz#ac099ee9f8de85ec204d840bcac734224c7d150c"
|
||||
integrity sha512-ik6dswcTQtOdZN+8aKntI9X2E6Qpqjtyda/+VANiHThY9GD2PBXuNuuC2HvlF26AbBYp5xaSE/EKxn1DIiIJ4Q==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.12.0"
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
"@algolia/transporter" "4.12.0"
|
||||
|
||||
"@algolia/logger-common@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/logger-common/download/@algolia/logger-common-4.12.0.tgz#0f9dbe7ace88194b395a2cb958490eb47ac91f8e"
|
||||
integrity sha512-V//9rzLdJujA3iZ/tPhmKR/m2kjSZrymxOfUiF3024u2/7UyOpH92OOCrHUf023uMGYHRzyhBz5ESfL1oCdh7g==
|
||||
|
||||
"@algolia/logger-console@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/logger-console/download/@algolia/logger-console-4.12.0.tgz#a40edeb989bf0d7ff79d989171dad64cd0f01225"
|
||||
integrity sha512-pHvoGv53KXRIJHLk9uxBwKirwEo12G9+uo0sJLWESThAN3v5M+ycliU1AkUXQN8+9rds2KxfULAb+vfyfBKf8A==
|
||||
dependencies:
|
||||
"@algolia/logger-common" "4.12.0"
|
||||
|
||||
"@algolia/requester-browser-xhr@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/requester-browser-xhr/download/@algolia/requester-browser-xhr-4.12.0.tgz#64e8e4d4f0724e477421454215195400351cfe61"
|
||||
integrity sha512-rGlHNMM3jIZBwSpz33CVkeXHilzuzHuFXEEW1icP/k3KW7kwBrKFJwBy42RzAJa5BYlLsTCFTS3xkPhYwTQKLg==
|
||||
dependencies:
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
|
||||
"@algolia/requester-common@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/requester-common/download/@algolia/requester-common-4.12.0.tgz#b4d96f3cbd73206b6042e523d414a34cc005c2e2"
|
||||
integrity sha512-qgfdc73nXqpVyOMr6CMTx3nXvud9dP6GcMGDqPct+fnxogGcJsp24cY2nMqUrAfgmTJe9Nmy7Lddv0FyHjONMg==
|
||||
|
||||
"@algolia/requester-node-http@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/requester-node-http/download/@algolia/requester-node-http-4.12.0.tgz#8d8e1b67edbaec8e8e8b8c7c606945b969667267"
|
||||
integrity sha512-mOTRGf/v/dXshBoZKNhMG00ZGxoUH9QdSpuMKYnuWwIgstN24uj3DQx+Ho3c+uq0TYfq7n2v71uoJWuiW32NMQ==
|
||||
dependencies:
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
|
||||
"@algolia/transporter@4.12.0":
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/@algolia/transporter/download/@algolia/transporter-4.12.0.tgz#e375e10731df95f1be3593b32e86b5c6452cc213"
|
||||
integrity sha512-MOQVHZ4BcBpf3LtOY/3fqXHAcvI8MahrXDHk9QrBE/iGensQhDiZby5Dn3o2JN/zd9FMnVbdPQ8gnkiMwZiakQ==
|
||||
dependencies:
|
||||
"@algolia/cache-common" "4.12.0"
|
||||
"@algolia/logger-common" "4.12.0"
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
|
||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
|
||||
@ -381,6 +485,13 @@
|
||||
minimatch "^3.0.4"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@giscus/react@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@giscus/react/download/@giscus/react-1.0.1.tgz#3fae2b5e00912a76cb136679f6229d3d6ea28898"
|
||||
integrity sha512-vViRGjfmDy9xvRIx+6+hocL3iAipbKx4gxtSpQBzOksDwnZS0QbB+r19bYQ08vw8CfHRwE6ws8AOO9yEUrzUyQ==
|
||||
dependencies:
|
||||
iframe-resizer-react "^1.1.0"
|
||||
|
||||
"@humanwhocodes/config-array@^0.9.2":
|
||||
version "0.9.2"
|
||||
resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/download/@humanwhocodes/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914"
|
||||
@ -1108,6 +1219,26 @@ ajv@^6.10.0, ajv@^6.12.4:
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
algoliasearch@^4.12.0:
|
||||
version "4.12.0"
|
||||
resolved "https://registry.npmmirror.com/algoliasearch/download/algoliasearch-4.12.0.tgz#30f2619b6e3a5b79b6aa0f18ab66fbce88240aba"
|
||||
integrity sha512-fZOMMm+F3Bi5M/MoFIz7hiuyCitJza0Hu+r8Wzz4LIQClC6YGMRq7kT6NNU1fSSoFDSeJIwMfedbbi5G9dJoVQ==
|
||||
dependencies:
|
||||
"@algolia/cache-browser-local-storage" "4.12.0"
|
||||
"@algolia/cache-common" "4.12.0"
|
||||
"@algolia/cache-in-memory" "4.12.0"
|
||||
"@algolia/client-account" "4.12.0"
|
||||
"@algolia/client-analytics" "4.12.0"
|
||||
"@algolia/client-common" "4.12.0"
|
||||
"@algolia/client-personalization" "4.12.0"
|
||||
"@algolia/client-search" "4.12.0"
|
||||
"@algolia/logger-common" "4.12.0"
|
||||
"@algolia/logger-console" "4.12.0"
|
||||
"@algolia/requester-browser-xhr" "4.12.0"
|
||||
"@algolia/requester-common" "4.12.0"
|
||||
"@algolia/requester-node-http" "4.12.0"
|
||||
"@algolia/transporter" "4.12.0"
|
||||
|
||||
ansi-colors@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.nlark.com/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
|
||||
@ -1979,6 +2110,11 @@ domexception@^2.0.1:
|
||||
dependencies:
|
||||
webidl-conversions "^5.0.0"
|
||||
|
||||
dotenv@^14.2.0:
|
||||
version "14.2.0"
|
||||
resolved "https://registry.npmmirror.com/dotenv/download/dotenv-14.2.0.tgz#7e77fd5dd6cff5942c4496e1acf2d0f37a9e67aa"
|
||||
integrity sha512-05POuPJyPpO6jqzTNweQFfAyMSD4qa4lvsMOWyTRTdpHKy6nnnN+IYWaXF+lHivhBH/ufDKlR4IWCAN3oPnHuw==
|
||||
|
||||
electron-to-chromium@^1.4.17:
|
||||
version "1.4.45"
|
||||
resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.45.tgz#cf1144091d6683cbd45a231954a745f02fb24598"
|
||||
@ -2969,6 +3105,19 @@ ieee754@^1.1.13:
|
||||
resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=
|
||||
|
||||
iframe-resizer-react@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.nlark.com/iframe-resizer-react/download/iframe-resizer-react-1.1.0.tgz#5009e019b7a5c7f1c009bff5bcdf0dbf33557465"
|
||||
integrity sha1-UAngGbelx/HACb/1vN8NvzNVdGU=
|
||||
dependencies:
|
||||
iframe-resizer "^4.3.0"
|
||||
warning "^4.0.3"
|
||||
|
||||
iframe-resizer@^4.3.0:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.nlark.com/iframe-resizer/download/iframe-resizer-4.3.2.tgz#42dd88345d18b9e377b6044dddb98c664ab0ce6b"
|
||||
integrity sha1-Qt2INF0YueN3tgRN3bmMZkqwzms=
|
||||
|
||||
ignore@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
|
||||
@ -3924,7 +4073,7 @@ longest-streak@^3.0.0:
|
||||
resolved "https://registry.npmmirror.com/longest-streak/download/longest-streak-3.0.1.tgz?cache=0&sync_timestamp=1636446222992&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flongest-streak%2Fdownload%2Flongest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d"
|
||||
integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==
|
||||
|
||||
loose-envify@^1.1.0, loose-envify@^1.4.0:
|
||||
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.nlark.com/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=
|
||||
@ -6449,6 +6598,13 @@ walker@^1.0.7:
|
||||
dependencies:
|
||||
makeerror "1.0.12"
|
||||
|
||||
warning@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.nlark.com/warning/download/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
|
||||
integrity sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
web-namespaces@^1.0.0:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmmirror.com/web-namespaces/download/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec"
|
||||
|
Reference in New Issue
Block a user