From 78414d5b0f01f789f471c99a6a81d38c5e7d4b66 Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Fri, 10 Nov 2023 10:24:07 +0100 Subject: [PATCH 01/86] Create boilerplate for activist portal pages --- src/pages/my/home/index.tsx | 21 ++++++++++++ src/pages/my/todo/index.tsx | 21 ++++++++++++ .../o/[orgId]/events/[eventId]/index.tsx | 33 +++++++++++++++++++ src/pages/o/[orgId]/index.tsx | 27 +++++++++++++++ src/pages/o/[orgId]/map/index.tsx | 27 +++++++++++++++ .../o/[orgId]/projects/[campId]/index.tsx | 33 +++++++++++++++++++ .../o/[orgId]/surveys/[surveyId]/index.tsx | 33 +++++++++++++++++++ 7 files changed, 195 insertions(+) create mode 100644 src/pages/my/home/index.tsx create mode 100644 src/pages/my/todo/index.tsx create mode 100644 src/pages/o/[orgId]/events/[eventId]/index.tsx create mode 100644 src/pages/o/[orgId]/index.tsx create mode 100644 src/pages/o/[orgId]/map/index.tsx create mode 100644 src/pages/o/[orgId]/projects/[campId]/index.tsx create mode 100644 src/pages/o/[orgId]/surveys/[surveyId]/index.tsx diff --git a/src/pages/my/home/index.tsx b/src/pages/my/home/index.tsx new file mode 100644 index 0000000000..30f48fa382 --- /dev/null +++ b/src/pages/my/home/index.tsx @@ -0,0 +1,21 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async () => { + return { + props: {}, + }; +}, scaffoldOptions); + +type PageProps = void; + +const Page: FC = () => { + return

Home page for currently signed in user

; +}; + +export default Page; diff --git a/src/pages/my/todo/index.tsx b/src/pages/my/todo/index.tsx new file mode 100644 index 0000000000..dbc72780f2 --- /dev/null +++ b/src/pages/my/todo/index.tsx @@ -0,0 +1,21 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async () => { + return { + props: {}, + }; +}, scaffoldOptions); + +type PageProps = void; + +const Page: FC = () => { + return

Todo page for currently signed in user

; +}; + +export default Page; diff --git a/src/pages/o/[orgId]/events/[eventId]/index.tsx b/src/pages/o/[orgId]/events/[eventId]/index.tsx new file mode 100644 index 0000000000..de17609a0b --- /dev/null +++ b/src/pages/o/[orgId]/events/[eventId]/index.tsx @@ -0,0 +1,33 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async (ctx) => { + const { eventId, orgId } = ctx.params!; + + return { + props: { + eventId, + orgId, + }, + }; +}, scaffoldOptions); + +type PageProps = { + eventId: string; + orgId: string; +}; + +const Page: FC = ({ orgId, eventId }) => { + return ( +

+ Page for org {orgId}, event {eventId} +

+ ); +}; + +export default Page; diff --git a/src/pages/o/[orgId]/index.tsx b/src/pages/o/[orgId]/index.tsx new file mode 100644 index 0000000000..f01f175a3a --- /dev/null +++ b/src/pages/o/[orgId]/index.tsx @@ -0,0 +1,27 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async (ctx) => { + const { orgId } = ctx.params!; + + return { + props: { + orgId, + }, + }; +}, scaffoldOptions); + +type PageProps = { + orgId: string; +}; + +const Page: FC = ({ orgId }) => { + return

Home page for org {orgId}

; +}; + +export default Page; diff --git a/src/pages/o/[orgId]/map/index.tsx b/src/pages/o/[orgId]/map/index.tsx new file mode 100644 index 0000000000..50e740ac0f --- /dev/null +++ b/src/pages/o/[orgId]/map/index.tsx @@ -0,0 +1,27 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async (ctx) => { + const { orgId } = ctx.params!; + + return { + props: { + orgId, + }, + }; +}, scaffoldOptions); + +type PageProps = { + orgId: string; +}; + +const Page: FC = ({ orgId }) => { + return

Map page for org {orgId}

; +}; + +export default Page; diff --git a/src/pages/o/[orgId]/projects/[campId]/index.tsx b/src/pages/o/[orgId]/projects/[campId]/index.tsx new file mode 100644 index 0000000000..9d0a6a6249 --- /dev/null +++ b/src/pages/o/[orgId]/projects/[campId]/index.tsx @@ -0,0 +1,33 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async (ctx) => { + const { campId, orgId } = ctx.params!; + + return { + props: { + campId, + orgId, + }, + }; +}, scaffoldOptions); + +type PageProps = { + campId: string; + orgId: string; +}; + +const Page: FC = ({ orgId, campId }) => { + return ( +

+ Page for org {orgId}, project {campId} +

+ ); +}; + +export default Page; diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx new file mode 100644 index 0000000000..a07f93054c --- /dev/null +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -0,0 +1,33 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async (ctx) => { + const { surveyId, orgId } = ctx.params!; + + return { + props: { + orgId, + surveyId, + }, + }; +}, scaffoldOptions); + +type PageProps = { + orgId: string; + surveyId: string; +}; + +const Page: FC = ({ orgId, surveyId }) => { + return ( +

+ Page for org {orgId}, survey {surveyId} +

+ ); +}; + +export default Page; From bb3a4f7440ff05fd06895368a5150d7df280acc9 Mon Sep 17 00:00:00 2001 From: kaulfield23 Date: Sat, 11 Nov 2023 10:24:59 +0100 Subject: [PATCH 02/86] WIP --- src/pages/o/[orgId]/surveys/[surveyId]/index.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index a07f93054c..aeb5550235 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,5 +1,6 @@ import { FC } from 'react'; import { scaffold } from 'utils/next'; +import useSurvey from 'features/surveys/hooks/useSurvey'; const scaffoldOptions = { allowNonOfficials: true, @@ -23,6 +24,7 @@ type PageProps = { }; const Page: FC = ({ orgId, surveyId }) => { + const surveys = useSurvey(parseInt(orgId), parseInt(surveyId)); return (

Page for org {orgId}, survey {surveyId} From 372d698750b722b66bf294e7bab00a15030a3b72 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 11 Nov 2023 10:22:02 +0100 Subject: [PATCH 03/86] Render survey elements --- .../o/[orgId]/surveys/[surveyId]/index.tsx | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index aeb5550235..229785e75e 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,6 +1,6 @@ import { FC } from 'react'; import { scaffold } from 'utils/next'; -import useSurvey from 'features/surveys/hooks/useSurvey'; +import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; const scaffoldOptions = { allowNonOfficials: true, @@ -24,11 +24,26 @@ type PageProps = { }; const Page: FC = ({ orgId, surveyId }) => { - const surveys = useSurvey(parseInt(orgId), parseInt(surveyId)); + const elements = useSurveyElements(parseInt(orgId, 10), parseInt(surveyId, 10)); return ( -

- Page for org {orgId}, survey {surveyId} -

+ <> +

+ Page for org {orgId}, survey {surveyId} +

+ +
+ {(elements.data || []).map((element) => ( +
+ {element.type === 'question' && ( + + )} + {element.type === 'text' && ( +

{element.text_block.content}

+ )} +
+ ))} +
+ ); }; From 48041b1ce63c6eaae8fb3cb1c20e20fa669969ca Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 11 Nov 2023 10:55:18 +0100 Subject: [PATCH 04/86] Add org name + avatar, form title + desc, and render form inputs --- .../o/[orgId]/surveys/[surveyId]/index.tsx | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 229785e75e..a7e5990d5d 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,6 +1,9 @@ +import Box from '@mui/system/Box'; import { FC } from 'react'; import { scaffold } from 'utils/next'; +import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; +import ZUIAvatar from 'zui/ZUIAvatar'; const scaffoldOptions = { allowNonOfficials: true, @@ -24,22 +27,45 @@ type PageProps = { }; const Page: FC = ({ orgId, surveyId }) => { - const elements = useSurveyElements(parseInt(orgId, 10), parseInt(surveyId, 10)); + const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); + const elements = useSurveyElements( + parseInt(orgId, 10), + parseInt(surveyId, 10) + ); return ( <> -

- Page for org {orgId}, survey {surveyId} -

+

{survey.data?.title}

+ + {survey.data?.info_text &&

{survey.data?.info_text}

} + + + + {survey.data?.organization.title} +
{(elements.data || []).map((element) => (
{element.type === 'question' && ( - - )} - {element.type === 'text' && ( -

{element.text_block.content}

+ + + {element.question.response_type === 'text' && ( + + )} + {element.question.response_type === 'options' && ( + + )} + )} + {element.type === 'text' &&

{element.text_block.content}

}
))}
From 077debbfb31e1a05a3d426f6cfe2d3a7c7fa2ffe Mon Sep 17 00:00:00 2001 From: kaulfield23 Date: Sat, 11 Nov 2023 12:46:30 +0100 Subject: [PATCH 05/86] create signUpOptions --- .../components/surveyForm/SignUpOptions.tsx | 33 +++++++++++++++++++ src/features/surveys/l10n/messageIds.ts | 6 ++++ .../o/[orgId]/surveys/[surveyId]/index.tsx | 2 ++ 3 files changed, 41 insertions(+) create mode 100644 src/features/surveys/components/surveyForm/SignUpOptions.tsx diff --git a/src/features/surveys/components/surveyForm/SignUpOptions.tsx b/src/features/surveys/components/surveyForm/SignUpOptions.tsx new file mode 100644 index 0000000000..9718a9f581 --- /dev/null +++ b/src/features/surveys/components/surveyForm/SignUpOptions.tsx @@ -0,0 +1,33 @@ +import messageIds from 'features/surveys/l10n/messageIds'; +import { useMessages } from 'core/i18n'; +import { FormControlLabel, Radio, RadioGroup } from '@mui/material'; + +interface SignUpOptionsProps { + signature: + | 'require_signature' + | 'allow_anonymous' + | 'force_anonymous' + | undefined; +} +const SignUpOptions = ({ signature }: SignUpOptionsProps) => { + const messages = useMessages(messageIds); + + return ( + + } + label={messages.surveyForm.sign.nameAndEmail()} + value={'name-and-mail'} + /> + {signature === 'allow_anonymous' && ( + } + label={messages.surveyForm.sign.anonymous()} + value={'anonymous'} + /> + )} + + ); +}; + +export default SignUpOptions; diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index 202e32226d..8b564e48eb 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -159,6 +159,12 @@ export default makeMessages('feat.surveys', { suggestedPeople: m('Suggested people'), unlink: m('Unlink'), }, + surveyForm: { + sign: { + anonymous: m('Submit anonymously'), + nameAndEmail: m('Sign with name and e-mail'), + }, + }, tabs: { overview: m('Overview'), questions: m('Questions'), diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index a7e5990d5d..1d0dffddad 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,6 +1,7 @@ import Box from '@mui/system/Box'; import { FC } from 'react'; import { scaffold } from 'utils/next'; +import SignUpOptions from 'features/surveys/components/surveyForm/SignUpOptions'; import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; @@ -68,6 +69,7 @@ const Page: FC = ({ orgId, surveyId }) => { {element.type === 'text' &&

{element.text_block.content}

} ))} + ); From 4d7632e4bc6cf91a54bf25334170e371bb43f699 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 11 Nov 2023 12:37:19 +0100 Subject: [PATCH 06/86] Survey submit button --- .../o/[orgId]/surveys/[surveyId]/index.tsx | 115 +++++++++++++++++- .../surveys/[surveyId]/submitted/index.tsx | 37 ++++++ 2 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 1d0dffddad..d2a589e0bd 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,7 +1,10 @@ +import BackendApiClient from 'core/api/client/BackendApiClient'; import Box from '@mui/system/Box'; +import Button from '@mui/material/Button'; import { FC } from 'react'; +import { IncomingMessage } from 'http'; +import { parse } from 'querystring'; import { scaffold } from 'utils/next'; -import SignUpOptions from 'features/surveys/components/surveyForm/SignUpOptions'; import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; @@ -11,9 +14,98 @@ const scaffoldOptions = { authLevelRequired: 1, }; +function parseRequest( + req: IncomingMessage +): Promise> { + return new Promise((resolve) => { + let body = ''; + req.on('data', (chunk: Buffer) => { + body += chunk.toString(); + }); + req.on('end', () => { + resolve(parse(body)); + }); + }); +} + export const getServerSideProps = scaffold(async (ctx) => { + const { req, res } = ctx; const { surveyId, orgId } = ctx.params!; + if (req.method === 'POST') { + const form = await parseRequest(req); + const responses: Record< + string, + { + options?: number[]; + question_id: number; + response?: string; + } + > = {}; + + for (const name in form) { + const isSignature = name.startsWith('sig'); + const isPrivacy = name.startsWith('privacy'); + const isMetadata = isSignature || isPrivacy; + if (isMetadata) { + continue; + } + + const fields = name.split('.'); + const questionId = fields[0]; + const questionType = fields[1]; + + if (typeof responses[questionId] === 'undefined') { + responses[questionId] = { + question_id: parseInt(fields[0]), + }; + } + + if (questionType == 'options') { + if (Array.isArray(form[name])) { + responses[questionId].options = (form[name] as string[]).map((o) => + parseInt(o) + ); + } else { + responses[questionId].options = [parseInt((form[name] as string)!)]; + } + } else if (questionType == 'text') { + responses[questionId].response = form[name] as string; + } + } + + let signature: null | { + email: string; + first_name: string; + last_name: string; + } = null; + // TODO: handle other signature types + if (form.sig == 'email') { + signature = { + email: form['sig.email'] as string, + first_name: form['sig.first_name'] as string, + last_name: form['sig.last_name'] as string, + }; + } + + const apiClient = new BackendApiClient(req.headers); + const requestUrl = `/api/orgs/${orgId}/surveys/${surveyId}/submissions`; + try { + await apiClient.post(requestUrl, { + responses: Object.values(responses), + signature, + }); + } catch (e) { + // eslint-disable-next-line no-console + console.log(e); + } + + res.writeHead(302, { + Location: `/o/${orgId}/surveys/${surveyId}/submitted`, + }); + res.end(); + } + return { props: { orgId, @@ -33,6 +125,7 @@ const Page: FC = ({ orgId, surveyId }) => { parseInt(orgId, 10), parseInt(surveyId, 10) ); + return ( <>

{survey.data?.title}

@@ -44,19 +137,26 @@ const Page: FC = ({ orgId, surveyId }) => { {survey.data?.organization.title} -
+ {(elements.data || []).map((element) => (
{element.type === 'question' && ( -
))} - + + ); diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx new file mode 100644 index 0000000000..0bb15ac5ea --- /dev/null +++ b/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx @@ -0,0 +1,37 @@ +import { FC } from 'react'; +import { scaffold } from 'utils/next'; +import useSurvey from 'features/surveys/hooks/useSurvey'; + +const scaffoldOptions = { + allowNonOfficials: true, + authLevelRequired: 1, +}; + +export const getServerSideProps = scaffold(async (ctx) => { + const { surveyId, orgId } = ctx.params!; + return { + props: { + orgId, + surveyId, + }, + }; +}, scaffoldOptions); + +type PageProps = { + orgId: string; + surveyId: string; +}; + +const Page: FC = ({ orgId, surveyId }) => { + const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); + return ( + <> +

Survey Submitted

+

+ Your responses to "{survey.data?.title}" have been submitted. +

+ + ); +}; + +export default Page; From eaf3dffcfe7f64cb0394e045ab53625074eb9af0 Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Sat, 11 Nov 2023 16:16:38 +0100 Subject: [PATCH 07/86] Add playwright test for submitting a survey --- .../KPD/surveys/MembershipSurvey/index.ts | 65 ++++++++++++++++++ .../surveys/submitting-survey.spec.ts | 68 +++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts create mode 100644 integrationTesting/tests/organize/surveys/submitting-survey.spec.ts diff --git a/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts b/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts new file mode 100644 index 0000000000..3d8e28a335 --- /dev/null +++ b/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts @@ -0,0 +1,65 @@ +import KPD from '../..'; +import { + ELEMENT_TYPE, + RESPONSE_TYPE, + ZetkinSurveyExtended, +} from 'utils/types/zetkin'; + +const KPDMembershipSurvey: ZetkinSurveyExtended = { + access: 'open', + callers_only: false, + campaign: null, + elements: [ + { + hidden: false, + id: 1, + question: { + description: '', + options: [ + { + id: 1, + text: 'Yes', + }, + { + id: 1, + text: 'No', + }, + ], + question: 'Do you want to be active?', + required: false, + response_config: { + widget_type: 'radio', + }, + response_type: RESPONSE_TYPE.OPTIONS, + }, + type: ELEMENT_TYPE.QUESTION, + }, + { + hidden: false, + id: 2, + question: { + description: '', + question: 'What would you like to do?', + required: false, + response_config: { + multiline: true, + }, + response_type: RESPONSE_TYPE.TEXT, + }, + type: ELEMENT_TYPE.QUESTION, + }, + ], + expires: null, + id: 1, + info_text: '', + org_access: 'sameorg', + organization: { + id: KPD.id, + title: KPD.title, + }, + published: '1857-05-07T13:37:00.000Z', + signature: 'require_signature', + title: 'Membership survey', +}; + +export default KPDMembershipSurvey; diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts new file mode 100644 index 0000000000..e504196d4f --- /dev/null +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -0,0 +1,68 @@ +import { expect } from '@playwright/test'; + +import KPD from '../../../mockData/orgs/KPD'; +import KPDMembershipSurvey from '../../../mockData/orgs/KPD/surveys/MembershipSurvey'; +import RosaLuxemburg from '../../../mockData/orgs/KPD/people/RosaLuxemburg'; +import RosaLuxemburgUser from '../../../mockData/users/RosaLuxemburgUser'; +import test from '../../../fixtures/next'; + +test.describe.only('User submitting a survey', () => { + test.afterEach(({ moxy }) => { + moxy.teardown(); + }); + + test('submits data successfully', async ({ appUri, login, moxy, page }) => { + const apiPostPath = `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`; + + moxy.setZetkinApiMock( + `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}`, + 'get', + KPDMembershipSurvey + ); + + moxy.setZetkinApiMock( + `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, + 'post', + { + timestamp: '1857-05-07T13:37:00.000Z', + } + ); + + const memberships = [ + { + organization: KPD, + profile: { + id: RosaLuxemburg.id, + name: RosaLuxemburg.first_name + ' ' + RosaLuxemburg.last_name, + }, + role: null, + }, + ]; + + login(RosaLuxemburgUser, memberships); + await page.goto( + `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` + ); + + await page.fill('input', 'Topple capitalism'); + await Promise.all([ + page.click('text=Submit'), + page.waitForResponse((res) => res.request().method() == 'POST'), + ]); + + const reqLog = moxy.log(`/v1${apiPostPath}`); + expect(reqLog.length).toBe(1); + expect(reqLog[0].data).toMatchObject({ + responses: [ + { + options: [1], + question_id: KPDMembershipSurvey.elements[0].id, + }, + { + question_id: KPDMembershipSurvey.elements[1].id, + response: 'Topple capitalism', + }, + ], + }); + }); +}); From 8b3a9697798509b031484f517f5b45867a66e5ad Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Sat, 11 Nov 2023 16:19:58 +0100 Subject: [PATCH 08/86] Remove test.only flag --- .../tests/organize/surveys/submitting-survey.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index e504196d4f..d815aa3221 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -6,7 +6,7 @@ import RosaLuxemburg from '../../../mockData/orgs/KPD/people/RosaLuxemburg'; import RosaLuxemburgUser from '../../../mockData/users/RosaLuxemburgUser'; import test from '../../../fixtures/next'; -test.describe.only('User submitting a survey', () => { +test.describe('User submitting a survey', () => { test.afterEach(({ moxy }) => { moxy.teardown(); }); From c1a31280343922063f1d80b428aa6b184ccea6a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Ringstr=C3=B6m?= Date: Sat, 11 Nov 2023 16:03:34 +0100 Subject: [PATCH 09/86] Adds checkbox and description of privacy policy. Localization for link and descriptions to Swedish --- src/features/surveys/l10n/messageIds.ts | 11 ++++++-- src/locale/sv.yml | 5 ++++ .../o/[orgId]/surveys/[surveyId]/index.tsx | 28 +++++++++++++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index 8b564e48eb..22736f5243 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -1,5 +1,4 @@ import { ReactElement } from 'react'; - import { m, makeMessages } from 'core/i18n'; export default makeMessages('feat.surveys', { @@ -160,10 +159,18 @@ export default makeMessages('feat.surveys', { unlink: m('Unlink'), }, surveyForm: { + accept: m('I accept the terms stated below'), + policy: { + link: m('https://zetkin.org/privacy'), + text: m('Click to read the full Zetkin Privacy Policy'), + }, sign: { anonymous: m('Submit anonymously'), nameAndEmail: m('Sign with name and e-mail'), }, + termsDescription: m<{ organization: string }>( + 'When you submit this survey, the information you provide will be stored and processed in Zetkin by {organization} in order to organize activism and in accordance with the Zetkin privacy policy.' + ), }, tabs: { overview: m('Overview'), @@ -172,7 +179,7 @@ export default makeMessages('feat.surveys', { }, unlinkedCard: { description: m( - 'When someone submits a survey without logging in,that survey will be unlinked. Searching for people in Zetkin based on their survey responses will not work on unlinked submissions.' + 'When someone submits a survey without logging in, that survey will be unlinked. Searching for people in Zetkin based on their survey responses will not work on unlinked submissions.' ), header: m('Unlinked submissions'), openLink: m<{ numUnlink: number }>( diff --git a/src/locale/sv.yml b/src/locale/sv.yml index 339776bc8d..af167434df 100644 --- a/src/locale/sv.yml +++ b/src/locale/sv.yml @@ -1416,6 +1416,11 @@ feat: personRecordColumn: Svarande suggestedPeople: Föreslagna personer unlink: Avlänka + surveyForm: + accept: Jag accepterar nedanstående villkor + policyLink: https://zetkin.org/sv/sekretess + policyText: Klicka här för att läsa Zetkins sekretesspolicy + termsDescription: När du skickar in enkäten kommer informationen att lagras i Zetkin och hanteras av {organization} i deras verksamhet, i enlighet med Zetkins sekretesspolicy. tabs: overview: Översikt questions: Frågor diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index d2a589e0bd..3291267ba9 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,13 +1,17 @@ import BackendApiClient from 'core/api/client/BackendApiClient'; import Box from '@mui/system/Box'; import Button from '@mui/material/Button'; +import Checkbox from '@mui/material/Checkbox'; import { FC } from 'react'; import { IncomingMessage } from 'http'; +import messageIds from 'features/surveys/l10n/messageIds'; import { parse } from 'querystring'; import { scaffold } from 'utils/next'; import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; +import { FormControlLabel, Link, Typography } from '@mui/material'; +import { Msg, useMessages } from 'core/i18n'; const scaffoldOptions = { allowNonOfficials: true, @@ -120,12 +124,12 @@ type PageProps = { }; const Page: FC = ({ orgId, surveyId }) => { - const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); const elements = useSurveyElements( parseInt(orgId, 10), parseInt(surveyId, 10) ); - + const messages = useMessages(messageIds); + const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); return ( <>

{survey.data?.title}

@@ -169,7 +173,25 @@ const Page: FC = ({ orgId, surveyId }) => { {element.type === 'text' &&

{element.text_block.content}

} ))} - + } + label={} + /> + + + + + + + + {' '} From fdc2ec35a76dd2a452064e0a534f271e1355b0c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Ringstr=C3=B6m?= Date: Sat, 11 Nov 2023 17:02:18 +0100 Subject: [PATCH 10/86] Added additional localization for submission button --- src/features/surveys/l10n/messageIds.ts | 1 + src/locale/sv.yml | 9 +++++++-- src/pages/o/[orgId]/surveys/[surveyId]/index.tsx | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index 22736f5243..e8343b6525 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -168,6 +168,7 @@ export default makeMessages('feat.surveys', { anonymous: m('Submit anonymously'), nameAndEmail: m('Sign with name and e-mail'), }, + submit: m('Submit'), termsDescription: m<{ organization: string }>( 'When you submit this survey, the information you provide will be stored and processed in Zetkin by {organization} in order to organize activism and in accordance with the Zetkin privacy policy.' ), diff --git a/src/locale/sv.yml b/src/locale/sv.yml index af167434df..2b3405bdf6 100644 --- a/src/locale/sv.yml +++ b/src/locale/sv.yml @@ -1418,8 +1418,13 @@ feat: unlink: Avlänka surveyForm: accept: Jag accepterar nedanstående villkor - policyLink: https://zetkin.org/sv/sekretess - policyText: Klicka här för att läsa Zetkins sekretesspolicy + policy: + link: https://zetkin.org/sv/sekretess + text: Klicka här för att läsa Zetkins sekretesspolicy + sign: + anonymous: Skicka anonymt + nameAndEmail: Skicka med namn och e-mail + submit: Skicka termsDescription: När du skickar in enkäten kommer informationen att lagras i Zetkin och hanteras av {organization} i deras verksamhet, i enlighet med Zetkins sekretesspolicy. tabs: overview: Översikt diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 3291267ba9..274690c401 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -191,9 +191,9 @@ const Page: FC = ({ orgId, surveyId }) => { > - {' '} + From ae915ae3ff1b35c52f47ac7912344c06e2092548 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 11 Nov 2023 18:02:23 +0100 Subject: [PATCH 11/86] Fix playwright test --- .../tests/organize/surveys/submitting-survey.spec.ts | 3 ++- src/pages/o/[orgId]/surveys/[surveyId]/index.tsx | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index d815aa3221..6278ebe7f2 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -45,8 +45,9 @@ test.describe('User submitting a survey', () => { ); await page.fill('input', 'Topple capitalism'); + await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ - page.click('text=Submit'), + await page.click('data-testid=Survey-submit'), page.waitForResponse((res) => res.request().method() == 'POST'), ]); diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 274690c401..2ceb9c49ce 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -175,6 +175,7 @@ const Page: FC = ({ orgId, surveyId }) => { ))} } + data-testid="Survey-acceptTerms" label={} /> @@ -192,7 +193,12 @@ const Page: FC = ({ orgId, surveyId }) => { - From 810bf6b10b22c7b00531f00ba6b9877bbc2195b5 Mon Sep 17 00:00:00 2001 From: xuan tran Date: Sat, 11 Nov 2023 17:09:16 +0100 Subject: [PATCH 12/86] add sign in options for user --- src/features/surveys/l10n/messageIds.ts | 6 ++ .../o/[orgId]/surveys/[surveyId]/index.tsx | 101 +++++++++++++++++- 2 files changed, 104 insertions(+), 3 deletions(-) diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index e8343b6525..865b700e58 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -160,6 +160,11 @@ export default makeMessages('feat.surveys', { }, surveyForm: { accept: m('I accept the terms stated below'), + anonymousOption: m('Sign anonymously'), + authenticatedOption: m<{ email: string; person: string }>( + 'Sign as {person} with email {email}' + ), + nameEmailOption: m('Sign with name and email'), policy: { link: m('https://zetkin.org/privacy'), text: m('Click to read the full Zetkin Privacy Policy'), @@ -168,6 +173,7 @@ export default makeMessages('feat.surveys', { anonymous: m('Submit anonymously'), nameAndEmail: m('Sign with name and e-mail'), }, + signOptions: m('Choose 1 of these signing options below'), submit: m('Submit'), termsDescription: m<{ organization: string }>( 'When you submit this survey, the information you provide will be stored and processed in Zetkin by {organization} in order to organize activism and in accordance with the Zetkin privacy policy.' diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 2ceb9c49ce..7d4d6f2c73 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -2,17 +2,26 @@ import BackendApiClient from 'core/api/client/BackendApiClient'; import Box from '@mui/system/Box'; import Button from '@mui/material/Button'; import Checkbox from '@mui/material/Checkbox'; -import { FC } from 'react'; import { IncomingMessage } from 'http'; -import messageIds from 'features/surveys/l10n/messageIds'; import { parse } from 'querystring'; import { scaffold } from 'utils/next'; +import useCurrentUser from 'features/user/hooks/useCurrentUser'; import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; -import { FormControlLabel, Link, Typography } from '@mui/material'; +import { FC, useState } from 'react'; import { Msg, useMessages } from 'core/i18n'; +import { + FormControlLabel, + Radio, + RadioGroup, + TextField, + Typography, +} from '@mui/material'; + +import messageIds from 'features/surveys/l10n/messageIds'; + const scaffoldOptions = { allowNonOfficials: true, authLevelRequired: 1, @@ -130,6 +139,26 @@ const Page: FC = ({ orgId, surveyId }) => { ); const messages = useMessages(messageIds); const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); + + const [selectedOption, setSelectedOption] = useState(null); + const [customInput, setCustomInput] = useState({ + email: '', + name: '', + }); + + const handleRadioChange = (option) => { + setSelectedOption(option); + }; + + const handleCustomInputChange = (field, value) => { + setCustomInput((prevInput) => ({ + ...prevInput, + [field]: value, + })); + }; + + const currentUser = useCurrentUser(); + return ( <>

{survey.data?.title}

@@ -201,6 +230,72 @@ const Page: FC = ({ orgId, surveyId }) => { > {messages.surveyForm.submit()} + + + + + + handleRadioChange(e.target.value)} + value={selectedOption} + > + } + label={ + + + + } + value="authenticated" + /> + + } + label={ +
+ + + + {selectedOption === 'name+email' && ( + <> + + handleCustomInputChange('name', e.target.value) + } + value={customInput.name} + /> + + handleCustomInputChange('email', e.target.value) + } + value={customInput.email} + /> + + )} +
+ } + value="name+email" + /> + {survey.data?.signature === 'allow_anonymous' && ( + } + label={ + + + + } + value="anonymous" + /> + )} +
); From 6b0e75afc7419c68f54ea65e836e25a724d6b7b8 Mon Sep 17 00:00:00 2001 From: xuan tran Date: Sat, 11 Nov 2023 17:55:30 +0100 Subject: [PATCH 13/86] fix error --- src/pages/o/[orgId]/surveys/[surveyId]/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 7d4d6f2c73..010a5d9fcf 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -10,10 +10,10 @@ import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; import { FC, useState } from 'react'; -import { Msg, useMessages } from 'core/i18n'; import { FormControlLabel, + Link, Radio, RadioGroup, TextField, @@ -21,6 +21,7 @@ import { } from '@mui/material'; import messageIds from 'features/surveys/l10n/messageIds'; +import { Msg, useMessages } from 'core/i18n'; const scaffoldOptions = { allowNonOfficials: true, From 3808bc31aeecf73b52cebd515c710ff1cff53245 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 11 Nov 2023 18:21:10 +0100 Subject: [PATCH 14/86] Fixes --- .../o/[orgId]/surveys/[surveyId]/index.tsx | 83 ++++++++++--------- 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 010a5d9fcf..fb383d8670 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -3,6 +3,7 @@ import Box from '@mui/system/Box'; import Button from '@mui/material/Button'; import Checkbox from '@mui/material/Checkbox'; import { IncomingMessage } from 'http'; +import messageIds from 'features/surveys/l10n/messageIds'; import { parse } from 'querystring'; import { scaffold } from 'utils/next'; import useCurrentUser from 'features/user/hooks/useCurrentUser'; @@ -20,7 +21,6 @@ import { Typography, } from '@mui/material'; -import messageIds from 'features/surveys/l10n/messageIds'; import { Msg, useMessages } from 'core/i18n'; const scaffoldOptions = { @@ -141,17 +141,21 @@ const Page: FC = ({ orgId, surveyId }) => { const messages = useMessages(messageIds); const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); - const [selectedOption, setSelectedOption] = useState(null); + const [selectedOption, setSelectedOption] = useState< + null | 'authenticated' | 'name+email' | 'anonymous' + >(null); const [customInput, setCustomInput] = useState({ email: '', name: '', }); - const handleRadioChange = (option) => { - setSelectedOption(option); + const handleRadioChange = ( + value: 'authenticated' | 'name+email' | 'anonymous' + ) => { + setSelectedOption(value); }; - const handleCustomInputChange = (field, value) => { + const handleCustomInputChange = (field: 'name' | 'email', value: string) => { setCustomInput((prevInput) => ({ ...prevInput, [field]: value, @@ -203,41 +207,16 @@ const Page: FC = ({ orgId, surveyId }) => { {element.type === 'text' &&

{element.text_block.content}

} ))} - } - data-testid="Survey-acceptTerms" - label={} - /> - - - - - - - - - - handleRadioChange(e.target.value)} + onChange={(e) => + handleRadioChange( + e.target.value as 'authenticated' | 'name+email' | 'anonymous' + ) + } value={selectedOption} > = ({ orgId, surveyId }) => { @@ -297,6 +276,36 @@ const Page: FC = ({ orgId, surveyId }) => { /> )} + + } + data-testid="Survey-acceptTerms" + label={} + /> + + + + + + + + + + ); From 83a10a0763e70f4dacea4d27a323d8b69de55150 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 11 Nov 2023 16:35:23 +0100 Subject: [PATCH 15/86] Create components for each survey element --- .../surveys/submitting-survey.spec.ts | 2 +- .../components/surveyForm/OptionsQuestion.tsx | 70 +++++++++++++++++++ .../components/surveyForm/TextBlock.tsx | 8 +++ .../components/surveyForm/TextQuestion.tsx | 22 ++++++ .../o/[orgId]/surveys/[surveyId]/index.tsx | 39 +++++------ 5 files changed, 120 insertions(+), 21 deletions(-) create mode 100644 src/features/surveys/components/surveyForm/OptionsQuestion.tsx create mode 100644 src/features/surveys/components/surveyForm/TextBlock.tsx create mode 100644 src/features/surveys/components/surveyForm/TextQuestion.tsx diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 6278ebe7f2..0423f17ed6 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -44,7 +44,7 @@ test.describe('User submitting a survey', () => { `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` ); - await page.fill('input', 'Topple capitalism'); + await page.fill('input[name="2.text"]', 'Topple capitalism'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ await page.click('data-testid=Survey-submit'), diff --git a/src/features/surveys/components/surveyForm/OptionsQuestion.tsx b/src/features/surveys/components/surveyForm/OptionsQuestion.tsx new file mode 100644 index 0000000000..c36a161cde --- /dev/null +++ b/src/features/surveys/components/surveyForm/OptionsQuestion.tsx @@ -0,0 +1,70 @@ +import { FC } from 'react'; +import { + Checkbox, + FormControl, + FormControlLabel, + FormGroup, + FormLabel, + MenuItem, + Radio, + RadioGroup, + Select, +} from '@mui/material'; +import { + ZetkinSurveyOption, + ZetkinSurveyOptionsQuestionElement, +} from 'utils/types/zetkin'; + +const OptionsQuestion: FC<{ element: ZetkinSurveyOptionsQuestionElement }> = ({ + element, +}) => { + return ( + + + {element.question.question} + + {element.question.response_config.widget_type === 'checkbox' && ( + + {element.question.options!.map((option: ZetkinSurveyOption) => ( + } + label={option.text} + name={`${element.id}.options`} + value={option.id} + /> + ))} + + )} + {element.question.response_config.widget_type === 'radio' && ( + + {element.question.options!.map((option: ZetkinSurveyOption) => ( + } + label={option.text} + value={option.id} + /> + ))} + + )} + {element.question.response_config.widget_type === 'select' && ( + + )} + + ); +}; + +export default OptionsQuestion; diff --git a/src/features/surveys/components/surveyForm/TextBlock.tsx b/src/features/surveys/components/surveyForm/TextBlock.tsx new file mode 100644 index 0000000000..d1f79f352d --- /dev/null +++ b/src/features/surveys/components/surveyForm/TextBlock.tsx @@ -0,0 +1,8 @@ +import { FC } from 'react'; +import { ZetkinSurveyTextElement } from 'utils/types/zetkin'; + +const TextBlock: FC<{ element: ZetkinSurveyTextElement }> = ({ element }) => { + return

{element.text_block.content}

; +}; + +export default TextBlock; diff --git a/src/features/surveys/components/surveyForm/TextQuestion.tsx b/src/features/surveys/components/surveyForm/TextQuestion.tsx new file mode 100644 index 0000000000..7e305702bb --- /dev/null +++ b/src/features/surveys/components/surveyForm/TextQuestion.tsx @@ -0,0 +1,22 @@ +import { FC } from 'react'; +import { ZetkinSurveyTextQuestionElement } from 'utils/types/zetkin'; +import { FormControl, FormLabel, TextField } from '@mui/material'; + +const OptionsQuestion: FC<{ element: ZetkinSurveyTextQuestionElement }> = ({ + element, +}) => { + return ( + + + {element.question.question} + + + + ); +}; + +export default OptionsQuestion; diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index fb383d8670..7ccf043f23 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -7,6 +7,15 @@ import messageIds from 'features/surveys/l10n/messageIds'; import { parse } from 'querystring'; import { scaffold } from 'utils/next'; import useCurrentUser from 'features/user/hooks/useCurrentUser'; +import { + ZetkinSurveyOptionsQuestionElement, + ZetkinSurveyTextElement, + ZetkinSurveyTextQuestionElement, +} from 'utils/types/zetkin'; + +import OptionsQuestion from 'features/surveys/components/surveyForm/OptionsQuestion'; +import TextBlock from 'features/surveys/components/surveyForm/TextBlock'; +import TextQuestion from 'features/surveys/components/surveyForm/TextQuestion'; import useSurvey from 'features/surveys/hooks/useSurvey'; import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; @@ -179,32 +188,22 @@ const Page: FC = ({ orgId, surveyId }) => { {(elements.data || []).map((element) => (
{element.type === 'question' && ( - - + <> {element.question.response_type === 'text' && ( - )} {element.question.response_type === 'options' && ( - + )} - + + )} + {element.type === 'text' && ( + )} - {element.type === 'text' &&

{element.text_block.content}

}
))} From 67403fcf9a56885a32eceeeb89577572c83560f2 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 12 Nov 2023 09:49:11 +0100 Subject: [PATCH 16/86] Fix the playwright test for the new survey page --- .../mockData/orgs/KPD/surveys/MembershipSurvey/index.ts | 2 +- .../tests/organize/surveys/submitting-survey.spec.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts b/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts index 3d8e28a335..eedea651ff 100644 --- a/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts +++ b/integrationTesting/mockData/orgs/KPD/surveys/MembershipSurvey/index.ts @@ -21,7 +21,7 @@ const KPDMembershipSurvey: ZetkinSurveyExtended = { text: 'Yes', }, { - id: 1, + id: 2, text: 'No', }, ], diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 0423f17ed6..38d9a0d03b 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -44,11 +44,12 @@ test.describe('User submitting a survey', () => { `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` ); + await page.click('input[name="1.options"]'); await page.fill('input[name="2.text"]', 'Topple capitalism'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ - await page.click('data-testid=Survey-submit'), page.waitForResponse((res) => res.request().method() == 'POST'), + await page.click('data-testid=Survey-submit'), ]); const reqLog = moxy.log(`/v1${apiPostPath}`); From df4815ca4804e2db0c567d9efbe6b363895177be Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 12 Nov 2023 10:30:52 +0100 Subject: [PATCH 17/86] Align new survey signature formdata with old survey --- .../o/[orgId]/surveys/[surveyId]/index.tsx | 56 ++++++------------- 1 file changed, 16 insertions(+), 40 deletions(-) diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 7ccf043f23..a0d45eadcd 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -142,6 +142,8 @@ type PageProps = { surveyId: string; }; +type SignatureOption = 'authenticated' | 'email' | 'anonymous'; + const Page: FC = ({ orgId, surveyId }) => { const elements = useSurveyElements( parseInt(orgId, 10), @@ -150,27 +152,14 @@ const Page: FC = ({ orgId, surveyId }) => { const messages = useMessages(messageIds); const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); - const [selectedOption, setSelectedOption] = useState< - null | 'authenticated' | 'name+email' | 'anonymous' - >(null); - const [customInput, setCustomInput] = useState({ - email: '', - name: '', - }); + const [selectedOption, setSelectedOption] = useState( + null + ); - const handleRadioChange = ( - value: 'authenticated' | 'name+email' | 'anonymous' - ) => { + const handleRadioChange = (value: SignatureOption) => { setSelectedOption(value); }; - const handleCustomInputChange = (field: 'name' | 'email', value: string) => { - setCustomInput((prevInput) => ({ - ...prevInput, - [field]: value, - })); - }; - const currentUser = useCurrentUser(); return ( @@ -211,11 +200,8 @@ const Page: FC = ({ orgId, surveyId }) => { - handleRadioChange( - e.target.value as 'authenticated' | 'name+email' | 'anonymous' - ) - } + name="sig" + onChange={(e) => handleRadioChange(e.target.value as SignatureOption)} value={selectedOption} > = ({ orgId, surveyId }) => { - {selectedOption === 'name+email' && ( - <> - - handleCustomInputChange('name', e.target.value) - } - value={customInput.name} - /> - - handleCustomInputChange('email', e.target.value) - } - value={customInput.email} - /> - + {selectedOption === 'email' && ( + + + + + )} } - value="name+email" + value="email" /> {survey.data?.signature === 'allow_anonymous' && ( = ({ orgId, surveyId }) => { control={} data-testid="Survey-acceptTerms" label={} + name="privacy.approval" /> Date: Sun, 12 Nov 2023 10:08:22 +0100 Subject: [PATCH 18/86] Add email:string to ZetkinUser --- integrationTesting/mockData/users/RosaLuxemburgUser.ts | 1 + src/pages/o/[orgId]/surveys/[surveyId]/index.tsx | 2 +- src/utils/types/zetkin.ts | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/integrationTesting/mockData/users/RosaLuxemburgUser.ts b/integrationTesting/mockData/users/RosaLuxemburgUser.ts index 93531f9f2e..aea8a49785 100644 --- a/integrationTesting/mockData/users/RosaLuxemburgUser.ts +++ b/integrationTesting/mockData/users/RosaLuxemburgUser.ts @@ -1,6 +1,7 @@ import { ZetkinUser } from 'utils/types/zetkin'; const RosaLuxemburgUser: ZetkinUser = { + email: 'rosa@example.org', first_name: 'Rosa', id: 1, lang: null, diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index a0d45eadcd..49a886120d 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -211,7 +211,7 @@ const Page: FC = ({ orgId, surveyId }) => { diff --git a/src/utils/types/zetkin.ts b/src/utils/types/zetkin.ts index 890fcb68e4..b033cc5c64 100644 --- a/src/utils/types/zetkin.ts +++ b/src/utils/types/zetkin.ts @@ -135,6 +135,7 @@ export interface ZetkinUser { lang: string | null; last_name: string; username: string; + email: string; } export interface ZetkinOrganization { From 4f7c6e8986b9445288419c13052f2ca2bc47888e Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 12 Nov 2023 11:18:41 +0100 Subject: [PATCH 19/86] Load survey in getServerSideProps and add error handling --- .../components/surveyForm/ErrorMessage.tsx | 14 ++++ src/features/surveys/l10n/messageIds.ts | 3 + .../o/[orgId]/surveys/[surveyId]/index.tsx | 72 +++++++++++-------- 3 files changed, 61 insertions(+), 28 deletions(-) create mode 100644 src/features/surveys/components/surveyForm/ErrorMessage.tsx diff --git a/src/features/surveys/components/surveyForm/ErrorMessage.tsx b/src/features/surveys/components/surveyForm/ErrorMessage.tsx new file mode 100644 index 0000000000..3b40e872d1 --- /dev/null +++ b/src/features/surveys/components/surveyForm/ErrorMessage.tsx @@ -0,0 +1,14 @@ +import Box from '@mui/material/Box'; +import { FC } from 'react'; +import messageIds from 'features/surveys/l10n/messageIds'; +import { Msg } from 'core/i18n'; + +const ErrorMessage: FC = () => { + return ( + + + + ); +}; + +export default ErrorMessage; diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index 865b700e58..181b3a6163 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -164,6 +164,9 @@ export default makeMessages('feat.surveys', { authenticatedOption: m<{ email: string; person: string }>( 'Sign as {person} with email {email}' ), + error: m( + 'Something went wrong when submitting your answers. Please try again later.' + ), nameEmailOption: m('Sign with name and email'), policy: { link: m('https://zetkin.org/privacy'), diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 49a886120d..9120c5f617 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -8,16 +8,16 @@ import { parse } from 'querystring'; import { scaffold } from 'utils/next'; import useCurrentUser from 'features/user/hooks/useCurrentUser'; import { + ZetkinSurveyExtended, ZetkinSurveyOptionsQuestionElement, ZetkinSurveyTextElement, ZetkinSurveyTextQuestionElement, } from 'utils/types/zetkin'; +import ErrorMessage from 'features/surveys/components/surveyForm/ErrorMessage'; import OptionsQuestion from 'features/surveys/components/surveyForm/OptionsQuestion'; import TextBlock from 'features/surveys/components/surveyForm/TextBlock'; import TextQuestion from 'features/surveys/components/surveyForm/TextQuestion'; -import useSurvey from 'features/surveys/hooks/useSurvey'; -import useSurveyElements from 'features/surveys/hooks/useSurveyElements'; import ZUIAvatar from 'zui/ZUIAvatar'; import { FC, useState } from 'react'; @@ -54,6 +54,17 @@ function parseRequest( export const getServerSideProps = scaffold(async (ctx) => { const { req, res } = ctx; const { surveyId, orgId } = ctx.params!; + let status: FormStatus = 'editing'; + + const apiClient = new BackendApiClient(req.headers); + let survey: ZetkinSurveyExtended; + try { + survey = await apiClient.get( + `/api/orgs/${orgId}/surveys/${surveyId}` + ); + } catch (e) { + return { notFound: true }; + } if (req.method === 'POST') { const form = await parseRequest(req); @@ -111,46 +122,49 @@ export const getServerSideProps = scaffold(async (ctx) => { }; } - const apiClient = new BackendApiClient(req.headers); - const requestUrl = `/api/orgs/${orgId}/surveys/${surveyId}/submissions`; try { - await apiClient.post(requestUrl, { - responses: Object.values(responses), - signature, - }); + await apiClient.post( + `/api/orgs/${orgId}/surveys/${surveyId}/submissions`, + { + responses: Object.values(responses), + signature, + } + ); } catch (e) { - // eslint-disable-next-line no-console - console.log(e); + status = 'error'; + } + if (status !== 'error') { + status = 'submitted'; } - res.writeHead(302, { - Location: `/o/${orgId}/surveys/${surveyId}/submitted`, - }); - res.end(); + if (status === 'submitted') { + res.writeHead(302, { + Location: `/o/${orgId}/surveys/${surveyId}/submitted`, + }); + res.end(); + } } return { props: { orgId, - surveyId, + status, + survey, }, }; }, scaffoldOptions); type PageProps = { orgId: string; - surveyId: string; + status: FormStatus; + survey: ZetkinSurveyExtended; }; +type FormStatus = 'editing' | 'invalid' | 'error' | 'submitted'; type SignatureOption = 'authenticated' | 'email' | 'anonymous'; -const Page: FC = ({ orgId, surveyId }) => { - const elements = useSurveyElements( - parseInt(orgId, 10), - parseInt(surveyId, 10) - ); +const Page: FC = ({ orgId, status, survey }) => { const messages = useMessages(messageIds); - const survey = useSurvey(parseInt(orgId, 10), parseInt(surveyId, 10)); const [selectedOption, setSelectedOption] = useState( null @@ -164,17 +178,19 @@ const Page: FC = ({ orgId, surveyId }) => { return ( <> -

{survey.data?.title}

+

{survey.title}

+ + {status === 'error' && } - {survey.data?.info_text &&

{survey.data?.info_text}

} + {survey.info_text &&

{survey.info_text}

} - {survey.data?.organization.title} + {survey.organization.title}
- {(elements.data || []).map((element) => ( + {survey.elements.map((element) => (
{element.type === 'question' && ( <> @@ -238,7 +254,7 @@ const Page: FC = ({ orgId, surveyId }) => { } value="email" /> - {survey.data?.signature === 'allow_anonymous' && ( + {survey.signature === 'allow_anonymous' && ( } label={ @@ -260,7 +276,7 @@ const Page: FC = ({ orgId, surveyId }) => { From eefa86aa7b5aec19b9ae2dc18323717b9410c813 Mon Sep 17 00:00:00 2001 From: xuan tran Date: Sun, 12 Nov 2023 12:14:10 +0100 Subject: [PATCH 20/86] Form styling --- .../components/surveyForm/OptionsQuestion.tsx | 11 +++- .../components/surveyForm/TextQuestion.tsx | 14 ++++- src/features/surveys/l10n/messageIds.ts | 2 +- .../o/[orgId]/surveys/[surveyId]/index.tsx | 54 ++++++++++++++++--- 4 files changed, 69 insertions(+), 12 deletions(-) diff --git a/src/features/surveys/components/surveyForm/OptionsQuestion.tsx b/src/features/surveys/components/surveyForm/OptionsQuestion.tsx index c36a161cde..549ba1105b 100644 --- a/src/features/surveys/components/surveyForm/OptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/OptionsQuestion.tsx @@ -20,7 +20,16 @@ const OptionsQuestion: FC<{ element: ZetkinSurveyOptionsQuestionElement }> = ({ }) => { return ( - + {element.question.question} {element.question.response_config.widget_type === 'checkbox' && ( diff --git a/src/features/surveys/components/surveyForm/TextQuestion.tsx b/src/features/surveys/components/surveyForm/TextQuestion.tsx index 7e305702bb..ea19646066 100644 --- a/src/features/surveys/components/surveyForm/TextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/TextQuestion.tsx @@ -6,11 +6,21 @@ const OptionsQuestion: FC<{ element: ZetkinSurveyTextQuestionElement }> = ({ element, }) => { return ( - - + + {element.question.question} ( 'When you submit this survey, the information you provide will be stored and processed in Zetkin by {organization} in order to organize activism and in accordance with the Zetkin privacy policy.' diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index 9120c5f617..bd76fe3e02 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -22,12 +22,15 @@ import ZUIAvatar from 'zui/ZUIAvatar'; import { FC, useState } from 'react'; import { + Container, FormControlLabel, + FormControlLabelProps, Link, Radio, RadioGroup, TextField, Typography, + useRadioGroup, } from '@mui/material'; import { Msg, useMessages } from 'core/i18n'; @@ -163,6 +166,31 @@ type PageProps = { type FormStatus = 'editing' | 'invalid' | 'error' | 'submitted'; type SignatureOption = 'authenticated' | 'email' | 'anonymous'; +function RadioFormControlLabel(props: FormControlLabelProps) { + const radioGroup = useRadioGroup(); + + let checked = false; + + if (radioGroup) { + checked = radioGroup.value === props.value; + } + + if (checked) { + return ( + + ); + } + + return ; +} + const Page: FC = ({ orgId, status, survey }) => { const messages = useMessages(messageIds); @@ -177,7 +205,7 @@ const Page: FC = ({ orgId, status, survey }) => { const currentUser = useCurrentUser(); return ( - <> +

{survey.title}

{status === 'error' && } @@ -211,7 +239,15 @@ const Page: FC = ({ orgId, status, survey }) => { )}
))} - + @@ -220,7 +256,7 @@ const Page: FC = ({ orgId, status, survey }) => { onChange={(e) => handleRadioChange(e.target.value as SignatureOption)} value={selectedOption} > - } label={ @@ -236,7 +272,7 @@ const Page: FC = ({ orgId, status, survey }) => { value="authenticated" /> - } label={
@@ -254,8 +290,9 @@ const Page: FC = ({ orgId, status, survey }) => { } value="email" /> + {survey.signature === 'allow_anonymous' && ( - } label={ @@ -273,13 +310,13 @@ const Page: FC = ({ orgId, status, survey }) => { label={} name="privacy.approval" /> - + - + = ({ orgId, status, survey }) => { - + ); }; From cec25a907cb9f65dfb25a2ed7ba002bf51077575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Ringstr=C3=B6m?= Date: Sun, 12 Nov 2023 12:06:05 +0100 Subject: [PATCH 21/86] Merging conflicts --- .../surveys/submitting-survey.spec.ts | 1 + src/features/surveys/l10n/messageIds.ts | 11 +- src/locale/sv.yml | 8 +- .../o/[orgId]/surveys/[surveyId]/index.tsx | 108 +++++++++--------- 4 files changed, 69 insertions(+), 59 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 38d9a0d03b..219d5066a9 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -46,6 +46,7 @@ test.describe('User submitting a survey', () => { await page.click('input[name="1.options"]'); await page.fill('input[name="2.text"]', 'Topple capitalism'); + await page.click('input[name="sig"][value="authenticated"]'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ page.waitForResponse((res) => res.request().method() == 'POST'), diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index a9a0892bcc..f78bab07d3 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -173,14 +173,17 @@ export default makeMessages('feat.surveys', { text: m('Click to read the full Zetkin Privacy Policy'), }, sign: { - anonymous: m('Submit anonymously'), + anonymous: m('Sign anonymously'), nameAndEmail: m('Sign with name and e-mail'), }, signOptions: m('Choose how to sign'), submit: m('Submit'), - termsDescription: m<{ organization: string }>( - 'When you submit this survey, the information you provide will be stored and processed in Zetkin by {organization} in order to organize activism and in accordance with the Zetkin privacy policy.' - ), + terms: { + description: m<{ organization: string }>( + 'When you submit this survey, the information you provide will be stored and processed in Zetkin by {organization} in order to organize activism and in accordance with the Zetkin privacy policy.' + ), + title: m('Privacy Policy'), + }, }, tabs: { overview: m('Overview'), diff --git a/src/locale/sv.yml b/src/locale/sv.yml index 2b3405bdf6..dcb81bf873 100644 --- a/src/locale/sv.yml +++ b/src/locale/sv.yml @@ -1422,10 +1422,12 @@ feat: link: https://zetkin.org/sv/sekretess text: Klicka här för att läsa Zetkins sekretesspolicy sign: - anonymous: Skicka anonymt - nameAndEmail: Skicka med namn och e-mail + anonymous: Signera anonymt + nameAndEmail: Signera med namn och e-mail submit: Skicka - termsDescription: När du skickar in enkäten kommer informationen att lagras i Zetkin och hanteras av {organization} i deras verksamhet, i enlighet med Zetkins sekretesspolicy. + terms: + description: När du skickar in enkäten kommer informationen att lagras i Zetkin och hanteras av {organization} i deras verksamhet, i enlighet med Zetkins sekretesspolicy. + title: Sekretesspolicy tabs: overview: Översikt questions: Frågor diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index bd76fe3e02..d49549237a 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,27 +1,18 @@ import BackendApiClient from 'core/api/client/BackendApiClient'; -import Box from '@mui/system/Box'; -import Button from '@mui/material/Button'; -import Checkbox from '@mui/material/Checkbox'; +import ErrorMessage from 'features/surveys/components/surveyForm/ErrorMessage'; import { IncomingMessage } from 'http'; import messageIds from 'features/surveys/l10n/messageIds'; +import OptionsQuestion from 'features/surveys/components/surveyForm/OptionsQuestion'; import { parse } from 'querystring'; import { scaffold } from 'utils/next'; -import useCurrentUser from 'features/user/hooks/useCurrentUser'; -import { - ZetkinSurveyExtended, - ZetkinSurveyOptionsQuestionElement, - ZetkinSurveyTextElement, - ZetkinSurveyTextQuestionElement, -} from 'utils/types/zetkin'; - -import ErrorMessage from 'features/surveys/components/surveyForm/ErrorMessage'; -import OptionsQuestion from 'features/surveys/components/surveyForm/OptionsQuestion'; import TextBlock from 'features/surveys/components/surveyForm/TextBlock'; import TextQuestion from 'features/surveys/components/surveyForm/TextQuestion'; +import useCurrentUser from 'features/user/hooks/useCurrentUser'; import ZUIAvatar from 'zui/ZUIAvatar'; -import { FC, useState } from 'react'; - import { + Box, + Button, + Checkbox, Container, FormControlLabel, FormControlLabelProps, @@ -32,8 +23,14 @@ import { Typography, useRadioGroup, } from '@mui/material'; - +import { FC, useState } from 'react'; import { Msg, useMessages } from 'core/i18n'; +import { + ZetkinSurveyExtended, + ZetkinSurveyOptionsQuestionElement, + ZetkinSurveyTextElement, + ZetkinSurveyTextQuestionElement, +} from 'utils/types/zetkin'; const scaffoldOptions = { allowNonOfficials: true, @@ -206,17 +203,17 @@ const Page: FC = ({ orgId, status, survey }) => { return ( -

{survey.title}

- - {status === 'error' && } - - {survey.info_text &&

{survey.info_text}

} - {survey.organization.title} + {status === 'error' && } + +

{survey.title}

+ + {survey.info_text &&

{survey.info_text}

} +
{survey.elements.map((element) => (
@@ -257,7 +254,7 @@ const Page: FC = ({ orgId, status, survey }) => { value={selectedOption} > } + control={} label={ = ({ orgId, status, survey }) => { /> } + control={} label={
- {selectedOption === 'email' && ( - - - - - - )}
} value="email" /> + {selectedOption === 'email' && ( + + + + + + )} + {survey.signature === 'allow_anonymous' && ( } + control={} label={ @@ -304,27 +302,33 @@ const Page: FC = ({ orgId, status, survey }) => { )} - } - data-testid="Survey-acceptTerms" - label={} - name="privacy.approval" - /> - - + + + + + } + data-testid="Survey-acceptTerms" + label={} + name="privacy.approval" /> - - - - - - + + + + + + + + + + ); +}; + +export default SurveySubmitButton; diff --git a/src/features/surveys/components/surveyForm/SurveySuccess.tsx b/src/features/surveys/components/surveyForm/SurveySuccess.tsx new file mode 100644 index 0000000000..bc2c968c95 --- /dev/null +++ b/src/features/surveys/components/surveyForm/SurveySuccess.tsx @@ -0,0 +1,27 @@ +import { Box } from '@mui/material'; +import { FC } from 'react'; +import messageIds from 'features/surveys/l10n/messageIds'; +import { Msg } from 'core/i18n'; +import { ZetkinSurveyExtended } from 'utils/types/zetkin'; + +export type SurveySuccessProps = { + survey: ZetkinSurveyExtended; +}; + +const SurveySuccess: FC = ({ survey }) => { + return ( + +

+ +

+

+ +

+
+ ); +}; + +export default SurveySuccess; diff --git a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx new file mode 100644 index 0000000000..836f3d161a --- /dev/null +++ b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx @@ -0,0 +1,12 @@ +import { FC } from 'react'; +import { ZetkinSurveyTextElement } from 'utils/types/zetkin'; + +export type SurveyTextBlockProps = { + element: ZetkinSurveyTextElement; +}; + +const SurveyTextBlock: FC = ({ element }) => { + return

{element.text_block.content}

; +}; + +export default SurveyTextBlock; diff --git a/src/features/surveys/components/surveyForm/TextQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx similarity index 60% rename from src/features/surveys/components/surveyForm/TextQuestion.tsx rename to src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx index 2fd950549b..09be695478 100644 --- a/src/features/surveys/components/surveyForm/TextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx @@ -2,13 +2,19 @@ import { FC } from 'react'; import { ZetkinSurveyTextQuestionElement } from 'utils/types/zetkin'; import { FormControl, FormLabel, TextField } from '@mui/material'; -const OptionsQuestion: FC<{ - defaultValue?: string; +export type SurveyOptionsQuestionProps = { element: ZetkinSurveyTextQuestionElement; -}> = ({ element, defaultValue = '' }) => { + formData: NodeJS.Dict; +}; + +const SurveyOptionsQuestion: FC = ({ + element, + formData, +}) => { return ( = ({ element }) => { - return

{element.text_block.content}

; -}; - -export default TextBlock; diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx index cb1f631107..6548f059f0 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/index.tsx @@ -1,32 +1,19 @@ import BackendApiClient from 'core/api/client/BackendApiClient'; -import ErrorMessage from 'features/surveys/components/surveyForm/ErrorMessage'; +import { Container } from '@mui/material'; import { FC } from 'react'; import { IncomingMessage } from 'http'; -import messageIds from 'features/surveys/l10n/messageIds'; -import OptionsQuestion from 'features/surveys/components/surveyForm/OptionsQuestion'; import { parse } from 'querystring'; import { scaffold } from 'utils/next'; +import SurveyElements from 'features/surveys/components/surveyForm/SurveyElements'; +import SurveyHeading from 'features/surveys/components/surveyForm/SurveyHeading'; +import SurveyPrivacyPolicy from 'features/surveys/components/surveyForm/SurveyPrivacyPolicy'; import SurveySignature from 'features/surveys/components/surveyForm/SurveySignature'; -import TextBlock from 'features/surveys/components/surveyForm/TextBlock'; -import TextQuestion from 'features/surveys/components/surveyForm/TextQuestion'; -import ZUIAvatar from 'zui/ZUIAvatar'; -import { - Box, - Button, - Checkbox, - Container, - FormControlLabel, - Link, - Typography, -} from '@mui/material'; -import { Msg, useMessages } from 'core/i18n'; +import SurveySubmitButton from 'features/surveys/components/surveyForm/SurveySubmitButton'; import { ZetkinSurveyExtended, - ZetkinSurveyOptionsQuestionElement, + ZetkinSurveyFormStatus, ZetkinSurveyQuestionResponse, ZetkinSurveySignaturePayload, - ZetkinSurveyTextElement, - ZetkinSurveyTextQuestionElement, } from 'utils/types/zetkin'; const scaffoldOptions = { @@ -51,7 +38,7 @@ function parseRequest( export const getServerSideProps = scaffold(async (ctx) => { const { req } = ctx; const { surveyId, orgId } = ctx.params!; - let status: FormStatus = 'editing'; + let status: ZetkinSurveyFormStatus = 'editing'; let formData: NodeJS.Dict = {}; const apiClient = new BackendApiClient(req.headers); @@ -153,96 +140,19 @@ export const getServerSideProps = scaffold(async (ctx) => { type PageProps = { formData: NodeJS.Dict; - orgId: string; - status: FormStatus; + status: ZetkinSurveyFormStatus; survey: ZetkinSurveyExtended; }; -type FormStatus = 'editing' | 'invalid' | 'error' | 'submitted'; - -const Page: FC = ({ formData, orgId, status, survey }) => { - const messages = useMessages(messageIds); - +const Page: FC = ({ formData, status, survey }) => { return ( - - - {survey.organization.title} - - - {status === 'error' && } - -

{survey.title}

- - {survey.info_text &&

{survey.info_text}

} - + - {survey.elements.map((element) => ( -
- {element.type === 'question' && ( - <> - {element.question.response_type === 'text' && ( - - )} - {element.question.response_type === 'options' && ( - - )} - - )} - {element.type === 'text' && ( - - )} -
- ))} - + - - - - - - - } - data-testid="Survey-acceptTerms" - label={} - name="privacy.approval" - /> - - - - - - - - - - - + +
); diff --git a/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx b/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx index c6c08e8575..bbb4b2376e 100644 --- a/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx +++ b/src/pages/o/[orgId]/surveys/[surveyId]/submitted/index.tsx @@ -1,8 +1,7 @@ import BackendApiClient from 'core/api/client/BackendApiClient'; import { FC } from 'react'; -import messageIds from 'features/surveys/l10n/messageIds'; -import { Msg } from 'core/i18n'; import { scaffold } from 'utils/next'; +import SurveySuccess from 'features/surveys/components/surveyForm/SurveySuccess'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; const scaffoldOptions = { @@ -36,19 +35,7 @@ type PageProps = { }; const Page: FC = ({ survey }) => { - return ( - <> -

- -

-

- -

- - ); + return ; }; export default Page; diff --git a/src/utils/types/zetkin.ts b/src/utils/types/zetkin.ts index b5c78b046d..91a804260e 100644 --- a/src/utils/types/zetkin.ts +++ b/src/utils/types/zetkin.ts @@ -282,6 +282,12 @@ export type ZetkinSurveyElement = | ZetkinSurveyTextElement | ZetkinSurveyQuestionElement; +export type ZetkinSurveyFormStatus = + | 'editing' + | 'invalid' + | 'error' + | 'submitted'; + export enum RESPONSE_TYPE { OPTIONS = 'options', TEXT = 'text', From 832e194e6f3769df7b4cc329f393cc4d37d8adff Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Thu, 7 Dec 2023 21:07:56 +0100 Subject: [PATCH 34/86] Tweak according to PR feedback --- .../components/surveyForm/SurveyOptionsQuestion.tsx | 8 +++++--- .../surveys/components/surveyForm/SurveySuccess.tsx | 6 +++--- .../surveys/components/surveyForm/SurveyTextBlock.tsx | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index 70824629a8..f25a1799c9 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -32,7 +32,7 @@ const OptionsQuestion: FC = ({ element, formData }) => { return ( - {element.question.response_config.widget_type === 'checkbox' ? ( + {element.question.response_config.widget_type === 'checkbox' && ( = ({ element, formData }) => { /> ))} - ) : element.question.response_config.widget_type === 'radio' ? ( + )} + {element.question.response_config.widget_type === 'radio' && ( = ({ element, formData }) => { /> ))} - ) : ( + )} + {element.question.response_config.widget_type === 'select' && ( {element.question.options!.map((option: ZetkinSurveyOption) => ( diff --git a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx index 731b485314..177b43d6c2 100644 --- a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx +++ b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx @@ -14,14 +14,10 @@ import { import { Msg, useMessages } from 'core/i18n'; export type SurveyPrivacyPolicyProps = { - formData: NodeJS.Dict; survey: ZetkinSurveyExtended; }; -const SurveyPrivacyPolicy: FC = ({ - formData, - survey, -}) => { +const SurveyPrivacyPolicy: FC = ({ survey }) => { const messages = useMessages(messageIds); return ( @@ -32,12 +28,7 @@ const SurveyPrivacyPolicy: FC = ({
- } + control={} data-testid="Survey-acceptTerms" label={} name="privacy.approval" diff --git a/src/features/surveys/components/surveyForm/SurveyQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyQuestion.tsx index 64b7851da9..82a0e3116f 100644 --- a/src/features/surveys/components/surveyForm/SurveyQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyQuestion.tsx @@ -9,22 +9,19 @@ import { export type SurveyQuestionProps = { element: ZetkinSurveyQuestionElement; - formData: NodeJS.Dict; }; -const SurveyQuestion: FC = ({ element, formData }) => { +const SurveyQuestion: FC = ({ element }) => { return ( <> {element.question.response_type === 'text' && ( )} {element.question.response_type === 'options' && ( )} diff --git a/src/features/surveys/components/surveyForm/SurveySignature.tsx b/src/features/surveys/components/surveyForm/SurveySignature.tsx index 6f6e4ef934..a910c376b3 100644 --- a/src/features/surveys/components/surveyForm/SurveySignature.tsx +++ b/src/features/surveys/components/surveyForm/SurveySignature.tsx @@ -21,17 +21,16 @@ import { } from 'utils/types/zetkin'; export type SurveySignatureProps = { - formData: NodeJS.Dict; survey: ZetkinSurveyExtended; }; -const SurveySignature: FC = ({ formData, survey }) => { +const SurveySignature: FC = ({ survey }) => { // const currentUser = useCurrentUser(); const theme = useTheme(); const [signatureType, setSignatureType] = useState< ZetkinSurveySignatureType | undefined - >(formData['sig'] as ZetkinSurveySignatureType | undefined); + >(undefined); const handleRadioChange = useCallback( (value: ZetkinSurveySignatureType) => { @@ -44,7 +43,6 @@ const SurveySignature: FC = ({ formData, survey }) => { handleRadioChange(e.target.value as ZetkinSurveySignatureType) @@ -91,19 +89,16 @@ const SurveySignature: FC = ({ formData, survey }) => { style={{ rowGap: theme.spacing(1) }} > } name="sig.first_name" required /> } name="sig.last_name" required /> } name="sig.email" required diff --git a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx index d41c957c44..c3295720bb 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx @@ -5,24 +5,15 @@ import { FormControl, FormLabel, TextField } from '@mui/material'; export type SurveyOptionsQuestionProps = { element: ZetkinSurveyTextQuestionElement; - formData: NodeJS.Dict; }; -const SurveyOptionsQuestion: FC = ({ - element, - formData, -}) => { +const SurveyOptionsQuestion: FC = ({ element }) => { return ( {element.question.question} { - const { req } = ctx; - const { surveyId, orgId } = ctx.params!; - - const apiClient = new BackendApiClient(req.headers); - let survey: ZetkinSurveyExtended; - try { - survey = await apiClient.get( - `/api/orgs/${orgId}/surveys/${surveyId}` - ); - } catch (e) { - return { notFound: true }; - } - - return { - props: { - survey, - }, - }; -}, scaffoldOptions); - -type PageProps = { - survey: ZetkinSurveyExtended; -}; - -const Page: FC = ({ survey }) => { - return ; -}; - -export default Page; From e7df6b474013285068cc9b9dbd8568e8ae553698 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 7 Jan 2024 08:52:16 +0100 Subject: [PATCH 49/86] Try out server actions --- .../surveys/[surveyId]/submissions/route.tsx | 32 ----------- src/app/o/[orgId]/surveys/[surveyId]/page.tsx | 55 ++++++------------- .../components/surveyForm/SurveyForm.tsx | 29 ++++++---- .../utils/prepareSurveyApiSubmission.ts | 2 +- 4 files changed, 38 insertions(+), 80 deletions(-) delete mode 100644 src/app/api/orgs/[orgId]/surveys/[surveyId]/submissions/route.tsx diff --git a/src/app/api/orgs/[orgId]/surveys/[surveyId]/submissions/route.tsx b/src/app/api/orgs/[orgId]/surveys/[surveyId]/submissions/route.tsx deleted file mode 100644 index 6f84c9ce16..0000000000 --- a/src/app/api/orgs/[orgId]/surveys/[surveyId]/submissions/route.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import BackendApiClient from 'core/api/client/BackendApiClient'; -import prepareSurveyApiSubmission from 'features/surveys/utils/prepareSurveyApiSubmission'; -import { ZetkinSurveyExtended } from 'utils/types/zetkin'; - -type Params = { - orgId: string; - surveyId: string; -}; - -export async function POST(request: Request, { params }: { params: Params }) { - const apiClient = new BackendApiClient( - Object.fromEntries(request.headers.entries()) - ); - - try { - await apiClient.get( - `/api/orgs/${params.orgId}/surveys/${params.surveyId}` - ); - } catch (e) { - return { notFound: true }; - } - - const formData = await request.json(); - const submission = prepareSurveyApiSubmission(formData, false); - - await apiClient.post( - `/api/orgs/${params.orgId}/surveys/${params.surveyId}/submissions`, - submission - ); - - return new Response(null, { status: 201 }); -} diff --git a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx index 753a9e9bbe..0822f62d60 100644 --- a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx +++ b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx @@ -1,15 +1,11 @@ -'use client'; - +import BackendApiClient from 'core/api/client/BackendApiClient'; import { Container } from '@mui/material'; +import { FC } from 'react'; +import prepareSurveyApiSubmission from 'features/surveys/utils/prepareSurveyApiSubmission'; import SurveyForm from 'features/surveys/components/surveyForm/SurveyForm'; -import SurveyHeading from 'features/surveys/components/surveyForm/SurveyHeading'; -import { useRouter } from 'next/navigation'; +// import { useRouter } from 'next/navigation'; import useSurvey from 'features/surveys/hooks/useSurvey'; -import { FC, FormEvent, useCallback, useState } from 'react'; -import { - ZetkinSurveyExtended, - ZetkinSurveyFormStatus, -} from 'utils/types/zetkin'; +import { ZetkinSurveyExtended } from 'utils/types/zetkin'; type PageProps = { params: { @@ -19,38 +15,24 @@ type PageProps = { }; const Page: FC = ({ params }) => { - const router = useRouter(); + // const router = useRouter(); const { data: survey } = useSurvey( parseInt(params.orgId, 10), parseInt(params.surveyId, 10) ); - const [status, setStatus] = useState('editing'); - - const onSubmit = useCallback(async (e: FormEvent) => { - e.preventDefault(); - const formData = new FormData(e.target as HTMLFormElement); - const entries = [...formData.entries()]; - const data = Object.fromEntries(entries); - try { - await fetch( - `/api/orgs/${params.orgId}/surveys/${params.surveyId}/submissions`, - { - body: JSON.stringify(data), - headers: { - 'Content-Type': 'application/json', - }, - method: 'POST', - } - ); - } catch (e) { - setStatus('error'); - window.scrollTo(0, 0); - return; - } - router.push(`/o/${params.orgId}/surveys/${params.surveyId}/submitted`); - }, []); + const submit = async (formData: FormData): Promise => { + const submission = prepareSurveyApiSubmission( + Object.fromEntries([...formData.entries()]), + false + ); + const apiClient = new BackendApiClient({}); + await apiClient.post( + `/api/orgs/${params.orgId}/surveys/${params.surveyId}/submissions`, + submission + ); + }; if (!survey) { return null; @@ -58,8 +40,7 @@ const Page: FC = ({ params }) => { return ( - - + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index 336b8cee4c..1fac06429b 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -1,25 +1,34 @@ 'use client'; +import { FC } from 'react'; import SurveyElements from './SurveyElements'; +import SurveyHeading from './SurveyHeading'; import SurveyPrivacyPolicy from './SurveyPrivacyPolicy'; import SurveySignature from './SurveySignature'; import SurveySubmitButton from './SurveySubmitButton'; -import { ZetkinSurveyExtended } from 'utils/types/zetkin'; -import { FC, FormEvent } from 'react'; +import { + ZetkinSurveyExtended, + ZetkinSurveyFormStatus, +} from 'utils/types/zetkin'; export type SurveyFormProps = { - onSubmit: (e: FormEvent) => void; + action: (formData: FormData) => Promise; survey: ZetkinSurveyExtended; }; -const SurveyForm: FC = ({ onSubmit, survey }) => { +const SurveyForm: FC = ({ action, survey }) => { + const status = 'editing' as ZetkinSurveyFormStatus; + return ( -
- - - - - + <> + +
+ + + + + + ); }; diff --git a/src/features/surveys/utils/prepareSurveyApiSubmission.ts b/src/features/surveys/utils/prepareSurveyApiSubmission.ts index 24f2b678e4..52cb31d64b 100644 --- a/src/features/surveys/utils/prepareSurveyApiSubmission.ts +++ b/src/features/surveys/utils/prepareSurveyApiSubmission.ts @@ -5,7 +5,7 @@ import { } from 'utils/types/zetkin'; export default function prepareSurveyApiSubmission( - formData: NodeJS.Dict, + formData: Record, isLoggedIn?: boolean ): ZetkinSurveyApiSubmission { const responses: ZetkinSurveyQuestionResponse[] = []; From 39d33c54a06406c2a2a918542fd50e26386a14a3 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 21 Jan 2024 14:50:08 +0100 Subject: [PATCH 50/86] Get server action working --- next.config.js | 5 ++- src/app/o/[orgId]/surveys/[surveyId]/page.tsx | 40 ++++--------------- src/features/surveys/actions/submit.ts | 16 ++++++++ .../components/surveyForm/SurveyForm.tsx | 23 ++++++++--- 4 files changed, 46 insertions(+), 38 deletions(-) create mode 100644 src/features/surveys/actions/submit.ts diff --git a/next.config.js b/next.config.js index 285fbd5fe6..97d0ffb247 100644 --- a/next.config.js +++ b/next.config.js @@ -1,4 +1,7 @@ module.exports = { + experimental: { + serverActions: true, + }, images: { domains: [ `files.${process.env.ZETKIN_API_DOMAIN}`, @@ -59,7 +62,7 @@ module.exports = { }, // all paths with /o redirected to Gen2 { - source: '/o/:path*', + source: '/o/(!.+\\/surveys):path*', destination: `http://${process.env.ZETKIN_API_DOMAIN}/o/:path*`, permanent: false, }, diff --git a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx index 0822f62d60..9c8904ab5d 100644 --- a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx +++ b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx @@ -1,11 +1,8 @@ -import BackendApiClient from 'core/api/client/BackendApiClient'; -import { Container } from '@mui/material'; +'use server'; + import { FC } from 'react'; -import prepareSurveyApiSubmission from 'features/surveys/utils/prepareSurveyApiSubmission'; +import { submit } from 'features/surveys/actions/submit'; import SurveyForm from 'features/surveys/components/surveyForm/SurveyForm'; -// import { useRouter } from 'next/navigation'; -import useSurvey from 'features/surveys/hooks/useSurvey'; -import { ZetkinSurveyExtended } from 'utils/types/zetkin'; type PageProps = { params: { @@ -15,33 +12,12 @@ type PageProps = { }; const Page: FC = ({ params }) => { - // const router = useRouter(); - - const { data: survey } = useSurvey( - parseInt(params.orgId, 10), - parseInt(params.surveyId, 10) - ); - - const submit = async (formData: FormData): Promise => { - const submission = prepareSurveyApiSubmission( - Object.fromEntries([...formData.entries()]), - false - ); - const apiClient = new BackendApiClient({}); - await apiClient.post( - `/api/orgs/${params.orgId}/surveys/${params.surveyId}/submissions`, - submission - ); - }; - - if (!survey) { - return null; - } - return ( - - - + ); }; diff --git a/src/features/surveys/actions/submit.ts b/src/features/surveys/actions/submit.ts new file mode 100644 index 0000000000..4a96436afc --- /dev/null +++ b/src/features/surveys/actions/submit.ts @@ -0,0 +1,16 @@ +'use server'; + +import BackendApiClient from 'core/api/client/BackendApiClient'; +import prepareSurveyApiSubmission from 'features/surveys/utils/prepareSurveyApiSubmission'; +import { redirect } from 'next/navigation'; + +export async function submit(formData: FormData) { + const data = Object.fromEntries([...formData.entries()]); + const submission = prepareSurveyApiSubmission(data, false); + const apiClient = new BackendApiClient({}); + await apiClient.post( + `/api/orgs/${data.orgId}/surveys/${data.surveyId}/submissions`, + submission + ); + redirect(`/o/${data.orgId}/surveys/${data.surveyId}/submitted`); +} diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index 1fac06429b..540811e991 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -6,6 +6,7 @@ import SurveyHeading from './SurveyHeading'; import SurveyPrivacyPolicy from './SurveyPrivacyPolicy'; import SurveySignature from './SurveySignature'; import SurveySubmitButton from './SurveySubmitButton'; +import useSurvey from 'features/surveys/hooks/useSurvey'; import { ZetkinSurveyExtended, ZetkinSurveyFormStatus, @@ -13,19 +14,31 @@ import { export type SurveyFormProps = { action: (formData: FormData) => Promise; - survey: ZetkinSurveyExtended; + orgId: string; + surveyId: string; }; -const SurveyForm: FC = ({ action, survey }) => { +const SurveyForm: FC = ({ action, orgId, surveyId }) => { const status = 'editing' as ZetkinSurveyFormStatus; + const { data: survey } = useSurvey( + parseInt(orgId, 10), + parseInt(surveyId, 10) + ); + + if (!survey) { + return null; + } + return ( <>
- - - + + + + + From 69a7e3985ca55778d039dee0da6a548ac18fe759 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Tue, 23 Jan 2024 19:51:45 +0100 Subject: [PATCH 51/86] Fetch survey in server component, pass to client component --- .../surveys/submitting-survey.spec.ts | 8 ++++---- src/app/o/[orgId]/surveys/[surveyId]/page.tsx | 19 +++++++++++-------- .../components/surveyForm/SurveyForm.tsx | 15 ++++----------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 503be7713e..70074d6489 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -51,7 +51,7 @@ test.describe('User submitting a survey', () => { await page.click('input[name="1.options"]'); await page.fill('input[name="2.text"]', 'Topple capitalism'); - await page.click('input[name="sig"][value="user"]'); + await page.click('input[name="sig"][value="anonymous"]'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ page.waitForResponse((res) => res.request().method() == 'POST'), @@ -111,7 +111,7 @@ test.describe('User submitting a survey', () => { }); }); - test('submits user signature', async ({ moxy, page }) => { + test.skip('submits user signature', async ({ moxy, page }) => { moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -138,7 +138,7 @@ test.describe('User submitting a survey', () => { expect(data.signature).toBe('user'); }); - test('submits anonymous signature', async ({ moxy, page }) => { + test.skip('submits anonymous signature', async ({ moxy, page }) => { moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -165,7 +165,7 @@ test.describe('User submitting a survey', () => { expect(data.signature).toBe(null); }); - test('preserves inputs on error', async ({ page }) => { + test.skip('preserves inputs on error', async ({ page }) => { await page.click('input[name="1.options"][value="1"]'); await page.fill('input[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="anonymous"]'); diff --git a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx index 9c8904ab5d..244b27e12e 100644 --- a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx +++ b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx @@ -1,8 +1,10 @@ 'use server'; -import { FC } from 'react'; +import BackendApiClient from 'core/api/client/BackendApiClient'; import { submit } from 'features/surveys/actions/submit'; import SurveyForm from 'features/surveys/components/surveyForm/SurveyForm'; +import { ZetkinSurveyExtended } from 'utils/types/zetkin'; +import { FC, ReactElement } from 'react'; type PageProps = { params: { @@ -11,14 +13,15 @@ type PageProps = { }; }; -const Page: FC = ({ params }) => { - return ( - +/* @ts-expect-error Server Component */ +const Page: FC = async ({ params }): Promise => { + const { orgId, surveyId } = params; + const apiClient = new BackendApiClient({}); + const survey = await apiClient.get( + `/api/orgs/${orgId}/surveys/${surveyId}` ); + + return ; }; export default Page; diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index 540811e991..deb74d99aa 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -6,7 +6,6 @@ import SurveyHeading from './SurveyHeading'; import SurveyPrivacyPolicy from './SurveyPrivacyPolicy'; import SurveySignature from './SurveySignature'; import SurveySubmitButton from './SurveySubmitButton'; -import useSurvey from 'features/surveys/hooks/useSurvey'; import { ZetkinSurveyExtended, ZetkinSurveyFormStatus, @@ -14,18 +13,12 @@ import { export type SurveyFormProps = { action: (formData: FormData) => Promise; - orgId: string; - surveyId: string; + survey: ZetkinSurveyExtended; }; -const SurveyForm: FC = ({ action, orgId, surveyId }) => { +const SurveyForm: FC = ({ action, survey }) => { const status = 'editing' as ZetkinSurveyFormStatus; - const { data: survey } = useSurvey( - parseInt(orgId, 10), - parseInt(surveyId, 10) - ); - if (!survey) { return null; } @@ -34,8 +27,8 @@ const SurveyForm: FC = ({ action, orgId, surveyId }) => { <>
- - + + From 4ea40f220686e0894be3f93f66cd1a709b3eed6c Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Wed, 24 Jan 2024 19:42:43 +0100 Subject: [PATCH 52/86] Enable + fix submits anonymous signature playwright test for survey page --- .../surveys/submitting-survey.spec.ts | 2 +- .../surveys/[surveyId]/submitted/page.tsx | 27 +++++++------------ .../components/surveyForm/SurveySuccess.tsx | 2 ++ 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 70074d6489..7979be7a65 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -138,7 +138,7 @@ test.describe('User submitting a survey', () => { expect(data.signature).toBe('user'); }); - test.skip('submits anonymous signature', async ({ moxy, page }) => { + test('submits anonymous signature', async ({ moxy, page }) => { moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', diff --git a/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx index 92f71e8103..365ba0b430 100644 --- a/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx +++ b/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx @@ -1,10 +1,9 @@ -'use client'; +'use server'; -import { Container } from '@mui/material'; -import { FC } from 'react'; +import BackendApiClient from 'core/api/client/BackendApiClient'; import SurveySuccess from 'features/surveys/components/surveyForm/SurveySuccess'; -import useSurvey from 'features/surveys/hooks/useSurvey'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; +import { FC, ReactElement } from 'react'; type PageProps = { params: { @@ -13,21 +12,15 @@ type PageProps = { }; }; -const Page: FC = ({ params }) => { - const { data: survey } = useSurvey( - parseInt(params.orgId, 10), - parseInt(params.surveyId, 10) +/* @ts-expect-error Server Component */ +const Page: FC = async ({ params }): Promise => { + const { orgId, surveyId } = params; + const apiClient = new BackendApiClient({}); + const survey = await apiClient.get( + `/api/orgs/${orgId}/surveys/${surveyId}` ); - if (!survey) { - return null; - } - - return ( - - - - ); + return ; }; export default Page; diff --git a/src/features/surveys/components/surveyForm/SurveySuccess.tsx b/src/features/surveys/components/surveyForm/SurveySuccess.tsx index f395484ba9..7e5f75f16e 100644 --- a/src/features/surveys/components/surveyForm/SurveySuccess.tsx +++ b/src/features/surveys/components/surveyForm/SurveySuccess.tsx @@ -1,3 +1,5 @@ +'use client'; + import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; From c3058429f15c588d137947f3cfb4303d12773dd2 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Fri, 26 Jan 2024 21:19:33 +0100 Subject: [PATCH 53/86] Make the error handling playwright test pass in the new survey form --- .../surveys/submitting-survey.spec.ts | 2 +- next.config.js | 3 -- src/app/o/[orgId]/surveys/[surveyId]/page.tsx | 5 +-- .../surveys/[surveyId]/submitted/page.tsx | 26 ------------ src/features/surveys/actions/submit.ts | 21 ++++++---- .../components/surveyForm/SurveyForm.tsx | 40 +++++++++++++------ yarn.lock | 8 ++-- 7 files changed, 49 insertions(+), 56 deletions(-) delete mode 100644 src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 7979be7a65..89f5ab0441 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -165,7 +165,7 @@ test.describe('User submitting a survey', () => { expect(data.signature).toBe(null); }); - test.skip('preserves inputs on error', async ({ page }) => { + test('preserves inputs on error', async ({ page }) => { await page.click('input[name="1.options"][value="1"]'); await page.fill('input[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="anonymous"]'); diff --git a/next.config.js b/next.config.js index 97d0ffb247..1773374af8 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,4 @@ module.exports = { - experimental: { - serverActions: true, - }, images: { domains: [ `files.${process.env.ZETKIN_API_DOMAIN}`, diff --git a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx index 244b27e12e..c49cd06a51 100644 --- a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx +++ b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx @@ -1,7 +1,6 @@ 'use server'; import BackendApiClient from 'core/api/client/BackendApiClient'; -import { submit } from 'features/surveys/actions/submit'; import SurveyForm from 'features/surveys/components/surveyForm/SurveyForm'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; import { FC, ReactElement } from 'react'; @@ -13,7 +12,7 @@ type PageProps = { }; }; -/* @ts-expect-error Server Component */ +// @ts-expect-error Async support missing const Page: FC = async ({ params }): Promise => { const { orgId, surveyId } = params; const apiClient = new BackendApiClient({}); @@ -21,7 +20,7 @@ const Page: FC = async ({ params }): Promise => { `/api/orgs/${orgId}/surveys/${surveyId}` ); - return ; + return ; }; export default Page; diff --git a/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx deleted file mode 100644 index 365ba0b430..0000000000 --- a/src/app/o/[orgId]/surveys/[surveyId]/submitted/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -'use server'; - -import BackendApiClient from 'core/api/client/BackendApiClient'; -import SurveySuccess from 'features/surveys/components/surveyForm/SurveySuccess'; -import { ZetkinSurveyExtended } from 'utils/types/zetkin'; -import { FC, ReactElement } from 'react'; - -type PageProps = { - params: { - orgId: string; - surveyId: string; - }; -}; - -/* @ts-expect-error Server Component */ -const Page: FC = async ({ params }): Promise => { - const { orgId, surveyId } = params; - const apiClient = new BackendApiClient({}); - const survey = await apiClient.get( - `/api/orgs/${orgId}/surveys/${surveyId}` - ); - - return ; -}; - -export default Page; diff --git a/src/features/surveys/actions/submit.ts b/src/features/surveys/actions/submit.ts index 4a96436afc..07ef75b323 100644 --- a/src/features/surveys/actions/submit.ts +++ b/src/features/surveys/actions/submit.ts @@ -2,15 +2,22 @@ import BackendApiClient from 'core/api/client/BackendApiClient'; import prepareSurveyApiSubmission from 'features/surveys/utils/prepareSurveyApiSubmission'; -import { redirect } from 'next/navigation'; +import { ZetkinSurveyFormStatus } from 'utils/types/zetkin'; -export async function submit(formData: FormData) { +export async function submit( + prevState: ZetkinSurveyFormStatus, + formData: FormData +): Promise { const data = Object.fromEntries([...formData.entries()]); const submission = prepareSurveyApiSubmission(data, false); const apiClient = new BackendApiClient({}); - await apiClient.post( - `/api/orgs/${data.orgId}/surveys/${data.surveyId}/submissions`, - submission - ); - redirect(`/o/${data.orgId}/surveys/${data.surveyId}/submitted`); + try { + await apiClient.post( + `/api/orgs/${data.orgId}/surveys/${data.surveyId}/submissions`, + submission + ); + } catch (e) { + return 'error'; + } + return 'submitted'; } diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index deb74d99aa..bec8a78dff 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -1,23 +1,31 @@ 'use client'; import { FC } from 'react'; +import { submit } from 'features/surveys/actions/submit'; import SurveyElements from './SurveyElements'; import SurveyHeading from './SurveyHeading'; import SurveyPrivacyPolicy from './SurveyPrivacyPolicy'; import SurveySignature from './SurveySignature'; import SurveySubmitButton from './SurveySubmitButton'; +import SurveySuccess from './SurveySuccess'; import { ZetkinSurveyExtended, ZetkinSurveyFormStatus, } from 'utils/types/zetkin'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { useFormState } from 'react-dom'; + export type SurveyFormProps = { - action: (formData: FormData) => Promise; survey: ZetkinSurveyExtended; }; -const SurveyForm: FC = ({ action, survey }) => { - const status = 'editing' as ZetkinSurveyFormStatus; +const SurveyForm: FC = ({ survey }) => { + const [status, action] = useFormState( + submit, + 'editing' + ); if (!survey) { return null; @@ -25,15 +33,23 @@ const SurveyForm: FC = ({ action, survey }) => { return ( <> - - - - - - - - - + {(status === 'editing' || status === 'error') && ( + <> + +
+ + + + + + + + + )} + {status === 'submitted' && } ); }; diff --git a/yarn.lock b/yarn.lock index b2922c6c59..abd0d66312 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6414,9 +6414,9 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001280, caniuse-lite@^1.0.300013 integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== caniuse-lite@^1.0.30001579: - version "1.0.30001581" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" - integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== + version "1.0.30001580" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz#e3c76bc6fe020d9007647044278954ff8cd17d1e" + integrity sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA== capture-exit@^2.0.0: version "2.0.0" @@ -12738,7 +12738,7 @@ next-transpile-modules@^4.1.0: micromatch "^4.0.2" slash "^3.0.0" -next@^14.1.0: +next@14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== From 74a749bb36e64f8c6e88fa6f0dfa8ec42b73674c Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Sun, 25 Feb 2024 12:14:41 +0100 Subject: [PATCH 54/86] Update lockfile after merge --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index abd0d66312..9af9389996 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12738,7 +12738,7 @@ next-transpile-modules@^4.1.0: micromatch "^4.0.2" slash "^3.0.0" -next@14.1.0: +next@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== From e270d419fe9e300677f52b4592a49b8ab1b2b7b1 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Mon, 26 Feb 2024 19:12:29 +0100 Subject: [PATCH 55/86] Default to radio buttons when no question type is specified --- .../surveys/components/surveyForm/SurveyOptionsQuestion.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index ecd7db9384..abb19bcf9a 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -41,7 +41,9 @@ const OptionsQuestion: FC = ({ element }) => { )} - {element.question.response_config.widget_type === 'radio' && ( + {(element.question.response_config.widget_type === 'radio' || + typeof element.question.response_config.widget_type === + 'undefined') && ( Date: Sat, 16 Mar 2024 11:00:15 +0100 Subject: [PATCH 56/86] Implement mobile survey design from Figma --- .../components/surveyForm/SurveyElements.tsx | 4 +- .../components/surveyForm/SurveyForm.tsx | 20 ++-- .../components/surveyForm/SurveyHeading.tsx | 23 ++++- .../components/surveyForm/SurveyOption.tsx | 13 +++ .../surveyForm/SurveyOptionsQuestion.tsx | 26 ++--- .../surveyForm/SurveyPrivacyPolicy.tsx | 55 ++++++----- .../components/surveyForm/SurveySignature.tsx | 98 ++++++++++--------- .../surveyForm/SurveySubheading.tsx | 11 +-- .../surveyForm/SurveySubmitButton.tsx | 23 +++-- .../surveyForm/SurveyTextQuestion.tsx | 22 +++-- 10 files changed, 169 insertions(+), 126 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyElements.tsx b/src/features/surveys/components/surveyForm/SurveyElements.tsx index 3cb8014e1d..55e49ef6e9 100644 --- a/src/features/surveys/components/surveyForm/SurveyElements.tsx +++ b/src/features/surveys/components/surveyForm/SurveyElements.tsx @@ -13,7 +13,7 @@ export type SurveyElementsProps = { const SurveyElements: FC = ({ survey }) => { return ( - <> + {survey.elements.map((element) => ( {element.type === 'question' && } @@ -22,7 +22,7 @@ const SurveyElements: FC = ({ survey }) => { )} ))} - + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index bec8a78dff..da87f57166 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -1,5 +1,6 @@ 'use client'; +import { Box } from '@mui/material'; import { FC } from 'react'; import { submit } from 'features/surveys/actions/submit'; import SurveyElements from './SurveyElements'; @@ -32,7 +33,12 @@ const SurveyForm: FC = ({ survey }) => { } return ( - <> + {(status === 'editing' || status === 'error') && ( <> = ({ survey }) => {
- - - - + + + + + + )} {status === 'submitted' && } - +
); }; diff --git a/src/features/surveys/components/surveyForm/SurveyHeading.tsx b/src/features/surveys/components/surveyForm/SurveyHeading.tsx index bf6a69a445..faa9203650 100644 --- a/src/features/surveys/components/surveyForm/SurveyHeading.tsx +++ b/src/features/surveys/components/surveyForm/SurveyHeading.tsx @@ -1,7 +1,7 @@ -import { Box } from '@mui/material'; import { FC } from 'react'; import SurveyErrorMessage from './SurveyErrorMessage'; import ZUIAvatar from 'zui/ZUIAvatar'; +import { Box, Typography } from '@mui/material'; import { ZetkinSurveyExtended, ZetkinSurveyFormStatus, @@ -15,7 +15,13 @@ export type SurveyHeadingProps = { const SurveyHeading: FC = ({ status, survey }) => { return ( - + = ({ status, survey }) => { {status === 'error' && } -

{survey.title}

- - {survey.info_text &&

{survey.info_text}

} + + + {survey.title} + + {survey.info_text && ( + + {survey.info_text} + + )} +
); }; diff --git a/src/features/surveys/components/surveyForm/SurveyOption.tsx b/src/features/surveys/components/surveyForm/SurveyOption.tsx index 0cc90652b3..d9edaa7899 100644 --- a/src/features/surveys/components/surveyForm/SurveyOption.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOption.tsx @@ -8,12 +8,25 @@ const SurveyOption: FC = ({ ...formControlLabelProps }) => { ); diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index abb19bcf9a..3ced623a1c 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -23,7 +23,7 @@ export type OptionsQuestionProps = { const OptionsQuestion: FC = ({ element }) => { return ( - + {element.question.response_config.widget_type === 'checkbox' && ( @@ -48,18 +48,20 @@ const OptionsQuestion: FC = ({ element }) => { aria-labelledby={`label-${element.id}`} name={`${element.id}.options`} > - - {element.question.question} - - {element.question.options!.map((option: ZetkinSurveyOption) => ( - } - label={option.text} - value={option.id} - /> - ))} + + {element.question.question} + + + {element.question.options!.map((option: ZetkinSurveyOption) => ( + } + label={option.text} + value={option.id} + /> + ))} +
)} diff --git a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx index 177b43d6c2..e805d83ebd 100644 --- a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx +++ b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx @@ -4,6 +4,7 @@ import SurveyOption from './SurveyOption'; import SurveySubheading from './SurveySubheading'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; import { + Box, Checkbox, FormControl, FormGroup, @@ -20,34 +21,36 @@ export type SurveyPrivacyPolicyProps = { const SurveyPrivacyPolicy: FC = ({ survey }) => { const messages = useMessages(messageIds); return ( - + - - - - - - } - data-testid="Survey-acceptTerms" - label={} - name="privacy.approval" - /> - - + + + + + + } + data-testid="Survey-acceptTerms" + label={} + name="privacy.approval" /> - - - - - - + + + + + + + + + ); diff --git a/src/features/surveys/components/surveyForm/SurveySignature.tsx b/src/features/surveys/components/surveyForm/SurveySignature.tsx index a910c376b3..488a506bb9 100644 --- a/src/features/surveys/components/surveyForm/SurveySignature.tsx +++ b/src/features/surveys/components/surveyForm/SurveySignature.tsx @@ -40,7 +40,7 @@ const SurveySignature: FC = ({ survey }) => { ); return ( - + = ({ survey }) => { handleRadioChange(e.target.value as ZetkinSurveySignatureType) } > - - - - - + + + + + + - - {/* + {/* } label={ @@ -71,52 +72,55 @@ const SurveySignature: FC = ({ survey }) => { value="user" /> */} - } - label={ - - - - } - value="email" - /> - - {signatureType === 'email' && ( - - } - name="sig.first_name" - required - /> - } - name="sig.last_name" - required - /> - } - name="sig.email" - required - /> - - )} - - {survey.signature === 'allow_anonymous' && ( } label={ - + } - value="anonymous" + value="email" /> - )} + + {signatureType === 'email' && ( + + + } + name="sig.first_name" + required + /> + } + name="sig.last_name" + required + /> + } + name="sig.email" + required + /> + + )} + + {survey.signature === 'allow_anonymous' && ( + } + label={ + + + + } + value="anonymous" + /> + )} + diff --git a/src/features/surveys/components/surveyForm/SurveySubheading.tsx b/src/features/surveys/components/surveyForm/SurveySubheading.tsx index ed740b5bfc..0558130791 100644 --- a/src/features/surveys/components/surveyForm/SurveySubheading.tsx +++ b/src/features/surveys/components/surveyForm/SurveySubheading.tsx @@ -8,15 +8,10 @@ export type SurveySubheadingProps = { const SurveySubheading: FC = ({ children }) => { return ( {children} diff --git a/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx b/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx index 05850f298f..ebb02f0cda 100644 --- a/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx +++ b/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx @@ -1,20 +1,23 @@ -import { Button } from '@mui/material'; import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; import { useMessages } from 'core/i18n'; +import { Box, Button } from '@mui/material'; const SurveySubmitButton: FC = () => { const messages = useMessages(messageIds); + return ( - + + + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx index c3295720bb..4da4fa16b1 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx @@ -1,7 +1,7 @@ import { FC } from 'react'; import SurveySubheading from './SurveySubheading'; import { ZetkinSurveyTextQuestionElement } from 'utils/types/zetkin'; -import { FormControl, FormLabel, TextField } from '@mui/material'; +import { Box, FormControl, FormLabel, TextField } from '@mui/material'; export type SurveyOptionsQuestionProps = { element: ZetkinSurveyTextQuestionElement; @@ -10,15 +10,17 @@ export type SurveyOptionsQuestionProps = { const SurveyOptionsQuestion: FC = ({ element }) => { return ( - - {element.question.question} - - + + + {element.question.question} + + + ); }; From d5741b7da1a965b74766e6e7ca14b91fa524a875 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 14:16:12 +0100 Subject: [PATCH 57/86] Implement desktop layout --- .../components/surveyForm/SurveyContainer.tsx | 26 ++++ .../surveyForm/SurveyErrorMessage.tsx | 23 ++-- .../components/surveyForm/SurveyHeading.tsx | 36 +++--- .../surveyForm/SurveyOptionsQuestion.tsx | 85 ++++++------ .../surveyForm/SurveyPrivacyPolicy.tsx | 61 ++++----- .../components/surveyForm/SurveySignature.tsx | 121 +++++++++--------- .../surveyForm/SurveySubmitButton.tsx | 7 +- .../components/surveyForm/SurveyTextBlock.tsx | 7 +- .../surveyForm/SurveyTextQuestion.tsx | 27 ++-- 9 files changed, 219 insertions(+), 174 deletions(-) create mode 100644 src/features/surveys/components/surveyForm/SurveyContainer.tsx diff --git a/src/features/surveys/components/surveyForm/SurveyContainer.tsx b/src/features/surveys/components/surveyForm/SurveyContainer.tsx new file mode 100644 index 0000000000..3552dd0299 --- /dev/null +++ b/src/features/surveys/components/surveyForm/SurveyContainer.tsx @@ -0,0 +1,26 @@ +import { Box, BoxProps } from '@mui/material'; +import { FC, ReactNode } from 'react'; + +export type SurveyContainerProps = BoxProps & { + children: ReactNode; +}; + +const SurveyContainer: FC = ({ + children, + ...boxProps +}) => { + return ( + + + {children} + + + ); +}; + +export default SurveyContainer; diff --git a/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx b/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx index 2f5cfe8296..9d067d085e 100644 --- a/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx +++ b/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx @@ -2,22 +2,23 @@ import Box from '@mui/material/Box'; import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; +import SurveyContainer from './SurveyContainer'; import { useTheme } from '@mui/material'; const SurveyErrorMessage: FC = () => { const theme = useTheme(); return ( - - - + + + + + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyHeading.tsx b/src/features/surveys/components/surveyForm/SurveyHeading.tsx index faa9203650..3cef1d220a 100644 --- a/src/features/surveys/components/surveyForm/SurveyHeading.tsx +++ b/src/features/surveys/components/surveyForm/SurveyHeading.tsx @@ -1,4 +1,5 @@ import { FC } from 'react'; +import SurveyContainer from './SurveyContainer'; import SurveyErrorMessage from './SurveyErrorMessage'; import ZUIAvatar from 'zui/ZUIAvatar'; import { Box, Typography } from '@mui/material'; @@ -15,23 +16,22 @@ export type SurveyHeadingProps = { const SurveyHeading: FC = ({ status, survey }) => { return ( - - - {survey.organization.title} - + + + + {survey.organization.title} + + - {status === 'error' && } - - + {survey.title} @@ -40,7 +40,9 @@ const SurveyHeading: FC = ({ status, survey }) => { {survey.info_text}
)} - + + + {status === 'error' && } ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index 3ced623a1c..cfdffacdd0 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -1,4 +1,5 @@ import { FC } from 'react'; +import SurveyContainer from './SurveyContainer'; import SurveyOption from './SurveyOption'; import SurveySubheading from './SurveySubheading'; import { @@ -24,31 +25,9 @@ export type OptionsQuestionProps = { const OptionsQuestion: FC = ({ element }) => { return ( - {element.question.response_config.widget_type === 'checkbox' && ( - - - {element.question.question} - - - {element.question.options!.map((option: ZetkinSurveyOption) => ( - } - label={option.text} - value={option.id} - /> - ))} - - - )} - {(element.question.response_config.widget_type === 'radio' || - typeof element.question.response_config.widget_type === - 'undefined') && ( - - + + {element.question.response_config.widget_type === 'checkbox' && ( + {element.question.question} @@ -56,27 +35,51 @@ const OptionsQuestion: FC = ({ element }) => { {element.question.options!.map((option: ZetkinSurveyOption) => ( } + control={} label={option.text} value={option.id} /> ))} - - - )} - {element.question.response_config.widget_type === 'select' && ( - - )} + + )} + {(element.question.response_config.widget_type === 'radio' || + typeof element.question.response_config.widget_type === + 'undefined') && ( + + + + {element.question.question} + + + {element.question.options!.map((option: ZetkinSurveyOption) => ( + } + label={option.text} + value={option.id} + /> + ))} + + + + )} + {element.question.response_config.widget_type === 'select' && ( + + )} + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx index e805d83ebd..9625bf2222 100644 --- a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx +++ b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx @@ -1,5 +1,6 @@ import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; +import SurveyContainer from './SurveyContainer'; import SurveyOption from './SurveyOption'; import SurveySubheading from './SurveySubheading'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; @@ -22,36 +23,38 @@ const SurveyPrivacyPolicy: FC = ({ survey }) => { const messages = useMessages(messageIds); return ( - - - - - - - - } - data-testid="Survey-acceptTerms" - label={} - name="privacy.approval" - /> - - + + + + + + + + } + data-testid="Survey-acceptTerms" + label={} + name="privacy.approval" /> - - - - - - - - + + + + + + + + + + + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveySignature.tsx b/src/features/surveys/components/surveyForm/SurveySignature.tsx index 488a506bb9..2eb1e698e5 100644 --- a/src/features/surveys/components/surveyForm/SurveySignature.tsx +++ b/src/features/surveys/components/surveyForm/SurveySignature.tsx @@ -1,5 +1,6 @@ import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; +import SurveyContainer from './SurveyContainer'; import SurveyOption from './SurveyOption'; import SurveySubheading from './SurveySubheading'; // import useCurrentUser from 'features/user/hooks/useCurrentUser'; @@ -41,22 +42,23 @@ const SurveySignature: FC = ({ survey }) => { return ( - - handleRadioChange(e.target.value as ZetkinSurveySignatureType) - } - > - - - - - - + + + handleRadioChange(e.target.value as ZetkinSurveySignatureType) + } + > + + + + + + - - {/* + {/* } label={ @@ -72,57 +74,60 @@ const SurveySignature: FC = ({ survey }) => { value="user" /> */} - } - label={ - - - - } - value="email" - /> - - {signatureType === 'email' && ( - - - } - name="sig.first_name" - required - /> - } - name="sig.last_name" - required - /> - } - name="sig.email" - required - /> - - )} - - {survey.signature === 'allow_anonymous' && ( } label={ - + } - value="anonymous" + value="email" /> - )} + + {signatureType === 'email' && ( + + + } + name="sig.first_name" + required + /> + + } + name="sig.last_name" + required + /> + } + name="sig.email" + required + /> + + )} + + {survey.signature === 'allow_anonymous' && ( + } + label={ + + + + } + value="anonymous" + /> + )} + - - + + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx b/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx index ebb02f0cda..9f7b570f5d 100644 --- a/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx +++ b/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx @@ -1,13 +1,14 @@ +import { Button } from '@mui/material'; import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; +import SurveyContainer from './SurveyContainer'; import { useMessages } from 'core/i18n'; -import { Box, Button } from '@mui/material'; const SurveySubmitButton: FC = () => { const messages = useMessages(messageIds); return ( - + - + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx index c568952ab6..9eb695bba8 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx @@ -1,6 +1,7 @@ import { FC } from 'react'; +import SurveyContainer from './SurveyContainer'; +import { Typography } from '@mui/material'; import { ZetkinSurveyTextElement } from 'utils/types/zetkin'; -import { Box, Typography } from '@mui/material'; export type SurveyTextBlockProps = { element: ZetkinSurveyTextElement; @@ -8,10 +9,10 @@ export type SurveyTextBlockProps = { const SurveyTextBlock: FC = ({ element }) => { return ( - + {element.text_block.header} {element.text_block.content} - + ); }; diff --git a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx index 4da4fa16b1..9a0b525bf9 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx @@ -1,4 +1,5 @@ import { FC } from 'react'; +import SurveyContainer from './SurveyContainer'; import SurveySubheading from './SurveySubheading'; import { ZetkinSurveyTextQuestionElement } from 'utils/types/zetkin'; import { Box, FormControl, FormLabel, TextField } from '@mui/material'; @@ -9,18 +10,20 @@ export type SurveyOptionsQuestionProps = { const SurveyOptionsQuestion: FC = ({ element }) => { return ( - - - - {element.question.question} - - - + + + + + {element.question.question} + + + + ); }; From 62b1adc8360d8960ca3d2cfc96679ba5f8d4bfe3 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 14:26:04 +0100 Subject: [PATCH 58/86] Tidy up survey submitted page --- .../components/surveyForm/SurveyForm.tsx | 27 ++++++++----------- .../components/surveyForm/SurveySuccess.tsx | 9 ++++--- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index da87f57166..04bdb38ea0 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -39,23 +39,18 @@ const SurveyForm: FC = ({ survey }) => { flexDirection="column" gap={4} > + {(status === 'editing' || status === 'error') && ( - <> - -
- - - - - - - - -
- +
+ + + + + + + + +
)} {status === 'submitted' && } diff --git a/src/features/surveys/components/surveyForm/SurveySuccess.tsx b/src/features/surveys/components/surveyForm/SurveySuccess.tsx index 7e5f75f16e..881129dd6a 100644 --- a/src/features/surveys/components/surveyForm/SurveySuccess.tsx +++ b/src/features/surveys/components/surveyForm/SurveySuccess.tsx @@ -3,8 +3,9 @@ import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; +import SurveyContainer from './SurveyContainer'; +import { Typography } from '@mui/material'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; -import { Box, Typography } from '@mui/material'; export type SurveySuccessProps = { survey: ZetkinSurveyExtended; @@ -12,8 +13,8 @@ export type SurveySuccessProps = { const SurveySuccess: FC = ({ survey }) => { return ( - - + + @@ -22,7 +23,7 @@ const SurveySuccess: FC = ({ survey }) => { values={{ title: survey.title }} /> - + ); }; From 7e6263194f46c20539fb0b81e87b066970783525 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 15:27:51 +0100 Subject: [PATCH 59/86] Implement missing functionality --- .../surveyForm/SurveyOptionsQuestion.tsx | 96 ++++++++++++++----- .../surveyForm/SurveyQuestionDescription.tsx | 27 ++++++ .../surveyForm/SurveySubheading.tsx | 10 +- .../components/surveyForm/SurveyTextBlock.tsx | 5 +- .../surveyForm/SurveyTextQuestion.tsx | 19 +++- 5 files changed, 124 insertions(+), 33 deletions(-) create mode 100644 src/features/surveys/components/surveyForm/SurveyQuestionDescription.tsx diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index cfdffacdd0..22315eab9c 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -1,6 +1,7 @@ import { FC } from 'react'; import SurveyContainer from './SurveyContainer'; import SurveyOption from './SurveyOption'; +import SurveyQuestionDescription from './SurveyQuestionDescription'; import SurveySubheading from './SurveySubheading'; import { Box, @@ -27,19 +28,33 @@ const OptionsQuestion: FC = ({ element }) => { {element.question.response_config.widget_type === 'checkbox' && ( - - - {element.question.question} - - - {element.question.options!.map((option: ZetkinSurveyOption) => ( - } - label={option.text} - value={option.id} - /> - ))} + + + + + + {element.question.question} + + + {element.question.description && ( + + {element.question.description} + + )} + + + {element.question.options!.map((option: ZetkinSurveyOption) => ( + } + label={option.text} + value={option.id} + /> + ))} + )} @@ -47,13 +62,25 @@ const OptionsQuestion: FC = ({ element }) => { typeof element.question.response_config.widget_type === 'undefined') && ( - - - {element.question.question} - + + + + + + {element.question.question} + + + {element.question.description && ( + + {element.question.description} + + )} + + {element.question.options!.map((option: ZetkinSurveyOption) => ( = ({ element }) => { )} {element.question.response_config.widget_type === 'select' && ( - + + + + + {element.question.question} + + + {element.question.description && ( + + {element.question.description} + + )} + + + + )} diff --git a/src/features/surveys/components/surveyForm/SurveyQuestionDescription.tsx b/src/features/surveys/components/surveyForm/SurveyQuestionDescription.tsx new file mode 100644 index 0000000000..a6f6848aba --- /dev/null +++ b/src/features/surveys/components/surveyForm/SurveyQuestionDescription.tsx @@ -0,0 +1,27 @@ +import { Typography } from '@mui/material'; +import { ElementType, FC, ReactElement } from 'react'; + +export type SurveyQuestionDescriptionProps = { + children: ReactElement | string; + component?: ElementType; + id?: string; +}; + +const SurveyQuestionDescription: FC = ({ + children, + component = 'p', + id, +}) => { + return ( + + {children} + + ); +}; + +export default SurveyQuestionDescription; diff --git a/src/features/surveys/components/surveyForm/SurveySubheading.tsx b/src/features/surveys/components/surveyForm/SurveySubheading.tsx index 0558130791..1130188995 100644 --- a/src/features/surveys/components/surveyForm/SurveySubheading.tsx +++ b/src/features/surveys/components/surveyForm/SurveySubheading.tsx @@ -1,15 +1,19 @@ import { Typography } from '@mui/material'; -import { FC, ReactElement } from 'react'; +import { ElementType, FC, ReactElement } from 'react'; export type SurveySubheadingProps = { children: ReactElement | string; + component?: ElementType; }; -const SurveySubheading: FC = ({ children }) => { +const SurveySubheading: FC = ({ + children, + component = 'span', +}) => { return ( diff --git a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx index 9eb695bba8..2106812794 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx @@ -1,5 +1,6 @@ import { FC } from 'react'; import SurveyContainer from './SurveyContainer'; +import SurveySubheading from './SurveySubheading'; import { Typography } from '@mui/material'; import { ZetkinSurveyTextElement } from 'utils/types/zetkin'; @@ -10,7 +11,9 @@ export type SurveyTextBlockProps = { const SurveyTextBlock: FC = ({ element }) => { return ( - {element.text_block.header} + + {element.text_block.header} + {element.text_block.content} ); diff --git a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx index 9a0b525bf9..61c2cbe76c 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx @@ -1,5 +1,6 @@ import { FC } from 'react'; import SurveyContainer from './SurveyContainer'; +import SurveyQuestionDescription from './SurveyQuestionDescription'; import SurveySubheading from './SurveySubheading'; import { ZetkinSurveyTextQuestionElement } from 'utils/types/zetkin'; import { Box, FormControl, FormLabel, TextField } from '@mui/material'; @@ -12,14 +13,24 @@ const SurveyOptionsQuestion: FC = ({ element }) => { return ( - - - {element.question.question} - + + + + {element.question.question} + + {element.question.description && ( + + {element.question.description} + + )} + From 1f051ef090df7a3da7d6af5da420d2470a626cf6 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 15:56:40 +0100 Subject: [PATCH 60/86] Fix playwright tests Adding support for the multiline response config in text questions had broken the input[name="2.text"] selector so I've made it less specific. --- .../tests/organize/surveys/submitting-survey.spec.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 89f5ab0441..6410e74c75 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -50,7 +50,7 @@ test.describe('User submitting a survey', () => { ); await page.click('input[name="1.options"]'); - await page.fill('input[name="2.text"]', 'Topple capitalism'); + await page.fill('[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="anonymous"]'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ @@ -87,7 +87,7 @@ test.describe('User submitting a survey', () => { ); await page.click('input[name="1.options"]'); - await page.fill('input[name="2.text"]', 'Topple capitalism'); + await page.fill('[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="email"]'); await page.fill('input[name="sig.email"]', 'testuser@example.org'); await page.fill('input[name="sig.first_name"]', 'Test'); @@ -121,7 +121,7 @@ test.describe('User submitting a survey', () => { ); await page.click('input[name="1.options"][value="1"]'); - await page.fill('input[name="2.text"]', 'Topple capitalism'); + await page.fill('[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="user"]'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ @@ -148,7 +148,7 @@ test.describe('User submitting a survey', () => { ); await page.click('input[name="1.options"][value="1"]'); - await page.fill('input[name="2.text"]', 'Topple capitalism'); + await page.fill('[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="anonymous"]'); await page.click('data-testid=Survey-acceptTerms'); await Promise.all([ @@ -167,7 +167,7 @@ test.describe('User submitting a survey', () => { test('preserves inputs on error', async ({ page }) => { await page.click('input[name="1.options"][value="1"]'); - await page.fill('input[name="2.text"]', 'Topple capitalism'); + await page.fill('[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="anonymous"]'); await page.click('data-testid=Survey-acceptTerms'); @@ -180,7 +180,7 @@ test.describe('User submitting a survey', () => { await expect( page.locator('input[name="1.options"][value="1"]') ).toBeChecked(); - await expect(page.locator('input[name="2.text"]')).toHaveValue( + await expect(page.locator('[name="2.text"]')).toHaveValue( 'Topple capitalism' ); await expect( From c00f14ea4fb6fcf52c3494fb0c01da8d21b15d6a Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 16:35:39 +0100 Subject: [PATCH 61/86] Fix layout when options are very very long --- .../surveyForm/SurveyOptionsQuestion.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index 22315eab9c..8b7d90beae 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -32,7 +32,14 @@ const OptionsQuestion: FC = ({ element }) => { aria-describedby={`description-${element.id}`} aria-labelledby={`label-${element.id}`} > - + @@ -66,7 +73,14 @@ const OptionsQuestion: FC = ({ element }) => { aria-labelledby={`label-${element.id}`} name={`${element.id}.options`} > - + From 2f3d49c38e34645fa3bccffb5c9b29a95971524f Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 17:01:04 +0100 Subject: [PATCH 62/86] Add hideOrganization parameter for iframe use case --- .../components/surveyForm/SurveyHeading.tsx | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyHeading.tsx b/src/features/surveys/components/surveyForm/SurveyHeading.tsx index 3cef1d220a..e6356cd29d 100644 --- a/src/features/surveys/components/surveyForm/SurveyHeading.tsx +++ b/src/features/surveys/components/surveyForm/SurveyHeading.tsx @@ -1,6 +1,7 @@ import { FC } from 'react'; import SurveyContainer from './SurveyContainer'; import SurveyErrorMessage from './SurveyErrorMessage'; +import { useSearchParams } from 'next/navigation'; import ZUIAvatar from 'zui/ZUIAvatar'; import { Box, Typography } from '@mui/material'; import { @@ -14,22 +15,26 @@ export type SurveyHeadingProps = { }; const SurveyHeading: FC = ({ status, survey }) => { + const searchParams = useSearchParams(); + const hideOrganization = searchParams?.get('hideOrganization'); return ( - - - - {survey.organization.title} - - + {hideOrganization !== 'true' && ( + + + + {survey.organization.title} + + + )} From 509aea000fd79430f9d7332d21a6afc67f3e32cb Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sat, 16 Mar 2024 17:29:36 +0100 Subject: [PATCH 63/86] Fix out-of-range error about default dropdown value --- .../components/surveyForm/SurveyOptionsQuestion.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index 8b7d90beae..e4f7cc05ca 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -1,4 +1,3 @@ -import { FC } from 'react'; import SurveyContainer from './SurveyContainer'; import SurveyOption from './SurveyOption'; import SurveyQuestionDescription from './SurveyQuestionDescription'; @@ -13,7 +12,9 @@ import { Radio, RadioGroup, Select, + SelectChangeEvent, } from '@mui/material'; +import { FC, useCallback, useState } from 'react'; import { ZetkinSurveyOption, ZetkinSurveyOptionsQuestionElement, @@ -24,6 +25,11 @@ export type OptionsQuestionProps = { }; const OptionsQuestion: FC = ({ element }) => { + const [dropdownValue, setDropdownValue] = useState(''); + const handleDropdownChange = useCallback((event: SelectChangeEvent) => { + setDropdownValue(event.target.value); + }, []); + return ( @@ -129,6 +135,8 @@ const OptionsQuestion: FC = ({ element }) => { - + diff --git a/src/features/surveys/components/surveyForm/SurveySignature.tsx b/src/features/surveys/components/surveyForm/SurveySignature.tsx index 2eb1e698e5..3367e9029f 100644 --- a/src/features/surveys/components/surveyForm/SurveySignature.tsx +++ b/src/features/surveys/components/surveyForm/SurveySignature.tsx @@ -19,13 +19,15 @@ import { FC, useCallback, useState } from 'react'; import { ZetkinSurveyExtended, ZetkinSurveySignatureType, + ZetkinUser, } from 'utils/types/zetkin'; export type SurveySignatureProps = { survey: ZetkinSurveyExtended; + user: ZetkinUser | null; }; -const SurveySignature: FC = ({ survey }) => { +const SurveySignature: FC = ({ survey, user }) => { // const currentUser = useCurrentUser(); const theme = useTheme(); @@ -58,21 +60,23 @@ const SurveySignature: FC = ({ survey }) => { - {/* } - label={ - - } + label={ + + + + } + value="user" /> - - } - value="user" - /> */} + )} } diff --git a/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts b/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts index 85cd73bb2a..6078e5c017 100644 --- a/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts +++ b/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts @@ -9,7 +9,7 @@ describe('prepareSurveyApiSubmission()', () => { it('formats a text response', () => { formData['123.text'] = 'Lorem ipsum dolor sit amet'; - const submission = prepareSurveyApiSubmission(formData); + const submission = prepareSurveyApiSubmission(formData, null); expect(submission.responses).toMatchObject([ { question_id: 123, @@ -20,7 +20,7 @@ describe('prepareSurveyApiSubmission()', () => { it('formats a radio button response', () => { formData['123.options'] = '456'; - const submission = prepareSurveyApiSubmission(formData); + const submission = prepareSurveyApiSubmission(formData, null); expect(submission.responses).toMatchObject([ { options: [456], @@ -31,7 +31,7 @@ describe('prepareSurveyApiSubmission()', () => { it('formats a checkbox response', () => { formData['123.options'] = ['456', '789']; - const submission = prepareSurveyApiSubmission(formData); + const submission = prepareSurveyApiSubmission(formData, null); expect(submission.responses).toMatchObject([ { options: [456, 789], @@ -42,8 +42,19 @@ describe('prepareSurveyApiSubmission()', () => { it('signs as the logged-in account when a logged-in user requests to sign as themself', () => { formData['sig'] = 'user'; - const submission = prepareSurveyApiSubmission(formData, true); - expect(submission.signature).toEqual('user'); + const submission = prepareSurveyApiSubmission(formData, { + email: 'testadmin@example.com', + first_name: 'Angela', + id: 2, + lang: null, + last_name: 'Davis', + username: 'test', + }); + expect(submission.signature).toEqual({ + email: 'testadmin@example.com', + first_name: 'Angela', + last_name: 'Davis', + }); }); it('signs with custom contact details when a name and email are given', () => { @@ -51,7 +62,7 @@ describe('prepareSurveyApiSubmission()', () => { formData['sig.email'] = 'testuser@example.org'; formData['sig.first_name'] = 'test'; formData['sig.last_name'] = 'user'; - const submission = prepareSurveyApiSubmission(formData); + const submission = prepareSurveyApiSubmission(formData, null); expect(submission.signature).toMatchObject({ email: 'testuser@example.org', first_name: 'test', diff --git a/src/features/surveys/utils/prepareSurveyApiSubmission.ts b/src/features/surveys/utils/prepareSurveyApiSubmission.ts index 52cb31d64b..b1ff21c5cd 100644 --- a/src/features/surveys/utils/prepareSurveyApiSubmission.ts +++ b/src/features/surveys/utils/prepareSurveyApiSubmission.ts @@ -2,11 +2,12 @@ import { ZetkinSurveyApiSubmission, ZetkinSurveyQuestionResponse, ZetkinSurveySignaturePayload, + ZetkinUser, } from 'utils/types/zetkin'; export default function prepareSurveyApiSubmission( formData: Record, - isLoggedIn?: boolean + user: ZetkinUser | null ): ZetkinSurveyApiSubmission { const responses: ZetkinSurveyQuestionResponse[] = []; const responseEntries = Object.fromEntries( @@ -44,8 +45,12 @@ export default function prepareSurveyApiSubmission( let signature: ZetkinSurveySignaturePayload = null; - if (formData.sig === 'user' && isLoggedIn) { - signature = 'user'; + if (formData.sig === 'user' && user) { + signature = { + email: user.email, + first_name: user.first_name, + last_name: user.last_name, + }; } if (formData.sig == 'email') { From de1a5bf81b5a8f4fc3967e662ba982c7d1aab369 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 17 Mar 2024 11:23:26 +0100 Subject: [PATCH 70/86] Replace signature hack with original implementation which has mysteriously started working --- .../surveys/submitting-survey.spec.ts | 8 ++----- src/features/surveys/actions/submit.ts | 2 +- .../utils/prepareSurveyApiSubmission.spec.ts | 23 +++++-------------- .../utils/prepareSurveyApiSubmission.ts | 11 +++------ 4 files changed, 12 insertions(+), 32 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index ca7085f61a..83e749d7ca 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -111,7 +111,7 @@ test.describe('User submitting a survey', () => { }); }); - test('submits user signature', async ({ moxy, page }) => { + test.only('submits user signature', async ({ moxy, page }) => { moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -135,11 +135,7 @@ test.describe('User submitting a survey', () => { const data = request.data as { signature: ZetkinSurveySignaturePayload; }; - expect(data.signature).toEqual({ - email: 'rosa@example.org', - first_name: 'Rosa', - last_name: 'Luxemburg', - }); + expect(data.signature).toBe('user'); }); test('submits anonymous signature', async ({ moxy, page }) => { diff --git a/src/features/surveys/actions/submit.ts b/src/features/surveys/actions/submit.ts index 965dcf4750..38058c1c8b 100644 --- a/src/features/surveys/actions/submit.ts +++ b/src/features/surveys/actions/submit.ts @@ -22,7 +22,7 @@ export async function submit( } const data = Object.fromEntries([...formData.entries()]); - const submission = prepareSurveyApiSubmission(data, user); + const submission = prepareSurveyApiSubmission(data, !!user); try { await apiClient.post( `/api/orgs/${data.orgId}/surveys/${data.surveyId}/submissions`, diff --git a/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts b/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts index 6078e5c017..85cd73bb2a 100644 --- a/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts +++ b/src/features/surveys/utils/prepareSurveyApiSubmission.spec.ts @@ -9,7 +9,7 @@ describe('prepareSurveyApiSubmission()', () => { it('formats a text response', () => { formData['123.text'] = 'Lorem ipsum dolor sit amet'; - const submission = prepareSurveyApiSubmission(formData, null); + const submission = prepareSurveyApiSubmission(formData); expect(submission.responses).toMatchObject([ { question_id: 123, @@ -20,7 +20,7 @@ describe('prepareSurveyApiSubmission()', () => { it('formats a radio button response', () => { formData['123.options'] = '456'; - const submission = prepareSurveyApiSubmission(formData, null); + const submission = prepareSurveyApiSubmission(formData); expect(submission.responses).toMatchObject([ { options: [456], @@ -31,7 +31,7 @@ describe('prepareSurveyApiSubmission()', () => { it('formats a checkbox response', () => { formData['123.options'] = ['456', '789']; - const submission = prepareSurveyApiSubmission(formData, null); + const submission = prepareSurveyApiSubmission(formData); expect(submission.responses).toMatchObject([ { options: [456, 789], @@ -42,19 +42,8 @@ describe('prepareSurveyApiSubmission()', () => { it('signs as the logged-in account when a logged-in user requests to sign as themself', () => { formData['sig'] = 'user'; - const submission = prepareSurveyApiSubmission(formData, { - email: 'testadmin@example.com', - first_name: 'Angela', - id: 2, - lang: null, - last_name: 'Davis', - username: 'test', - }); - expect(submission.signature).toEqual({ - email: 'testadmin@example.com', - first_name: 'Angela', - last_name: 'Davis', - }); + const submission = prepareSurveyApiSubmission(formData, true); + expect(submission.signature).toEqual('user'); }); it('signs with custom contact details when a name and email are given', () => { @@ -62,7 +51,7 @@ describe('prepareSurveyApiSubmission()', () => { formData['sig.email'] = 'testuser@example.org'; formData['sig.first_name'] = 'test'; formData['sig.last_name'] = 'user'; - const submission = prepareSurveyApiSubmission(formData, null); + const submission = prepareSurveyApiSubmission(formData); expect(submission.signature).toMatchObject({ email: 'testuser@example.org', first_name: 'test', diff --git a/src/features/surveys/utils/prepareSurveyApiSubmission.ts b/src/features/surveys/utils/prepareSurveyApiSubmission.ts index b1ff21c5cd..52cb31d64b 100644 --- a/src/features/surveys/utils/prepareSurveyApiSubmission.ts +++ b/src/features/surveys/utils/prepareSurveyApiSubmission.ts @@ -2,12 +2,11 @@ import { ZetkinSurveyApiSubmission, ZetkinSurveyQuestionResponse, ZetkinSurveySignaturePayload, - ZetkinUser, } from 'utils/types/zetkin'; export default function prepareSurveyApiSubmission( formData: Record, - user: ZetkinUser | null + isLoggedIn?: boolean ): ZetkinSurveyApiSubmission { const responses: ZetkinSurveyQuestionResponse[] = []; const responseEntries = Object.fromEntries( @@ -45,12 +44,8 @@ export default function prepareSurveyApiSubmission( let signature: ZetkinSurveySignaturePayload = null; - if (formData.sig === 'user' && user) { - signature = { - email: user.email, - first_name: user.first_name, - last_name: user.last_name, - }; + if (formData.sig === 'user' && isLoggedIn) { + signature = 'user'; } if (formData.sig == 'email') { From f04d3905f418117b86f024b5cf5f111913c05dfc Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 17 Mar 2024 11:26:13 +0100 Subject: [PATCH 71/86] Remove spurious redirect --- next.config.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/next.config.js b/next.config.js index aad400f001..7c0cd30d61 100644 --- a/next.config.js +++ b/next.config.js @@ -67,11 +67,6 @@ module.exports = { destination: `http://${process.env.ZETKIN_API_DOMAIN}/o/:orgId`, permanent: false, }, - { - source: '/o/:orgId/map', - destination: `http://${process.env.ZETKIN_API_DOMAIN}/o/:orgId/map`, - permanent: false, - }, { source: '/o/:orgId/projects/:campId', destination: `http://${process.env.ZETKIN_API_DOMAIN}/o/:orgId/campaigns/:campId`, From a14c2427935cedea6546f8e3e3c9dcae18d8c72e Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 17 Mar 2024 11:32:00 +0100 Subject: [PATCH 72/86] Remove .only --- .../tests/organize/surveys/submitting-survey.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 83e749d7ca..566f87d4ae 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -111,7 +111,7 @@ test.describe('User submitting a survey', () => { }); }); - test.only('submits user signature', async ({ moxy, page }) => { + test('submits user signature', async ({ moxy, page }) => { moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', From 445e60f745d801cbaf9509b7f6c90e96074395c8 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 17 Mar 2024 12:24:48 +0100 Subject: [PATCH 73/86] Scroll to survey error on mount --- .../components/surveyForm/SurveyContainer.tsx | 13 +++++++------ .../components/surveyForm/SurveyErrorMessage.tsx | 10 ++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyContainer.tsx b/src/features/surveys/components/surveyForm/SurveyContainer.tsx index 3552dd0299..a4171ea68d 100644 --- a/src/features/surveys/components/surveyForm/SurveyContainer.tsx +++ b/src/features/surveys/components/surveyForm/SurveyContainer.tsx @@ -1,16 +1,17 @@ import { Box, BoxProps } from '@mui/material'; -import { FC, ReactNode } from 'react'; +import { forwardRef, ForwardRefRenderFunction, ReactNode } from 'react'; export type SurveyContainerProps = BoxProps & { children: ReactNode; }; -const SurveyContainer: FC = ({ - children, - ...boxProps -}) => { +const SurveyContainer: ForwardRefRenderFunction< + unknown, + SurveyContainerProps +> = ({ children, ...boxProps }, ref) => { return ( = ({ ); }; -export default SurveyContainer; +export default forwardRef(SurveyContainer); diff --git a/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx b/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx index 9d067d085e..66d00180de 100644 --- a/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx +++ b/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx @@ -1,14 +1,20 @@ import Box from '@mui/material/Box'; -import { FC } from 'react'; import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; import SurveyContainer from './SurveyContainer'; import { useTheme } from '@mui/material'; +import { FC, useEffect, useRef } from 'react'; const SurveyErrorMessage: FC = () => { + const element = useRef(null); const theme = useTheme(); + useEffect(() => { + if (element.current) { + element.current.scrollIntoView({ behavior: 'smooth' }); + } + }, []); return ( - + Date: Sun, 17 Mar 2024 11:47:00 +0100 Subject: [PATCH 74/86] Fix server-rendered CSS in app router --- package.json | 4 + src/app/layout.tsx | 9 +- yarn.lock | 1207 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 1196 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index f0e9a2b6a3..986afdb94d 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "dependencies": { "@date-io/date-fns": "1.x", "@date-io/dayjs": "1.x", + "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", "@messageformat/parser": "^5.1.0", @@ -34,6 +35,7 @@ "@mui/icons-material": "^5.10.6", "@mui/lab": "^5.0.0-alpha.100", "@mui/material": "^5.10.7", + "@mui/material-nextjs": "^5.15.11", "@mui/styles": "^5.10.6", "@mui/system": "^5.10.7", "@mui/x-data-grid-pro": "^6.14.0", @@ -49,6 +51,7 @@ "dayjs": "^1.10.6", "final-form": "^4.20.2", "fuse.js": "^6.5.3", + "install": "^0.13.0", "intl-messageformat": "^10.3.1", "iron-session": "^8.0.1", "is-url": "^1.2.4", @@ -62,6 +65,7 @@ "negotiator": "^0.6.2", "next": "^14.1.0", "node-xlsx": "^0.21.0", + "npm": "^10.5.0", "nprogress": "^0.2.0", "papaparse": "^5.4.1", "random-seed": "^0.3.0", diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0dbe9ab69b..8c0a8e5850 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,3 +1,4 @@ +import { AppRouterCacheProvider } from '@mui/material-nextjs/v13-appRouter'; import BackendApiClient from 'core/api/client/BackendApiClient'; import ClientContext from 'core/env/ClientContext'; import { headers } from 'next/headers'; @@ -27,9 +28,11 @@ export default async function RootLayout({ return ( - - {children} - + + + {children} + + ); diff --git a/yarn.lock b/yarn.lock index 9af9389996..91f3afcab7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1356,6 +1356,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.9": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@~7.5.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" @@ -2054,6 +2061,11 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2421,6 +2433,13 @@ prop-types "^15.8.1" react-is "^18.2.0" +"@mui/material-nextjs@^5.15.11": + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/material-nextjs/-/material-nextjs-5.15.11.tgz#bf75eece88fb088e74eb5f0eef01f9f64f8ec7f4" + integrity sha512-cp5RWYbBngyi7NKP91R9QITllfxumCVPFjqe4AKzNROVuCot0VpgkafxXqfbv0uFsyUU0ROs0O2M3r17q604Aw== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/material@^5.10.7": version "5.10.7" resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.10.7.tgz#08e72c554bd528f9f5fef604eea542551f9e5986" @@ -2885,6 +2904,77 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/agent@^2.0.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.1.tgz#8aa677d0a4136d57524336a35d5679aedf2d56f7" + integrity sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.1" + +"@npmcli/arborist@^7.2.1": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.4.0.tgz#6be8e6562945cdf87097f8f8c50d72c37b9eb832" + integrity sha512-VFsUaTrV8NR+0E2I+xhp6pPC5eAbMmSMSMZbS57aogLc6du6HWBPATFOaiNWwp1QTFVeP4aLhYixQM9hHfaAsA== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.2" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^7.0.0" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/query" "^3.1.0" + "@npmcli/run-script" "^7.0.2" + bin-links "^4.0.1" + cacache "^18.0.0" + common-ancestor-path "^1.0.1" + hosted-git-info "^7.0.1" + json-parse-even-better-errors "^3.0.0" + json-stringify-nice "^1.1.4" + minimatch "^9.0.0" + nopt "^7.0.0" + npm-install-checks "^6.2.0" + npm-package-arg "^11.0.1" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^16.0.0" + npmlog "^7.0.1" + pacote "^17.0.4" + parse-conflict-json "^3.0.0" + proc-log "^3.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^3.0.1" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.5" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + +"@npmcli/config@^8.0.2": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-8.2.0.tgz#18774fc7239cfcc124ca9fdc48b1f65bb7bee191" + integrity sha512-YoEYZFg0hRSRP/Chmq+J4FvULFvji6SORUYWQc10FiJ+ReAnViXcDCENg6kM6dID04bAoKNUygrby798+gYBbQ== + dependencies: + "@npmcli/map-workspaces" "^3.0.2" + ci-info "^4.0.0" + ini "^4.1.0" + nopt "^7.0.0" + proc-log "^3.0.0" + read-package-json-fast "^3.0.2" + semver "^7.3.5" + walk-up-path "^3.0.1" + +"@npmcli/disparity-colors@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833" + integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== + dependencies: + ansi-styles "^4.3.0" + "@npmcli/fs@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" @@ -2893,6 +2983,55 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^5.0.0", "@npmcli/git@^5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.4.tgz#d18c50f99649e6e89e8b427318134f582498700c" + integrity sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ== + dependencies: + "@npmcli/promise-spawn" "^7.0.0" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^4.0.0" + +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" + integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== + dependencies: + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" + +"@npmcli/metavuln-calculator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.0.0.tgz#fb59245926d7f677db904177f9aca15ac883d6cb" + integrity sha512-Pw0tyX02VkpqlIQlG2TeiJNsdrecYeUU0ubZZa9pi3N37GCsxI+en43u4hYFdq+eSx1A9a9vwFAUyqEtKFsbHQ== + dependencies: + cacache "^18.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^17.0.0" + semver "^7.3.5" + "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -2901,6 +3040,54 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/package-json@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.0.0.tgz#77d0f8b17096763ccbd8af03b7117ba6e34d6e91" + integrity sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^3.0.0" + semver "^7.5.3" + +"@npmcli/promise-spawn@^7.0.0", "@npmcli/promise-spawn@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz#a836de2f42a2245d629cf6fbb8dd6c74c74c55af" + integrity sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg== + dependencies: + which "^4.0.0" + +"@npmcli/query@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" + integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== + dependencies: + postcss-selector-parser "^6.0.10" + +"@npmcli/run-script@^7.0.0", "@npmcli/run-script@^7.0.2", "@npmcli/run-script@^7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.4.tgz#9f29aaf4bfcf57f7de2a9e28d1ef091d14b2e6eb" + integrity sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" + which "^4.0.0" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -3030,6 +3217,50 @@ resolved "https://registry.yarnpkg.com/@servie/events/-/events-1.0.0.tgz#8258684b52d418ab7b86533e861186638ecc5dc1" integrity sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw== +"@sigstore/bundle@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.2.0.tgz#e3f555a5c503fe176d8d1e0e829b00f842502e46" + integrity sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ== + dependencies: + "@sigstore/protobuf-specs" "^0.3.0" + +"@sigstore/core@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.0.0.tgz#0fcdb32d191d4145a70cb837061185353b3b08e3" + integrity sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw== + +"@sigstore/protobuf-specs@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz#bdcc773671f625bb81591bca86ec5314d57297f3" + integrity sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA== + +"@sigstore/sign@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.2.3.tgz#f07bcd2cfee654fade867db44ae260f1a0142ba4" + integrity sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw== + dependencies: + "@sigstore/bundle" "^2.2.0" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.0" + make-fetch-happen "^13.0.0" + +"@sigstore/tuf@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.1.tgz#86ff3c3c907e271696c88de0108d9063a8cbcc45" + integrity sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q== + dependencies: + "@sigstore/protobuf-specs" "^0.3.0" + tuf-js "^2.2.0" + +"@sigstore/verify@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.1.0.tgz#ab617c5dc0bc09ead7f101a848f4870af2d84374" + integrity sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg== + dependencies: + "@sigstore/bundle" "^2.2.0" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.0" + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -4218,6 +4449,19 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.0.tgz#c7ab241cf11dd29deb213d6817dabb8c99ce0863" + integrity sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.3" + "@types/aria-query@^4.2.0": version "4.2.2" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" @@ -5146,6 +5390,11 @@ abbrev@^1.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + accepts@~1.3.5: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -5235,6 +5484,13 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5347,7 +5603,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -5392,7 +5648,7 @@ app-root-dir@^1.0.2: resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= -"aproba@^1.0.3 || ^2.0.0": +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -5402,6 +5658,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -5410,6 +5671,11 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz#aed25dd0eae514660d49ac2b2366b175c614785a" + integrity sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -5992,6 +6258,16 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bin-links@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.3.tgz#9e4a3c5900830aee3d7f52178b65e01dcdde64a5" + integrity sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA== + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -6002,6 +6278,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +binary-extensions@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -6245,6 +6526,13 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -6330,6 +6618,24 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" +cacache@^18.0.0, cacache@^18.0.2: + version "18.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.2.tgz#fd527ea0f03a603be5c0da5805635f8eef00c60c" + integrity sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6465,6 +6771,11 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + chance@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/chance/-/chance-1.1.8.tgz#5d6c2b78c9170bf6eb9df7acdda04363085be909" @@ -6559,6 +6870,18 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== +ci-info@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" + integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== + +cidr-regex@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-4.0.3.tgz#07b52c9762d1ff546a50740e92fc2b5b13a6d871" + integrity sha512-HOwDIy/rhKeMf6uOzxtv7FAbrz8zPjmVKfSpM+U7/bNBXC5rtOyr758jxcptiSx6ZZn5LOhPJT5WWxPAGDV8dw== + dependencies: + ip-regex "^5.0.0" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -6606,6 +6929,14 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== + dependencies: + string-width "^4.2.3" + strip-ansi "^6.0.1" + cli-table3@^0.6.1: version "0.6.2" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" @@ -6615,6 +6946,15 @@ cli-table3@^0.6.1: optionalDependencies: "@colors/colors" "1.5.0" +cli-table3@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + client-oauth2@^4.1.0: version "4.3.3" resolved "https://registry.yarnpkg.com/client-oauth2/-/client-oauth2-4.3.3.tgz#7a700e6f4bf412c1f96da0d6b50e07676561e086" @@ -6646,6 +6986,11 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + clsx@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" @@ -6666,6 +7011,11 @@ clsx@^2.0.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== +cmd-shim@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.2.tgz#435fd9e5c95340e61715e19f90209ed6fcd9e0a4" + integrity sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -6726,7 +7076,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2: +color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -6736,6 +7086,14 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -6788,6 +7146,11 @@ commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -7432,6 +7795,13 @@ default-browser-id@^1.0.4: meow "^3.1.0" untildify "^2.0.0" +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + define-data-property@^1.0.1, define-data-property@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" @@ -7572,6 +7942,11 @@ diff@^5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -7807,6 +8182,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -7868,6 +8250,16 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -8556,6 +8948,11 @@ expect@^27.3.1: jest-message-util "^27.3.1" jest-regex-util "^27.0.6" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -8691,6 +9088,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -9044,6 +9446,13 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0, fs-minipass@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + fs-monkey@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" @@ -9137,6 +9546,20 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" +gauge@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^4.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -9245,7 +9668,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@10.3.10: +glob@10.3.10, glob@^10.2.2, glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -9368,7 +9791,7 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== -graceful-fs@^4.2.11: +graceful-fs@^4.2.11, graceful-fs@^4.2.6: 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== @@ -9628,6 +10051,13 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^7.0.0, hosted-git-info@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" + integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + dependencies: + lru-cache "^10.0.1" + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -9724,6 +10154,11 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -9764,6 +10199,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz#7ef3417a479fb7666a571e09966c66a39bd2c15f" @@ -9797,6 +10240,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.1: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + 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" @@ -9814,7 +10265,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -9843,6 +10294,13 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== + dependencies: + minimatch "^9.0.0" + ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -9934,11 +10392,34 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^4.1.0, ini@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.2.tgz#7f646dbd9caea595e61f88ef60bfff8b01f8130a" + integrity sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw== + +init-package-json@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.2.tgz#0d780b752dd1dd83b8649945df38a07df4f990a6" + integrity sha512-ZQ9bxt6PkqIH6fPU69HPheOMoUqIqVqwZj0qlCBfoSCG4lplQhVM/qB3RS4f0RALK3WZZSrNQxNtCZgphuf3IA== + dependencies: + "@npmcli/package-json" "^5.0.0" + npm-package-arg "^11.0.0" + promzard "^1.0.0" + read "^3.0.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== +install@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776" + integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA== + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -9987,11 +10468,24 @@ intl-messageformat@^10.3.1: "@formatjs/icu-messageformat-parser" "2.3.0" tslib "^2.4.0" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" + integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== + ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -10133,6 +10627,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-cidr@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-5.0.3.tgz#fcf817c0146dd4a318f27938af89e98a9b21bdd5" + integrity sha512-lKkM0tmz07dAxNsr8Ii9MGreExa9ZR34N9j8mTG5op824kcwBqinZPowNjcVWWc7j+jR8XAMMItOmBkniN0jOA== + dependencies: + cidr-regex "4.0.3" + is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" @@ -10291,6 +10792,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -10507,6 +11013,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -11144,6 +11655,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -11230,6 +11746,11 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -11245,6 +11766,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -11304,6 +11830,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + jss-plugin-camel-case@^10.10.0: version "10.10.0" resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" @@ -11467,6 +11998,16 @@ junk@^3.1.0: resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -11589,6 +12130,119 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libnpmaccess@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.2.tgz#a13a72fd5b71a1063ea54973fa56d61ec38f718f" + integrity sha512-4K+nsg3OYt4rjryP/3D5zGWluLbZaKozwj6YdtvAyxNhLhUrjCoyxHVoL5AkTJcAnjsd6/ATei52QPVvpSX9Ug== + dependencies: + npm-package-arg "^11.0.1" + npm-registry-fetch "^16.0.0" + +libnpmdiff@^6.0.3: + version "6.0.7" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-6.0.7.tgz#5fd7df1c4b8ff58160fa59d5eb97686a00f8fdd3" + integrity sha512-Erca7NHh+MGk4O14mM4yv9S1S+Wc5TgFg6yr8r/g5ykn34dZdAP/GkzhQNJiOpzfD8j1HBhbTpkbGJHVDdgG5Q== + dependencies: + "@npmcli/arborist" "^7.2.1" + "@npmcli/disparity-colors" "^3.0.0" + "@npmcli/installed-package-contents" "^2.0.2" + binary-extensions "^2.2.0" + diff "^5.1.0" + minimatch "^9.0.0" + npm-package-arg "^11.0.1" + pacote "^17.0.4" + tar "^6.2.0" + +libnpmexec@^7.0.4: + version "7.0.8" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-7.0.8.tgz#2bc6ab0468dde95803745ced1fea48bd43b112fc" + integrity sha512-xDzWoYpV1Ok0TIdrY4wuWGxriEv/O3/d8QG924yErBE0sMkkzKsin2dAmlEBsSlR7YRilObs8q+5uNtxKNQHAQ== + dependencies: + "@npmcli/arborist" "^7.2.1" + "@npmcli/run-script" "^7.0.2" + ci-info "^4.0.0" + npm-package-arg "^11.0.1" + npmlog "^7.0.1" + pacote "^17.0.4" + proc-log "^3.0.0" + read "^2.0.0" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + walk-up-path "^3.0.1" + +libnpmfund@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-5.0.5.tgz#f874005a2f9a92a4c6c4ae7a489ceb16f48690ce" + integrity sha512-BUu2l9Kn4u6nce1Ay8a1uRN1fyU7lbVmtsMYxWcFpcbF+ZPN7qIiPksfcnY9/NDKIRGJYwwv0IXgQQStHDx6Tg== + dependencies: + "@npmcli/arborist" "^7.2.1" + +libnpmhook@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-10.0.1.tgz#3cb9516645f0d6891b4a59c72ffe026bdbb9bd6b" + integrity sha512-FnXCweDpoAko6mnLPSW8qrRYicjfh+GrvY5PuYHQRPvaW4BFtHDUmK3K3aYx4yD3TeGAKpj4IigrEDfUfWuSkA== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^16.0.0" + +libnpmorg@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-6.0.2.tgz#6e5e37ecc5a391082e83c599512689c78e60dc70" + integrity sha512-zK4r6cjVsfXf7hWzWGB6R0LBJidVhKaeMWMZL/1eyZS6ixxAxVijfsPacoEnBRCFaXsNjAtwV3b2RCmYU6+usA== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^16.0.0" + +libnpmpack@^6.0.3: + version "6.0.7" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-6.0.7.tgz#0b1cdd7c250f929e77ece95f2a738e9670dcb8ad" + integrity sha512-aVX5ZLiYAioShh5wzoBOGs25GvPskry7SxCpx76gMCjOrd/wKcNtbTOMqStvizd3c+vzq5a1b7FMP09XAtgRFg== + dependencies: + "@npmcli/arborist" "^7.2.1" + "@npmcli/run-script" "^7.0.2" + npm-package-arg "^11.0.1" + pacote "^17.0.4" + +libnpmpublish@^9.0.2: + version "9.0.4" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.4.tgz#0222c14578088ca9a758585c36d8133b828c87ad" + integrity sha512-330o6pVsCCg77jQ/+kidyG/RiohXYQKpqmzOC4BjUDWcimb+mXptRBh1Kvy27/Zb/CStZLVrfgGc6tXf5+PE3Q== + dependencies: + ci-info "^4.0.0" + normalize-package-data "^6.0.0" + npm-package-arg "^11.0.1" + npm-registry-fetch "^16.0.0" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^2.2.0" + ssri "^10.0.5" + +libnpmsearch@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-7.0.1.tgz#8fa803a8e5837a33ce750a8cc1c70820d728b91d" + integrity sha512-XyKi6Y94t6PGd5Lk2Ma3+fgiHWD3KSCvXmHOrcLkAOEP7oUejbNjL0Bb/HUDZXgBj6gP1Qk7pJ6jZPFBc2hmXQ== + dependencies: + npm-registry-fetch "^16.0.0" + +libnpmteam@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-6.0.1.tgz#daa1b2e7e4ccef0469bdef661737ca823b53468b" + integrity sha512-1YytqVk1gSkKFNMe4kkCKN49y5rlABrRSx5TrYShQtt2Lb4uQaed49dGE7Ue8TJGxbIkHzvyyVtb3PBiGACVqw== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^16.0.0" + +libnpmversion@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-5.0.2.tgz#aea7b09bc270c778cbc8be7bf02e4b60566989cf" + integrity sha512-6JBnLhd6SYgKRekJ4cotxpURLGbEtKxzw+a8p5o+wNwrveJPMH8yW/HKjeewyHzWmxzzwn9EQ3TkF2onkrwstA== + dependencies: + "@npmcli/git" "^5.0.3" + "@npmcli/run-script" "^7.0.2" + json-parse-even-better-errors "^3.0.0" + proc-log "^3.0.0" + semver "^7.3.7" + libphonenumber-js@^1.10.51: version "1.10.51" resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.51.tgz#a3b8c15db2721c3e5f7fe6759e2a524712b578e6" @@ -11745,6 +12399,11 @@ lowlight@^1.14.0, lowlight@^1.17.0: fault "^1.0.0" highlight.js "~10.7.0" +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11767,11 +12426,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" @@ -11804,6 +12458,23 @@ make-error@1.x, make-error@^1.1.1, make-error@^1.3.5: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + ssri "^10.0.0" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -12475,7 +13146,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@9.0.3, minimatch@^9.0.1: +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -12520,6 +13191,24 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -12527,13 +13216,28 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^3.0.0, minipass@^3.1.1: version "3.1.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" @@ -12541,12 +13245,17 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^2.1.1: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -12643,7 +13352,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -12658,6 +13367,11 @@ mui-rff@^6.1.2: date-fns "^2.25.0" yup "^0.32.11" +mute-stream@^1.0.0, mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + nan@^2.12.1: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" @@ -12705,7 +13419,7 @@ negotiator@0.6.2, negotiator@^0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -12788,6 +13502,22 @@ node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-gyp@^10.0.0, node-gyp@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" + integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + tar "^6.1.2" + which "^4.0.0" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -12851,6 +13581,13 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" +nopt@^7.0.0, nopt@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== + dependencies: + abbrev "^2.0.0" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -12861,6 +13598,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" + integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== + dependencies: + hosted-git-info "^7.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -12878,6 +13625,78 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +npm-audit-report@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" + integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0, npm-install-checks@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@^11.0.0, npm-package-arg@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" + integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" + integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== + dependencies: + ignore-walk "^6.0.4" + +npm-pick-manifest@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz#f87a4c134504a2c7931f2bb8733126e3c3bb7e8f" + integrity sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" + +npm-profile@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-9.0.0.tgz#ffcfa4e3e1b1cb44b17c192f75b44b24b4aae645" + integrity sha512-qv43ixsJ7vndzfxD3XsPNu1Njck6dhO7q1efksTo+0DiOQysKSOsIhK/qDD1/xO2o+2jDOA4Rv/zOJ9KQFs9nw== + dependencies: + npm-registry-fetch "^16.0.0" + proc-log "^3.0.0" + +npm-registry-fetch@^16.0.0, npm-registry-fetch@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz#10227b7b36c97bc1cf2902a24e4f710cfe62803c" + integrity sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw== + dependencies: + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^3.0.0" + npm-run-all2@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/npm-run-all2/-/npm-run-all2-6.0.4.tgz#2623097fcc8b43d051a364146f060978d3e36baa" @@ -12905,6 +13724,87 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-user-validate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" + integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== + +npm@^10.5.0: + version "10.5.0" + resolved "https://registry.yarnpkg.com/npm/-/npm-10.5.0.tgz#726f91df5b1b14d9637c8819d7e71cb873c395a1" + integrity sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^7.2.1" + "@npmcli/config" "^8.0.2" + "@npmcli/fs" "^3.1.0" + "@npmcli/map-workspaces" "^3.0.4" + "@npmcli/package-json" "^5.0.0" + "@npmcli/promise-spawn" "^7.0.1" + "@npmcli/run-script" "^7.0.4" + "@sigstore/tuf" "^2.3.1" + abbrev "^2.0.0" + archy "~1.0.0" + cacache "^18.0.2" + chalk "^5.3.0" + ci-info "^4.0.0" + cli-columns "^4.0.0" + cli-table3 "^0.6.3" + columnify "^1.6.0" + fastest-levenshtein "^1.0.16" + fs-minipass "^3.0.3" + glob "^10.3.10" + graceful-fs "^4.2.11" + hosted-git-info "^7.0.1" + ini "^4.1.1" + init-package-json "^6.0.0" + is-cidr "^5.0.3" + json-parse-even-better-errors "^3.0.1" + libnpmaccess "^8.0.1" + libnpmdiff "^6.0.3" + libnpmexec "^7.0.4" + libnpmfund "^5.0.1" + libnpmhook "^10.0.0" + libnpmorg "^6.0.1" + libnpmpack "^6.0.3" + libnpmpublish "^9.0.2" + libnpmsearch "^7.0.0" + libnpmteam "^6.0.0" + libnpmversion "^5.0.1" + make-fetch-happen "^13.0.0" + minimatch "^9.0.3" + minipass "^7.0.4" + minipass-pipeline "^1.2.4" + ms "^2.1.2" + node-gyp "^10.0.1" + nopt "^7.2.0" + normalize-package-data "^6.0.0" + npm-audit-report "^5.0.0" + npm-install-checks "^6.3.0" + npm-package-arg "^11.0.1" + npm-pick-manifest "^9.0.0" + npm-profile "^9.0.0" + npm-registry-fetch "^16.1.0" + npm-user-validate "^2.0.0" + npmlog "^7.0.1" + p-map "^4.0.0" + pacote "^17.0.6" + parse-conflict-json "^3.0.1" + proc-log "^3.0.0" + qrcode-terminal "^0.12.0" + read "^2.1.0" + semver "^7.6.0" + spdx-expression-parse "^3.0.1" + ssri "^10.0.5" + supports-color "^9.4.0" + tar "^6.2.0" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^3.0.0" + validate-npm-package-name "^5.0.0" + which "^4.0.0" + write-file-atomic "^5.0.1" + npmlog@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" @@ -12915,6 +13815,16 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== + dependencies: + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" + nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" @@ -13283,6 +14193,30 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pacote@^17.0.0, pacote@^17.0.4, pacote@^17.0.6: + version "17.0.6" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-17.0.6.tgz#874bb59cda5d44ab784d0b6530fcb4a7d9b76a60" + integrity sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ== + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^7.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^16.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^7.0.0" + read-package-json-fast "^3.0.0" + sigstore "^2.2.0" + ssri "^10.0.0" + tar "^6.1.11" + pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -13328,6 +14262,15 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== + dependencies: + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -13727,6 +14670,14 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.10: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-value-parser@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" @@ -13824,6 +14775,11 @@ prismjs@~1.27.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -13839,11 +14795,29 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.1.tgz#3570f7a3f2aaaf8e703623a552cd74749688cf19" + integrity sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise.allsettled@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz#2443f3d4b2aa8dfa560f6ac2aa6c4ea999d75f53" @@ -13873,6 +14847,13 @@ prompts@^2.0.1, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + dependencies: + read "^2.0.0" + prop-types@^15.0.0, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -13983,6 +14964,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -14324,6 +15310,29 @@ react@18.3.0-canary-763612647-20240126: dependencies: loose-envify "^1.1.0" +read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" + integrity sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -14360,6 +15369,20 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read@^2.0.0, read@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" + +read@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== + dependencies: + mute-stream "^1.0.0" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -14795,6 +15818,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -14993,6 +16021,13 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.0.0, semver@^7.1.1, semver@^7.3.7, semver@^7.5.3, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -15188,6 +16223,18 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +sigstore@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.2.2.tgz#5e4ff39febeae9e0679bafa22180cb0f445a7e35" + integrity sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg== + dependencies: + "@sigstore/bundle" "^2.2.0" + "@sigstore/core" "^1.0.0" + "@sigstore/protobuf-specs" "^0.3.0" + "@sigstore/sign" "^2.2.3" + "@sigstore/tuf" "^2.3.1" + "@sigstore/verify" "^1.1.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -15248,6 +16295,11 @@ slugify@^1.6.5: resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.5.tgz#c8f5c072bf2135b80703589b39a3d41451fbe8c8" integrity sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -15278,6 +16330,23 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socks-proxy-agent@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.7.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" + integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -15345,7 +16414,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -15365,6 +16434,11 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -15377,6 +16451,13 @@ ssf@~0.11.2: dependencies: frac "~1.1.2" +ssri@^10.0.0, ssri@^10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -15778,6 +16859,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" @@ -15844,6 +16930,18 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" +tar@^6.1.11, tar@^6.1.2, tar@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + telejson@^5.3.2: version "5.3.3" resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" @@ -15969,7 +17067,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -16004,6 +17102,11 @@ tiny-invariant@1.0.6: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -16108,6 +17211,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -16268,6 +17376,15 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tuf-js@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.0.tgz#4daaa8620ba7545501d04dfa933c98abbcc959b9" + integrity sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg== + dependencies: + "@tufjs/models" "2.0.0" + debug "^4.3.4" + make-fetch-happen "^13.0.0" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -16484,6 +17601,13 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -16491,6 +17615,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + unist-builder@2.0.3, unist-builder@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" @@ -16754,7 +17885,7 @@ v8-to-istanbul@^9.0.0: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -16762,6 +17893,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + validator@^13.6.0: version "13.7.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" @@ -16839,6 +17977,11 @@ w3c-xmlserializer@^3.0.0: dependencies: xml-name-validator "^4.0.0" +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== + walker@^1.0.7, walker@~1.0.5: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -16887,6 +18030,13 @@ watchpack@^2.3.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" @@ -17228,7 +18378,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.2: +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -17309,6 +18466,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + ws@^7.4.6: version "7.5.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" From da3c16d9bbd97a8f58265cb8b7e986bb4c7a11ee Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 17 Mar 2024 12:52:25 +0100 Subject: [PATCH 75/86] Undo accidental package installs --- package.json | 2 - yarn.lock | 1193 +------------------------------------------------- 2 files changed, 21 insertions(+), 1174 deletions(-) diff --git a/package.json b/package.json index 986afdb94d..e10fa07540 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "dayjs": "^1.10.6", "final-form": "^4.20.2", "fuse.js": "^6.5.3", - "install": "^0.13.0", "intl-messageformat": "^10.3.1", "iron-session": "^8.0.1", "is-url": "^1.2.4", @@ -65,7 +64,6 @@ "negotiator": "^0.6.2", "next": "^14.1.0", "node-xlsx": "^0.21.0", - "npm": "^10.5.0", "nprogress": "^0.2.0", "papaparse": "^5.4.1", "random-seed": "^0.3.0", diff --git a/yarn.lock b/yarn.lock index 91f3afcab7..7400026545 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2061,11 +2061,6 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2904,77 +2899,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/agent@^2.0.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.1.tgz#8aa677d0a4136d57524336a35d5679aedf2d56f7" - integrity sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.1" - -"@npmcli/arborist@^7.2.1": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.4.0.tgz#6be8e6562945cdf87097f8f8c50d72c37b9eb832" - integrity sha512-VFsUaTrV8NR+0E2I+xhp6pPC5eAbMmSMSMZbS57aogLc6du6HWBPATFOaiNWwp1QTFVeP4aLhYixQM9hHfaAsA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.0" - "@npmcli/installed-package-contents" "^2.0.2" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^7.0.0" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.0.0" - "@npmcli/query" "^3.1.0" - "@npmcli/run-script" "^7.0.2" - bin-links "^4.0.1" - cacache "^18.0.0" - common-ancestor-path "^1.0.1" - hosted-git-info "^7.0.1" - json-parse-even-better-errors "^3.0.0" - json-stringify-nice "^1.1.4" - minimatch "^9.0.0" - nopt "^7.0.0" - npm-install-checks "^6.2.0" - npm-package-arg "^11.0.1" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^16.0.0" - npmlog "^7.0.1" - pacote "^17.0.4" - parse-conflict-json "^3.0.0" - proc-log "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^3.0.1" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.5" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/config@^8.0.2": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-8.2.0.tgz#18774fc7239cfcc124ca9fdc48b1f65bb7bee191" - integrity sha512-YoEYZFg0hRSRP/Chmq+J4FvULFvji6SORUYWQc10FiJ+ReAnViXcDCENg6kM6dID04bAoKNUygrby798+gYBbQ== - dependencies: - "@npmcli/map-workspaces" "^3.0.2" - ci-info "^4.0.0" - ini "^4.1.0" - nopt "^7.0.0" - proc-log "^3.0.0" - read-package-json-fast "^3.0.2" - semver "^7.3.5" - walk-up-path "^3.0.1" - -"@npmcli/disparity-colors@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833" - integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== - dependencies: - ansi-styles "^4.3.0" - "@npmcli/fs@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" @@ -2983,55 +2907,6 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^5.0.0", "@npmcli/git@^5.0.3": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.4.tgz#d18c50f99649e6e89e8b427318134f582498700c" - integrity sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ== - dependencies: - "@npmcli/promise-spawn" "^7.0.0" - lru-cache "^10.0.1" - npm-pick-manifest "^9.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^4.0.0" - -"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" - integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.0.0.tgz#fb59245926d7f677db904177f9aca15ac883d6cb" - integrity sha512-Pw0tyX02VkpqlIQlG2TeiJNsdrecYeUU0ubZZa9pi3N37GCsxI+en43u4hYFdq+eSx1A9a9vwFAUyqEtKFsbHQ== - dependencies: - cacache "^18.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^17.0.0" - semver "^7.3.5" - "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -3040,54 +2915,6 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.0.0.tgz#77d0f8b17096763ccbd8af03b7117ba6e34d6e91" - integrity sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^3.0.0" - semver "^7.5.3" - -"@npmcli/promise-spawn@^7.0.0", "@npmcli/promise-spawn@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz#a836de2f42a2245d629cf6fbb8dd6c74c74c55af" - integrity sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg== - dependencies: - which "^4.0.0" - -"@npmcli/query@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" - integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/run-script@^7.0.0", "@npmcli/run-script@^7.0.2", "@npmcli/run-script@^7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.4.tgz#9f29aaf4bfcf57f7de2a9e28d1ef091d14b2e6eb" - integrity sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.0.0" - "@npmcli/promise-spawn" "^7.0.0" - node-gyp "^10.0.0" - which "^4.0.0" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -3217,50 +3044,6 @@ resolved "https://registry.yarnpkg.com/@servie/events/-/events-1.0.0.tgz#8258684b52d418ab7b86533e861186638ecc5dc1" integrity sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw== -"@sigstore/bundle@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.2.0.tgz#e3f555a5c503fe176d8d1e0e829b00f842502e46" - integrity sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ== - dependencies: - "@sigstore/protobuf-specs" "^0.3.0" - -"@sigstore/core@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.0.0.tgz#0fcdb32d191d4145a70cb837061185353b3b08e3" - integrity sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw== - -"@sigstore/protobuf-specs@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz#bdcc773671f625bb81591bca86ec5314d57297f3" - integrity sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA== - -"@sigstore/sign@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.2.3.tgz#f07bcd2cfee654fade867db44ae260f1a0142ba4" - integrity sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw== - dependencies: - "@sigstore/bundle" "^2.2.0" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.0" - make-fetch-happen "^13.0.0" - -"@sigstore/tuf@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.1.tgz#86ff3c3c907e271696c88de0108d9063a8cbcc45" - integrity sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q== - dependencies: - "@sigstore/protobuf-specs" "^0.3.0" - tuf-js "^2.2.0" - -"@sigstore/verify@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.1.0.tgz#ab617c5dc0bc09ead7f101a848f4870af2d84374" - integrity sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg== - dependencies: - "@sigstore/bundle" "^2.2.0" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.0" - "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -4449,19 +4232,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.0.tgz#c7ab241cf11dd29deb213d6817dabb8c99ce0863" - integrity sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.3" - "@types/aria-query@^4.2.0": version "4.2.2" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" @@ -5390,11 +5160,6 @@ abbrev@^1.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - accepts@~1.3.5: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -5484,13 +5249,6 @@ agent-base@6: dependencies: debug "4" -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5603,7 +5361,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -5648,7 +5406,7 @@ app-root-dir@^1.0.2: resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: +"aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -5658,11 +5416,6 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -5671,11 +5424,6 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz#aed25dd0eae514660d49ac2b2366b175c614785a" - integrity sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg== - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -6258,16 +6006,6 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bin-links@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.3.tgz#9e4a3c5900830aee3d7f52178b65e01dcdde64a5" - integrity sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -6278,11 +6016,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -binary-extensions@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -6526,13 +6259,6 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -6618,24 +6344,6 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" -cacache@^18.0.0, cacache@^18.0.2: - version "18.0.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.2.tgz#fd527ea0f03a603be5c0da5805635f8eef00c60c" - integrity sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6771,11 +6479,6 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - chance@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/chance/-/chance-1.1.8.tgz#5d6c2b78c9170bf6eb9df7acdda04363085be909" @@ -6870,18 +6573,6 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== -ci-info@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" - integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== - -cidr-regex@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-4.0.3.tgz#07b52c9762d1ff546a50740e92fc2b5b13a6d871" - integrity sha512-HOwDIy/rhKeMf6uOzxtv7FAbrz8zPjmVKfSpM+U7/bNBXC5rtOyr758jxcptiSx6ZZn5LOhPJT5WWxPAGDV8dw== - dependencies: - ip-regex "^5.0.0" - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -6929,14 +6620,6 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== - dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" - cli-table3@^0.6.1: version "0.6.2" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" @@ -6946,15 +6629,6 @@ cli-table3@^0.6.1: optionalDependencies: "@colors/colors" "1.5.0" -cli-table3@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - client-oauth2@^4.1.0: version "4.3.3" resolved "https://registry.yarnpkg.com/client-oauth2/-/client-oauth2-4.3.3.tgz#7a700e6f4bf412c1f96da0d6b50e07676561e086" @@ -6986,11 +6660,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - clsx@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" @@ -7011,11 +6680,6 @@ clsx@^2.0.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== -cmd-shim@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.2.tgz#435fd9e5c95340e61715e19f90209ed6fcd9e0a4" - integrity sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw== - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -7076,7 +6740,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2, color-support@^1.1.3: +color-support@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -7086,14 +6750,6 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -7146,11 +6802,6 @@ commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -7795,13 +7446,6 @@ default-browser-id@^1.0.4: meow "^3.1.0" untildify "^2.0.0" -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - define-data-property@^1.0.1, define-data-property@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" @@ -7942,11 +7586,6 @@ diff@^5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== -diff@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -8182,13 +7821,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -8250,16 +7882,6 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -8948,11 +8570,6 @@ expect@^27.3.1: jest-message-util "^27.3.1" jest-regex-util "^27.0.6" -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -9088,11 +8705,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastest-levenshtein@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -9446,13 +9058,6 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-minipass@^3.0.0, fs-minipass@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - fs-monkey@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" @@ -9546,20 +9151,6 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" -gauge@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" - integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^4.0.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -9668,7 +9259,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@10.3.10, glob@^10.2.2, glob@^10.3.10: +glob@10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -9791,7 +9382,7 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== -graceful-fs@^4.2.11, graceful-fs@^4.2.6: +graceful-fs@^4.2.11: 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== @@ -10051,13 +9642,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^7.0.0, hosted-git-info@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" - integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== - dependencies: - lru-cache "^10.0.1" - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -10154,11 +9738,6 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -10199,14 +9778,6 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - http-proxy-middleware@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz#7ef3417a479fb7666a571e09966c66a39bd2c15f" @@ -10240,14 +9811,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^7.0.1: - version "7.0.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" - integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== - dependencies: - agent-base "^7.0.2" - 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" @@ -10265,7 +9828,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2: +iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -10294,13 +9857,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" - integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== - dependencies: - minimatch "^9.0.0" - ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -10392,34 +9948,11 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^4.1.0, ini@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.2.tgz#7f646dbd9caea595e61f88ef60bfff8b01f8130a" - integrity sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw== - -init-package-json@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.2.tgz#0d780b752dd1dd83b8649945df38a07df4f990a6" - integrity sha512-ZQ9bxt6PkqIH6fPU69HPheOMoUqIqVqwZj0qlCBfoSCG4lplQhVM/qB3RS4f0RALK3WZZSrNQxNtCZgphuf3IA== - dependencies: - "@npmcli/package-json" "^5.0.0" - npm-package-arg "^11.0.0" - promzard "^1.0.0" - read "^3.0.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" - inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -install@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776" - integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA== - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -10468,24 +10001,11 @@ intl-messageformat@^10.3.1: "@formatjs/icu-messageformat-parser" "2.3.0" tslib "^2.4.0" -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" - integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== - ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -10627,13 +10147,6 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-5.0.3.tgz#fcf817c0146dd4a318f27938af89e98a9b21bdd5" - integrity sha512-lKkM0tmz07dAxNsr8Ii9MGreExa9ZR34N9j8mTG5op824kcwBqinZPowNjcVWWc7j+jR8XAMMItOmBkniN0jOA== - dependencies: - cidr-regex "4.0.3" - is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" @@ -10792,11 +10305,6 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -11013,11 +10521,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -11655,11 +11158,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -11746,11 +11244,6 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" - integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -11766,11 +11259,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -11830,11 +11318,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - jss-plugin-camel-case@^10.10.0: version "10.10.0" resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" @@ -11998,16 +11481,6 @@ junk@^3.1.0: resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -12130,119 +11603,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.2.tgz#a13a72fd5b71a1063ea54973fa56d61ec38f718f" - integrity sha512-4K+nsg3OYt4rjryP/3D5zGWluLbZaKozwj6YdtvAyxNhLhUrjCoyxHVoL5AkTJcAnjsd6/ATei52QPVvpSX9Ug== - dependencies: - npm-package-arg "^11.0.1" - npm-registry-fetch "^16.0.0" - -libnpmdiff@^6.0.3: - version "6.0.7" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-6.0.7.tgz#5fd7df1c4b8ff58160fa59d5eb97686a00f8fdd3" - integrity sha512-Erca7NHh+MGk4O14mM4yv9S1S+Wc5TgFg6yr8r/g5ykn34dZdAP/GkzhQNJiOpzfD8j1HBhbTpkbGJHVDdgG5Q== - dependencies: - "@npmcli/arborist" "^7.2.1" - "@npmcli/disparity-colors" "^3.0.0" - "@npmcli/installed-package-contents" "^2.0.2" - binary-extensions "^2.2.0" - diff "^5.1.0" - minimatch "^9.0.0" - npm-package-arg "^11.0.1" - pacote "^17.0.4" - tar "^6.2.0" - -libnpmexec@^7.0.4: - version "7.0.8" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-7.0.8.tgz#2bc6ab0468dde95803745ced1fea48bd43b112fc" - integrity sha512-xDzWoYpV1Ok0TIdrY4wuWGxriEv/O3/d8QG924yErBE0sMkkzKsin2dAmlEBsSlR7YRilObs8q+5uNtxKNQHAQ== - dependencies: - "@npmcli/arborist" "^7.2.1" - "@npmcli/run-script" "^7.0.2" - ci-info "^4.0.0" - npm-package-arg "^11.0.1" - npmlog "^7.0.1" - pacote "^17.0.4" - proc-log "^3.0.0" - read "^2.0.0" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - walk-up-path "^3.0.1" - -libnpmfund@^5.0.1: - version "5.0.5" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-5.0.5.tgz#f874005a2f9a92a4c6c4ae7a489ceb16f48690ce" - integrity sha512-BUu2l9Kn4u6nce1Ay8a1uRN1fyU7lbVmtsMYxWcFpcbF+ZPN7qIiPksfcnY9/NDKIRGJYwwv0IXgQQStHDx6Tg== - dependencies: - "@npmcli/arborist" "^7.2.1" - -libnpmhook@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-10.0.1.tgz#3cb9516645f0d6891b4a59c72ffe026bdbb9bd6b" - integrity sha512-FnXCweDpoAko6mnLPSW8qrRYicjfh+GrvY5PuYHQRPvaW4BFtHDUmK3K3aYx4yD3TeGAKpj4IigrEDfUfWuSkA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^16.0.0" - -libnpmorg@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-6.0.2.tgz#6e5e37ecc5a391082e83c599512689c78e60dc70" - integrity sha512-zK4r6cjVsfXf7hWzWGB6R0LBJidVhKaeMWMZL/1eyZS6ixxAxVijfsPacoEnBRCFaXsNjAtwV3b2RCmYU6+usA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^16.0.0" - -libnpmpack@^6.0.3: - version "6.0.7" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-6.0.7.tgz#0b1cdd7c250f929e77ece95f2a738e9670dcb8ad" - integrity sha512-aVX5ZLiYAioShh5wzoBOGs25GvPskry7SxCpx76gMCjOrd/wKcNtbTOMqStvizd3c+vzq5a1b7FMP09XAtgRFg== - dependencies: - "@npmcli/arborist" "^7.2.1" - "@npmcli/run-script" "^7.0.2" - npm-package-arg "^11.0.1" - pacote "^17.0.4" - -libnpmpublish@^9.0.2: - version "9.0.4" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.4.tgz#0222c14578088ca9a758585c36d8133b828c87ad" - integrity sha512-330o6pVsCCg77jQ/+kidyG/RiohXYQKpqmzOC4BjUDWcimb+mXptRBh1Kvy27/Zb/CStZLVrfgGc6tXf5+PE3Q== - dependencies: - ci-info "^4.0.0" - normalize-package-data "^6.0.0" - npm-package-arg "^11.0.1" - npm-registry-fetch "^16.0.0" - proc-log "^3.0.0" - semver "^7.3.7" - sigstore "^2.2.0" - ssri "^10.0.5" - -libnpmsearch@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-7.0.1.tgz#8fa803a8e5837a33ce750a8cc1c70820d728b91d" - integrity sha512-XyKi6Y94t6PGd5Lk2Ma3+fgiHWD3KSCvXmHOrcLkAOEP7oUejbNjL0Bb/HUDZXgBj6gP1Qk7pJ6jZPFBc2hmXQ== - dependencies: - npm-registry-fetch "^16.0.0" - -libnpmteam@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-6.0.1.tgz#daa1b2e7e4ccef0469bdef661737ca823b53468b" - integrity sha512-1YytqVk1gSkKFNMe4kkCKN49y5rlABrRSx5TrYShQtt2Lb4uQaed49dGE7Ue8TJGxbIkHzvyyVtb3PBiGACVqw== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^16.0.0" - -libnpmversion@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-5.0.2.tgz#aea7b09bc270c778cbc8be7bf02e4b60566989cf" - integrity sha512-6JBnLhd6SYgKRekJ4cotxpURLGbEtKxzw+a8p5o+wNwrveJPMH8yW/HKjeewyHzWmxzzwn9EQ3TkF2onkrwstA== - dependencies: - "@npmcli/git" "^5.0.3" - "@npmcli/run-script" "^7.0.2" - json-parse-even-better-errors "^3.0.0" - proc-log "^3.0.0" - semver "^7.3.7" - libphonenumber-js@^1.10.51: version "1.10.51" resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.51.tgz#a3b8c15db2721c3e5f7fe6759e2a524712b578e6" @@ -12399,11 +11759,6 @@ lowlight@^1.14.0, lowlight@^1.17.0: fault "^1.0.0" highlight.js "~10.7.0" -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -12426,6 +11781,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" @@ -12458,23 +11818,6 @@ make-error@1.x, make-error@^1.1.1, make-error@^1.3.5: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" - integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - ssri "^10.0.0" - makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -13146,7 +12489,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: +minimatch@9.0.3, minimatch@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -13191,24 +12534,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -13216,28 +12541,13 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - minipass@^3.0.0, minipass@^3.1.1: version "3.1.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" @@ -13245,17 +12555,12 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^2.1.1, minizlib@^2.1.2: +minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -13352,7 +12657,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1, ms@^2.1.2: +ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -13367,11 +12672,6 @@ mui-rff@^6.1.2: date-fns "^2.25.0" yup "^0.32.11" -mute-stream@^1.0.0, mute-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - nan@^2.12.1: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" @@ -13419,7 +12719,7 @@ negotiator@0.6.2, negotiator@^0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -negotiator@0.6.3, negotiator@^0.6.3: +negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -13502,22 +12802,6 @@ node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-gyp@^10.0.0, node-gyp@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" - integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - tar "^6.1.2" - which "^4.0.0" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -13581,13 +12865,6 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" -nopt@^7.0.0, nopt@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" - integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== - dependencies: - abbrev "^2.0.0" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -13598,16 +12875,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" - integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== - dependencies: - hosted-git-info "^7.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -13625,78 +12892,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -npm-audit-report@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" - integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== - -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^6.0.0, npm-install-checks@^6.2.0, npm-install-checks@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@^11.0.0, npm-package-arg@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" - integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" - integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== - dependencies: - ignore-walk "^6.0.4" - -npm-pick-manifest@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz#f87a4c134504a2c7931f2bb8733126e3c3bb7e8f" - integrity sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" - semver "^7.3.5" - -npm-profile@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-9.0.0.tgz#ffcfa4e3e1b1cb44b17c192f75b44b24b4aae645" - integrity sha512-qv43ixsJ7vndzfxD3XsPNu1Njck6dhO7q1efksTo+0DiOQysKSOsIhK/qDD1/xO2o+2jDOA4Rv/zOJ9KQFs9nw== - dependencies: - npm-registry-fetch "^16.0.0" - proc-log "^3.0.0" - -npm-registry-fetch@^16.0.0, npm-registry-fetch@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz#10227b7b36c97bc1cf2902a24e4f710cfe62803c" - integrity sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw== - dependencies: - make-fetch-happen "^13.0.0" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^11.0.0" - proc-log "^3.0.0" - npm-run-all2@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/npm-run-all2/-/npm-run-all2-6.0.4.tgz#2623097fcc8b43d051a364146f060978d3e36baa" @@ -13724,87 +12919,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" - integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== - -npm@^10.5.0: - version "10.5.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-10.5.0.tgz#726f91df5b1b14d9637c8819d7e71cb873c395a1" - integrity sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^7.2.1" - "@npmcli/config" "^8.0.2" - "@npmcli/fs" "^3.1.0" - "@npmcli/map-workspaces" "^3.0.4" - "@npmcli/package-json" "^5.0.0" - "@npmcli/promise-spawn" "^7.0.1" - "@npmcli/run-script" "^7.0.4" - "@sigstore/tuf" "^2.3.1" - abbrev "^2.0.0" - archy "~1.0.0" - cacache "^18.0.2" - chalk "^5.3.0" - ci-info "^4.0.0" - cli-columns "^4.0.0" - cli-table3 "^0.6.3" - columnify "^1.6.0" - fastest-levenshtein "^1.0.16" - fs-minipass "^3.0.3" - glob "^10.3.10" - graceful-fs "^4.2.11" - hosted-git-info "^7.0.1" - ini "^4.1.1" - init-package-json "^6.0.0" - is-cidr "^5.0.3" - json-parse-even-better-errors "^3.0.1" - libnpmaccess "^8.0.1" - libnpmdiff "^6.0.3" - libnpmexec "^7.0.4" - libnpmfund "^5.0.1" - libnpmhook "^10.0.0" - libnpmorg "^6.0.1" - libnpmpack "^6.0.3" - libnpmpublish "^9.0.2" - libnpmsearch "^7.0.0" - libnpmteam "^6.0.0" - libnpmversion "^5.0.1" - make-fetch-happen "^13.0.0" - minimatch "^9.0.3" - minipass "^7.0.4" - minipass-pipeline "^1.2.4" - ms "^2.1.2" - node-gyp "^10.0.1" - nopt "^7.2.0" - normalize-package-data "^6.0.0" - npm-audit-report "^5.0.0" - npm-install-checks "^6.3.0" - npm-package-arg "^11.0.1" - npm-pick-manifest "^9.0.0" - npm-profile "^9.0.0" - npm-registry-fetch "^16.1.0" - npm-user-validate "^2.0.0" - npmlog "^7.0.1" - p-map "^4.0.0" - pacote "^17.0.6" - parse-conflict-json "^3.0.1" - proc-log "^3.0.0" - qrcode-terminal "^0.12.0" - read "^2.1.0" - semver "^7.6.0" - spdx-expression-parse "^3.0.1" - ssri "^10.0.5" - supports-color "^9.4.0" - tar "^6.2.0" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^3.0.0" - validate-npm-package-name "^5.0.0" - which "^4.0.0" - write-file-atomic "^5.0.1" - npmlog@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" @@ -13815,16 +12929,6 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== - dependencies: - are-we-there-yet "^4.0.0" - console-control-strings "^1.1.0" - gauge "^5.0.0" - set-blocking "^2.0.0" - nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" @@ -14193,30 +13297,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^17.0.0, pacote@^17.0.4, pacote@^17.0.6: - version "17.0.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-17.0.6.tgz#874bb59cda5d44ab784d0b6530fcb4a7d9b76a60" - integrity sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ== - dependencies: - "@npmcli/git" "^5.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^7.0.0" - "@npmcli/run-script" "^7.0.0" - cacache "^18.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^11.0.0" - npm-packlist "^8.0.0" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^16.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^7.0.0" - read-package-json-fast "^3.0.0" - sigstore "^2.2.0" - ssri "^10.0.0" - tar "^6.1.11" - pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -14262,15 +13342,6 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -14670,14 +13741,6 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.10: - version "6.0.16" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" - integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postcss-value-parser@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" @@ -14775,11 +13838,6 @@ prismjs@~1.27.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -14795,29 +13853,11 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.1.tgz#3570f7a3f2aaaf8e703623a552cd74749688cf19" - integrity sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - promise.allsettled@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz#2443f3d4b2aa8dfa560f6ac2aa6c4ea999d75f53" @@ -14847,13 +13887,6 @@ prompts@^2.0.1, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -promzard@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" - integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== - dependencies: - read "^2.0.0" - prop-types@^15.0.0, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -14964,11 +13997,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -15310,29 +14338,6 @@ react@18.3.0-canary-763612647-20240126: dependencies: loose-envify "^1.1.0" -read-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" - integrity sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg== - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -15369,20 +14374,6 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@^2.0.0, read@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" - integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== - dependencies: - mute-stream "~1.0.0" - -read@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" - integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== - dependencies: - mute-stream "^1.0.0" - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -15818,11 +14809,6 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -16021,13 +15007,6 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.7, semver@^7.5.3, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -16223,18 +15202,6 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sigstore@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.2.2.tgz#5e4ff39febeae9e0679bafa22180cb0f445a7e35" - integrity sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg== - dependencies: - "@sigstore/bundle" "^2.2.0" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.0" - "@sigstore/sign" "^2.2.3" - "@sigstore/tuf" "^2.3.1" - "@sigstore/verify" "^1.1.0" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -16295,11 +15262,6 @@ slugify@^1.6.5: resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.5.tgz#c8f5c072bf2135b80703589b39a3d41451fbe8c8" integrity sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ== -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -16330,23 +15292,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" - integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== - dependencies: - agent-base "^7.0.2" - debug "^4.3.4" - socks "^2.7.1" - -socks@^2.7.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" - integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -16414,7 +15359,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: +spdx-expression-parse@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -16434,11 +15379,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -16451,13 +15391,6 @@ ssf@~0.11.2: dependencies: frac "~1.1.2" -ssri@^10.0.0, ssri@^10.0.5: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -16859,11 +15792,6 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-color@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" - integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== - supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" @@ -16930,18 +15858,6 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" -tar@^6.1.11, tar@^6.1.2, tar@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - telejson@^5.3.2: version "5.3.3" resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" @@ -17067,7 +15983,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -17102,11 +16018,6 @@ tiny-invariant@1.0.6: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -17211,11 +16122,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -17376,15 +16282,6 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -tuf-js@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.0.tgz#4daaa8620ba7545501d04dfa933c98abbcc959b9" - integrity sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg== - dependencies: - "@tufjs/models" "2.0.0" - debug "^4.3.4" - make-fetch-happen "^13.0.0" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -17601,13 +16498,6 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -17615,13 +16505,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - unist-builder@2.0.3, unist-builder@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" @@ -17885,7 +16768,7 @@ v8-to-istanbul@^9.0.0: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -17893,13 +16776,6 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - validator@^13.6.0: version "13.7.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" @@ -17977,11 +16853,6 @@ w3c-xmlserializer@^3.0.0: dependencies: xml-name-validator "^4.0.0" -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - walker@^1.0.7, walker@~1.0.5: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -18030,13 +16901,6 @@ watchpack@^2.3.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" @@ -18378,14 +17242,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -18466,14 +17323,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - ws@^7.4.6: version "7.5.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" From b5cc44cc81ae94e446f15a222b805956c6def911 Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Wed, 27 Mar 2024 15:37:39 +0100 Subject: [PATCH 76/86] Do navigation in test cases, not in beforeEach() --- .../surveys/submitting-survey.spec.ts | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts index 566f87d4ae..1c952bea9f 100644 --- a/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts +++ b/integrationTesting/tests/organize/surveys/submitting-survey.spec.ts @@ -13,7 +13,7 @@ import { test.describe('User submitting a survey', () => { const apiPostPath = `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`; - test.beforeEach(async ({ appUri, login, moxy, page }) => { + test.beforeEach(async ({ login, moxy }) => { moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}`, 'get', @@ -30,17 +30,17 @@ test.describe('User submitting a survey', () => { role: null, }, ]); - - await page.goto( - `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` - ); }); test.afterEach(({ moxy }) => { moxy.teardown(); }); - test('submits responses', async ({ moxy, page }) => { + test('submits responses', async ({ appUri, moxy, page }) => { + await page.goto( + `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` + ); + moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -77,7 +77,11 @@ test.describe('User submitting a survey', () => { ]); }); - test('submits email signature', async ({ moxy, page }) => { + test('submits email signature', async ({ appUri, moxy, page }) => { + await page.goto( + `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` + ); + moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -111,7 +115,11 @@ test.describe('User submitting a survey', () => { }); }); - test('submits user signature', async ({ moxy, page }) => { + test('submits user signature', async ({ appUri, moxy, page }) => { + await page.goto( + `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` + ); + moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -138,7 +146,11 @@ test.describe('User submitting a survey', () => { expect(data.signature).toBe('user'); }); - test('submits anonymous signature', async ({ moxy, page }) => { + test('submits anonymous signature', async ({ appUri, moxy, page }) => { + await page.goto( + `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` + ); + moxy.setZetkinApiMock( `/orgs/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}/submissions`, 'post', @@ -165,7 +177,11 @@ test.describe('User submitting a survey', () => { expect(data.signature).toBe(null); }); - test('preserves inputs on error', async ({ page }) => { + test('preserves inputs on error', async ({ appUri, page }) => { + await page.goto( + `${appUri}/o/${KPDMembershipSurvey.organization.id}/surveys/${KPDMembershipSurvey.id}` + ); + await page.click('input[name="1.options"][value="1"]'); await page.fill('[name="2.text"]', 'Topple capitalism'); await page.click('input[name="sig"][value="anonymous"]'); From 5a23beafc17151f7e11578d310214abb18024c23 Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Wed, 27 Mar 2024 15:38:12 +0100 Subject: [PATCH 77/86] Add test case and fix bug that occurred when not interacting with Date: Fri, 24 May 2024 20:15:54 +0200 Subject: [PATCH 83/86] Fix survey URL generation --- .../surveys/components/SurveyURLCard.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/features/surveys/components/SurveyURLCard.tsx b/src/features/surveys/components/SurveyURLCard.tsx index d219a448f3..2f570e8c52 100644 --- a/src/features/surveys/components/SurveyURLCard.tsx +++ b/src/features/surveys/components/SurveyURLCard.tsx @@ -1,4 +1,5 @@ import { OpenInNew } from '@mui/icons-material'; +import { useMemo } from 'react'; import { Box, Link, useTheme } from '@mui/material'; import ZUICard from 'zui/ZUICard'; @@ -6,6 +7,7 @@ import ZUITextfieldToClipboard from 'zui/ZUITextfieldToClipboard'; import { Msg, useMessages } from 'core/i18n'; import messageIds from '../l10n/messageIds'; +import useSurvey from '../hooks/useSurvey'; interface SurveyURLCardProps { isOpen: boolean; @@ -14,8 +16,16 @@ interface SurveyURLCardProps { } const SurveyURLCard = ({ isOpen, orgId, surveyId }: SurveyURLCardProps) => { + const survey = useSurvey(parseInt(orgId), parseInt(surveyId)); const messages = useMessages(messageIds); const theme = useTheme(); + const surveyUrl = useMemo( + () => + survey.data + ? `${location.protocol}//${location.host}/o/${survey.data.organization.id}/surveys/${surveyId}` + : '', + [survey.data, surveyId] + ); return ( { } > - - {`${location.protocol}//${location.host}/o/${orgId}/surveys/${surveyId}`} + + {surveyUrl} Date: Sun, 30 Jun 2024 16:26:27 +0200 Subject: [PATCH 84/86] Fix linter errors and remove unused commented-out code --- src/app/o/[orgId]/surveys/[surveyId]/page.tsx | 5 +++-- src/features/surveys/actions/submit.ts | 3 ++- .../components/surveyForm/SurveyElements.tsx | 1 + .../components/surveyForm/SurveyErrorMessage.tsx | 5 +++-- .../surveys/components/surveyForm/SurveyForm.tsx | 3 ++- .../components/surveyForm/SurveyHeading.tsx | 5 +++-- .../surveyForm/SurveyOptionsQuestion.tsx | 13 +++++++------ .../components/surveyForm/SurveyPrivacyPolicy.tsx | 11 ++++++----- .../components/surveyForm/SurveyQuestion.tsx | 1 + .../components/surveyForm/SurveySignature.tsx | 14 ++++++-------- .../components/surveyForm/SurveySubmitButton.tsx | 1 + .../components/surveyForm/SurveySuccess.tsx | 3 ++- .../components/surveyForm/SurveyTextBlock.tsx | 3 ++- .../components/surveyForm/SurveyTextQuestion.tsx | 3 ++- src/features/surveys/l10n/messageIds.ts | 1 + .../surveys/utils/prepareSurveyApiSubmission.ts | 1 + src/utils/locale.spec.ts | 3 ++- 17 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx index 76ad6e83a6..34387f2368 100644 --- a/src/app/o/[orgId]/surveys/[surveyId]/page.tsx +++ b/src/app/o/[orgId]/surveys/[surveyId]/page.tsx @@ -1,10 +1,11 @@ 'use server'; -import BackendApiClient from 'core/api/client/BackendApiClient'; import { headers } from 'next/headers'; import { Metadata } from 'next'; -import SurveyForm from 'features/surveys/components/surveyForm/SurveyForm'; import { FC, ReactElement } from 'react'; + +import SurveyForm from 'features/surveys/components/surveyForm/SurveyForm'; +import BackendApiClient from 'core/api/client/BackendApiClient'; import { ZetkinSurveyExtended, ZetkinUser } from 'utils/types/zetkin'; type PageProps = { diff --git a/src/features/surveys/actions/submit.ts b/src/features/surveys/actions/submit.ts index 41280d69a7..ac1110c914 100644 --- a/src/features/surveys/actions/submit.ts +++ b/src/features/surveys/actions/submit.ts @@ -1,7 +1,8 @@ 'use server'; -import BackendApiClient from 'core/api/client/BackendApiClient'; import { headers } from 'next/headers'; + +import BackendApiClient from 'core/api/client/BackendApiClient'; import prepareSurveyApiSubmission from 'features/surveys/utils/prepareSurveyApiSubmission'; import { ZetkinSurveyFormStatus, ZetkinUser } from 'utils/types/zetkin'; diff --git a/src/features/surveys/components/surveyForm/SurveyElements.tsx b/src/features/surveys/components/surveyForm/SurveyElements.tsx index 6d5219df21..5aeb32dbbe 100644 --- a/src/features/surveys/components/surveyForm/SurveyElements.tsx +++ b/src/features/surveys/components/surveyForm/SurveyElements.tsx @@ -1,5 +1,6 @@ import { Box } from '@mui/system'; import { FC } from 'react'; + import SurveyQuestion from './SurveyQuestion'; import SurveyTextBlock from './SurveyTextBlock'; import { diff --git a/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx b/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx index 66d00180de..8864355de7 100644 --- a/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx +++ b/src/features/surveys/components/surveyForm/SurveyErrorMessage.tsx @@ -1,9 +1,10 @@ import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material'; +import { FC, useEffect, useRef } from 'react'; + import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; import SurveyContainer from './SurveyContainer'; -import { useTheme } from '@mui/material'; -import { FC, useEffect, useRef } from 'react'; const SurveyErrorMessage: FC = () => { const element = useRef(null); diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index 6ed53c42ae..7d98039cf1 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -2,6 +2,8 @@ import { Box } from '@mui/material'; import { FC } from 'react'; +import { useFormState } from 'react-dom'; + import { submit } from 'features/surveys/actions/submit'; import SurveyElements from './SurveyElements'; import SurveyHeading from './SurveyHeading'; @@ -21,7 +23,6 @@ import { // import this. // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore -import { useFormState } from 'react-dom'; export type SurveyFormProps = { survey: ZetkinSurveyExtended; diff --git a/src/features/surveys/components/surveyForm/SurveyHeading.tsx b/src/features/surveys/components/surveyForm/SurveyHeading.tsx index e6356cd29d..b520c1de0a 100644 --- a/src/features/surveys/components/surveyForm/SurveyHeading.tsx +++ b/src/features/surveys/components/surveyForm/SurveyHeading.tsx @@ -1,9 +1,10 @@ import { FC } from 'react'; +import { useSearchParams } from 'next/navigation'; +import { Box, Typography } from '@mui/material'; + import SurveyContainer from './SurveyContainer'; import SurveyErrorMessage from './SurveyErrorMessage'; -import { useSearchParams } from 'next/navigation'; import ZUIAvatar from 'zui/ZUIAvatar'; -import { Box, Typography } from '@mui/material'; import { ZetkinSurveyExtended, ZetkinSurveyFormStatus, diff --git a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx index 23e2f603ef..66e93c3c19 100644 --- a/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyOptionsQuestion.tsx @@ -1,9 +1,3 @@ -import messageIds from 'features/surveys/l10n/messageIds'; -import SurveyContainer from './SurveyContainer'; -import SurveyOption from './SurveyOption'; -import SurveyQuestionDescription from './SurveyQuestionDescription'; -import SurveySubheading from './SurveySubheading'; -import { useMessages } from 'core/i18n'; import { Box, Checkbox, @@ -17,6 +11,13 @@ import { SelectChangeEvent, } from '@mui/material'; import { FC, useCallback, useState } from 'react'; + +import messageIds from 'features/surveys/l10n/messageIds'; +import SurveyContainer from './SurveyContainer'; +import SurveyOption from './SurveyOption'; +import SurveyQuestionDescription from './SurveyQuestionDescription'; +import SurveySubheading from './SurveySubheading'; +import { useMessages } from 'core/i18n'; import { ZetkinSurveyOption, ZetkinSurveyOptionsQuestionElement, diff --git a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx index 9625bf2222..5222051536 100644 --- a/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx +++ b/src/features/surveys/components/surveyForm/SurveyPrivacyPolicy.tsx @@ -1,9 +1,4 @@ import { FC } from 'react'; -import messageIds from 'features/surveys/l10n/messageIds'; -import SurveyContainer from './SurveyContainer'; -import SurveyOption from './SurveyOption'; -import SurveySubheading from './SurveySubheading'; -import { ZetkinSurveyExtended } from 'utils/types/zetkin'; import { Box, Checkbox, @@ -13,6 +8,12 @@ import { Link, Typography, } from '@mui/material'; + +import messageIds from 'features/surveys/l10n/messageIds'; +import SurveyContainer from './SurveyContainer'; +import SurveyOption from './SurveyOption'; +import SurveySubheading from './SurveySubheading'; +import { ZetkinSurveyExtended } from 'utils/types/zetkin'; import { Msg, useMessages } from 'core/i18n'; export type SurveyPrivacyPolicyProps = { diff --git a/src/features/surveys/components/surveyForm/SurveyQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyQuestion.tsx index 82a0e3116f..894e7f653b 100644 --- a/src/features/surveys/components/surveyForm/SurveyQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyQuestion.tsx @@ -1,4 +1,5 @@ import { FC } from 'react'; + import SurveyOptionsQuestion from './SurveyOptionsQuestion'; import SurveyTextQuestion from './SurveyTextQuestion'; import { diff --git a/src/features/surveys/components/surveyForm/SurveySignature.tsx b/src/features/surveys/components/surveyForm/SurveySignature.tsx index 3367e9029f..7acc638af2 100644 --- a/src/features/surveys/components/surveyForm/SurveySignature.tsx +++ b/src/features/surveys/components/surveyForm/SurveySignature.tsx @@ -1,10 +1,3 @@ -import messageIds from 'features/surveys/l10n/messageIds'; -import { Msg } from 'core/i18n'; -import SurveyContainer from './SurveyContainer'; -import SurveyOption from './SurveyOption'; -import SurveySubheading from './SurveySubheading'; -// import useCurrentUser from 'features/user/hooks/useCurrentUser'; - import { Box, FormControl, @@ -16,6 +9,12 @@ import { useTheme, } from '@mui/material'; import { FC, useCallback, useState } from 'react'; + +import messageIds from 'features/surveys/l10n/messageIds'; +import { Msg } from 'core/i18n'; +import SurveyContainer from './SurveyContainer'; +import SurveyOption from './SurveyOption'; +import SurveySubheading from './SurveySubheading'; import { ZetkinSurveyExtended, ZetkinSurveySignatureType, @@ -28,7 +27,6 @@ export type SurveySignatureProps = { }; const SurveySignature: FC = ({ survey, user }) => { - // const currentUser = useCurrentUser(); const theme = useTheme(); const [signatureType, setSignatureType] = useState< diff --git a/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx b/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx index 9f7b570f5d..0f2a5aacbd 100644 --- a/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx +++ b/src/features/surveys/components/surveyForm/SurveySubmitButton.tsx @@ -1,5 +1,6 @@ import { Button } from '@mui/material'; import { FC } from 'react'; + import messageIds from 'features/surveys/l10n/messageIds'; import SurveyContainer from './SurveyContainer'; import { useMessages } from 'core/i18n'; diff --git a/src/features/surveys/components/surveyForm/SurveySuccess.tsx b/src/features/surveys/components/surveyForm/SurveySuccess.tsx index 881129dd6a..e80bf6b49a 100644 --- a/src/features/surveys/components/surveyForm/SurveySuccess.tsx +++ b/src/features/surveys/components/surveyForm/SurveySuccess.tsx @@ -1,10 +1,11 @@ 'use client'; import { FC } from 'react'; +import { Typography } from '@mui/material'; + import messageIds from 'features/surveys/l10n/messageIds'; import { Msg } from 'core/i18n'; import SurveyContainer from './SurveyContainer'; -import { Typography } from '@mui/material'; import { ZetkinSurveyExtended } from 'utils/types/zetkin'; export type SurveySuccessProps = { diff --git a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx index 2106812794..cf74da8c51 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextBlock.tsx @@ -1,7 +1,8 @@ import { FC } from 'react'; +import { Typography } from '@mui/material'; + import SurveyContainer from './SurveyContainer'; import SurveySubheading from './SurveySubheading'; -import { Typography } from '@mui/material'; import { ZetkinSurveyTextElement } from 'utils/types/zetkin'; export type SurveyTextBlockProps = { diff --git a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx index cac056af88..dc62e50f73 100644 --- a/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx +++ b/src/features/surveys/components/surveyForm/SurveyTextQuestion.tsx @@ -1,11 +1,12 @@ import { FC } from 'react'; +import { Box, FormControl, FormLabel, TextField } from '@mui/material'; + import messageIds from 'features/surveys/l10n/messageIds'; import SurveyContainer from './SurveyContainer'; import SurveyQuestionDescription from './SurveyQuestionDescription'; import SurveySubheading from './SurveySubheading'; import { useMessages } from 'core/i18n'; import { ZetkinSurveyTextQuestionElement } from 'utils/types/zetkin'; -import { Box, FormControl, FormLabel, TextField } from '@mui/material'; export type SurveyOptionsQuestionProps = { element: ZetkinSurveyTextQuestionElement; diff --git a/src/features/surveys/l10n/messageIds.ts b/src/features/surveys/l10n/messageIds.ts index 6f03219f5b..054c19c136 100644 --- a/src/features/surveys/l10n/messageIds.ts +++ b/src/features/surveys/l10n/messageIds.ts @@ -1,4 +1,5 @@ import { ReactElement } from 'react'; + import { m, makeMessages } from 'core/i18n'; export default makeMessages('feat.surveys', { diff --git a/src/features/surveys/utils/prepareSurveyApiSubmission.ts b/src/features/surveys/utils/prepareSurveyApiSubmission.ts index f67f14a7f8..fa6f57800c 100644 --- a/src/features/surveys/utils/prepareSurveyApiSubmission.ts +++ b/src/features/surveys/utils/prepareSurveyApiSubmission.ts @@ -1,4 +1,5 @@ import uniq from 'lodash/uniq'; + import { ZetkinSurveyApiSubmission, ZetkinSurveyQuestionResponse, diff --git a/src/utils/locale.spec.ts b/src/utils/locale.spec.ts index 3895bca210..8c3d3d4214 100644 --- a/src/utils/locale.spec.ts +++ b/src/utils/locale.spec.ts @@ -1,6 +1,7 @@ -import { getBrowserLanguage } from './locale'; import { NextApiRequest } from 'next'; +import { getBrowserLanguage } from './locale'; + describe('getBrowserLanguage', () => { it('returns the preferred language of the user if available', () => { const request: Partial = { From 9373c75853af9ff3be77ac39671f3483194ff8f1 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Sun, 30 Jun 2024 21:47:06 +0200 Subject: [PATCH 85/86] Suppress erroneous TypeScript error about nonexistent useFormState export --- src/features/surveys/components/surveyForm/SurveyForm.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index 7d98039cf1..386ee670a1 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -2,6 +2,7 @@ import { Box } from '@mui/material'; import { FC } from 'react'; +// @ts-expect-error Erroneous `Module '"react-dom"' has no exported member 'useFormState'` import { useFormState } from 'react-dom'; import { submit } from 'features/surveys/actions/submit'; From ac213e0c6003d563fe34c5f10c02a0b0f3fae5d7 Mon Sep 17 00:00:00 2001 From: Henry Catalini Smith Date: Mon, 1 Jul 2024 22:15:19 +0200 Subject: [PATCH 86/86] Move old @ts-ignore comment back alongside the import it was originally for --- .../surveys/components/surveyForm/SurveyForm.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/features/surveys/components/surveyForm/SurveyForm.tsx b/src/features/surveys/components/surveyForm/SurveyForm.tsx index 386ee670a1..08a08b030d 100644 --- a/src/features/surveys/components/surveyForm/SurveyForm.tsx +++ b/src/features/surveys/components/surveyForm/SurveyForm.tsx @@ -2,7 +2,12 @@ import { Box } from '@mui/material'; import { FC } from 'react'; -// @ts-expect-error Erroneous `Module '"react-dom"' has no exported member 'useFormState'` +// Type definitions for the new experimental stuff like useFormState in +// react-dom are lagging behind the implementation so it's necessary to silence +// the TypeScript error about the lack of type definitions here in order to +// import this. +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore import { useFormState } from 'react-dom'; import { submit } from 'features/surveys/actions/submit'; @@ -18,13 +23,6 @@ import { ZetkinUser, } from 'utils/types/zetkin'; -// Type definitions for the new experimental stuff like useFormState in -// react-dom are lagging behind the implementation so it's necessary to silence -// the TypeScript error about the lack of type definitions here in order to -// import this. -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore - export type SurveyFormProps = { survey: ZetkinSurveyExtended; user: ZetkinUser | null;