all the things

This commit is contained in:
ingawei 2022-08-08 12:32:10 -07:00
parent 6382759e27
commit 7db3497bbe
13 changed files with 358 additions and 483 deletions

View File

@ -1,11 +1,24 @@
import { GROUP_CHAT_SLUG } from 'common/group'
export const CONTEST_DATA = {
'cause-exploration-prize': {
type Contest = {
link: string
description: string
submissionLink: string
fileName: string
closeTime: string
}
export let contest_data: { [name: string]: Contest } = {}
contest_data['cause-exploration-prize'] = {
link: 'https://www.causeexplorationprizes.com/',
description:
'Open Philanthropys contest to find ideas for the best ways to use their resources, with focus on new areas to support, health development, and worldview investigations.',
},
submissionLink:
'https://forum.effectivealtruism.org/topics/cause-exploration-prizes',
//name of file that stores json of submissions under lib/util/contests
fileName: 'causeExploration',
closeTime: '2022-09-01',
}
export const CONTEST_SLUGS = Object.keys(CONTEST_DATA)
export const CONTEST_SLUGS = Object.keys(contest_data)

View File

@ -40,6 +40,7 @@
"lodash": "4.17.21",
"mailgun-js": "0.22.0",
"module-alias": "2.2.2",
"puppeteer": "16.0.0",
"stripe": "8.194.0",
"zod": "3.17.2"
},

View File

