diff --git a/autobarrel.json b/autobarrel.json new file mode 100644 index 0000000000..819ccb63e1 --- /dev/null +++ b/autobarrel.json @@ -0,0 +1,6 @@ +{ + "prefix": "/* eslint-disable padding-line-between-statements */", + "paths": [ + "packages/graphql/src/**/*" + ] +} \ No newline at end of file diff --git a/circle.yml b/circle.yml index c2e70a6fd0..889a822fc4 100644 --- a/circle.yml +++ b/circle.yml @@ -389,6 +389,7 @@ commands: type: string steps: - restore_cached_workspace + - run: yarn gulp graphqlCodegen - run: yarn workspace @packages/launchpad cypress:run --browser <> - store_test_results: path: /tmp/cypress @@ -1001,6 +1002,8 @@ jobs: - run: yarn test-scripts # make sure our snapshots are compared correctly - run: yarn test-mocha-snapshot + # Get the codegen output + - run: yarn gulp buildProd # make sure packages with TypeScript can be transpiled to JS - run: yarn lerna run build-prod --stream # run unit tests from each individual package diff --git a/cli/lib/cli.js b/cli/lib/cli.js index a0237380c5..11b2ccc91c 100644 --- a/cli/lib/cli.js +++ b/cli/lib/cli.js @@ -397,6 +397,7 @@ module.exports = { debug('opening Cypress') require('./exec/open') .start(util.parseOpts(opts)) + .then(util.exit) .catch(util.logErrorExit1) }) diff --git a/cli/lib/exec/spawn.js b/cli/lib/exec/spawn.js index c4cb1b6bfd..d014dbb964 100644 --- a/cli/lib/exec/spawn.js +++ b/cli/lib/exec/spawn.js @@ -102,13 +102,13 @@ module.exports = { const electronArgs = [] const node11WindowsFix = isPlatform('win32') + let startScriptPath + if (options.dev) { + executable = 'node' // if we're in dev then reset // the launch cmd to be 'npm run dev' - executable = 'node' - electronArgs.unshift( - path.resolve(__dirname, '..', '..', '..', 'scripts', 'start.js'), - ) + startScriptPath = path.resolve(__dirname, '..', '..', '..', 'scripts', 'start.js'), debug('in dev mode the args became %o', args) } @@ -141,9 +141,7 @@ module.exports = { if (stdioOptions.env.ELECTRON_RUN_AS_NODE) { // Since we are running electron as node, we need to add an entry point file. - const serverEntryPoint = path.join(state.getBinaryPkgPath(path.dirname(executable)), '..', 'index.js') - - args = [serverEntryPoint, ...args] + startScriptPath = path.join(state.getBinaryPkgPath(path.dirname(executable)), '..', 'index.js') } else { // Start arguments with "--" so Electron knows these are OUR // arguments and does not try to sanitize them. Otherwise on Windows @@ -152,9 +150,23 @@ module.exports = { args = [...electronArgs, '--', ...args] } - debug('spawning Cypress with executable: %s', executable) debug('spawn args %o %o', args, _.omit(stdioOptions, 'env')) - const child = cp.spawn(executable, args, stdioOptions) + let child + + if (process.env.CYPRESS_INTERNAL_DEV_WATCH) { + debug('spawning Cypress as fork: %s', startScriptPath) + child = cp.fork(startScriptPath, args, stdioOptions) + process.on('message', (msg) => { + child.send(msg) + }) + } else { + debug('spawning Cypress with executable: %s', executable) + if (startScriptPath) { + args.unshift(startScriptPath) + } + + child = cp.spawn(executable, args, stdioOptions) + } function resolveOn (event) { return function (code, signal) { diff --git a/graphql-codegen.yml b/graphql-codegen.yml new file mode 100644 index 0000000000..7c00edbd7a --- /dev/null +++ b/graphql-codegen.yml @@ -0,0 +1,38 @@ +overwrite: true +schema: './packages/graphql/schema.graphql' +generates: + './packages/app/src/generated/graphql.ts': + documents: './packages/app/src/**/*.vue' + config: + immutableTypes: true + useTypeImports: true + preResolveTypes: true + onlyOperationTypes: true + avoidOptionals: true + enumsAsTypes: true + plugins: + - add: + content: '/* eslint-disable */' + - 'typescript': + - 'typescript-operations' + - 'typed-document-node' + './packages/launchpad/src/generated/graphql.ts': + documents: './packages/launchpad/src/**/*.vue' + config: + immutableTypes: true + useTypeImports: true + preResolveTypes: true + onlyOperationTypes: true + avoidOptionals: true + enumsAsTypes: true + plugins: + - add: + content: '/* eslint-disable */' + - 'typescript': + - 'typescript-operations' + - 'typed-document-node' + './packages/graphql/src/testing/testUnionType.ts': + plugins: + - add: + content: '/* eslint-disable */' + - 'packages/graphql/script/codegen-mount.js' diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000000..2d9b050637 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,2 @@ +require('@packages/ts/register') +require('./scripts/gulp/gulpfile') diff --git a/package.json b/package.json index 2b15acbec7..c93d349375 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "Cypress.io end to end testing tool", "private": true, "scripts": { + "prebinary-build": "yarn gulp buildProd", "binary-build": "node ./scripts/binary.js build", "binary-deploy": "node ./scripts/binary.js deploy", "binary-deploy-linux": "./scripts/build-linux-binary.sh", @@ -13,6 +14,7 @@ "binary-upload": "node ./scripts/binary.js upload", "binary-zip": "node ./scripts/binary.js zip", "build": "lerna run build --stream --no-bail --ignore create-cypress-tests && lerna run build --stream --scope create-cypress-tests", + "prebuild-prod": "yarn gulp buildProd", "build-prod": "lerna run build-prod --stream --ignore create-cypress-tests && lerna run build-prod --stream --scope create-cypress-tests", "bump": "node ./scripts/binary.js bump", "check-node-version": "node scripts/check-node-version.js", @@ -29,14 +31,14 @@ "precypress:run:debug": "yarn ensure-deps", "cypress:run:debug": "node ./scripts/debug.js cypress:run", "cypress:verify": "cypress verify --dev", - "dev": "node ./scripts/start.js", - "dev:watch": "node ./scripts/watch.js", + "dev": "yarn gulp dev", + "gulp:debug": "node --inspect-brk ./node_modules/.bin/gulp", "dev-debug": "node ./scripts/debug.js dev", "docker": "./scripts/run-docker-local.sh", "effective:circle:config": "circleci config process circle.yml | sed /^#/d", "ensure-deps": "./scripts/ensure-dependencies.sh", "get-next-version": "node scripts/get-next-version.js", - "postinstall": "yarn-deduplicate --strategy=highest && patch-package && ./scripts/run-if-not-ci.sh yarn build", + "postinstall": "yarn-deduplicate --strategy=highest && patch-package && yarn gulp postinstall && ./scripts/run-if-not-ci.sh yarn build", "jscodeshift": "jscodeshift -t ./node_modules/js-codemod/transforms/arrow-function-arguments.js", "lint": "eslint --ext .js,.jsx,.ts,.tsx,.json .", "lint-changed": "lint-changed", @@ -81,6 +83,12 @@ "@cypress/request": "2.88.6", "@cypress/request-promise": "4.2.6", "@fellow/eslint-plugin-coffee": "0.4.13", + "@graphql-codegen/add": "^2.0.2", + "@graphql-codegen/cli": "^1.21.6", + "@graphql-codegen/plugin-helpers": "^2.1.1", + "@graphql-codegen/typed-document-node": "^1.18.9", + "@graphql-codegen/typescript": "^1.22.4", + "@graphql-codegen/typescript-operations": "^1.18.3", "@percy/cli": "1.0.0-beta.48", "@percy/cypress": "^3.1.0", "@semantic-release/changelog": "5.0.1", @@ -89,10 +97,13 @@ "@types/chai-enzyme": "0.6.7", "@types/classnames": "2.2.9", "@types/debug": "4.1.5", + "@types/detect-port": "^1.3.1", "@types/enzyme-adapter-react-16": "1.0.5", "@types/execa": "0.9.0", "@types/fs-extra": "^8.0.1", + "@types/getenv": "^1.0.0", "@types/glob": "7.1.1", + "@types/gulp": "^4.0.9", "@types/lodash": "4.14.168", "@types/markdown-it": "0.0.9", "@types/mini-css-extract-plugin": "1.4.2", @@ -104,11 +115,13 @@ "@types/react-dom": "16.9.8", "@types/request-promise": "4.1.45", "@types/sinon-chai": "3.2.3", + "@types/through2": "^2.0.36", "@typescript-eslint/eslint-plugin": "4.18.0", "@typescript-eslint/parser": "4.18.0", "ansi-styles": "3.2.1", "arg": "4.1.2", "ascii-table": "0.0.9", + "autobarrel": "^1.1.0", "aws-sdk": "2.447.0", "babel-eslint": "10.1.0", "bluebird": "3.5.3", @@ -123,6 +136,7 @@ "conventional-recommended-bump": "6.1.0", "debug": "4.3.2", "del": "3.0.0", + "detect-port": "^1.3.0", "electron-builder": "22.9.1", "electron-notarize": "1.0.0", "enzyme-adapter-react-16": "1.12.1", @@ -137,6 +151,7 @@ "filesize": "4.1.2", "find-package-json": "1.2.0", "fs-extra": "8.1.0", + "getenv": "^1.0.0", "gift": "0.10.2", "glob": "7.1.6", "globby": "10.0.1", @@ -170,6 +185,7 @@ "mocha-multi-reporters": "1.1.7", "mock-fs": "4.9.0", "odiff-bin": "2.1.0", + "p-defer": "^3.0.0", "parse-github-repo-url": "1.4.1", "patch-package": "6.2.2", "plist": "3.0.1", @@ -193,6 +209,7 @@ "term-to-html": "1.2.0", "terminal-banner": "1.1.0", "through": "2.3.8", + "through2": "^4.0.2", "ts-node": "8.3.0", "typescript": "^4.2.3", "yarn-deduplicate": "3.1.0" diff --git a/packages/app/graphql-codegen.yml b/packages/app/graphql-codegen.yml deleted file mode 100644 index fe5c703503..0000000000 --- a/packages/app/graphql-codegen.yml +++ /dev/null @@ -1,23 +0,0 @@ -overwrite: true -schema: '../graphql/schema.graphql' -generates: - src/generated/graphql.ts: - documents: 'src/**/*.vue' - config: - immutableTypes: true - useTypeImports: true - preResolveTypes: true - onlyOperationTypes: true - avoidOptionals: true - enumsAsTypes: true - plugins: - - add: - content: '/* eslint-disable */' - - 'typescript' - - 'typescript-operations' - - 'typed-document-node' - ../graphql/src/testing/testUnionType.ts: - plugins: - - add: - content: '/* eslint-disable */' - - 'script/codegen-mount.js' diff --git a/packages/app/package.json b/packages/app/package.json index cd42776766..74014b6a1a 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -3,29 +3,21 @@ "version": "0.0.0-development", "private": true, "scripts": { - "prebuild": "yarn codegen", - "build": "vite build", "types": "vue-tsc --noEmit", - "build-prod": "cross-env NODE_ENV=production yarn build", + "build-prod": "cross-env NODE_ENV=production vite build", + "clean": "rm -rf dist && rm -rf ./node_modules/.vite && echo 'cleaned'", "clean-deps": "rm -rf node_modules", - "test": "echo ok", + "test": "echo 'ok'", "cypress:launch": "cross-env TZ=America/New_York node ../../scripts/cypress open --project ${PWD}", "cypress:open": "cross-env TZ=America/New_York node ../../scripts/cypress open-ct --project ${PWD}", "cypress:run": "cross-env TZ=America/New_York node ../../scripts/cypress run-ct --project ${PWD}", - "dev": "NODE_ENV=development LAUNCHPAD=1 node ../../scripts/cypress open", - "postinstall": "yarn codegen && echo '@packages/launchpad needs: yarn build'", - "start": "vite --port 3333 --base /__vite__/", - "watch": "concurrently \"yarn start\" \"yarn codegen --watch\"", - "codegen": "graphql-codegen --config ${PWD}/graphql-codegen.yml" + "dev": "yarn gulp dev --project ${PWD}", + "start": "echo \"run 'yarn dev' from the root\" && exit 1", + "watch": "echo \"run 'yarn dev' from the root\" && exit 1" }, "dependencies": {}, "devDependencies": { "@cypress/vue": "0.0.0-development", - "@graphql-codegen/add": "^2.0.2", - "@graphql-codegen/cli": "^1.21.6", - "@graphql-codegen/typed-document-node": "^1.18.9", - "@graphql-codegen/typescript": "^1.22.4", - "@graphql-codegen/typescript-operations": "^1.18.3", "@graphql-typed-document-node/core": "^3.1.0", "@headlessui/vue": "1.4.0", "@iconify/json": "1.1.368", @@ -37,9 +29,6 @@ "@urql/vue": "0.4.3", "@vitejs/plugin-vue": "1.2.4", "@vitejs/plugin-vue-jsx": "1.1.6", - "@vue/compiler-core": "3.2.6", - "@vue/compiler-dom": "3.2.6", - "@vue/compiler-sfc": "3.2.6", "@vueuse/core": "5.2.0", "bluebird": "3.5.3", "classnames": "2.3.1", @@ -67,8 +56,6 @@ "files": [ "dist", "lib", - "script", - "graphql-codegen.yml", "src" ] } diff --git a/packages/electron/lib/electron.js b/packages/electron/lib/electron.js index d52fda5a2d..92e134a05f 100644 --- a/packages/electron/lib/electron.js +++ b/packages/electron/lib/electron.js @@ -156,7 +156,7 @@ module.exports = { return process.exit(code) }) - if (process.argv.includes('--devWatch')) { + if (process.env.CYPRESS_INTERNAL_DEV_WATCH) { spawned.on('exit', () => { process.exit(0) }) diff --git a/packages/graphql/package.json b/packages/graphql/package.json index f69c33dd5e..449ed03cf5 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -5,9 +5,8 @@ "main": "index.js", "browser": "src/index.ts", "scripts": { - "build": "node script/build-schema.js", "types": "tsc --noEmit", - "build-prod": "yarn build && tsc", + "build-prod": "yarn gulp nexusCodegen && tsc", "clean-deps": "rm -rf node_modules", "clean": "rm -f ./src/*.js ./src/**/*.js ./src/**/**/*.js ./test/**/*.js || echo 'cleaned'", "postinstall": "echo '@packages/graphql needs: yarn build'", diff --git a/packages/graphql/script/build-schema.js b/packages/graphql/script/build-schema.js deleted file mode 100644 index b7bd935d4f..0000000000 --- a/packages/graphql/script/build-schema.js +++ /dev/null @@ -1,8 +0,0 @@ -process.env.CYPRESS_INTERNAL_ENV = 'development' -process.env.GRAPHQL_CODEGEN = 'true' -process.env.GRAPHQL_CODEGEN_EXIT = 'true' -// TODO: we should be upgrading ts-node or moving to Thorsten's work soon -// and then this can be removed -process.env.TS_NODE_CACHE = 'false' -require('@packages/ts/register') -require('../src/schema') diff --git a/packages/app/script/codegen-mount-ts.ts b/packages/graphql/script/codegen-mount-ts.ts similarity index 100% rename from packages/app/script/codegen-mount-ts.ts rename to packages/graphql/script/codegen-mount-ts.ts diff --git a/packages/app/script/codegen-mount.js b/packages/graphql/script/codegen-mount.js similarity index 100% rename from packages/app/script/codegen-mount.js rename to packages/graphql/script/codegen-mount.js diff --git a/packages/graphql/src/actions/index.ts b/packages/graphql/src/actions/index.ts new file mode 100644 index 0000000000..fdea0ec362 --- /dev/null +++ b/packages/graphql/src/actions/index.ts @@ -0,0 +1,4 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + +export * from './BaseActions' diff --git a/packages/graphql/src/constants/index.ts b/packages/graphql/src/constants/index.ts index 77c3a40fc0..a945cc9bbc 100644 --- a/packages/graphql/src/constants/index.ts +++ b/packages/graphql/src/constants/index.ts @@ -1,7 +1,7 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + export * from './browserConstants' - -export * from './wizardConstants' - export * from './projectConstants' - export * from './runConstants' +export * from './wizardConstants' diff --git a/packages/graphql/src/context/index.ts b/packages/graphql/src/context/index.ts new file mode 100644 index 0000000000..6b84a89da2 --- /dev/null +++ b/packages/graphql/src/context/index.ts @@ -0,0 +1,4 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + +export * from './BaseContext' diff --git a/packages/graphql/src/contracts/index.ts b/packages/graphql/src/contracts/index.ts index 4294dde2f8..4b7b17e989 100644 --- a/packages/graphql/src/contracts/index.ts +++ b/packages/graphql/src/contracts/index.ts @@ -1 +1,5 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + +export * from './BrowserContract' export * from './ProjectContract' diff --git a/packages/graphql/src/entities/index.ts b/packages/graphql/src/entities/index.ts index 9625860630..1d23ba5fca 100644 --- a/packages/graphql/src/entities/index.ts +++ b/packages/graphql/src/entities/index.ts @@ -1,27 +1,20 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + export * from './App' - +export * from './Browser' export * from './DashboardProject' - -export * from './Project' - -export * from './Mutation' - -export * from './NavigationMenu' - export * from './LocalProject' - -export * from './ResolvedConfig' - +export * from './Mutation' +export * from './NavigationItem' +export * from './NavigationMenu' +export * from './Project' export * from './Query' - +export * from './ResolvedConfig' export * from './TestingTypeInfo' - export * from './Viewer' - export * from './Wizard' - export * from './WizardBundler' - export * from './WizardFrontendFramework' - export * from './WizardNpmPackage' +export * from './run/' diff --git a/packages/graphql/src/entities/run/index.ts b/packages/graphql/src/entities/run/index.ts index 0320ffb286..7873aef195 100644 --- a/packages/graphql/src/entities/run/index.ts +++ b/packages/graphql/src/entities/run/index.ts @@ -1,3 +1,5 @@ -export * from './Run' +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly +export * from './Run' export * from './RunCommit' diff --git a/packages/graphql/src/gen/index.ts b/packages/graphql/src/gen/index.ts new file mode 100644 index 0000000000..6d6afbcd7d --- /dev/null +++ b/packages/graphql/src/gen/index.ts @@ -0,0 +1,4 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + +export * from './nxs.gen' diff --git a/packages/graphql/src/gen/nxs.gen.ts b/packages/graphql/src/gen/nxs.gen.ts index 575c824a7f..fe54b1d897 100644 --- a/packages/graphql/src/gen/nxs.gen.ts +++ b/packages/graphql/src/gen/nxs.gen.ts @@ -7,21 +7,21 @@ import type { BaseContext } from "./../context/BaseContext" import type { App } from "./../entities/App" +import type { Browser } from "./../entities/Browser" import type { DashboardProject } from "./../entities/DashboardProject" -import type { Project } from "./../entities/Project" -import type { NavigationMenu } from "./../entities/NavigationMenu" import type { LocalProject } from "./../entities/LocalProject" -import type { ResolvedOptionBase, ResolvedStringOption, ResolvedStringListOption, ResolvedNumberOption, ResolvedBooleanOption, ResolvedJsonOption, ResolvedConfig } from "./../entities/ResolvedConfig" +import type { NavigationItem } from "./../entities/NavigationItem" +import type { NavigationMenu } from "./../entities/NavigationMenu" +import type { Project } from "./../entities/Project" import type { Query } from "./../entities/Query" +import type { ResolvedOptionBase, ResolvedStringOption, ResolvedStringListOption, ResolvedNumberOption, ResolvedBooleanOption, ResolvedJsonOption, ResolvedConfig } from "./../entities/ResolvedConfig" import type { TestingTypeInfo } from "./../entities/TestingTypeInfo" import type { Viewer } from "./../entities/Viewer" import type { Wizard } from "./../entities/Wizard" import type { WizardBundler } from "./../entities/WizardBundler" import type { WizardFrontendFramework } from "./../entities/WizardFrontendFramework" import type { WizardNpmPackage } from "./../entities/WizardNpmPackage" -import type { Browser } from "./../entities/Browser" import type { RunGroup } from "./../entities/run/Run" -import type { NavigationItem } from "./../entities/NavigationItem" import type { RunCommit } from "./../entities/run/RunCommit" import type { core } from "nexus" declare global { diff --git a/packages/graphql/src/schema.ts b/packages/graphql/src/schema.ts index bf57f7a003..e431ad3a16 100644 --- a/packages/graphql/src/schema.ts +++ b/packages/graphql/src/schema.ts @@ -16,12 +16,12 @@ const dirname = typeof __dirname !== 'undefined' ? __dirname : '' // for vite process.cwd ??= () => '' -const isCodegen = Boolean(process.env.GRAPHQL_CODEGEN) +const isCodegen = Boolean(process.env.CYPRESS_INTERNAL_NEXUS_CODEGEN) export const graphqlSchema = makeSchema({ types: [entities, constants, customScalars, dirname ? null : testingTypes], shouldGenerateArtifacts: isCodegen, - shouldExitAfterGenerateArtifacts: Boolean(process.env.GRAPHQL_CODEGEN_EXIT), + shouldExitAfterGenerateArtifacts: isCodegen, // for vite outputs: isCodegen ? { typegen: path.join(dirname, 'gen/nxs.gen.ts'), diff --git a/packages/graphql/src/testing/index.ts b/packages/graphql/src/testing/index.ts new file mode 100644 index 0000000000..89642059f3 --- /dev/null +++ b/packages/graphql/src/testing/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + +export * from './ProjectBaseTest' +export * from './testUnionType' diff --git a/packages/graphql/src/util/index.ts b/packages/graphql/src/util/index.ts new file mode 100644 index 0000000000..b866f6903b --- /dev/null +++ b/packages/graphql/src/util/index.ts @@ -0,0 +1,4 @@ +/* eslint-disable padding-line-between-statements */ +// created by autobarrel, do not modify directly + +export * from './wizardGetConfigCode' diff --git a/packages/launchpad/cypress/fixtures/browsers/long-browsers-list.ts b/packages/launchpad/cypress/fixtures/browsers/long-browsers-list.ts new file mode 100644 index 0000000000..6c2faf845a --- /dev/null +++ b/packages/launchpad/cypress/fixtures/browsers/long-browsers-list.ts @@ -0,0 +1,122 @@ +export const longBrowsersList = [ + { + "name": "chrome", + "displayName": "Chrome", + "family": "chromium", + "channel": "stable", + "version": "78.0.3904.108", + "path": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "majorVersion": "78" + }, + { + "name": "chrome", + "displayName": "Chrome", + "family": "chromium", + "channel": "stable", + "version": "88.0.3904.00", + "path": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "majorVersion": "88" + }, + { + "name": "chrome", + "displayName": "Canary", + "family": "chromium", + "channel": "canary", + "version": "80.0.3977.4", + "path": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", + "majorVersion": "80" + }, + { + "name": "chromium", + "displayName": "Chromium", + "family": "chromium", + "channel": "stable", + "version": "74.0.3729.0", + "path": "/Applications/Chromium.app/Contents/MacOS/Chromium", + "majorVersion": "74" + }, + { + "name": "chromium", + "displayName": "Chromium", + "family": "chromium", + "channel": "stable", + "version": "85.0.3729.0", + "path": "/Applications/Chromium.app/Contents/MacOS/Chromium", + "majorVersion": "85" + }, + { + "name": "edge", + "displayName": "Edge Beta", + "family": "chromium", + "channel": "beta", + "version": "79.0.309.71", + "path": "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta", + "majorVersion": "79" + }, + { + "name": "edge", + "displayName": "Edge Canary", + "family": "chromium", + "channel": "canary", + "version": "79.0.309.71", + "path": "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary", + "majorVersion": "79" + }, + { + "name": "edge", + "displayName": "Edge Dev", + "family": "chromium", + "channel": "dev", + "version": "80.0.309.71", + "path": "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev", + "majorVersion": "79" + }, + { + "name": "electron", + "displayName": "Electron", + "family": "chromium", + "channel": "stable", + "version": "73.0.3683.121", + "path": "", + "majorVersion": "73", + "info": "Info about electron browser" + }, + { + "name": "firefox", + "displayName": "Firefox", + "family": "firefox", + "channel": "stable", + "version": "69.0.1", + "path": "/Applications/Firefox/Contents/MacOS/Firefox", + "majorVersion": "69", + "unsupportedVersion": true + }, + { + "name": "firefox", + "displayName": "Firefox", + "family": "firefox", + "channel": "stable", + "version": "75.0.1", + "path": "/Applications/Firefox/Contents/MacOS/Firefox", + "majorVersion": "75", + "unsupportedVersion": true + }, + { + "name": "firefox", + "displayName": "Firefox Developer Edition", + "channel": "dev", + "family": "firefox", + "version": "69.0.2", + "path": "/Applications/Firefox Developer/Contents/MacOS/Firefox Developer", + "majorVersion": "69" + }, + { + "name": "firefox", + "displayName": "Firefox Nightly", + "channel": "beta", + "family": "firefox", + "version": "69.0.3", + "path": "/Applications/Firefox Nightly/Contents/MacOS/Firefox Nightly", + "majorVersion": "69" + } +] as const \ No newline at end of file diff --git a/packages/launchpad/cypress/fixtures/browsers/long-list.json b/packages/launchpad/cypress/fixtures/browsers/long-list.json deleted file mode 100644 index 6ad392b210..0000000000 --- a/packages/launchpad/cypress/fixtures/browsers/long-list.json +++ /dev/null @@ -1,122 +0,0 @@ -[ - { - "name": "chrome", - "displayName": "Chrome", - "family": "chromium", - "channel": "stable", - "version": "78.0.3904.108", - "path": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", - "majorVersion": "78" - }, - { - "name": "chrome", - "displayName": "Chrome", - "family": "chromium", - "channel": "stable", - "version": "88.0.3904.00", - "path": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", - "majorVersion": "88" - }, - { - "name": "chrome", - "displayName": "Canary", - "family": "chromium", - "channel": "canary", - "version": "80.0.3977.4", - "path": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", - "majorVersion": "80" - }, - { - "name": "chromium", - "displayName": "Chromium", - "family": "chromium", - "channel": "stable", - "version": "74.0.3729.0", - "path": "/Applications/Chromium.app/Contents/MacOS/Chromium", - "majorVersion": "74" - }, - { - "name": "chromium", - "displayName": "Chromium", - "family": "chromium", - "channel": "stable", - "version": "85.0.3729.0", - "path": "/Applications/Chromium.app/Contents/MacOS/Chromium", - "majorVersion": "85" - }, - { - "name": "edge", - "displayName": "Edge Beta", - "family": "chromium", - "channel": "beta", - "version": "79.0.309.71", - "path": "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta", - "majorVersion": "79" - }, - { - "name": "edge", - "displayName": "Edge Canary", - "family": "chromium", - "channel": "canary", - "version": "79.0.309.71", - "path": "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary", - "majorVersion": "79" - }, - { - "name": "edge", - "displayName": "Edge Dev", - "family": "chromium", - "channel": "dev", - "version": "80.0.309.71", - "path": "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev", - "majorVersion": "79" - }, - { - "name": "electron", - "displayName": "Electron", - "family": "chromium", - "channel": "stable", - "version": "73.0.3683.121", - "path": "", - "majorVersion": "73", - "info": "Info about electron browser" - }, - { - "name": "firefox", - "displayName": "Firefox", - "family": "firefox", - "channel": "stable", - "version": "69.0.1", - "path": "/Applications/Firefox/Contents/MacOS/Firefox", - "majorVersion": "69", - "unsupportedVersion": true - }, - { - "name": "firefox", - "displayName": "Firefox", - "family": "firefox", - "channel": "stable", - "version": "75.0.1", - "path": "/Applications/Firefox/Contents/MacOS/Firefox", - "majorVersion": "75", - "unsupportedVersion": true - }, - { - "name": "firefox", - "displayName": "Firefox Developer Edition", - "channel": "dev", - "family": "firefox", - "version": "69.0.2", - "path": "/Applications/Firefox Developer/Contents/MacOS/Firefox Developer", - "majorVersion": "69" - }, - { - "name": "firefox", - "displayName": "Firefox Nightly", - "channel": "beta", - "family": "firefox", - "version": "69.0.3", - "path": "/Applications/Firefox Nightly/Contents/MacOS/Firefox Nightly", - "majorVersion": "69" - } - ] \ No newline at end of file diff --git a/packages/launchpad/graphql-codegen.yml b/packages/launchpad/graphql-codegen.yml deleted file mode 100644 index fe5c703503..0000000000 --- a/packages/launchpad/graphql-codegen.yml +++ /dev/null @@ -1,23 +0,0 @@ -overwrite: true -schema: '../graphql/schema.graphql' -generates: - src/generated/graphql.ts: - documents: 'src/**/*.vue' - config: - immutableTypes: true - useTypeImports: true - preResolveTypes: true - onlyOperationTypes: true - avoidOptionals: true - enumsAsTypes: true - plugins: - - add: - content: '/* eslint-disable */' - - 'typescript' - - 'typescript-operations' - - 'typed-document-node' - ../graphql/src/testing/testUnionType.ts: - plugins: - - add: - content: '/* eslint-disable */' - - 'script/codegen-mount.js' diff --git a/packages/launchpad/package.json b/packages/launchpad/package.json index 7edc77862e..b125c6cb12 100644 --- a/packages/launchpad/package.json +++ b/packages/launchpad/package.json @@ -3,29 +3,21 @@ "version": "0.0.0-development", "private": true, "scripts": { - "prebuild": "yarn codegen", - "build": "vite build", "types": "vue-tsc --noEmit", - "build-prod": "cross-env NODE_ENV=production yarn build", + "build-prod": "cross-env NODE_ENV=production vite build", + "clean": "rm -rf dist && rm -rf ./node_modules/.vite && echo 'cleaned'", "clean-deps": "rm -rf node_modules", "test": "yarn cypress:run && yarn types", "cypress:launch": "cross-env TZ=America/New_York node ../../scripts/cypress open --project ${PWD}", "cypress:open": "cross-env TZ=America/New_York node ../../scripts/cypress open-ct --project ${PWD}", "cypress:run": "cross-env TZ=America/New_York node ../../scripts/cypress run-ct --project ${PWD}", - "dev": "NODE_ENV=development LAUNCHPAD=1 node ../../scripts/cypress open", - "postinstall": "yarn codegen && echo '@packages/launchpad needs: yarn build'", - "start": "vite --port 3001", - "watch": "concurrently \"yarn start\" \"yarn codegen --watch\"", - "codegen": "graphql-codegen --config ${PWD}/graphql-codegen.yml" + "dev": "yarn gulp dev --project ${PWD}", + "start": "echo 'run yarn dev from the root' && exit 1", + "watch": "echo 'run yarn dev from the root' && exit 1" }, "dependencies": {}, "devDependencies": { "@cypress/vue": "0.0.0-development", - "@graphql-codegen/add": "^2.0.2", - "@graphql-codegen/cli": "^1.21.6", - "@graphql-codegen/typed-document-node": "^1.18.9", - "@graphql-codegen/typescript": "^1.22.4", - "@graphql-codegen/typescript-operations": "^1.18.3", "@graphql-typed-document-node/core": "^3.1.0", "@headlessui/vue": "1.4.0", "@iconify/json": "1.1.368", @@ -68,7 +60,6 @@ "dist", "lib", "script", - "graphql-codegen.yml", "src" ] } diff --git a/packages/launchpad/script/codegen-mount-ts.ts b/packages/launchpad/script/codegen-mount-ts.ts deleted file mode 100644 index 334e073f65..0000000000 --- a/packages/launchpad/script/codegen-mount-ts.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { CodegenPlugin } from '@graphql-codegen/plugin-helpers' -import { isInterfaceType, isObjectType } from 'graphql' -import path from 'path' - -const plugin: CodegenPlugin = { - plugin: (schema, documents, config, info) => { - const typesMap = schema.getTypeMap() - - let typeMap: string[] = [] - let objects: string[] = [] - - for (const [typeName, type] of Object.entries(typesMap)) { - if (!typeName.startsWith('__') && isObjectType(type) || isInterfaceType(type)) { - typeMap.push(` ${typeName}: NexusGenObjects['${typeName}'],`) - if (isObjectType(type)) { - objects.push(typeName) - } - } - } - - return [ - `// Generated by ${path.basename(__filename)}, do not edit directly`, - `import type { NexusGenObjects } from '@packages/graphql/src/gen/nxs.gen'`, - `export interface TestSourceTypeLookup {`, - typeMap.join('\n'), - `}`, - ` -import { list, nonNull, queryField, unionType } from 'nexus' - -export const testUnionType = unionType({ - name: 'TestUnion', - definition (t) { - // !!! Generated by ${path.basename(__filename)}, do not edit directly !!! - t.members( - ${objects.map((o) => `'${o}'`).join(',\n ')} - ) - // !!! Generated by ${path.basename(__filename)}, do not edit directly !!! - }, - resolveType (c) { - // @ts-ignore - return c.__typename ?? c.constructor.name - }, -}) - -// !!! Generated by ${path.basename(__filename)}, do not edit directly !!! -export const testFragmentMember = queryField('testFragmentMember', { - description: 'Provides a fragment target for testing', - type: nonNull(testUnionType), - resolve: (source) => { - return source - } -}) - -// !!! Generated by ${path.basename(__filename)}, do not edit directly !!! -export const testFragmentMemberList = queryField('testFragmentMemberList', { - description: 'Provides a fragment target list for testing', - type: list(nonNull(testUnionType)), - resolve: (source) => { - return source - } -}) -`, - ].join('\n') - }, -} - -export default plugin diff --git a/packages/launchpad/script/codegen-mount.js b/packages/launchpad/script/codegen-mount.js deleted file mode 100644 index c4c885dbd4..0000000000 --- a/packages/launchpad/script/codegen-mount.js +++ /dev/null @@ -1,2 +0,0 @@ -require('@packages/ts/register') -module.exports = require('./codegen-mount-ts').default diff --git a/packages/launchpad/src/components/button/Button.spec.tsx b/packages/launchpad/src/components/button/Button.spec.tsx index a43e0179c3..ae55ca8e0c 100644 --- a/packages/launchpad/src/components/button/Button.spec.tsx +++ b/packages/launchpad/src/components/button/Button.spec.tsx @@ -10,7 +10,7 @@ describe(' - + {/* */} )) }) diff --git a/packages/launchpad/src/setup/OpenBrowser.vue b/packages/launchpad/src/setup/OpenBrowser.vue index 17f4fe07ef..98f7438768 100644 --- a/packages/launchpad/src/setup/OpenBrowser.vue +++ b/packages/launchpad/src/setup/OpenBrowser.vue @@ -1,15 +1,15 @@ @@ -18,7 +18,6 @@ import { useMutation, gql, useQuery } from "@urql/vue"; import OpenBrowserList from "./OpenBrowserList.vue" import WizardLayout from "./WizardLayout.vue"; import { OpenBrowserDocument, LaunchOpenProjectDocument } from "../generated/graphql" -import { ref } from "vue" gql` query OpenBrowser { diff --git a/packages/launchpad/src/setup/OpenBrowserList.spec.tsx b/packages/launchpad/src/setup/OpenBrowserList.spec.tsx index 48507d6a40..4ec3d4a686 100644 --- a/packages/launchpad/src/setup/OpenBrowserList.spec.tsx +++ b/packages/launchpad/src/setup/OpenBrowserList.spec.tsx @@ -1,6 +1,6 @@ import { OpenBrowserListFragmentDoc } from '../generated/graphql' import OpenBrowserList from './OpenBrowserList.vue' -import longBrowserList from '../../cypress/fixtures/browsers/long-list.json' +import { longBrowsersList } from '../../cypress/fixtures/browsers/long-browsers-list' const launchButtonSelector = 'button[data-testid=launch-button]' @@ -9,14 +9,14 @@ describe('', () => { cy.viewport(1000, 750) cy.mountFragment(OpenBrowserListFragmentDoc, { type: (ctx) => { - ctx.app.setBrowsers(longBrowserList) + ctx.app.setBrowsers(Array.from(longBrowsersList)) return ctx.app }, render: (gqlVal) =>
, }) - longBrowserList.forEach((browser) => { + longBrowsersList.forEach((browser) => { cy.contains('label', browser.displayName).should('be.visible') }) diff --git a/packages/launchpad/src/setup/OpenBrowserList.vue b/packages/launchpad/src/setup/OpenBrowserList.vue index 767e070396..1576a461b8 100644 --- a/packages/launchpad/src/setup/OpenBrowserList.vue +++ b/packages/launchpad/src/setup/OpenBrowserList.vue @@ -77,17 +77,19 @@ import edgeDevIcon from "../../../../node_modules/browser-logos/src/edge-dev/edg import firefoxNightlyIcon from "../../../../node_modules/browser-logos/src/firefox-nightly/firefox-nightly.svg?url" import firefoxDeveloperEditionIcon from "../../../../node_modules/browser-logos/src/firefox-developer-edition/firefox-developer-edition.svg?url" -gql`fragment OpenBrowserList on App { +gql` +fragment OpenBrowserList on App { browsers { - name - family - channel - displayName - path - version - majorVersion + name + family + channel + displayName + path + version + majorVersion } -}` +} +` const props = defineProps<{ gql: OpenBrowserListFragment, @@ -135,12 +137,12 @@ const allBrowsers = [{ icon: edgeDevIcon }] -const getBroswerDetails = (browser) => { - return { - ...browser, - displayVersion: `v${browser.version}`, - icon: allBrowsers.find(item => item.displayName === browser.displayName)?.icon, - } +const getBroswerDetails = (browser: OpenBrowserListFragment['browsers'][number]) => { + return { + ...browser, + displayVersion: `v${browser.version}`, + icon: allBrowsers.find(item => item.displayName === browser.displayName)?.icon ?? '', + } } const isDetected = (browser) => { @@ -148,6 +150,7 @@ const isDetected = (browser) => { .find(browserInList => browserInList.displayName === browser.displayName) } +// TODO(tim): move a lot of this to GraphQL const displayBrowsers = computed(() => { const foundValidBrowsers = allBrowsers.filter(isDetected).reduce((acc, curr) => { const matchingFoundBrowsers = props.gql.browsers.filter(foundBrowser => { @@ -157,7 +160,8 @@ const displayBrowsers = computed(() => { acc.push(getBroswerDetails(browser)) }) return acc - }, []) + // TODO: fix up these types w/ GraphQL + }, [] as Array) return foundValidBrowsers }) @@ -165,8 +169,6 @@ const displayBrowsers = computed(() => { const selectedBrowser = ref(displayBrowsers.value[0]) const launchText = computed(() => selectedBrowser.value ? `${t('setupPage.openBrowser.launch')} ${selectedBrowser.value.displayName}` : '') - -