diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 72c5982d..7c3952c2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -25,11 +25,27 @@ jobs: - name: Install dependencies run: pnpm install + # Create cache for Playwright installation + - name: Restore Playwright Installation Cache + id: playwright-cache + uses: actions/cache@v3 + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm.lock.yaml') }} + + # Install Playwright if pnpm.lock.yaml changed + - name: Install Playwright + if: steps.playwright-cache.outputs.cache-hit != 'true' + run: npx playwright install-deps chromium + - name: Lint run: pnpm lint - name: Type check run: pnpm type - - name: Test + - name: Unit Test run: pnpm test + + - name: Run E2E test + run: pnpm e2e diff --git a/.gitignore b/.gitignore index 9aa66931..d54574ef 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ build # misc .DS_Store *.pem + +# e2e storage state +packages/e2e-testing/__tests__/utils/storageState.json diff --git a/package.json b/package.json index 2fad8696..c00e74e0 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "name": "create-codes", "version": "0.0.0", "scripts": { - "test": "turbo run build test --filter=!reactjs-boilerplate", + "test": "turbo run build --filter=create-codes test --filter=create-codes", + "e2e": "turbo run e2e", "type": "turbo run type --filter=!reactjs-boilerplate", "lint": "turbo run lint --filter=!reactjs-boilerplate" }, diff --git a/packages/create-codes/__tests__/cli.test.ts b/packages/create-codes/__tests__/cli.test.ts index 8e65a9a6..f2091777 100644 --- a/packages/create-codes/__tests__/cli.test.ts +++ b/packages/create-codes/__tests__/cli.test.ts @@ -58,7 +58,6 @@ describe("create-codes cli", () => { "index.html", "jest-setup.ts", "package.json", - "playwright.config.ts", "public", "src", "tests", diff --git a/packages/create-codes/src/index.ts b/packages/create-codes/src/index.ts index 183d7c99..a97aad67 100644 --- a/packages/create-codes/src/index.ts +++ b/packages/create-codes/src/index.ts @@ -50,7 +50,7 @@ async function run() { fse.copySync(TEMPLATE_DIR, appDir, { filter: (src) => - !["node_modules", "dist", "turbo"].includes(path.basename(src)), + !["node_modules", "dist", ".turbo"].includes(path.basename(src)), }); fse.copySync(TEMPLATE_SHARE_DIR, appDir); diff --git a/packages/create-codes/templates/react/package.json b/packages/create-codes/templates/react/package.json index 5c0f57b7..470d451a 100644 --- a/packages/create-codes/templates/react/package.json +++ b/packages/create-codes/templates/react/package.json @@ -8,11 +8,11 @@ "node": ">=16.x" }, "scripts": { - "dev": "vite", + "dev": "vite --port 3000", "build": "tsc && vite build", + "build:e2e": "tsc && vite build --mode development", "lint": "eslint . --ext .js,jsx,.ts,.tsx", - "preview": "vite preview", - "e2e": "playwright test", + "preview": "vite preview --port 3000", "test": "jest", "test:coverage": "jest --coverage", "type": "tsc --noEmit" @@ -22,13 +22,14 @@ "@babel/preset-env": "7.20.2", "@babel/preset-react": "7.18.6", "@babel/preset-typescript": "7.18.6", - "@playwright/test": "1.29.2", "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "13.4.0", "@testing-library/user-event": "14.4.3", + "@types/jest": "29.2.6", "@types/node": "18.11.18", "@types/react": "18.0.27", "@types/react-dom": "18.0.10", + "@types/testing-library__jest-dom": "5.14.5", "@typescript-eslint/eslint-plugin": "5.48.2", "@typescript-eslint/parser": "5.48.2", "@vitejs/plugin-react": "3.0.1", diff --git a/packages/create-codes/templates/react/src/main.tsx b/packages/create-codes/templates/react/src/main.tsx index f7fe172e..04e0f15d 100644 --- a/packages/create-codes/templates/react/src/main.tsx +++ b/packages/create-codes/templates/react/src/main.tsx @@ -5,7 +5,10 @@ import { App } from "@/App"; import "./main.scss"; const prepare = async (): Promise => { - if (import.meta.env.DEV && !import.meta.env.VITE_REACT_APP_API_HOST) { + if ( + (import.meta.env.DEV || import.meta.env.MODE === "development") && + !import.meta.env.VITE_REACT_APP_API_HOST + ) { const { mockServer } = await import("@/__mocks__/server"); mockServer.start({ onUnhandledRequest: "bypass", diff --git a/packages/create-codes/templates/react/vite.config.ts b/packages/create-codes/templates/react/vite.config.ts index ce90ce4c..20ab30ed 100644 --- a/packages/create-codes/templates/react/vite.config.ts +++ b/packages/create-codes/templates/react/vite.config.ts @@ -11,7 +11,4 @@ export default defineConfig({ }, }, plugins: [react()], - server: { - port: 3000, - }, }); diff --git a/packages/create-codes/templates/react/tests/e2e/Count.test.ts b/packages/e2e-testing/__tests__/react/Count.test.ts similarity index 100% rename from packages/create-codes/templates/react/tests/e2e/Count.test.ts rename to packages/e2e-testing/__tests__/react/Count.test.ts diff --git a/packages/create-codes/templates/react/tests/e2e/Employee.test.ts b/packages/e2e-testing/__tests__/react/Employee.test.ts similarity index 100% rename from packages/create-codes/templates/react/tests/e2e/Employee.test.ts rename to packages/e2e-testing/__tests__/react/Employee.test.ts diff --git a/packages/create-codes/templates/react/tests/e2e/Home.test.ts b/packages/e2e-testing/__tests__/react/Home.test.ts similarity index 100% rename from packages/create-codes/templates/react/tests/e2e/Home.test.ts rename to packages/e2e-testing/__tests__/react/Home.test.ts diff --git a/packages/create-codes/templates/react/tests/e2e/Login.test.ts b/packages/e2e-testing/__tests__/react/Login.test.ts similarity index 100% rename from packages/create-codes/templates/react/tests/e2e/Login.test.ts rename to packages/e2e-testing/__tests__/react/Login.test.ts diff --git a/packages/create-codes/templates/react/tests/e2e/Profile.test.ts b/packages/e2e-testing/__tests__/react/Profile.test.ts similarity index 100% rename from packages/create-codes/templates/react/tests/e2e/Profile.test.ts rename to packages/e2e-testing/__tests__/react/Profile.test.ts diff --git a/packages/create-codes/templates/react/tests/e2e/utils/global-setup.ts b/packages/e2e-testing/__tests__/utils/global-setup.ts similarity index 90% rename from packages/create-codes/templates/react/tests/e2e/utils/global-setup.ts rename to packages/e2e-testing/__tests__/utils/global-setup.ts index 9af59e61..4322eee1 100644 --- a/packages/create-codes/templates/react/tests/e2e/utils/global-setup.ts +++ b/packages/e2e-testing/__tests__/utils/global-setup.ts @@ -15,7 +15,7 @@ const globalSetup = async (_config: FullConfig) => { // Save signed-in state to 'storageState.json'. await page .context() - .storageState({ path: "./tests/e2e/utils/storageState.json" }); + .storageState({ path: "./__tests__/utils/storageState.json" }); await browser.close(); }; diff --git a/packages/e2e-testing/package.json b/packages/e2e-testing/package.json new file mode 100644 index 00000000..fd294a8d --- /dev/null +++ b/packages/e2e-testing/package.json @@ -0,0 +1,18 @@ +{ + "name": "e2e-testing", + "private": true, + "scripts": { + "e2e:dev": "playwright test", + "e2e": "start-server-and-test \"(cd ../.. && ./node_modules/.bin/turbo run preview --filter=reactjs-boilerplate)\" \"3000\" \"playwright test\"" + }, + "dependencies": { + "@playwright/test": "1.29.2" + }, + "devDependencies": { + "start-server-and-test": "1.15.2", + "reactjs-boilerplate": "workspace:*", + "tsconfig": "workspace:*", + "typescript": "4.9.4", + "@types/node": "18.11.18" + } +} diff --git a/packages/create-codes/templates/react/playwright.config.ts b/packages/e2e-testing/playwright.config.ts similarity index 54% rename from packages/create-codes/templates/react/playwright.config.ts rename to packages/e2e-testing/playwright.config.ts index 18d63334..733225cd 100644 --- a/packages/create-codes/templates/react/playwright.config.ts +++ b/packages/e2e-testing/playwright.config.ts @@ -2,24 +2,22 @@ import { type PlaywrightTestConfig, devices } from "@playwright/test"; const config: PlaywrightTestConfig = { forbidOnly: !!process.env.CI, - testDir: "./tests/e2e", - webServer: { - command: "yarn dev", - port: 3000, - }, + testDir: "__tests__", retries: process.env.CI ? 2 : 0, - globalSetup: require.resolve("./tests/e2e/utils/global-setup"), + globalSetup: require.resolve("./__tests__/utils/global-setup"), use: { headless: !!process.env.CI, - baseURL: "http://localhost:3000/", // Tell all tests to load signed-in state from 'storageState.json'. - storageState: "./tests/e2e/utils/storageState.json", + storageState: "./__tests__/utils/storageState.json", trace: "on-first-retry", }, projects: [ { - name: "chromium", - use: { ...devices["Desktop Chrome"] }, + name: "react", + use: { + baseURL: "http://localhost:3000", + ...devices["Desktop Chrome"], + }, }, ], }; diff --git a/packages/e2e-testing/tsconfig.json b/packages/e2e-testing/tsconfig.json new file mode 100644 index 00000000..d38e7472 --- /dev/null +++ b/packages/e2e-testing/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "tsconfig/library.json", + "compilerOptions": { + "rootDir": "." + }, + "include": ["playwright.config.ts", "__tests__"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f27840ed..f7f1653a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,14 +47,15 @@ importers: '@babel/preset-env': 7.20.2 '@babel/preset-react': 7.18.6 '@babel/preset-typescript': 7.18.6 - '@playwright/test': 1.29.2 '@tanstack/react-query': 4.22.0 '@testing-library/jest-dom': 5.16.5 '@testing-library/react': 13.4.0 '@testing-library/user-event': 14.4.3 + '@types/jest': 29.2.6 '@types/node': 18.11.18 '@types/react': 18.0.27 '@types/react-dom': 18.0.10 + '@types/testing-library__jest-dom': 5.14.5 '@typescript-eslint/eslint-plugin': 5.48.2 '@typescript-eslint/parser': 5.48.2 '@vitejs/plugin-react': 3.0.1 @@ -95,13 +96,14 @@ importers: '@babel/preset-env': 7.20.2_@babel+core@7.20.12 '@babel/preset-react': 7.18.6_@babel+core@7.20.12 '@babel/preset-typescript': 7.18.6_@babel+core@7.20.12 - '@playwright/test': 1.29.2 '@testing-library/jest-dom': 5.16.5 '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y '@testing-library/user-event': 14.4.3_yxlyej73nftwmh2fiao7paxmlm + '@types/jest': 29.2.6 '@types/node': 18.11.18 '@types/react': 18.0.27 '@types/react-dom': 18.0.10 + '@types/testing-library__jest-dom': 5.14.5 '@typescript-eslint/eslint-plugin': 5.48.2_z274t7mj3d3d3lkbtjv4yganzm '@typescript-eslint/parser': 5.48.2_iukboom6ndih5an6iafl45j2fe '@vitejs/plugin-react': 3.0.1_vite@4.0.4 @@ -118,6 +120,23 @@ importers: vite: 4.0.4_ovmyjmuuyckt3r3gpaexj2onji whatwg-fetch: 3.6.2 + packages/e2e-testing: + specifiers: + '@playwright/test': 1.29.2 + '@types/node': 18.11.18 + reactjs-boilerplate: workspace:* + start-server-and-test: 1.15.2 + tsconfig: workspace:* + typescript: 4.9.4 + dependencies: + '@playwright/test': 1.29.2 + devDependencies: + '@types/node': 18.11.18 + reactjs-boilerplate: link:../create-codes/templates/react + start-server-and-test: 1.15.2 + tsconfig: link:../tsconfig + typescript: 4.9.4 + packages/eslint-config-custom: specifiers: '@typescript-eslint/parser': 5.48.2 @@ -1664,6 +1683,16 @@ packages: transitivePeerDependencies: - supports-color + /@hapi/hoek/9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + dev: true + + /@hapi/topo/5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: true + /@humanwhocodes/config-array/0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -2008,6 +2037,20 @@ packages: dependencies: '@types/node': 18.11.18 playwright-core: 1.29.2 + dev: false + + /@sideway/address/4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: true + + /@sideway/formula/3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + dev: true + + /@sideway/pinpoint/2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true /@sinclair/typebox/0.24.51: @@ -2257,7 +2300,6 @@ packages: /@types/node/18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2723,6 +2765,10 @@ packages: picomatch: 2.3.1 dev: true + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -2791,6 +2837,14 @@ packages: engines: {node: '>= 0.4'} dev: true + /axios/0.25.0_debug@4.3.4: + resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} + dependencies: + follow-redirects: 1.15.2_debug@4.3.4 + transitivePeerDependencies: + - debug + dev: true + /babel-jest/29.3.1_@babel+core@7.20.12: resolution: {integrity: sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2930,6 +2984,10 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -3073,6 +3131,11 @@ packages: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true + /check-more-types/2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + dev: true + /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -3420,6 +3483,10 @@ packages: domelementtype: 1.3.1 dev: true + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + /electron-to-chromium/1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} dev: true @@ -3969,6 +4036,18 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + /event-stream/3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: true + /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -4094,6 +4173,18 @@ packages: /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /follow-redirects/1.15.2_debug@4.3.4: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4 + dev: true + /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -4109,6 +4200,10 @@ packages: mime-types: 2.1.35 dev: true + /from/0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: true + /fs-extra/11.1.0: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} @@ -5195,6 +5290,16 @@ packages: - ts-node dev: true + /joi/17.7.0: + resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: true + /joycon/3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -5326,6 +5431,11 @@ packages: engines: {node: '>=6'} dev: true + /lazy-ass/1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + dev: true + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -5461,6 +5571,10 @@ packages: engines: {node: '>=8'} dev: false + /map-stream/0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true + /meow/7.1.1: resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==} engines: {node: '>=10'} @@ -5527,6 +5641,10 @@ packages: kind-of: 6.0.3 dev: false + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + dev: true + /mlly/1.1.0: resolution: {integrity: sha512-cwzBrBfwGC1gYJyfcy8TcZU1f+dbH/T+TuOhtYP2wLv/Fb51/uV7HJQfBPtEupZ2ORLRU1EKFS/QfS3eo9+kBQ==} dependencies: @@ -5854,6 +5972,12 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pause-stream/0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -5886,7 +6010,7 @@ packages: resolution: {integrity: sha512-94QXm4PMgFoHAhlCuoWyaBYKb92yOcGVHdQLoxQ7Wjlc7Flg4aC/jbFW7xMR52OfXMVkWicue4WXE7QEegbIRA==} engines: {node: '>=14'} hasBin: true - dev: true + dev: false /postcss-load-config/3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -5956,6 +6080,14 @@ packages: react-is: 16.13.1 dev: true + /ps-tree/1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + event-stream: 3.3.4 + dev: true + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true @@ -6399,6 +6531,12 @@ packages: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: false + /split/0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + dependencies: + through: 2.3.8 + dev: true + /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -6414,6 +6552,23 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true + /start-server-and-test/1.15.2: + resolution: {integrity: sha512-t5xJX04Hg7hqxiKHMJBz/n4zIMsE6G7hpAcerFAH+4Vh9le/LeyFcJERJM7WLiPygWF9TOg33oroJF1XOzJtYQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + arg: 5.0.2 + bluebird: 3.7.2 + check-more-types: 2.24.0 + debug: 4.3.4 + execa: 5.1.1 + lazy-ass: 1.6.0 + ps-tree: 1.2.0 + wait-on: 6.0.1_debug@4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /stop-iteration-iterator/1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} @@ -6421,6 +6576,12 @@ packages: internal-slot: 1.0.4 dev: true + /stream-combiner/0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + dependencies: + duplexer: 0.1.2 + dev: true + /strict-event-emitter/0.2.8: resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==} dependencies: @@ -7127,6 +7288,20 @@ packages: xml-name-validator: 4.0.0 dev: true + /wait-on/6.0.1_debug@4.3.4: + resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + axios: 0.25.0_debug@4.3.4 + joi: 17.7.0 + lodash: 4.17.21 + minimist: 1.2.7 + rxjs: 7.8.0 + transitivePeerDependencies: + - debug + dev: true + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: diff --git a/turbo.json b/turbo.json index d154ecd0..b2842bd3 100644 --- a/turbo.json +++ b/turbo.json @@ -1,9 +1,15 @@ { "$schema": "https://turbo.build/schema.json", + "globalEnv": ["CI"], "pipeline": { "build": { "dependsOn": ["^build"] }, + "build:e2e": {}, + "preview": { + "dependsOn": ["build:e2e"] + }, + "e2e": {}, "type": {}, "lint": {}, "test": {},