@ -1,125 +0,0 @@
// Run with `npx ts-node src/scripts/scrape-ea.ts`
import * as cheerio from 'cheerio'
import * as fs from 'fs'
type Submission = {
title: string
author: string
// minuteRead: number
// postedAt: string
// amount: string
link?: string
}
function elToSubmission($: cheerio.Root, el: cheerio.Element): Submission {
const $el = $(el)
const title = $el.find('a>span>span').text().trim()
const author = $el.find('.PostsUserAndCoauthors-lengthLimited').text().trim()
const link = $el.find('a').attr('href')?.trim()
// const postedAt = $el.find('PostsItemDate-postedAt').text().trim()
// const date = $el.find('.grant-card__date').text().trim()
// const amount = $el.find('.grant-card__amount').text().trim()
// const areasOfInterest = $el
// .find('.area-of-interest__title')
// // Remove all leading and trailing whitespace
// .map((_, el) => $(el).text().trim())
// .get()
// .join('|')
// const link = $el.find('a.grant-card__link').attr('href')?.trim()
return {
title,
author,
link,
} as Submission
}
async function scrapeFtx() {
const resp = await fetch(
'https://forum.effectivealtruism.org/topics/cause-exploration-prizes'
)
const text = await resp.text()
const $ = cheerio.load(text)
const strip = (text: string) => text.replace(/'/g, '')
const toNum = (text: string) => Number(text.replace(/[^0-9.-]+/g, ''))
// Parse Grant objects from each <div class="grant-card"> using cheerio
const csvLines = [
// Add a header row
// 'title\tdescription\tdate\tamount\tareasOfInterest\tlink',
...$('div.PostsItem2-root')
.map((_, el) => elToSubmission($, el))
.get()
.map(
(submission) =>
// Join all attributes with tabs
`{ title: '${submission.title}',
author: '${submission.author}',
link: '${submission.link}',
}
`
),
]
console.log(csvLines.join('\n'))
fs.writeFileSync(
'../web/lib/util/ftx-grants.ts',
'export const grants = [\n' + csvLines.join('\n') + '\n]'
)
}
if (require.main === module) {
scrapeFtx().then(() => process.exit())
}
/*
Example html grant card, for reference:
<div class="grant-card" style="order: -1">
<div class="grant-card__date">
March 2022
</div>
<h2 class="grant-card__title">
Manifold Markets
</h2>
<div class="grant-card__description">
<p>This regrant will support Manifold Markets in building a play-money prediction market platform. The platform is also experimenting with impact certificates and charity prediction markets.</p>
</div>
<div class="grant-card__amount">
$1,000,000
</div>
<a href="https://manifold.markets/" class="grant-card__link">
manifold.markets </a>
<div class="grant-card__areas-of-interest">
<a href="https://ftx.tghp.co.uk/area-of-interest/#institution-epistemic-institutions" class="area-of-interest">
<div class="area-of-interest__icon">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 25.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill:#EF3C27;}
</style>
<g>
<path class="st0" d="M491.8,307.6c5.9-6.6,9.6-15.4,9.6-24.9c0-16.9-11.3-31.2-26.7-35.8V85.4h5.2c5.9,0,10.7-4.8,10.8-10.7v-64
C490.7,4.8,485.9,0,480,0H32.1c-5.9,0-10.7,4.8-10.7,10.7v64c0,5.9,4.8,10.7,10.7,10.7h64v30.6c-0.1,0.5-0.1,0.9-0.1,1.4
c0,0.5,0,1,0.1,1.4v94.5c0,5,3.5,9.4,8.4,10.5l149.2,32c0.8,0.1,1.5,0.2,2.3,0.2s1.5-0.1,2.4-0.2l149.3-32
c4.9-1.1,8.4-5.4,8.4-10.5V85.4h37.2v161.5c-15.4,4.6-26.7,18.9-26.7,35.8c0,9.6,3.6,18.3,9.6,24.9c-12.2,8.7-20.2,23-20.2,39.1
v90.6c0,5.9,4.8,10.7,10.7,10.7h74.6c5.9,0,10.7-4.8,10.8-10.7v-90.6C512,330.6,504,316.3,491.8,307.6z M42.8,21.3h426.5V64h-63.9
H106.8h-64V21.3z M256,234.4l-138.6-29.7v-76.7h277.2v76.7L256,234.4z M394.6,106.7H117.4V85.4h277.2V106.7z M448,282.7
c0-8.8,7.2-16,16-16c8.8,0,15.9,7.2,16,16c0,8.8-7.2,16-16,16C455.2,298.7,448,291.5,448,282.7z M490.7,426.6h-53.4v-79.9
c0-14.7,12-26.7,26.7-26.7c14.7,0,26.7,12,26.7,26.7V426.6z"></path>
<path class="st0" d="M351.9,447.9h-21.3c-5.9,0-10.7,4.8-10.7,10.7s4.8,10.7,10.7,10.7h21.3c5.9,0,10.7,4.8,10.7,10.7
c0,5.9-4.8,10.7-10.7,10.7h-74.6l-13-52.3c-0.5-1.9-1.4-3.5-2.8-4.9L72.9,244.9c-16.7-16.7-43.7-16.7-60.3,0
C4.6,253,0.1,263.6,0.1,275.1s4.5,22.1,12.5,30.2L201,493.7c1.4,1.4,3.2,2.4,5,2.8l59.6,14.8c1,0.3,2.1,0.5,3.3,0.5h83.1
c17.6,0,32-14.4,32-32C383.9,462.2,369.6,447.9,351.9,447.9z M65.4,327.8l30.1-30.1l15.1,15.1l-30.1,30.1L65.4,327.8z M21.4,275
c0-5.7,2.2-11,6.2-15c8.3-8.3,21.9-8.3,30.2,0l22.7,22.7l-30.1,30.1L27.6,290C23.6,285.9,21.4,280.6,21.4,275z M214.1,476.5
L95.6,357.9l30.1-30.1l118.5,118.5l10,40.2L214.1,476.5z"></path>
</g>
</svg>
</div>
<div class="area-of-interest__title">
Epistemic Institutions
</div>
</a>
</div>
</div>
*/

View File

@ -7,7 +7,8 @@
"outDir": "lib",
"sourceMap": true,
"strict": true,
"target": "es2017"
"target": "es2017",
"resolveJsonModule": true
},
"references": [
{

View File

@ -23,6 +23,17 @@ import { DEFAULT_CATEGORY_GROUPS } from 'common/categories'
import { Col } from './layout/col'
import SubmissionSearchFirestore from 'web/pages/submission-search-firestore'
import { SubmissionsGrid } from './submission/submission-list'
import { contest_data } from 'common/contest'
// All contest scraping data imports
import { default as causeExploration } from 'web/lib/util/contests/causeExploration.json'
import { getGroupBySlug } from 'web/lib/firebase/groups'
import { getContractFromId } from 'web/lib/firebase/contracts'
import { contractTextDetails } from './contract/contract-details'
import { createMarket } from 'web/lib/firebase/api'
import { removeUndefinedProps } from 'common/util/object'
import dayjs from 'dayjs'
import { useRouter } from 'next/router'
const searchClient = algoliasearch(
'GJQPAYENIF',
@ -52,11 +63,11 @@ export function SubmissionSearch(props: {
defaultFilter?: filter
shouldLoadFromStorage?: boolean
}
additionalFilter?: {
additionalFilter: {
creatorId?: string
tag?: string
excludeContractIds?: string[]
groupSlug?: string
contestSlug: string
}
highlightOptions?: ContractHighlightOptions
onContractClick?: (contract: Contract) => void
@ -80,25 +91,7 @@ export function SubmissionSearch(props: {
} = props
const user = useUser()
const memberGroups = (useMemberGroups(user?.id) ?? []).filter(
(group) => !NEW_USER_GROUP_SLUGS.includes(group.slug)
)
const memberGroupSlugs =
memberGroups.length > 0
? memberGroups.map((g) => g.slug)
: DEFAULT_CATEGORY_GROUPS.map((g) => g.slug)
const memberPillGroups = sortBy(
memberGroups.filter((group) => group.contractIds.length > 0),
(group) => group.contractIds.length
).reverse()
const defaultPillGroups = DEFAULT_CATEGORY_GROUPS as Group[]
const pillGroups =
memberPillGroups.length > 0 ? memberPillGroups : defaultPillGroups
const follows = useFollows(user?.id)
const router = useRouter()
const { shouldLoadFromStorage, defaultSort } = querySortOptions ?? {}
const { query, setQuery, sort, setSort } = useQueryAndSortParams({
@ -109,25 +102,13 @@ export function SubmissionSearch(props: {
const [filter, setFilter] = useState<filter>(
querySortOptions?.defaultFilter ?? 'open'
)
const pillsEnabled = !additionalFilter
const [pillFilter, setPillFilter] = useState<string | undefined>(undefined)
const selectPill = (pill: string | undefined) => () => {
setPillFilter(pill)
setPage(0)
track('select search category', { category: pill ?? 'all' })
}
const additionalFilters = [
additionalFilter?.creatorId
? `creatorId:${additionalFilter.creatorId}`
: '',
additionalFilter?.tag ? `lowercaseTags:${additionalFilter.tag}` : '',
additionalFilter?.groupSlug
? `groupLinks.slug:${additionalFilter.groupSlug}`
additionalFilter?.contestSlug
? `groupLinks.slug:${additionalFilter.contestSlug}`
: '',
]
let facetFilters = query
? additionalFilters
: [
@ -135,26 +116,6 @@ export function SubmissionSearch(props: {
filter === 'open' ? 'isResolved:false' : '',
filter === 'closed' ? 'isResolved:false' : '',
filter === 'resolved' ? 'isResolved:true' : '',
pillFilter && pillFilter !== 'personal' && pillFilter !== 'your-bets'
? `groupLinks.slug:${pillFilter}`
: '',
pillFilter === 'personal'
? // Show contracts in groups that the user is a member of
memberGroupSlugs
.map((slug) => `groupLinks.slug:${slug}`)
// Show contracts created by users the user follows
.concat(follows?.map((followId) => `creatorId:${followId}`) ?? [])
// Show contracts bet on by users the user follows
.concat(
follows?.map((followId) => `uniqueBettorIds:${followId}`) ?? []
)
: '',
// Subtract contracts you bet on from For you.
pillFilter === 'personal' && user ? `uniqueBettorIds:-${user.id}` : '',
pillFilter === 'your-bets' && user
? // Show contracts bet on by the user
`uniqueBettorIds:${user.id}`
: '',
].filter((f) => f)
// Hack to make Algolia work.
facetFilters = ['', ...facetFilters]
@ -250,6 +211,45 @@ export function SubmissionSearch(props: {
track('select sort', { sort: newSort })
}
const contestSlug = additionalFilter?.contestSlug
// Getting all submissions in a group and seeing if there's any new ones from the last scraping
// if so, creates new submission
async function syncSubmissions() {
let scrapedTitles = causeExploration.map((entry) => entry.title)
if (contestSlug) {
let group = await getGroupBySlug(contestSlug).catch((err) => {
return err
})
let questions: string[] = await Promise.all(
group.contractIds.map(async (contractId: string) => {
return (await getContractFromId(contractId))?.question
})
)
scrapedTitles.map(async (title) => {
if (!questions.includes(title)) {
// INGA/TODO: I don't know how to create a market, we should also be creating these markets under some like manifold account so that users aren't creating markets on their own when the backend updates. Pls help
// await createMarket(
// removeUndefinedProps({
// title,
// outcomeType: 'BINARY',
// initialProb: 50,
// groupId: group.id,
// closeTime: dayjs(
// contest_data[contestSlug].closeTime
// ).valueOf(),
// })
// )
}
})
}
}
syncSubmissions()
if (IS_PRIVATE_MANIFOLD || process.env.NEXT_PUBLIC_FIREBASE_EMULATE) {
return (
<SubmissionSearchFirestore
@ -296,56 +296,7 @@ export function SubmissionSearch(props: {
)}
</Row>
<Spacer h={3} />
{pillsEnabled && (
<Row className="scrollbar-hide items-start gap-2 overflow-x-auto">
<PillButton
key={'all'}
selected={pillFilter === undefined}
onSelect={selectPill(undefined)}
>
All
</PillButton>
<PillButton
key={'personal'}
selected={pillFilter === 'personal'}
onSelect={selectPill('personal')}
>
{user ? 'For you' : 'Featured'}
</PillButton>
{user && (
<PillButton
key={'your-bets'}
selected={pillFilter === 'your-bets'}
onSelect={selectPill('your-bets')}
>
Your bets
</PillButton>
)}
{pillGroups.map(({ name, slug }) => {
return (
<PillButton
key={slug}
selected={pillFilter === slug}
onSelect={selectPill(slug)}
>
{name}
</PillButton>
)
})}
</Row>
)}
<Spacer h={3} />
{filter === 'personal' &&
(follows ?? []).length === 0 &&
memberGroupSlugs.length === 0 ? (
<>You're not following anyone, nor in any of your own groups yet.</>
) : (
<Spacer h={4} />
<SubmissionsGrid
contracts={contracts}
loadMore={loadMore}
@ -355,8 +306,8 @@ export function SubmissionSearch(props: {
overrideGridClassName={overrideGridClassName}
highlightOptions={highlightOptions}
cardHideOptions={cardHideOptions}
contestSlug={contestSlug}
/>
)}
</Col>
)
}

View File

@ -2,7 +2,11 @@ import clsx from 'clsx'
import Link from 'next/link'
import { Row } from '../layout/row'
import { formatLargeNumber, formatPercent } from 'common/util/format'
import { contractPath, getBinaryProbPercent } from 'web/lib/firebase/contracts'
import {
contractPath,
getBinaryProbPercent,
submissionPath,
} from 'web/lib/firebase/contracts'
import { Col } from '../layout/col'
import {
BinaryContract,
@ -36,6 +40,15 @@ import { track } from '@amplitude/analytics-browser'
import { trackCallback } from 'web/lib/service/analytics'
import { formatNumericProbability } from 'common/pseudo-numeric'
import { Title } from '../title'
import { contest_data } from 'common/contest'
import { default as causeExploration } from 'web/lib/util/contests/causeExploration.json'
//this is super gross, need to figure out how to not hardcode this
function getSubmissionData(contestSlug: string) {
if (contestSlug === 'cause-exploration-prize') {
return causeExploration
}
}
export function SubmissionCard(props: {
contract: Contract
@ -45,6 +58,7 @@ export function SubmissionCard(props: {
onClick?: () => void
hideQuickBet?: boolean
hideGroupLink?: boolean
contestSlug: string
}) {
const {
showHotVolume,
@ -53,6 +67,7 @@ export function SubmissionCard(props: {
onClick,
hideQuickBet,
hideGroupLink,
contestSlug,
} = props
const contract = useContractWithPreload(props.contract) ?? props.contract
const { question, outcomeType } = contract
@ -69,16 +84,18 @@ export function SubmissionCard(props: {
(outcomeType === 'BINARY' || outcomeType === 'PSEUDO_NUMERIC') &&
!hideQuickBet
const submissionData = getSubmissionData(contract.slug)
console.log(submissionData)
return (
<div>
<Col
<Col className="rounded-lg shadow-md hover:shadow-xl">
{/* <Col
className={clsx(
'relative gap-3 rounded-lg bg-white py-4 pl-6 pr-5 shadow-md hover:cursor-pointer hover:bg-gray-100',
'relative gap-3 py-4 pl-6 pr-5 shadow-md hover:cursor-pointer',
className
)}
>
<Row>
<Col className="relative flex-1 gap-3 pr-1">
> */}
<Col className="relative flex-1 gap-3 bg-white py-4 pl-6 pr-5">
<div
className={clsx(
'peer absolute -left-6 -top-4 -bottom-4 right-0 z-10'
@ -87,97 +104,50 @@ export function SubmissionCard(props: {
{onClick ? (
<a
className="absolute top-0 left-0 right-0 bottom-0"
href={contractPath(contract)}
href={submissionPath(contract, contestSlug)}
onClick={(e) => {
// Let the browser handle the link click (opens in new tab).
if (e.ctrlKey || e.metaKey) return
e.preventDefault()
track('click market card', {
slug: contract.slug,
contractId: contract.id,
contestSlug: contestSlug,
submissionSlug: contract.slug,
})
onClick()
}}
/>
) : (
<Link href={contractPath(contract)}>
<Link href={submissionPath(contract, contestSlug)}>
<a
onClick={trackCallback('click market card', {
slug: contract.slug,
contractId: contract.id,
contestSlug: contestSlug,
submissionSlug: contract.slug,
})}
className="absolute top-0 left-0 right-0 bottom-0"
/>
</Link>
)}
</div>
{/* <AvatarDetails contract={contract} /> */}
<p
className="break-words font-semibold text-indigo-700 peer-hover:underline peer-hover:decoration-indigo-400 peer-hover:decoration-2"
style={{ /* For iOS safari */ wordBreak: 'break-word' }}
>
{question}
</p>
{(outcomeType === 'FREE_RESPONSE' ||
outcomeType === 'MULTIPLE_CHOICE') &&
(resolution ? (
<FreeResponseOutcomeLabel
contract={contract}
resolution={resolution}
truncate={'long'}
/>
) : (
<FreeResponseTopAnswer contract={contract} truncate="long" />
))}
<MiscDetails
contract={contract}
showHotVolume={showHotVolume}
showTime={showTime}
hideGroupLink={hideGroupLink}
/>
</Col>
{showQuickBet ? (
<QuickBet contract={contract} user={user} />
) : (
<Col className="m-auto pl-2">
{outcomeType === 'BINARY' && (
<BinaryResolutionOrChance
className="items-center"
contract={contract}
/>
)}
{outcomeType === 'PSEUDO_NUMERIC' && (
<PseudoNumericResolutionOrExpectation
className="items-center"
contract={contract}
/>
)}
{outcomeType === 'NUMERIC' && (
<NumericResolutionOrExpectation
className="items-center"
contract={contract}
/>
)}
{(outcomeType === 'FREE_RESPONSE' ||
outcomeType === 'MULTIPLE_CHOICE') && (
<FreeResponseResolutionOrChance
className="self-end text-gray-600"
contract={contract}
truncate="long"
/>
)}
<ProbBar contract={contract} />
</Col>
)}
<Row className="text-greyscale-5 text-sm">
{submissionData?.filter((entry) => entry.title === contract.question)}
</Row>
</Col>
<Row className="bg-greyscale-1 text-greyscale-5 rounded-b-lg py-4 pl-6 pr-5 text-xs">
<Col>
chance of winning a prize
<div className="text-greyscale-7 text-lg font-semibold">
{getBinaryProbPercent(contract)}
</div>
</Col>
</Row>
</Col>
)
}
@ -252,14 +222,6 @@ export function FreeResponseResolutionOrChance(props: {
<div className={clsx('text-base text-gray-500 sm:hidden')}>
Resolved
</div>
{(resolution === 'CANCEL' || resolution === 'MKT') && (
<FreeResponseOutcomeLabel
contract={contract}
resolution={resolution}
truncate={truncate}
answerClassName="text-3xl uppercase text-blue-500"
/>
)}
</>
) : (
topAnswer && (

View File

@ -28,6 +28,7 @@ export function SubmissionsGrid(props: {
hideGroupLink?: boolean
}
highlightOptions?: ContractHighlightOptions
contestSlug: string
}) {
const {
contracts,
@ -38,7 +39,9 @@ export function SubmissionsGrid(props: {
overrideGridClassName,
cardHideOptions,
highlightOptions,
contestSlug,
} = props
const { hideQuickBet, hideGroupLink } = cardHideOptions || {}
const { contractIds, highlightClassName } = highlightOptions || {}
@ -86,6 +89,7 @@ export function SubmissionsGrid(props: {
? highlightClassName
: undefined
}
contestSlug={contestSlug}
/>
))}
</ul>
@ -93,20 +97,3 @@ export function SubmissionsGrid(props: {
</Col>
)
}
export function CreatorContractsList(props: { creator: User }) {
const { creator } = props
return (
<SubmissionSearch
querySortOptions={{
defaultSort: 'newest',
defaultFilter: 'all',
shouldLoadFromStorage: false,
}}
additionalFilter={{
creatorId: creator.id,
}}
/>
)
}

View File

@ -31,6 +31,10 @@ export const contracts = coll<Contract>('contracts')
export type { Contract }
export function submissionPath(submission: Contract, contestSlug: string) {
return `/contest/${contestSlug}/${submission.slug}`
}
export function contractPath(contract: Contract) {
return `/${contract.creatorUsername}/${contract.slug}`
}

View File

@ -1,77 +0,0 @@
export const grants = [
{ title: 'New cause area: Violence against women and girls',
author: 'Akhil',
link: '/posts/majcwf7i8pW8eMJ3v/new-cause-area-violence-against-women-and-girls',
}
{ title: 'Open Philanthropy's Cause Exploration Prizes: $120k for written work on global health and wellbeing',
author: 'ChrisSmith, Aaron Gertler',
link: '/posts/iqcph4DbcP4PZGyDB/open-philanthropy-s-cause-exploration-prizes-usd120k-for',
}
{ title: 'The Case for Making Professional Degrees Undergraduate Degrees',
author: 'ColdButtonIssues',
link: '/posts/fEMpAcNycbXpp6Ext/the-case-for-making-professional-degrees-undergraduate',
}
{ title: 'New cause area: training health workers to prevent newborn deaths',
author: 'Marshall',
link: '/posts/B7wohgDDdwPoQAatt/new-cause-area-training-health-workers-to-prevent-newborn',
}
{ title: 'Global Health & Development - Beyond the Streetlight',
author: 'Richard Sedlmayr',
link: '/posts/DXKWHAkihdb6nkKyG/global-health-and-development-beyond-the-streetlight-1',
}
{ title: 'Cause Exploration Prizes submission: bivalve aquaculture',
author: 'Brian Lui',
link: '/posts/7keuWWMoYY6dMnqys/cause-exploration-prizes-submission-bivalve-aquaculture',
}
{ title: 'Potential new cause area: Obesity',
author: 'Akhil',
link: '/posts/jhsXxPnKbwzLwrKFq/potential-new-cause-area-obesity',
}
{ title: 'Energy Access in Sub-Saharan Africa: Open Philanthropy Cause Exploration Prize Submission',
author: 'Tomer_Goloboy',
link: '/posts/ZPjMemurtzeumwcdw/energy-access-in-sub-saharan-africa-open-philanthropy-cause',
}
{ title: 'Sleep: Open Philanthropy Cause Exploration Prize',
author: 'SuhanKacholia',
link: '/posts/qnDBN3nAXgwyTnrAC/sleep-open-philanthropy-cause-exploration-prize',
}
{ title: 'Cause Exploration Prizes: Could New Technology Help Solve the Glasses Problem?',
author: 'Open Philanthropy',
link: '/posts/a3vbQCgxTeYNvQBfc/cause-exploration-prizes-could-new-technology-help-solve-the',
}
{ title: 'Cause Exploration Prizes: Expanding access to infertility services in Low- and Middle-Income Countries (LMICs)',
author: 'Soleine Scotney',
link: '/posts/WAnJw5bhuQwhJiLTm/cause-exploration-prizes-expanding-access-to-infertility',
}
{ title: 'New Cause Area: Demographic Collapse',
author: 'Malcolm Collins, hath, Simone H Collins',
link: '/posts/vFfoqL74kmZbydKjp/new-cause-area-demographic-collapse',
}
{ title: 'Cause area: climate adaptation in low-income countries',
author: 'karthik-t',
link: '/posts/nE827LwrRk5ep3Xao/cause-area-climate-adaptation-in-low-income-countries',
}
{ title: 'Open Climate Data as a possible cause area, Open Philanthropy',
author: 'Ben Yeoh',
link: '/posts/s9HPpvMHgS5QYEM4C/open-climate-data-as-a-possible-cause-area-open-philanthropy',
}
{ title: 'One Million Missing Children',
author: 'ColdButtonIssues',
link: '/posts/H5LDwwmdBYBDNXTq4/one-million-missing-children',
}
]

View File

@ -217,15 +217,6 @@ export function ContractPageContent(
/>
)}
{(outcomeType === 'FREE_RESPONSE' ||
outcomeType === 'MULTIPLE_CHOICE') && (
<>
<Spacer h={4} />
<AnswersPanel contract={contract} />
<Spacer h={4} />
</>
)}
{isNumeric && allowTrade && (
<NumericBetPanel className="xl:hidden" contract={contract} />
)}

View File

@ -207,14 +207,14 @@ export default function ContestPage(props: {
</Col>
)
const questionsTab = (
const submissionsTab = (
<SubmissionSearch
querySortOptions={{
shouldLoadFromStorage: true,
defaultSort: getSavedSort() ?? 'newest',
defaultFilter: 'open',
}}
additionalFilter={{ groupSlug: contest.slug }}
additionalFilter={{ contestSlug: contest.slug }}
/>
)
@ -230,7 +230,7 @@ export default function ContestPage(props: {
]),
{
title: 'Submissions',
content: questionsTab,
content: submissionsTab,
href: contestPath(contest.slug, 'submissions'),
},
{

View File

@ -19,7 +19,7 @@ import { JoinOrLeaveGroupButton } from 'web/components/groups/groups-button'
import { UserLink } from 'web/components/user-page'
import { searchInAny } from 'common/util/parse'
import { SEO } from 'web/components/SEO'
import { CONTEST_SLUGS, CONTEST_DATA } from 'common/contest'
import { CONTEST_SLUGS, contest_data } from 'common/contest'
import { contestPath } from 'web/lib/firebase/contests'
export async function getStaticProps() {

197
yarn.lock
View File

@ -3156,6 +3156,13 @@
dependencies:
"@types/node" "*"
"@types/cheerio@^0.22.31":
version "0.22.31"
resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.31.tgz#b8538100653d6bb1b08a1e46dec75b4f2a5d5eb6"
integrity sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==
dependencies:
"@types/node" "*"
"@types/connect-history-api-fallback@^1.3.5":
version "1.3.5"
resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
@ -3450,6 +3457,13 @@
dependencies:
"@types/node" "*"
"@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/eslint-plugin@5.25.0":
version "5.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz#e8ce050990e4d36cc200f2de71ca0d3eb5e77a31"
@ -4145,7 +4159,7 @@ base16@^1.0.0:
resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70"
integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==
base64-js@^1.3.0:
base64-js@^1.3.0, 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==
@ -4175,6 +4189,15 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
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"
bluebird@^3.7.1:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
@ -4288,6 +4311,11 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4
node-releases "^2.0.3"
picocolors "^1.0.0"
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-equal-constant-time@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
@ -4298,6 +4326,14 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
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"
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@ -4421,6 +4457,19 @@ cheerio-select@^2.1.0:
domhandler "^5.0.3"
domutils "^3.0.1"
cheerio@1.0.0-rc.12:
version "1.0.0-rc.12"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
dependencies:
cheerio-select "^2.1.0"
dom-serializer "^2.0.0"
domhandler "^5.0.3"
domutils "^3.0.1"
htmlparser2 "^8.0.1"
parse5 "^7.0.0"
parse5-htmlparser2-tree-adapter "^7.0.0"
cheerio@^0.22.0:
version "0.22.0"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
@ -4472,6 +4521,11 @@ chokidar@^3.4.2, chokidar@^3.5.2, chokidar@^3.5.3:
optionalDependencies:
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==
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
@ -4843,7 +4897,7 @@ cross-env@^7.0.3:
dependencies:
cross-spawn "^7.0.1"
cross-fetch@^3.1.5:
cross-fetch@3.1.5, 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==
@ -5158,7 +5212,7 @@ debug@3.1.0:
dependencies:
ms "2.0.0"
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@ -5314,6 +5368,11 @@ detective@^5.2.1:
defined "^1.0.0"
minimist "^1.2.6"
devtools-protocol@0.0.1019158:
version "0.0.1019158"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz#4b08d06108a784a2134313149626ba55f030a86f"
integrity sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==
dicer@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.1.tgz#abf28921e3475bc5e801e74e0159fd94f927ba97"
@ -6033,6 +6092,17 @@ extend@^3.0.0, extend@^3.0.2, extend@~3.0.2:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
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:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@ -6115,6 +6185,13 @@ fbjs@^3.0.0, fbjs@^3.0.1:
setimmediate "^1.0.5"
ua-parser-js "^0.7.30"
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"
feed@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e"
@ -6365,6 +6442,11 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
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.1:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@ -7078,6 +7160,14 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies:
agent-base "6"
debug "4"
https-proxy-agent@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81"
@ -7086,14 +7176,6 @@ https-proxy-agent@^3.0.0:
agent-base "^4.3.0"
debug "^3.1.0"
https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies:
agent-base "6"
debug "4"
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
@ -7116,6 +7198,11 @@ idb@3.0.2:
resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384"
integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==
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-by-default@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
@ -7189,7 +7276,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@ -8339,6 +8426,11 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
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@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
@ -8989,6 +9081,11 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
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==
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
@ -9014,7 +9111,7 @@ pify@^2.3.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
pkg-dir@^4.1.0:
pkg-dir@4.2.0, pkg-dir@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
@ -9430,6 +9527,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
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==
promise-polyfill@8.1.3:
version "8.1.3"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116"
@ -9625,7 +9727,7 @@ proxy-agent@^3.0.3:
proxy-from-env "^1.0.0"
socks-proxy-agent "^4.0.1"
proxy-from-env@^1.0.0:
proxy-from-env@1.1.0, proxy-from-env@^1.0.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==
@ -9674,6 +9776,24 @@ pupa@^2.1.1:
dependencies:
escape-goat "^2.0.0"
puppeteer@16.0.0:
version "16.0.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-16.0.0.tgz#9efb6cdb57e3e51cf060a33f6289e88200dd4672"
integrity sha512-FgSe21IHNHkqv1SiJiob4ANsxVujcINa4p3MaDEMyoZsocbgSgwYE0c9lnF8eoinw4id3vx4DOXwhFdOOwVlDg==
dependencies:
cross-fetch "3.1.5"
debug "4.3.4"
devtools-protocol "0.0.1019158"
extract-zip "2.0.1"
https-proxy-agent "5.0.1"
pkg-dir "4.2.0"
progress "2.0.3"
proxy-from-env "1.1.0"
rimraf "3.0.2"
tar-fs "2.1.1"
unbzip2-stream "1.4.3"
ws "8.8.1"
pure-color@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e"
@ -10023,7 +10143,7 @@ readable-stream@2, readable-stream@^2.0.1, readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.0.6, readable-stream@^3.1.1:
readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@ -11114,6 +11234,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
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"
teeny-request@^7.1.3:
version "7.2.0"
resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.2.0.tgz#41347ece068f08d741e7b86df38a4498208b2633"
@ -11151,6 +11292,11 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
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==
thunkify@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
@ -11374,6 +11520,14 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
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"
undefsafe@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
@ -11986,6 +12140,11 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
ws@8.8.1:
version "8.8.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
ws@>=7.4.6:
version "8.6.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23"
@ -12066,6 +12225,14 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
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"
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"