diff --git a/cypress/e2e/signup.cy.ts b/cypress/e2e/signup.cy.ts index 9d34eda98127b..e51d54b72fdb2 100644 --- a/cypress/e2e/signup.cy.ts +++ b/cypress/e2e/signup.cy.ts @@ -74,10 +74,7 @@ describe('Signup', () => { cy.get('.Toastify [data-attr="error-toast"]').contains('Inactive social login session.') }) - // skip this because it seems to be missing necessary setup feature flag, preflight cloud check... - it.skip('Shows redirect notice if redirecting for maintenance', () => { - cy.visit('/logout') - cy.location('pathname').should('include', '/login') + it('Shows redirect notice if redirecting for maintenance', () => { cy.intercept('https://app.posthog.com/decide/*', (req) => req.reply( decideResponse({ @@ -85,10 +82,20 @@ describe('Signup', () => { }) ) ) - cy.visit('/signup?maintenanceRedirect=true') - cy.get('.Toastify__toast-body').should( - 'contain', - `You have been redirected to signup on our US instance while we perform maintenance on our other instance.` - ) + + cy.visit('/logout') + cy.location('pathname').should('include', '/login') + + cy.visit('/signup?maintenanceRedirect=true', { + onLoad(win: Cypress.AUTWindow) { + win.POSTHOG_APP_CONTEXT.preflight.cloud = true + }, + }) + + cy.get('[data-attr="info-toast"]') + .contains( + `You've been redirected to signup on our US instance while we perform maintenance on our other instance.` + ) + .should('be.visible') }) }) diff --git a/frontend/src/lib/components/Support/supportLogic.ts b/frontend/src/lib/components/Support/supportLogic.ts index 879f1ff53d729..ea9b146e7d777 100644 --- a/frontend/src/lib/components/Support/supportLogic.ts +++ b/frontend/src/lib/components/Support/supportLogic.ts @@ -23,7 +23,7 @@ function getSessionReplayLink(): string { function getDjangoAdminLink( user: UserType | null, - cloudRegion: Region | undefined, + cloudRegion: Region | null | undefined, currentTeamId: TeamType['id'] | null ): string { if (!user || !cloudRegion) { @@ -33,7 +33,7 @@ function getDjangoAdminLink( return `Admin: ${link} (Organization: '${user.organization?.name}'; Project: ${currentTeamId}:'${user.team?.name}')` } -function getSentryLink(user: UserType | null, cloudRegion: Region | undefined): string { +function getSentryLink(user: UserType | null, cloudRegion: Region | null | undefined): string { if (!user || !cloudRegion) { return '' } @@ -209,6 +209,7 @@ export const supportLogic = kea([ zendesk_ticket_uuid + ')' const cloudRegion = preflightLogic.values.preflight?.region + const payload = { request: { requester: { name: name, email: email }, diff --git a/frontend/src/lib/utils.tsx b/frontend/src/lib/utils.tsx index 5d39be45d6fea..adaddb869ecdd 100644 --- a/frontend/src/lib/utils.tsx +++ b/frontend/src/lib/utils.tsx @@ -414,6 +414,10 @@ export function objectsEqual(obj1: any, obj2: any): boolean { return equal(obj1, obj2) } +export function isString(candidate: unknown): candidate is string { + return typeof candidate === 'string' +} + export function isObject(candidate: unknown): candidate is Record { return typeof candidate === 'object' && candidate !== null } diff --git a/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts b/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts index 05d5ad8a56d2c..a7a6b798d82d7 100644 --- a/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts +++ b/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts @@ -8,6 +8,7 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { CLOUD_HOSTNAMES, FEATURE_FLAGS } from 'lib/constants' import { lemonToast } from '@posthog/lemon-ui' import { urls } from 'scenes/urls' +import { isString } from '@tiptap/core' export interface AccountResponse { success: boolean @@ -107,8 +108,20 @@ export const signupLogic = kea([ if (values.preflight?.cloud) { // Redirect to a different region if we are doing maintenance on one of them const regionOverrideFlag = values.featureFlags[FEATURE_FLAGS.REDIRECT_SIGNUPS_TO_INSTANCE] - const isRegionOverrideValid = regionOverrideFlag === 'eu' || regionOverrideFlag === 'us' - if (isRegionOverrideValid && regionOverrideFlag !== values.preflight?.region.toLowerCase()) { + const regionsAllowList = ['eu', 'us'] + const isRegionOverrideValid = + isString(regionOverrideFlag) && regionsAllowList.includes(regionOverrideFlag) + // KLUDGE: the backend can technically return null + // but definitely does in Cypress tests + // and, we don't want to redirect to the app unless the preflight region is valid + const isPreflightRegionValid = + values.preflight?.region && regionsAllowList.includes(values.preflight?.region) + + if ( + isRegionOverrideValid && + isPreflightRegionValid && + regionOverrideFlag !== values.preflight?.region?.toLowerCase() + ) { window.location.href = `https://${ CLOUD_HOSTNAMES[regionOverrideFlag.toUpperCase()] }${urls.signup()}?maintenanceRedirect=true` diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 2a7df8bd38c22..35170c4eb8e6a 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -2317,7 +2317,7 @@ export interface PreflightStatus { demo: boolean celery: boolean realm: Realm - region: Region + region: Region | null available_social_auth_providers: AuthBackends available_timezones?: Record opt_out_capture?: boolean diff --git a/package.json b/package.json index 7910b06f33045..d1636ad63aa65 100644 --- a/package.json +++ b/package.json @@ -233,9 +233,9 @@ "concurrently": "^5.3.0", "css-loader": "^3.4.2", "cssnano": "^4.1.10", - "cypress": "^12.12.0", - "cypress-axe": "^1.4.0", - "cypress-terminal-report": "^5.1.1", + "cypress": "^13.3.0", + "cypress-axe": "^1.5.0", + "cypress-terminal-report": "^5.3.7", "eslint": "^7.8.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-compat": "^4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bafb490675b4b..115bf7e674575 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -505,14 +505,14 @@ devDependencies: specifier: ^4.1.10 version: 4.1.11 cypress: - specifier: ^12.12.0 - version: 12.12.0 + specifier: ^13.3.0 + version: 13.3.0 cypress-axe: - specifier: ^1.4.0 - version: 1.4.0(axe-core@4.5.1)(cypress@12.12.0) + specifier: ^1.5.0 + version: 1.5.0(axe-core@4.5.1)(cypress@13.3.0) cypress-terminal-report: - specifier: ^5.1.1 - version: 5.1.1(cypress@12.12.0) + specifier: ^5.3.7 + version: 5.3.7(cypress@13.3.0) eslint: specifier: ^7.8.0 version: 7.32.0 @@ -2139,8 +2139,8 @@ packages: engines: {node: '>=10'} dev: false - /@cypress/request@2.88.10: - resolution: {integrity: sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==} + /@cypress/request@3.0.1: + resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==} engines: {node: '>= 6'} dependencies: aws-sign2: 0.7.0 @@ -2156,9 +2156,9 @@ packages: json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.5.3 + qs: 6.10.4 safe-buffer: 5.2.1 - tough-cookie: 2.5.0 + tough-cookie: 4.1.3 tunnel-agent: 0.6.0 uuid: 8.3.2 dev: true @@ -2645,7 +2645,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -2657,7 +2657,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.3.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 jest-message-util: 29.3.1 jest-util: 29.3.1 @@ -2678,14 +2678,14 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.5.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 28.1.3 - jest-config: 28.1.3(@types/node@18.11.9)(ts-node@10.9.1) + jest-config: 28.1.3(@types/node@18.18.4)(ts-node@10.9.1) jest-haste-map: 28.1.3 jest-message-util: 28.1.3 jest-regex-util: 28.0.2 @@ -2762,7 +2762,7 @@ packages: dependencies: '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 jest-mock: 28.1.3 dev: true @@ -2816,7 +2816,7 @@ packages: dependencies: '@jest/types': 28.1.3 '@sinonjs/fake-timers': 9.1.2 - '@types/node': 18.11.9 + '@types/node': 18.18.4 jest-message-util: 28.1.3 jest-mock: 28.1.3 jest-util: 28.1.3 @@ -2872,7 +2872,7 @@ packages: '@jest/transform': 28.1.3 '@jest/types': 28.1.3 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -2910,7 +2910,7 @@ packages: '@jest/transform': 29.3.1 '@jest/types': 29.3.1 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -3056,7 +3056,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -3068,7 +3068,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 '@types/yargs': 17.0.16 chalk: 4.1.2 dev: true @@ -5827,14 +5827,14 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/body-parser@1.19.3: resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} dependencies: '@types/connect': 3.4.36 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/chart.js@2.9.37: @@ -5856,13 +5856,13 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/connect@3.4.36: resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/cookie@0.4.1: @@ -5872,7 +5872,7 @@ packages: /@types/cross-spawn@6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/css-font-loading-module@0.0.7: @@ -6131,7 +6131,7 @@ packages: /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -6140,7 +6140,7 @@ packages: /@types/express-serve-static-core@4.17.37: resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 '@types/qs': 6.9.8 '@types/range-parser': 1.2.5 '@types/send': 0.17.2 @@ -6175,7 +6175,7 @@ packages: /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/hast@2.3.4: @@ -6305,14 +6305,10 @@ packages: /@types/node-fetch@2.6.4: resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 form-data: 3.0.1 dev: true - /@types/node@14.18.33: - resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==} - dev: true - /@types/node@16.18.3: resolution: {integrity: sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==} dev: true @@ -6321,6 +6317,10 @@ packages: resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} dev: true + /@types/node@18.18.4: + resolution: {integrity: sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==} + dev: true + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -6473,14 +6473,14 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/send@0.17.2: resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} dependencies: '@types/mime': 1.3.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/serve-static@1.15.2: @@ -6488,7 +6488,7 @@ packages: dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/serve-static@1.15.3: @@ -6496,13 +6496,13 @@ packages: dependencies: '@types/http-errors': 2.0.2 '@types/mime': 3.0.2 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/set-cookie-parser@2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/sinonjs__fake-timers@8.1.1: @@ -6541,7 +6541,7 @@ packages: /@types/wait-on@5.3.1: resolution: {integrity: sha512-2FFOKCF/YydrMUaqg+fkk49qf0e5rDgwt6aQsMzFQzbS419h2gNOXyiwp/o2yYy27bi/C1z+HgfncryjGzlvgQ==} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /@types/yargs-parser@21.0.0: @@ -6564,7 +6564,7 @@ packages: resolution: {integrity: sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==} requiresBuild: true dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true optional: true @@ -8756,38 +8756,39 @@ packages: fs-exists-sync: 0.1.0 dev: true - /cypress-axe@1.4.0(axe-core@4.5.1)(cypress@12.12.0): - resolution: {integrity: sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA==} + /cypress-axe@1.5.0(axe-core@4.5.1)(cypress@13.3.0): + resolution: {integrity: sha512-Hy/owCjfj+25KMsecvDgo4fC/781ccL+e8p+UUYoadGVM2ogZF9XIKbiM6KI8Y3cEaSreymdD6ZzccbI2bY0lQ==} engines: {node: '>=10'} peerDependencies: axe-core: ^3 || ^4 - cypress: ^10 || ^11 || ^12 + cypress: ^10 || ^11 || ^12 || ^13 dependencies: axe-core: 4.5.1 - cypress: 12.12.0 + cypress: 13.3.0 dev: true - /cypress-terminal-report@5.1.1(cypress@12.12.0): - resolution: {integrity: sha512-iZxb6QHV/zf4WRIsaNSf4kXLMgU/qWVLErEIs9kWlpR1mFxoLmSyR2SeC2imFupbvuP5FmkqBT2KVrmTDeQsaA==} + /cypress-terminal-report@5.3.7(cypress@13.3.0): + resolution: {integrity: sha512-VQH4oLo5ifofuwA0Jv3qWLzij9YU8bSGOAKKuNwu2pKhBvS3BOG36SM/P8y99G1DbhGPmZImg7DKf0KjXwBc6Q==} peerDependencies: - cypress: '>=4.10.0' + cypress: '>=10.0.0' dependencies: chalk: 4.1.2 - cypress: 12.12.0 + cypress: 13.3.0 fs-extra: 10.1.0 - semver: 7.3.8 + process: 0.11.10 + semver: 7.5.4 tv4: 1.3.0 dev: true - /cypress@12.12.0: - resolution: {integrity: sha512-UU5wFQ7SMVCR/hyKok/KmzG6fpZgBHHfrXcHzDmPHWrT+UUetxFzQgt7cxCszlwfozckzwkd22dxMwl/vNkWRw==} - engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + /cypress@13.3.0: + resolution: {integrity: sha512-mpI8qcTwLGiA4zEQvTC/U1xGUezVV4V8HQCOYjlEOrVmU1etVvxOjkCXHGwrlYdZU/EPmUiWfsO3yt1o+Q2bgw==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true requiresBuild: true dependencies: - '@cypress/request': 2.88.10 + '@cypress/request': 3.0.1 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 14.18.33 + '@types/node': 18.18.4 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.3 arch: 2.2.0 @@ -8820,9 +8821,10 @@ packages: 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.3.8 + semver: 7.5.4 supports-color: 8.1.1 tmp: 0.2.1 untildify: 4.0.0 @@ -12079,7 +12081,7 @@ packages: '@jest/expect': 28.1.3 '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -12106,7 +12108,7 @@ packages: '@jest/expect': 29.3.1 '@jest/test-result': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -12221,6 +12223,46 @@ packages: - supports-color dev: true + /jest-config@28.1.3(@types/node@18.18.4)(ts-node@10.9.1): + resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.22.10 + '@jest/test-sequencer': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 18.18.4 + babel-jest: 28.1.3(@babel/core@7.22.10) + chalk: 4.1.2 + ci-info: 3.5.0 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 28.1.3 + jest-environment-node: 28.1.3 + jest-get-type: 28.0.2 + jest-regex-util: 28.0.2 + jest-resolve: 28.1.3 + jest-runner: 28.1.3 + jest-util: 28.1.3 + jest-validate: 28.1.3 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 28.1.3 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1(@swc/core@1.3.77)(@types/node@18.11.9)(typescript@4.9.5) + transitivePeerDependencies: + - supports-color + dev: true + /jest-config@29.3.1(@types/node@18.11.9)(ts-node@10.9.1): resolution: {integrity: sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -12347,7 +12389,7 @@ packages: '@jest/environment': 28.1.3 '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 jest-mock: 28.1.3 jest-util: 28.1.3 dev: true @@ -12359,7 +12401,7 @@ packages: '@jest/environment': 29.3.1 '@jest/fake-timers': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 jest-mock: 29.3.1 jest-util: 29.3.1 dev: true @@ -12380,7 +12422,7 @@ packages: dependencies: '@jest/types': 28.1.3 '@types/graceful-fs': 4.1.5 - '@types/node': 18.11.9 + '@types/node': 18.18.4 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12399,7 +12441,7 @@ packages: dependencies: '@jest/types': 29.3.1 '@types/graceful-fs': 4.1.5 - '@types/node': 18.11.9 + '@types/node': 18.18.4 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12511,7 +12553,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 dev: true /jest-mock@29.3.1: @@ -12657,7 +12699,7 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.11 @@ -12686,7 +12728,7 @@ packages: '@jest/test-result': 29.3.1 '@jest/transform': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12747,7 +12789,7 @@ packages: '@jest/test-result': 29.3.1 '@jest/transform': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -12840,7 +12882,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 chalk: 4.1.2 ci-info: 3.5.0 graceful-fs: 4.2.11 @@ -12905,7 +12947,7 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.11.9 + '@types/node': 18.18.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -12919,7 +12961,7 @@ packages: dependencies: '@jest/test-result': 29.3.1 '@jest/types': 29.3.1 - '@types/node': 18.11.9 + '@types/node': 18.18.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12931,7 +12973,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -12940,7 +12982,7 @@ packages: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -12949,7 +12991,7 @@ packages: resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.11.9 + '@types/node': 18.18.4 jest-util: 29.3.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15438,6 +15480,13 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true + /qs@6.10.4: + resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -15451,11 +15500,6 @@ packages: side-channel: 1.0.4 dev: true - /qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - dev: true - /query-selector-shadow-dom@1.0.0: resolution: {integrity: sha512-bK0/0cCI+R8ZmOF1QjT7HupDUYCxbf/9TJgAmSXQxZpftXmTAeil9DRoCnTDkWbvOyZzhcMBwKpptWcdkGFIMg==} dev: false @@ -17862,16 +17906,18 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - /tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} + /tough-cookie@4.1.2: + resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + engines: {node: '>=6'} dependencies: psl: 1.9.0 punycode: 2.1.1 + universalify: 0.2.0 + url-parse: 1.5.10 dev: true - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0