Merge remote-tracking branch 'origin/develop' into feat/protocol
# Conflicts: # yarn.lock
@@ -76,6 +76,7 @@ windowsWorkflowFilters: &windows-workflow-filters
|
||||
- matches:
|
||||
pattern: /^release\/\d+\.\d+\.\d+$/
|
||||
value: << pipeline.git.branch >>
|
||||
|
||||
executors:
|
||||
# the Docker image with Cypress dependencies and Chrome browser
|
||||
cy-doc:
|
||||
@@ -1917,6 +1918,23 @@ jobs:
|
||||
path: npm/react/test_results
|
||||
- store-npm-logs
|
||||
|
||||
npm-vite-plugin-cypress-esm:
|
||||
<<: *defaults
|
||||
steps:
|
||||
- restore_cached_workspace
|
||||
- run:
|
||||
name: Build
|
||||
command: yarn workspace @cypress/vite-plugin-cypress-esm build
|
||||
- run:
|
||||
name: Run tests
|
||||
command: yarn test
|
||||
working_directory: npm/vite-plugin-cypress-esm
|
||||
- store_test_results:
|
||||
path: npm/vite-plugin-cypress-esm/test_results
|
||||
- store_artifacts:
|
||||
path: npm/vite-plugin-cypress-esm/test_results
|
||||
- store-npm-logs
|
||||
|
||||
npm-mount-utils:
|
||||
<<: *defaults
|
||||
steps:
|
||||
@@ -2544,6 +2562,9 @@ linux-x64-workflow: &linux-x64-workflow
|
||||
- npm-vite-dev-server:
|
||||
requires:
|
||||
- build
|
||||
- npm-vite-plugin-cypress-esm:
|
||||
requires:
|
||||
- build
|
||||
- npm-webpack-preprocessor:
|
||||
requires:
|
||||
- build
|
||||
@@ -2591,6 +2612,7 @@ linux-x64-workflow: &linux-x64-workflow
|
||||
- npm-webpack-batteries-included-preprocessor
|
||||
- npm-webpack-preprocessor
|
||||
- npm-vite-dev-server
|
||||
- npm-vite-plugin-cypress-esm
|
||||
- npm-webpack-dev-server
|
||||
- npm-cypress-schematic
|
||||
- lint-types
|
||||
@@ -2644,6 +2666,7 @@ linux-x64-workflow: &linux-x64-workflow
|
||||
- npm-webpack-batteries-included-preprocessor
|
||||
- npm-webpack-preprocessor
|
||||
- npm-vite-dev-server
|
||||
- npm-vite-plugin-cypress-esm
|
||||
- npm-webpack-dev-server
|
||||
- npm-cypress-schematic
|
||||
- lint-types
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setting up Node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
|
||||
@@ -13,7 +13,7 @@ jobs:
|
||||
Snyk_SAST_Scan :
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: snyk/actions/setup@master
|
||||
- name: Perform Static Analysis Test
|
||||
continue-on-error: true
|
||||
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
BASE_BRANCH: develop
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.BOT_GITHUB_ACTION_TOKEN }}
|
||||
@@ -40,13 +40,13 @@ jobs:
|
||||
env:
|
||||
BRANCH_NAME: update-chrome-stable-from-${{ steps.get-versions.outputs.current_stable_version }}-beta-from-${{ steps.get-versions.outputs.current_beta_version }}
|
||||
run: |
|
||||
echo "::set-output name=branch_name::${{ env.BRANCH_NAME }}"
|
||||
echo "::set-output name=branch_exists::$(git show-ref --verify --quiet refs/remotes/origin/${{ env.BRANCH_NAME }} && echo 'true')"
|
||||
echo "branch_name=${{ env.BRANCH_NAME }}" >> $GITHUB_OUTPUT
|
||||
echo "branch_exists=$(git show-ref --verify --quiet refs/remotes/origin/${{ env.BRANCH_NAME }} && echo 'true')" >> $GITHUB_OUTPUT
|
||||
- name: Check need for PR or branch update
|
||||
id: check-need-for-pr
|
||||
run: |
|
||||
echo "::set-output name=needs_pr::${{ steps.get-versions.outputs.has_update == 'true' && steps.check-branch.outputs.branch_exists != 'true' }}"
|
||||
echo "::set-output name=needs_branch_update::${{ steps.get-versions.outputs.has_update == 'true' && steps.check-branch.outputs.branch_exists == 'true' }}"
|
||||
echo "needs_pr=${{ steps.get-versions.outputs.has_update == 'true' && steps.check-branch.outputs.branch_exists != 'true' }}" >> $GITHUB_OUTPUT
|
||||
echo "needs_branch_update=${{ steps.get-versions.outputs.has_update == 'true' && steps.check-branch.outputs.branch_exists == 'true' }}" >> $GITHUB_OUTPUT
|
||||
## Update available and a branch/PR already exists
|
||||
- name: Checkout existing branch
|
||||
if: ${{ steps.check-need-for-pr.outputs.needs_branch_update == 'true' }}
|
||||
|
||||
@@ -205,7 +205,7 @@ We try to tag all issues with a `pkg/` or `npm/` tag describing the appropriate
|
||||
|
||||
You must have the following installed on your system to contribute locally:
|
||||
|
||||
- [`Node.js`](https://nodejs.org/en/) (See the root [.node-version](.node-version) file for minimum version requirements. You can use [avn](https://github.com/wbyoung/avn) to automatically switch to the right version of Node.js for this repo.)
|
||||
- [`Node.js`](https://nodejs.org/en/) (See the root [.node-version](.node-version) file for the required version. You can find a list of tools on [node-version-usage](https://github.com/shadowspawn/node-version-usage) to switch the version of [`Node.js`](https://nodejs.org/en/) based on [.node-version](.node-version).)
|
||||
- [`yarn`](https://yarnpkg.com/en/docs/install)
|
||||
- [`python`](https://www.python.org/downloads/) (since we use `node-gyp`. See their [repo](https://github.com/nodejs/node-gyp) for Python version requirements.)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"chrome:beta": "113.0.5672.24",
|
||||
"chrome:stable": "112.0.5615.49",
|
||||
"chrome:beta": "113.0.5672.63",
|
||||
"chrome:stable": "112.0.5615.165",
|
||||
"chrome:minimum": "64.0.3282.0"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
<!-- See the ../guides/writing-the-cypress-changelog.md for details on writing the changelog. -->
|
||||
## 12.11.1
|
||||
## 12.12.0
|
||||
|
||||
_Released 05/09/2023 (PENDING)_
|
||||
_Released 05/09/2023_
|
||||
|
||||
**Features:**
|
||||
|
||||
- Added a new informational banner to help get started with component testing from an existing end-to-end test suite. Addresses [#26511](https://github.com/cypress-io/cypress/issues/26511).
|
||||
|
||||
**Bugfixes:**
|
||||
|
||||
- Fixed an issue in Electron where devtools gets out of sync with the DOM occasionally. Addresses [#15932](https://github.com/cypress-io/cypress/issues/15932).
|
||||
- Updated the Chromium renderer process crash message to be more terse. Addressed in [#26597](https://github.com/cypress-io/cypress/pull/26597).
|
||||
- Fixed an issue with `CYPRESS_DOWNLOAD_PATH_TEMPLATE` regex to allow multiple replacements. Addresses [#23670](https://github.com/cypress-io/cypress/issues/23670).
|
||||
|
||||
**Dependency Updates:**
|
||||
|
||||
- Upgraded [`plist`](https://www.npmjs.com/package/plist) from `3.0.5` to `3.0.6` to address [CVE-2022-26260](https://nvd.nist.gov/vuln/detail/CVE-2022-22912#range-8131646) NVD security vulnerability. Addressed in [#26631](https://github.com/cypress-io/cypress/pull/26631).
|
||||
- Upgraded [`engine.io`](https://www.npmjs.com/package/engine.io) from `6.2.1` to `6.4.2` to address [CVE-2023-31125](https://github.com/socketio/engine.io/security/advisories/GHSA-q9mw-68c2-j6m5) NVD security vulnerability. Addressed in [#26664](https://github.com/cypress-io/cypress/pull/26664).
|
||||
- Upgraded [`@vue/test-utils`](https://www.npmjs.com/package/@vue/test-utils) from `2.0.2` to `2.3.2`. Addresses [#26575](https://github.com/cypress-io/cypress/issues/26575).
|
||||
|
||||
## 12.11.0
|
||||
|
||||
|
||||
@@ -60,3 +60,7 @@ https://download.cypress.io/desktop/0.20.2/OS-ARCH/cypress.zip
|
||||
exports['desktop url from template with escaped dollar sign wrapped in quote'] = `
|
||||
https://download.cypress.io/desktop/0.20.2/OS-ARCH/cypress.zip
|
||||
`
|
||||
|
||||
exports['desktop url from template with multiple replacements'] = `
|
||||
https://download.cypress.io/desktop/0.20.2/OS/ARCH/cypress-0.20.2-OS-ARCH.zip?referrer=https://download.cypress.io/desktop/0.20.2&version=0.20.2
|
||||
`
|
||||
|
||||
@@ -64,10 +64,10 @@ const prepend = (arch, urlPath, version) => {
|
||||
return pathTemplate
|
||||
? (
|
||||
pathTemplate
|
||||
.replace(/\\?\$\{endpoint\}/, endpoint)
|
||||
.replace(/\\?\$\{platform\}/, platform)
|
||||
.replace(/\\?\$\{arch\}/, arch)
|
||||
.replace(/\\?\$\{version\}/, version)
|
||||
.replace(/\\?\$\{endpoint\}/g, endpoint)
|
||||
.replace(/\\?\$\{platform\}/g, platform)
|
||||
.replace(/\\?\$\{arch\}/g, arch)
|
||||
.replace(/\\?\$\{version\}/g, version)
|
||||
)
|
||||
: `${endpoint}?platform=${platform}&arch=${arch}`
|
||||
}
|
||||
|
||||
@@ -81,6 +81,13 @@ describe('lib/tasks/download', function () {
|
||||
snapshot('desktop url from template with version', normalize(url))
|
||||
})
|
||||
|
||||
it('returns custom url from template with multiple replacements', () => {
|
||||
process.env.CYPRESS_DOWNLOAD_PATH_TEMPLATE = '${endpoint}/${platform}/${arch}/cypress-${version}-${platform}-${arch}.zip?referrer=${endpoint}&version=${version}'
|
||||
const url = download.getUrl('ARCH', '0.20.2')
|
||||
|
||||
snapshot('desktop url from template with multiple replacements', normalize(url))
|
||||
})
|
||||
|
||||
it('returns custom url from template with escaped dollar sign', () => {
|
||||
process.env.CYPRESS_DOWNLOAD_PATH_TEMPLATE = '\\${endpoint}/\\${platform}-\\${arch}/cypress.zip'
|
||||
const url = download.getUrl('ARCH', '0.20.2')
|
||||
|
||||
@@ -8,5 +8,6 @@
|
||||
"system-tests"
|
||||
],
|
||||
"useWorkspaces": true,
|
||||
"useNx": true,
|
||||
"version": "0.0.0"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
...require('../../.releaserc'),
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
# @cypress/vite-plugin-cypress-esm-v1.0.0 (2023-05-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* initial release of cypress/vite-plugin-cypress-esm ([#26663](https://github.com/cypress-io/cypress/issues/26663)) ([42d4f83](https://github.com/cypress-io/cypress/commit/42d4f836cf30069a152cb45ac49af736155e7cc1))
|
||||
|
||||
@@ -36,9 +36,9 @@ export default defineConfig({
|
||||
CypressEsm(),
|
||||
]
|
||||
}
|
||||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"build-prod": "tsc || echo 'built, with type errors'",
|
||||
"check-ts": "tsc --noEmit",
|
||||
"cypress:open": "node ../../scripts/cypress open --project . --component",
|
||||
"test": "node ../../scripts/cypress run --project . --browser chrome --component",
|
||||
"test": "node ../../scripts/cypress run --project . --component",
|
||||
"watch": "tsc -w",
|
||||
"lint": "eslint --ext .js,.ts,.json, ."
|
||||
},
|
||||
|
||||
@@ -24,4 +24,15 @@ describe('HelloWorld', () => {
|
||||
.click()
|
||||
.should('contain', '1')
|
||||
})
|
||||
|
||||
it('exposes count using defineExpose', () => {
|
||||
mount(HelloWorld, { props: { msg: 'Hello Cypress' } }).as('vm')
|
||||
cy.get('button')
|
||||
.click()
|
||||
.should('contain', '1')
|
||||
|
||||
cy.get<{ component: any }>('@vm').then(({ component }) => {
|
||||
expect(component.count).to.eq(1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -16,4 +16,8 @@ defineProps<{
|
||||
}>()
|
||||
|
||||
const count = ref(0)
|
||||
|
||||
defineExpose({
|
||||
count,
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
"devDependencies": {
|
||||
"@cypress/mount-utils": "0.0.0-development",
|
||||
"@vitejs/plugin-vue": "4.2.0",
|
||||
"@vue/compiler-sfc": "3.2.31",
|
||||
"@vue/test-utils": "2.0.2",
|
||||
"@vue/compiler-sfc": "3.2.47",
|
||||
"@vue/test-utils": "2.3.2",
|
||||
"axios": "0.21.2",
|
||||
"cypress": "0.0.0-development",
|
||||
"debug": "^4.3.4",
|
||||
@@ -28,7 +28,7 @@
|
||||
"tailwindcss": "1.1.4",
|
||||
"typescript": "^4.7.4",
|
||||
"vite": "4.3.2",
|
||||
"vue": "3.2.31",
|
||||
"vue": "3.2.47",
|
||||
"vue-i18n": "9.0.0-rc.6",
|
||||
"vue-router": "^4.0.0",
|
||||
"vue-tsc": "^0.3.0",
|
||||
|
||||
@@ -3,10 +3,15 @@ import { createEntries } from '@cypress/mount-utils/create-rollup-entry.mjs'
|
||||
const config = {
|
||||
external: [
|
||||
'vue',
|
||||
'@vue/compiler-dom',
|
||||
'@vue/server-renderer'
|
||||
],
|
||||
output: {
|
||||
globals: {
|
||||
vue: 'Vue',
|
||||
vue: 'Vue',
|
||||
'@vue/compiler-dom': 'VueCompilerDOM',
|
||||
'@vue/server-renderer': 'VueServerRenderer'
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ export function mount<
|
||||
M,
|
||||
Mixin,
|
||||
Extends,
|
||||
E,
|
||||
EmitsOptions,
|
||||
EE,
|
||||
PP,
|
||||
Props,
|
||||
@@ -236,7 +236,7 @@ export function mount<
|
||||
M,
|
||||
Mixin,
|
||||
Extends,
|
||||
E,
|
||||
EmitsOptions,
|
||||
EE,
|
||||
PP,
|
||||
Props,
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# [@cypress/webpack-preprocessor-v5.17.1](https://github.com/cypress-io/cypress/compare/@cypress/webpack-preprocessor-v5.17.0...@cypress/webpack-preprocessor-v5.17.1) (2023-05-01)
|
||||
|
||||
# [@cypress/webpack-preprocessor-v5.17.0](https://github.com/cypress-io/cypress/compare/@cypress/webpack-preprocessor-v5.16.3...@cypress/webpack-preprocessor-v5.17.0) (2023-02-15)
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cypress",
|
||||
"version": "12.11.0",
|
||||
"version": "12.12.0",
|
||||
"description": "Cypress is a next generation front end testing tool built for the modern web",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@@ -175,7 +175,7 @@
|
||||
"inquirer": "3.3.0",
|
||||
"inquirer-confirm": "2.0.3",
|
||||
"lazy-ass": "1.6.0",
|
||||
"lerna": "3.22.1",
|
||||
"lerna": "5.4.3",
|
||||
"lint-staged": "11.1.2",
|
||||
"listr2": "3.8.3",
|
||||
"lodash": "^4.17.21",
|
||||
|
||||
@@ -20,8 +20,9 @@
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@cypress-design/vue-icon": "0.20.0",
|
||||
"@cypress-design/vue-statusicon": "0.3.0",
|
||||
"@cypress-design/vue-button": "0.9.2",
|
||||
"@cypress-design/vue-icon": "0.22.1",
|
||||
"@cypress-design/vue-statusicon": "0.4.3",
|
||||
"@graphql-typed-document-node/core": "^3.1.0",
|
||||
"@headlessui/vue": "1.4.0",
|
||||
"@iconify/iconify": "2.1.2",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { gql, useSubscription } from '@urql/vue'
|
||||
import { Debug_RelevantRuns_SubscriptionDocument, Sidebar_RelevantRuns_SubscriptionDocument } from '@packages/app/src/generated/graphql'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
import { computed } from 'vue'
|
||||
import { uniq } from 'lodash'
|
||||
@@ -43,10 +43,10 @@ gql`
|
||||
`
|
||||
|
||||
export function useRelevantRun (location: 'SIDEBAR' | 'DEBUG') {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
const shouldPause = computed(() => {
|
||||
return !loginConnectStore.project.isProjectConnected
|
||||
return !userProjectStatusStore.project.isProjectConnected
|
||||
})
|
||||
|
||||
//Switch the subscription query depending on where it was registered from
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { DebugSpecListGroupsFragment, DebugSpecListSpecFragment, DebugSpecListTestsFragment, DebugSpecsFragment, DebugSpecsFragmentDoc, UseCohorts_DetermineCohortDocument } from '../generated/graphql-test'
|
||||
import DebugContainer from './DebugContainer.vue'
|
||||
import { defaultMessages } from '@cy/i18n'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import { specsList } from './utils/DebugMapping'
|
||||
import { CloudRunStubs, createCloudRun } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { DEBUG_SLIDESHOW } from './utils/constants'
|
||||
@@ -51,31 +51,31 @@ describe('<DebugContainer />', () => {
|
||||
}
|
||||
|
||||
it('shows not logged in', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setHasInitiallyLoaded()
|
||||
userProjectStatusStore.setHasInitiallyLoaded()
|
||||
|
||||
validateEmptyState([defaultMessages.debugPage.emptyStates.connectToCypressCloud, defaultMessages.debugPage.emptyStates.debugDirectlyInCypress, defaultMessages.debugPage.emptyStates.notLoggedInTestMessage])
|
||||
cy.findByRole('button', { name: 'Connect to Cypress Cloud' }).should('be.visible')
|
||||
})
|
||||
|
||||
it('is logged in with no project', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', false)
|
||||
loginConnectStore.setHasInitiallyLoaded()
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', false)
|
||||
userProjectStatusStore.setHasInitiallyLoaded()
|
||||
|
||||
validateEmptyState([defaultMessages.debugPage.emptyStates.debugDirectlyInCypress, defaultMessages.debugPage.emptyStates.reviewRerunAndDebug, defaultMessages.debugPage.emptyStates.noProjectTestMessage])
|
||||
cy.findByRole('button', { name: 'Connect a Cypress Cloud project' }).should('be.visible')
|
||||
})
|
||||
|
||||
it('has no runs', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', true)
|
||||
loginConnectStore.setHasInitiallyLoaded()
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setHasInitiallyLoaded()
|
||||
cy.mountFragment(DebugSpecsFragmentDoc, {
|
||||
variableTypes: DebugSpecVariableTypes,
|
||||
variables: defaultVariables,
|
||||
@@ -87,11 +87,11 @@ describe('<DebugContainer />', () => {
|
||||
})
|
||||
|
||||
it('errors', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', true)
|
||||
loginConnectStore.setHasInitiallyLoaded()
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setHasInitiallyLoaded()
|
||||
cy.mountFragment(DebugSpecsFragmentDoc, {
|
||||
variableTypes: DebugSpecVariableTypes,
|
||||
variables: defaultVariables,
|
||||
@@ -105,11 +105,11 @@ describe('<DebugContainer />', () => {
|
||||
|
||||
describe('run states', { viewportWidth: 900 }, () => {
|
||||
beforeEach(() => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', true)
|
||||
loginConnectStore.setHasInitiallyLoaded()
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setHasInitiallyLoaded()
|
||||
})
|
||||
|
||||
function mountTestRun (runName: string) {
|
||||
@@ -229,14 +229,14 @@ describe('<DebugContainer />', () => {
|
||||
})
|
||||
|
||||
describe('when logged in and connected', () => {
|
||||
let loginConnectStore
|
||||
let userProjectStatusStore
|
||||
|
||||
beforeEach(() => {
|
||||
loginConnectStore = useLoginConnectStore()
|
||||
userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', true)
|
||||
loginConnectStore.setHasInitiallyLoaded()
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setHasInitiallyLoaded()
|
||||
})
|
||||
|
||||
it('renders running run', () => {
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
<NoInternetConnection v-if="!online">
|
||||
{{ t('launchpadErrors.noInternet.connectProject') }}
|
||||
</NoInternetConnection>
|
||||
<DebugLoading v-else-if="!loginConnectStore.hasInitiallyLoaded || loginConnectStore.project.isProjectConnected && isLoading" />
|
||||
<DebugLoading v-else-if="!userProjectStatusStore.hasInitiallyLoaded || userProjectStatusStore.project.isProjectConnected && isLoading" />
|
||||
<DebugError
|
||||
v-else-if="showError"
|
||||
/>
|
||||
<DebugNotLoggedIn
|
||||
v-else-if="!loginConnectStore.user.isLoggedIn"
|
||||
v-else-if="!userProjectStatusStore.user.isLoggedIn"
|
||||
data-cy="debug-empty"
|
||||
/>
|
||||
<DebugNoProject
|
||||
v-else-if="!loginConnectStore.project.isProjectConnected"
|
||||
v-else-if="!userProjectStatusStore.project.isProjectConnected"
|
||||
data-cy="debug-empty"
|
||||
/>
|
||||
<DebugNoRuns
|
||||
@@ -85,7 +85,7 @@
|
||||
import { gql } from '@urql/vue'
|
||||
import { computed } from 'vue'
|
||||
import type { CloudRunStatus, DebugSpecsFragment, TestingTypeEnum } from '../generated/graphql'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import NoInternetConnection from '@packages/frontend-shared/src/components/NoInternetConnection.vue'
|
||||
import DebugLoading from '../debug/empty/DebugLoading.vue'
|
||||
import DebugPageHeader from './DebugPageHeader.vue'
|
||||
@@ -205,7 +205,7 @@ const props = withDefaults(defineProps<{
|
||||
currentCommitInfo: undefined,
|
||||
})
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
const cloudProject = computed(() => {
|
||||
return props.gql?.currentProject?.cloudProject?.__typename === 'CloudProject'
|
||||
|
||||
@@ -4,7 +4,7 @@ import DebugNoRuns from './DebugNoRuns.vue'
|
||||
import DebugLoading from './DebugLoading.vue'
|
||||
import DebugError from './DebugError.vue'
|
||||
import DebugEmptyView from './DebugEmptyView.vue'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import { DebugEmptyView_RecordEventDocument, DebugEmptyView_SetPreferencesDocument, UseCohorts_DetermineCohortDocument, _DebugEmptyViewFragment, _DebugEmptyViewFragmentDoc } from '../../generated/graphql-test'
|
||||
import { DEBUG_SLIDESHOW } from '../utils/constants'
|
||||
|
||||
@@ -77,10 +77,10 @@ describe('Debug page empty states', () => {
|
||||
|
||||
context('not logged in', () => {
|
||||
it('renders', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
// We need to set isLoggedIn so that CloudConnectButton shows the correct state
|
||||
loginConnectStore.setUserFlag('isLoggedIn', false)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', false)
|
||||
|
||||
mountWithGql(<DebugNotLoggedIn />)
|
||||
|
||||
@@ -90,7 +90,7 @@ describe('Debug page empty states', () => {
|
||||
})
|
||||
|
||||
it('sends record event upon seeing slideshow', () => {
|
||||
useLoginConnectStore().setUserFlag('isLoggedIn', false)
|
||||
useUserProjectStatusStore().setUserFlag('isLoggedIn', false)
|
||||
mountWithGql(<DebugNotLoggedIn />, { debugSlideshowComplete: false })
|
||||
cy.get('@recordEvent').should('have.been.calledWithMatch', { campaign: DEBUG_SLIDESHOW.campaigns.login, messageId: Cypress.sinon.match.string, medium: DEBUG_SLIDESHOW.medium, cohort: Cypress.sinon.match(/A|B/) })
|
||||
})
|
||||
@@ -98,10 +98,10 @@ describe('Debug page empty states', () => {
|
||||
|
||||
context('no project', () => {
|
||||
it('renders', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
// We need to set isLoggedIn so that CloudConnectButton shows the correct state
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
|
||||
mountWithGql(<DebugNoProject />)
|
||||
|
||||
@@ -115,7 +115,7 @@ describe('Debug page empty states', () => {
|
||||
})
|
||||
|
||||
it('sends record event upon seeing slideshow', () => {
|
||||
useLoginConnectStore().setUserFlag('isLoggedIn', false)
|
||||
useUserProjectStatusStore().setUserFlag('isLoggedIn', false)
|
||||
mountWithGql(<DebugNoProject />, { debugSlideshowComplete: false })
|
||||
cy.get('@recordEvent').should('have.been.calledWithMatch', { campaign: DEBUG_SLIDESHOW.campaigns.connectProject, messageId: Cypress.sinon.match.string, medium: DEBUG_SLIDESHOW.medium, cohort: Cypress.sinon.match(/A|B/) })
|
||||
})
|
||||
@@ -131,7 +131,7 @@ describe('Debug page empty states', () => {
|
||||
})
|
||||
|
||||
it('sends record event upon seeing slideshow', () => {
|
||||
useLoginConnectStore().setUserFlag('isLoggedIn', false)
|
||||
useUserProjectStatusStore().setUserFlag('isLoggedIn', false)
|
||||
mountWithGql(<DebugNoRuns />, { debugSlideshowComplete: false })
|
||||
cy.get('@recordEvent').should('have.been.calledWithMatch', { campaign: DEBUG_SLIDESHOW.campaigns.recordRun, messageId: Cypress.sinon.match.string, medium: DEBUG_SLIDESHOW.medium, cohort: Cypress.sinon.match(/A|B/) })
|
||||
})
|
||||
@@ -184,7 +184,7 @@ describe('Debug page empty states', () => {
|
||||
}
|
||||
|
||||
it('renders slideshow if debugSlideshowComplete = false', () => {
|
||||
useLoginConnectStore().setUserFlag('isLoggedIn', false)
|
||||
useUserProjectStatusStore().setUserFlag('isLoggedIn', false)
|
||||
mountWithGql(<DebugNoRuns />, { cohort: 'B', debugSlideshowComplete: false })
|
||||
cy.get('@recordEvent').should('have.been.calledWithMatch', { campaign: DEBUG_SLIDESHOW.campaigns.recordRun, messageId: Cypress.sinon.match.string, medium: DEBUG_SLIDESHOW.medium, cohort: Cypress.sinon.match(/A|B/) })
|
||||
moveThroughSlideshow({ cohort: 'B', percy: true })
|
||||
@@ -198,7 +198,7 @@ describe('Debug page empty states', () => {
|
||||
})
|
||||
|
||||
it('renders default empty state if debugSlideshowComplete = true', () => {
|
||||
useLoginConnectStore().setUserFlag('isLoggedIn', false)
|
||||
useUserProjectStatusStore().setUserFlag('isLoggedIn', false)
|
||||
mountWithGql(<DebugNoRuns />, { cohort: 'A', debugSlideshowComplete: true })
|
||||
cy.findByTestId('debug-default-empty-state')
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { defaultMessages } from '@cy/i18n'
|
||||
import { CloudRunStatus, SidebarNavigationFragment, SidebarNavigationFragmentDoc, SideBarNavigation_SetPreferencesDocument } from '../generated/graphql-test'
|
||||
import { CloudRunStubs } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
function mountComponent (props: { initialNavExpandedVal?: boolean, cloudProject?: { status: CloudRunStatus, numFailedTests: number }, isLoading?: boolean, online?: boolean} = {}) {
|
||||
const withDefaults = { initialNavExpandedVal: false, isLoading: false, online: true, ...props }
|
||||
@@ -186,9 +186,9 @@ describe('SidebarNavigation', () => {
|
||||
})
|
||||
|
||||
it('renders no badge when query is loading', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
|
||||
mountComponent({ isLoading: true })
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ import { useI18n } from '@cy/i18n'
|
||||
import { useRoute } from 'vue-router'
|
||||
import SidebarNavigationHeader from './SidebarNavigationHeader.vue'
|
||||
import { useDebounceFn, useWindowSize } from '@vueuse/core'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
@@ -162,7 +162,7 @@ const props = defineProps<{
|
||||
|
||||
const NAV_EXPAND_MIN_SCREEN_WIDTH = 1024
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
const debugBadge = ref<Badge | undefined>()
|
||||
|
||||
@@ -171,7 +171,7 @@ const setDebugBadge = useDebounceFn((badge) => {
|
||||
}, 500)
|
||||
|
||||
watchEffect(() => {
|
||||
if (props.isLoading && loginConnectStore.project.isProjectConnected) {
|
||||
if (props.isLoading && userProjectStatusStore.project.isProjectConnected) {
|
||||
setDebugBadge(undefined)
|
||||
|
||||
return
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import CloudConnectButton from './CloudConnectButton.vue'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
describe('<CloudConnectButton />', { viewportHeight: 60, viewportWidth: 400 }, () => {
|
||||
context('not logged in ', () => {
|
||||
@@ -11,12 +11,12 @@ describe('<CloudConnectButton />', { viewportHeight: 60, viewportWidth: 400 }, (
|
||||
})
|
||||
|
||||
context('logged in', () => {
|
||||
let loginConnectStore
|
||||
let userProjectStatusStore
|
||||
|
||||
beforeEach(() => {
|
||||
loginConnectStore = useLoginConnectStore()
|
||||
userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
})
|
||||
|
||||
it('show project connect if not connected', () => {
|
||||
@@ -26,7 +26,7 @@ describe('<CloudConnectButton />', { viewportHeight: 60, viewportWidth: 400 }, (
|
||||
})
|
||||
|
||||
it('uses the store to open the Login Connect modal', () => {
|
||||
loginConnectStore.openLoginConnectModal = cy.spy().as('openLoginConnectModal')
|
||||
userProjectStatusStore.openLoginConnectModal = cy.spy().as('openLoginConnectModal')
|
||||
cy.mount(() => <div class="h-screen"><CloudConnectButton utmMedium="testing" /></div>)
|
||||
|
||||
cy.contains('button', 'Connect a Cypress Cloud project').click()
|
||||
@@ -35,7 +35,7 @@ describe('<CloudConnectButton />', { viewportHeight: 60, viewportWidth: 400 }, (
|
||||
})
|
||||
|
||||
it('uses the store to open the Login Connect modal with utmContent', () => {
|
||||
loginConnectStore.openLoginConnectModal = cy.spy().as('openLoginConnectModal')
|
||||
userProjectStatusStore.openLoginConnectModal = cy.spy().as('openLoginConnectModal')
|
||||
cy.mount(() => <div class="h-screen"><CloudConnectButton utmMedium="testing" utmContent="content"/></div>)
|
||||
|
||||
cy.contains('button', 'Connect a Cypress Cloud project').click()
|
||||
|
||||
@@ -15,9 +15,9 @@ import ChainIcon from '~icons/cy/chain-link_x16.svg'
|
||||
import CypressIcon from '~icons/cy/cypress-logo_x16.svg'
|
||||
import Button from '@cy/components/Button.vue'
|
||||
import { useI18n } from '@cy/i18n'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const { openLoginConnectModal, user } = useLoginConnectStore()
|
||||
const { openLoginConnectModal, user } = useUserProjectStatusStore()
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import RunsContainer from './RunsContainer.vue'
|
||||
import { RunsContainerFragmentDoc } from '../generated/graphql-test'
|
||||
import { CloudUserStubs } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
import { defaultMessages } from '@cy/i18n'
|
||||
|
||||
@@ -16,9 +16,9 @@ describe('<RunsContainer />', { keystrokeDelay: 0 }, () => {
|
||||
|
||||
context('when the user is logged in', () => {
|
||||
beforeEach(() => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
})
|
||||
|
||||
it('renders with expected runs if there is a cloud project id', () => {
|
||||
|
||||
@@ -52,7 +52,7 @@ import RunsEmpty from './RunsEmpty.vue'
|
||||
import { RunsContainerFragment, RunsContainer_FetchNewerRunsDocument } from '../generated/graphql'
|
||||
import Warning from '@packages/frontend-shared/src/warning/Warning.vue'
|
||||
import RunsErrorRenderer from './RunsErrorRenderer.vue'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
@@ -188,9 +188,9 @@ const props = defineProps<{
|
||||
const showConnectSuccessAlert = ref(false)
|
||||
const connectionFailed = computed(() => !props.gql.currentProject?.cloudProject && props.online)
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
watch(() => loginConnectStore.project.isProjectConnected, (newVal, oldVal) => {
|
||||
watch(() => userProjectStatusStore.project.isProjectConnected, (newVal, oldVal) => {
|
||||
if (newVal && oldVal === false) {
|
||||
// only show this alert if we have just connected
|
||||
showConnectSuccessAlert.value = true
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { RunsErrorRendererFragmentDoc } from '../generated/graphql-test'
|
||||
import RunsErrorRenderer from './RunsErrorRenderer.vue'
|
||||
import { defaultMessages } from '@cy/i18n'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const text = defaultMessages.runs.errors
|
||||
|
||||
@@ -34,9 +34,9 @@ describe('<RunsErrorRenderer />', () => {
|
||||
},
|
||||
})
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
cy.spy(loginConnectStore, 'openLoginConnectModal').as('loginConnectSpy')
|
||||
cy.spy(userProjectStatusStore, 'openLoginConnectModal').as('loginConnectSpy')
|
||||
|
||||
cy.contains(text.notFound.title).should('be.visible')
|
||||
cy.contains(text.notFound.description.replace('{0}', 'projectId: "test-project-id"')).should('be.visible')
|
||||
|
||||
@@ -71,9 +71,9 @@ import SendIcon from '~icons/cy/paper-airplane_x16.svg'
|
||||
import { useI18n } from '@cy/i18n'
|
||||
import CodeTag from '../../../frontend-shared/src/components/CodeTag.vue'
|
||||
import ExternalLink from '@cy/gql-components/ExternalLink.vue'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const { openLoginConnectModal } = useLoginConnectStore()
|
||||
const { openLoginConnectModal } = useUserProjectStatusStore()
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
|
||||
@@ -92,6 +92,9 @@ import SpecRunSummary from './SpecRunSummary.vue'
|
||||
import { gql } from '@urql/vue'
|
||||
import { getUrlWithParams } from '@packages/frontend-shared/src/utils/getUrlWithParams'
|
||||
|
||||
// cloudProjectSpec.specRuns was marked deprecated in the cloud in favor of a new
|
||||
// field. When the work is completed to use that field, remove this eslist-disable comment
|
||||
/* eslint-disable graphql/no-deprecated-fields */
|
||||
gql`
|
||||
fragment RunStatusDots on RemoteFetchableCloudProjectSpecResult {
|
||||
id
|
||||
|
||||
@@ -2,7 +2,7 @@ import { SpecHeaderCloudDataTooltipFragmentDoc } from '../generated/graphql-test
|
||||
import SpecHeaderCloudDataTooltip from './SpecHeaderCloudDataTooltip.vue'
|
||||
import { get, set } from 'lodash'
|
||||
import { defaultMessages } from '@cy/i18n'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const tooltipContentSelector = '.v-popper'
|
||||
|
||||
@@ -18,7 +18,7 @@ describe('<SpecHeaderCloudDataTooltip />', () => {
|
||||
docs: string
|
||||
},
|
||||
) {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
cy.mountFragment(SpecHeaderCloudDataTooltipFragmentDoc, {
|
||||
onResult: (result) => {
|
||||
@@ -26,22 +26,22 @@ describe('<SpecHeaderCloudDataTooltip />', () => {
|
||||
|
||||
switch (status) {
|
||||
case 'LOGGED_OUT':
|
||||
loginConnectStore.setUserFlag('isLoggedIn', false)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', false)
|
||||
break
|
||||
case 'NOT_CONNECTED':
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setUserFlag('isOrganizationLoaded', true)
|
||||
loginConnectStore.setUserFlag('isMemberOfOrganization', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', false)
|
||||
loginConnectStore.setProjectFlag('isConfigLoaded', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isOrganizationLoaded', true)
|
||||
userProjectStatusStore.setUserFlag('isMemberOfOrganization', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', false)
|
||||
userProjectStatusStore.setProjectFlag('isConfigLoaded', true)
|
||||
break
|
||||
case 'NOT_FOUND':
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isNotFound', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isNotFound', true)
|
||||
break
|
||||
case 'ACCESS_REQUESTED':
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isNotAuthorized', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isNotAuthorized', true)
|
||||
|
||||
set(result, 'currentProject.cloudProject', {
|
||||
__typename: 'CloudProjectUnauthorized',
|
||||
@@ -51,16 +51,16 @@ describe('<SpecHeaderCloudDataTooltip />', () => {
|
||||
|
||||
break
|
||||
case 'UNAUTHORIZED':
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setProjectFlag('isNotAuthorized', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setProjectFlag('isNotAuthorized', true)
|
||||
|
||||
break
|
||||
case 'CONNECTED':
|
||||
default:
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
loginConnectStore.setUserFlag('isOrganizationLoaded', true)
|
||||
loginConnectStore.setUserFlag('isMemberOfOrganization', true)
|
||||
loginConnectStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isOrganizationLoaded', true)
|
||||
userProjectStatusStore.setUserFlag('isMemberOfOrganization', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
break
|
||||
}
|
||||
},
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<Button
|
||||
v-if="userStatusMatches('isLoggedOut')"
|
||||
v-if="cloudStatusMatches('isLoggedOut')"
|
||||
:prefix-icon="UserOutlineIcon"
|
||||
prefix-icon-class="icon-dark-white icon-light-transparent"
|
||||
data-cy="login-button"
|
||||
@@ -53,7 +53,7 @@
|
||||
{{ t('specPage.cloudLoginButton') }}
|
||||
</Button>
|
||||
<Button
|
||||
v-else-if="userStatusMatches('needsProjectConnect')"
|
||||
v-else-if="cloudStatusMatches('needsProjectConnect')"
|
||||
:prefix-icon="ConnectIcon"
|
||||
prefix-icon-class="icon-dark-white icon-light-transparent"
|
||||
data-cy="connect-button"
|
||||
@@ -92,9 +92,9 @@ import type { SpecHeaderCloudDataTooltipFragment } from '../generated/graphql'
|
||||
import { useI18n } from '@cy/i18n'
|
||||
import { computed } from 'vue'
|
||||
import { gql } from '@urql/vue'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const { userStatusMatches, project } = useLoginConnectStore()
|
||||
const { cloudStatusMatches, project } = useUserProjectStatusStore()
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
|
||||
@@ -201,13 +201,13 @@ import { useRoute } from 'vue-router'
|
||||
import FlakyInformation from './flaky-badge/FlakyInformation.vue'
|
||||
import { useCloudSpecData } from '../composables/useCloudSpecData'
|
||||
import { useSpecFilter } from '../composables/useSpecFilter'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import SpecsRunAllSpecs from './SpecsRunAllSpecs.vue'
|
||||
import { useRunAllSpecsStore } from '../store/run-all-specs-store'
|
||||
import { posixify } from '../paths'
|
||||
import { useSubscription } from '../graphql'
|
||||
|
||||
const { openLoginConnectModal } = useLoginConnectStore()
|
||||
const { openLoginConnectModal } = useUserProjectStatusStore()
|
||||
|
||||
const route = useRoute()
|
||||
const { t } = useI18n()
|
||||
|
||||
@@ -6,15 +6,16 @@ import interval from 'human-interval'
|
||||
import { CloudUserStubs, CloudProjectStubs } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { AllowedState, BannerIds } from '@packages/types'
|
||||
import { assignIn, set } from 'lodash'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import type { LoginConnectState } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { UserProjectStatusStore, useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import type { UserProjectStatusState } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const AlertSelector = 'alert-header'
|
||||
const AlertCloseBtnSelector = 'alert-suffix-icon'
|
||||
|
||||
type BannerKey = keyof typeof BannerIds
|
||||
type BannerId = typeof BannerIds[BannerKey]
|
||||
|
||||
describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
describe('<SpecsListBanners />', { viewportHeight: 260, defaultCommandTimeout: 1000 }, () => {
|
||||
const validateBaseRender = () => {
|
||||
it('should render as expected', () => {
|
||||
cy.findByTestId(AlertSelector).should('be.visible')
|
||||
@@ -68,9 +69,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
const validateSmartNotificationBehaviors = (bannerId: BannerId, bannerTestId: string, gql: Partial<SpecsListBannersFragment>) => {
|
||||
it('should not render when using cypress < 4 days', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, {
|
||||
render: (gqlVal) => <SpecsListBanners gql={gqlVal} />,
|
||||
@@ -80,9 +81,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
})
|
||||
|
||||
it('should not render when previously-dismissed', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setBannersState({
|
||||
userProjectStatusStore.setBannersState({
|
||||
[bannerId]: {
|
||||
dismissed: Date.now(),
|
||||
},
|
||||
@@ -97,9 +98,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
context('banner conditions are met and when cypress use >= 4 days', () => {
|
||||
beforeEach(() => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('4 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('4 days'))
|
||||
|
||||
cy.stubMutationResolver(UseCohorts_DetermineCohortDocument, (defineResult) => {
|
||||
return defineResult({ determineCohort: { __typename: 'Cohort', name: 'foo', cohort: 'A' } })
|
||||
@@ -113,27 +114,42 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
/>),
|
||||
})
|
||||
|
||||
const bannerTrueUserConditions = {
|
||||
'login-banner': [],
|
||||
'create-organization-banner': ['isLoggedIn', 'isOrganizationLoaded'],
|
||||
'connect-project-banner': ['isLoggedIn', 'isMemberOfOrganization'],
|
||||
'record-banner': ['isLoggedIn', 'isMemberOfOrganization'],
|
||||
} as const
|
||||
type DeepPartial<T> = {
|
||||
[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]
|
||||
}
|
||||
|
||||
const bannerTrueProjectConditions = {
|
||||
'login-banner': [],
|
||||
'create-organization-banner': [],
|
||||
'connect-project-banner': ['isConfigLoaded'],
|
||||
'record-banner': ['isProjectConnected', 'hasNoRecordedRuns', 'hasNonExampleSpec', 'isConfigLoaded'],
|
||||
} as const
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const bannerTrueConditions: Record<string, DeepPartial<UserProjectStatusState>> = {
|
||||
'login-banner': {},
|
||||
'create-organization-banner': {
|
||||
user: { isLoggedIn: true, isOrganizationLoaded: true },
|
||||
},
|
||||
'connect-project-banner': {
|
||||
user: { isLoggedIn: true, isMemberOfOrganization: true },
|
||||
project: { isConfigLoaded: true },
|
||||
},
|
||||
'record-banner': {
|
||||
user: { isLoggedIn: true, isMemberOfOrganization: true },
|
||||
project: { isProjectConnected: true, hasNoRecordedRuns: true, hasNonExampleSpec: true, isConfigLoaded: true },
|
||||
},
|
||||
'component-testing-banner': {
|
||||
testingType: 'e2e',
|
||||
user: { isLoggedIn: true, isMemberOfOrganization: true },
|
||||
project: { isProjectConnected: true, hasNonExampleSpec: true, isConfigLoaded: true, hasDetectedCtFramework: true },
|
||||
},
|
||||
}
|
||||
|
||||
bannerTrueUserConditions[bannerTestId].forEach((status: keyof LoginConnectState['user']) => {
|
||||
loginConnectStore.setUserFlag(status, true)
|
||||
})
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
bannerTrueProjectConditions[bannerTestId].forEach((status: keyof LoginConnectState['project']) => {
|
||||
loginConnectStore.setProjectFlag(status, true)
|
||||
const stateToSet = bannerTrueConditions[bannerTestId]
|
||||
|
||||
Object.entries(stateToSet).forEach(([key, value]) => {
|
||||
if (key === 'user') {
|
||||
Object.entries(value).forEach(([key, value]) => userProjectStatusStore.setUserFlag(key as any, value))
|
||||
} else if (key === 'project') {
|
||||
Object.entries(value).forEach(([key, value]) => userProjectStatusStore.setProjectFlag(key as any, value))
|
||||
} else if (key === 'testingType') {
|
||||
userProjectStatusStore.setTestingType(value as any)
|
||||
}
|
||||
})
|
||||
|
||||
cy.get(`[data-cy="${bannerTestId}"]`).should('be.visible')
|
||||
@@ -142,26 +158,31 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
it('should be preempted by spec not found banner', () => {
|
||||
mountWithState(gql, {}, { isSpecNotFound: true })
|
||||
cy.get(`[data-cy="${bannerTestId}"]`).should('not.exist')
|
||||
cy.contains('Spec not found').should('exist')
|
||||
})
|
||||
|
||||
it('should be preempted by offline warning banner', () => {
|
||||
mountWithState(gql, {}, { isOffline: true })
|
||||
cy.get(`[data-cy="${bannerTestId}"]`).should('not.exist')
|
||||
cy.contains('No internet connection').should('exist')
|
||||
})
|
||||
|
||||
it('should be preempted by fetch error banner', () => {
|
||||
mountWithState(gql, {}, { isFetchError: true })
|
||||
cy.get(`[data-cy="${bannerTestId}"]`).should('not.exist')
|
||||
cy.contains('Lost connection').should('exist')
|
||||
})
|
||||
|
||||
it('should be preempted by project not found banner', () => {
|
||||
mountWithState(gql, {}, { isProjectNotFound: true })
|
||||
cy.get(`[data-cy="${bannerTestId}"]`).should('not.exist')
|
||||
cy.contains('Couldn\'t find your project').should('exist')
|
||||
})
|
||||
|
||||
it('should be preempted by request access banner', () => {
|
||||
mountWithState(gql, {}, { isProjectUnauthorized: true })
|
||||
cy.get(`[data-cy="${bannerTestId}"]`).should('not.exist')
|
||||
cy.contains('Request access').should('exist')
|
||||
})
|
||||
})
|
||||
}
|
||||
@@ -171,9 +192,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
beforeEach(() => {
|
||||
visible.value = true
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, { render: (gql) => <SpecsListBanners gql={gql} isSpecNotFound={visible} /> })
|
||||
})
|
||||
|
||||
@@ -188,9 +209,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
beforeEach(() => {
|
||||
visible.value = true
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, { render: (gql) => <SpecsListBanners gql={gql} isOffline={visible} /> })
|
||||
})
|
||||
@@ -208,9 +229,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
beforeEach(() => {
|
||||
visible.value = true
|
||||
refetchCallback = cy.stub()
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, { render: (gql) => <SpecsListBanners gql={gql} onRefetchFailedCloudData={refetchCallback} isFetchError={visible} /> })
|
||||
})
|
||||
@@ -234,11 +255,11 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
beforeEach(() => {
|
||||
visible.value = true
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
reconnectCallback = cy.stub(loginConnectStore, 'openLoginConnectModal')
|
||||
reconnectCallback = cy.stub(userProjectStatusStore, 'openLoginConnectModal')
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, { render: (gql) => <SpecsListBanners gql={gql} isProjectNotFound={visible} /> })
|
||||
})
|
||||
@@ -261,9 +282,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
beforeEach(() => {
|
||||
visible.value = true
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, {
|
||||
onResult: (result) => {
|
||||
@@ -277,6 +298,8 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
hasRequestedAccess: false,
|
||||
},
|
||||
savedState: {},
|
||||
currentTestingType: 'e2e',
|
||||
config: {},
|
||||
}
|
||||
},
|
||||
render: (gql) => <SpecsListBanners gql={gql} isProjectUnauthorized={visible} />,
|
||||
@@ -294,9 +317,9 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
beforeEach(() => {
|
||||
visible.value = true
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
userProjectStatusStore.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, {
|
||||
onResult: (result) => {
|
||||
@@ -310,6 +333,8 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
hasRequestedAccess: true,
|
||||
},
|
||||
savedState: {},
|
||||
currentTestingType: 'e2e',
|
||||
config: {},
|
||||
}
|
||||
},
|
||||
render: (gql) => <SpecsListBanners gql={gql} isProjectUnauthorized={visible} hasRequestedAccess />,
|
||||
@@ -408,4 +433,87 @@ describe('<SpecsListBanners />', { viewportHeight: 260 }, () => {
|
||||
|
||||
validateSmartNotificationBehaviors(BannerIds.ACI_082022_RECORD, 'record-banner', gql)
|
||||
})
|
||||
|
||||
describe('component testing', () => {
|
||||
const gql: Partial<SpecsListBannersFragment> = {
|
||||
cloudViewer: {
|
||||
...CloudUserStubs.me,
|
||||
firstOrganization: {
|
||||
__typename: 'CloudOrganizationConnection',
|
||||
nodes: [{ __typename: 'CloudOrganization', id: '987' }],
|
||||
},
|
||||
},
|
||||
currentProject: {
|
||||
__typename: 'CurrentProject',
|
||||
id: 'abc123',
|
||||
title: 'my-test-project',
|
||||
currentTestingType: 'e2e',
|
||||
projectId: 'abcd',
|
||||
cloudProject: {
|
||||
...CloudProjectStubs.componentProject,
|
||||
runs: {
|
||||
__typename: 'CloudRunConnection',
|
||||
nodes: [{ __typename: 'CloudRun', id: 111 }],
|
||||
},
|
||||
},
|
||||
config: {
|
||||
component: {},
|
||||
},
|
||||
} as any,
|
||||
wizard: {
|
||||
__typename: 'Wizard',
|
||||
framework: {
|
||||
id: 'react',
|
||||
name: 'React',
|
||||
type: 'react',
|
||||
} as any,
|
||||
bundler: {
|
||||
id: 'bundler',
|
||||
name: 'webpack',
|
||||
},
|
||||
},
|
||||
}
|
||||
let userProjectStatusStore: UserProjectStatusStore
|
||||
|
||||
beforeEach(() => {
|
||||
cy.gqlStub.Query.currentProject = gql.currentProject as any
|
||||
cy.gqlStub.Query.cloudViewer = gql.cloudViewer as any
|
||||
cy.gqlStub.Query.wizard = gql.wizard as any
|
||||
|
||||
userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isMemberOfOrganization', true)
|
||||
userProjectStatusStore.setProjectFlag('isProjectConnected', true)
|
||||
userProjectStatusStore.setProjectFlag('hasDetectedCtFramework', true)
|
||||
userProjectStatusStore.setProjectFlag('isCTConfigured', false)
|
||||
userProjectStatusStore.setTestingType('e2e')
|
||||
|
||||
cy.mountFragment(SpecsListBannersFragmentDoc, {
|
||||
render: (gqlVal) => <SpecsListBanners gql={gqlVal} />,
|
||||
})
|
||||
})
|
||||
|
||||
validateBaseRender()
|
||||
validateCloseControl()
|
||||
validateSmartNotificationBehaviors(BannerIds.CT_052023_AVAILABLE, 'component-testing-banner', gql)
|
||||
|
||||
it('should not render when another smart banner has been dismissed within two days', () => {
|
||||
userProjectStatusStore.setBannersState({
|
||||
[BannerIds.ACI_082022_CONNECT_PROJECT]: {
|
||||
dismissed: Date.now() - interval('3 days'),
|
||||
},
|
||||
})
|
||||
|
||||
cy.findByTestId('component-testing-banner').should('be.visible').then(() => {
|
||||
userProjectStatusStore.setBannersState({
|
||||
[BannerIds.ACI_082022_CONNECT_PROJECT]: {
|
||||
dismissed: Date.now() - interval('1 day'),
|
||||
},
|
||||
})
|
||||
|
||||
cy.findByTestId('component-testing-banner').should('not.exist')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
:prefix-icon="ConnectIcon"
|
||||
class="mt-[24px]"
|
||||
data-cy="reconnect-button"
|
||||
@click="loginConnectStore.openLoginConnectModal({utmMedium: 'Tests Tab'})"
|
||||
@click="userProjectStatusStore.openLoginConnectModal({utmMedium: 'Tests Tab'})"
|
||||
>
|
||||
{{ t('runs.errors.notFound.button') }}
|
||||
</Button>
|
||||
@@ -112,10 +112,13 @@
|
||||
</Alert>
|
||||
|
||||
<component
|
||||
:is="bannerToShow"
|
||||
v-else-if="isBannerAllowed && bannerToShow"
|
||||
:is="bannerComponentToShow"
|
||||
v-else-if="bannerComponentToShow"
|
||||
:has-banner-been-shown="hasCurrentBannerBeenShown"
|
||||
:cohort-option="currentCohortOption.cohort"
|
||||
:framework="ctFramework"
|
||||
:bundler="ctBundler"
|
||||
:machine-id="props.gql.machineId"
|
||||
/>
|
||||
</template>
|
||||
|
||||
@@ -135,15 +138,15 @@ import RequestAccessButton from './RequestAccessButton.vue'
|
||||
import { gql } from '@urql/vue'
|
||||
import { SpecsListBannersFragment, SpecsListBanners_CheckCloudOrgMembershipDocument } from '../generated/graphql'
|
||||
import { AllowedState, BannerIds } from '@packages/types'
|
||||
import { LoginBanner, CreateOrganizationBanner, ConnectProjectBanner, RecordBanner } from './banners'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { LoginBanner, ComponentTestingAvailableBanner, CreateOrganizationBanner, ConnectProjectBanner, RecordBanner } from './banners'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import { usePromptManager } from '@packages/frontend-shared/src/gql-components/composables/usePromptManager'
|
||||
import { CohortConfig, CohortOption, useCohorts } from '@packages/frontend-shared/src/gql-components/composables/useCohorts'
|
||||
import { useSubscription } from '../graphql'
|
||||
|
||||
const route = useRoute()
|
||||
const { t } = useI18n()
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
gql`
|
||||
fragment SpecsListBanners on Query {
|
||||
@@ -163,6 +166,21 @@ fragment SpecsListBanners on Query {
|
||||
id
|
||||
projectId
|
||||
savedState
|
||||
currentTestingType
|
||||
config
|
||||
}
|
||||
machineId
|
||||
wizard {
|
||||
framework {
|
||||
id
|
||||
name
|
||||
icon
|
||||
type
|
||||
}
|
||||
bundler {
|
||||
id
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
@@ -203,13 +221,12 @@ const showFetchError = ref(props.isFetchError)
|
||||
const showProjectNotFound = ref(props.isProjectNotFound)
|
||||
const showProjectRequestAccess = ref(props.isProjectUnauthorized)
|
||||
|
||||
const isBannerAllowed = ref(false)
|
||||
|
||||
const bannerIds = {
|
||||
isLoggedOut: BannerIds.ACI_082022_LOGIN,
|
||||
needsOrgConnect: BannerIds.ACI_082022_CREATE_ORG,
|
||||
needsProjectConnect: BannerIds.ACI_082022_CONNECT_PROJECT,
|
||||
needsRecordedRun: BannerIds.ACI_082022_RECORD,
|
||||
isComponentTestingCandidate: BannerIds.CT_052023_AVAILABLE,
|
||||
} as const
|
||||
|
||||
watch(
|
||||
@@ -223,32 +240,30 @@ watch(
|
||||
},
|
||||
)
|
||||
|
||||
const cloudData = computed(() => ([props.gql.cloudViewer, props.gql.cachedUser, props.gql.currentProject] as const))
|
||||
const bannerToShow = computed(() => {
|
||||
const { getEffectiveBannerState } = usePromptManager()
|
||||
|
||||
const bannerComponentToShow = computed(() => {
|
||||
const componentsByStatus = {
|
||||
isLoggedOut: LoginBanner,
|
||||
needsOrgConnect: CreateOrganizationBanner,
|
||||
needsProjectConnect: ConnectProjectBanner,
|
||||
needsRecordedRun: RecordBanner,
|
||||
isComponentTestingCandidate: ComponentTestingAvailableBanner,
|
||||
}
|
||||
|
||||
return componentsByStatus[loginConnectStore.userStatus] ?? null
|
||||
const bannerStateToShow = getEffectiveBannerState('specsListBanner')
|
||||
|
||||
return bannerStateToShow ? componentsByStatus[bannerStateToShow] : null
|
||||
})
|
||||
|
||||
const hasCurrentBannerBeenShown = computed(() => {
|
||||
const bannerStateToShow = getEffectiveBannerState('specsListBanner')
|
||||
const bannersState = (props.gql.currentProject?.savedState as AllowedState)?.banners
|
||||
const bannerId = bannerStateToShow && bannerIds[bannerStateToShow]
|
||||
|
||||
return !!bannersState?._disabled || !!bannersState?.[bannerIds[loginConnectStore.userStatus]]?.lastShown
|
||||
return !!bannersState?._disabled || (!!bannerId && !!bannersState?.[bannerId]?.lastShown)
|
||||
})
|
||||
|
||||
const { isAllowedFeature } = usePromptManager()
|
||||
|
||||
watch(cloudData, () => {
|
||||
// when cloud data updates, recheck if banner is allowed
|
||||
isBannerAllowed.value = isAllowedFeature('specsListBanner')
|
||||
},
|
||||
{ immediate: true })
|
||||
|
||||
type BannerKeys = keyof typeof BannerIds
|
||||
type BannerId = typeof BannerIds[BannerKeys]
|
||||
type BannerCohortOptions = Partial<Record<BannerId, CohortOption[]>>
|
||||
@@ -280,11 +295,21 @@ const getCohortForBanner = (bannerId: BannerId): Ref<CohortOption | undefined> =
|
||||
}
|
||||
|
||||
const currentCohortOption = computed(() => {
|
||||
if (!bannerCohortOptions[bannerIds[loginConnectStore.userStatus]]) {
|
||||
if (!bannerCohortOptions[bannerIds[userProjectStatusStore.cloudStatus]]) {
|
||||
return { cohort: null }
|
||||
}
|
||||
|
||||
return reactive({ cohort: getCohortForBanner(bannerIds[loginConnectStore.userStatus]) })
|
||||
return reactive({ cohort: getCohortForBanner(bannerIds[userProjectStatusStore.cloudStatus]) })
|
||||
})
|
||||
|
||||
const ctFramework = computed(() => {
|
||||
return {
|
||||
name: props.gql.wizard?.framework?.name,
|
||||
type: props.gql.wizard?.framework?.type,
|
||||
icon: props.gql.wizard?.framework?.icon,
|
||||
}
|
||||
})
|
||||
|
||||
const ctBundler = computed(() => props.gql.wizard?.bundler?.name)
|
||||
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
import { defaultMessages } from '@cy/i18n'
|
||||
import ComponentTestingAvailableBanner from './ComponentTestingAvailableBanner.vue'
|
||||
import { TrackedBanner_RecordBannerSeenDocument, TrackedBanner_SetProjectStateDocument } from '../../generated/graphql'
|
||||
import type Sinon from 'sinon'
|
||||
|
||||
const frameworks = [
|
||||
{ name: 'React', type: 'react' },
|
||||
{ name: 'Create React App', type: 'reactscripts' },
|
||||
{ name: 'Nuxt.js (v2)', type: 'nuxtjs' },
|
||||
{ name: 'Vue', type: 'vue3' },
|
||||
{ name: 'Angular', type: 'angular' },
|
||||
{ name: 'Next.js', type: 'nextjs' },
|
||||
{ name: 'Svelte.js', type: 'svelte' },
|
||||
]
|
||||
|
||||
describe('<ComponentTestingBanner />', { viewportWidth: 1200 }, () => {
|
||||
it('should render expected content', () => {
|
||||
cy.mount(<ComponentTestingAvailableBanner hasBannerBeenShown={true} framework={frameworks[0]} machineId="abc" />)
|
||||
})
|
||||
|
||||
frameworks.map((framework) => {
|
||||
it(`should render expected content for ${framework.name}`, () => {
|
||||
cy.mount(
|
||||
<ComponentTestingAvailableBanner hasBannerBeenShown={true} framework={framework} machineId="abc" />,
|
||||
)
|
||||
|
||||
cy.findByTestId('alert-prefix-icon').should('be.visible')
|
||||
cy.contains(defaultMessages.specPage.banners.ct.title.replace('{0}', framework.name)).should('be.visible')
|
||||
})
|
||||
})
|
||||
|
||||
context('events', () => {
|
||||
beforeEach(() => {
|
||||
const recordEvent = cy.stub().as('recordEvent')
|
||||
const setPrefs = cy.stub().as('setPrefs')
|
||||
|
||||
cy.stubMutationResolver(TrackedBanner_RecordBannerSeenDocument, (defineResult, event) => {
|
||||
recordEvent(event)
|
||||
|
||||
return defineResult({ recordEvent: true })
|
||||
})
|
||||
|
||||
cy.stubMutationResolver(TrackedBanner_SetProjectStateDocument, (defineResult, event) => {
|
||||
setPrefs(event)
|
||||
|
||||
return defineResult({ __typename: 'Mutation', setPreferences: { __typename: 'Query' } as any })
|
||||
})
|
||||
})
|
||||
|
||||
it('should record expected event on mount', () => {
|
||||
cy.mount(
|
||||
<ComponentTestingAvailableBanner hasBannerBeenShown={false} framework={frameworks[0]} machineId="abc" />,
|
||||
)
|
||||
|
||||
cy.get('@recordEvent').should('have.been.calledWith', {
|
||||
campaign: 'CT Available',
|
||||
medium: 'Specs CT Available Banner',
|
||||
messageId: Cypress.sinon.match.string,
|
||||
cohort: null,
|
||||
})
|
||||
})
|
||||
|
||||
it('should not record event on mount if already shown', () => {
|
||||
cy.mount(
|
||||
<ComponentTestingAvailableBanner hasBannerBeenShown={true} framework={frameworks[0]} machineId="abc" />,
|
||||
)
|
||||
|
||||
cy.get('@recordEvent').should('not.have.been.called')
|
||||
})
|
||||
|
||||
it('should record dismissal event when clicking survey link', () => {
|
||||
cy.mount(
|
||||
<ComponentTestingAvailableBanner hasBannerBeenShown={true} framework={frameworks[0]} machineId="abc" />,
|
||||
)
|
||||
|
||||
cy.findByTestId('survey-link').click()
|
||||
|
||||
cy.get('@setPrefs').should('have.been.calledTwice')
|
||||
cy.get('@setPrefs').should(($stub) => {
|
||||
const arg = ($stub as unknown as Sinon.SinonStub).getCall(1).args[0]
|
||||
|
||||
expect(arg.value).to.contain('ct_052023_available')
|
||||
expect(arg.value).to.contain('dismissed')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<TrackedBanner
|
||||
:banner-id="bannerId"
|
||||
data-cy="component-testing-banner"
|
||||
status="promo"
|
||||
:title="title"
|
||||
class="mb-[16px]"
|
||||
dismissible
|
||||
:icon="iconFromType"
|
||||
:has-banner-been-shown="hasBannerBeenShown"
|
||||
:event-data="{
|
||||
campaign: 'CT Available',
|
||||
medium: 'Specs CT Available Banner',
|
||||
cohort: ''
|
||||
}"
|
||||
>
|
||||
<template #default="{ dismiss, bannerInstanceId }">
|
||||
<p class="pb-[16px] text-gray-700">
|
||||
{{ t('specPage.banners.ct.content') }}
|
||||
</p>
|
||||
<div class="flex flex-row items-center text-sm border-t border-gray-100 pt-[8px] -mb-[8px] -mx-[16px] px-[16px]">
|
||||
<Button
|
||||
data-cy="setup-button"
|
||||
variant="outline-indigo"
|
||||
size="32"
|
||||
class="mr-[16px]"
|
||||
@click="handlePrimary(bannerInstanceId)"
|
||||
>
|
||||
{{ t('specPage.banners.ct.primaryAction') }}
|
||||
</Button>
|
||||
<ExternalLink
|
||||
data-cy="docs-link"
|
||||
:href="docsLink"
|
||||
@click="handleDocsClick(bannerInstanceId)"
|
||||
>
|
||||
<span class="font-medium">{{ t('specPage.banners.ct.secondaryAction') }}</span>
|
||||
</ExternalLink>
|
||||
<span class="flex-grow" />
|
||||
<ExternalLink
|
||||
data-cy="survey-link"
|
||||
:href="surveyLink"
|
||||
@click="handleSurveyClick(bannerInstanceId, dismiss)"
|
||||
>
|
||||
<span class="font-medium">{{ t('specPage.banners.ct.dismissAction') }}</span>
|
||||
</ExternalLink>
|
||||
</div>
|
||||
</template>
|
||||
</TrackedBanner>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { gql, useMutation } from '@urql/vue'
|
||||
import { useI18n } from '@cy/i18n'
|
||||
import TrackedBanner from './TrackedBanner.vue'
|
||||
import { BannerIds } from '@packages/types'
|
||||
import Button from '@cypress-design/vue-button'
|
||||
import { FrameworkBundlerLogos } from '@packages/frontend-shared/src/utils/icons'
|
||||
import ExternalLink from '@cy/gql-components/ExternalLink.vue'
|
||||
import { getUrlWithParams } from '@packages/frontend-shared/src/utils/getUrlWithParams'
|
||||
import { SwitchToComponentTestingDocument, ComponentTestingAvailable_RecordEventDocument } from '../../generated/graphql'
|
||||
|
||||
gql`
|
||||
mutation SwitchToComponentTesting {
|
||||
switchTestingTypeAndRelaunch(testingType: component)
|
||||
}
|
||||
`
|
||||
|
||||
gql`
|
||||
mutation ComponentTestingAvailable_RecordEvent($campaign: String!, $messageId: String!, $payload: String!) {
|
||||
recordEvent(campaign: $campaign, medium: "CT Available Banner", messageId: $messageId, includeMachineId: true, payload: $payload)
|
||||
}
|
||||
`
|
||||
|
||||
const switchToCtAndRelaunch = useMutation(SwitchToComponentTestingDocument)
|
||||
const recordEvent = useMutation(ComponentTestingAvailable_RecordEventDocument)
|
||||
|
||||
const props = defineProps<{
|
||||
hasBannerBeenShown: boolean
|
||||
framework: {
|
||||
name: string
|
||||
icon?: string | null
|
||||
type: string
|
||||
}
|
||||
bundler?: 'vite' | 'webpack'
|
||||
machineId: string | undefined
|
||||
}>()
|
||||
|
||||
const { t } = useI18n()
|
||||
const bannerId = BannerIds.CT_052023_AVAILABLE
|
||||
|
||||
const title = computed(() => t('specPage.banners.ct.title', [props.framework?.name]))
|
||||
const iconFromType = computed(() => FrameworkBundlerLogos[props.framework?.type])
|
||||
|
||||
const handlePrimary = async (bannerInstanceId: string) => {
|
||||
await recordCampaignEvent(bannerInstanceId, 'Quick setup')
|
||||
|
||||
await switchToCtAndRelaunch.executeMutation({})
|
||||
}
|
||||
|
||||
const handleDocsClick = async (bannerInstanceId: string) => {
|
||||
await recordCampaignEvent(bannerInstanceId, 'Read our guide')
|
||||
}
|
||||
|
||||
const handleSurveyClick = async (bannerInstanceId: string, dismiss: () => Promise<void>) => {
|
||||
await recordCampaignEvent(bannerInstanceId, 'Give feedback')
|
||||
|
||||
await dismiss()
|
||||
}
|
||||
|
||||
const recordCampaignEvent = async (bannerInstanceId: string, campaign: string) => {
|
||||
await recordEvent.executeMutation({
|
||||
campaign,
|
||||
messageId: bannerInstanceId,
|
||||
payload: JSON.stringify({
|
||||
framework: props.framework.name,
|
||||
bundler: props.bundler,
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
const docsLink = computed(() => {
|
||||
return getUrlWithParams({
|
||||
url: 'https://on.cypress.io/component',
|
||||
params: {
|
||||
utm_medium: 'CT Available Banner',
|
||||
utm_campaign: 'Read the Docs',
|
||||
utm_content: [props.framework.name, props.bundler].filter((val) => !!val).join('-'),
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
const surveyLink = computed(() => {
|
||||
return getUrlWithParams({
|
||||
url: 'https://on.cypress.io/component-survey-q2-23',
|
||||
params: {
|
||||
utm_medium: 'CT Available Banner',
|
||||
utm_campaign: 'Give feedback',
|
||||
utm_content: [props.framework.name, props.bundler].filter((val) => !!val).join('-'),
|
||||
machine_id: props.machineId ?? '',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
</script>
|
||||
@@ -37,8 +37,8 @@ import Button from '@cy/components/Button.vue'
|
||||
import TrackedBanner from './TrackedBanner.vue'
|
||||
import type { CohortOption } from '@packages/frontend-shared/src/gql-components/composables/useCohorts'
|
||||
import { BannerIds } from '@packages/types'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
const { openLoginConnectModal } = useLoginConnectStore()
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
const { openLoginConnectModal } = useUserProjectStatusStore()
|
||||
|
||||
defineProps<{
|
||||
hasBannerBeenShown: boolean
|
||||
|
||||
@@ -37,8 +37,8 @@ import Button from '@cy/components/Button.vue'
|
||||
import TrackedBanner from './TrackedBanner.vue'
|
||||
import type { CohortOption } from '@packages/frontend-shared/src/gql-components/composables/useCohorts'
|
||||
import { BannerIds } from '@packages/types'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
const { openLoginConnectModal } = useLoginConnectStore()
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
const { openLoginConnectModal } = useUserProjectStatusStore()
|
||||
|
||||
defineProps<{
|
||||
hasBannerBeenShown: boolean
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
v-model="isAlertDisplayed"
|
||||
v-bind="$attrs"
|
||||
>
|
||||
<slot />
|
||||
<slot
|
||||
:dismiss="dismiss"
|
||||
:bannerInstanceId="bannerInstanceId"
|
||||
/>
|
||||
</Alert>
|
||||
</template>
|
||||
|
||||
@@ -71,22 +74,22 @@ watchEffect(() => {
|
||||
}
|
||||
})
|
||||
|
||||
watch(() => isAlertDisplayed.value, (newVal) => {
|
||||
watch(() => isAlertDisplayed.value, async (newVal) => {
|
||||
if (!newVal) {
|
||||
updateBannerState('dismissed')
|
||||
await updateBannerState('dismissed')
|
||||
}
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
updateBannerState('lastShown')
|
||||
onMounted(async () => {
|
||||
await updateBannerState('lastShown')
|
||||
})
|
||||
|
||||
function updateBannerState (field: 'lastShown' | 'dismissed') {
|
||||
async function updateBannerState (field: 'lastShown' | 'dismissed') {
|
||||
const savedBannerState = stateQuery.data.value?.currentProject?.savedState?.banners ?? {}
|
||||
|
||||
set(savedBannerState, [props.bannerId, field], Date.now())
|
||||
|
||||
setStateMutation.executeMutation({ value: JSON.stringify({ banners: savedBannerState }) })
|
||||
await setStateMutation.executeMutation({ value: JSON.stringify({ banners: savedBannerState }) })
|
||||
}
|
||||
|
||||
function recordBannerShown ({ campaign, medium, cohort }: EventData): void {
|
||||
@@ -98,4 +101,8 @@ function recordBannerShown ({ campaign, medium, cohort }: EventData): void {
|
||||
})
|
||||
}
|
||||
|
||||
async function dismiss (): Promise<void> {
|
||||
await updateBannerState('dismissed')
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@@ -5,3 +5,5 @@ export { default as CreateOrganizationBanner } from './CreateOrganizationBanner.
|
||||
export { default as ConnectProjectBanner } from './ConnectProjectBanner.vue'
|
||||
|
||||
export { default as RecordBanner } from './RecordBanner.vue'
|
||||
|
||||
export { default as ComponentTestingAvailableBanner } from './ComponentTestingAvailableBanner.vue'
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
const config = require('@packages/frontend-shared/tailwind.config.cjs')
|
||||
|
||||
config.content.files = [
|
||||
'./src/**/*.{vue,js,ts,jsx,tsx,scss,css}', //
|
||||
'../frontend-shared/src/**/*.{vue,js,ts,jsx,tsx,scss,css}',
|
||||
],
|
||||
config.content.files.push('../frontend-shared/src/**/*.{vue,js,ts,jsx,tsx,scss,css}')
|
||||
|
||||
module.exports = config
|
||||
|
||||
@@ -5,11 +5,13 @@ const pkg = require('@packages/root')
|
||||
|
||||
const debug = Debug('cypress:data-context:actions:EventCollectorActions')
|
||||
|
||||
interface CollectableEvent {
|
||||
interface CollectibleEvent {
|
||||
campaign: string
|
||||
messageId: string
|
||||
medium: string
|
||||
cohort?: string
|
||||
payload?: object
|
||||
machineId?: string
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,23 +25,29 @@ export class EventCollectorActions {
|
||||
debug('Using %s environment for Event Collection', cloudEnv)
|
||||
}
|
||||
|
||||
async recordEvent (event: CollectableEvent): Promise<boolean> {
|
||||
async recordEvent (event: CollectibleEvent, includeMachineId: boolean): Promise<boolean> {
|
||||
try {
|
||||
const cloudUrl = this.ctx.cloud.getCloudUrl(cloudEnv)
|
||||
const eventUrl = includeMachineId ? `${cloudUrl}/machine-collect` : `${cloudUrl}/anon-collect`
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'x-cypress-version': pkg.version,
|
||||
}
|
||||
|
||||
if (includeMachineId) {
|
||||
event.machineId = (await this.ctx.coreData.machineId) || undefined
|
||||
}
|
||||
|
||||
await this.ctx.util.fetch(
|
||||
`${cloudUrl}/anon-collect`,
|
||||
eventUrl,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-cypress-version': pkg.version,
|
||||
},
|
||||
headers,
|
||||
body: JSON.stringify(event),
|
||||
},
|
||||
)
|
||||
|
||||
debug(`Recorded event: %o`, event)
|
||||
debug(`Recorded %s event: %o`, includeMachineId ? 'machine-linked' : 'anonymous', event)
|
||||
|
||||
return true
|
||||
} catch (err) {
|
||||
|
||||
@@ -100,6 +100,14 @@ export class WizardActions {
|
||||
|
||||
this.resetWizard()
|
||||
|
||||
await this.initializeFramework()
|
||||
}
|
||||
|
||||
async initializeFramework () {
|
||||
if (!this.ctx.currentProject) {
|
||||
return
|
||||
}
|
||||
|
||||
const detected = await detectFramework(this.ctx.currentProject, this.ctx.coreData.wizard.frameworks)
|
||||
|
||||
debug('detected %o', detected)
|
||||
|
||||
@@ -7,6 +7,7 @@ import type { SocketIONamespace, SocketIOServer } from '@packages/socket'
|
||||
import type { Server } from 'http'
|
||||
import type { ErrorWrapperSource } from '@packages/errors'
|
||||
import type { GitDataSource, LegacyCypressConfigJson } from '../sources'
|
||||
import { machineId as getMachineId } from 'node-machine-id'
|
||||
|
||||
export type Maybe<T> = T | null | undefined
|
||||
|
||||
@@ -123,6 +124,7 @@ export interface CoreDataShape {
|
||||
cliBrowser: string | null
|
||||
cliTestingType: string | null
|
||||
activeBrowser: FoundBrowser | null
|
||||
machineId: Promise<string | null>
|
||||
machineBrowsers: Promise<FoundBrowser[]> | null
|
||||
allBrowsers: Promise<FoundBrowser[]> | null
|
||||
servers: {
|
||||
@@ -166,6 +168,7 @@ export function makeCoreData (modeOptions: Partial<AllModeOptions> = {}): CoreDa
|
||||
servers: {},
|
||||
cliBrowser: modeOptions.browser ?? null,
|
||||
cliTestingType: modeOptions.testingType ?? null,
|
||||
machineId: machineId(),
|
||||
machineBrowsers: null,
|
||||
allBrowsers: null,
|
||||
hasInitializedMode: null,
|
||||
@@ -233,4 +236,12 @@ export function makeCoreData (modeOptions: Partial<AllModeOptions> = {}): CoreDa
|
||||
testsForRunResults: {},
|
||||
},
|
||||
}
|
||||
|
||||
async function machineId (): Promise<string | null> {
|
||||
try {
|
||||
return await getMachineId()
|
||||
} catch (error) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import semver from 'semver'
|
||||
const debug = Debug('cypress:data-context:sources:VersionsDataSource')
|
||||
|
||||
const pkg = require('@packages/root')
|
||||
const nmi = require('node-machine-id')
|
||||
|
||||
interface Version {
|
||||
id: string
|
||||
@@ -131,7 +130,7 @@ export class VersionsDataSource {
|
||||
return pkg.version
|
||||
}
|
||||
|
||||
const id = await VersionsDataSource.machineId()
|
||||
const id = (await this.ctx.coreData.machineId) || undefined
|
||||
|
||||
const manifestHeaders: HeadersInit = {
|
||||
'Content-Type': 'application/json',
|
||||
@@ -226,14 +225,6 @@ export class VersionsDataSource {
|
||||
}
|
||||
}
|
||||
|
||||
private static async machineId (): Promise<string | undefined> {
|
||||
try {
|
||||
return await nmi.machineId()
|
||||
} catch (error) {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
|
||||
private isFulfilled<R> (item: PromiseSettledResult<R>): item is PromiseFulfilledResult<R> {
|
||||
return item.status === 'fulfilled'
|
||||
}
|
||||
|
||||
@@ -24,13 +24,13 @@ describe('EventCollectorActions', () => {
|
||||
})
|
||||
|
||||
context('.recordEvent', () => {
|
||||
it('makes expected request', async () => {
|
||||
it('makes expected request for anonymous event', async () => {
|
||||
await actions.recordEvent({
|
||||
campaign: 'abc',
|
||||
medium: 'def',
|
||||
messageId: 'ghi',
|
||||
cohort: '123',
|
||||
})
|
||||
}, false)
|
||||
|
||||
expect(ctx.util.fetch).to.have.been.calledOnceWith(
|
||||
sinon.match(/anon-collect$/), // Verify URL ends with expected 'anon-collect' path
|
||||
@@ -38,10 +38,26 @@ describe('EventCollectorActions', () => {
|
||||
)
|
||||
})
|
||||
|
||||
it('makes expected request for machine-linked event', async () => {
|
||||
ctx.coreData.machineId = Promise.resolve('xyz')
|
||||
|
||||
await actions.recordEvent({
|
||||
campaign: 'abc',
|
||||
medium: 'def',
|
||||
messageId: 'ghi',
|
||||
cohort: '123',
|
||||
}, true)
|
||||
|
||||
expect(ctx.util.fetch).to.have.been.calledOnceWith(
|
||||
sinon.match(/machine-collect$/), // Verify URL ends with expected 'machine-collect' path
|
||||
{ method: 'POST', headers: { 'Content-Type': 'application/json', 'x-cypress-version': pkg.version }, body: '{"campaign":"abc","medium":"def","messageId":"ghi","cohort":"123","machineId":"xyz"}' },
|
||||
)
|
||||
})
|
||||
|
||||
it('resolve true if request succeeds', async () => {
|
||||
(ctx.util.fetch as SinonStub).resolves({} as any)
|
||||
|
||||
const result = await actions.recordEvent({ campaign: '', medium: '', messageId: '', cohort: '' })
|
||||
const result = await actions.recordEvent({ campaign: '', medium: '', messageId: '', cohort: '' }, false)
|
||||
|
||||
expect(result).to.eql(true)
|
||||
})
|
||||
@@ -49,7 +65,7 @@ describe('EventCollectorActions', () => {
|
||||
it('resolves false if request fails', async () => {
|
||||
(ctx.util.fetch as SinonStub).rejects({} as any)
|
||||
|
||||
const result = await actions.recordEvent({ campaign: '', medium: '', messageId: '', cohort: '' })
|
||||
const result = await actions.recordEvent({ campaign: '', medium: '', messageId: '', cohort: '' }, false)
|
||||
|
||||
expect(result).to.eql(false)
|
||||
})
|
||||
|
||||
@@ -9,12 +9,10 @@ import { createTestDataContext } from '../helper'
|
||||
import { CYPRESS_REMOTE_MANIFEST_URL, NPM_CYPRESS_REGISTRY_URL } from '@packages/types'
|
||||
|
||||
const pkg = require('@packages/root')
|
||||
const nmi = require('node-machine-id')
|
||||
|
||||
describe('VersionsDataSource', () => {
|
||||
context('.versions', () => {
|
||||
let ctx: DataContext
|
||||
let nmiStub: sinon.SinonStub
|
||||
let fetchStub: sinon.SinonStub
|
||||
let isDependencyInstalledStub: sinon.SinonStub
|
||||
let mockNow: Date = new Date()
|
||||
@@ -33,6 +31,7 @@ describe('VersionsDataSource', () => {
|
||||
},
|
||||
}
|
||||
|
||||
ctx.coreData.machineId = Promise.resolve('abcd123')
|
||||
ctx.coreData.currentProject = '/abc'
|
||||
ctx.coreData.currentTestingType = 'e2e'
|
||||
|
||||
@@ -41,7 +40,6 @@ describe('VersionsDataSource', () => {
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
nmiStub = sinon.stub(nmi, 'machineId')
|
||||
sinon.stub(ctx.util, 'fetch').callsFake(fetchStub)
|
||||
sinon.stub(ctx.util, 'isDependencyInstalled').callsFake(isDependencyInstalledStub)
|
||||
sinon.stub(os, 'platform').returns('darwin')
|
||||
@@ -54,8 +52,6 @@ describe('VersionsDataSource', () => {
|
||||
})
|
||||
|
||||
it('loads the manifest for the latest version with all headers and queries npm for release dates', async () => {
|
||||
nmiStub.resolves('abcd123')
|
||||
|
||||
fetchStub
|
||||
.withArgs(CYPRESS_REMOTE_MANIFEST_URL, {
|
||||
headers: sinon.match({
|
||||
@@ -107,7 +103,7 @@ describe('VersionsDataSource', () => {
|
||||
it('resets telemetry data triggering a new call to get the latest version', async () => {
|
||||
const currentCypressVersion = pkg.version
|
||||
|
||||
nmiStub.rejects('Error while obtaining machine id')
|
||||
ctx.coreData.machineId = Promise.resolve(null)
|
||||
ctx.coreData.currentTestingType = 'component'
|
||||
|
||||
fetchStub
|
||||
@@ -140,8 +136,6 @@ describe('VersionsDataSource', () => {
|
||||
})
|
||||
|
||||
it('handles errors fetching version data', async () => {
|
||||
nmiStub.resolves('abcd123')
|
||||
|
||||
fetchStub
|
||||
.withArgs(CYPRESS_REMOTE_MANIFEST_URL, {
|
||||
headers: sinon.match({
|
||||
@@ -167,8 +161,6 @@ describe('VersionsDataSource', () => {
|
||||
})
|
||||
|
||||
it('handles invalid response errors', async () => {
|
||||
nmiStub.resolves('abcd123')
|
||||
|
||||
fetchStub
|
||||
.withArgs(CYPRESS_REMOTE_MANIFEST_URL, {
|
||||
headers: sinon.match({
|
||||
|
||||
@@ -36,22 +36,14 @@
|
||||
</head>
|
||||
<body><pre><span style="color:#e05561">We detected that the Chromium Renderer process just crashed.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"><span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">This is the equivalent to seeing the 'sad face' when Chrome dies.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">This can happen for a number of different reasons.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"><span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">This can happen for a number of different reasons:<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">If you're running lots of tests on a memory intense application.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try increasing the CPU/memory on the machine you're running on.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try enabling <span style="color:#e5e510">experimentalMemoryManagement<span style="color:#e05561"> in your config file.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try lowering <span style="color:#e5e510">numTestsKeptInMemory<span style="color:#e05561"> in your config file during 'cypress open'.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"><span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">- You wrote an endless loop and you must fix your own code<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">- You are running Docker (there is an easy fix for this: see link below)<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">- You are running lots of tests on a memory intense application.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try enabling <span style="color:#e5e510">experimentalMemoryManagement<span style="color:#e05561"> in your config file.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try lowering <span style="color:#e5e510">numTestsKeptInMemory<span style="color:#e05561"> in your config file.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">- You are running in a memory starved VM environment.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try enabling <span style="color:#e5e510">experimentalMemoryManagement<span style="color:#e05561"> in your config file.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"> - Try lowering <span style="color:#e5e510">numTestsKeptInMemory<span style="color:#e05561"> in your config file.<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">- There are problems with your GPU / GPU drivers<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">- There are browser bugs in Chromium<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">You can learn more here:<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"><span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">You can learn more including how to fix Docker here:<span style="color:#e6e6e6">
|
||||
<span style="color:#e05561"><span style="color:#e6e6e6">
|
||||
<span style="color:#e05561">https://on.cypress.io/renderer-process-crashed<span style="color:#e6e6e6"></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
|
||||
<span style="color:#e05561">https://on.cypress.io/renderer-process-crashed<span style="color:#e6e6e6"></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
|
||||
</pre></body></html>
|
||||
@@ -620,22 +620,14 @@ export const AllCypressErrors = {
|
||||
return errTemplate`\
|
||||
We detected that the Chromium Renderer process just crashed.
|
||||
|
||||
This is the equivalent to seeing the 'sad face' when Chrome dies.
|
||||
This can happen for a number of different reasons.
|
||||
|
||||
This can happen for a number of different reasons:
|
||||
If you're running lots of tests on a memory intense application.
|
||||
- Try increasing the CPU/memory on the machine you're running on.
|
||||
- Try enabling ${fmt.highlight('experimentalMemoryManagement')} in your config file.
|
||||
- Try lowering ${fmt.highlight('numTestsKeptInMemory')} in your config file during 'cypress open'.
|
||||
|
||||
- You wrote an endless loop and you must fix your own code
|
||||
- You are running Docker (there is an easy fix for this: see link below)
|
||||
- You are running lots of tests on a memory intense application.
|
||||
- Try enabling ${fmt.highlight('experimentalMemoryManagement')} in your config file.
|
||||
- Try lowering ${fmt.highlight('numTestsKeptInMemory')} in your config file.
|
||||
- You are running in a memory starved VM environment.
|
||||
- Try enabling ${fmt.highlight('experimentalMemoryManagement')} in your config file.
|
||||
- Try lowering ${fmt.highlight('numTestsKeptInMemory')} in your config file.
|
||||
- There are problems with your GPU / GPU drivers
|
||||
- There are browser bugs in Chromium
|
||||
|
||||
You can learn more including how to fix Docker here:
|
||||
You can learn more here:
|
||||
|
||||
https://on.cypress.io/renderer-process-crashed`
|
||||
},
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "6.0.3",
|
||||
"cypress-example-kitchensink": "1.16.0",
|
||||
"cypress-example-kitchensink": "1.17.1",
|
||||
"gh-pages": "5.0.0",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-clean": "0.4.0",
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
cypress/videos/*
|
||||
cypress/screenshots/*
|
||||
|
||||
components.d.ts
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@antfu/utils": "^0.3.0",
|
||||
"@cypress-design/css": "^0.11.0",
|
||||
"@cypress-design/css": "^0.13.1",
|
||||
"@graphql-typed-document-node/core": "^3.1.0",
|
||||
"@headlessui/vue": "1.4.0",
|
||||
"@iconify/json": "1.1.368",
|
||||
|
||||
|
Before Width: | Height: | Size: 788 B After Width: | Height: | Size: 788 B |
|
Before Width: | Height: | Size: 688 B After Width: | Height: | Size: 688 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 486 B After Width: | Height: | Size: 486 B |
|
Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 696 B |
@@ -23,7 +23,7 @@
|
||||
:title="title"
|
||||
:header-class="`${props.headerClass} ${canCollapse ? 'group-hocus:underline' : ''}`"
|
||||
:prefix-icon="prefix?.icon"
|
||||
:prefix-icon-class="open ? prefix?.classes + ' rotate-180' : prefix?.classes"
|
||||
:prefix-icon-class="(open && collapsible) ? prefix?.classes + ' rotate-180' : prefix?.classes"
|
||||
:suffix-icon-aria-label="props.dismissible ? t('components.alert.dismissAriaLabel') : ''"
|
||||
:suffix-icon="props.dismissible ? DeleteIcon : null"
|
||||
:suffix-button-class="classes.suffixButtonClass"
|
||||
@@ -73,7 +73,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
export type AlertStatus = 'error' | 'warning' | 'info' | 'default' | 'success'
|
||||
export type AlertStatus = 'error' | 'warning' | 'info' | 'default' | 'success' | 'promo'
|
||||
|
||||
export type AlertClasses = {
|
||||
headerClass: string
|
||||
@@ -162,6 +162,13 @@ const alertStyles: Record<AlertStatus, AlertClasses> = {
|
||||
bodyClass: 'bg-success-50',
|
||||
ring: 'hocus:ring-success-200 hocus:border-success-300',
|
||||
},
|
||||
promo: {
|
||||
headerClass: 'text-gray-900 bg-white border border-gray-100',
|
||||
suffixIconClass: 'icon-dark-gray-700',
|
||||
suffixButtonClass: 'text-gray-700',
|
||||
bodyClass: 'bg-white border-t border-gray-100',
|
||||
ring: 'hocus:ring-gray-100 hocus:border-gray-100',
|
||||
},
|
||||
}
|
||||
|
||||
const classes = computed(() => {
|
||||
|
||||
@@ -82,9 +82,9 @@ import type {
|
||||
} from '../generated/graphql'
|
||||
import Button from '@cy/components/Button.vue'
|
||||
import { useI18n } from '@cy/i18n'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
@@ -178,7 +178,7 @@ onBeforeUnmount(() => {
|
||||
})
|
||||
|
||||
const showConnectButton = computed(() => {
|
||||
return loginConnectStore.project.isConfigLoaded && loginConnectStore.userStatusMatches('needsProjectConnect')
|
||||
return userProjectStatusStore.project.isConfigLoaded && userProjectStatusStore.cloudStatusMatches('needsProjectConnect')
|
||||
})
|
||||
|
||||
const emit = defineEmits<{
|
||||
@@ -205,7 +205,7 @@ const loginMutationIsPending = computed(() => {
|
||||
})
|
||||
|
||||
const handleLoginOrContinue = async () => {
|
||||
if (loginConnectStore.user.isLoggedIn) {
|
||||
if (userProjectStatusStore.user.isLoggedIn) {
|
||||
// user is already logged in, just emit close event & return early
|
||||
emit('close')
|
||||
|
||||
@@ -244,7 +244,7 @@ const buttonText = computed(() => {
|
||||
return strings.connectProject
|
||||
}
|
||||
|
||||
if (loginConnectStore.user.isLoggedIn) {
|
||||
if (userProjectStatusStore.user.isLoggedIn) {
|
||||
return strings.continue
|
||||
}
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
-->
|
||||
|
||||
<script setup lang="ts">
|
||||
import { watchEffect } from 'vue'
|
||||
import { gql, useQuery, useSubscription } from '@urql/vue'
|
||||
import { CloudViewerAndProject_RequiredDataDocument, CloudViewerAndProject_CheckCloudOrgMembershipDocument } from '../generated/graphql'
|
||||
import { useLoginConnectStore } from '../store/login-connect-store'
|
||||
import { watchEffect, ref } from 'vue'
|
||||
import { gql, useMutation, useQuery, useSubscription } from '@urql/vue'
|
||||
import { CloudViewerAndProject_RequiredDataDocument, CloudViewerAndProject_CheckCloudOrgMembershipDocument, CloudViewerAndProject_DetectCtFrameworksDocument } from '../generated/graphql'
|
||||
import { useUserProjectStatusStore } from '../store/user-project-status-store'
|
||||
|
||||
gql`
|
||||
fragment CloudViewerAndProject on Query {
|
||||
@@ -35,7 +35,9 @@ fragment CloudViewerAndProject on Query {
|
||||
currentProject {
|
||||
id
|
||||
config
|
||||
currentTestingType
|
||||
isFullConfigReady
|
||||
isCTConfigured
|
||||
hasNonExampleSpec
|
||||
savedState
|
||||
cloudProject {
|
||||
@@ -52,6 +54,14 @@ fragment CloudViewerAndProject on Query {
|
||||
}
|
||||
}
|
||||
}
|
||||
wizard {
|
||||
framework {
|
||||
id
|
||||
name
|
||||
icon
|
||||
isDetected
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
@@ -69,7 +79,14 @@ subscription CloudViewerAndProject_CheckCloudOrgMembership {
|
||||
}
|
||||
`
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
gql`
|
||||
mutation CloudViewerAndProject_DetectCtFrameworks {
|
||||
initializeCtFrameworks
|
||||
}
|
||||
`
|
||||
|
||||
const hasDetectedFrameworks = ref(false)
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
const {
|
||||
setHasInitiallyLoaded,
|
||||
setUserFlag,
|
||||
@@ -77,18 +94,29 @@ const {
|
||||
setUserData,
|
||||
setPromptShown,
|
||||
setCypressFirstOpened,
|
||||
setTestingType,
|
||||
setBannersState,
|
||||
} = loginConnectStore
|
||||
} = userProjectStatusStore
|
||||
|
||||
useSubscription({ query: CloudViewerAndProject_CheckCloudOrgMembershipDocument })
|
||||
|
||||
const query = useQuery({ query: CloudViewerAndProject_RequiredDataDocument })
|
||||
|
||||
watchEffect(() => {
|
||||
const detectCtFrameworks = useMutation(CloudViewerAndProject_DetectCtFrameworksDocument)
|
||||
|
||||
watchEffect(async () => {
|
||||
if (!query.data.value) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!hasDetectedFrameworks.value && query.data.value.currentProject?.currentTestingType === 'e2e') {
|
||||
await detectCtFrameworks.executeMutation({})
|
||||
|
||||
hasDetectedFrameworks.value = true
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates that the CloudViewerAndProject has received its initial data response to use to set flags. It can be used
|
||||
* to detect that the app or launchpad has completed the first initialization of determining if the user is logged in,
|
||||
@@ -101,6 +129,7 @@ watchEffect(() => {
|
||||
cachedUser,
|
||||
cloudViewer,
|
||||
authState,
|
||||
wizard,
|
||||
} = query.data.value
|
||||
|
||||
const savedState = currentProject?.savedState
|
||||
@@ -119,6 +148,8 @@ watchEffect(() => {
|
||||
setBannersState(savedState.banners)
|
||||
}
|
||||
|
||||
setTestingType(currentProject?.currentTestingType ?? undefined)
|
||||
|
||||
const AUTH_STATE_ERRORS = ['AUTH_COULD_NOT_LAUNCH_BROWSER', 'AUTH_ERROR_DURING_LOGIN', 'AUTH_COULD_NOT_LAUNCH_BROWSER']
|
||||
|
||||
// 1. set user-related information in store
|
||||
@@ -140,9 +171,12 @@ watchEffect(() => {
|
||||
setProjectFlag('hasNonExampleSpec', !!currentProject?.hasNonExampleSpec)
|
||||
setProjectFlag('hasNoRecordedRuns', currentProject?.cloudProject?.__typename === 'CloudProject' && (currentProject.cloudProject?.runs?.nodes?.length ?? 0) === 0)
|
||||
|
||||
if (currentProject?.cloudProject || !loginConnectStore.user.isLoggedIn) {
|
||||
if (currentProject?.cloudProject || !userProjectStatusStore.user.isLoggedIn) {
|
||||
setProjectFlag('isProjectConnected', currentProject?.cloudProject?.__typename === 'CloudProject')
|
||||
}
|
||||
|
||||
setProjectFlag('isCTConfigured', !!currentProject?.isCTConfigured)
|
||||
setProjectFlag('hasDetectedCtFramework', wizard?.framework?.isDetected ?? false)
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
@@ -2,7 +2,7 @@ import { HeaderBar_HeaderBarContentFragmentDoc } from '../generated/graphql-test
|
||||
import HeaderBarContent from './HeaderBarContent.vue'
|
||||
import { defaultMessages } from '@cy/i18n'
|
||||
import { CloudUserStubs } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { useLoginConnectStore } from '../store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '../store/user-project-status-store'
|
||||
|
||||
const text = defaultMessages.topNav
|
||||
|
||||
@@ -297,9 +297,9 @@ describe('<HeaderBarContent />', { viewportWidth: 1000, viewportHeight: 750 }, (
|
||||
})
|
||||
|
||||
it('the logged in state is correctly presented in header', () => {
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
loginConnectStore.setUserFlag('isLoggedIn', true)
|
||||
userProjectStatusStore.setUserFlag('isLoggedIn', true)
|
||||
|
||||
const cloudViewer = {
|
||||
...CloudUserStubs.me,
|
||||
@@ -313,7 +313,7 @@ describe('<HeaderBarContent />', { viewportWidth: 1000, viewportHeight: 750 }, (
|
||||
fullName: 'Tester Test',
|
||||
}
|
||||
|
||||
loginConnectStore.setUserData(cloudViewer)
|
||||
userProjectStatusStore.setUserData(cloudViewer)
|
||||
|
||||
cy.mountFragment(HeaderBar_HeaderBarContentFragmentDoc, {
|
||||
onResult: (result) => {
|
||||
|
||||
@@ -94,18 +94,18 @@
|
||||
@clear-force-open="isForceOpenAllowed = false"
|
||||
>
|
||||
<template
|
||||
v-if="loginConnectStore.user.isLoggedIn"
|
||||
v-if="userProjectStatusStore.user.isLoggedIn"
|
||||
#login-title
|
||||
>
|
||||
<UserAvatar
|
||||
:email="loginConnectStore.userData?.email"
|
||||
:email="userProjectStatusStore.userData?.email"
|
||||
class="h-[24px] w-[24px]"
|
||||
data-cy="user-avatar-title"
|
||||
/>
|
||||
<span class="sr-only">{{ t('topNav.login.profileMenuLabel') }}</span>
|
||||
</template>
|
||||
<template
|
||||
v-if="loginConnectStore.userData"
|
||||
v-if="userProjectStatusStore.userData"
|
||||
#login-panel
|
||||
>
|
||||
<div
|
||||
@@ -114,14 +114,14 @@
|
||||
>
|
||||
<div class="border-b flex border-b-gray-100 p-[16px]">
|
||||
<UserAvatar
|
||||
:email="loginConnectStore.userData?.email"
|
||||
:email="userProjectStatusStore.userData?.email"
|
||||
class="h-[48px] mr-[16px] w-[48px]"
|
||||
data-cy="user-avatar-panel"
|
||||
/>
|
||||
<div>
|
||||
<span class="text-gray-800">{{ loginConnectStore.userData?.fullName }}</span>
|
||||
<span class="text-gray-800">{{ userProjectStatusStore.userData?.fullName }}</span>
|
||||
<br>
|
||||
<span class="text-gray-600">{{ loginConnectStore.userData?.email }}</span>
|
||||
<span class="text-gray-600">{{ userProjectStatusStore.userData?.email }}</span>
|
||||
<br>
|
||||
<ExternalLink
|
||||
href="https://on.cypress.io/dashboard/profile"
|
||||
@@ -141,10 +141,10 @@
|
||||
</div>
|
||||
</template>
|
||||
</TopNav>
|
||||
<div v-if="!loginConnectStore.user.isLoggedIn">
|
||||
<div v-if="!userProjectStatusStore.user.isLoggedIn">
|
||||
<button
|
||||
class="flex text-gray-600 items-center group focus:outline-transparent"
|
||||
@click="loginConnectStore.openLoginConnectModal({ utmMedium: 'Nav' })"
|
||||
@click="userProjectStatusStore.openLoginConnectModal({ utmMedium: 'Nav' })"
|
||||
>
|
||||
<i-cy-profile_x16
|
||||
class="h-[16px] mr-[8px] w-[16px] block icon-dark-gray-500 icon-light-gray-100 group-hocus:icon-dark-indigo-500 group-hocus:icon-light-indigo-50"
|
||||
@@ -174,9 +174,9 @@ import interval from 'human-interval'
|
||||
import { sortBy } from 'lodash'
|
||||
import Tooltip from '../components/Tooltip.vue'
|
||||
import type { AllowedState } from '@packages/types'
|
||||
import { useLoginConnectStore } from '../store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '../store/user-project-status-store'
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
gql`
|
||||
fragment HeaderBarContent_Auth on Query {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<template>
|
||||
<LoginConnectModalsContent
|
||||
v-if="loginConnectStore.isLoginConnectOpen"
|
||||
v-if="userProjectStatusStore.isLoginConnectOpen"
|
||||
:gql="query.data.value"
|
||||
/>
|
||||
</template>
|
||||
@@ -30,9 +30,9 @@
|
||||
import LoginConnectModalsContent from './LoginConnectModalsContent.vue'
|
||||
import { gql, useQuery } from '@urql/vue'
|
||||
import { LoginConnectModals_LoginConnectModalsQueryDocument } from '../generated/graphql'
|
||||
import { useLoginConnectStore } from '../store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '../store/user-project-status-store'
|
||||
import { whenever } from '@vueuse/core'
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
gql`
|
||||
query LoginConnectModals_LoginConnectModalsQuery {
|
||||
@@ -46,6 +46,6 @@ const executeQuery = async () => {
|
||||
await query.executeQuery()
|
||||
}
|
||||
|
||||
whenever(() => loginConnectStore.isLoginConnectOpen, executeQuery)
|
||||
whenever(() => userProjectStatusStore.isLoginConnectOpen, executeQuery)
|
||||
|
||||
</script>
|
||||
|
||||
@@ -3,13 +3,13 @@ import LoginConnectModalsContent from './LoginConnectModalsContent.vue'
|
||||
import { CloudUserStubs } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { SelectCloudProjectModal_CreateCloudProjectDocument } from '../generated/graphql'
|
||||
|
||||
import { useLoginConnectStore } from '../store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '../store/user-project-status-store'
|
||||
|
||||
describe('<LoginConnectModalsContent />', () => {
|
||||
context('when user is logged out', () => {
|
||||
[undefined, 'testContent'].forEach((content) => {
|
||||
it(`shows login modal with utmContent: ${content}`, () => {
|
||||
const { openLoginConnectModal } = useLoginConnectStore()
|
||||
const { openLoginConnectModal } = useUserProjectStatusStore()
|
||||
|
||||
cy.mountFragment(LoginConnectModalsContentFragmentDoc, {
|
||||
onResult: (result) => {
|
||||
@@ -52,7 +52,7 @@ describe('<LoginConnectModalsContent />', () => {
|
||||
context('when user is logged in', () => {
|
||||
[undefined, 'testContent'].forEach((content) => {
|
||||
it('shows "Create Project" state if project is not set up', () => {
|
||||
const { openLoginConnectModal, setUserFlag, setProjectFlag } = useLoginConnectStore()
|
||||
const { openLoginConnectModal, setUserFlag, setProjectFlag } = useUserProjectStatusStore()
|
||||
|
||||
setUserFlag('isLoggedIn', true)
|
||||
setUserFlag('isMemberOfOrganization', true)
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
<template>
|
||||
<template v-if="loginConnectStore.isLoginConnectOpen && gqlRef">
|
||||
<template v-if="userProjectStatusStore.isLoginConnectOpen && gqlRef">
|
||||
<LoginModal
|
||||
v-if="userStatusMatches('isLoggedOut') || keepLoginOpen"
|
||||
v-if="cloudStatusMatches('isLoggedOut') || keepLoginOpen"
|
||||
:gql="gqlRef"
|
||||
:utm-medium="loginConnectStore.utmMedium"
|
||||
:utm-content="loginConnectStore.utmContent"
|
||||
:utm-medium="userProjectStatusStore.utmMedium"
|
||||
:utm-content="userProjectStatusStore.utmContent"
|
||||
@cancel="closeLoginConnectModal"
|
||||
@close="handleCloseLogin"
|
||||
/>
|
||||
<RecordRunModal
|
||||
v-else-if="userStatusMatches('needsRecordedRun')"
|
||||
:utm-medium="loginConnectStore.utmMedium"
|
||||
:utm-content="loginConnectStore.utmContent"
|
||||
v-else-if="cloudStatusMatches('needsRecordedRun')"
|
||||
:utm-medium="userProjectStatusStore.utmMedium"
|
||||
:utm-content="userProjectStatusStore.utmContent"
|
||||
@cancel="closeLoginConnectModal"
|
||||
/>
|
||||
<CloudConnectModals
|
||||
v-else-if="userStatusMatches('needsProjectConnect') || userStatusMatches('needsOrgConnect')"
|
||||
:show="loginConnectStore.user.isLoggedIn"
|
||||
v-else-if="cloudStatusMatches('needsProjectConnect') || cloudStatusMatches('needsOrgConnect')"
|
||||
:show="userProjectStatusStore.user.isLoggedIn"
|
||||
:gql="gqlRef"
|
||||
:utm-medium="loginConnectStore.utmMedium"
|
||||
:utm-content="loginConnectStore.utmContent"
|
||||
:utm-medium="userProjectStatusStore.utmMedium"
|
||||
:utm-content="userProjectStatusStore.utmContent"
|
||||
@cancel="closeLoginConnectModal"
|
||||
@success="closeLoginConnectModal"
|
||||
/>
|
||||
@@ -30,7 +30,7 @@ import { gql } from '@urql/vue'
|
||||
import type { LoginConnectModalsContentFragment } from '../generated/graphql'
|
||||
import LoginModal from './modals/LoginModal.vue'
|
||||
import { ref, watch } from 'vue'
|
||||
import { useLoginConnectStore } from '../store/login-connect-store'
|
||||
import { useUserProjectStatusStore } from '../store/user-project-status-store'
|
||||
import CloudConnectModals from './modals/CloudConnectModals.vue'
|
||||
import RecordRunModal from './RecordRunModal.vue'
|
||||
import { debouncedWatch } from '@vueuse/core'
|
||||
@@ -50,15 +50,15 @@ const props = defineProps<{
|
||||
gql?: LoginConnectModalsContentFragment
|
||||
}>()
|
||||
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const { closeLoginConnectModal, userStatusMatches } = loginConnectStore
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
const { closeLoginConnectModal, cloudStatusMatches } = userProjectStatusStore
|
||||
|
||||
// use this to hold login open after the transition between logged out and logged in
|
||||
// this is to show the temporary "continue" state and its variations
|
||||
// that only exist if you have used the modal to log in
|
||||
const keepLoginOpen = ref(false)
|
||||
|
||||
watch(() => loginConnectStore.userStatus, (newVal, oldVal) => {
|
||||
watch(() => userProjectStatusStore.cloudStatus, (newVal, oldVal) => {
|
||||
if (oldVal === 'isLoggedOut' && newVal !== 'isLoggedOut') {
|
||||
keepLoginOpen.value = true
|
||||
}
|
||||
@@ -67,7 +67,7 @@ watch(() => loginConnectStore.userStatus, (newVal, oldVal) => {
|
||||
})
|
||||
|
||||
const handleCloseLogin = () => {
|
||||
if (userStatusMatches('allTasksCompleted')) {
|
||||
if (cloudStatusMatches('allTasksCompleted')) {
|
||||
closeLoginConnectModal()
|
||||
} else {
|
||||
keepLoginOpen.value = false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { gql, useMutation } from '@urql/vue'
|
||||
import { UsePromptManager_SetProjectPreferencesDocument, UsePromptManager_SetGlobalPreferencesDocument } from '../../generated/graphql'
|
||||
import { useLoginConnectStore } from '@packages/frontend-shared/src/store/login-connect-store'
|
||||
import { CloudStatus, ProjectStatus, useUserProjectStatusStore } from '@packages/frontend-shared/src/store/user-project-status-store'
|
||||
import { isAllowedFeature } from '../../utils/isAllowedFeature'
|
||||
|
||||
gql`
|
||||
@@ -26,10 +26,12 @@ mutation UsePromptManager_SetGlobalPreferences($value: String!) {
|
||||
}
|
||||
`
|
||||
|
||||
type FeatureName = Parameters<typeof isAllowedFeature>[0]
|
||||
|
||||
export function usePromptManager () {
|
||||
const setProjectPreferencesMutation = useMutation(UsePromptManager_SetProjectPreferencesDocument)
|
||||
const setGlobalPreferencesMutation = useMutation(UsePromptManager_SetGlobalPreferencesDocument)
|
||||
const loginConnectStore = useLoginConnectStore()
|
||||
const userProjectStatusStore = useUserProjectStatusStore()
|
||||
|
||||
// TODO: get Nav CI prompts using this in #23768 and retire the old setPromptShown mutation
|
||||
function setPromptShown (slug: 'ci1' | 'orchestration1' | 'loginModalRecord') {
|
||||
@@ -40,13 +42,31 @@ export function usePromptManager () {
|
||||
return setGlobalPreferencesMutation.executeMutation({ value: JSON.stringify({ majorVersionWelcomeDismissed: { [majorVersion]: Date.now() } }) })
|
||||
}
|
||||
|
||||
const wrappedIsAllowedFeature = (featureName: 'specsListBanner' | 'docsCiPrompt') => {
|
||||
return isAllowedFeature(featureName, loginConnectStore)
|
||||
const wrappedIsAllowedFeature = (featureName: FeatureName, state: CloudStatus | ProjectStatus) => {
|
||||
return isAllowedFeature(featureName, userProjectStatusStore, state)
|
||||
}
|
||||
|
||||
const getEffectiveBannerState = (featureName: FeatureName) => {
|
||||
const cloudStatus = userProjectStatusStore.cloudStatus
|
||||
const projectStatus = userProjectStatusStore.projectStatus
|
||||
|
||||
if (featureName === 'specsListBanner') {
|
||||
if (cloudStatus !== 'allTasksCompleted' && wrappedIsAllowedFeature('specsListBanner', cloudStatus)) {
|
||||
return cloudStatus
|
||||
}
|
||||
|
||||
if (projectStatus !== 'allTasksCompleted' && wrappedIsAllowedFeature('specsListBanner', projectStatus)) {
|
||||
return projectStatus
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
return {
|
||||
setPromptShown,
|
||||
isAllowedFeature: wrappedIsAllowedFeature,
|
||||
setMajorVersionWelcomeDismissed,
|
||||
getEffectiveBannerState,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import { defaultMessages } from '@cy/i18n'
|
||||
import Tooltip from '../../components/Tooltip.vue'
|
||||
import { ref } from 'vue'
|
||||
import { CloudUserStubs } from '@packages/graphql/test/stubCloudTypes'
|
||||
import { useLoginConnectStore } from '../../store'
|
||||
import { useUserProjectStatusStore } from '../../store'
|
||||
|
||||
const text = defaultMessages.topNav
|
||||
|
||||
@@ -38,7 +38,7 @@ const mountSuccess = (viewer: TestCloudViewer = cloudViewer) => {
|
||||
...viewer,
|
||||
}
|
||||
|
||||
const { setUserFlag } = useLoginConnectStore()
|
||||
const { setUserFlag } = useUserProjectStatusStore()
|
||||
|
||||
setUserFlag('isLoggedIn', true)
|
||||
cy.mountFragment(LoginModalFragmentDoc, {
|
||||
|
||||
@@ -215,6 +215,13 @@
|
||||
"record": {
|
||||
"title": "Record your first run",
|
||||
"content": "Record a run to see your test results in Cypress Cloud. You can then optimize your test suite, debug failing and flaky tests, and integrate with your favorite tools."
|
||||
},
|
||||
"ct": {
|
||||
"title": "{0} component testing is available for this project",
|
||||
"content": "You can now use Cypress to develop and test individual components without running your whole application. Generate the config in just a few clicks.",
|
||||
"primaryAction": "Quick setup",
|
||||
"secondaryAction": "Read our guide",
|
||||
"dismissAction": "Give feedback"
|
||||
}
|
||||
},
|
||||
"runSelectedSpecs": "Run {n} spec | Run {n} specs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export * from './login-connect-store'
|
||||
export * from './user-project-status-store'
|
||||
|
||||
import { createPinia as _createPinia } from 'pinia'
|
||||
|
||||
|
||||
@@ -6,12 +6,13 @@ interface LoginUserData {
|
||||
email: string | null
|
||||
}
|
||||
|
||||
export interface LoginConnectState {
|
||||
export interface UserProjectStatusState {
|
||||
hasInitiallyLoaded: boolean
|
||||
isLoginConnectOpen: boolean
|
||||
utmMedium: string
|
||||
utmContent?: string
|
||||
cypressFirstOpened?: number
|
||||
testingType?: 'e2e' | 'component'
|
||||
user: {
|
||||
isLoggedIn: boolean
|
||||
loginError: boolean
|
||||
@@ -25,6 +26,8 @@ export interface LoginConnectState {
|
||||
hasNonExampleSpec: boolean
|
||||
isNotAuthorized: boolean
|
||||
isNotFound: boolean
|
||||
isCTConfigured: boolean
|
||||
hasDetectedCtFramework: boolean
|
||||
}
|
||||
userData?: LoginUserData
|
||||
promptsShown: {
|
||||
@@ -35,10 +38,7 @@ export interface LoginConnectState {
|
||||
_latestBannerShownTimeForTesting?: number
|
||||
}
|
||||
|
||||
// The user can be in only one status at a time.
|
||||
// These are specifically related to Cypress Cloud
|
||||
// and the progress from logging in to recording a run.
|
||||
export const userStatuses = [
|
||||
export const CLOUD_STATUSES = [
|
||||
'isLoggedOut',
|
||||
'needsOrgConnect',
|
||||
'needsProjectConnect',
|
||||
@@ -46,12 +46,19 @@ export const userStatuses = [
|
||||
'allTasksCompleted',
|
||||
] as const
|
||||
|
||||
export type UserStatus = typeof userStatuses[number]
|
||||
export const PROJECT_STATUSES = [
|
||||
'isComponentTestingCandidate',
|
||||
'allTasksCompleted',
|
||||
] as const
|
||||
|
||||
export const useLoginConnectStore = defineStore({
|
||||
id: 'loginConnect',
|
||||
export type CloudStatus = typeof CLOUD_STATUSES[number]
|
||||
|
||||
state (): LoginConnectState {
|
||||
export type ProjectStatus = typeof PROJECT_STATUSES[number]
|
||||
|
||||
export const useUserProjectStatusStore = defineStore({
|
||||
id: 'userProjectStatus',
|
||||
|
||||
state (): UserProjectStatusState {
|
||||
return {
|
||||
hasInitiallyLoaded: false,
|
||||
utmMedium: '',
|
||||
@@ -59,6 +66,7 @@ export const useLoginConnectStore = defineStore({
|
||||
isLoginConnectOpen: false,
|
||||
cypressFirstOpened: undefined,
|
||||
userData: undefined,
|
||||
testingType: undefined,
|
||||
user: {
|
||||
isLoggedIn: false,
|
||||
loginError: false,
|
||||
@@ -72,6 +80,8 @@ export const useLoginConnectStore = defineStore({
|
||||
hasNonExampleSpec: false,
|
||||
isNotAuthorized: false,
|
||||
isNotFound: false,
|
||||
isCTConfigured: false,
|
||||
hasDetectedCtFramework: false,
|
||||
},
|
||||
promptsShown: {},
|
||||
bannersState: {},
|
||||
@@ -92,10 +102,10 @@ export const useLoginConnectStore = defineStore({
|
||||
this.utmMedium = ''
|
||||
this.utmContent = undefined
|
||||
},
|
||||
setUserFlag (name: keyof LoginConnectState['user'], newVal: boolean) {
|
||||
setUserFlag (name: keyof UserProjectStatusState['user'], newVal: boolean) {
|
||||
this.user[name] = newVal
|
||||
},
|
||||
setProjectFlag (name: keyof LoginConnectState['project'], newVal: boolean) {
|
||||
setProjectFlag (name: keyof UserProjectStatusState['project'], newVal: boolean) {
|
||||
this.project[name] = newVal
|
||||
},
|
||||
setLoginError (error: boolean) {
|
||||
@@ -110,6 +120,9 @@ export const useLoginConnectStore = defineStore({
|
||||
setCypressFirstOpened (timestamp: number) {
|
||||
this.cypressFirstOpened = timestamp
|
||||
},
|
||||
setTestingType (testingType: 'e2e' | 'component' | undefined) {
|
||||
this.testingType = testingType
|
||||
},
|
||||
setBannersState (banners: BannersState) {
|
||||
this.bannersState = banners
|
||||
},
|
||||
@@ -118,34 +131,38 @@ export const useLoginConnectStore = defineStore({
|
||||
},
|
||||
},
|
||||
getters: {
|
||||
userStatus (state): UserStatus {
|
||||
cloudStatus (state): CloudStatus {
|
||||
const { user, project } = state
|
||||
let userStatus: UserStatus
|
||||
|
||||
switch (true) {
|
||||
// the switch here ensures the uniqueness of states as we don't allow duplicate case labels
|
||||
// https://eslint.org/docs/latest/rules/no-duplicate-case
|
||||
case !user.isLoggedIn:
|
||||
userStatus = 'isLoggedOut'
|
||||
break
|
||||
return 'isLoggedOut'
|
||||
case user.isLoggedIn && user.isOrganizationLoaded && !user.isMemberOfOrganization:
|
||||
userStatus = 'needsOrgConnect'
|
||||
break
|
||||
return 'needsOrgConnect'
|
||||
case user.isLoggedIn && user.isMemberOfOrganization && !project.isProjectConnected && project.isConfigLoaded:
|
||||
userStatus = 'needsProjectConnect'
|
||||
break
|
||||
return 'needsProjectConnect'
|
||||
case user.isLoggedIn && user.isMemberOfOrganization && project.isProjectConnected && project.hasNoRecordedRuns && project.hasNonExampleSpec && project.isConfigLoaded:
|
||||
userStatus = 'needsRecordedRun'
|
||||
break
|
||||
return 'needsRecordedRun'
|
||||
default:
|
||||
userStatus = 'allTasksCompleted'
|
||||
return 'allTasksCompleted'
|
||||
}
|
||||
},
|
||||
projectStatus (state): ProjectStatus {
|
||||
const { project } = state
|
||||
|
||||
if (state.testingType === 'e2e' && !project.isCTConfigured && project.hasDetectedCtFramework) {
|
||||
return 'isComponentTestingCandidate'
|
||||
}
|
||||
|
||||
return userStatus
|
||||
return 'allTasksCompleted'
|
||||
},
|
||||
userStatusMatches () {
|
||||
// casting here since ts seems to need a little extra help in this 'return a function from a getter' situation
|
||||
return (status: UserStatus) => this.userStatus as unknown as UserStatus === status
|
||||
cloudStatusMatches () {
|
||||
return (status: CloudStatus) => this.cloudStatus === status
|
||||
},
|
||||
projectStatusMatches () {
|
||||
return (status: ProjectStatus) => this.projectStatus === status
|
||||
},
|
||||
latestBannerShownTime (state) {
|
||||
return state._latestBannerShownTimeForTesting
|
||||
@@ -155,4 +172,4 @@ export const useLoginConnectStore = defineStore({
|
||||
},
|
||||
})
|
||||
|
||||
export type LoginConnectStore = ReturnType<typeof useLoginConnectStore>
|
||||
export type UserProjectStatusStore = ReturnType<typeof useUserProjectStatusStore>
|
||||
@@ -0,0 +1,23 @@
|
||||
import LogoWebpack from '../assets/logos/webpack.svg'
|
||||
import LogoVite from '../assets/logos/vite.svg'
|
||||
import LogoNext from '../assets/logos/nextjs.svg'
|
||||
import LogoNuxt from '../assets/logos/nuxt.svg'
|
||||
import LogoVue from '../assets/logos/vue.svg'
|
||||
import LogoReact from '../assets/logos/react.svg'
|
||||
import LogoAngular from '../assets/logos/angular.svg'
|
||||
import LogoSvelte from '../assets/logos/svelte.svg'
|
||||
|
||||
export const FrameworkBundlerLogos = {
|
||||
webpack: LogoWebpack,
|
||||
vite: LogoVite,
|
||||
vue2: LogoVue,
|
||||
vue3: LogoVue,
|
||||
vueclivue2: LogoVue,
|
||||
vueclivue3: LogoVue,
|
||||
nextjs: LogoNext,
|
||||
nuxtjs: LogoNuxt,
|
||||
react: LogoReact,
|
||||
reactscripts: LogoReact,
|
||||
angular: LogoAngular,
|
||||
svelte: LogoSvelte,
|
||||
} as const
|
||||
@@ -1,6 +1,6 @@
|
||||
import { isAllowedFeature } from './isAllowedFeature'
|
||||
import { LoginConnectStore, useLoginConnectStore, userStatuses } from '../store'
|
||||
import type { UserStatus } from '../store'
|
||||
import { UserProjectStatusStore, useUserProjectStatusStore, CLOUD_STATUSES, ProjectStatus } from '../store'
|
||||
import type { CloudStatus } from '../store'
|
||||
import { BannerIds } from '@packages/types'
|
||||
import interval from 'human-interval'
|
||||
|
||||
@@ -12,14 +12,14 @@ const bannerIds = {
|
||||
} as const
|
||||
|
||||
describe('isAllowedFeature', () => {
|
||||
let store: LoginConnectStore
|
||||
let store: UserProjectStatusStore
|
||||
|
||||
// this setup function acts as a test of the userStatus
|
||||
// getter in loginConnectStore, since we set the individual flags here
|
||||
// getter in userProjectStatusStore, since we set the individual flags here
|
||||
// and assert on the expected user status derived from those flags
|
||||
// and provided by loginConnectStore.userStatus
|
||||
const setUpStatus = (status: UserStatus) => {
|
||||
const { setCypressFirstOpened, setPromptShown, setUserFlag, setProjectFlag } = store
|
||||
// and provided by userProjectStatusStore.userStatus
|
||||
const setUpStatus = (status: CloudStatus | ProjectStatus) => {
|
||||
const { setCypressFirstOpened, setPromptShown, setTestingType, setUserFlag, setProjectFlag } = store
|
||||
|
||||
// set a default valid number of days since first open & nav prompt shown
|
||||
// individual tests may override
|
||||
@@ -29,12 +29,12 @@ describe('isAllowedFeature', () => {
|
||||
switch (status) {
|
||||
case 'isLoggedOut':
|
||||
setUserFlag('isLoggedIn', false)
|
||||
expect(store.userStatus).to.eq('isLoggedOut')
|
||||
expect(store.cloudStatus).to.eq('isLoggedOut')
|
||||
break
|
||||
case 'needsOrgConnect':
|
||||
setUserFlag('isLoggedIn', true)
|
||||
setUserFlag('isOrganizationLoaded', true)
|
||||
expect(store.userStatus).to.eq('needsOrgConnect')
|
||||
expect(store.cloudStatus).to.eq('needsOrgConnect')
|
||||
break
|
||||
case 'needsProjectConnect':
|
||||
setUserFlag('isLoggedIn', true)
|
||||
@@ -42,7 +42,7 @@ describe('isAllowedFeature', () => {
|
||||
setUserFlag('isOrganizationLoaded', true)
|
||||
setProjectFlag('isConfigLoaded', true)
|
||||
setProjectFlag('isProjectConnected', false)
|
||||
expect(store.userStatus).to.eq('needsProjectConnect')
|
||||
expect(store.cloudStatus).to.eq('needsProjectConnect')
|
||||
break
|
||||
case 'needsRecordedRun':
|
||||
setUserFlag('isLoggedIn', true)
|
||||
@@ -52,7 +52,7 @@ describe('isAllowedFeature', () => {
|
||||
setProjectFlag('isConfigLoaded', true)
|
||||
setProjectFlag('hasNonExampleSpec', true)
|
||||
|
||||
expect(store.userStatus).to.eq('needsRecordedRun')
|
||||
expect(store.cloudStatus).to.eq('needsRecordedRun')
|
||||
break
|
||||
case 'allTasksCompleted':
|
||||
setUserFlag('isLoggedIn', true)
|
||||
@@ -60,7 +60,18 @@ describe('isAllowedFeature', () => {
|
||||
setProjectFlag('isProjectConnected', true)
|
||||
setProjectFlag('hasNoRecordedRuns', false)
|
||||
|
||||
expect(store.userStatus).to.eq('allTasksCompleted')
|
||||
expect(store.cloudStatus).to.eq('allTasksCompleted')
|
||||
break
|
||||
case 'isComponentTestingCandidate':
|
||||
setTestingType('e2e')
|
||||
setUserFlag('isLoggedIn', true)
|
||||
setUserFlag('isMemberOfOrganization', true)
|
||||
setProjectFlag('isProjectConnected', true)
|
||||
setProjectFlag('hasNoRecordedRuns', false)
|
||||
setProjectFlag('isCTConfigured', false)
|
||||
setProjectFlag('hasDetectedCtFramework', true)
|
||||
|
||||
expect(store.projectStatus).to.eq('isComponentTestingCandidate')
|
||||
break
|
||||
default:
|
||||
return
|
||||
@@ -68,25 +79,25 @@ describe('isAllowedFeature', () => {
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
store = useLoginConnectStore()
|
||||
store = useUserProjectStatusStore()
|
||||
store.setProjectFlag('hasNonExampleSpec', true)
|
||||
})
|
||||
|
||||
describe('specsListBanner', () => {
|
||||
context('at least one non-example spec has been written', () => {
|
||||
context('banners HAVE NOT been dismissed', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
if (status === 'allTasksCompleted') {
|
||||
it('returns false when user has no actions to take', () => {
|
||||
setUpStatus('allTasksCompleted')
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
} else {
|
||||
it(`returns true for status ${status}`, () => {
|
||||
setUpStatus(status)
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.true
|
||||
})
|
||||
@@ -107,7 +118,7 @@ describe('isAllowedFeature', () => {
|
||||
},
|
||||
})
|
||||
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
@@ -115,7 +126,7 @@ describe('isAllowedFeature', () => {
|
||||
})
|
||||
|
||||
context('banners have been disabled for testing', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
it(`returns false for status ${ status }`, () => {
|
||||
setUpStatus(status)
|
||||
|
||||
@@ -123,7 +134,7 @@ describe('isAllowedFeature', () => {
|
||||
_disabled: true,
|
||||
})
|
||||
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
@@ -131,12 +142,12 @@ describe('isAllowedFeature', () => {
|
||||
})
|
||||
|
||||
context('cypress was first opened less than 4 days ago', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
it(`returns false for status ${status}`, () => {
|
||||
setUpStatus(status)
|
||||
store.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
@@ -144,12 +155,12 @@ describe('isAllowedFeature', () => {
|
||||
})
|
||||
|
||||
context('nav CI prompt was shown less than one day ago', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
it(`returns false for status ${status}`, () => {
|
||||
setUpStatus(status)
|
||||
store.setPromptShown('ci1', Date.now() - interval('23 hours'))
|
||||
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
@@ -158,13 +169,13 @@ describe('isAllowedFeature', () => {
|
||||
})
|
||||
|
||||
context('no non-example specs have been written', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
if (status === 'allTasksCompleted' || status === 'needsRecordedRun') {
|
||||
it(`returns false for status ${status}`, () => {
|
||||
setUpStatus(status)
|
||||
store.setProjectFlag('hasNonExampleSpec', false)
|
||||
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
@@ -173,7 +184,7 @@ describe('isAllowedFeature', () => {
|
||||
setUpStatus(status)
|
||||
store.setProjectFlag('hasNonExampleSpec', false)
|
||||
|
||||
const result = isAllowedFeature('specsListBanner', store)
|
||||
const result = isAllowedFeature('specsListBanner', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.true
|
||||
})
|
||||
@@ -184,10 +195,10 @@ describe('isAllowedFeature', () => {
|
||||
|
||||
describe('docsCiPrompt', () => {
|
||||
context('a banner WAS NOT shown in the last day', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
it(`returns true with status ${ status } `, () => {
|
||||
setUpStatus(status)
|
||||
const result = isAllowedFeature('docsCiPrompt', store)
|
||||
const result = isAllowedFeature('docsCiPrompt', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.true
|
||||
})
|
||||
@@ -195,11 +206,11 @@ describe('isAllowedFeature', () => {
|
||||
})
|
||||
|
||||
context('a banner WAS shown in the last day', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
it(`returns false with status ${ status } `, () => {
|
||||
setUpStatus(status)
|
||||
store.setLatestBannerShownTime(Date.now() - interval('23 hours'))
|
||||
const result = isAllowedFeature('docsCiPrompt', store)
|
||||
const result = isAllowedFeature('docsCiPrompt', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
@@ -207,11 +218,11 @@ describe('isAllowedFeature', () => {
|
||||
})
|
||||
|
||||
context('cypress was first opened less than 4 days ago', () => {
|
||||
userStatuses.forEach((status) => {
|
||||
CLOUD_STATUSES.forEach((status) => {
|
||||
it(`returns false for status ${ status } `, () => {
|
||||
setUpStatus(status)
|
||||
store.setCypressFirstOpened(Date.now() - interval('3 days'))
|
||||
const result = isAllowedFeature('docsCiPrompt', store)
|
||||
const result = isAllowedFeature('docsCiPrompt', store, store.cloudStatus)
|
||||
|
||||
expect(result).to.be.false
|
||||
})
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
import interval from 'human-interval'
|
||||
import { BannerIds } from '@packages/types'
|
||||
import type { LoginConnectStore, UserStatus } from '../store'
|
||||
import type { UserProjectStatusStore, CloudStatus, ProjectStatus } from '../store'
|
||||
|
||||
type Feature = 'specsListBanner' | 'docsCiPrompt'
|
||||
type RulesSet = { base: boolean[] } & Partial<Record<UserStatus, boolean[]>>
|
||||
type RulesSet = { base: boolean[] } & Partial<Record<CloudStatus | ProjectStatus, boolean[]>>
|
||||
type Rules = Record<Feature, RulesSet>
|
||||
type BannerId = typeof BannerIds[keyof typeof BannerIds]
|
||||
|
||||
const bannerIds = {
|
||||
const BANNER_ID_BY_STATE: Partial<Record<CloudStatus | ProjectStatus, BannerId>> = {
|
||||
isLoggedOut: BannerIds.ACI_082022_LOGIN,
|
||||
needsOrgConnect: BannerIds.ACI_082022_CREATE_ORG,
|
||||
needsProjectConnect: BannerIds.ACI_082022_CONNECT_PROJECT,
|
||||
needsRecordedRun: BannerIds.ACI_082022_RECORD,
|
||||
isComponentTestingCandidate: BannerIds.CT_052023_AVAILABLE,
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -33,20 +35,18 @@ const minTimeSinceEvent = (eventTime: number | undefined, waitTime: string) => {
|
||||
return (Date.now() - eventTime) > waitTimestamp
|
||||
}
|
||||
|
||||
export const IATR_RELEASE = new Date('2023-01-31T00:00:00').getTime()
|
||||
|
||||
export const isAllowedFeature = (
|
||||
featureName: Feature,
|
||||
loginConnectStore: LoginConnectStore,
|
||||
userProjectStatusStore: UserProjectStatusStore,
|
||||
state: CloudStatus | ProjectStatus = 'allTasksCompleted',
|
||||
) => {
|
||||
const {
|
||||
cypressFirstOpened,
|
||||
promptsShown,
|
||||
latestBannerShownTime,
|
||||
bannersState,
|
||||
userStatus,
|
||||
project,
|
||||
} = loginConnectStore
|
||||
} = userProjectStatusStore
|
||||
|
||||
const events = {
|
||||
cypressFirstOpened,
|
||||
@@ -56,16 +56,34 @@ export const isAllowedFeature = (
|
||||
}
|
||||
|
||||
function bannerForCurrentStatusWasNotDismissed () {
|
||||
const bannerId = bannerIds[userStatus]
|
||||
if (!state) {
|
||||
return true
|
||||
}
|
||||
|
||||
const bannerId = BANNER_ID_BY_STATE[state]
|
||||
|
||||
if (!bannerId) {
|
||||
return true
|
||||
}
|
||||
|
||||
return !bannersState?.[bannerId]?.dismissed
|
||||
}
|
||||
|
||||
function noOtherSmartBannerShownWithin (interval: string) {
|
||||
const currentBannerId = BANNER_ID_BY_STATE[state]
|
||||
|
||||
return Object.entries(BannerIds)
|
||||
.map(([_, bannerId]) => bannerId)
|
||||
.filter((bannerId) => bannerId !== currentBannerId)
|
||||
.map((bannerId) => bannersState[bannerId]?.dismissed)
|
||||
.every((bannerDismissed) => minTimeSinceEvent(bannerDismissed, interval))
|
||||
}
|
||||
|
||||
function bannersAreNotDisabledForTesting () {
|
||||
return !bannersState?._disabled
|
||||
}
|
||||
|
||||
// For each feature, we define an array of rules for every `UserStatus`.
|
||||
// For each feature, we define an array of rules for every `BannerStatus`.
|
||||
// The `base` rule is applied to all statuses, additional rules are
|
||||
// nested in their respective statuses.
|
||||
const rules: Rules = {
|
||||
@@ -83,6 +101,9 @@ export const isAllowedFeature = (
|
||||
needsOrgConnect: [],
|
||||
needsProjectConnect: [],
|
||||
isLoggedOut: [],
|
||||
isComponentTestingCandidate: [
|
||||
noOtherSmartBannerShownWithin('2 days'),
|
||||
],
|
||||
},
|
||||
docsCiPrompt: {
|
||||
base: [
|
||||
@@ -94,6 +115,7 @@ export const isAllowedFeature = (
|
||||
needsProjectConnect: [],
|
||||
isLoggedOut: [],
|
||||
allTasksCompleted: [],
|
||||
isComponentTestingCandidate: [],
|
||||
},
|
||||
}
|
||||
|
||||
@@ -102,7 +124,7 @@ export const isAllowedFeature = (
|
||||
// if the `userStatus` is not explicitly listed for a feature, then
|
||||
// we don't have anything that we are allowed to show for that status
|
||||
// so the fallback rules array of [false] is used
|
||||
const statusSpecificRules = rules[featureName][userStatus] ?? [false]
|
||||
const statusSpecificRules = (state && rules[featureName][state]) ?? [false]
|
||||
|
||||
const rulesToCheck = baseRules.concat(statusSpecificRules)
|
||||
|
||||
|
||||
@@ -4,7 +4,10 @@ const cypressCSS = require('@cypress-design/css')
|
||||
module.exports = {
|
||||
presets: [cypressCSS.TailwindConfig()],
|
||||
content: {
|
||||
files: ['./src/**/*.{vue,js,ts,jsx,tsx,scss,css}'],
|
||||
files: [
|
||||
'../../node_modules/@cypress-design/vue-*/dist/*.js',
|
||||
'./src/**/*.{vue,js,ts,jsx,tsx,scss,css}',
|
||||
],
|
||||
extract: ['vue', 'js', 'tsx'].reduce((acc, ext) => {
|
||||
acc[ext] = cypressCSS.TailwindIconExtractor
|
||||
|
||||
|
||||
@@ -1624,6 +1624,11 @@ type Mutation {
|
||||
Parse a JS or TS file to see any exported React components that are defined in the file
|
||||
"""
|
||||
getReactComponentsFromFile(filePath: String!): ReactComponentResponse
|
||||
|
||||
"""
|
||||
Scan dependencies to determine what, if any, CT frameworks are installed
|
||||
"""
|
||||
initializeCtFrameworks: Boolean
|
||||
internal_clearAllProjectPreferencesCache: Boolean
|
||||
internal_clearLatestProjectCache: Boolean
|
||||
internal_clearProjectPreferencesCache(projectTitle: String!): Boolean
|
||||
@@ -1705,9 +1710,18 @@ type Mutation {
|
||||
reconfigureProject: Boolean!
|
||||
|
||||
"""
|
||||
Dispatch an event to Cypress Cloud to be recorded. Events are completely anonymous and are only used to identify aggregate usage patterns across all Cypress users.
|
||||
Dispatch an event to Cypress Cloud to be recorded. Events are used only to derive aggregate usage patterns across all Cypress instances.
|
||||
"""
|
||||
recordEvent(campaign: String!, cohort: String, medium: String!, messageId: String!): Boolean
|
||||
recordEvent(
|
||||
campaign: String!
|
||||
cohort: String
|
||||
includeMachineId: Boolean
|
||||
medium: String!
|
||||
messageId: String!
|
||||
|
||||
"""(optional) stringified JSON object with supplemental data"""
|
||||
payload: String
|
||||
): Boolean
|
||||
|
||||
"""
|
||||
Signal that we are explicitly refetching remote data and should not use the server cache
|
||||
@@ -1959,6 +1973,11 @@ type Query {
|
||||
"""local settings on a device-by-device basis"""
|
||||
localSettings: LocalSettings!
|
||||
|
||||
"""
|
||||
Unique node machine identifier for this instance - may be nil if unable to resolve
|
||||
"""
|
||||
machineId: String
|
||||
|
||||
"""Metadata about the migration, null if we aren't showing it"""
|
||||
migration: Migration
|
||||
node(id: ID!): Node
|
||||
|
||||
@@ -709,12 +709,16 @@ export const mutation = mutationType({
|
||||
|
||||
t.field('recordEvent', {
|
||||
type: 'Boolean',
|
||||
description: 'Dispatch an event to Cypress Cloud to be recorded. Events are completely anonymous and are only used to identify aggregate usage patterns across all Cypress users.',
|
||||
description: 'Dispatch an event to Cypress Cloud to be recorded. Events are used only to derive aggregate usage patterns across all Cypress instances.',
|
||||
args: {
|
||||
includeMachineId: booleanArg({}),
|
||||
campaign: nonNull(stringArg({})),
|
||||
messageId: nonNull(stringArg({})),
|
||||
medium: nonNull(stringArg({})),
|
||||
cohort: stringArg({}),
|
||||
payload: stringArg({
|
||||
description: '(optional) stringified JSON object with supplemental data',
|
||||
}),
|
||||
},
|
||||
resolve: (source, args, ctx) => {
|
||||
return ctx.actions.eventCollector.recordEvent({
|
||||
@@ -722,7 +726,8 @@ export const mutation = mutationType({
|
||||
messageId: args.messageId,
|
||||
medium: args.medium,
|
||||
cohort: args.cohort || undefined,
|
||||
})
|
||||
payload: (args.payload && JSON.parse(args.payload)) || undefined,
|
||||
}, args.includeMachineId ?? false)
|
||||
},
|
||||
})
|
||||
|
||||
@@ -804,5 +809,16 @@ export const mutation = mutationType({
|
||||
return true
|
||||
},
|
||||
})
|
||||
|
||||
t.field('initializeCtFrameworks', {
|
||||
description: 'Scan dependencies to determine what, if any, CT frameworks are installed',
|
||||
type: 'Boolean',
|
||||
resolve: async (source, args, ctx) => {
|
||||
await ctx.actions.wizard.detectFrameworks()
|
||||
await ctx.actions.wizard.initializeFramework()
|
||||
|
||||
return true
|
||||
},
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
@@ -141,6 +141,11 @@ export const Query = objectType({
|
||||
return ctx.graphql.resolveNode(args.id, ctx, info) as any
|
||||
},
|
||||
})
|
||||
|
||||
t.string('machineId', {
|
||||
description: 'Unique node machine identifier for this instance - may be nil if unable to resolve',
|
||||
resolve: async (source, args, ctx) => await ctx.coreData.machineId,
|
||||
})
|
||||
},
|
||||
sourceType: {
|
||||
module: '@packages/graphql',
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"execa": "4.0.0",
|
||||
"fs-extra": "9.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"plist": "3.0.5",
|
||||
"plist": "3.0.6",
|
||||
"semver": "7.3.5",
|
||||
"which": "2.0.2",
|
||||
"win-version-info": "5.0.1"
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, ref, watch } from 'vue'
|
||||
import { FrameworkBundlerLogos } from '../utils/icons'
|
||||
import { FrameworkBundlerLogos } from '@packages/frontend-shared/src/utils/icons'
|
||||
import type { Option, FrameworkOption } from './types'
|
||||
import Select from '@cy/components/Select.vue'
|
||||
import type {
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
import LogoWebpack from '../images/logos/webpack.svg'
|
||||
import LogoVite from '../images/logos/vite.svg'
|
||||
import LogoNext from '../images/logos/nextjs.svg'
|
||||
import LogoNuxt from '../images/logos/nuxt.svg'
|
||||
import LogoVue from '../images/logos/vue.svg'
|
||||
import LogoReact from '../images/logos/react.svg'
|
||||
import LogoAngular from '../images/logos/angular.svg'
|
||||
import LogoSvelte from '../images/logos/svelte.svg'
|
||||
|
||||
import type { SupportedBundlers } from '../generated/graphql'
|
||||
|
||||
export const FrameworkBundlerLogos: Record<string | SupportedBundlers, string> = {
|
||||
webpack: LogoWebpack,
|
||||
vite: LogoVite,
|
||||
vue2: LogoVue,
|
||||
vue3: LogoVue,
|
||||
vueclivue2: LogoVue,
|
||||
vueclivue3: LogoVue,
|
||||
nextjs: LogoNext,
|
||||
nuxtjs: LogoNuxt,
|
||||
react: LogoReact,
|
||||
reactscripts: LogoReact,
|
||||
angular: LogoAngular,
|
||||
svelte: LogoSvelte,
|
||||
}
|
||||
@@ -1,8 +1,5 @@
|
||||
const config = require('@packages/frontend-shared/tailwind.config.cjs')
|
||||
|
||||
config.content.files = [
|
||||
'./src/**/*.{vue,js,ts,jsx,tsx,scss,css}', //
|
||||
'../frontend-shared/src/**/*.{vue,js,ts,jsx,tsx,scss,css}',
|
||||
],
|
||||
config.content.files.push('../frontend-shared/src/**/*.{vue,js,ts,jsx,tsx,scss,css}')
|
||||
|
||||
module.exports = config
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"circular-json": "0.5.9",
|
||||
"engine.io": "6.2.1",
|
||||
"engine.io": "6.4.2",
|
||||
"engine.io-parser": "4.0.2",
|
||||
"socket.io": "4.0.1",
|
||||
"socket.io-client": "4.0.1"
|
||||
|
||||
@@ -47,6 +47,7 @@ export const BannerIds = {
|
||||
ACI_082022_CREATE_ORG: 'aci_082022_createOrganization',
|
||||
ACI_082022_CONNECT_PROJECT: 'aci_082022_connectProject',
|
||||
ACI_082022_RECORD: 'aci_082022_record',
|
||||
CT_052023_AVAILABLE: 'ct_052023_available',
|
||||
} as const
|
||||
|
||||
type BannerKeys = keyof typeof BannerIds
|
||||
|
||||
@@ -98,7 +98,7 @@ export async function buildCypressApp (options: BuildCypressAppOpts) {
|
||||
if (!keepBuild) {
|
||||
log('#buildPackages')
|
||||
|
||||
await execa('yarn', ['lerna', 'run', 'build-prod', '--ignore', 'cli', '--concurrency', '1'], {
|
||||
await execa('yarn', ['lerna', 'run', 'build-prod', '--ignore', 'cli', '--concurrency', '4'], {
|
||||
stdio: 'inherit',
|
||||
cwd: CY_ROOT_DIR,
|
||||
})
|
||||
@@ -181,10 +181,12 @@ require('./packages/server/index.js')
|
||||
`)
|
||||
|
||||
// removeTypeScript
|
||||
log('#remove typescript files and devDep patches')
|
||||
await del([
|
||||
// include ts files of packages
|
||||
meta.distDir('**', '*.ts'),
|
||||
|
||||
// remove dev dep patches
|
||||
meta.distDir('**', '*.dev.patch'),
|
||||
// except those in node_modules
|
||||
`!${meta.distDir('**', 'node_modules', '**', '*.ts')}`,
|
||||
], { force: true })
|
||||
@@ -196,7 +198,6 @@ require('./packages/server/index.js')
|
||||
|
||||
// transformSymlinkRequires
|
||||
log('#transformSymlinkRequires')
|
||||
|
||||
await transformRequires(meta.distDir())
|
||||
|
||||
log(`#testDistVersion ${meta.distDir()}`)
|
||||
|
||||
@@ -20,22 +20,14 @@ exports['Browser Crash Handling / when the tab crashes in chrome / fails'] = `
|
||||
|
||||
We detected that the Chromium Renderer process just crashed.
|
||||
|
||||
This is the equivalent to seeing the 'sad face' when Chrome dies.
|
||||
This can happen for a number of different reasons.
|
||||
|
||||
This can happen for a number of different reasons:
|
||||
If you're running lots of tests on a memory intense application.
|
||||
- Try increasing the CPU/memory on the machine you're running on.
|
||||
- Try enabling experimentalMemoryManagement in your config file.
|
||||
- Try lowering numTestsKeptInMemory in your config file during 'cypress open'.
|
||||
|
||||
- You wrote an endless loop and you must fix your own code
|
||||
- You are running Docker (there is an easy fix for this: see link below)
|
||||
- You are running lots of tests on a memory intense application.
|
||||
- Try enabling experimentalMemoryManagement in your config file.
|
||||
- Try lowering numTestsKeptInMemory in your config file.
|
||||
- You are running in a memory starved VM environment.
|
||||
- Try enabling experimentalMemoryManagement in your config file.
|
||||
- Try lowering numTestsKeptInMemory in your config file.
|
||||
- There are problems with your GPU / GPU drivers
|
||||
- There are browser bugs in Chromium
|
||||
|
||||
You can learn more including how to fix Docker here:
|
||||
You can learn more here:
|
||||
|
||||
https://on.cypress.io/renderer-process-crashed
|
||||
|
||||
@@ -117,22 +109,14 @@ exports['Browser Crash Handling / when the tab crashes in electron / fails'] = `
|
||||
|
||||
We detected that the Chromium Renderer process just crashed.
|
||||
|
||||
This is the equivalent to seeing the 'sad face' when Chrome dies.
|
||||
This can happen for a number of different reasons.
|
||||
|
||||
This can happen for a number of different reasons:
|
||||
If you're running lots of tests on a memory intense application.
|
||||
- Try increasing the CPU/memory on the machine you're running on.
|
||||
- Try enabling experimentalMemoryManagement in your config file.
|
||||
- Try lowering numTestsKeptInMemory in your config file during 'cypress open'.
|
||||
|
||||
- You wrote an endless loop and you must fix your own code
|
||||
- You are running Docker (there is an easy fix for this: see link below)
|
||||
- You are running lots of tests on a memory intense application.
|
||||
- Try enabling experimentalMemoryManagement in your config file.
|
||||
- Try lowering numTestsKeptInMemory in your config file.
|
||||
- You are running in a memory starved VM environment.
|
||||
- Try enabling experimentalMemoryManagement in your config file.
|
||||
- Try lowering numTestsKeptInMemory in your config file.
|
||||
- There are problems with your GPU / GPU drivers
|
||||
- There are browser bugs in Chromium
|
||||
|
||||
You can learn more including how to fix Docker here:
|
||||
You can learn more here:
|
||||
|
||||
https://on.cypress.io/renderer-process-crashed
|
||||
|
||||
|
||||
@@ -9,9 +9,14 @@ const onServer = (app) => {
|
||||
describe('e2e baseUrl', () => {
|
||||
context('https', () => {
|
||||
systemTests.setup({
|
||||
servers: {
|
||||
port: 443,
|
||||
https: true,
|
||||
onServer,
|
||||
},
|
||||
settings: {
|
||||
e2e: {
|
||||
baseUrl: 'https://httpbin.org',
|
||||
baseUrl: 'https://localhost/app',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/browser.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/semver/semver.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/browser.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/index.js",
|
||||
@@ -160,6 +161,7 @@
|
||||
"./node_modules/@cypress/request/index.js",
|
||||
"./node_modules/@cypress/request/lib/helpers.js",
|
||||
"./node_modules/@cypress/request/lib/querystring.js",
|
||||
"./node_modules/@cypress/request/node_modules/form-data/lib/form_data.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/index.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/md5.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/rng.js",
|
||||
@@ -178,6 +180,7 @@
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/json/index.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/json/jsonfile.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/path-exists/index.js",
|
||||
"./node_modules/@electron/get/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/@electron/get/node_modules/got/source/index.js",
|
||||
"./node_modules/@electron/get/node_modules/normalize-url/index.js",
|
||||
"./node_modules/@electron/get/node_modules/responselike/src/index.js",
|
||||
@@ -198,6 +201,7 @@
|
||||
"./node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js",
|
||||
"./node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js",
|
||||
"./node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js",
|
||||
"./node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js",
|
||||
"./node_modules/@kwsites/file-exists/dist/index.js",
|
||||
"./node_modules/@kwsites/file-exists/dist/src/index.js",
|
||||
"./node_modules/@nodelib/fs.scandir/out/adapters/fs.js",
|
||||
@@ -290,6 +294,8 @@
|
||||
"./node_modules/convert-source-map/node_modules/safe-buffer/index.js",
|
||||
"./node_modules/cp-file/cp-file-error.js",
|
||||
"./node_modules/cp-file/fs.js",
|
||||
"./node_modules/cp-file/node_modules/make-dir/index.js",
|
||||
"./node_modules/cp-file/node_modules/semver/semver.js",
|
||||
"./node_modules/cp-file/progress-emitter.js",
|
||||
"./node_modules/crc-32/crc32.js",
|
||||
"./node_modules/crc32-stream/lib/crc32-stream.js",
|
||||
@@ -355,11 +361,7 @@
|
||||
"./node_modules/fluent-ffmpeg/lib/utils.js",
|
||||
"./node_modules/follow-redirects/index.js",
|
||||
"./node_modules/forever-agent/index.js",
|
||||
"./node_modules/form-data/lib/form_data.js",
|
||||
"./node_modules/front-matter/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/loader.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/default_full.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/function.js",
|
||||
"./node_modules/fs-constants/index.js",
|
||||
"./node_modules/fs-extra/lib/fs/index.js",
|
||||
"./node_modules/fs-extra/lib/index.js",
|
||||
@@ -426,6 +428,8 @@
|
||||
"./node_modules/jose/dist/node/cjs/runtime/node_key.js",
|
||||
"./node_modules/jose/dist/node/cjs/runtime/sign.js",
|
||||
"./node_modules/jose/dist/node/cjs/runtime/webcrypto.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/loader.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/default_full.js",
|
||||
"./node_modules/jsbn/index.js",
|
||||
"./node_modules/json3/lib/json3.js",
|
||||
"./node_modules/keyv/src/index.js",
|
||||
@@ -488,7 +492,6 @@
|
||||
"./node_modules/morgan/index.js",
|
||||
"./node_modules/morgan/node_modules/debug/src/browser.js",
|
||||
"./node_modules/morgan/node_modules/debug/src/index.js",
|
||||
"./node_modules/move-file/node_modules/semver/semver.js",
|
||||
"./node_modules/nested-error-stacks/index.js",
|
||||
"./node_modules/nexus/dist/core.js",
|
||||
"./node_modules/nexus/dist/definitions/list.js",
|
||||
@@ -619,7 +622,6 @@
|
||||
"./node_modules/roarr/dist/factories/index.js",
|
||||
"./node_modules/roarr/dist/log.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/run-applescript/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/run-applescript/node_modules/semver/semver.js",
|
||||
"./node_modules/safe-buffer/index.js",
|
||||
"./node_modules/safer-buffer/safer.js",
|
||||
@@ -629,6 +631,7 @@
|
||||
"./node_modules/send/node_modules/debug/src/browser.js",
|
||||
"./node_modules/send/node_modules/debug/src/index.js",
|
||||
"./node_modules/shell-env/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/shell-env/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/shell-env/node_modules/semver/semver.js",
|
||||
"./node_modules/signal-exit/signals.js",
|
||||
"./node_modules/simple-git/dist/cjs/index.js",
|
||||
@@ -771,6 +774,7 @@
|
||||
"./packages/data-context/node_modules/fs-extra/lib/json/index.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/json/jsonfile.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/path-exists/index.js",
|
||||
"./packages/data-context/node_modules/get-stream/buffer-stream.js",
|
||||
"./packages/data-context/node_modules/readdirp/index.js",
|
||||
"./packages/data-context/node_modules/supports-color/index.js",
|
||||
"./packages/data-context/src/DataActions.ts",
|
||||
@@ -890,6 +894,7 @@
|
||||
"./packages/server/node_modules/duplexify/index.js",
|
||||
"./packages/server/node_modules/execa/lib/errname.js",
|
||||
"./packages/server/node_modules/execa/node_modules/signal-exit/signals.js",
|
||||
"./packages/server/node_modules/get-stream/buffer-stream.js",
|
||||
"./packages/server/node_modules/glob/glob.js",
|
||||
"./packages/server/node_modules/glob/sync.js",
|
||||
"./packages/server/node_modules/graceful-fs/graceful-fs.js",
|
||||
@@ -1029,6 +1034,9 @@
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/pretty.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/targets.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/utils.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/lru-cache/index.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/yallist/iterator.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/yallist/yallist.js",
|
||||
"./node_modules/@babel/helper-environment-visitor/lib/index.js",
|
||||
"./node_modules/@babel/helper-function-name/lib/index.js",
|
||||
"./node_modules/@babel/helper-hoist-variables/lib/index.js",
|
||||
@@ -1164,6 +1172,7 @@
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/common.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/get-stream/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/path-key/index.js",
|
||||
"./node_modules/@cypress/commit-info/src/git-api.js",
|
||||
"./node_modules/@cypress/commit-info/src/index.js",
|
||||
@@ -1191,6 +1200,7 @@
|
||||
"./node_modules/@cypress/request/lib/multipart.js",
|
||||
"./node_modules/@cypress/request/lib/redirect.js",
|
||||
"./node_modules/@cypress/request/lib/tunnel.js",
|
||||
"./node_modules/@cypress/request/node_modules/form-data/lib/populate.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/formats.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/index.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/parse.js",
|
||||
@@ -1244,6 +1254,7 @@
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/stat.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./node_modules/@electron/get/node_modules/get-stream/index.js",
|
||||
"./node_modules/@electron/get/node_modules/got/package.json",
|
||||
"./node_modules/@electron/get/node_modules/got/source/as-promise.js",
|
||||
"./node_modules/@electron/get/node_modules/got/source/as-stream.js",
|
||||
@@ -1557,7 +1568,6 @@
|
||||
"./node_modules/@opentelemetry/sdk-trace-base/build/src/utility.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/build/src/index.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/lru-cache/index.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/range.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/semver.js",
|
||||
@@ -1911,6 +1921,7 @@
|
||||
"./node_modules/core-util-is/lib/util.js",
|
||||
"./node_modules/cors/lib/index.js",
|
||||
"./node_modules/cp-file/index.js",
|
||||
"./node_modules/cp-file/node_modules/pify/index.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/destroy.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js",
|
||||
@@ -1977,7 +1988,6 @@
|
||||
"./node_modules/ejs/package.json",
|
||||
"./node_modules/electron-context-menu/index.js",
|
||||
"./node_modules/electron-dl/index.js",
|
||||
"./node_modules/electron-packager/node_modules/lru-cache/index.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/range.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/semver.js",
|
||||
@@ -2075,6 +2085,7 @@
|
||||
"./node_modules/esutils/lib/keyword.js",
|
||||
"./node_modules/esutils/lib/utils.js",
|
||||
"./node_modules/etag/index.js",
|
||||
"./node_modules/eventemitter3/index.js",
|
||||
"./node_modules/execa/index.js",
|
||||
"./node_modules/execa/lib/command.js",
|
||||
"./node_modules/execa/lib/error.js",
|
||||
@@ -2232,36 +2243,8 @@
|
||||
"./node_modules/fluent-ffmpeg/lib/processor.js",
|
||||
"./node_modules/fluent-ffmpeg/lib/recipes.js",
|
||||
"./node_modules/follow-redirects/debug.js",
|
||||
"./node_modules/form-data/lib/populate.js",
|
||||
"./node_modules/forwarded/index.js",
|
||||
"./node_modules/fresh/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/common.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/dumper.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/exception.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/mark.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/core.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/json.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/binary.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/bool.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/float.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/int.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/map.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/merge.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/null.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/omap.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/pairs.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/seq.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/set.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/str.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/timestamp.js",
|
||||
"./node_modules/fs-extra/lib/copy-sync/copy-sync.js",
|
||||
"./node_modules/fs-extra/lib/copy-sync/index.js",
|
||||
"./node_modules/fs-extra/lib/copy/copy.js",
|
||||
@@ -2336,8 +2319,8 @@
|
||||
"./node_modules/get-package-info/node_modules/parse-json/index.js",
|
||||
"./node_modules/get-package-info/node_modules/parse-json/vendor/parse.js",
|
||||
"./node_modules/get-package-info/node_modules/parse-json/vendor/unicode.js",
|
||||
"./node_modules/get-package-info/node_modules/path-exists/index.js",
|
||||
"./node_modules/get-package-info/node_modules/path-type/index.js",
|
||||
"./node_modules/get-package-info/node_modules/pify/index.js",
|
||||
"./node_modules/get-package-info/node_modules/read-pkg-up/index.js",
|
||||
"./node_modules/get-package-info/node_modules/read-pkg/index.js",
|
||||
"./node_modules/get-port/index.js",
|
||||
@@ -2355,7 +2338,6 @@
|
||||
"./node_modules/global-agent/dist/index.js",
|
||||
"./node_modules/global-agent/dist/utilities/isUrlMatchingNoProxy.js",
|
||||
"./node_modules/global-agent/dist/utilities/parseProxyUrl.js",
|
||||
"./node_modules/global-agent/node_modules/lru-cache/index.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/range.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/semver.js",
|
||||
@@ -2407,8 +2389,6 @@
|
||||
"./node_modules/globalthis/shim.js",
|
||||
"./node_modules/globby/gitignore.js",
|
||||
"./node_modules/globby/index.js",
|
||||
"./node_modules/globby/node_modules/array-union/index.js",
|
||||
"./node_modules/globby/node_modules/slash/index.js",
|
||||
"./node_modules/graceful-fs/clone.js",
|
||||
"./node_modules/graceful-fs/legacy-streams.js",
|
||||
"./node_modules/grapheme-splitter/index.js",
|
||||
@@ -2552,9 +2532,6 @@
|
||||
"./node_modules/has-symbols/shams.js",
|
||||
"./node_modules/has/src/index.js",
|
||||
"./node_modules/he/he.js",
|
||||
"./node_modules/hosted-git-info/git-host-info.js",
|
||||
"./node_modules/hosted-git-info/git-host.js",
|
||||
"./node_modules/hosted-git-info/index.js",
|
||||
"./node_modules/html-tags/html-tags.json",
|
||||
"./node_modules/html-tags/index.js",
|
||||
"./node_modules/http-cache-semantics/index.js",
|
||||
@@ -2562,7 +2539,6 @@
|
||||
"./node_modules/http-proxy/lib/http-proxy/common.js",
|
||||
"./node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js",
|
||||
"./node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js",
|
||||
"./node_modules/http-proxy/node_modules/eventemitter3/index.js",
|
||||
"./node_modules/http-signature/lib/verify.js",
|
||||
"./node_modules/human-interval/index.js",
|
||||
"./node_modules/human-signals/build/src/core.js",
|
||||
@@ -2622,9 +2598,7 @@
|
||||
"./node_modules/is-fullwidth-code-point/index.js",
|
||||
"./node_modules/is-glob/index.js",
|
||||
"./node_modules/is-html/index.js",
|
||||
"./node_modules/is-obj/index.js",
|
||||
"./node_modules/is-path-inside/index.js",
|
||||
"./node_modules/is-plain-obj/index.js",
|
||||
"./node_modules/is-regexp/index.js",
|
||||
"./node_modules/is-stream/index.js",
|
||||
"./node_modules/is-typedarray/index.js",
|
||||
@@ -2714,6 +2688,33 @@
|
||||
"./node_modules/jose/dist/node/cjs/util/decode_protected_header.js",
|
||||
"./node_modules/jose/dist/node/cjs/util/errors.js",
|
||||
"./node_modules/js-tokens/index.js",
|
||||
"./node_modules/js-yaml/index.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/common.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/dumper.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/exception.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/mark.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/core.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/default_safe.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/failsafe.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/json.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/binary.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/bool.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/float.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/int.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/js/regexp.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/js/undefined.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/map.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/merge.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/null.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/omap.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/pairs.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/seq.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/set.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/str.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/timestamp.js",
|
||||
"./node_modules/jsesc/jsesc.js",
|
||||
"./node_modules/json-buffer/index.js",
|
||||
"./node_modules/json-schema/lib/validate.js",
|
||||
@@ -2925,8 +2926,6 @@
|
||||
"./node_modules/lodash/toNumber.js",
|
||||
"./node_modules/lodash/toString.js",
|
||||
"./node_modules/lru-cache/index.js",
|
||||
"./node_modules/lru-cache/node_modules/yallist/iterator.js",
|
||||
"./node_modules/lru-cache/node_modules/yallist/yallist.js",
|
||||
"./node_modules/make-error/index.js",
|
||||
"./node_modules/marionette-client/lib/marionette/message.js",
|
||||
"./node_modules/matcher/index.js",
|
||||
@@ -3028,9 +3027,8 @@
|
||||
"./node_modules/morgan/node_modules/ms/index.js",
|
||||
"./node_modules/mount-point/index.js",
|
||||
"./node_modules/mount-point/node_modules/@sindresorhus/df/index.js",
|
||||
"./node_modules/mount-point/node_modules/pify/index.js",
|
||||
"./node_modules/move-file/index.js",
|
||||
"./node_modules/move-file/node_modules/make-dir/index.js",
|
||||
"./node_modules/move-file/node_modules/path-exists/index.js",
|
||||
"./node_modules/ms/index.js",
|
||||
"./node_modules/negotiator/index.js",
|
||||
"./node_modules/negotiator/lib/charset.js",
|
||||
@@ -3095,6 +3093,9 @@
|
||||
"./node_modules/normalize-package-data/lib/normalize.js",
|
||||
"./node_modules/normalize-package-data/lib/typos.json",
|
||||
"./node_modules/normalize-package-data/lib/warning_messages.json",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/git-host-info.js",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/git-host.js",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/index.js",
|
||||
"./node_modules/normalize-path/index.js",
|
||||
"./node_modules/npm-conf/index.js",
|
||||
"./node_modules/npm-conf/lib/util.js",
|
||||
@@ -3114,11 +3115,6 @@
|
||||
"./node_modules/ospath/index.js",
|
||||
"./node_modules/p-defer/index.js",
|
||||
"./node_modules/p-finally/index.js",
|
||||
"./node_modules/p-map/index.js",
|
||||
"./node_modules/p-queue/dist/index.js",
|
||||
"./node_modules/p-queue/dist/lower-bound.js",
|
||||
"./node_modules/p-queue/dist/priority-queue.js",
|
||||
"./node_modules/p-queue/node_modules/eventemitter3/index.js",
|
||||
"./node_modules/p-timeout/index.js",
|
||||
"./node_modules/p-try/index.js",
|
||||
"./node_modules/pako/index.js",
|
||||
@@ -3167,13 +3163,6 @@
|
||||
"./node_modules/pify/index.js",
|
||||
"./node_modules/pinkie-promise/index.js",
|
||||
"./node_modules/pixelmatch/index.js",
|
||||
"./node_modules/plist/index.js",
|
||||
"./node_modules/plist/lib/build.js",
|
||||
"./node_modules/plist/lib/parse.js",
|
||||
"./node_modules/plist/lib/xmldom/dom-parser.js",
|
||||
"./node_modules/plist/lib/xmldom/dom.js",
|
||||
"./node_modules/plist/lib/xmldom/entities.js",
|
||||
"./node_modules/plist/lib/xmldom/sax.js",
|
||||
"./node_modules/pluralize/pluralize.js",
|
||||
"./node_modules/pngjs/lib/bitmapper.js",
|
||||
"./node_modules/pngjs/lib/bitpacker.js",
|
||||
@@ -3650,7 +3639,6 @@
|
||||
"./node_modules/run-applescript/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/index.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/run-applescript/node_modules/get-stream/index.js",
|
||||
"./node_modules/run-applescript/node_modules/path-key/index.js",
|
||||
"./node_modules/run-parallel/index.js",
|
||||
"./node_modules/sanitize-filename/index.js",
|
||||
@@ -3716,13 +3704,16 @@
|
||||
"./node_modules/shell-env/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./node_modules/shell-env/node_modules/execa/index.js",
|
||||
"./node_modules/shell-env/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/shell-env/node_modules/get-stream/index.js",
|
||||
"./node_modules/shell-env/node_modules/path-key/index.js",
|
||||
"./node_modules/shell-env/node_modules/strip-ansi/index.js",
|
||||
"./node_modules/shell-quote/index.js",
|
||||
"./node_modules/signal-exit/index.js",
|
||||
"./node_modules/simple-swizzle/index.js",
|
||||
"./node_modules/simple-swizzle/node_modules/is-arrayish/index.js",
|
||||
"./node_modules/slash/index.js",
|
||||
"./node_modules/sort-keys-length/index.js",
|
||||
"./node_modules/sort-keys-length/node_modules/is-plain-obj/index.js",
|
||||
"./node_modules/sort-keys-length/node_modules/sort-keys/index.js",
|
||||
"./node_modules/source-map/lib/array-set.js",
|
||||
"./node_modules/source-map/lib/base64-vlq.js",
|
||||
@@ -3756,6 +3747,7 @@
|
||||
"./node_modules/string-width/node_modules/is-fullwidth-code-point/index.js",
|
||||
"./node_modules/string-width/node_modules/strip-ansi/index.js",
|
||||
"./node_modules/stringify-object/index.js",
|
||||
"./node_modules/stringify-object/node_modules/is-obj/index.js",
|
||||
"./node_modules/strip-ansi/index.js",
|
||||
"./node_modules/strip-bom/index.js",
|
||||
"./node_modules/strip-eof/index.js",
|
||||
@@ -3815,10 +3807,12 @@
|
||||
"./node_modules/trash/lib/linux.js",
|
||||
"./node_modules/trash/lib/macos.js",
|
||||
"./node_modules/trash/lib/windows.js",
|
||||
"./node_modules/trash/node_modules/array-union/index.js",
|
||||
"./node_modules/trash/node_modules/dir-glob/index.js",
|
||||
"./node_modules/trash/node_modules/glob/common.js",
|
||||
"./node_modules/trash/node_modules/globby/gitignore.js",
|
||||
"./node_modules/trash/node_modules/globby/index.js",
|
||||
"./node_modules/trash/node_modules/p-map/index.js",
|
||||
"./node_modules/trash/node_modules/path-type/index.js",
|
||||
"./node_modules/trash/node_modules/pify/index.js",
|
||||
"./node_modules/trash/node_modules/slash/index.js",
|
||||
@@ -3933,7 +3927,6 @@
|
||||
"./node_modules/universalify/index.js",
|
||||
"./node_modules/unpipe/index.js",
|
||||
"./node_modules/unused-filename/index.js",
|
||||
"./node_modules/unused-filename/node_modules/path-exists/index.js",
|
||||
"./node_modules/url-parse-lax/index.js",
|
||||
"./node_modules/url-parse/index.js",
|
||||
"./node_modules/utf8-stream/index.js",
|
||||
@@ -3962,7 +3955,6 @@
|
||||
"./node_modules/wonka/dist/wonka.js",
|
||||
"./node_modules/wrappy/wrappy.js",
|
||||
"./node_modules/xdg-trashdir/index.js",
|
||||
"./node_modules/xdg-trashdir/node_modules/pify/index.js",
|
||||
"./node_modules/xml/lib/escapeForXML.js",
|
||||
"./node_modules/xml/lib/xml.js",
|
||||
"./node_modules/xml2js/lib/bom.js",
|
||||
@@ -4003,10 +3995,18 @@
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/XMLText.js",
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/XMLWriterBase.js",
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/index.js",
|
||||
"./node_modules/xmlbuilder/lib/DocumentPosition.js",
|
||||
"./node_modules/xmlbuilder/lib/NodeType.js",
|
||||
"./node_modules/xmlbuilder/lib/Utility.js",
|
||||
"./node_modules/xmlbuilder/lib/WriterState.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLAttribute.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLCData.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLCharacterData.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLComment.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMConfiguration.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMImplementation.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMStringList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDAttList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDElement.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDEntity.js",
|
||||
@@ -4015,8 +4015,11 @@
|
||||
"./node_modules/xmlbuilder/lib/XMLDocType.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDocument.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDocumentCB.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDummy.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLElement.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNamedNodeMap.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNode.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNodeList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLProcessingInstruction.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLRaw.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLStreamWriter.js",
|
||||
@@ -4171,6 +4174,7 @@
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/stat.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./packages/data-context/node_modules/get-stream/index.js",
|
||||
"./packages/data-context/node_modules/micromatch/index.js",
|
||||
"./packages/data-context/node_modules/path-key/index.js",
|
||||
"./packages/data-context/node_modules/source-map/lib/array-set.js",
|
||||
@@ -4350,6 +4354,13 @@
|
||||
"./packages/launcher/lib/types.ts",
|
||||
"./packages/launcher/lib/utils.ts",
|
||||
"./packages/launcher/lib/windows/index.ts",
|
||||
"./packages/launcher/node_modules/plist/index.js",
|
||||
"./packages/launcher/node_modules/plist/lib/build.js",
|
||||
"./packages/launcher/node_modules/plist/lib/parse.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/dom-parser.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/dom.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/entities.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/sax.js",
|
||||
"./packages/launcher/node_modules/which/which.js",
|
||||
"./packages/net-stubbing/lib/external-types.ts",
|
||||
"./packages/net-stubbing/lib/internal-types.ts",
|
||||
@@ -4460,7 +4471,6 @@
|
||||
"./packages/scaffold-config/node_modules/locate-path/index.js",
|
||||
"./packages/scaffold-config/node_modules/p-limit/index.js",
|
||||
"./packages/scaffold-config/node_modules/p-locate/index.js",
|
||||
"./packages/scaffold-config/node_modules/path-exists/index.js",
|
||||
"./packages/scaffold-config/src/commandFile.ts",
|
||||
"./packages/scaffold-config/src/component-index-template.ts",
|
||||
"./packages/scaffold-config/src/ct-detect-third-party.ts",
|
||||
@@ -4639,10 +4649,10 @@
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/escape.js",
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/readShebang.js",
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./packages/server/node_modules/eventemitter3/index.js",
|
||||
"./packages/server/node_modules/execa/index.js",
|
||||
"./packages/server/node_modules/execa/lib/stdio.js",
|
||||
"./packages/server/node_modules/execa/node_modules/signal-exit/index.js",
|
||||
"./packages/server/node_modules/get-stream/index.js",
|
||||
"./packages/server/node_modules/glob/common.js",
|
||||
"./packages/server/node_modules/graceful-fs/clone.js",
|
||||
"./packages/server/node_modules/graceful-fs/legacy-streams.js",
|
||||
@@ -4692,6 +4702,9 @@
|
||||
"./packages/server/node_modules/object.assign/index.js",
|
||||
"./packages/server/node_modules/object.assign/polyfill.js",
|
||||
"./packages/server/node_modules/object.assign/shim.js",
|
||||
"./packages/server/node_modules/p-queue/dist/index.js",
|
||||
"./packages/server/node_modules/p-queue/dist/lower-bound.js",
|
||||
"./packages/server/node_modules/p-queue/dist/priority-queue.js",
|
||||
"./packages/server/node_modules/path-key/index.js",
|
||||
"./packages/server/node_modules/readable-stream/lib/internal/streams/async_iterator.js",
|
||||
"./packages/server/node_modules/readable-stream/lib/internal/streams/destroy.js",
|
||||
@@ -4768,5 +4781,5 @@
|
||||
"./tooling/v8-snapshot/cache/darwin/snapshot-entry.js"
|
||||
],
|
||||
"deferredHashFile": "yarn.lock",
|
||||
"deferredHash": "86dd3ae2904ae6b8319ccaaf3fa79535447b7a479cc0b17c0b7b1735bae8b5bd"
|
||||
"deferredHash": "0854996acb8a0d1092c29dc13c9d68e80ab1cc95637a882aeabfc001ed9a09af"
|
||||
}
|
||||
@@ -153,6 +153,7 @@
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/browser.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/semver/semver.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/browser.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/index.js",
|
||||
@@ -160,6 +161,7 @@
|
||||
"./node_modules/@cypress/request/index.js",
|
||||
"./node_modules/@cypress/request/lib/helpers.js",
|
||||
"./node_modules/@cypress/request/lib/querystring.js",
|
||||
"./node_modules/@cypress/request/node_modules/form-data/lib/form_data.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/index.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/md5.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/rng.js",
|
||||
@@ -178,6 +180,7 @@
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/json/index.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/json/jsonfile.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/path-exists/index.js",
|
||||
"./node_modules/@electron/get/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/@electron/get/node_modules/got/source/index.js",
|
||||
"./node_modules/@electron/get/node_modules/normalize-url/index.js",
|
||||
"./node_modules/@electron/get/node_modules/responselike/src/index.js",
|
||||
@@ -198,6 +201,7 @@
|
||||
"./node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js",
|
||||
"./node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js",
|
||||
"./node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js",
|
||||
"./node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js",
|
||||
"./node_modules/@kwsites/file-exists/dist/index.js",
|
||||
"./node_modules/@kwsites/file-exists/dist/src/index.js",
|
||||
"./node_modules/@nodelib/fs.scandir/out/adapters/fs.js",
|
||||
@@ -290,6 +294,8 @@
|
||||
"./node_modules/convert-source-map/node_modules/safe-buffer/index.js",
|
||||
"./node_modules/cp-file/cp-file-error.js",
|
||||
"./node_modules/cp-file/fs.js",
|
||||
"./node_modules/cp-file/node_modules/make-dir/index.js",
|
||||
"./node_modules/cp-file/node_modules/semver/semver.js",
|
||||
"./node_modules/cp-file/progress-emitter.js",
|
||||
"./node_modules/crc-32/crc32.js",
|
||||
"./node_modules/crc32-stream/lib/crc32-stream.js",
|
||||
@@ -355,11 +361,7 @@
|
||||
"./node_modules/fluent-ffmpeg/lib/utils.js",
|
||||
"./node_modules/follow-redirects/index.js",
|
||||
"./node_modules/forever-agent/index.js",
|
||||
"./node_modules/form-data/lib/form_data.js",
|
||||
"./node_modules/front-matter/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/loader.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/default_full.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/function.js",
|
||||
"./node_modules/fs-constants/index.js",
|
||||
"./node_modules/fs-extra/lib/fs/index.js",
|
||||
"./node_modules/fs-extra/lib/index.js",
|
||||
@@ -425,6 +427,8 @@
|
||||
"./node_modules/jose/dist/node/cjs/runtime/node_key.js",
|
||||
"./node_modules/jose/dist/node/cjs/runtime/sign.js",
|
||||
"./node_modules/jose/dist/node/cjs/runtime/webcrypto.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/loader.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/default_full.js",
|
||||
"./node_modules/jsbn/index.js",
|
||||
"./node_modules/json3/lib/json3.js",
|
||||
"./node_modules/keyv/src/index.js",
|
||||
@@ -487,7 +491,6 @@
|
||||
"./node_modules/morgan/index.js",
|
||||
"./node_modules/morgan/node_modules/debug/src/browser.js",
|
||||
"./node_modules/morgan/node_modules/debug/src/index.js",
|
||||
"./node_modules/move-file/node_modules/semver/semver.js",
|
||||
"./node_modules/nested-error-stacks/index.js",
|
||||
"./node_modules/nexus/dist/core.js",
|
||||
"./node_modules/nexus/dist/definitions/list.js",
|
||||
@@ -618,7 +621,6 @@
|
||||
"./node_modules/roarr/dist/factories/index.js",
|
||||
"./node_modules/roarr/dist/log.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/run-applescript/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/run-applescript/node_modules/semver/semver.js",
|
||||
"./node_modules/safe-buffer/index.js",
|
||||
"./node_modules/safer-buffer/safer.js",
|
||||
@@ -628,6 +630,7 @@
|
||||
"./node_modules/send/node_modules/debug/src/browser.js",
|
||||
"./node_modules/send/node_modules/debug/src/index.js",
|
||||
"./node_modules/shell-env/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/shell-env/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/shell-env/node_modules/semver/semver.js",
|
||||
"./node_modules/signal-exit/signals.js",
|
||||
"./node_modules/simple-git/dist/cjs/index.js",
|
||||
@@ -770,6 +773,7 @@
|
||||
"./packages/data-context/node_modules/fs-extra/lib/json/index.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/json/jsonfile.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/path-exists/index.js",
|
||||
"./packages/data-context/node_modules/get-stream/buffer-stream.js",
|
||||
"./packages/data-context/node_modules/readdirp/index.js",
|
||||
"./packages/data-context/node_modules/supports-color/index.js",
|
||||
"./packages/data-context/src/DataActions.ts",
|
||||
@@ -889,6 +893,7 @@
|
||||
"./packages/server/node_modules/duplexify/index.js",
|
||||
"./packages/server/node_modules/execa/lib/errname.js",
|
||||
"./packages/server/node_modules/execa/node_modules/signal-exit/signals.js",
|
||||
"./packages/server/node_modules/get-stream/buffer-stream.js",
|
||||
"./packages/server/node_modules/glob/glob.js",
|
||||
"./packages/server/node_modules/glob/sync.js",
|
||||
"./packages/server/node_modules/graceful-fs/graceful-fs.js",
|
||||
@@ -1028,6 +1033,9 @@
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/pretty.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/targets.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/utils.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/lru-cache/index.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/yallist/iterator.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/yallist/yallist.js",
|
||||
"./node_modules/@babel/helper-environment-visitor/lib/index.js",
|
||||
"./node_modules/@babel/helper-function-name/lib/index.js",
|
||||
"./node_modules/@babel/helper-hoist-variables/lib/index.js",
|
||||
@@ -1163,6 +1171,7 @@
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/common.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/get-stream/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/path-key/index.js",
|
||||
"./node_modules/@cypress/commit-info/src/git-api.js",
|
||||
"./node_modules/@cypress/commit-info/src/index.js",
|
||||
@@ -1190,6 +1199,7 @@
|
||||
"./node_modules/@cypress/request/lib/multipart.js",
|
||||
"./node_modules/@cypress/request/lib/redirect.js",
|
||||
"./node_modules/@cypress/request/lib/tunnel.js",
|
||||
"./node_modules/@cypress/request/node_modules/form-data/lib/populate.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/formats.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/index.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/parse.js",
|
||||
@@ -1243,6 +1253,7 @@
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/stat.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./node_modules/@electron/get/node_modules/get-stream/index.js",
|
||||
"./node_modules/@electron/get/node_modules/got/package.json",
|
||||
"./node_modules/@electron/get/node_modules/got/source/as-promise.js",
|
||||
"./node_modules/@electron/get/node_modules/got/source/as-stream.js",
|
||||
@@ -1556,7 +1567,6 @@
|
||||
"./node_modules/@opentelemetry/sdk-trace-base/build/src/utility.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/build/src/index.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/lru-cache/index.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/range.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/semver.js",
|
||||
@@ -1910,6 +1920,7 @@
|
||||
"./node_modules/core-util-is/lib/util.js",
|
||||
"./node_modules/cors/lib/index.js",
|
||||
"./node_modules/cp-file/index.js",
|
||||
"./node_modules/cp-file/node_modules/pify/index.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/destroy.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js",
|
||||
@@ -1976,7 +1987,6 @@
|
||||
"./node_modules/ejs/package.json",
|
||||
"./node_modules/electron-context-menu/index.js",
|
||||
"./node_modules/electron-dl/index.js",
|
||||
"./node_modules/electron-packager/node_modules/lru-cache/index.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/range.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/semver.js",
|
||||
@@ -2074,6 +2084,7 @@
|
||||
"./node_modules/esutils/lib/keyword.js",
|
||||
"./node_modules/esutils/lib/utils.js",
|
||||
"./node_modules/etag/index.js",
|
||||
"./node_modules/eventemitter3/index.js",
|
||||
"./node_modules/execa/index.js",
|
||||
"./node_modules/execa/lib/command.js",
|
||||
"./node_modules/execa/lib/error.js",
|
||||
@@ -2231,36 +2242,8 @@
|
||||
"./node_modules/fluent-ffmpeg/lib/processor.js",
|
||||
"./node_modules/fluent-ffmpeg/lib/recipes.js",
|
||||
"./node_modules/follow-redirects/debug.js",
|
||||
"./node_modules/form-data/lib/populate.js",
|
||||
"./node_modules/forwarded/index.js",
|
||||
"./node_modules/fresh/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/common.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/dumper.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/exception.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/mark.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/core.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/json.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/binary.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/bool.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/float.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/int.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/map.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/merge.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/null.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/omap.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/pairs.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/seq.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/set.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/str.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/timestamp.js",
|
||||
"./node_modules/fs-extra/lib/copy-sync/copy-sync.js",
|
||||
"./node_modules/fs-extra/lib/copy-sync/index.js",
|
||||
"./node_modules/fs-extra/lib/copy/copy.js",
|
||||
@@ -2335,8 +2318,8 @@
|
||||
"./node_modules/get-package-info/node_modules/parse-json/index.js",
|
||||
"./node_modules/get-package-info/node_modules/parse-json/vendor/parse.js",
|
||||
"./node_modules/get-package-info/node_modules/parse-json/vendor/unicode.js",
|
||||
"./node_modules/get-package-info/node_modules/path-exists/index.js",
|
||||
"./node_modules/get-package-info/node_modules/path-type/index.js",
|
||||
"./node_modules/get-package-info/node_modules/pify/index.js",
|
||||
"./node_modules/get-package-info/node_modules/read-pkg-up/index.js",
|
||||
"./node_modules/get-package-info/node_modules/read-pkg/index.js",
|
||||
"./node_modules/get-port/index.js",
|
||||
@@ -2354,7 +2337,6 @@
|
||||
"./node_modules/global-agent/dist/index.js",
|
||||
"./node_modules/global-agent/dist/utilities/isUrlMatchingNoProxy.js",
|
||||
"./node_modules/global-agent/dist/utilities/parseProxyUrl.js",
|
||||
"./node_modules/global-agent/node_modules/lru-cache/index.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/range.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/semver.js",
|
||||
@@ -2406,8 +2388,6 @@
|
||||
"./node_modules/globalthis/shim.js",
|
||||
"./node_modules/globby/gitignore.js",
|
||||
"./node_modules/globby/index.js",
|
||||
"./node_modules/globby/node_modules/array-union/index.js",
|
||||
"./node_modules/globby/node_modules/slash/index.js",
|
||||
"./node_modules/graceful-fs/clone.js",
|
||||
"./node_modules/graceful-fs/legacy-streams.js",
|
||||
"./node_modules/grapheme-splitter/index.js",
|
||||
@@ -2551,9 +2531,6 @@
|
||||
"./node_modules/has-symbols/shams.js",
|
||||
"./node_modules/has/src/index.js",
|
||||
"./node_modules/he/he.js",
|
||||
"./node_modules/hosted-git-info/git-host-info.js",
|
||||
"./node_modules/hosted-git-info/git-host.js",
|
||||
"./node_modules/hosted-git-info/index.js",
|
||||
"./node_modules/html-tags/html-tags.json",
|
||||
"./node_modules/html-tags/index.js",
|
||||
"./node_modules/http-cache-semantics/index.js",
|
||||
@@ -2561,7 +2538,6 @@
|
||||
"./node_modules/http-proxy/lib/http-proxy/common.js",
|
||||
"./node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js",
|
||||
"./node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js",
|
||||
"./node_modules/http-proxy/node_modules/eventemitter3/index.js",
|
||||
"./node_modules/http-signature/lib/verify.js",
|
||||
"./node_modules/human-interval/index.js",
|
||||
"./node_modules/human-signals/build/src/core.js",
|
||||
@@ -2621,9 +2597,7 @@
|
||||
"./node_modules/is-fullwidth-code-point/index.js",
|
||||
"./node_modules/is-glob/index.js",
|
||||
"./node_modules/is-html/index.js",
|
||||
"./node_modules/is-obj/index.js",
|
||||
"./node_modules/is-path-inside/index.js",
|
||||
"./node_modules/is-plain-obj/index.js",
|
||||
"./node_modules/is-regexp/index.js",
|
||||
"./node_modules/is-stream/index.js",
|
||||
"./node_modules/is-typedarray/index.js",
|
||||
@@ -2713,6 +2687,33 @@
|
||||
"./node_modules/jose/dist/node/cjs/util/decode_protected_header.js",
|
||||
"./node_modules/jose/dist/node/cjs/util/errors.js",
|
||||
"./node_modules/js-tokens/index.js",
|
||||
"./node_modules/js-yaml/index.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/common.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/dumper.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/exception.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/mark.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/core.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/default_safe.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/failsafe.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/json.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/binary.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/bool.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/float.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/int.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/js/regexp.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/js/undefined.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/map.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/merge.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/null.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/omap.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/pairs.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/seq.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/set.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/str.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/timestamp.js",
|
||||
"./node_modules/jsesc/jsesc.js",
|
||||
"./node_modules/json-buffer/index.js",
|
||||
"./node_modules/json-schema/lib/validate.js",
|
||||
@@ -2924,8 +2925,6 @@
|
||||
"./node_modules/lodash/toNumber.js",
|
||||
"./node_modules/lodash/toString.js",
|
||||
"./node_modules/lru-cache/index.js",
|
||||
"./node_modules/lru-cache/node_modules/yallist/iterator.js",
|
||||
"./node_modules/lru-cache/node_modules/yallist/yallist.js",
|
||||
"./node_modules/make-error/index.js",
|
||||
"./node_modules/marionette-client/lib/marionette/message.js",
|
||||
"./node_modules/matcher/index.js",
|
||||
@@ -3027,9 +3026,8 @@
|
||||
"./node_modules/morgan/node_modules/ms/index.js",
|
||||
"./node_modules/mount-point/index.js",
|
||||
"./node_modules/mount-point/node_modules/@sindresorhus/df/index.js",
|
||||
"./node_modules/mount-point/node_modules/pify/index.js",
|
||||
"./node_modules/move-file/index.js",
|
||||
"./node_modules/move-file/node_modules/make-dir/index.js",
|
||||
"./node_modules/move-file/node_modules/path-exists/index.js",
|
||||
"./node_modules/ms/index.js",
|
||||
"./node_modules/negotiator/index.js",
|
||||
"./node_modules/negotiator/lib/charset.js",
|
||||
@@ -3094,6 +3092,9 @@
|
||||
"./node_modules/normalize-package-data/lib/normalize.js",
|
||||
"./node_modules/normalize-package-data/lib/typos.json",
|
||||
"./node_modules/normalize-package-data/lib/warning_messages.json",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/git-host-info.js",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/git-host.js",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/index.js",
|
||||
"./node_modules/normalize-path/index.js",
|
||||
"./node_modules/npm-conf/index.js",
|
||||
"./node_modules/npm-conf/lib/util.js",
|
||||
@@ -3113,11 +3114,6 @@
|
||||
"./node_modules/ospath/index.js",
|
||||
"./node_modules/p-defer/index.js",
|
||||
"./node_modules/p-finally/index.js",
|
||||
"./node_modules/p-map/index.js",
|
||||
"./node_modules/p-queue/dist/index.js",
|
||||
"./node_modules/p-queue/dist/lower-bound.js",
|
||||
"./node_modules/p-queue/dist/priority-queue.js",
|
||||
"./node_modules/p-queue/node_modules/eventemitter3/index.js",
|
||||
"./node_modules/p-timeout/index.js",
|
||||
"./node_modules/p-try/index.js",
|
||||
"./node_modules/pako/index.js",
|
||||
@@ -3166,13 +3162,6 @@
|
||||
"./node_modules/pify/index.js",
|
||||
"./node_modules/pinkie-promise/index.js",
|
||||
"./node_modules/pixelmatch/index.js",
|
||||
"./node_modules/plist/index.js",
|
||||
"./node_modules/plist/lib/build.js",
|
||||
"./node_modules/plist/lib/parse.js",
|
||||
"./node_modules/plist/lib/xmldom/dom-parser.js",
|
||||
"./node_modules/plist/lib/xmldom/dom.js",
|
||||
"./node_modules/plist/lib/xmldom/entities.js",
|
||||
"./node_modules/plist/lib/xmldom/sax.js",
|
||||
"./node_modules/pluralize/pluralize.js",
|
||||
"./node_modules/pngjs/lib/bitmapper.js",
|
||||
"./node_modules/pngjs/lib/bitpacker.js",
|
||||
@@ -3649,7 +3638,6 @@
|
||||
"./node_modules/run-applescript/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/index.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/run-applescript/node_modules/get-stream/index.js",
|
||||
"./node_modules/run-applescript/node_modules/path-key/index.js",
|
||||
"./node_modules/run-parallel/index.js",
|
||||
"./node_modules/sanitize-filename/index.js",
|
||||
@@ -3715,13 +3703,16 @@
|
||||
"./node_modules/shell-env/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./node_modules/shell-env/node_modules/execa/index.js",
|
||||
"./node_modules/shell-env/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/shell-env/node_modules/get-stream/index.js",
|
||||
"./node_modules/shell-env/node_modules/path-key/index.js",
|
||||
"./node_modules/shell-env/node_modules/strip-ansi/index.js",
|
||||
"./node_modules/shell-quote/index.js",
|
||||
"./node_modules/signal-exit/index.js",
|
||||
"./node_modules/simple-swizzle/index.js",
|
||||
"./node_modules/simple-swizzle/node_modules/is-arrayish/index.js",
|
||||
"./node_modules/slash/index.js",
|
||||
"./node_modules/sort-keys-length/index.js",
|
||||
"./node_modules/sort-keys-length/node_modules/is-plain-obj/index.js",
|
||||
"./node_modules/sort-keys-length/node_modules/sort-keys/index.js",
|
||||
"./node_modules/source-map/lib/array-set.js",
|
||||
"./node_modules/source-map/lib/base64-vlq.js",
|
||||
@@ -3755,6 +3746,7 @@
|
||||
"./node_modules/string-width/node_modules/is-fullwidth-code-point/index.js",
|
||||
"./node_modules/string-width/node_modules/strip-ansi/index.js",
|
||||
"./node_modules/stringify-object/index.js",
|
||||
"./node_modules/stringify-object/node_modules/is-obj/index.js",
|
||||
"./node_modules/strip-ansi/index.js",
|
||||
"./node_modules/strip-bom/index.js",
|
||||
"./node_modules/strip-eof/index.js",
|
||||
@@ -3814,10 +3806,12 @@
|
||||
"./node_modules/trash/lib/linux.js",
|
||||
"./node_modules/trash/lib/macos.js",
|
||||
"./node_modules/trash/lib/windows.js",
|
||||
"./node_modules/trash/node_modules/array-union/index.js",
|
||||
"./node_modules/trash/node_modules/dir-glob/index.js",
|
||||
"./node_modules/trash/node_modules/glob/common.js",
|
||||
"./node_modules/trash/node_modules/globby/gitignore.js",
|
||||
"./node_modules/trash/node_modules/globby/index.js",
|
||||
"./node_modules/trash/node_modules/p-map/index.js",
|
||||
"./node_modules/trash/node_modules/path-type/index.js",
|
||||
"./node_modules/trash/node_modules/pify/index.js",
|
||||
"./node_modules/trash/node_modules/slash/index.js",
|
||||
@@ -3932,7 +3926,6 @@
|
||||
"./node_modules/universalify/index.js",
|
||||
"./node_modules/unpipe/index.js",
|
||||
"./node_modules/unused-filename/index.js",
|
||||
"./node_modules/unused-filename/node_modules/path-exists/index.js",
|
||||
"./node_modules/url-parse-lax/index.js",
|
||||
"./node_modules/url-parse/index.js",
|
||||
"./node_modules/utf8-stream/index.js",
|
||||
@@ -3961,7 +3954,6 @@
|
||||
"./node_modules/wonka/dist/wonka.js",
|
||||
"./node_modules/wrappy/wrappy.js",
|
||||
"./node_modules/xdg-trashdir/index.js",
|
||||
"./node_modules/xdg-trashdir/node_modules/pify/index.js",
|
||||
"./node_modules/xml/lib/escapeForXML.js",
|
||||
"./node_modules/xml/lib/xml.js",
|
||||
"./node_modules/xml2js/lib/bom.js",
|
||||
@@ -4002,10 +3994,18 @@
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/XMLText.js",
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/XMLWriterBase.js",
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/index.js",
|
||||
"./node_modules/xmlbuilder/lib/DocumentPosition.js",
|
||||
"./node_modules/xmlbuilder/lib/NodeType.js",
|
||||
"./node_modules/xmlbuilder/lib/Utility.js",
|
||||
"./node_modules/xmlbuilder/lib/WriterState.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLAttribute.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLCData.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLCharacterData.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLComment.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMConfiguration.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMImplementation.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMStringList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDAttList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDElement.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDEntity.js",
|
||||
@@ -4014,8 +4014,11 @@
|
||||
"./node_modules/xmlbuilder/lib/XMLDocType.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDocument.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDocumentCB.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDummy.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLElement.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNamedNodeMap.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNode.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNodeList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLProcessingInstruction.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLRaw.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLStreamWriter.js",
|
||||
@@ -4170,6 +4173,7 @@
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/stat.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./packages/data-context/node_modules/get-stream/index.js",
|
||||
"./packages/data-context/node_modules/micromatch/index.js",
|
||||
"./packages/data-context/node_modules/path-key/index.js",
|
||||
"./packages/data-context/node_modules/source-map/lib/array-set.js",
|
||||
@@ -4349,6 +4353,13 @@
|
||||
"./packages/launcher/lib/types.ts",
|
||||
"./packages/launcher/lib/utils.ts",
|
||||
"./packages/launcher/lib/windows/index.ts",
|
||||
"./packages/launcher/node_modules/plist/index.js",
|
||||
"./packages/launcher/node_modules/plist/lib/build.js",
|
||||
"./packages/launcher/node_modules/plist/lib/parse.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/dom-parser.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/dom.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/entities.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/sax.js",
|
||||
"./packages/launcher/node_modules/which/which.js",
|
||||
"./packages/net-stubbing/lib/external-types.ts",
|
||||
"./packages/net-stubbing/lib/internal-types.ts",
|
||||
@@ -4459,7 +4470,6 @@
|
||||
"./packages/scaffold-config/node_modules/locate-path/index.js",
|
||||
"./packages/scaffold-config/node_modules/p-limit/index.js",
|
||||
"./packages/scaffold-config/node_modules/p-locate/index.js",
|
||||
"./packages/scaffold-config/node_modules/path-exists/index.js",
|
||||
"./packages/scaffold-config/src/commandFile.ts",
|
||||
"./packages/scaffold-config/src/component-index-template.ts",
|
||||
"./packages/scaffold-config/src/ct-detect-third-party.ts",
|
||||
@@ -4638,10 +4648,10 @@
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/escape.js",
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/readShebang.js",
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./packages/server/node_modules/eventemitter3/index.js",
|
||||
"./packages/server/node_modules/execa/index.js",
|
||||
"./packages/server/node_modules/execa/lib/stdio.js",
|
||||
"./packages/server/node_modules/execa/node_modules/signal-exit/index.js",
|
||||
"./packages/server/node_modules/get-stream/index.js",
|
||||
"./packages/server/node_modules/glob/common.js",
|
||||
"./packages/server/node_modules/graceful-fs/clone.js",
|
||||
"./packages/server/node_modules/graceful-fs/legacy-streams.js",
|
||||
@@ -4691,6 +4701,9 @@
|
||||
"./packages/server/node_modules/object.assign/index.js",
|
||||
"./packages/server/node_modules/object.assign/polyfill.js",
|
||||
"./packages/server/node_modules/object.assign/shim.js",
|
||||
"./packages/server/node_modules/p-queue/dist/index.js",
|
||||
"./packages/server/node_modules/p-queue/dist/lower-bound.js",
|
||||
"./packages/server/node_modules/p-queue/dist/priority-queue.js",
|
||||
"./packages/server/node_modules/path-key/index.js",
|
||||
"./packages/server/node_modules/readable-stream/lib/internal/streams/async_iterator.js",
|
||||
"./packages/server/node_modules/readable-stream/lib/internal/streams/destroy.js",
|
||||
@@ -4767,5 +4780,5 @@
|
||||
"./tooling/v8-snapshot/cache/linux/snapshot-entry.js"
|
||||
],
|
||||
"deferredHashFile": "yarn.lock",
|
||||
"deferredHash": "86dd3ae2904ae6b8319ccaaf3fa79535447b7a479cc0b17c0b7b1735bae8b5bd"
|
||||
"deferredHash": "0854996acb8a0d1092c29dc13c9d68e80ab1cc95637a882aeabfc001ed9a09af"
|
||||
}
|
||||
@@ -86,10 +86,13 @@
|
||||
],
|
||||
"deferred": [
|
||||
"./node_modules/@ampproject/remapping/dist/remapping.umd.js",
|
||||
"./node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js",
|
||||
"./node_modules/@babel/core/lib/config/config-chain.js",
|
||||
"./node_modules/@babel/core/lib/config/config-descriptors.js",
|
||||
"./node_modules/@babel/core/lib/config/files/configuration.js",
|
||||
"./node_modules/@babel/core/lib/config/files/import-meta-resolve.js",
|
||||
"./node_modules/@babel/core/lib/config/files/index.js",
|
||||
"./node_modules/@babel/core/lib/config/files/module-types.js",
|
||||
"./node_modules/@babel/core/lib/config/files/plugins.js",
|
||||
"./node_modules/@babel/core/lib/config/full.js",
|
||||
"./node_modules/@babel/core/lib/config/helpers/config-api.js",
|
||||
@@ -102,8 +105,10 @@
|
||||
"./node_modules/@babel/core/lib/transformation/file/file.js",
|
||||
"./node_modules/@babel/core/lib/transformation/normalize-file.js",
|
||||
"./node_modules/@babel/core/node_modules/semver/semver.js",
|
||||
"./node_modules/@babel/generator/lib/index.js",
|
||||
"./node_modules/@babel/generator/lib/node/index.js",
|
||||
"./node_modules/@babel/generator/lib/node/whitespace.js",
|
||||
"./node_modules/@babel/generator/lib/printer.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/semver/semver.js",
|
||||
"./node_modules/@babel/helper-module-transforms/lib/index.js",
|
||||
"./node_modules/@babel/traverse/lib/context.js",
|
||||
@@ -112,6 +117,8 @@
|
||||
"./node_modules/@babel/traverse/lib/path/modification.js",
|
||||
"./node_modules/@babel/traverse/lib/path/removal.js",
|
||||
"./node_modules/@babel/traverse/lib/path/replacement.js",
|
||||
"./node_modules/@babel/traverse/lib/scope/index.js",
|
||||
"./node_modules/@babel/traverse/lib/scope/lib/renamer.js",
|
||||
"./node_modules/@babel/traverse/lib/traverse-node.js",
|
||||
"./node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js",
|
||||
"./node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js",
|
||||
@@ -146,15 +153,15 @@
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/browser.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/semver/semver.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/browser.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/index.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/registry-js/dist/lib/index.js",
|
||||
"./node_modules/@cypress/get-windows-proxy/node_modules/registry-js/dist/lib/registry.js",
|
||||
"./node_modules/@cypress/request-promise/lib/rp.js",
|
||||
"./node_modules/@cypress/request/index.js",
|
||||
"./node_modules/@cypress/request/lib/helpers.js",
|
||||
"./node_modules/@cypress/request/lib/querystring.js",
|
||||
"./node_modules/@cypress/request/node_modules/form-data/lib/form_data.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/index.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/md5.js",
|
||||
"./node_modules/@cypress/request/node_modules/uuid/dist/rng.js",
|
||||
@@ -173,6 +180,7 @@
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/json/index.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/json/jsonfile.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/path-exists/index.js",
|
||||
"./node_modules/@electron/get/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/@electron/get/node_modules/got/source/index.js",
|
||||
"./node_modules/@electron/get/node_modules/normalize-url/index.js",
|
||||
"./node_modules/@electron/get/node_modules/responselike/src/index.js",
|
||||
@@ -193,6 +201,7 @@
|
||||
"./node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js",
|
||||
"./node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js",
|
||||
"./node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js",
|
||||
"./node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js",
|
||||
"./node_modules/@kwsites/file-exists/dist/index.js",
|
||||
"./node_modules/@kwsites/file-exists/dist/src/index.js",
|
||||
"./node_modules/@nodelib/fs.scandir/out/adapters/fs.js",
|
||||
@@ -285,6 +294,8 @@
|
||||
"./node_modules/convert-source-map/node_modules/safe-buffer/index.js",
|
||||
"./node_modules/cp-file/cp-file-error.js",
|
||||
"./node_modules/cp-file/fs.js",
|
||||
"./node_modules/cp-file/node_modules/make-dir/index.js",
|
||||
"./node_modules/cp-file/node_modules/semver/semver.js",
|
||||
"./node_modules/cp-file/progress-emitter.js",
|
||||
"./node_modules/crc-32/crc32.js",
|
||||
"./node_modules/crc32-stream/lib/crc32-stream.js",
|
||||
@@ -350,11 +361,7 @@
|
||||
"./node_modules/fluent-ffmpeg/lib/utils.js",
|
||||
"./node_modules/follow-redirects/index.js",
|
||||
"./node_modules/forever-agent/index.js",
|
||||
"./node_modules/form-data/lib/form_data.js",
|
||||
"./node_modules/front-matter/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/loader.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/default_full.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/function.js",
|
||||
"./node_modules/fs-constants/index.js",
|
||||
"./node_modules/fs-extra/lib/fs/index.js",
|
||||
"./node_modules/fs-extra/lib/index.js",
|
||||
@@ -420,6 +427,8 @@
|
||||
"./node_modules/jose/dist/node/cjs/runtime/node_key.js",
|
||||
"./node_modules/jose/dist/node/cjs/runtime/sign.js",
|
||||
"./node_modules/jose/dist/node/cjs/runtime/webcrypto.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/loader.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/default_full.js",
|
||||
"./node_modules/jsbn/index.js",
|
||||
"./node_modules/json3/lib/json3.js",
|
||||
"./node_modules/keyv/src/index.js",
|
||||
@@ -482,7 +491,6 @@
|
||||
"./node_modules/morgan/index.js",
|
||||
"./node_modules/morgan/node_modules/debug/src/browser.js",
|
||||
"./node_modules/morgan/node_modules/debug/src/index.js",
|
||||
"./node_modules/move-file/node_modules/semver/semver.js",
|
||||
"./node_modules/nested-error-stacks/index.js",
|
||||
"./node_modules/nexus/dist/core.js",
|
||||
"./node_modules/nexus/dist/definitions/list.js",
|
||||
@@ -567,10 +575,20 @@
|
||||
"./node_modules/pumpify/index.js",
|
||||
"./node_modules/queue/index.js",
|
||||
"./node_modules/react-docgen/dist/babelParser.js",
|
||||
"./node_modules/react-docgen/dist/handlers/componentMethodsHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/defaultPropsHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/flowTypeHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/propTypeHandler.js",
|
||||
"./node_modules/react-docgen/dist/importer/index.js",
|
||||
"./node_modules/react-docgen/dist/importer/makeFsImporter.js",
|
||||
"./node_modules/react-docgen/dist/main.js",
|
||||
"./node_modules/react-docgen/dist/parse.js",
|
||||
"./node_modules/react-docgen/dist/utils/getFlowType.js",
|
||||
"./node_modules/react-docgen/dist/utils/getMethodDocumentation.js",
|
||||
"./node_modules/react-docgen/dist/utils/getParameterName.js",
|
||||
"./node_modules/react-docgen/dist/utils/getPropType.js",
|
||||
"./node_modules/react-docgen/dist/utils/getTSType.js",
|
||||
"./node_modules/react-docgen/dist/utils/printValue.js",
|
||||
"./node_modules/readable-stream/lib/_stream_duplex.js",
|
||||
"./node_modules/readable-stream/lib/_stream_passthrough.js",
|
||||
"./node_modules/readable-stream/lib/_stream_readable.js",
|
||||
@@ -604,7 +622,6 @@
|
||||
"./node_modules/roarr/dist/factories/index.js",
|
||||
"./node_modules/roarr/dist/log.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/run-applescript/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/run-applescript/node_modules/semver/semver.js",
|
||||
"./node_modules/safe-buffer/index.js",
|
||||
"./node_modules/safer-buffer/safer.js",
|
||||
@@ -614,6 +631,7 @@
|
||||
"./node_modules/send/node_modules/debug/src/browser.js",
|
||||
"./node_modules/send/node_modules/debug/src/index.js",
|
||||
"./node_modules/shell-env/node_modules/execa/lib/errname.js",
|
||||
"./node_modules/shell-env/node_modules/get-stream/buffer-stream.js",
|
||||
"./node_modules/shell-env/node_modules/semver/semver.js",
|
||||
"./node_modules/signal-exit/signals.js",
|
||||
"./node_modules/simple-git/dist/cjs/index.js",
|
||||
@@ -758,6 +776,7 @@
|
||||
"./packages/data-context/node_modules/fs-extra/lib/json/index.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/json/jsonfile.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/path-exists/index.js",
|
||||
"./packages/data-context/node_modules/get-stream/buffer-stream.js",
|
||||
"./packages/data-context/node_modules/readdirp/index.js",
|
||||
"./packages/data-context/node_modules/supports-color/index.js",
|
||||
"./packages/data-context/src/DataActions.ts",
|
||||
@@ -877,6 +896,7 @@
|
||||
"./packages/server/node_modules/duplexify/index.js",
|
||||
"./packages/server/node_modules/execa/lib/errname.js",
|
||||
"./packages/server/node_modules/execa/node_modules/signal-exit/signals.js",
|
||||
"./packages/server/node_modules/get-stream/buffer-stream.js",
|
||||
"./packages/server/node_modules/glob/glob.js",
|
||||
"./packages/server/node_modules/glob/sync.js",
|
||||
"./packages/server/node_modules/graceful-fs/graceful-fs.js",
|
||||
@@ -963,8 +983,6 @@
|
||||
"./node_modules/@babel/compat-data/plugins.js",
|
||||
"./node_modules/@babel/core/lib/config/caching.js",
|
||||
"./node_modules/@babel/core/lib/config/files/import.cjs",
|
||||
"./node_modules/@babel/core/lib/config/files/index.js",
|
||||
"./node_modules/@babel/core/lib/config/files/module-types.js",
|
||||
"./node_modules/@babel/core/lib/config/files/package.js",
|
||||
"./node_modules/@babel/core/lib/config/files/utils.js",
|
||||
"./node_modules/@babel/core/lib/config/helpers/deep-array.js",
|
||||
@@ -1009,9 +1027,7 @@
|
||||
"./node_modules/@babel/generator/lib/generators/template-literals.js",
|
||||
"./node_modules/@babel/generator/lib/generators/types.js",
|
||||
"./node_modules/@babel/generator/lib/generators/typescript.js",
|
||||
"./node_modules/@babel/generator/lib/index.js",
|
||||
"./node_modules/@babel/generator/lib/node/parentheses.js",
|
||||
"./node_modules/@babel/generator/lib/printer.js",
|
||||
"./node_modules/@babel/generator/lib/source-map.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/debug.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/filter-items.js",
|
||||
@@ -1020,6 +1036,9 @@
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/pretty.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/targets.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/lib/utils.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/lru-cache/index.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/yallist/iterator.js",
|
||||
"./node_modules/@babel/helper-compilation-targets/node_modules/yallist/yallist.js",
|
||||
"./node_modules/@babel/helper-environment-visitor/lib/index.js",
|
||||
"./node_modules/@babel/helper-function-name/lib/index.js",
|
||||
"./node_modules/@babel/helper-hoist-variables/lib/index.js",
|
||||
@@ -1065,9 +1084,12 @@
|
||||
"./node_modules/@babel/runtime/helpers/nonIterableRest.js",
|
||||
"./node_modules/@babel/runtime/helpers/nonIterableSpread.js",
|
||||
"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js",
|
||||
"./node_modules/@babel/runtime/helpers/regeneratorRuntime.js",
|
||||
"./node_modules/@babel/runtime/helpers/setPrototypeOf.js",
|
||||
"./node_modules/@babel/runtime/helpers/slicedToArray.js",
|
||||
"./node_modules/@babel/runtime/helpers/toConsumableArray.js",
|
||||
"./node_modules/@babel/runtime/helpers/toPrimitive.js",
|
||||
"./node_modules/@babel/runtime/helpers/toPropertyKey.js",
|
||||
"./node_modules/@babel/runtime/helpers/typeof.js",
|
||||
"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js",
|
||||
"./node_modules/@babel/runtime/regenerator/index.js",
|
||||
@@ -1091,12 +1113,9 @@
|
||||
"./node_modules/@babel/traverse/lib/path/lib/removal-hooks.js",
|
||||
"./node_modules/@babel/traverse/lib/path/lib/virtual-types.js",
|
||||
"./node_modules/@babel/traverse/lib/scope/binding.js",
|
||||
"./node_modules/@babel/traverse/lib/scope/index.js",
|
||||
"./node_modules/@babel/traverse/lib/scope/lib/renamer.js",
|
||||
"./node_modules/@babel/traverse/lib/visitors.js",
|
||||
"./node_modules/@babel/types/lib/asserts/assertNode.js",
|
||||
"./node_modules/@babel/types/lib/asserts/generated/index.js",
|
||||
"./node_modules/@babel/types/lib/ast-types/generated/index.js",
|
||||
"./node_modules/@babel/types/lib/clone/clone.js",
|
||||
"./node_modules/@babel/types/lib/clone/cloneDeep.js",
|
||||
"./node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js",
|
||||
@@ -1116,6 +1135,7 @@
|
||||
"./node_modules/@babel/types/lib/converters/toExpression.js",
|
||||
"./node_modules/@babel/types/lib/converters/toIdentifier.js",
|
||||
"./node_modules/@babel/types/lib/converters/toKeyAlias.js",
|
||||
"./node_modules/@babel/types/lib/definitions/deprecated-aliases.js",
|
||||
"./node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js",
|
||||
"./node_modules/@babel/types/lib/modifications/inherits.js",
|
||||
"./node_modules/@babel/types/lib/modifications/removeProperties.js",
|
||||
@@ -1125,6 +1145,7 @@
|
||||
"./node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js",
|
||||
"./node_modules/@babel/types/lib/traverse/traverse.js",
|
||||
"./node_modules/@babel/types/lib/traverse/traverseFast.js",
|
||||
"./node_modules/@babel/types/lib/utils/deprecationWarning.js",
|
||||
"./node_modules/@babel/types/lib/utils/inherit.js",
|
||||
"./node_modules/@babel/types/lib/utils/shallowEqual.js",
|
||||
"./node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js",
|
||||
@@ -1153,6 +1174,7 @@
|
||||
"./node_modules/@cypress/commit-info/node_modules/debug/src/common.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/get-stream/index.js",
|
||||
"./node_modules/@cypress/commit-info/node_modules/path-key/index.js",
|
||||
"./node_modules/@cypress/commit-info/src/git-api.js",
|
||||
"./node_modules/@cypress/commit-info/src/index.js",
|
||||
@@ -1178,6 +1200,7 @@
|
||||
"./node_modules/@cypress/request/lib/multipart.js",
|
||||
"./node_modules/@cypress/request/lib/redirect.js",
|
||||
"./node_modules/@cypress/request/lib/tunnel.js",
|
||||
"./node_modules/@cypress/request/node_modules/form-data/lib/populate.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/formats.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/index.js",
|
||||
"./node_modules/@cypress/request/node_modules/qs/lib/parse.js",
|
||||
@@ -1231,6 +1254,7 @@
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/stat.js",
|
||||
"./node_modules/@electron/get/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./node_modules/@electron/get/node_modules/get-stream/index.js",
|
||||
"./node_modules/@electron/get/node_modules/got/package.json",
|
||||
"./node_modules/@electron/get/node_modules/got/source/as-promise.js",
|
||||
"./node_modules/@electron/get/node_modules/got/source/as-stream.js",
|
||||
@@ -1544,7 +1568,6 @@
|
||||
"./node_modules/@opentelemetry/sdk-trace-base/build/src/utility.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/build/src/index.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/lru-cache/index.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/range.js",
|
||||
"./node_modules/@opentelemetry/sdk-trace-node/node_modules/semver/classes/semver.js",
|
||||
@@ -1898,6 +1921,7 @@
|
||||
"./node_modules/core-util-is/lib/util.js",
|
||||
"./node_modules/cors/lib/index.js",
|
||||
"./node_modules/cp-file/index.js",
|
||||
"./node_modules/cp-file/node_modules/pify/index.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/destroy.js",
|
||||
"./node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js",
|
||||
@@ -1964,7 +1988,6 @@
|
||||
"./node_modules/ejs/package.json",
|
||||
"./node_modules/electron-context-menu/index.js",
|
||||
"./node_modules/electron-dl/index.js",
|
||||
"./node_modules/electron-packager/node_modules/lru-cache/index.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/range.js",
|
||||
"./node_modules/electron-packager/node_modules/semver/classes/semver.js",
|
||||
@@ -2062,6 +2085,7 @@
|
||||
"./node_modules/esutils/lib/keyword.js",
|
||||
"./node_modules/esutils/lib/utils.js",
|
||||
"./node_modules/etag/index.js",
|
||||
"./node_modules/eventemitter3/index.js",
|
||||
"./node_modules/execa/index.js",
|
||||
"./node_modules/execa/lib/command.js",
|
||||
"./node_modules/execa/lib/error.js",
|
||||
@@ -2124,6 +2148,7 @@
|
||||
"./node_modules/fast-glob/out/providers/stream.js",
|
||||
"./node_modules/fast-glob/out/providers/sync.js",
|
||||
"./node_modules/fast-glob/out/providers/transformers/entry.js",
|
||||
"./node_modules/fast-glob/out/readers/async.js",
|
||||
"./node_modules/fast-glob/out/readers/reader.js",
|
||||
"./node_modules/fast-glob/out/readers/stream.js",
|
||||
"./node_modules/fast-glob/out/readers/sync.js",
|
||||
@@ -2218,36 +2243,8 @@
|
||||
"./node_modules/fluent-ffmpeg/lib/processor.js",
|
||||
"./node_modules/fluent-ffmpeg/lib/recipes.js",
|
||||
"./node_modules/follow-redirects/debug.js",
|
||||
"./node_modules/form-data/lib/populate.js",
|
||||
"./node_modules/forwarded/index.js",
|
||||
"./node_modules/fresh/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/index.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/common.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/dumper.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/exception.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/mark.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/core.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/schema/json.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/binary.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/bool.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/float.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/int.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/map.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/merge.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/null.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/omap.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/pairs.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/seq.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/set.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/str.js",
|
||||
"./node_modules/front-matter/node_modules/js-yaml/lib/js-yaml/type/timestamp.js",
|
||||
"./node_modules/fs-extra/lib/copy-sync/copy-sync.js",
|
||||
"./node_modules/fs-extra/lib/copy-sync/index.js",
|
||||
"./node_modules/fs-extra/lib/copy/copy.js",
|
||||
@@ -2308,6 +2305,7 @@
|
||||
"./node_modules/galactus/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./node_modules/galactus/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./node_modules/gensync/index.js",
|
||||
"./node_modules/get-intrinsic/index.js",
|
||||
"./node_modules/get-own-enumerable-property-symbols/lib/index.js",
|
||||
"./node_modules/get-package-info/lib/index.js",
|
||||
"./node_modules/get-package-info/node_modules/debug/src/debug.js",
|
||||
@@ -2321,8 +2319,8 @@
|
||||
"./node_modules/get-package-info/node_modules/parse-json/index.js",
|
||||
"./node_modules/get-package-info/node_modules/parse-json/vendor/parse.js",
|
||||
"./node_modules/get-package-info/node_modules/parse-json/vendor/unicode.js",
|
||||
"./node_modules/get-package-info/node_modules/path-exists/index.js",
|
||||
"./node_modules/get-package-info/node_modules/path-type/index.js",
|
||||
"./node_modules/get-package-info/node_modules/pify/index.js",
|
||||
"./node_modules/get-package-info/node_modules/read-pkg-up/index.js",
|
||||
"./node_modules/get-package-info/node_modules/read-pkg/index.js",
|
||||
"./node_modules/get-port/index.js",
|
||||
@@ -2340,7 +2338,6 @@
|
||||
"./node_modules/global-agent/dist/index.js",
|
||||
"./node_modules/global-agent/dist/utilities/isUrlMatchingNoProxy.js",
|
||||
"./node_modules/global-agent/dist/utilities/parseProxyUrl.js",
|
||||
"./node_modules/global-agent/node_modules/lru-cache/index.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/comparator.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/range.js",
|
||||
"./node_modules/global-agent/node_modules/semver/classes/semver.js",
|
||||
@@ -2392,8 +2389,6 @@
|
||||
"./node_modules/globalthis/shim.js",
|
||||
"./node_modules/globby/gitignore.js",
|
||||
"./node_modules/globby/index.js",
|
||||
"./node_modules/globby/node_modules/array-union/index.js",
|
||||
"./node_modules/globby/node_modules/slash/index.js",
|
||||
"./node_modules/graceful-fs/clone.js",
|
||||
"./node_modules/graceful-fs/legacy-streams.js",
|
||||
"./node_modules/grapheme-splitter/index.js",
|
||||
@@ -2532,12 +2527,11 @@
|
||||
"./node_modules/graphql/version.js",
|
||||
"./node_modules/growl/lib/growl.js",
|
||||
"./node_modules/has-flag/index.js",
|
||||
"./node_modules/has-property-descriptors/index.js",
|
||||
"./node_modules/has-symbols/index.js",
|
||||
"./node_modules/has-symbols/shams.js",
|
||||
"./node_modules/has/src/index.js",
|
||||
"./node_modules/he/he.js",
|
||||
"./node_modules/hosted-git-info/git-host-info.js",
|
||||
"./node_modules/hosted-git-info/git-host.js",
|
||||
"./node_modules/hosted-git-info/index.js",
|
||||
"./node_modules/html-tags/html-tags.json",
|
||||
"./node_modules/html-tags/index.js",
|
||||
"./node_modules/http-cache-semantics/index.js",
|
||||
@@ -2545,7 +2539,6 @@
|
||||
"./node_modules/http-proxy/lib/http-proxy/common.js",
|
||||
"./node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js",
|
||||
"./node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js",
|
||||
"./node_modules/http-proxy/node_modules/eventemitter3/index.js",
|
||||
"./node_modules/http-signature/lib/verify.js",
|
||||
"./node_modules/human-interval/index.js",
|
||||
"./node_modules/human-signals/build/src/core.js",
|
||||
@@ -2605,9 +2598,7 @@
|
||||
"./node_modules/is-fullwidth-code-point/index.js",
|
||||
"./node_modules/is-glob/index.js",
|
||||
"./node_modules/is-html/index.js",
|
||||
"./node_modules/is-obj/index.js",
|
||||
"./node_modules/is-path-inside/index.js",
|
||||
"./node_modules/is-plain-obj/index.js",
|
||||
"./node_modules/is-regexp/index.js",
|
||||
"./node_modules/is-stream/index.js",
|
||||
"./node_modules/is-typedarray/index.js",
|
||||
@@ -2697,6 +2688,33 @@
|
||||
"./node_modules/jose/dist/node/cjs/util/decode_protected_header.js",
|
||||
"./node_modules/jose/dist/node/cjs/util/errors.js",
|
||||
"./node_modules/js-tokens/index.js",
|
||||
"./node_modules/js-yaml/index.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/common.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/dumper.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/exception.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/mark.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/core.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/default_safe.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/failsafe.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/schema/json.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/binary.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/bool.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/float.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/int.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/js/regexp.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/js/undefined.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/map.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/merge.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/null.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/omap.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/pairs.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/seq.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/set.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/str.js",
|
||||
"./node_modules/js-yaml/lib/js-yaml/type/timestamp.js",
|
||||
"./node_modules/jsesc/jsesc.js",
|
||||
"./node_modules/json-buffer/index.js",
|
||||
"./node_modules/json-schema/lib/validate.js",
|
||||
@@ -2907,6 +2925,7 @@
|
||||
"./node_modules/lodash/toInteger.js",
|
||||
"./node_modules/lodash/toNumber.js",
|
||||
"./node_modules/lodash/toString.js",
|
||||
"./node_modules/lru-cache/index.js",
|
||||
"./node_modules/make-error/index.js",
|
||||
"./node_modules/marionette-client/lib/marionette/message.js",
|
||||
"./node_modules/matcher/index.js",
|
||||
@@ -3008,9 +3027,8 @@
|
||||
"./node_modules/morgan/node_modules/ms/index.js",
|
||||
"./node_modules/mount-point/index.js",
|
||||
"./node_modules/mount-point/node_modules/@sindresorhus/df/index.js",
|
||||
"./node_modules/mount-point/node_modules/pify/index.js",
|
||||
"./node_modules/move-file/index.js",
|
||||
"./node_modules/move-file/node_modules/make-dir/index.js",
|
||||
"./node_modules/move-file/node_modules/path-exists/index.js",
|
||||
"./node_modules/ms/index.js",
|
||||
"./node_modules/negotiator/index.js",
|
||||
"./node_modules/negotiator/lib/charset.js",
|
||||
@@ -3075,6 +3093,9 @@
|
||||
"./node_modules/normalize-package-data/lib/normalize.js",
|
||||
"./node_modules/normalize-package-data/lib/typos.json",
|
||||
"./node_modules/normalize-package-data/lib/warning_messages.json",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/git-host-info.js",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/git-host.js",
|
||||
"./node_modules/normalize-package-data/node_modules/hosted-git-info/index.js",
|
||||
"./node_modules/normalize-path/index.js",
|
||||
"./node_modules/npm-conf/index.js",
|
||||
"./node_modules/npm-conf/lib/util.js",
|
||||
@@ -3094,11 +3115,6 @@
|
||||
"./node_modules/ospath/index.js",
|
||||
"./node_modules/p-defer/index.js",
|
||||
"./node_modules/p-finally/index.js",
|
||||
"./node_modules/p-map/index.js",
|
||||
"./node_modules/p-queue/dist/index.js",
|
||||
"./node_modules/p-queue/dist/lower-bound.js",
|
||||
"./node_modules/p-queue/dist/priority-queue.js",
|
||||
"./node_modules/p-queue/node_modules/eventemitter3/index.js",
|
||||
"./node_modules/p-timeout/index.js",
|
||||
"./node_modules/p-try/index.js",
|
||||
"./node_modules/pako/index.js",
|
||||
@@ -3148,13 +3164,6 @@
|
||||
"./node_modules/pify/index.js",
|
||||
"./node_modules/pinkie-promise/index.js",
|
||||
"./node_modules/pixelmatch/index.js",
|
||||
"./node_modules/plist/index.js",
|
||||
"./node_modules/plist/lib/build.js",
|
||||
"./node_modules/plist/lib/parse.js",
|
||||
"./node_modules/plist/lib/xmldom/dom-parser.js",
|
||||
"./node_modules/plist/lib/xmldom/dom.js",
|
||||
"./node_modules/plist/lib/xmldom/entities.js",
|
||||
"./node_modules/plist/lib/xmldom/sax.js",
|
||||
"./node_modules/pluralize/pluralize.js",
|
||||
"./node_modules/pngjs/lib/bitmapper.js",
|
||||
"./node_modules/pngjs/lib/bitpacker.js",
|
||||
@@ -3530,15 +3539,11 @@
|
||||
"./node_modules/raw-body/node_modules/bytes/index.js",
|
||||
"./node_modules/react-docgen/dist/Documentation.js",
|
||||
"./node_modules/react-docgen/dist/handlers/componentDocblockHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/componentMethodsHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/componentMethodsJsDocHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/defaultPropsHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/displayNameHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/flowTypeHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/index.js",
|
||||
"./node_modules/react-docgen/dist/handlers/propDocBlockHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/propTypeCompositionHandler.js",
|
||||
"./node_modules/react-docgen/dist/handlers/propTypeHandler.js",
|
||||
"./node_modules/react-docgen/dist/importer/ignoreImports.js",
|
||||
"./node_modules/react-docgen/dist/resolver/findAllComponentDefinitions.js",
|
||||
"./node_modules/react-docgen/dist/resolver/findAllExportedComponentDefinitions.js",
|
||||
@@ -3548,19 +3553,14 @@
|
||||
"./node_modules/react-docgen/dist/utils/expressionTo.js",
|
||||
"./node_modules/react-docgen/dist/utils/flowUtilityTypes.js",
|
||||
"./node_modules/react-docgen/dist/utils/getClassMemberValuePath.js",
|
||||
"./node_modules/react-docgen/dist/utils/getFlowType.js",
|
||||
"./node_modules/react-docgen/dist/utils/getFlowTypeFromReactComponent.js",
|
||||
"./node_modules/react-docgen/dist/utils/getMemberExpressionRoot.js",
|
||||
"./node_modules/react-docgen/dist/utils/getMemberExpressionValuePath.js",
|
||||
"./node_modules/react-docgen/dist/utils/getMemberValuePath.js",
|
||||
"./node_modules/react-docgen/dist/utils/getMembers.js",
|
||||
"./node_modules/react-docgen/dist/utils/getMethodDocumentation.js",
|
||||
"./node_modules/react-docgen/dist/utils/getNameOrValue.js",
|
||||
"./node_modules/react-docgen/dist/utils/getParameterName.js",
|
||||
"./node_modules/react-docgen/dist/utils/getPropType.js",
|
||||
"./node_modules/react-docgen/dist/utils/getPropertyName.js",
|
||||
"./node_modules/react-docgen/dist/utils/getPropertyValuePath.js",
|
||||
"./node_modules/react-docgen/dist/utils/getTSType.js",
|
||||
"./node_modules/react-docgen/dist/utils/getTypeAnnotation.js",
|
||||
"./node_modules/react-docgen/dist/utils/getTypeParameters.js",
|
||||
"./node_modules/react-docgen/dist/utils/index.js",
|
||||
@@ -3582,7 +3582,6 @@
|
||||
"./node_modules/react-docgen/dist/utils/normalizeClassDefinition.js",
|
||||
"./node_modules/react-docgen/dist/utils/parseJsDoc.js",
|
||||
"./node_modules/react-docgen/dist/utils/postProcessDocumentation.js",
|
||||
"./node_modules/react-docgen/dist/utils/printValue.js",
|
||||
"./node_modules/react-docgen/dist/utils/resolveExportDeclaration.js",
|
||||
"./node_modules/react-docgen/dist/utils/resolveFunctionDefinitionToReturnValue.js",
|
||||
"./node_modules/react-docgen/dist/utils/resolveGenericTypeAnnotation.js",
|
||||
@@ -3602,7 +3601,6 @@
|
||||
"./node_modules/recast/parsers/babel.js",
|
||||
"./node_modules/recast/parsers/esprima.js",
|
||||
"./node_modules/recast/parsers/typescript.js",
|
||||
"./node_modules/regenerator-runtime/runtime.js",
|
||||
"./node_modules/request-promise-core/configure/request2.js",
|
||||
"./node_modules/request-promise-core/errors.js",
|
||||
"./node_modules/request-promise-core/lib/errors.js",
|
||||
@@ -3640,7 +3638,6 @@
|
||||
"./node_modules/run-applescript/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/index.js",
|
||||
"./node_modules/run-applescript/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/run-applescript/node_modules/get-stream/index.js",
|
||||
"./node_modules/run-applescript/node_modules/path-key/index.js",
|
||||
"./node_modules/run-parallel/index.js",
|
||||
"./node_modules/sanitize-filename/index.js",
|
||||
@@ -3706,13 +3703,16 @@
|
||||
"./node_modules/shell-env/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./node_modules/shell-env/node_modules/execa/index.js",
|
||||
"./node_modules/shell-env/node_modules/execa/lib/stdio.js",
|
||||
"./node_modules/shell-env/node_modules/get-stream/index.js",
|
||||
"./node_modules/shell-env/node_modules/path-key/index.js",
|
||||
"./node_modules/shell-env/node_modules/strip-ansi/index.js",
|
||||
"./node_modules/shell-quote/index.js",
|
||||
"./node_modules/signal-exit/index.js",
|
||||
"./node_modules/simple-swizzle/index.js",
|
||||
"./node_modules/simple-swizzle/node_modules/is-arrayish/index.js",
|
||||
"./node_modules/slash/index.js",
|
||||
"./node_modules/sort-keys-length/index.js",
|
||||
"./node_modules/sort-keys-length/node_modules/is-plain-obj/index.js",
|
||||
"./node_modules/sort-keys-length/node_modules/sort-keys/index.js",
|
||||
"./node_modules/source-map/lib/array-set.js",
|
||||
"./node_modules/source-map/lib/base64-vlq.js",
|
||||
@@ -3746,6 +3746,7 @@
|
||||
"./node_modules/string-width/node_modules/is-fullwidth-code-point/index.js",
|
||||
"./node_modules/string-width/node_modules/strip-ansi/index.js",
|
||||
"./node_modules/stringify-object/index.js",
|
||||
"./node_modules/stringify-object/node_modules/is-obj/index.js",
|
||||
"./node_modules/strip-ansi/index.js",
|
||||
"./node_modules/strip-bom/index.js",
|
||||
"./node_modules/strip-eof/index.js",
|
||||
@@ -3804,10 +3805,12 @@
|
||||
"./node_modules/trash/lib/linux.js",
|
||||
"./node_modules/trash/lib/macos.js",
|
||||
"./node_modules/trash/lib/windows.js",
|
||||
"./node_modules/trash/node_modules/array-union/index.js",
|
||||
"./node_modules/trash/node_modules/dir-glob/index.js",
|
||||
"./node_modules/trash/node_modules/glob/common.js",
|
||||
"./node_modules/trash/node_modules/globby/gitignore.js",
|
||||
"./node_modules/trash/node_modules/globby/index.js",
|
||||
"./node_modules/trash/node_modules/p-map/index.js",
|
||||
"./node_modules/trash/node_modules/path-type/index.js",
|
||||
"./node_modules/trash/node_modules/pify/index.js",
|
||||
"./node_modules/trash/node_modules/slash/index.js",
|
||||
@@ -3922,7 +3925,6 @@
|
||||
"./node_modules/universalify/index.js",
|
||||
"./node_modules/unpipe/index.js",
|
||||
"./node_modules/unused-filename/index.js",
|
||||
"./node_modules/unused-filename/node_modules/path-exists/index.js",
|
||||
"./node_modules/url-parse-lax/index.js",
|
||||
"./node_modules/url-parse/index.js",
|
||||
"./node_modules/utf8-stream/index.js",
|
||||
@@ -3950,7 +3952,6 @@
|
||||
"./node_modules/wonka/dist/wonka.js",
|
||||
"./node_modules/wrappy/wrappy.js",
|
||||
"./node_modules/xdg-trashdir/index.js",
|
||||
"./node_modules/xdg-trashdir/node_modules/pify/index.js",
|
||||
"./node_modules/xml/lib/escapeForXML.js",
|
||||
"./node_modules/xml/lib/xml.js",
|
||||
"./node_modules/xml2js/lib/bom.js",
|
||||
@@ -3991,10 +3992,18 @@
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/XMLText.js",
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/XMLWriterBase.js",
|
||||
"./node_modules/xml2js/node_modules/xmlbuilder/lib/index.js",
|
||||
"./node_modules/xmlbuilder/lib/DocumentPosition.js",
|
||||
"./node_modules/xmlbuilder/lib/NodeType.js",
|
||||
"./node_modules/xmlbuilder/lib/Utility.js",
|
||||
"./node_modules/xmlbuilder/lib/WriterState.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLAttribute.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLCData.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLCharacterData.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLComment.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMConfiguration.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMImplementation.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDOMStringList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDAttList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDElement.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDTDEntity.js",
|
||||
@@ -4003,8 +4012,11 @@
|
||||
"./node_modules/xmlbuilder/lib/XMLDocType.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDocument.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDocumentCB.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLDummy.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLElement.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNamedNodeMap.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNode.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLNodeList.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLProcessingInstruction.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLRaw.js",
|
||||
"./node_modules/xmlbuilder/lib/XMLStreamWriter.js",
|
||||
@@ -4072,7 +4084,6 @@
|
||||
"./packages/data-context/node_modules/@babel/generator/lib/source-map.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/asserts/assertNode.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/asserts/generated/index.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/ast-types/generated/index.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/clone/clone.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/clone/cloneDeep.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js",
|
||||
@@ -4092,6 +4103,7 @@
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/converters/toExpression.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/converters/toIdentifier.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/converters/toKeyAlias.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/definitions/deprecated-aliases.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/modifications/inherits.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/modifications/removeProperties.js",
|
||||
@@ -4101,6 +4113,7 @@
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/traverse/traverse.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/traverse/traverseFast.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/utils/deprecationWarning.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/utils/inherit.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/utils/shallowEqual.js",
|
||||
"./packages/data-context/node_modules/@babel/generator/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js",
|
||||
@@ -4158,6 +4171,7 @@
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/buffer.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/stat.js",
|
||||
"./packages/data-context/node_modules/fs-extra/lib/util/utimes.js",
|
||||
"./packages/data-context/node_modules/get-stream/index.js",
|
||||
"./packages/data-context/node_modules/micromatch/index.js",
|
||||
"./packages/data-context/node_modules/path-key/index.js",
|
||||
"./packages/data-context/node_modules/source-map/lib/array-set.js",
|
||||
@@ -4337,6 +4351,13 @@
|
||||
"./packages/launcher/lib/types.ts",
|
||||
"./packages/launcher/lib/utils.ts",
|
||||
"./packages/launcher/lib/windows/index.ts",
|
||||
"./packages/launcher/node_modules/plist/index.js",
|
||||
"./packages/launcher/node_modules/plist/lib/build.js",
|
||||
"./packages/launcher/node_modules/plist/lib/parse.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/dom-parser.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/dom.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/entities.js",
|
||||
"./packages/launcher/node_modules/plist/lib/xmldom/sax.js",
|
||||
"./packages/launcher/node_modules/which/which.js",
|
||||
"./packages/net-stubbing/lib/external-types.ts",
|
||||
"./packages/net-stubbing/lib/internal-types.ts",
|
||||
@@ -4447,7 +4468,6 @@
|
||||
"./packages/scaffold-config/node_modules/locate-path/index.js",
|
||||
"./packages/scaffold-config/node_modules/p-limit/index.js",
|
||||
"./packages/scaffold-config/node_modules/p-locate/index.js",
|
||||
"./packages/scaffold-config/node_modules/path-exists/index.js",
|
||||
"./packages/scaffold-config/src/commandFile.ts",
|
||||
"./packages/scaffold-config/src/component-index-template.ts",
|
||||
"./packages/scaffold-config/src/ct-detect-third-party.ts",
|
||||
@@ -4626,10 +4646,10 @@
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/escape.js",
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/readShebang.js",
|
||||
"./packages/server/node_modules/cross-spawn/lib/util/resolveCommand.js",
|
||||
"./packages/server/node_modules/eventemitter3/index.js",
|
||||
"./packages/server/node_modules/execa/index.js",
|
||||
"./packages/server/node_modules/execa/lib/stdio.js",
|
||||
"./packages/server/node_modules/execa/node_modules/signal-exit/index.js",
|
||||
"./packages/server/node_modules/get-stream/index.js",
|
||||
"./packages/server/node_modules/glob/common.js",
|
||||
"./packages/server/node_modules/graceful-fs/clone.js",
|
||||
"./packages/server/node_modules/graceful-fs/legacy-streams.js",
|
||||
@@ -4679,6 +4699,9 @@
|
||||
"./packages/server/node_modules/object.assign/index.js",
|
||||
"./packages/server/node_modules/object.assign/polyfill.js",
|
||||
"./packages/server/node_modules/object.assign/shim.js",
|
||||
"./packages/server/node_modules/p-queue/dist/index.js",
|
||||
"./packages/server/node_modules/p-queue/dist/lower-bound.js",
|
||||
"./packages/server/node_modules/p-queue/dist/priority-queue.js",
|
||||
"./packages/server/node_modules/path-key/index.js",
|
||||
"./packages/server/node_modules/readable-stream/lib/internal/streams/async_iterator.js",
|
||||
"./packages/server/node_modules/readable-stream/lib/internal/streams/destroy.js",
|
||||
@@ -4755,5 +4778,5 @@
|
||||
"./tooling/v8-snapshot/cache/win32/snapshot-entry.js"
|
||||
],
|
||||
"deferredHashFile": "yarn.lock",
|
||||
"deferredHash": "28cbbcf82b764d73d5e456ba6913c38259c87493b170ff5f0595e4162c6617b7"
|
||||
"deferredHash": "353a8b27d624e3343f32b0f21cfd81f7a9317a463b33e0c516d4be26c02bbc76"
|
||||
}
|
||||