chore: remove Cypress (#55056)

This commit is contained in:
Sem Bauke
2024-06-14 19:09:40 +02:00
committed by GitHub
parent 1a51bb072a
commit eb84dce6ca
51 changed files with 67 additions and 1042 deletions
+16 -17
View File
@@ -7,29 +7,28 @@ ARG MONGODB_VERSION=6.0.4
ARG DEBIAN_FRONTEND=noninteractive ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y sudo && \ RUN apt-get update && apt-get install -y sudo && \
sudo apt-get install -y ca-certificates curl gnupg && \ sudo apt-get install -y ca-certificates curl gnupg && \
sudo mkdir -p /etc/apt/keyrings && \ sudo mkdir -p /etc/apt/keyrings && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list && \
sudo apt-get update && \ sudo apt-get update && \
sudo apt-get install nodejs -y && \ sudo apt-get install nodejs -y && \
sudo apt-get install -y libcurl4 openssl liblzma5 && \ sudo apt-get install -y libcurl4 openssl liblzma5 && \
mkdir -p /tmp/mongodb && \ mkdir -p /tmp/mongodb && \
cd /tmp/mongodb && \ cd /tmp/mongodb && \
wget -qOmongodb.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-${MONGODB_VERSION}.tgz && \ wget -qOmongodb.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-${MONGODB_VERSION}.tgz && \
tar -zxvf mongodb.tgz && \ tar -zxvf mongodb.tgz && \
cd mongodb-* && \ cd mongodb-* && \
sudo cp bin/* /usr/local/bin/ && \ sudo cp bin/* /usr/local/bin/ && \
rm -rf /tmp/mongodb && \ rm -rf /tmp/mongodb && \
sudo mkdir -p /data/db && \ sudo mkdir -p /data/db && \
sudo chown vscode:vscode -R /data/db sudo chown vscode:vscode -R /data/db
# Setup ENV # Setup ENV
ENV COOKIE_DOMAIN=github.dev ENV COOKIE_DOMAIN=github.dev
ENV HOME_LOCATION=https://$CODESPACE_NAME-8000.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN ENV HOME_LOCATION=https://$CODESPACE_NAME-8000.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
ENV API_LOCATION=https://$CODESPACE_NAME-3000.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN ENV API_LOCATION=https://$CODESPACE_NAME-3000.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
ENV CYPRESS_BASE_URL=https://$CODESPACE_NAME-8000.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
ENV REACT_APP_CHALLENGE_EDITOR_API_LOCATION=https://$CODESPACE_NAME-3200.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN ENV REACT_APP_CHALLENGE_EDITOR_API_LOCATION=https://$CODESPACE_NAME-3200.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
ENV CHALLENGE_EDITOR_CLIENT_LOCATION=https://$CODESPACE_NAME-3300.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN ENV CHALLENGE_EDITOR_CLIENT_LOCATION=https://$CODESPACE_NAME-3300.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
-8
View File
@@ -70,7 +70,6 @@
"./api/tsconfig.json", "./api/tsconfig.json",
"./shared/tsconfig.json", "./shared/tsconfig.json",
"./tools/client-plugins/browser-scripts/tsconfig.json", "./tools/client-plugins/browser-scripts/tsconfig.json",
"./cypress/tsconfig.json",
"./e2e/tsconfig.json" "./e2e/tsconfig.json"
] ]
}, },
@@ -94,13 +93,6 @@
], ],
"rules": { "import/named": 2 } "rules": { "import/named": 2 }
}, },
{
"files": ["cypress/**/*.js"],
"globals": {
"cy": true,
"Cypress": true
}
},
{ {
"files": ["e2e/*.ts"], "files": ["e2e/*.ts"],
"rules": { "rules": {
-1
View File
@@ -12,7 +12,6 @@
- api/**/* - api/**/*
'scope: tools/scripts': 'scope: tools/scripts':
- cypress/**/*
- tools/**/* - tools/**/*
- .github/**/* - .github/**/*
- utils/**/* - utils/**/*
-157
View File
@@ -1,157 +0,0 @@
name: CI - E2E - Web browser
on:
workflow_dispatch:
workflow_run:
workflows: ['CI - Node.js']
types:
- completed
# TODO: refactor with a workflow_call
pull_request:
paths-ignore:
- 'docs/**'
branches:
- 'main'
- 'next-**'
- 'e2e-**'
jobs:
build-client:
name: Build Client
runs-on: ubuntu-22.04
strategy:
matrix:
node-version: [20.x]
steps:
- name: Checkout Source Files
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Checkout client-config
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
repository: freeCodeCamp/client-config
path: client-config
- name: Setup pnpm
uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0
with:
version: 9
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ matrix.node-version }}
cache: pnpm
- name: Set freeCodeCamp Environment Variables
run: cp sample.env .env
- name: Install and Build
run: |
pnpm install
pnpm run build
- name: Move serve.json to Public Folder
run: cp client-config/serve.json client/public/serve.json
# We tar them for performance reasons - uploading a lot of files is slow.
- name: Tar Files
run: tar -cf client-artifact.tar client/public
- name: Upload Client Artifact
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: client-artifact
path: client-artifact.tar
- name: Upload Webpack Stats
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: webpack-stats
path: client/public/stats.json
cypress-run:
name: Test
runs-on: ubuntu-22.04
needs: build-client
strategy:
fail-fast: false
matrix:
browsers: [chrome, firefox]
node-version: [20.x]
services:
mongodb:
image: mongo:4.4
ports:
- 27017:27017
# We need mailhog to catch any emails the api tries to send.
mailhog:
image: mailhog/mailhog
ports:
- 1025:1025
steps:
- name: Set Action Environment Variables
run: |
echo "CYPRESS_RECORD_KEY=${{ secrets.CYPRESS_RECORD_KEY }}" >> $GITHUB_ENV
echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV
- name: Checkout Source Files
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
with:
name: client-artifact
- name: Unpack Client Artifact
run: |
tar -xf client-artifact.tar
rm client-artifact.tar
- name: Downgrade Firefox
run: |
curl https://ftp.mozilla.org/pub/firefox/releases/123.0/linux-x86_64/en-US/firefox-123.0.tar.bz2 --output firefox-123.0.tar.bz2
tar -xjf firefox-123.0.tar.bz2
sudo mv firefox /opt/
sudo mv /usr/bin/firefox /usr/bin/firefox_old
sudo ln -s /opt/firefox/firefox /usr/bin/firefox
- name: Setup pnpm
uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0
with:
version: 9
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ matrix.node-version }}
# cypress-io/github-action caches the store, so we should not cache it
# here.
- name: Set freeCodeCamp Environment Variables
run: cp sample.env .env
- name: Install and Build
run: |
pnpm install
pnpm run create:shared
pnpm run build:curriculum
pnpm run build:server
- name: Seed Database
run: pnpm run seed
# start-ci uses pm2, so it needs to be installed globally
- name: Install pm2
run: npm i -g pm2
- name: Cypress run
uses: cypress-io/github-action@v6
with:
record: ${{ env.CYPRESS_RECORD_KEY != 0 }}
start: pnpm run start-ci
wait-on: http://localhost:8000
wait-on-timeout: 1200
config: baseUrl=http://localhost:8000
browser: ${{ matrix.browsers }}
spec: ${{ matrix.spec }}
-4
View File
@@ -111,10 +111,6 @@ coverage
# nyc test coverage # nyc test coverage
.nyc_output .nyc_output
# Cypress.io
cypress/videos
cypress/screenshots
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt .grunt
+2 -3
View File
@@ -26,7 +26,6 @@ tasks:
export COOKIE_DOMAIN=gitpod.io export COOKIE_DOMAIN=gitpod.io
export HOME_LOCATION=$(gp url 8000) export HOME_LOCATION=$(gp url 8000)
export API_LOCATION=$(gp url 3000) export API_LOCATION=$(gp url 3000)
export CYPRESS_BASE_URL=$(gp url 8000)
export CHALLENGE_EDITOR_API_LOCATION=$(gp url 3200) export CHALLENGE_EDITOR_API_LOCATION=$(gp url 3200)
export CHALLENGE_EDITOR_CLIENT_LOCATION=$(gp url 3300) export CHALLENGE_EDITOR_CLIENT_LOCATION=$(gp url 3300)
' >> ~/.bashrc; ' >> ~/.bashrc;
@@ -39,7 +38,7 @@ tasks:
(mongod --dbpath /workspace/data &) (mongod --dbpath /workspace/data &)
- name: server - name: server
before: export COOKIE_DOMAIN=gitpod.io && export HOME_LOCATION=$(gp url 8000) && export API_LOCATION=$(gp url 3000) && export CYPRESS_BASE_URL=$(gp url 8000) before: export COOKIE_DOMAIN=gitpod.io && export HOME_LOCATION=$(gp url 8000) && export API_LOCATION=$(gp url 3000)
# init is not executed for prebuilt workspaces and restarts, # init is not executed for prebuilt workspaces and restarts,
# so we should put all the heavy initialization here # so we should put all the heavy initialization here
init: > init: >
@@ -55,7 +54,7 @@ tasks:
pnpm run develop:server pnpm run develop:server
- name: client - name: client
before: export HOME_LOCATION=$(gp url 8000) && export API_LOCATION=$(gp url 3000) && export CYPRESS_BASE_URL=$(gp url 8000) before: export HOME_LOCATION=$(gp url 8000) && export API_LOCATION=$(gp url 3000)
init: > init: >
cd ./client && cd ./client &&
gp sync-await pnpm-install && gp sync-await pnpm-install &&
-1
View File
@@ -5,7 +5,6 @@ function FreeCodeCampLogo(
): JSX.Element { ): JSX.Element {
return ( return (
<svg <svg
data-cy='freeCodeCamp-logo'
height={24} height={24}
version='1.1' version='1.1'
viewBox='0 0 210 24' viewBox='0 0 210 24'
@@ -5,7 +5,6 @@ function MicrosoftLogo(
): JSX.Element { ): JSX.Element {
return ( return (
<svg <svg
data-cy='microsoft-logo'
version='1.1' version='1.1'
viewBox='0 0 610 130' viewBox='0 0 610 130'
xmlns='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg'
@@ -392,10 +392,7 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
}} }}
</strong> </strong>
</h1> </h1>
<h4 <h4 data-playwright-test-label='issue-date'>
data-cy={'issue-date'}
data-playwright-test-label='issue-date'
>
{{ {{
time: certDate.toLocaleString([localeCode, 'en-US'], { time: certDate.toLocaleString([localeCode, 'en-US'], {
year: 'numeric', year: 'numeric',
@@ -414,7 +411,6 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
<> <>
<div> <div>
<Image <Image
data-cy='quincy-signature'
data-playwright-test-label='quincy-signature' data-playwright-test-label='quincy-signature'
alt="Quincy Larson's Signature" alt="Quincy Larson's Signature"
src={ src={
@@ -431,7 +427,6 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
</div> </div>
<div className='microsoft-signature'> <div className='microsoft-signature'>
<Image <Image
data-cy='microsoft-signature'
data-playwright-test-label='microsoft-signature' data-playwright-test-label='microsoft-signature'
alt="Julia Liusons's Signature" alt="Julia Liusons's Signature"
src={ src={
@@ -451,7 +446,6 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
) : ( ) : (
<div> <div>
<Image <Image
data-cy='quincy-signature'
data-playwright-test-label='quincy-signature' data-playwright-test-label='quincy-signature'
alt="Quincy Larson's Signature" alt="Quincy Larson's Signature"
src={ src={
@@ -184,7 +184,7 @@ const ShowProjectLinks = (props: ShowProjectLinksProps): JSX.Element => {
if (!isCertName(certName)) return <div> Unknown Certification</div>; if (!isCertName(certName)) return <div> Unknown Certification</div>;
return ( return (
<div data-cy='solution-widget' data-playwright-test-label='project-links'> <div data-playwright-test-label='project-links'>
{t(getCertHeading(certName), { user: name })} {t(getCertHeading(certName), { user: name })}
<Spacer size='medium' /> <Spacer size='medium' />
<Table striped> <Table striped>
@@ -43,15 +43,11 @@ export const ThankYouMessage = ({
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<> <>
<h1 data-playwright-test-label='main-head' data-cy='donate.thank-you'> <h1 data-playwright-test-label='main-head'>{t('donate.thank-you')}</h1>
{t('donate.thank-you')}
</h1>
{(askForDonation || thankContributon) && ( {(askForDonation || thankContributon) && (
<> <>
<Spacer size='medium' /> <Spacer size='medium' />
<p data-cy='donate.crucial-contribution'> <p>{t('donate.crucial-contribution')}</p>
{t('donate.crucial-contribution')}
</p>
</> </>
)} )}
{askForDonation && <OtherWaysToSupport />} {askForDonation && <OtherWaysToSupport />}
@@ -63,13 +59,11 @@ export const OtherWaysToSupport = (): JSX.Element => {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<> <>
<p data-cy='donate.if-support-further'> <p>
<Trans i18nKey='donate.if-support-further'> <Trans i18nKey='donate.if-support-further'>
<a href={t('links:donate.one-time-external-url')}>placeholder</a> <a href={t('links:donate.one-time-external-url')}>placeholder</a>
<a href={t('links:donate.mail-check-url')}>placeholder</a> <a href={t('links:donate.mail-check-url')}>placeholder</a>
<a data-cy='donate-link' href={t('links:donate.other-ways-url')}> <a href={t('links:donate.other-ways-url')}>placeholder</a>
placeholder
</a>
</Trans> </Trans>
</p> </p>
</> </>
@@ -97,7 +97,6 @@ function SelectionTabs({
<button <button
className='text-center confirm-donation-btn donate-btn-group' className='text-center confirm-donation-btn donate-btn-group'
type='submit' type='submit'
data-cy='donation-tier-selection-button'
onClick={() => setShowDonateForm(true)} onClick={() => setShowDonateForm(true)}
> >
{isAnimationEnabled {isAnimationEnabled
@@ -157,7 +157,6 @@ export default function StripeCardForm({
<button <button
className='confirm-donation-btn' className='confirm-donation-btn'
disabled={!stripe || !elements || isSubmitting} disabled={!stripe || !elements || isSubmitting}
data-cy='donation-confirmation-button'
type='submit' type='submit'
> >
{t('buttons.donate')} {t('buttons.donate')}
@@ -30,12 +30,7 @@ const ProjectModal = ({
<SolutionViewer challengeFiles={challengeFiles} solution={solution} /> <SolutionViewer challengeFiles={challengeFiles} solution={solution} />
</Modal.Body> </Modal.Body>
<Modal.Footer alignment='end'> <Modal.Footer alignment='end'>
<Button <Button onClick={handleSolutionModalHide}>{t('buttons.close')}</Button>
data-cy='solution-viewer-close-btn'
onClick={handleSolutionModalHide}
>
{t('buttons.close')}
</Button>
</Modal.Footer> </Modal.Footer>
</Modal> </Modal>
); );
@@ -32,11 +32,10 @@ const SearchBarOptimized = ({
return ( return (
<div className='fcc_searchBar' data-testid='fcc_searchBar' ref={innerRef}> <div className='fcc_searchBar' data-testid='fcc_searchBar' ref={innerRef}>
<div className='fcc_search_wrapper'> <div className='fcc_search_wrapper'>
<div className='ais-SearchBox' data-cy='ais-SearchBox'> <div className='ais-SearchBox'>
<form <form
action='' action=''
className='ais-SearchBox-form' className='ais-SearchBox-form'
data-cy='ais-SearchBox-form'
onSubmit={onSubmit} onSubmit={onSubmit}
role='search' role='search'
> >
@@ -63,11 +63,7 @@ const CustomHits = connectHits(
return ( return (
<div className='ais-Hits'> <div className='ais-Hits'>
<ul <ul className='ais-Hits-list' aria-label={t('search.result-list')}>
className='ais-Hits-list'
data-cy='ais-Hits-list'
aria-label={t('search.result-list')}
>
{allHits.map((hit: Hit, i: number) => ( {allHits.map((hit: Hit, i: number) => (
<li <li
className={ className={
-3
View File
@@ -188,7 +188,6 @@ function EmailSettings({
<FullWidthRow> <FullWidthRow>
<form <form
id='form-update-email' id='form-update-email'
data-cy='form-update-email'
{...(!isDisabled {...(!isDisabled
? { onSubmit: handleSubmit } ? { onSubmit: handleSubmit }
: { onSubmit: e => e.preventDefault() })} : { onSubmit: e => e.preventDefault() })}
@@ -206,7 +205,6 @@ function EmailSettings({
{t('settings.email.new')} {t('settings.email.new')}
</ControlLabel> </ControlLabel>
<FormControl <FormControl
data-cy='email-input'
onChange={createHandleEmailFormChange('newEmail')} onChange={createHandleEmailFormChange('newEmail')}
type='email' type='email'
value={newEmail} value={newEmail}
@@ -226,7 +224,6 @@ function EmailSettings({
{t('settings.email.confirm')} {t('settings.email.confirm')}
</ControlLabel> </ControlLabel>
<FormControl <FormControl
data-cy='confirm-email'
onChange={createHandleEmailFormChange('confirmNewEmail')} onChange={createHandleEmailFormChange('confirmNewEmail')}
type='email' type='email'
value={confirmNewEmail} value={confirmNewEmail}
@@ -385,7 +385,6 @@ class PortfolioSettings extends Component<PortfolioProps, PortfolioState> {
<p>{t('settings.share-projects')}</p> <p>{t('settings.share-projects')}</p>
<Spacer size='small' /> <Spacer size='small' />
<Button <Button
data-cy='add-portfolio'
block={true} block={true}
size='large' size='large'
variant='primary' variant='primary'
@@ -147,7 +147,6 @@ function PrivacySettings({ submitProfileUI, user }: PrivacyProps): JSX.Element {
type='submit' type='submit'
size='large' size='large'
variant='primary' variant='primary'
data-cy='save-privacy-settings'
block={true} block={true}
disabled={!madeChanges} disabled={!madeChanges}
{...(!madeChanges && { tabIndex: -1 })} {...(!madeChanges && { tabIndex: -1 })}
+1 -5
View File
@@ -198,11 +198,7 @@ class UsernameSettings extends Component<UsernameProps, UsernameState> {
const isDisabled = const isDisabled =
!(isValidUsername && valid && !isFormPristine) || submitClicked; !(isValidUsername && valid && !isFormPristine) || submitClicked;
return ( return (
<form <form id='usernameSettings' onSubmit={this.handleSubmit}>
id='usernameSettings'
onSubmit={this.handleSubmit}
data-cy='username-form'
>
<FullWidthRow> <FullWidthRow>
<FormGroup> <FormGroup>
<ControlLabel htmlFor='username-settings'> <ControlLabel htmlFor='username-settings'>
+1 -1
View File
@@ -153,7 +153,7 @@ function AcceptPrivacyTerms({
<hr /> <hr />
</Col> </Col>
</Row> </Row>
<Row className='email-sign-up' data-cy='email-sign-up'> <Row className='email-sign-up'>
<Col md={8} mdOffset={2} sm={10} smOffset={1} xs={12}> <Col md={8} mdOffset={2} sm={10} smOffset={1} xs={12}>
<Spacer size='small' /> <Spacer size='small' />
<p>{t('misc.email-blast')}</p> <p>{t('misc.email-blast')}</p>
@@ -50,7 +50,6 @@ class EditorTabs extends Component<EditorTabsProps> {
visibleEditors[challengeFile.fileKey] ?? 'false' visibleEditors[challengeFile.fileKey] ?? 'false'
} }
key={challengeFile.fileKey} key={challengeFile.fileKey}
data-cy={`editor-tab-${challengeFile.fileKey}`}
onClick={() => toggleVisibleEditor(challengeFile.fileKey)} onClick={() => toggleVisibleEditor(challengeFile.fileKey)}
> >
{`${challengeFile.name}.${challengeFile.ext}`}{' '} {`${challengeFile.name}.${challengeFile.ext}`}{' '}
@@ -100,7 +100,6 @@ const LowerButtonsPanel = ({
<Button <Button
data-playwright-test-label='lowerJaw-reset-button' data-playwright-test-label='lowerJaw-reset-button'
className='fade-in' className='fade-in'
data-cy='reset-code-button'
onClick={resetButtonEvent} onClick={resetButtonEvent}
> >
<Reset /> <Reset />
@@ -112,7 +111,6 @@ const LowerButtonsPanel = ({
<Button <Button
className='fade-in' className='fade-in'
id='get-help-button' id='get-help-button'
data-cy='get-help-button'
onClick={helpButtonEvent} onClick={helpButtonEvent}
> >
<Help /> <Help />
@@ -133,7 +131,6 @@ const LowerJawTips = ({
<> <>
<div <div
data-playwright-test-label='lowerJaw-failing-test-feedback' data-playwright-test-label='lowerJaw-failing-test-feedback'
data-cy='failing-test-feedback'
className='test-status fade-in' className='test-status fade-in'
aria-hidden={showFeedback} aria-hidden={showFeedback}
> >
@@ -302,7 +299,6 @@ const LowerJaw = ({
{showSignInButton && ( {showSignInButton && (
<> <>
<a <a
data-cy='sign-in-button'
href={`${apiLocation}/signin`} href={`${apiLocation}/signin`}
className='btn-cta btn btn-block' className='btn-cta btn btn-block'
onClick={() => { onClick={() => {
@@ -126,7 +126,6 @@ const MultifileEditor = (props: MultifileEditorProps) => {
} else { } else {
return ( return (
<ReflexElement <ReflexElement
data-cy={`editor-container-${key}`}
data-playwright-test-label={`editor-container-${key}`} data-playwright-test-label={`editor-container-${key}`}
{...reflexProps} {...reflexProps}
{...resizeProps} {...resizeProps}
@@ -216,7 +216,6 @@ class CompletionModal extends Component<
size='large' size='large'
variant='primary' variant='primary'
disabled={isSubmitting} disabled={isSubmitting}
data-cy='submit-challenge'
onClick={() => submitChallenge()} onClick={() => submitChallenge()}
> >
{buttonText} {buttonText}
@@ -20,7 +20,6 @@ function Output({ defaultOutput, output }: OutputProps): JSX.Element {
return ( return (
<pre <pre
className='output-text' className='output-text'
data-cy='output-text'
data-playwright-test-label='output-text' data-playwright-test-label='output-text'
dangerouslySetInnerHTML={{ __html: message }} dangerouslySetInnerHTML={{ __html: message }}
role='region' role='region'
@@ -55,7 +55,6 @@ function ResetModal({ reset, close, isOpen }: ResetModalProps): JSX.Element {
</Modal.Body> </Modal.Body>
<Modal.Footer> <Modal.Footer>
<Button <Button
data-cy='reset-modal-confirm'
block={true} block={true}
size='large' size='large'
variant='danger' variant='danger'
@@ -82,12 +82,7 @@ function ToolPanel({
challengeType === challengeTypes.multifilePythonCertProject) && ( challengeType === challengeTypes.multifilePythonCertProject) && (
<> <>
<Spacer size='xxSmall' /> <Spacer size='xxSmall' />
<Button <Button block={true} variant='primary' onClick={saveChallenge}>
block={true}
variant='primary'
data-cy='save-code-to-database-btn'
onClick={saveChallenge}
>
{isMobile ? t('buttons.save') : t('buttons.save-code')} {isMobile ? t('buttons.save') : t('buttons.save-code')}
</Button> </Button>
</> </>
@@ -109,7 +109,6 @@ ${t('learn.exam.time', { t: formatSecondsToTime(examTimeInSeconds) })}
<Button <Button
block={true} block={true}
variant='primary' variant='primary'
data-cy='exit-exam'
data-playwright-test-label='exit-exam' data-playwright-test-label='exit-exam'
onClick={exitExam} onClick={exitExam}
> >
@@ -55,21 +55,11 @@ function ExitExamModal({
<div className='text-center'>{t('learn.exam.exit')}</div> <div className='text-center'>{t('learn.exam.exit')}</div>
</Modal.Body> </Modal.Body>
<Modal.Footer> <Modal.Footer>
<Button <Button block={true} variant='primary' onClick={closeExitExamModal}>
data-cy='exit-exam-modal-deny'
block={true}
variant='primary'
onClick={closeExitExamModal}
>
{t('learn.exam.exit-no')} {t('learn.exam.exit-no')}
</Button> </Button>
<Spacer size='xxSmall' /> <Spacer size='xxSmall' />
<Button <Button block={true} variant='danger' onClick={exitExam}>
data-cy='exit-exam-modal-confirm'
block={true}
variant='danger'
onClick={exitExam}
>
{t('learn.exam.exit-yes')} {t('learn.exam.exit-yes')}
</Button> </Button>
</Modal.Footer> </Modal.Footer>
@@ -52,7 +52,6 @@ function FinishExamModal({
</Modal.Body> </Modal.Body>
<Modal.Footer> <Modal.Footer>
<Button <Button
data-cy='finish-exam-modal-confirm'
block={true} block={true}
size='medium' size='medium'
variant='primary' variant='primary'
@@ -62,7 +61,6 @@ function FinishExamModal({
</Button> </Button>
<Spacer size='xxSmall' /> <Spacer size='xxSmall' />
<Button <Button
data-cy='finish-exam-modal-deny'
block={true} block={true}
size='medium' size='medium'
variant='primary' variant='primary'
@@ -33,7 +33,6 @@ function FoundationalCSharpSurveyAlert({
<Button <Button
block={true} block={true}
variant='info' variant='info'
data-cy='start-csharp-survey-btn'
onClick={openSurveyModal} onClick={openSurveyModal}
type='button' type='button'
> >
@@ -168,7 +168,6 @@ function FoundationalCSharpSurvey({
block={true} block={true}
size='medium' size='medium'
variant='primary' variant='primary'
data-cy='submit-csharp-survey-btn'
disabled={cantSubmitSurvey || isProcessing} disabled={cantSubmitSurvey || isProcessing}
onClick={createSurveyResults} onClick={createSurveyResults}
> >
+2 -10
View File
@@ -411,10 +411,7 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
{title} {title}
</div> </div>
<span>|</span> <span>|</span>
<div <div data-playwright-test-label='exam-show-question-time'>
data-cy='exam-time'
data-playwright-test-label='exam-show-question-time'
>
{t('learn.exam.time', { {t('learn.exam.time', {
t: formatSecondsToTime(examTimeInSeconds) t: formatSecondsToTime(examTimeInSeconds)
})} })}
@@ -479,7 +476,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
className='exam-button' className='exam-button'
disabled={currentQuestionIndex <= 0} disabled={currentQuestionIndex <= 0}
variant='primary' variant='primary'
data-cy='previous-exam-question-btn'
onClick={this.goToPreviousQuestion} onClick={this.goToPreviousQuestion}
> >
{t('buttons.previous-question')} {t('buttons.previous-question')}
@@ -494,7 +490,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
} }
className='exam-button' className='exam-button'
variant='primary' variant='primary'
data-cy='finish-exam-btn'
onClick={openFinishExamModal} onClick={openFinishExamModal}
> >
{t('buttons.finish-exam')} {t('buttons.finish-exam')}
@@ -507,7 +502,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
} }
className='exam-button' className='exam-button'
variant='primary' variant='primary'
data-cy='next-exam-question-btn'
onClick={this.goToNextQuestion} onClick={this.goToNextQuestion}
> >
{t('buttons.next-question')} {t('buttons.next-question')}
@@ -522,7 +516,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
block={true} block={true}
className='exam-button' className='exam-button'
variant='primary' variant='primary'
data-cy='exit-exam-btn'
onClick={openExitExamModal} onClick={openExitExamModal}
> >
{t('buttons.exit-exam')} {t('buttons.exit-exam')}
@@ -555,7 +548,7 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
<Spacer size='medium' /> <Spacer size='medium' />
{qualifiedForExam ? ( {qualifiedForExam ? (
<Alert data-cy='qualified-for-exam-alert' variant='info'> <Alert variant='info'>
<p>{t('learn.exam.qualified')}</p> <p>{t('learn.exam.qualified')}</p>
</Alert> </Alert>
) : ( ) : (
@@ -576,7 +569,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
<Button <Button
block={true} block={true}
variant='primary' variant='primary'
data-cy='start-exam-btn'
disabled={!qualifiedForExam} disabled={!qualifiedForExam}
// `this.runExam` being an async callback is acceptable // `this.runExam` being an async callback is acceptable
//eslint-disable-next-line @typescript-eslint/no-misused-promises //eslint-disable-next-line @typescript-eslint/no-misused-promises
@@ -251,7 +251,6 @@ class Block extends Component<BlockProps> {
<button <button
aria-expanded={isExpanded ? 'true' : 'false'} aria-expanded={isExpanded ? 'true' : 'false'}
className='block-header' className='block-header'
data-cy={challengesWithCompleted[0].block}
onClick={() => { onClick={() => {
this.handleBlockClick(); this.handleBlockClick();
}} }}
-15
View File
@@ -1,15 +0,0 @@
const { spawn } = require('child_process');
const child = spawn('pnpm', ['run', 'cypress:install'], {
stdio: 'inherit'
});
child.on('close', code => {
if (code) {
console.error('Cypress installation failed with code:', code);
}
});
child.on('error', error => {
console.error('Cypress installation error:', error);
});
-53
View File
@@ -1,53 +0,0 @@
InstallCypress() {
sudo apt-get update && sudo apt-get install -y \
libgtk2.0-0 \
libgtk-3-0 \
libgbm-dev \
libnotify-dev \
libgconf-2-4 \
libnss3 \
libxss1 \
libasound2 \
libxtst6 \
xauth \
xvfb
}
InstallPuppeteer() {
sudo apt-get install -y \
ca-certificates \
fonts-liberation \
libappindicator3-1 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgbm1 \
libgcc1 \
libglib2.0-0 \
libnspr4 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
lsb-release \
wget \
xdg-utils
}
InstallCypress
InstallPuppeteer
-60
View File
@@ -1,60 +0,0 @@
const { execSync } = require('child_process');
const { existsSync } = require('fs');
const { defineConfig } = require('cypress');
function seed(args = []) {
return execSync('node tools/scripts/seed/seed-demo-user ' + args.join(' '));
}
function seedExams() {
return execSync('node tools/scripts/seed-exams/create-exams.js');
}
function seedSurveys() {
return execSync('node tools/scripts/seed/seed-surveys.js');
}
function deleteSurveys() {
return execSync('node tools/scripts/seed/seed-surveys.js delete-only');
}
module.exports = defineConfig({
e2e: {
baseUrl: 'http://localhost:8000',
projectId: 'ke77ns',
retries: { openMode: 1, runMode: 4 },
chromeWebSecurity: false,
// This is the default spec pattern, that we use on /learn proper
//
// For special ones like the third- party or the mobile app specs,
// you can use the below command:
//
// pnpm run cypress:dev:run -- --spec "cypress/e2e/mobile-learn/**/*"
// pnpm run cypress:dev:run -- --spec "cypress/e2e/third-party/**/*"
//
// and so on.
//
specPattern: ['cypress/e2e/default/**/*.js', 'cypress/e2e/default/**/*.ts'],
// Temporary disable these until we can address the flakiness
excludeSpecPattern: ['cypress/e2e/**/challenge-hot-keys.ts'],
setupNodeEvents(on, config) {
config.env = config.env || {};
on('before:run', () => {
if (!existsSync('./shared/config/curriculum.json')) {
execSync('pnpm run build:curriculum');
}
});
on('task', {
seed,
seedExams,
seedSurveys,
deleteSurveys
});
config.env.API_LOCATION = 'http://localhost:3000';
return config;
}
}
});
@@ -1,100 +0,0 @@
const search = (query: string) => {
cy.get('.ais-SearchBox').within(() => {
cy.get('input').type(query);
});
cy.wait(300);
};
const clear = () => {
cy.get('.ais-SearchBox').within(() => {
cy.get('input').clear();
});
};
describe('Search bar optimized', () => {
beforeEach(() => {
cy.visit('/');
});
it('Should render without hits', () => {
cy.get('[data-cy=ais-SearchBox]').should('be.visible');
search('freeCodeCamp');
cy.get('[data-cy=ais-Hits-list]').should('not.exist');
});
it('Should open a new tab ', () => {
cy.visit('/', {
onBeforeLoad(win) {
cy.stub(win, 'open').as('open');
}
});
search('freeCodeCamp');
cy.get('[data-cy=ais-SearchBox-form]').submit();
const queryUrl =
'https://www.freecodecamp.org/news/search/?query=freeCodeCamp';
cy.get('@open').should('have.been.calledOnceWith', queryUrl);
});
});
describe('Search bar', () => {
beforeEach(() => {
cy.visit('/learn');
});
it('Should render with hits', () => {
cy.get('.ais-SearchBox').should('be.visible');
search('freeCodeCamp');
cy.get('[data-cy=ais-Hits-list]')
.children()
.should('to.have.length.of.at.least', 1);
});
it('Should clear hits when input is cleared', () => {
search('freeCodeCamp');
cy.get('[data-cy=ais-Hits-list]')
.children()
.should('to.have.length.of.at.least', 1);
clear();
cy.get('div.ais-Hits').should('not.exist');
});
it('Should show up to 8 hits when height >= 768px', () => {
cy.viewport(1300, 768);
search('freeCodeCamp');
cy.get('[data-cy=ais-Hits-list]').children().should('to.have.length.of', 8);
});
it('Should show up to 5 hits when height < 768px', () => {
cy.viewport(1300, 767);
search('freeCodeCamp');
cy.get('[data-cy=ais-Hits-list]').children().should('to.have.length.of', 5);
});
it('Should show no hits for queries that do not exist in the Algolia index', () => {
search('testtttt');
cy.get('[data-cy=ais-Hits-list]').children().should('to.have.length.of', 0);
cy.contains('No tutorials found');
});
it('Should not redirect to the News search page if there are no hits', () => {
search('testtttt');
cy.get('.ais-SearchBox-form').submit();
cy.location().should(loc => {
expect(loc.pathname).to.match(/^\/learn/);
});
});
});
-5
View File
@@ -1,5 +0,0 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}
-32
View File
@@ -1,32 +0,0 @@
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
/* eslint-disable no-unused-vars */
const { execSync } = require('child_process');
const { existsSync } = require('fs');
require('dotenv').config();
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
config.env = config.env || {};
// TODO: once we've containerized the API, we can remove this.
on('before:run', () => {
if (!existsSync('../../shared/config/curriculum.json')) {
execSync('pnpm run build:curriculum');
}
});
config.env.API_LOCATION = process.env.API_LOCATION;
return config;
};
-78
View File
@@ -1,78 +0,0 @@
const login = (user?: string) => {
cy.session(
user ?? 'new-user',
() => {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
cy.visit(`${Cypress.env('API_LOCATION')}/signin`);
cy.url().should('include', '/learn');
cy.contains('Welcome back');
},
{
validate() {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
cy.request(`${Cypress.env('API_LOCATION')}/user/get-session-user`)
.its('status')
.should('eq', 200);
}
}
);
};
const setPrivacyTogglesToPublic = () => {
cy.get('#privacy-settings')
.find('[type=radio][value=2]')
.each(element => {
cy.wrap(element).parent().click();
cy.wrap(element).should('be.checked');
});
cy.get('[data-cy=save-privacy-settings]').click();
cy.get('#honesty-policy').find('button').click();
cy.contains('You have agreed to our Academic Honesty Policy');
};
const goToSettings = () => {
cy.visit('/settings');
// Setting aliases here
cy.get('[data-cy=username-input]').as('usernameInput');
cy.get('[data-cy=username-form]').as('usernameForm');
};
const typeUsername = (username: string) => {
cy.get('@usernameInput')
.clear({ force: true })
.type(username, { force: true });
};
const resetUsername = () => {
cy.goToSettings();
cy.typeUsername('developmentuser');
cy.contains('Username is available');
cy.get('@usernameInput').type('{enter}', { force: true, release: false });
cy.contains('Account Settings for developmentuser').should('be.visible');
};
Cypress.Commands.add('login', login);
Cypress.Commands.add('setPrivacyTogglesToPublic', setPrivacyTogglesToPublic);
Cypress.Commands.add('goToSettings', goToSettings);
Cypress.Commands.add('typeUsername', typeUsername);
Cypress.Commands.add('resetUsername', resetUsername);
// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace Cypress {
interface Chainable {
login: typeof login;
setPrivacyTogglesToPublic: typeof setPrivacyTogglesToPublic;
goToSettings: typeof goToSettings;
typeUsername(username: string): Chainable<JQuery<HTMLElement>>;
resetUsername: typeof resetUsername;
}
}
-40
View File
@@ -1,40 +0,0 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
import 'cypress-plugin-stripe-elements';
import 'cypress-plugin-tab';
// Import commands.js using ES2015 syntax:
import './commands';
// Alternatively you can use CommonJS syntax:
// require('./commands')
Cypress.on('uncaught:exception', err => {
console.log('Cypress detected uncaught exception', err.name);
// Rapidly cy.visiting pages seems to cause uncaught exceptions. It remains
// unclear why this is happening, but we need to ignore them in testing so
// that we can test other behavior.
if (
err.name === 'NS_ERROR_UNEXPECTED' ||
err.name === 'ChunkLoadError' ||
// paypal sdk error
(err.name === 'TypeError' &&
err.message.includes('removeEventListener is not a function'))
) {
return false;
}
// We are still interested in other errors.
return true;
});
-10
View File
@@ -1,10 +0,0 @@
export const selectors = {
class: {
reactMonacoEditor: '.react-monaco-editor-container'
},
id: {},
dataCy: { outputText: '[data-cy="output-text"]' },
tag: {
inputSolution: 'input[name="solution"]'
}
};
-9
View File
@@ -1,9 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["es5", "dom", "ES2017"],
"types": ["cypress", "@testing-library/cypress"]
},
"include": ["e2e/**/*.ts", "support/**/*.ts"],
"extends": "../tsconfig-base.json"
}
+1 -10
View File
@@ -7,16 +7,7 @@
"workspaces": { "workspaces": {
".": { ".": {
// No custom entry/project files in root workspace to not interfere with workspaces that are not set up yet // No custom entry/project files in root workspace to not interfere with workspaces that are not set up yet
"entry": [], "entry": []
"cypress": {
// Override all Cypress entry patterns as (only) spec paths don't match the default
"entry": [
"cypress.config.js",
"cypress/e2e/**/*.{js,ts}",
"cypress/support/*.ts",
"cypress/plugins/index.js"
]
}
}, },
"client": { "client": {
"webpack": "webpack-workers.js", "webpack": "webpack-workers.js",
+1 -17
View File
@@ -38,21 +38,10 @@
"clean:packages": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +", "clean:packages": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +",
"clean:server": "rm -rf ./api-server/lib", "clean:server": "rm -rf ./api-server/lib",
"create:shared": "tsc -p shared", "create:shared": "tsc -p shared",
"precypress": "node ./cypress-install.js",
"cypress": "cypress",
"cypress:dev:run": "pnpm run cypress run",
"cypress:dev:watch": "pnpm run cypress open",
"cypress:install": "cypress install && echo 'for use with ./cypress-install.js'",
"cypress:install-build-tools": "sh ./cypress-install.sh",
"predevelop": "npm-run-all -p create:shared -s build:curriculum", "predevelop": "npm-run-all -p create:shared -s build:curriculum",
"develop": "npm-run-all -p develop:*", "develop": "npm-run-all -p develop:*",
"develop:client": "cd ./client && pnpm run develop", "develop:client": "cd ./client && pnpm run develop",
"develop:server": "cd ./api-server && pnpm run develop", "develop:server": "cd ./api-server && pnpm run develop",
"e2e": "pnpm run e2e:dev:run",
"e2e:dev:run": "start-test develop 'http://localhost:3000/status/ping|http://localhost:8000' cypress:dev:run",
"e2e:dev:watch": "start-test develop 'http://localhost:3000/status/ping|http://localhost:8000' cypress:dev:watch",
"e2e:prd:run": "pnpm run build && start-test 'http://localhost:3000/status/ping|http://localhost:8000' cypress:dev:run",
"e2e:prd:watch": "pnpm run build && start-test 'http://localhost:3000/status/ping|http://localhost:8000' cypress:dev:watch",
"format": "run-s format:eslint format:prettier", "format": "run-s format:eslint format:prettier",
"format:eslint": "eslint . --fix", "format:eslint": "eslint . --fix",
"format:prettier": "prettier --write .", "format:prettier": "prettier --write .",
@@ -90,7 +79,6 @@
"test-server": "jest api-server", "test-server": "jest api-server",
"test-tools": "jest tools", "test-tools": "jest tools",
"test-utils": "jest utils", "test-utils": "jest utils",
"postinstall": "cypress cache prune",
"prepare": "husky", "prepare": "husky",
"playwright:run": "playwright test", "playwright:run": "playwright test",
"playwright:watch": "playwright test --ui" "playwright:watch": "playwright test --ui"
@@ -104,8 +92,7 @@
"@babel/preset-env": "7.23.7", "@babel/preset-env": "7.23.7",
"@babel/preset-react": "7.23.3", "@babel/preset-react": "7.23.3",
"@babel/preset-typescript": "7.23.3", "@babel/preset-typescript": "7.23.3",
"@playwright/test": "1.44.0", "@playwright/test": "^1.43.1",
"@testing-library/cypress": "10.0.1",
"@testing-library/dom": "9.3.4", "@testing-library/dom": "9.3.4",
"@testing-library/jest-dom": "6.4.2", "@testing-library/jest-dom": "6.4.2",
"@testing-library/user-event": "14.5.2", "@testing-library/user-event": "14.5.2",
@@ -118,9 +105,6 @@
"babel-jest": "29.7.0", "babel-jest": "29.7.0",
"babel-plugin-transform-imports": "2.0.0", "babel-plugin-transform-imports": "2.0.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"cypress": "12.17.4",
"cypress-plugin-stripe-elements": "1.0.2",
"cypress-plugin-tab": "1.0.5",
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-config-prettier": "9.1.0", "eslint-config-prettier": "9.1.0",
"eslint-import-resolver-typescript": "^3.5.5", "eslint-import-resolver-typescript": "^3.5.5",
+27 -333
View File
@@ -28,11 +28,8 @@ importers:
specifier: 7.23.3 specifier: 7.23.3
version: 7.23.3(@babel/core@7.23.7) version: 7.23.3(@babel/core@7.23.7)
'@playwright/test': '@playwright/test':
specifier: 1.44.0 specifier: ^1.43.1
version: 1.44.0 version: 1.44.0
'@testing-library/cypress':
specifier: 10.0.1
version: 10.0.1(cypress@12.17.4)
'@testing-library/dom': '@testing-library/dom':
specifier: 9.3.4 specifier: 9.3.4
version: 9.3.4 version: 9.3.4
@@ -69,15 +66,6 @@ importers:
cross-env: cross-env:
specifier: 7.0.3 specifier: 7.0.3
version: 7.0.3 version: 7.0.3
cypress:
specifier: 12.17.4
version: 12.17.4
cypress-plugin-stripe-elements:
specifier: 1.0.2
version: 1.0.2
cypress-plugin-tab:
specifier: 1.0.5
version: 1.0.5
eslint: eslint:
specifier: 8.57.0 specifier: 8.57.0
version: 8.57.0 version: 8.57.0
@@ -1356,6 +1344,9 @@ importers:
'@total-typescript/ts-reset': '@total-typescript/ts-reset':
specifier: ^0.5.0 specifier: ^0.5.0
version: 0.5.1 version: 0.5.1
'@types/chai':
specifier: ^4.3.16
version: 4.3.16
chai: chai:
specifier: 4.4.1 specifier: 4.4.1
version: 4.4.1 version: 4.4.1
@@ -2814,10 +2805,6 @@ packages:
'@bcoe/v8-coverage@0.2.3': '@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
'@compodoc/live-server@1.2.3': '@compodoc/live-server@1.2.3':
resolution: {integrity: sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==} resolution: {integrity: sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -2827,13 +2814,6 @@ packages:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'} engines: {node: '>=12'}
'@cypress/request@2.88.12':
resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==}
engines: {node: '>= 6'}
'@cypress/xvfb@1.2.4':
resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==}
'@discoveryjs/json-ext@0.5.7': '@discoveryjs/json-ext@0.5.7':
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
@@ -3957,12 +3937,6 @@ packages:
'@tanstack/virtual-core@3.0.0': '@tanstack/virtual-core@3.0.0':
resolution: {integrity: sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==} resolution: {integrity: sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==}
'@testing-library/cypress@10.0.1':
resolution: {integrity: sha512-e8uswjTZIBhaIXjzEcrQQ8nHRWHgZH7XBxKuIWxZ/T7FxfWhCR48nFhUX5nfPizjVOKSThEfOSv67jquc1ASkw==}
engines: {node: '>=12', npm: '>=6'}
peerDependencies:
cypress: ^12.0.0 || ^13.0.0
'@testing-library/dom@8.20.1': '@testing-library/dom@8.20.1':
resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -4083,6 +4057,9 @@ packages:
'@types/chai@4.3.12': '@types/chai@4.3.12':
resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==} resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==}
'@types/chai@4.3.16':
resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
'@types/cheerio@0.22.35': '@types/cheerio@0.22.35':
resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==} resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==}
@@ -4275,9 +4252,6 @@ packages:
'@types/node@14.18.63': '@types/node@14.18.63':
resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==}
'@types/node@16.18.55':
resolution: {integrity: sha512-Y1zz/LIuJek01+hlPNzzXQhmq/Z2BCP96j18MSXC0S0jSu/IG4FFxmBs7W4/lI2vPJ7foVfEB0hUVtnOjnCiTg==}
'@types/node@20.11.20': '@types/node@20.11.20':
resolution: {integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==} resolution: {integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==}
@@ -4383,9 +4357,6 @@ packages:
'@types/serve-static@1.15.3': '@types/serve-static@1.15.3':
resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==}
'@types/sinonjs__fake-timers@8.1.1':
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
'@types/sizzle@2.3.4': '@types/sizzle@2.3.4':
resolution: {integrity: sha512-jA2llq2zNkg8HrALI7DtWzhALcVH0l7i89yhY3iBdOz6cBPeACoFq+fkQrjHA39t1hnSFOboZ7A/AY5MMZSlag==} resolution: {integrity: sha512-jA2llq2zNkg8HrALI7DtWzhALcVH0l7i89yhY3iBdOz6cBPeACoFq+fkQrjHA39t1hnSFOboZ7A/AY5MMZSlag==}
@@ -4827,9 +4798,6 @@ packages:
algoliasearch@4.22.1: algoliasearch@4.22.1:
resolution: {integrity: sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==} resolution: {integrity: sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==}
ally.js@1.4.1:
resolution: {integrity: sha512-ZewdfuwP6VewtMN36QY0gmiyvBfMnmEaNwbVu2nTS6zRt069viTgkYgaDiqu6vRJ1VJCriNqV0jGMu44R8zNbA==}
anser@2.1.1: anser@2.1.1:
resolution: {integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==} resolution: {integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==}
@@ -5068,10 +5036,6 @@ packages:
asynckit@0.4.0: asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
at-least-node@1.0.0:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
atob@2.1.2: atob@2.1.2:
resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
engines: {node: '>= 4.5.0'} engines: {node: '>= 4.5.0'}
@@ -5590,9 +5554,6 @@ packages:
bl@4.1.0: bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
blob-util@2.0.2:
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
bluebird@3.7.2: bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
@@ -5808,10 +5769,6 @@ packages:
cached-path-relative@1.1.0: cached-path-relative@1.1.0:
resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==}
cachedir@2.4.0:
resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==}
engines: {node: '>=6'}
call-bind@1.0.7: call-bind@1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -5984,10 +5941,6 @@ packages:
resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
cli-table3@0.6.3:
resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
engines: {node: 10.* || >= 12.*}
cli-truncate@2.1.0: cli-truncate@2.1.0:
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -6098,10 +6051,6 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
commander@6.2.1:
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
engines: {node: '>= 6'}
commander@7.2.0: commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
@@ -6465,17 +6414,6 @@ packages:
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
deprecated: Please use another csrf package deprecated: Please use another csrf package
cypress-plugin-stripe-elements@1.0.2:
resolution: {integrity: sha512-tNXZ9BHooO8IGGmOpVRhNfGde/vmPY4D56pi4VHw1EWbfSuwCoveeqqjKDeRfPzMTD5gGYGwXdX2qO1S9O9GEg==}
cypress-plugin-tab@1.0.5:
resolution: {integrity: sha512-QtTJcifOVwwbeMP3hsOzQOKf3EqKsLyjtg9ZAGlYDntrCRXrsQhe4ZQGIthRMRLKpnP6/tTk6G0gJ2sZUfRliQ==}
cypress@12.17.4:
resolution: {integrity: sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==}
engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0}
hasBin: true
d@1.0.1: d@1.0.1:
resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
@@ -6513,9 +6451,6 @@ packages:
dateformat@4.6.3: dateformat@4.6.3:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
dayjs@1.11.10:
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
debounce@1.2.1: debounce@1.2.1:
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
@@ -7360,9 +7295,6 @@ packages:
eventemitter2@5.0.1: eventemitter2@5.0.1:
resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==} resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==}
eventemitter2@6.4.7:
resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==}
eventemitter3@3.1.2: eventemitter3@3.1.2:
resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==}
@@ -7400,10 +7332,6 @@ packages:
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
executable@4.1.1:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
exit@0.1.2: exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
@@ -7749,10 +7677,6 @@ packages:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'}
fs-monkey@1.0.5: fs-monkey@1.0.5:
resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==}
@@ -7989,9 +7913,6 @@ packages:
resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
getos@3.2.1:
resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==}
getpass@0.1.7: getpass@0.1.7:
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
@@ -8405,10 +8326,6 @@ packages:
resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
engines: {node: '>=0.8', npm: '>=1.3.7'} engines: {node: '>=0.8', npm: '>=1.3.7'}
http-signature@1.3.6:
resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==}
engines: {node: '>=0.10'}
http-status@1.7.0: http-status@1.7.0:
resolution: {integrity: sha512-6HZ8T2ywZKtNKOrRA22x4Z+fK+UiWzimWYSTROVHrZ46RX+hKsg9wCQiodRtfNrKfsvOkwsXA6R9q+TmDY+8nQ==} resolution: {integrity: sha512-6HZ8T2ywZKtNKOrRA22x4Z+fK+UiWzimWYSTROVHrZ46RX+hKsg9wCQiodRtfNrKfsvOkwsXA6R9q+TmDY+8nQ==}
engines: {node: '>= 0.4.0'} engines: {node: '>= 0.4.0'}
@@ -8674,10 +8591,6 @@ packages:
resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
hasBin: true hasBin: true
is-ci@3.0.1:
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
hasBin: true
is-core-module@2.13.0: is-core-module@2.13.0:
resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
@@ -9339,10 +9252,6 @@ packages:
resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
engines: {node: '>=0.6.0'} engines: {node: '>=0.6.0'}
jsprim@2.0.2:
resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==}
engines: {'0': node >=0.6.0}
jsx-ast-utils@3.3.5: jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
@@ -9452,15 +9361,6 @@ packages:
engines: {node: ^14.13.1 || >=16.0.0} engines: {node: ^14.13.1 || >=16.0.0}
hasBin: true hasBin: true
listr2@3.14.0:
resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
engines: {node: '>=10.0.0'}
peerDependencies:
enquirer: '>= 2.3.0 < 3'
peerDependenciesMeta:
enquirer:
optional: true
listr2@5.0.8: listr2@5.0.8:
resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==}
engines: {node: ^14.13.1 || >=16.0.0} engines: {node: ^14.13.1 || >=16.0.0}
@@ -10709,9 +10609,6 @@ packages:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
ospath@1.2.2:
resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
p-cancelable@1.1.0: p-cancelable@1.1.0:
resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -10977,10 +10874,6 @@ packages:
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
hasBin: true hasBin: true
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
pify@4.0.1: pify@4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -11019,9 +10912,6 @@ packages:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
engines: {node: '>=8'} engines: {node: '>=8'}
platform@1.3.3:
resolution: {integrity: sha512-VJK1SRmXBpjwsB4YOHYSturx48rLKMzHgCqDH2ZDa6ZbMS/N5huoNqyQdK5Fj/xayu3fqbXckn5SeCS1EbMDZg==}
platform@1.3.6: platform@1.3.6:
resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==}
@@ -11375,9 +11265,6 @@ packages:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
proxy-from-env@1.0.0:
resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
proxy-from-env@1.1.0: proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -11443,10 +11330,6 @@ packages:
resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
qs@6.10.4:
resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
engines: {node: '>=0.6'}
qs@6.11.0: qs@6.11.0:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
@@ -11938,9 +11821,6 @@ packages:
resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==} resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
request-progress@3.0.0:
resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
request@2.88.2: request@2.88.2:
resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@@ -12907,9 +12787,6 @@ packages:
thread-stream@2.4.0: thread-stream@2.4.0:
resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==} resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==}
throttleit@1.0.0:
resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==}
through2@2.0.5: through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
@@ -16954,9 +16831,6 @@ snapshots:
'@bcoe/v8-coverage@0.2.3': {} '@bcoe/v8-coverage@0.2.3': {}
'@colors/colors@1.5.0':
optional: true
'@compodoc/live-server@1.2.3': '@compodoc/live-server@1.2.3':
dependencies: dependencies:
chokidar: 3.6.0 chokidar: 3.6.0
@@ -16980,34 +16854,6 @@ snapshots:
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.9 '@jridgewell/trace-mapping': 0.3.9
'@cypress/request@2.88.12':
dependencies:
aws-sign2: 0.7.0
aws4: 1.12.0
caseless: 0.12.0
combined-stream: 1.0.8
extend: 3.0.2
forever-agent: 0.6.1
form-data: 2.3.3
http-signature: 1.3.6
is-typedarray: 1.0.0
isstream: 0.1.2
json-stringify-safe: 5.0.1
mime-types: 2.1.35
performance-now: 2.1.0
qs: 6.10.4
safe-buffer: 5.2.1
tough-cookie: 4.1.3
tunnel-agent: 0.6.0
uuid: 8.3.2
'@cypress/xvfb@1.2.4(supports-color@8.1.1)':
dependencies:
debug: 3.2.7(supports-color@8.1.1)
lodash.once: 4.1.1
transitivePeerDependencies:
- supports-color
'@discoveryjs/json-ext@0.5.7': {} '@discoveryjs/json-ext@0.5.7': {}
'@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.0)(typescript@5.2.2)': '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.0)(typescript@5.2.2)':
@@ -18393,12 +18239,6 @@ snapshots:
'@tanstack/virtual-core@3.0.0': {} '@tanstack/virtual-core@3.0.0': {}
'@testing-library/cypress@10.0.1(cypress@12.17.4)':
dependencies:
'@babel/runtime': 7.23.9
'@testing-library/dom': 9.3.4
cypress: 12.17.4
'@testing-library/dom@8.20.1': '@testing-library/dom@8.20.1':
dependencies: dependencies:
'@babel/code-frame': 7.23.5 '@babel/code-frame': 7.23.5
@@ -18544,6 +18384,8 @@ snapshots:
'@types/chai@4.3.12': {} '@types/chai@4.3.12': {}
'@types/chai@4.3.16': {}
'@types/cheerio@0.22.35': '@types/cheerio@0.22.35':
dependencies: dependencies:
'@types/node': 20.12.8 '@types/node': 20.12.8
@@ -18783,8 +18625,6 @@ snapshots:
'@types/node@14.18.63': {} '@types/node@14.18.63': {}
'@types/node@16.18.55': {}
'@types/node@20.11.20': '@types/node@20.11.20':
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
@@ -18909,8 +18749,6 @@ snapshots:
'@types/mime': 3.0.2 '@types/mime': 3.0.2
'@types/node': 20.12.8 '@types/node': 20.12.8
'@types/sinonjs__fake-timers@8.1.1': {}
'@types/sizzle@2.3.4': {} '@types/sizzle@2.3.4': {}
'@types/stack-utils@2.0.1': {} '@types/stack-utils@2.0.1': {}
@@ -19476,11 +19314,6 @@ snapshots:
'@algolia/requester-node-http': 4.22.1 '@algolia/requester-node-http': 4.22.1
'@algolia/transporter': 4.22.1 '@algolia/transporter': 4.22.1
ally.js@1.4.1:
dependencies:
css.escape: 1.5.1
platform: 1.3.3
anser@2.1.1: {} anser@2.1.1: {}
ansi-align@3.0.1: ansi-align@3.0.1:
@@ -19711,8 +19544,6 @@ snapshots:
asynckit@0.4.0: {} asynckit@0.4.0: {}
at-least-node@1.0.0: {}
atob@2.1.2: {} atob@2.1.2: {}
atomic-sleep@1.0.0: {} atomic-sleep@1.0.0: {}
@@ -20668,8 +20499,6 @@ snapshots:
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 3.6.2 readable-stream: 3.6.2
blob-util@2.0.2: {}
bluebird@3.7.2: {} bluebird@3.7.2: {}
bn.js@4.12.0: {} bn.js@4.12.0: {}
@@ -21034,8 +20863,6 @@ snapshots:
cached-path-relative@1.1.0: {} cached-path-relative@1.1.0: {}
cachedir@2.4.0: {}
call-bind@1.0.7: call-bind@1.0.7:
dependencies: dependencies:
es-define-property: 1.0.0 es-define-property: 1.0.0
@@ -21225,12 +21052,6 @@ snapshots:
cli-spinners@2.9.1: {} cli-spinners@2.9.1: {}
cli-table3@0.6.3:
dependencies:
string-width: 4.2.3
optionalDependencies:
'@colors/colors': 1.5.0
cli-truncate@2.1.0: cli-truncate@2.1.0:
dependencies: dependencies:
slice-ansi: 3.0.0 slice-ansi: 3.0.0
@@ -21343,8 +21164,6 @@ snapshots:
commander@4.1.1: {} commander@4.1.1: {}
commander@6.2.1: {}
commander@7.2.0: {} commander@7.2.0: {}
commander@9.5.0: {} commander@9.5.0: {}
@@ -21822,58 +21641,6 @@ snapshots:
csrf: 3.1.0 csrf: 3.1.0
http-errors: 1.7.3 http-errors: 1.7.3
cypress-plugin-stripe-elements@1.0.2: {}
cypress-plugin-tab@1.0.5:
dependencies:
ally.js: 1.4.1
cypress@12.17.4:
dependencies:
'@cypress/request': 2.88.12
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
'@types/node': 16.18.55
'@types/sinonjs__fake-timers': 8.1.1
'@types/sizzle': 2.3.4
arch: 2.2.0
blob-util: 2.0.2
bluebird: 3.7.2
buffer: 5.7.1
cachedir: 2.4.0
chalk: 4.1.2
check-more-types: 2.24.0
cli-cursor: 3.1.0
cli-table3: 0.6.3
commander: 6.2.1
common-tags: 1.8.2
dayjs: 1.11.10
debug: 4.3.4(supports-color@8.1.1)
enquirer: 2.4.1
eventemitter2: 6.4.7
execa: 4.1.0
executable: 4.1.1
extract-zip: 2.0.1(supports-color@8.1.1)
figures: 3.2.0
fs-extra: 9.1.0
getos: 3.2.1
is-ci: 3.0.1
is-installed-globally: 0.4.0
lazy-ass: 1.6.0
listr2: 3.14.0(enquirer@2.4.1)
lodash: 4.17.21
log-symbols: 4.1.0
minimist: 1.2.8
ospath: 1.2.2
pretty-bytes: 5.6.0
process: 0.11.10
proxy-from-env: 1.0.0
request-progress: 3.0.0
semver: 7.5.4
supports-color: 8.1.1
tmp: 0.2.1
untildify: 4.0.0
yauzl: 2.10.0
d@1.0.1: d@1.0.1:
dependencies: dependencies:
es5-ext: 0.10.62 es5-ext: 0.10.62
@@ -21911,8 +21678,6 @@ snapshots:
dateformat@4.6.3: {} dateformat@4.6.3: {}
dayjs@1.11.10: {}
debounce@1.2.1: {} debounce@1.2.1: {}
debug@2.2.0: debug@2.2.0:
@@ -21933,12 +21698,6 @@ snapshots:
optionalDependencies: optionalDependencies:
supports-color: 5.5.0 supports-color: 5.5.0
debug@3.2.7(supports-color@8.1.1):
dependencies:
ms: 2.1.3
optionalDependencies:
supports-color: 8.1.1
debug@4.3.1: debug@4.3.1:
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.2
@@ -22136,7 +21895,7 @@ snapshots:
'@types/tmp': 0.0.33 '@types/tmp': 0.0.33
application-config-path: 0.1.1 application-config-path: 0.1.1
command-exists: 1.2.9 command-exists: 1.2.9
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
eol: 0.9.1 eol: 0.9.1
get-port: 3.2.0 get-port: 3.2.0
glob: 7.2.3 glob: 7.2.3
@@ -22662,7 +22421,7 @@ snapshots:
eslint-import-resolver-node@0.3.9: eslint-import-resolver-node@0.3.9:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
is-core-module: 2.13.1 is-core-module: 2.13.1
resolve: 1.22.8 resolve: 1.22.8
transitivePeerDependencies: transitivePeerDependencies:
@@ -22688,7 +22447,7 @@ snapshots:
eslint-module-utils@2.8.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0): eslint-module-utils@2.8.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0):
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.2.2) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.2.2)
eslint: 7.32.0 eslint: 7.32.0
@@ -22699,7 +22458,7 @@ snapshots:
eslint-module-utils@2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): eslint-module-utils@2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0 eslint: 8.57.0
@@ -22739,7 +22498,7 @@ snapshots:
array.prototype.findlastindex: 1.2.3 array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2 array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2 array.prototype.flatmap: 1.3.2
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 7.32.0 eslint: 7.32.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
@@ -22766,7 +22525,7 @@ snapshots:
array.prototype.findlastindex: 1.2.3 array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2 array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2 array.prototype.flatmap: 1.3.2
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
@@ -23108,8 +22867,6 @@ snapshots:
eventemitter2@5.0.1: {} eventemitter2@5.0.1: {}
eventemitter2@6.4.7: {}
eventemitter3@3.1.2: {} eventemitter3@3.1.2: {}
eventemitter3@4.0.7: {} eventemitter3@4.0.7: {}
@@ -23181,10 +22938,6 @@ snapshots:
signal-exit: 3.0.7 signal-exit: 3.0.7
strip-final-newline: 3.0.0 strip-final-newline: 3.0.0
executable@4.1.1:
dependencies:
pify: 2.3.0
exit@0.1.2: {} exit@0.1.2: {}
expand-brackets@2.1.4: expand-brackets@2.1.4:
@@ -23315,7 +23068,7 @@ snapshots:
extract-files@9.0.0: {} extract-files@9.0.0: {}
extract-zip@2.0.1(supports-color@8.1.1): extract-zip@2.0.1:
dependencies: dependencies:
debug: 4.3.4(supports-color@8.1.1) debug: 4.3.4(supports-color@8.1.1)
get-stream: 5.2.0 get-stream: 5.2.0
@@ -23546,7 +23299,7 @@ snapshots:
follow-redirects@1.15.3(debug@3.2.7): follow-redirects@1.15.3(debug@3.2.7):
optionalDependencies: optionalDependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
follow-redirects@1.15.3(debug@4.3.4): follow-redirects@1.15.3(debug@4.3.4):
optionalDependencies: optionalDependencies:
@@ -23635,13 +23388,6 @@ snapshots:
jsonfile: 6.1.0 jsonfile: 6.1.0
universalify: 2.0.0 universalify: 2.0.0
fs-extra@9.1.0:
dependencies:
at-least-node: 1.0.0
graceful-fs: 4.2.11
jsonfile: 6.1.0
universalify: 2.0.0
fs-monkey@1.0.5: {} fs-monkey@1.0.5: {}
fs-readdir-recursive@1.1.0: {} fs-readdir-recursive@1.1.0: {}
@@ -24073,7 +23819,7 @@ snapshots:
css-minimizer-webpack-plugin: 2.0.0(webpack@5.90.3(webpack-cli@4.10.0)) css-minimizer-webpack-plugin: 2.0.0(webpack@5.90.3(webpack-cli@4.10.0))
css.escape: 1.5.1 css.escape: 1.5.1
date-fns: 2.30.0 date-fns: 2.30.0
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
deepmerge: 4.3.1 deepmerge: 4.3.1
del: 5.1.0 del: 5.1.0
detect-port: 1.5.1 detect-port: 1.5.1
@@ -24253,10 +23999,6 @@ snapshots:
get-value@2.0.6: {} get-value@2.0.6: {}
getos@3.2.1:
dependencies:
async: 3.2.4
getpass@0.1.7: getpass@0.1.7:
dependencies: dependencies:
assert-plus: 1.0.0 assert-plus: 1.0.0
@@ -24823,12 +24565,6 @@ snapshots:
jsprim: 1.4.2 jsprim: 1.4.2
sshpk: 1.17.0 sshpk: 1.17.0
http-signature@1.3.6:
dependencies:
assert-plus: 1.0.0
jsprim: 2.0.2
sshpk: 1.17.0
http-status@1.7.0: {} http-status@1.7.0: {}
http2-wrapper@1.0.3: http2-wrapper@1.0.3:
@@ -25085,10 +24821,6 @@ snapshots:
dependencies: dependencies:
ci-info: 2.0.0 ci-info: 2.0.0
is-ci@3.0.1:
dependencies:
ci-info: 3.8.0
is-core-module@2.13.0: is-core-module@2.13.0:
dependencies: dependencies:
has: 1.0.3 has: 1.0.3
@@ -25976,13 +25708,6 @@ snapshots:
json-schema: 0.4.0 json-schema: 0.4.0
verror: 1.10.0 verror: 1.10.0
jsprim@2.0.2:
dependencies:
assert-plus: 1.0.0
extsprintf: 1.3.0
json-schema: 0.4.0
verror: 1.10.0
jsx-ast-utils@3.3.5: jsx-ast-utils@3.3.5:
dependencies: dependencies:
array-includes: 3.1.7 array-includes: 3.1.7
@@ -26102,19 +25827,6 @@ snapshots:
- enquirer - enquirer
- supports-color - supports-color
listr2@3.14.0(enquirer@2.4.1):
dependencies:
cli-truncate: 2.1.0
colorette: 2.0.20
log-update: 4.0.0
p-map: 4.0.0
rfdc: 1.3.0
rxjs: 7.8.1
through: 2.3.8
wrap-ansi: 7.0.0
optionalDependencies:
enquirer: 2.4.1
listr2@5.0.8(enquirer@2.4.1): listr2@5.0.8(enquirer@2.4.1):
dependencies: dependencies:
cli-truncate: 2.1.0 cli-truncate: 2.1.0
@@ -26262,7 +25974,7 @@ snapshots:
dependencies: dependencies:
async: 0.9.2 async: 0.9.2
commondir: 1.0.1 commondir: 1.0.1
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
lodash: 4.17.21 lodash: 4.17.21
semver: 5.7.2 semver: 5.7.2
strong-globalize: 4.1.3 strong-globalize: 4.1.3
@@ -26272,7 +25984,7 @@ snapshots:
loopback-component-explorer@6.4.0: loopback-component-explorer@6.4.0:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
lodash: 4.17.21 lodash: 4.17.21
loopback-swagger: 5.9.0 loopback-swagger: 5.9.0
strong-globalize: 4.1.3 strong-globalize: 4.1.3
@@ -26284,7 +25996,7 @@ snapshots:
dependencies: dependencies:
async: 2.6.4 async: 2.6.4
bson: 1.1.6 bson: 1.1.6
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
loopback-connector: 4.11.1 loopback-connector: 4.11.1
mongodb: 3.6.9 mongodb: 3.6.9
strong-globalize: 4.1.3 strong-globalize: 4.1.3
@@ -26319,7 +26031,7 @@ snapshots:
dependencies: dependencies:
async: 2.6.4 async: 2.6.4
bluebird: 3.7.2 bluebird: 3.7.2
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
depd: 1.1.2 depd: 1.1.2
inflection: 1.13.4 inflection: 1.13.4
lodash: 4.17.21 lodash: 4.17.21
@@ -26337,14 +26049,14 @@ snapshots:
loopback-filters@1.1.1: loopback-filters@1.1.1:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
loopback-phase@3.4.0: loopback-phase@3.4.0:
dependencies: dependencies:
async: 2.6.4 async: 2.6.4
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
strong-globalize: 4.1.3 strong-globalize: 4.1.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -26352,7 +26064,7 @@ snapshots:
loopback-swagger@5.9.0: loopback-swagger@5.9.0:
dependencies: dependencies:
async: 2.6.4 async: 2.6.4
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
ejs: 2.7.4 ejs: 2.7.4
lodash: 4.17.21 lodash: 4.17.21
strong-globalize: 4.1.3 strong-globalize: 4.1.3
@@ -27839,8 +27551,6 @@ snapshots:
os-tmpdir@1.0.2: {} os-tmpdir@1.0.2: {}
ospath@1.2.2: {}
p-cancelable@1.1.0: {} p-cancelable@1.1.0: {}
p-cancelable@2.1.1: {} p-cancelable@2.1.1: {}
@@ -28113,8 +27823,6 @@ snapshots:
pidtree@0.6.0: {} pidtree@0.6.0: {}
pify@2.3.0: {}
pify@4.0.1: {} pify@4.0.1: {}
pify@5.0.0: {} pify@5.0.0: {}
@@ -28171,8 +27879,6 @@ snapshots:
dependencies: dependencies:
find-up: 3.0.0 find-up: 3.0.0
platform@1.3.3: {}
platform@1.3.6: {} platform@1.3.6: {}
playwright-core@1.44.0: {} playwright-core@1.44.0: {}
@@ -28519,8 +28225,6 @@ snapshots:
forwarded: 0.2.0 forwarded: 0.2.0
ipaddr.js: 1.9.1 ipaddr.js: 1.9.1
proxy-from-env@1.0.0: {}
proxy-from-env@1.1.0: {} proxy-from-env@1.1.0: {}
proxy-middleware@0.15.0: {} proxy-middleware@0.15.0: {}
@@ -28565,7 +28269,7 @@ snapshots:
dependencies: dependencies:
debug: 4.3.1 debug: 4.3.1
devtools-protocol: 0.0.901419 devtools-protocol: 0.0.901419
extract-zip: 2.0.1(supports-color@8.1.1) extract-zip: 2.0.1
https-proxy-agent: 5.0.0 https-proxy-agent: 5.0.0
node-fetch: 2.6.1 node-fetch: 2.6.1
pkg-dir: 4.2.0 pkg-dir: 4.2.0
@@ -28600,10 +28304,6 @@ snapshots:
dependencies: dependencies:
side-channel: 1.0.4 side-channel: 1.0.4
qs@6.10.4:
dependencies:
side-channel: 1.0.4
qs@6.11.0: qs@6.11.0:
dependencies: dependencies:
side-channel: 1.0.4 side-channel: 1.0.4
@@ -29253,10 +28953,6 @@ snapshots:
replace-ext@1.0.0: {} replace-ext@1.0.0: {}
request-progress@3.0.0:
dependencies:
throttleit: 1.0.0
request@2.88.2: request@2.88.2:
dependencies: dependencies:
aws-sign2: 0.7.0 aws-sign2: 0.7.0
@@ -30450,8 +30146,6 @@ snapshots:
dependencies: dependencies:
real-require: 0.2.0 real-require: 0.2.0
throttleit@1.0.0: {}
through2@2.0.5: through2@2.0.5:
dependencies: dependencies:
readable-stream: 2.3.8 readable-stream: 2.3.8
@@ -31334,7 +31028,7 @@ snapshots:
webpack-virtual-modules@0.3.2: webpack-virtual-modules@0.3.2:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -46,6 +46,7 @@ describe('external curriculum data build', () => {
const result = validateAvailableSuperBlocks(availableSuperblocks); const result = validateAvailableSuperBlocks(availableSuperblocks);
if (result.error) { if (result.error) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
throw new AssertionError( throw new AssertionError(
result.error.message, result.error.message,
`file: available-superblocks.json` `file: available-superblocks.json`
@@ -71,6 +72,7 @@ describe('external curriculum data build', () => {
const result = validateSuperBlock(JSON.parse(fileContent)); const result = validateSuperBlock(JSON.parse(fileContent));
if (result.error) { if (result.error) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
throw new AssertionError( throw new AssertionError(
result.error.message, result.error.message,
`file: ${fileInArray}` `file: ${fileInArray}`
+1
View File
@@ -20,6 +20,7 @@
"main": "none", "main": "none",
"devDependencies": { "devDependencies": {
"@total-typescript/ts-reset": "^0.5.0", "@total-typescript/ts-reset": "^0.5.0",
"@types/chai": "^4.3.16",
"chai": "4.4.1", "chai": "4.4.1",
"joi": "17.12.2", "joi": "17.12.2",
"readdirp": "3.6.0" "readdirp": "3.6.0"
+1 -1
View File
@@ -14,7 +14,7 @@
"noEmit": true, "noEmit": true,
"resolveJsonModule": true, "resolveJsonModule": true,
"skipLibCheck": true, "skipLibCheck": true,
"types": ["node", "jest", "cypress"] "types": ["node", "jest"]
}, },
// since ts-node compiles ts on the fly and then uses node, it needs to // since ts-node compiles ts on the fly and then uses node, it needs to
// compile the scripts to commonjs (or node will complain about the requires) // compile the scripts to commonjs (or node will complain about the requires)