mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2025-12-19 18:18:27 -05:00
chore: remove Cypress (#55056)
This commit is contained in:
@@ -7,29 +7,28 @@ ARG MONGODB_VERSION=6.0.4
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update && apt-get install -y sudo && \
|
||||
sudo apt-get install -y ca-certificates curl gnupg && \
|
||||
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 && \
|
||||
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 install nodejs -y && \
|
||||
sudo apt-get install -y libcurl4 openssl liblzma5 && \
|
||||
mkdir -p /tmp/mongodb && \
|
||||
cd /tmp/mongodb && \
|
||||
wget -qOmongodb.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-${MONGODB_VERSION}.tgz && \
|
||||
tar -zxvf mongodb.tgz && \
|
||||
cd mongodb-* && \
|
||||
sudo cp bin/* /usr/local/bin/ && \
|
||||
rm -rf /tmp/mongodb && \
|
||||
sudo mkdir -p /data/db && \
|
||||
sudo chown vscode:vscode -R /data/db
|
||||
sudo apt-get install -y ca-certificates curl gnupg && \
|
||||
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 && \
|
||||
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 install nodejs -y && \
|
||||
sudo apt-get install -y libcurl4 openssl liblzma5 && \
|
||||
mkdir -p /tmp/mongodb && \
|
||||
cd /tmp/mongodb && \
|
||||
wget -qOmongodb.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-${MONGODB_VERSION}.tgz && \
|
||||
tar -zxvf mongodb.tgz && \
|
||||
cd mongodb-* && \
|
||||
sudo cp bin/* /usr/local/bin/ && \
|
||||
rm -rf /tmp/mongodb && \
|
||||
sudo mkdir -p /data/db && \
|
||||
sudo chown vscode:vscode -R /data/db
|
||||
|
||||
|
||||
# Setup ENV
|
||||
ENV COOKIE_DOMAIN=github.dev
|
||||
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 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 CHALLENGE_EDITOR_CLIENT_LOCATION=https://$CODESPACE_NAME-3300.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
|
||||
|
||||
|
||||
@@ -70,7 +70,6 @@
|
||||
"./api/tsconfig.json",
|
||||
"./shared/tsconfig.json",
|
||||
"./tools/client-plugins/browser-scripts/tsconfig.json",
|
||||
"./cypress/tsconfig.json",
|
||||
"./e2e/tsconfig.json"
|
||||
]
|
||||
},
|
||||
@@ -94,13 +93,6 @@
|
||||
],
|
||||
"rules": { "import/named": 2 }
|
||||
},
|
||||
{
|
||||
"files": ["cypress/**/*.js"],
|
||||
"globals": {
|
||||
"cy": true,
|
||||
"Cypress": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["e2e/*.ts"],
|
||||
"rules": {
|
||||
|
||||
1
.github/labeler.yml
vendored
1
.github/labeler.yml
vendored
@@ -12,7 +12,6 @@
|
||||
- api/**/*
|
||||
|
||||
'scope: tools/scripts':
|
||||
- cypress/**/*
|
||||
- tools/**/*
|
||||
- .github/**/*
|
||||
- utils/**/*
|
||||
|
||||
157
.github/workflows/e2e-web.yml
vendored
157
.github/workflows/e2e-web.yml
vendored
@@ -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
.gitignore
vendored
4
.gitignore
vendored
@@ -111,10 +111,6 @@ coverage
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Cypress.io
|
||||
cypress/videos
|
||||
cypress/screenshots
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ tasks:
|
||||
export COOKIE_DOMAIN=gitpod.io
|
||||
export HOME_LOCATION=$(gp url 8000)
|
||||
export API_LOCATION=$(gp url 3000)
|
||||
export CYPRESS_BASE_URL=$(gp url 8000)
|
||||
export CHALLENGE_EDITOR_API_LOCATION=$(gp url 3200)
|
||||
export CHALLENGE_EDITOR_CLIENT_LOCATION=$(gp url 3300)
|
||||
' >> ~/.bashrc;
|
||||
@@ -39,7 +38,7 @@ tasks:
|
||||
(mongod --dbpath /workspace/data &)
|
||||
|
||||
- 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,
|
||||
# so we should put all the heavy initialization here
|
||||
init: >
|
||||
@@ -55,7 +54,7 @@ tasks:
|
||||
pnpm run develop:server
|
||||
|
||||
- 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: >
|
||||
cd ./client &&
|
||||
gp sync-await pnpm-install &&
|
||||
|
||||
@@ -5,7 +5,6 @@ function FreeCodeCampLogo(
|
||||
): JSX.Element {
|
||||
return (
|
||||
<svg
|
||||
data-cy='freeCodeCamp-logo'
|
||||
height={24}
|
||||
version='1.1'
|
||||
viewBox='0 0 210 24'
|
||||
|
||||
@@ -5,7 +5,6 @@ function MicrosoftLogo(
|
||||
): JSX.Element {
|
||||
return (
|
||||
<svg
|
||||
data-cy='microsoft-logo'
|
||||
version='1.1'
|
||||
viewBox='0 0 610 130'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
|
||||
@@ -392,10 +392,7 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
|
||||
}}
|
||||
</strong>
|
||||
</h1>
|
||||
<h4
|
||||
data-cy={'issue-date'}
|
||||
data-playwright-test-label='issue-date'
|
||||
>
|
||||
<h4 data-playwright-test-label='issue-date'>
|
||||
{{
|
||||
time: certDate.toLocaleString([localeCode, 'en-US'], {
|
||||
year: 'numeric',
|
||||
@@ -414,7 +411,6 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
|
||||
<>
|
||||
<div>
|
||||
<Image
|
||||
data-cy='quincy-signature'
|
||||
data-playwright-test-label='quincy-signature'
|
||||
alt="Quincy Larson's Signature"
|
||||
src={
|
||||
@@ -431,7 +427,6 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
|
||||
</div>
|
||||
<div className='microsoft-signature'>
|
||||
<Image
|
||||
data-cy='microsoft-signature'
|
||||
data-playwright-test-label='microsoft-signature'
|
||||
alt="Julia Liusons's Signature"
|
||||
src={
|
||||
@@ -451,7 +446,6 @@ const ShowCertification = (props: ShowCertificationProps): JSX.Element => {
|
||||
) : (
|
||||
<div>
|
||||
<Image
|
||||
data-cy='quincy-signature'
|
||||
data-playwright-test-label='quincy-signature'
|
||||
alt="Quincy Larson's Signature"
|
||||
src={
|
||||
|
||||
@@ -184,7 +184,7 @@ const ShowProjectLinks = (props: ShowProjectLinksProps): JSX.Element => {
|
||||
if (!isCertName(certName)) return <div> Unknown Certification</div>;
|
||||
|
||||
return (
|
||||
<div data-cy='solution-widget' data-playwright-test-label='project-links'>
|
||||
<div data-playwright-test-label='project-links'>
|
||||
{t(getCertHeading(certName), { user: name })}
|
||||
<Spacer size='medium' />
|
||||
<Table striped>
|
||||
|
||||
@@ -43,15 +43,11 @@ export const ThankYouMessage = ({
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<>
|
||||
<h1 data-playwright-test-label='main-head' data-cy='donate.thank-you'>
|
||||
{t('donate.thank-you')}
|
||||
</h1>
|
||||
<h1 data-playwright-test-label='main-head'>{t('donate.thank-you')}</h1>
|
||||
{(askForDonation || thankContributon) && (
|
||||
<>
|
||||
<Spacer size='medium' />
|
||||
<p data-cy='donate.crucial-contribution'>
|
||||
{t('donate.crucial-contribution')}
|
||||
</p>
|
||||
<p>{t('donate.crucial-contribution')}</p>
|
||||
</>
|
||||
)}
|
||||
{askForDonation && <OtherWaysToSupport />}
|
||||
@@ -63,13 +59,11 @@ export const OtherWaysToSupport = (): JSX.Element => {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<>
|
||||
<p data-cy='donate.if-support-further'>
|
||||
<p>
|
||||
<Trans i18nKey='donate.if-support-further'>
|
||||
<a href={t('links:donate.one-time-external-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')}>
|
||||
placeholder
|
||||
</a>
|
||||
<a href={t('links:donate.other-ways-url')}>placeholder</a>
|
||||
</Trans>
|
||||
</p>
|
||||
</>
|
||||
|
||||
@@ -97,7 +97,6 @@ function SelectionTabs({
|
||||
<button
|
||||
className='text-center confirm-donation-btn donate-btn-group'
|
||||
type='submit'
|
||||
data-cy='donation-tier-selection-button'
|
||||
onClick={() => setShowDonateForm(true)}
|
||||
>
|
||||
{isAnimationEnabled
|
||||
|
||||
@@ -157,7 +157,6 @@ export default function StripeCardForm({
|
||||
<button
|
||||
className='confirm-donation-btn'
|
||||
disabled={!stripe || !elements || isSubmitting}
|
||||
data-cy='donation-confirmation-button'
|
||||
type='submit'
|
||||
>
|
||||
{t('buttons.donate')}
|
||||
|
||||
@@ -30,12 +30,7 @@ const ProjectModal = ({
|
||||
<SolutionViewer challengeFiles={challengeFiles} solution={solution} />
|
||||
</Modal.Body>
|
||||
<Modal.Footer alignment='end'>
|
||||
<Button
|
||||
data-cy='solution-viewer-close-btn'
|
||||
onClick={handleSolutionModalHide}
|
||||
>
|
||||
{t('buttons.close')}
|
||||
</Button>
|
||||
<Button onClick={handleSolutionModalHide}>{t('buttons.close')}</Button>
|
||||
</Modal.Footer>
|
||||
</Modal>
|
||||
);
|
||||
|
||||
@@ -32,11 +32,10 @@ const SearchBarOptimized = ({
|
||||
return (
|
||||
<div className='fcc_searchBar' data-testid='fcc_searchBar' ref={innerRef}>
|
||||
<div className='fcc_search_wrapper'>
|
||||
<div className='ais-SearchBox' data-cy='ais-SearchBox'>
|
||||
<div className='ais-SearchBox'>
|
||||
<form
|
||||
action=''
|
||||
className='ais-SearchBox-form'
|
||||
data-cy='ais-SearchBox-form'
|
||||
onSubmit={onSubmit}
|
||||
role='search'
|
||||
>
|
||||
|
||||
@@ -63,11 +63,7 @@ const CustomHits = connectHits(
|
||||
|
||||
return (
|
||||
<div className='ais-Hits'>
|
||||
<ul
|
||||
className='ais-Hits-list'
|
||||
data-cy='ais-Hits-list'
|
||||
aria-label={t('search.result-list')}
|
||||
>
|
||||
<ul className='ais-Hits-list' aria-label={t('search.result-list')}>
|
||||
{allHits.map((hit: Hit, i: number) => (
|
||||
<li
|
||||
className={
|
||||
|
||||
@@ -188,7 +188,6 @@ function EmailSettings({
|
||||
<FullWidthRow>
|
||||
<form
|
||||
id='form-update-email'
|
||||
data-cy='form-update-email'
|
||||
{...(!isDisabled
|
||||
? { onSubmit: handleSubmit }
|
||||
: { onSubmit: e => e.preventDefault() })}
|
||||
@@ -206,7 +205,6 @@ function EmailSettings({
|
||||
{t('settings.email.new')}
|
||||
</ControlLabel>
|
||||
<FormControl
|
||||
data-cy='email-input'
|
||||
onChange={createHandleEmailFormChange('newEmail')}
|
||||
type='email'
|
||||
value={newEmail}
|
||||
@@ -226,7 +224,6 @@ function EmailSettings({
|
||||
{t('settings.email.confirm')}
|
||||
</ControlLabel>
|
||||
<FormControl
|
||||
data-cy='confirm-email'
|
||||
onChange={createHandleEmailFormChange('confirmNewEmail')}
|
||||
type='email'
|
||||
value={confirmNewEmail}
|
||||
|
||||
@@ -385,7 +385,6 @@ class PortfolioSettings extends Component<PortfolioProps, PortfolioState> {
|
||||
<p>{t('settings.share-projects')}</p>
|
||||
<Spacer size='small' />
|
||||
<Button
|
||||
data-cy='add-portfolio'
|
||||
block={true}
|
||||
size='large'
|
||||
variant='primary'
|
||||
|
||||
@@ -147,7 +147,6 @@ function PrivacySettings({ submitProfileUI, user }: PrivacyProps): JSX.Element {
|
||||
type='submit'
|
||||
size='large'
|
||||
variant='primary'
|
||||
data-cy='save-privacy-settings'
|
||||
block={true}
|
||||
disabled={!madeChanges}
|
||||
{...(!madeChanges && { tabIndex: -1 })}
|
||||
|
||||
@@ -198,11 +198,7 @@ class UsernameSettings extends Component<UsernameProps, UsernameState> {
|
||||
const isDisabled =
|
||||
!(isValidUsername && valid && !isFormPristine) || submitClicked;
|
||||
return (
|
||||
<form
|
||||
id='usernameSettings'
|
||||
onSubmit={this.handleSubmit}
|
||||
data-cy='username-form'
|
||||
>
|
||||
<form id='usernameSettings' onSubmit={this.handleSubmit}>
|
||||
<FullWidthRow>
|
||||
<FormGroup>
|
||||
<ControlLabel htmlFor='username-settings'>
|
||||
|
||||
@@ -153,7 +153,7 @@ function AcceptPrivacyTerms({
|
||||
<hr />
|
||||
</Col>
|
||||
</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}>
|
||||
<Spacer size='small' />
|
||||
<p>{t('misc.email-blast')}</p>
|
||||
|
||||
@@ -50,7 +50,6 @@ class EditorTabs extends Component<EditorTabsProps> {
|
||||
visibleEditors[challengeFile.fileKey] ?? 'false'
|
||||
}
|
||||
key={challengeFile.fileKey}
|
||||
data-cy={`editor-tab-${challengeFile.fileKey}`}
|
||||
onClick={() => toggleVisibleEditor(challengeFile.fileKey)}
|
||||
>
|
||||
{`${challengeFile.name}.${challengeFile.ext}`}{' '}
|
||||
|
||||
@@ -100,7 +100,6 @@ const LowerButtonsPanel = ({
|
||||
<Button
|
||||
data-playwright-test-label='lowerJaw-reset-button'
|
||||
className='fade-in'
|
||||
data-cy='reset-code-button'
|
||||
onClick={resetButtonEvent}
|
||||
>
|
||||
<Reset />
|
||||
@@ -112,7 +111,6 @@ const LowerButtonsPanel = ({
|
||||
<Button
|
||||
className='fade-in'
|
||||
id='get-help-button'
|
||||
data-cy='get-help-button'
|
||||
onClick={helpButtonEvent}
|
||||
>
|
||||
<Help />
|
||||
@@ -133,7 +131,6 @@ const LowerJawTips = ({
|
||||
<>
|
||||
<div
|
||||
data-playwright-test-label='lowerJaw-failing-test-feedback'
|
||||
data-cy='failing-test-feedback'
|
||||
className='test-status fade-in'
|
||||
aria-hidden={showFeedback}
|
||||
>
|
||||
@@ -302,7 +299,6 @@ const LowerJaw = ({
|
||||
{showSignInButton && (
|
||||
<>
|
||||
<a
|
||||
data-cy='sign-in-button'
|
||||
href={`${apiLocation}/signin`}
|
||||
className='btn-cta btn btn-block'
|
||||
onClick={() => {
|
||||
|
||||
@@ -126,7 +126,6 @@ const MultifileEditor = (props: MultifileEditorProps) => {
|
||||
} else {
|
||||
return (
|
||||
<ReflexElement
|
||||
data-cy={`editor-container-${key}`}
|
||||
data-playwright-test-label={`editor-container-${key}`}
|
||||
{...reflexProps}
|
||||
{...resizeProps}
|
||||
|
||||
@@ -216,7 +216,6 @@ class CompletionModal extends Component<
|
||||
size='large'
|
||||
variant='primary'
|
||||
disabled={isSubmitting}
|
||||
data-cy='submit-challenge'
|
||||
onClick={() => submitChallenge()}
|
||||
>
|
||||
{buttonText}
|
||||
|
||||
@@ -20,7 +20,6 @@ function Output({ defaultOutput, output }: OutputProps): JSX.Element {
|
||||
return (
|
||||
<pre
|
||||
className='output-text'
|
||||
data-cy='output-text'
|
||||
data-playwright-test-label='output-text'
|
||||
dangerouslySetInnerHTML={{ __html: message }}
|
||||
role='region'
|
||||
|
||||
@@ -55,7 +55,6 @@ function ResetModal({ reset, close, isOpen }: ResetModalProps): JSX.Element {
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
<Button
|
||||
data-cy='reset-modal-confirm'
|
||||
block={true}
|
||||
size='large'
|
||||
variant='danger'
|
||||
|
||||
@@ -82,12 +82,7 @@ function ToolPanel({
|
||||
challengeType === challengeTypes.multifilePythonCertProject) && (
|
||||
<>
|
||||
<Spacer size='xxSmall' />
|
||||
<Button
|
||||
block={true}
|
||||
variant='primary'
|
||||
data-cy='save-code-to-database-btn'
|
||||
onClick={saveChallenge}
|
||||
>
|
||||
<Button block={true} variant='primary' onClick={saveChallenge}>
|
||||
{isMobile ? t('buttons.save') : t('buttons.save-code')}
|
||||
</Button>
|
||||
</>
|
||||
|
||||
@@ -109,7 +109,6 @@ ${t('learn.exam.time', { t: formatSecondsToTime(examTimeInSeconds) })}
|
||||
<Button
|
||||
block={true}
|
||||
variant='primary'
|
||||
data-cy='exit-exam'
|
||||
data-playwright-test-label='exit-exam'
|
||||
onClick={exitExam}
|
||||
>
|
||||
|
||||
@@ -55,21 +55,11 @@ function ExitExamModal({
|
||||
<div className='text-center'>{t('learn.exam.exit')}</div>
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
<Button
|
||||
data-cy='exit-exam-modal-deny'
|
||||
block={true}
|
||||
variant='primary'
|
||||
onClick={closeExitExamModal}
|
||||
>
|
||||
<Button block={true} variant='primary' onClick={closeExitExamModal}>
|
||||
{t('learn.exam.exit-no')}
|
||||
</Button>
|
||||
<Spacer size='xxSmall' />
|
||||
<Button
|
||||
data-cy='exit-exam-modal-confirm'
|
||||
block={true}
|
||||
variant='danger'
|
||||
onClick={exitExam}
|
||||
>
|
||||
<Button block={true} variant='danger' onClick={exitExam}>
|
||||
{t('learn.exam.exit-yes')}
|
||||
</Button>
|
||||
</Modal.Footer>
|
||||
|
||||
@@ -52,7 +52,6 @@ function FinishExamModal({
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
<Button
|
||||
data-cy='finish-exam-modal-confirm'
|
||||
block={true}
|
||||
size='medium'
|
||||
variant='primary'
|
||||
@@ -62,7 +61,6 @@ function FinishExamModal({
|
||||
</Button>
|
||||
<Spacer size='xxSmall' />
|
||||
<Button
|
||||
data-cy='finish-exam-modal-deny'
|
||||
block={true}
|
||||
size='medium'
|
||||
variant='primary'
|
||||
|
||||
@@ -33,7 +33,6 @@ function FoundationalCSharpSurveyAlert({
|
||||
<Button
|
||||
block={true}
|
||||
variant='info'
|
||||
data-cy='start-csharp-survey-btn'
|
||||
onClick={openSurveyModal}
|
||||
type='button'
|
||||
>
|
||||
|
||||
@@ -168,7 +168,6 @@ function FoundationalCSharpSurvey({
|
||||
block={true}
|
||||
size='medium'
|
||||
variant='primary'
|
||||
data-cy='submit-csharp-survey-btn'
|
||||
disabled={cantSubmitSurvey || isProcessing}
|
||||
onClick={createSurveyResults}
|
||||
>
|
||||
|
||||
@@ -411,10 +411,7 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
{title}
|
||||
</div>
|
||||
<span>|</span>
|
||||
<div
|
||||
data-cy='exam-time'
|
||||
data-playwright-test-label='exam-show-question-time'
|
||||
>
|
||||
<div data-playwright-test-label='exam-show-question-time'>
|
||||
{t('learn.exam.time', {
|
||||
t: formatSecondsToTime(examTimeInSeconds)
|
||||
})}
|
||||
@@ -479,7 +476,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
className='exam-button'
|
||||
disabled={currentQuestionIndex <= 0}
|
||||
variant='primary'
|
||||
data-cy='previous-exam-question-btn'
|
||||
onClick={this.goToPreviousQuestion}
|
||||
>
|
||||
{t('buttons.previous-question')}
|
||||
@@ -494,7 +490,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
}
|
||||
className='exam-button'
|
||||
variant='primary'
|
||||
data-cy='finish-exam-btn'
|
||||
onClick={openFinishExamModal}
|
||||
>
|
||||
{t('buttons.finish-exam')}
|
||||
@@ -507,7 +502,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
}
|
||||
className='exam-button'
|
||||
variant='primary'
|
||||
data-cy='next-exam-question-btn'
|
||||
onClick={this.goToNextQuestion}
|
||||
>
|
||||
{t('buttons.next-question')}
|
||||
@@ -522,7 +516,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
block={true}
|
||||
className='exam-button'
|
||||
variant='primary'
|
||||
data-cy='exit-exam-btn'
|
||||
onClick={openExitExamModal}
|
||||
>
|
||||
{t('buttons.exit-exam')}
|
||||
@@ -555,7 +548,7 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
<Spacer size='medium' />
|
||||
|
||||
{qualifiedForExam ? (
|
||||
<Alert data-cy='qualified-for-exam-alert' variant='info'>
|
||||
<Alert variant='info'>
|
||||
<p>{t('learn.exam.qualified')}</p>
|
||||
</Alert>
|
||||
) : (
|
||||
@@ -576,7 +569,6 @@ class ShowExam extends Component<ShowExamProps, ShowExamState> {
|
||||
<Button
|
||||
block={true}
|
||||
variant='primary'
|
||||
data-cy='start-exam-btn'
|
||||
disabled={!qualifiedForExam}
|
||||
// `this.runExam` being an async callback is acceptable
|
||||
//eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
|
||||
@@ -251,7 +251,6 @@ class Block extends Component<BlockProps> {
|
||||
<button
|
||||
aria-expanded={isExpanded ? 'true' : 'false'}
|
||||
className='block-header'
|
||||
data-cy={challengesWithCompleted[0].block}
|
||||
onClick={() => {
|
||||
this.handleBlockClick();
|
||||
}}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
@@ -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
|
||||
@@ -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/);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
});
|
||||
@@ -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"]'
|
||||
}
|
||||
};
|
||||
@@ -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"
|
||||
}
|
||||
11
knip.jsonc
11
knip.jsonc
@@ -7,16 +7,7 @@
|
||||
"workspaces": {
|
||||
".": {
|
||||
// No custom entry/project files in root workspace to not interfere with workspaces that are not set up yet
|
||||
"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"
|
||||
]
|
||||
}
|
||||
"entry": []
|
||||
},
|
||||
"client": {
|
||||
"webpack": "webpack-workers.js",
|
||||
|
||||
18
package.json
18
package.json
@@ -38,21 +38,10 @@
|
||||
"clean:packages": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +",
|
||||
"clean:server": "rm -rf ./api-server/lib",
|
||||
"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",
|
||||
"develop": "npm-run-all -p develop:*",
|
||||
"develop:client": "cd ./client && 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:eslint": "eslint . --fix",
|
||||
"format:prettier": "prettier --write .",
|
||||
@@ -90,7 +79,6 @@
|
||||
"test-server": "jest api-server",
|
||||
"test-tools": "jest tools",
|
||||
"test-utils": "jest utils",
|
||||
"postinstall": "cypress cache prune",
|
||||
"prepare": "husky",
|
||||
"playwright:run": "playwright test",
|
||||
"playwright:watch": "playwright test --ui"
|
||||
@@ -104,8 +92,7 @@
|
||||
"@babel/preset-env": "7.23.7",
|
||||
"@babel/preset-react": "7.23.3",
|
||||
"@babel/preset-typescript": "7.23.3",
|
||||
"@playwright/test": "1.44.0",
|
||||
"@testing-library/cypress": "10.0.1",
|
||||
"@playwright/test": "^1.43.1",
|
||||
"@testing-library/dom": "9.3.4",
|
||||
"@testing-library/jest-dom": "6.4.2",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
@@ -118,9 +105,6 @@
|
||||
"babel-jest": "29.7.0",
|
||||
"babel-plugin-transform-imports": "2.0.0",
|
||||
"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-config-prettier": "9.1.0",
|
||||
"eslint-import-resolver-typescript": "^3.5.5",
|
||||
|
||||
360
pnpm-lock.yaml
generated
360
pnpm-lock.yaml
generated
@@ -28,11 +28,8 @@ importers:
|
||||
specifier: 7.23.3
|
||||
version: 7.23.3(@babel/core@7.23.7)
|
||||
'@playwright/test':
|
||||
specifier: 1.44.0
|
||||
specifier: ^1.43.1
|
||||
version: 1.44.0
|
||||
'@testing-library/cypress':
|
||||
specifier: 10.0.1
|
||||
version: 10.0.1(cypress@12.17.4)
|
||||
'@testing-library/dom':
|
||||
specifier: 9.3.4
|
||||
version: 9.3.4
|
||||
@@ -69,15 +66,6 @@ importers:
|
||||
cross-env:
|
||||
specifier: 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:
|
||||
specifier: 8.57.0
|
||||
version: 8.57.0
|
||||
@@ -1356,6 +1344,9 @@ importers:
|
||||
'@total-typescript/ts-reset':
|
||||
specifier: ^0.5.0
|
||||
version: 0.5.1
|
||||
'@types/chai':
|
||||
specifier: ^4.3.16
|
||||
version: 4.3.16
|
||||
chai:
|
||||
specifier: 4.4.1
|
||||
version: 4.4.1
|
||||
@@ -2814,10 +2805,6 @@ packages:
|
||||
'@bcoe/v8-coverage@0.2.3':
|
||||
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':
|
||||
resolution: {integrity: sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -2827,13 +2814,6 @@ packages:
|
||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||
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':
|
||||
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
@@ -3957,12 +3937,6 @@ packages:
|
||||
'@tanstack/virtual-core@3.0.0':
|
||||
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':
|
||||
resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -4083,6 +4057,9 @@ packages:
|
||||
'@types/chai@4.3.12':
|
||||
resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==}
|
||||
|
||||
'@types/chai@4.3.16':
|
||||
resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==}
|
||||
|
||||
'@types/cheerio@0.22.35':
|
||||
resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==}
|
||||
|
||||
@@ -4275,9 +4252,6 @@ packages:
|
||||
'@types/node@14.18.63':
|
||||
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':
|
||||
resolution: {integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==}
|
||||
|
||||
@@ -4383,9 +4357,6 @@ packages:
|
||||
'@types/serve-static@1.15.3':
|
||||
resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==}
|
||||
|
||||
'@types/sinonjs__fake-timers@8.1.1':
|
||||
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
|
||||
|
||||
'@types/sizzle@2.3.4':
|
||||
resolution: {integrity: sha512-jA2llq2zNkg8HrALI7DtWzhALcVH0l7i89yhY3iBdOz6cBPeACoFq+fkQrjHA39t1hnSFOboZ7A/AY5MMZSlag==}
|
||||
|
||||
@@ -4827,9 +4798,6 @@ packages:
|
||||
algoliasearch@4.22.1:
|
||||
resolution: {integrity: sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==}
|
||||
|
||||
ally.js@1.4.1:
|
||||
resolution: {integrity: sha512-ZewdfuwP6VewtMN36QY0gmiyvBfMnmEaNwbVu2nTS6zRt069viTgkYgaDiqu6vRJ1VJCriNqV0jGMu44R8zNbA==}
|
||||
|
||||
anser@2.1.1:
|
||||
resolution: {integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==}
|
||||
|
||||
@@ -5068,10 +5036,6 @@ packages:
|
||||
asynckit@0.4.0:
|
||||
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:
|
||||
resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
|
||||
engines: {node: '>= 4.5.0'}
|
||||
@@ -5590,9 +5554,6 @@ packages:
|
||||
bl@4.1.0:
|
||||
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
|
||||
|
||||
blob-util@2.0.2:
|
||||
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
|
||||
|
||||
bluebird@3.7.2:
|
||||
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
|
||||
|
||||
@@ -5808,10 +5769,6 @@ packages:
|
||||
cached-path-relative@1.1.0:
|
||||
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:
|
||||
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -5984,10 +5941,6 @@ packages:
|
||||
resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
cli-table3@0.6.3:
|
||||
resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
|
||||
engines: {node: 10.* || >= 12.*}
|
||||
|
||||
cli-truncate@2.1.0:
|
||||
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -6098,10 +6051,6 @@ packages:
|
||||
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
commander@6.2.1:
|
||||
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
commander@7.2.0:
|
||||
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -6465,17 +6414,6 @@ packages:
|
||||
engines: {node: '>= 0.8.0'}
|
||||
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:
|
||||
resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
|
||||
|
||||
@@ -6513,9 +6451,6 @@ packages:
|
||||
dateformat@4.6.3:
|
||||
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
|
||||
|
||||
dayjs@1.11.10:
|
||||
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
|
||||
|
||||
debounce@1.2.1:
|
||||
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
|
||||
|
||||
@@ -7360,9 +7295,6 @@ packages:
|
||||
eventemitter2@5.0.1:
|
||||
resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==}
|
||||
|
||||
eventemitter2@6.4.7:
|
||||
resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==}
|
||||
|
||||
eventemitter3@3.1.2:
|
||||
resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==}
|
||||
|
||||
@@ -7400,10 +7332,6 @@ packages:
|
||||
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
|
||||
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:
|
||||
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@@ -7749,10 +7677,6 @@ packages:
|
||||
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
fs-extra@9.1.0:
|
||||
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
fs-monkey@1.0.5:
|
||||
resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==}
|
||||
|
||||
@@ -7989,9 +7913,6 @@ packages:
|
||||
resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
getos@3.2.1:
|
||||
resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==}
|
||||
|
||||
getpass@0.1.7:
|
||||
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
|
||||
|
||||
@@ -8405,10 +8326,6 @@ packages:
|
||||
resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
|
||||
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:
|
||||
resolution: {integrity: sha512-6HZ8T2ywZKtNKOrRA22x4Z+fK+UiWzimWYSTROVHrZ46RX+hKsg9wCQiodRtfNrKfsvOkwsXA6R9q+TmDY+8nQ==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
@@ -8674,10 +8591,6 @@ packages:
|
||||
resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
|
||||
hasBin: true
|
||||
|
||||
is-ci@3.0.1:
|
||||
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
|
||||
hasBin: true
|
||||
|
||||
is-core-module@2.13.0:
|
||||
resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
|
||||
|
||||
@@ -9339,10 +9252,6 @@ packages:
|
||||
resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
|
||||
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:
|
||||
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
|
||||
engines: {node: '>=4.0'}
|
||||
@@ -9452,15 +9361,6 @@ packages:
|
||||
engines: {node: ^14.13.1 || >=16.0.0}
|
||||
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:
|
||||
resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==}
|
||||
engines: {node: ^14.13.1 || >=16.0.0}
|
||||
@@ -10709,9 +10609,6 @@ packages:
|
||||
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
ospath@1.2.2:
|
||||
resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
|
||||
|
||||
p-cancelable@1.1.0:
|
||||
resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -10977,10 +10874,6 @@ packages:
|
||||
engines: {node: '>=0.10'}
|
||||
hasBin: true
|
||||
|
||||
pify@2.3.0:
|
||||
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
pify@4.0.1:
|
||||
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -11019,9 +10912,6 @@ packages:
|
||||
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
platform@1.3.3:
|
||||
resolution: {integrity: sha512-VJK1SRmXBpjwsB4YOHYSturx48rLKMzHgCqDH2ZDa6ZbMS/N5huoNqyQdK5Fj/xayu3fqbXckn5SeCS1EbMDZg==}
|
||||
|
||||
platform@1.3.6:
|
||||
resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==}
|
||||
|
||||
@@ -11375,9 +11265,6 @@ packages:
|
||||
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
|
||||
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:
|
||||
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
||||
|
||||
@@ -11443,10 +11330,6 @@ packages:
|
||||
resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
|
||||
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:
|
||||
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
|
||||
engines: {node: '>=0.6'}
|
||||
@@ -11938,9 +11821,6 @@ packages:
|
||||
resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==}
|
||||
engines: {node: '>= 0.10'}
|
||||
|
||||
request-progress@3.0.0:
|
||||
resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
|
||||
|
||||
request@2.88.2:
|
||||
resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -12907,9 +12787,6 @@ packages:
|
||||
thread-stream@2.4.0:
|
||||
resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==}
|
||||
|
||||
throttleit@1.0.0:
|
||||
resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==}
|
||||
|
||||
through2@2.0.5:
|
||||
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
|
||||
|
||||
@@ -16954,9 +16831,6 @@ snapshots:
|
||||
|
||||
'@bcoe/v8-coverage@0.2.3': {}
|
||||
|
||||
'@colors/colors@1.5.0':
|
||||
optional: true
|
||||
|
||||
'@compodoc/live-server@1.2.3':
|
||||
dependencies:
|
||||
chokidar: 3.6.0
|
||||
@@ -16980,34 +16854,6 @@ snapshots:
|
||||
dependencies:
|
||||
'@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': {}
|
||||
|
||||
'@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': {}
|
||||
|
||||
'@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':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.23.5
|
||||
@@ -18544,6 +18384,8 @@ snapshots:
|
||||
|
||||
'@types/chai@4.3.12': {}
|
||||
|
||||
'@types/chai@4.3.16': {}
|
||||
|
||||
'@types/cheerio@0.22.35':
|
||||
dependencies:
|
||||
'@types/node': 20.12.8
|
||||
@@ -18783,8 +18625,6 @@ snapshots:
|
||||
|
||||
'@types/node@14.18.63': {}
|
||||
|
||||
'@types/node@16.18.55': {}
|
||||
|
||||
'@types/node@20.11.20':
|
||||
dependencies:
|
||||
undici-types: 5.26.5
|
||||
@@ -18909,8 +18749,6 @@ snapshots:
|
||||
'@types/mime': 3.0.2
|
||||
'@types/node': 20.12.8
|
||||
|
||||
'@types/sinonjs__fake-timers@8.1.1': {}
|
||||
|
||||
'@types/sizzle@2.3.4': {}
|
||||
|
||||
'@types/stack-utils@2.0.1': {}
|
||||
@@ -19476,11 +19314,6 @@ snapshots:
|
||||
'@algolia/requester-node-http': 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: {}
|
||||
|
||||
ansi-align@3.0.1:
|
||||
@@ -19711,8 +19544,6 @@ snapshots:
|
||||
|
||||
asynckit@0.4.0: {}
|
||||
|
||||
at-least-node@1.0.0: {}
|
||||
|
||||
atob@2.1.2: {}
|
||||
|
||||
atomic-sleep@1.0.0: {}
|
||||
@@ -20668,8 +20499,6 @@ snapshots:
|
||||
inherits: 2.0.4
|
||||
readable-stream: 3.6.2
|
||||
|
||||
blob-util@2.0.2: {}
|
||||
|
||||
bluebird@3.7.2: {}
|
||||
|
||||
bn.js@4.12.0: {}
|
||||
@@ -21034,8 +20863,6 @@ snapshots:
|
||||
|
||||
cached-path-relative@1.1.0: {}
|
||||
|
||||
cachedir@2.4.0: {}
|
||||
|
||||
call-bind@1.0.7:
|
||||
dependencies:
|
||||
es-define-property: 1.0.0
|
||||
@@ -21225,12 +21052,6 @@ snapshots:
|
||||
|
||||
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:
|
||||
dependencies:
|
||||
slice-ansi: 3.0.0
|
||||
@@ -21343,8 +21164,6 @@ snapshots:
|
||||
|
||||
commander@4.1.1: {}
|
||||
|
||||
commander@6.2.1: {}
|
||||
|
||||
commander@7.2.0: {}
|
||||
|
||||
commander@9.5.0: {}
|
||||
@@ -21822,58 +21641,6 @@ snapshots:
|
||||
csrf: 3.1.0
|
||||
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:
|
||||
dependencies:
|
||||
es5-ext: 0.10.62
|
||||
@@ -21911,8 +21678,6 @@ snapshots:
|
||||
|
||||
dateformat@4.6.3: {}
|
||||
|
||||
dayjs@1.11.10: {}
|
||||
|
||||
debounce@1.2.1: {}
|
||||
|
||||
debug@2.2.0:
|
||||
@@ -21933,12 +21698,6 @@ snapshots:
|
||||
optionalDependencies:
|
||||
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:
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
@@ -22136,7 +21895,7 @@ snapshots:
|
||||
'@types/tmp': 0.0.33
|
||||
application-config-path: 0.1.1
|
||||
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
|
||||
get-port: 3.2.0
|
||||
glob: 7.2.3
|
||||
@@ -22662,7 +22421,7 @@ snapshots:
|
||||
|
||||
eslint-import-resolver-node@0.3.9:
|
||||
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
|
||||
resolve: 1.22.8
|
||||
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):
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.2.2)
|
||||
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):
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.5)
|
||||
eslint: 8.57.0
|
||||
@@ -22739,7 +22498,7 @@ snapshots:
|
||||
array.prototype.findlastindex: 1.2.3
|
||||
array.prototype.flat: 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
|
||||
eslint: 7.32.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
@@ -22766,7 +22525,7 @@ snapshots:
|
||||
array.prototype.findlastindex: 1.2.3
|
||||
array.prototype.flat: 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
|
||||
eslint: 8.57.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
@@ -23108,8 +22867,6 @@ snapshots:
|
||||
|
||||
eventemitter2@5.0.1: {}
|
||||
|
||||
eventemitter2@6.4.7: {}
|
||||
|
||||
eventemitter3@3.1.2: {}
|
||||
|
||||
eventemitter3@4.0.7: {}
|
||||
@@ -23181,10 +22938,6 @@ snapshots:
|
||||
signal-exit: 3.0.7
|
||||
strip-final-newline: 3.0.0
|
||||
|
||||
executable@4.1.1:
|
||||
dependencies:
|
||||
pify: 2.3.0
|
||||
|
||||
exit@0.1.2: {}
|
||||
|
||||
expand-brackets@2.1.4:
|
||||
@@ -23315,7 +23068,7 @@ snapshots:
|
||||
|
||||
extract-files@9.0.0: {}
|
||||
|
||||
extract-zip@2.0.1(supports-color@8.1.1):
|
||||
extract-zip@2.0.1:
|
||||
dependencies:
|
||||
debug: 4.3.4(supports-color@8.1.1)
|
||||
get-stream: 5.2.0
|
||||
@@ -23546,7 +23299,7 @@ snapshots:
|
||||
|
||||
follow-redirects@1.15.3(debug@3.2.7):
|
||||
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):
|
||||
optionalDependencies:
|
||||
@@ -23635,13 +23388,6 @@ snapshots:
|
||||
jsonfile: 6.1.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-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.escape: 1.5.1
|
||||
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
|
||||
del: 5.1.0
|
||||
detect-port: 1.5.1
|
||||
@@ -24253,10 +23999,6 @@ snapshots:
|
||||
|
||||
get-value@2.0.6: {}
|
||||
|
||||
getos@3.2.1:
|
||||
dependencies:
|
||||
async: 3.2.4
|
||||
|
||||
getpass@0.1.7:
|
||||
dependencies:
|
||||
assert-plus: 1.0.0
|
||||
@@ -24823,12 +24565,6 @@ snapshots:
|
||||
jsprim: 1.4.2
|
||||
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: {}
|
||||
|
||||
http2-wrapper@1.0.3:
|
||||
@@ -25085,10 +24821,6 @@ snapshots:
|
||||
dependencies:
|
||||
ci-info: 2.0.0
|
||||
|
||||
is-ci@3.0.1:
|
||||
dependencies:
|
||||
ci-info: 3.8.0
|
||||
|
||||
is-core-module@2.13.0:
|
||||
dependencies:
|
||||
has: 1.0.3
|
||||
@@ -25976,13 +25708,6 @@ snapshots:
|
||||
json-schema: 0.4.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:
|
||||
dependencies:
|
||||
array-includes: 3.1.7
|
||||
@@ -26102,19 +25827,6 @@ snapshots:
|
||||
- enquirer
|
||||
- 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):
|
||||
dependencies:
|
||||
cli-truncate: 2.1.0
|
||||
@@ -26262,7 +25974,7 @@ snapshots:
|
||||
dependencies:
|
||||
async: 0.9.2
|
||||
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
|
||||
semver: 5.7.2
|
||||
strong-globalize: 4.1.3
|
||||
@@ -26272,7 +25984,7 @@ snapshots:
|
||||
|
||||
loopback-component-explorer@6.4.0:
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
lodash: 4.17.21
|
||||
loopback-swagger: 5.9.0
|
||||
strong-globalize: 4.1.3
|
||||
@@ -26284,7 +25996,7 @@ snapshots:
|
||||
dependencies:
|
||||
async: 2.6.4
|
||||
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
|
||||
mongodb: 3.6.9
|
||||
strong-globalize: 4.1.3
|
||||
@@ -26319,7 +26031,7 @@ snapshots:
|
||||
dependencies:
|
||||
async: 2.6.4
|
||||
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
|
||||
inflection: 1.13.4
|
||||
lodash: 4.17.21
|
||||
@@ -26337,14 +26049,14 @@ snapshots:
|
||||
|
||||
loopback-filters@1.1.1:
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
loopback-phase@3.4.0:
|
||||
dependencies:
|
||||
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
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -26352,7 +26064,7 @@ snapshots:
|
||||
loopback-swagger@5.9.0:
|
||||
dependencies:
|
||||
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
|
||||
lodash: 4.17.21
|
||||
strong-globalize: 4.1.3
|
||||
@@ -27839,8 +27551,6 @@ snapshots:
|
||||
|
||||
os-tmpdir@1.0.2: {}
|
||||
|
||||
ospath@1.2.2: {}
|
||||
|
||||
p-cancelable@1.1.0: {}
|
||||
|
||||
p-cancelable@2.1.1: {}
|
||||
@@ -28113,8 +27823,6 @@ snapshots:
|
||||
|
||||
pidtree@0.6.0: {}
|
||||
|
||||
pify@2.3.0: {}
|
||||
|
||||
pify@4.0.1: {}
|
||||
|
||||
pify@5.0.0: {}
|
||||
@@ -28171,8 +27879,6 @@ snapshots:
|
||||
dependencies:
|
||||
find-up: 3.0.0
|
||||
|
||||
platform@1.3.3: {}
|
||||
|
||||
platform@1.3.6: {}
|
||||
|
||||
playwright-core@1.44.0: {}
|
||||
@@ -28519,8 +28225,6 @@ snapshots:
|
||||
forwarded: 0.2.0
|
||||
ipaddr.js: 1.9.1
|
||||
|
||||
proxy-from-env@1.0.0: {}
|
||||
|
||||
proxy-from-env@1.1.0: {}
|
||||
|
||||
proxy-middleware@0.15.0: {}
|
||||
@@ -28565,7 +28269,7 @@ snapshots:
|
||||
dependencies:
|
||||
debug: 4.3.1
|
||||
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
|
||||
node-fetch: 2.6.1
|
||||
pkg-dir: 4.2.0
|
||||
@@ -28600,10 +28304,6 @@ snapshots:
|
||||
dependencies:
|
||||
side-channel: 1.0.4
|
||||
|
||||
qs@6.10.4:
|
||||
dependencies:
|
||||
side-channel: 1.0.4
|
||||
|
||||
qs@6.11.0:
|
||||
dependencies:
|
||||
side-channel: 1.0.4
|
||||
@@ -29253,10 +28953,6 @@ snapshots:
|
||||
|
||||
replace-ext@1.0.0: {}
|
||||
|
||||
request-progress@3.0.0:
|
||||
dependencies:
|
||||
throttleit: 1.0.0
|
||||
|
||||
request@2.88.2:
|
||||
dependencies:
|
||||
aws-sign2: 0.7.0
|
||||
@@ -30450,8 +30146,6 @@ snapshots:
|
||||
dependencies:
|
||||
real-require: 0.2.0
|
||||
|
||||
throttleit@1.0.0: {}
|
||||
|
||||
through2@2.0.5:
|
||||
dependencies:
|
||||
readable-stream: 2.3.8
|
||||
@@ -31334,7 +31028,7 @@ snapshots:
|
||||
|
||||
webpack-virtual-modules@0.3.2:
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ describe('external curriculum data build', () => {
|
||||
const result = validateAvailableSuperBlocks(availableSuperblocks);
|
||||
|
||||
if (result.error) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
||||
throw new AssertionError(
|
||||
result.error.message,
|
||||
`file: available-superblocks.json`
|
||||
@@ -71,6 +72,7 @@ describe('external curriculum data build', () => {
|
||||
const result = validateSuperBlock(JSON.parse(fileContent));
|
||||
|
||||
if (result.error) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
||||
throw new AssertionError(
|
||||
result.error.message,
|
||||
`file: ${fileInArray}`
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
"main": "none",
|
||||
"devDependencies": {
|
||||
"@total-typescript/ts-reset": "^0.5.0",
|
||||
"@types/chai": "^4.3.16",
|
||||
"chai": "4.4.1",
|
||||
"joi": "17.12.2",
|
||||
"readdirp": "3.6.0"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"noEmit": true,
|
||||
"resolveJsonModule": 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
|
||||
// compile the scripts to commonjs (or node will complain about the requires)
|
||||
|
||||
Reference in New Issue
Block a user