diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 951c24327472..d7dd36c82f18 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -218,7 +218,6 @@ jobs: working-directory: ./tasks/e2e spec: | cypress/e2e/01-tutorial/*.cy.js - cypress/e2e/04-logger/*.cy.js - uses: actions/upload-artifact@v4 if: always() diff --git a/CHANGELOG.md b/CHANGELOG.md index edb472409826..3d331541789a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,30 @@ ## Unreleased +- fix(scenario): Make sure to clean up scenarios even if tests fail (#10112) + Fixes an issue where a unit test failure would cause the scenario cleanup to be skipped. Thanks @peraltafederico and @cjreimer for highlighting this! + +- fix(serve): Allow periods in most paths (#10114) + + Partial fix for route paths with periods in them. + + It's only "partial" because it doesn't fix it for `yarn rw dev`, as that's a + Vite bug + ([vitejs/vite#2415 (comment)](https://github.com/vitejs/vite/issues/2415#issuecomment-1720814355)). + And there's also an edge case for yarn rw serve where this doesn't fully + handle client-side routes that start with /assets/ and that also have a + last-segment that accepts a period, like /assets/client-route-image.jpg + + Fixes #9969 + +- fix(deps): update prisma monorepo to v5.10.2 (#10088) + + This release updates Prisma to v5.10.2. Here are quick links to all the release notes since the last version (v5.9.1): + + - https://github.com/prisma/prisma/releases/tag/5.10.0 + - https://github.com/prisma/prisma/releases/tag/5.10.1 + - https://github.com/prisma/prisma/releases/tag/5.10.2 + - fix(deps): update opentelemetry-js monorepo (#10065) Updates our opentelemetry packages. This is a breaking change for users of @@ -29,28 +53,26 @@ DataDog/import-in-the-middle#57 * This version does not support Node.js 18.19 or later -- Add support for additional env var files (#9961) +- Add support for loading more env var files (#9961, #10093, and #10094) - Fixes #9877. This PR adds a new middleware step to the CLI that looks for an `--include-env-files` flag and includes `.env.[file]` to the list of dotfiles to load. This PR also introduces functionality so that `.env.[file]` files are loaded based on `NODE_ENV`. - - Using the `--include-env-files` flag: - - ```bash - yarn rw exec myScript --include-env-files prod stripe-prod - # Alternatively you can specify the flag twice: - yarn rw exec myScript --include-env-files prod --include-env-files stripe-prod - ``` - - Using `NODE_ENV`: + Fixes #9877. This PR adds CLI functionality to load more `.env` files via `NODE_ENV` and an `--add-env-files` flag. + Env vars loaded via either of these methods override the values in `.env`: ``` - # loads .env.production + # Loads '.env.production', which overrides values in '.env' NODE_ENV=production yarn rw exec myScript + + # Load '.env.stripe' and '.env.nakama', which overrides values + yarn rw exec myScript --add-env-files stripe --add-env-files nakama + # Or you can specify the flag once: + yarn rw exec myScript --add-env-files stripe nakama ``` - These files are loaded in addition to `.env` and `.env.defaults` and more generally are additive. Subsequent dotfiles won't overwrite environment variables defined previous ones. As such, files loaded via NODE_ENV have lower priority than those loaded specifically via `--include-env-files`. + Note that this feature is mainly for local scripting. Most deploy providers don't let you upload `.env` files (unless you're using baremetal) and usually have their own way of determining environments. + +## v7.0.6 - Note that this feature is mainly for local scripting. Most deploy providers don't let you upload dotfiles and usually have their own way of determining environments. +- See https://github.com/redwoodjs/redwood/releases/tag/v7.0.6 ## v7.0.5 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 219378a65005..b3b83b67e357 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -343,37 +343,4 @@ yarn rw upgrade --tag rc ## Publishing New Versions: `@latest` -> **New `yarn release` Publishing Command** -> -> As of February 2022, there's a new command `yarn release` that covers all the necessary steps: -> -> 1. starting with creating a release branch -> 2. to creating a milestone and assigning it to PRs -> 3. to preparing and publishing packages -> 4. to creating release notes -> -> 🚀 - -To publish a new version of Redwood to NPM, run the following commands: - -> NOTE: `` should be formatted like `v0.24.0` (for example) - -```bash -git clean -dfx -yarn install -./tasks/update-package-versions -git commit -am "" -git tag -am "" -git push && git push --tags -yarn build -yarn lerna publish from-package -``` - -This... - - 1) changes the version of **all the packages** (even those that haven't changed), - 2) changes the version of the packages within the CRWA Template - 3) commits, tags, and pushes to GitHub - 4) and finally publishes all packages to NPM. - -If something went wrong you can use `yarn lerna publish from-package` to publish the packages that aren't already in the registry. +See https://github.com/redwoodjs/release-tooling. diff --git a/__fixtures__/test-project/web/package.json b/__fixtures__/test-project/web/package.json index 4f1e45de9425..15bdea31c013 100644 --- a/__fixtures__/test-project/web/package.json +++ b/__fixtures__/test-project/web/package.json @@ -23,7 +23,7 @@ "@redwoodjs/vite": "7.0.0", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.19", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "postcss-loader": "^8.1.1", "prettier-plugin-tailwindcss": "0.4.1", diff --git a/package.json b/package.json index 11a77a515664..329442c7ead8 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,6 @@ "project:tarsync": "node ./tasks/framework-tools/tarsync.mjs", "rebuild-test-project-fixture": "tsx ./tasks/test-project/rebuild-test-project-fixture.ts", "rebuild-fragments-test-project-fixture": "tsx ./tasks/test-project/rebuild-fragments-test-project-fixture.ts", - "release": "node ./tasks/release/release.mjs", - "release:compare": "node ./tasks/release/compare/compare.mjs", - "release:notes": "node ./tasks/release/generateReleaseNotes.mjs", - "release:triage": "node ./tasks/release/triage/triage.mjs", "smoke-tests": "node ./tasks/smoke-tests/smoke-tests.mjs", "test": "nx run-many -t test -- --minWorkers=1 --maxWorkers=4", "test-ci": "nx run-many -t test", @@ -55,17 +51,17 @@ "@babel/core": "^7.22.20", "@babel/generator": "7.23.6", "@babel/node": "7.23.9", - "@babel/plugin-proposal-decorators": "7.23.9", + "@babel/plugin-proposal-decorators": "7.24.0", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-nullish-coalescing-operator": "7.23.4", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-runtime": "7.23.9", + "@babel/plugin-transform-runtime": "7.24.0", "@babel/preset-env": "^7.22.20", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.22.15", - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@faker-js/faker": "8.0.2", "@npmcli/arborist": "7.2.2", "@playwright/test": "1.41.2", diff --git a/packages/adapters/fastify/web/src/web.test.ts b/packages/adapters/fastify/web/src/web.test.ts index 7e49bb4720f8..0f3af359396d 100644 --- a/packages/adapters/fastify/web/src/web.test.ts +++ b/packages/adapters/fastify/web/src/web.test.ts @@ -1,6 +1,7 @@ -import fs from 'fs' -import path from 'path' +import * as fs from 'fs' +import * as path from 'path' +import type { FastifyInstance } from 'fastify' import Fastify from 'fastify' import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest' @@ -8,7 +9,7 @@ import { getPaths } from '@redwoodjs/project-config' import { redwoodFastifyWeb } from './web' -let original_RWJS_CWD +let original_RWJS_CWD: string beforeAll(() => { original_RWJS_CWD = process.env.RWJS_CWD @@ -24,7 +25,7 @@ describe('redwoodFastifyWeb', () => { console.log = vi.fn() // Set up and teardown the fastify instance with options. - let fastifyInstance + let fastifyInstance: FastifyInstance const port = 8910 @@ -248,16 +249,56 @@ describe('redwoodFastifyWeb', () => { }) describe("returns a 404 for assets that can't be found", () => { - it("returns a 404 for non-html assets that can't be found", async () => { + it("returns a 404 for assets that can't be found", async () => { const res = await fastifyInstance.inject({ method: 'GET', - url: '/kittens.png', + url: '/assets/kittens.png', }) expect(res.statusCode).toBe(404) }) - it('handles "."s in routes', async () => { + // This is testing current behavior - not ideal behavior. Feel free to + // update this test if you change the behavior. + // It's for the (hopefully rare) case where someone has a client-side + // route for /assets + it('returns a 200 for plain files, even in /assets/', async () => { + const res = await fastifyInstance.inject({ + method: 'GET', + url: '/assets/kittens', + }) + + expect(res.statusCode).toBe(200) + }) + + it('handles "."s in route segments', async () => { + const res = await fastifyInstance.inject({ + method: 'GET', + url: '/my.page/foo', + }) + + expect(res.statusCode).toBe(200) + }) + + it('handles "."s in last route segment', async () => { + const res = await fastifyInstance.inject({ + method: 'GET', + url: '/foo/my.page', + }) + + expect(res.statusCode).toBe(200) + }) + + it('handles filenames in route segments', async () => { + const res = await fastifyInstance.inject({ + method: 'GET', + url: '/file-route/fake.js', + }) + + expect(res.statusCode).toBe(200) + }) + + it('handles "."s in query params', async () => { const res = await fastifyInstance.inject({ method: 'GET', url: '/my-page?loading=spinner.blue', diff --git a/packages/adapters/fastify/web/src/web.ts b/packages/adapters/fastify/web/src/web.ts index ac5e25b64f8e..d5268d58a5dd 100644 --- a/packages/adapters/fastify/web/src/web.ts +++ b/packages/adapters/fastify/web/src/web.ts @@ -84,19 +84,36 @@ export async function redwoodFastifyWeb( // For SPA routing, fallback on unmatched routes and let client-side routing take over fastify.setNotFoundHandler({}, (req, reply) => { const urlData = req.urlData() - const requestedExtension = path.extname(urlData.path ?? '') - - // Paths with no extension (`/about`) or an .html extension (`/about.html`) - // should be handled by the client side router. - // See the discussion in https://github.com/redwoodjs/redwood/pull/9272. - if (requestedExtension === '' || requestedExtension === '.html') { - reply.header('Content-Type', 'text/html; charset=UTF-8') - return reply.sendFile(fallbackIndexPath) + const requestHasExtension = !!path.extname(urlData.path ?? '') + + // Further up in this file we use `fastifyStatic` to serve files from the + // /web/dist folder. Most often for files like AboutPage-12ab34cd.js or + // some css file. + // Requests for other paths should most often be handled by client side + // routing. Like requests /about or /about.html. + // One exception for this is requests for assets that don't exist anymore. + // Like AboutPage-old_hash.js. These requests should return 404. + // The problem is we don't know what those assets are. So the best we can + // do is to return 404 for all requests for files in /assets that have an + // extension. + // + // See the discussions in https://github.com/redwoodjs/redwood/pull/9272 + // and https://github.com/redwoodjs/redwood/issues/9969 + + if (requestHasExtension && urlData.path?.startsWith('/assets/')) { + // If we got here, the user is most likely requesting an asset with an + // extension (like `assets/AboutPage-xyz789.js`) that doesn't exist + // + // NOTE: This is a best guess, and could be wrong. The user could have + // a client-side route setup for /assets/client-side/{...} and in that + // case we really should pass this on to the client-side router instead + // of returning 404. + reply.code(404) + return reply.send('Not Found') } - // If we got here, the user is requesting an asset with an extension - // (like `profile.png`) that doesn't exist - reply.code(404) - return reply.send('Not Found') + // Let client-side routing take over + reply.header('Content-Type', 'text/html; charset=UTF-8') + return reply.sendFile(fallbackIndexPath) }) } diff --git a/packages/api-server/src/__tests__/lambdaLoaderNumberFunctions.test.ts b/packages/api-server/src/__tests__/lambdaLoaderNumberFunctions.test.ts deleted file mode 100644 index ad02f328d6e3..000000000000 --- a/packages/api-server/src/__tests__/lambdaLoaderNumberFunctions.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import path from 'path' - -import { vi, beforeAll, afterAll, test, expect } from 'vitest' - -import { - LAMBDA_FUNCTIONS, - loadFunctionsFromDist, -} from '../plugins/lambdaLoader' - -// Suppress terminal logging. -console.log = vi.fn() - -// Set up RWJS_CWD. -let original_RWJS_CWD: string | undefined - -beforeAll(() => { - original_RWJS_CWD = process.env.RWJS_CWD - process.env.RWJS_CWD = path.resolve( - __dirname, - 'fixtures/redwood-app-number-functions' - ) -}) - -afterAll(() => { - process.env.RWJS_CWD = original_RWJS_CWD -}) - -test('loadFunctionsFromDist puts functions named with numbers before the graphql function', async () => { - expect(LAMBDA_FUNCTIONS).toEqual({}) - - await loadFunctionsFromDist() - - expect(Object.keys(LAMBDA_FUNCTIONS)[0]).toEqual('1') -}) diff --git a/packages/api-server/src/plugins/lambdaLoader.ts b/packages/api-server/src/plugins/lambdaLoader.ts index 03d8e0342d8d..757dce9d2f4d 100644 --- a/packages/api-server/src/plugins/lambdaLoader.ts +++ b/packages/api-server/src/plugins/lambdaLoader.ts @@ -24,37 +24,32 @@ export const setLambdaFunctions = async (foundFunctions: string[]) => { const tsImport = Date.now() console.log(chalk.dim.italic('Importing Server Functions... ')) - const imports = foundFunctions.map((fnPath) => { - return new Promise((resolve) => { - const ts = Date.now() - const routeName = path.basename(fnPath).replace('.js', '') - - const { handler } = require(fnPath) - LAMBDA_FUNCTIONS[routeName] = handler - if (!handler) { - console.warn( - routeName, - 'at', - fnPath, - 'does not have a function called handler defined.' - ) - } - // TODO: Use terminal link. - console.log( - chalk.magenta('/' + routeName), - chalk.dim.italic(Date.now() - ts + ' ms') + const imports = foundFunctions.map(async (fnPath) => { + const ts = Date.now() + const routeName = path.basename(fnPath).replace('.js', '') + + const { handler } = await import(`file://${fnPath}`) + LAMBDA_FUNCTIONS[routeName] = handler + if (!handler) { + console.warn( + routeName, + 'at', + fnPath, + 'does not have a function called handler defined.' ) - return resolve(true) - }) - }) - - Promise.all(imports).then((_results) => { + } + // TODO: Use terminal link. console.log( - chalk.dim.italic( - '...Done importing in ' + (Date.now() - tsImport) + ' ms' - ) + chalk.magenta('/' + routeName), + chalk.dim.italic(Date.now() - ts + ' ms') ) }) + + await Promise.all(imports) + + console.log( + chalk.dim.italic('...Done importing in ' + (Date.now() - tsImport) + ' ms') + ) } type LoadFunctionsFromDistOptions = { diff --git a/packages/api/package.json b/packages/api/package.json index 6ce88caddf16..eae1e369924c 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -32,8 +32,8 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", - "@prisma/client": "5.9.1", + "@babel/runtime-corejs3": "7.24.0", + "@prisma/client": "5.10.2", "@whatwg-node/fetch": "0.9.16", "core-js": "3.35.1", "humanize-string": "2.1.0", diff --git a/packages/auth-providers/auth0/api/package.json b/packages/auth-providers/auth0/api/package.json index b8df03066329..abc453955209 100644 --- a/packages/auth-providers/auth0/api/package.json +++ b/packages/auth-providers/auth0/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "jsonwebtoken": "9.0.2", "jwks-rsa": "3.1.0" diff --git a/packages/auth-providers/auth0/setup/package.json b/packages/auth-providers/auth0/setup/package.json index b1af0773d41b..b49f435651a7 100644 --- a/packages/auth-providers/auth0/setup/package.json +++ b/packages/auth-providers/auth0/setup/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/auth0/web/package.json b/packages/auth-providers/auth0/web/package.json index f4e234f923be..edd18bb97e9c 100644 --- a/packages/auth-providers/auth0/web/package.json +++ b/packages/auth-providers/auth0/web/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/azureActiveDirectory/api/package.json b/packages/auth-providers/azureActiveDirectory/api/package.json index 8417c15bd114..ac7cc64e87a4 100644 --- a/packages/auth-providers/azureActiveDirectory/api/package.json +++ b/packages/auth-providers/azureActiveDirectory/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "jsonwebtoken": "9.0.2", "jwks-rsa": "3.1.0" diff --git a/packages/auth-providers/azureActiveDirectory/setup/package.json b/packages/auth-providers/azureActiveDirectory/setup/package.json index f069cf493109..8e15a5bec9b8 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/package.json +++ b/packages/auth-providers/azureActiveDirectory/setup/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/azureActiveDirectory/web/package.json b/packages/auth-providers/azureActiveDirectory/web/package.json index 7c73ea9a3a8d..f44dcdb8167c 100644 --- a/packages/auth-providers/azureActiveDirectory/web/package.json +++ b/packages/auth-providers/azureActiveDirectory/web/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/clerk/api/package.json b/packages/auth-providers/clerk/api/package.json index c49ce7a9274e..67b271846d7c 100644 --- a/packages/auth-providers/clerk/api/package.json +++ b/packages/auth-providers/clerk/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@clerk/clerk-sdk-node": "4.13.7", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/clerk/setup/package.json b/packages/auth-providers/clerk/setup/package.json index d3a746e51484..fa41d8b1e617 100644 --- a/packages/auth-providers/clerk/setup/package.json +++ b/packages/auth-providers/clerk/setup/package.json @@ -21,7 +21,7 @@ "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index af941e55c0cf..4162fa5ccac1 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/custom/setup/package.json b/packages/auth-providers/custom/setup/package.json index 45acd352e1b3..5a354f42938c 100644 --- a/packages/auth-providers/custom/setup/package.json +++ b/packages/auth-providers/custom/setup/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/dbAuth/api/package.json b/packages/auth-providers/dbAuth/api/package.json index 491334ed712f..af90a59d5023 100644 --- a/packages/auth-providers/dbAuth/api/package.json +++ b/packages/auth-providers/dbAuth/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/project-config": "7.0.0", "base64url": "3.0.1", "core-js": "3.35.1", diff --git a/packages/auth-providers/dbAuth/setup/package.json b/packages/auth-providers/dbAuth/setup/package.json index 9e95813b4fdc..792b91ad65cf 100644 --- a/packages/auth-providers/dbAuth/setup/package.json +++ b/packages/auth-providers/dbAuth/setup/package.json @@ -21,7 +21,7 @@ "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "@simplewebauthn/browser": "7.4.0", "core-js": "3.35.1", diff --git a/packages/auth-providers/dbAuth/web/package.json b/packages/auth-providers/dbAuth/web/package.json index 46e310dcc2b2..6a994eceff9c 100644 --- a/packages/auth-providers/dbAuth/web/package.json +++ b/packages/auth-providers/dbAuth/web/package.json @@ -24,7 +24,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "@simplewebauthn/browser": "7.4.0", "core-js": "3.35.1" diff --git a/packages/auth-providers/firebase/api/package.json b/packages/auth-providers/firebase/api/package.json index 524f2d02aca8..2282c5e0bc9b 100644 --- a/packages/auth-providers/firebase/api/package.json +++ b/packages/auth-providers/firebase/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "firebase-admin": "11.11.1" }, diff --git a/packages/auth-providers/firebase/setup/package.json b/packages/auth-providers/firebase/setup/package.json index 983888702503..1e2f334ae4f7 100644 --- a/packages/auth-providers/firebase/setup/package.json +++ b/packages/auth-providers/firebase/setup/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/firebase/web/package.json b/packages/auth-providers/firebase/web/package.json index 610015333edd..4996760cd6e1 100644 --- a/packages/auth-providers/firebase/web/package.json +++ b/packages/auth-providers/firebase/web/package.json @@ -23,7 +23,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/netlify/api/package.json b/packages/auth-providers/netlify/api/package.json index 65307c7b004f..15e5d1368aed 100644 --- a/packages/auth-providers/netlify/api/package.json +++ b/packages/auth-providers/netlify/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "jsonwebtoken": "9.0.2" }, diff --git a/packages/auth-providers/netlify/setup/package.json b/packages/auth-providers/netlify/setup/package.json index b28db05b4990..3036c1669c00 100644 --- a/packages/auth-providers/netlify/setup/package.json +++ b/packages/auth-providers/netlify/setup/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/netlify/web/package.json b/packages/auth-providers/netlify/web/package.json index e911e41ccb95..01cd88225020 100644 --- a/packages/auth-providers/netlify/web/package.json +++ b/packages/auth-providers/netlify/web/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/supabase/api/package.json b/packages/auth-providers/supabase/api/package.json index 69cd4622cc7f..3cd447cd1800 100644 --- a/packages/auth-providers/supabase/api/package.json +++ b/packages/auth-providers/supabase/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "jsonwebtoken": "9.0.2" }, diff --git a/packages/auth-providers/supabase/setup/package.json b/packages/auth-providers/supabase/setup/package.json index becedbc1f646..acdeb4fbf6a3 100644 --- a/packages/auth-providers/supabase/setup/package.json +++ b/packages/auth-providers/supabase/setup/package.json @@ -21,7 +21,7 @@ "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/supabase/web/package.json b/packages/auth-providers/supabase/web/package.json index 5bd16a5acae8..ab8776370504 100644 --- a/packages/auth-providers/supabase/web/package.json +++ b/packages/auth-providers/supabase/web/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1" }, "devDependencies": { diff --git a/packages/auth-providers/supertokens/api/package.json b/packages/auth-providers/supertokens/api/package.json index 5f6d9cf7c1f8..f136eea26ea4 100644 --- a/packages/auth-providers/supertokens/api/package.json +++ b/packages/auth-providers/supertokens/api/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "jsonwebtoken": "9.0.2", "jwks-rsa": "3.1.0" diff --git a/packages/auth-providers/supertokens/setup/package.json b/packages/auth-providers/supertokens/setup/package.json index f909283a0180..4e086ef91a8c 100644 --- a/packages/auth-providers/supertokens/setup/package.json +++ b/packages/auth-providers/supertokens/setup/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/cli-helpers": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth-providers/supertokens/web/package.json b/packages/auth-providers/supertokens/web/package.json index 57a7e59bad7c..399cfae7a75c 100644 --- a/packages/auth-providers/supertokens/web/package.json +++ b/packages/auth-providers/supertokens/web/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/auth/package.json b/packages/auth/package.json index ef2fa29c5233..ac98bbf27d0d 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -23,7 +23,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "react": "0.0.0-experimental-e5205658f-20230913" }, diff --git a/packages/babel-config/package.json b/packages/babel-config/package.json index 5fe88b09e8c7..6eebd09c80ab 100644 --- a/packages/babel-config/package.json +++ b/packages/babel-config/package.json @@ -28,12 +28,12 @@ "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-runtime": "7.23.9", + "@babel/plugin-transform-runtime": "7.24.0", "@babel/preset-env": "^7.22.20", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.22.15", "@babel/register": "^7.22.15", - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@babel/traverse": "^7.22.20", "@redwoodjs/project-config": "7.0.0", "babel-plugin-auto-import": "1.1.0", diff --git a/packages/babel-config/src/__tests__/__fixtures__/redwood-app/package.json b/packages/babel-config/src/__tests__/__fixtures__/redwood-app/package.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/babel-config/src/__tests__/__fixtures__/redwood-app/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/babel-config/src/__tests__/api.test.ts b/packages/babel-config/src/__tests__/api.test.ts index 97581def11d9..7a40e3798481 100644 --- a/packages/babel-config/src/__tests__/api.test.ts +++ b/packages/babel-config/src/__tests__/api.test.ts @@ -175,7 +175,7 @@ describe('api', () => { proposals: true, version: 3, }, - version: '7.23.9', + version: '7.24.0', }, ]) diff --git a/packages/babel-config/src/api.ts b/packages/babel-config/src/api.ts index 0de4f471de19..337beede36f1 100644 --- a/packages/babel-config/src/api.ts +++ b/packages/babel-config/src/api.ts @@ -5,7 +5,7 @@ import path from 'path' import type { PluginOptions, PluginTarget, TransformOptions } from '@babel/core' import { transformAsync } from '@babel/core' -import { getPaths } from '@redwoodjs/project-config' +import { getPaths, projectSideIsEsm } from '@redwoodjs/project-config' import type { RegisterHookOptions } from './common' import { @@ -74,11 +74,10 @@ type PluginShape = | [PluginTarget, PluginOptions, undefined | string] | [PluginTarget, PluginOptions] -export const getApiSideBabelPlugins = ( - { openTelemetry } = { - openTelemetry: false, - } -) => { +export const getApiSideBabelPlugins = ({ + openTelemetry = false, + projectIsEsm = false, +} = {}) => { const tsConfig = parseTypeScriptConfigFiles() const plugins: Array = [ @@ -128,7 +127,9 @@ export const getApiSideBabelPlugins = ( ['babel-plugin-graphql-tag', undefined, 'rwjs-babel-graphql-tag'], [ require('./plugins/babel-plugin-redwood-import-dir').default, - undefined, + { + projectIsEsm, + }, 'rwjs-babel-glob-import-dir', ], openTelemetry && [ @@ -150,7 +151,7 @@ export const getApiSideBabelConfigPath = () => { } } -export const getApiSideBabelOverrides = () => { +export const getApiSideBabelOverrides = ({ projectIsEsm = false } = {}) => { const overrides = [ // Extract graphql options from the graphql function // NOTE: this must come before the context wrapping @@ -167,18 +168,23 @@ export const getApiSideBabelOverrides = () => { // match */api/src/functions/*.js|ts test: /.+api(?:[\\|/])src(?:[\\|/])functions(?:[\\|/]).+.(?:js|ts)$/, plugins: [ - require('./plugins/babel-plugin-redwood-context-wrapping').default, + [ + require('./plugins/babel-plugin-redwood-context-wrapping').default, + { + projectIsEsm, + }, + ], ], }, ].filter(Boolean) return overrides as TransformOptions[] } -export const getApiSideDefaultBabelConfig = () => { +export const getApiSideDefaultBabelConfig = ({ projectIsEsm = false } = {}) => { return { presets: getApiSideBabelPresets(), - plugins: getApiSideBabelPlugins(), - overrides: getApiSideBabelOverrides(), + plugins: getApiSideBabelPlugins({ projectIsEsm }), + overrides: getApiSideBabelOverrides({ projectIsEsm }), extends: getApiSideBabelConfigPath(), babelrc: false, ignore: ['node_modules'], @@ -190,7 +196,9 @@ export const registerApiSideBabelHook = ({ plugins = [], ...rest }: RegisterHookOptions = {}) => { - const defaultOptions = getApiSideDefaultBabelConfig() + const defaultOptions = getApiSideDefaultBabelConfig({ + projectIsEsm: projectSideIsEsm('api'), + }) registerBabel({ ...defaultOptions, @@ -209,7 +217,9 @@ export const transformWithBabel = async ( plugins: TransformOptions['plugins'] ) => { const code = await fs.readFile(srcPath, 'utf-8') - const defaultOptions = getApiSideDefaultBabelConfig() + const defaultOptions = getApiSideDefaultBabelConfig({ + projectIsEsm: projectSideIsEsm('api'), + }) const result = transformAsync(code, { ...defaultOptions, diff --git a/packages/babel-config/src/plugins/babel-plugin-redwood-context-wrapping.ts b/packages/babel-config/src/plugins/babel-plugin-redwood-context-wrapping.ts index 9da33bc3ba77..683e2395efde 100644 --- a/packages/babel-config/src/plugins/babel-plugin-redwood-context-wrapping.ts +++ b/packages/babel-config/src/plugins/babel-plugin-redwood-context-wrapping.ts @@ -64,7 +64,10 @@ function generateWrappedHandler(t: typeof types, isAsync: boolean) { ) } -export default function ({ types: t }: { types: typeof types }): PluginObj { +export default function ( + { types: t }: { types: typeof types }, + { projectIsEsm = false }: { projectIsEsm?: boolean } = {} +): PluginObj { return { name: 'babel-plugin-redwood-context-wrapping', visitor: { @@ -97,7 +100,11 @@ export default function ({ types: t }: { types: typeof types }): PluginObj { t.identifier('getAsyncStoreInstance') ), ], - t.stringLiteral('@redwoodjs/context/dist/store') + t.stringLiteral( + projectIsEsm + ? '@redwoodjs/context/dist/store.js' + : '@redwoodjs/context/dist/store' + ) ) ) diff --git a/packages/babel-config/src/plugins/babel-plugin-redwood-import-dir.ts b/packages/babel-config/src/plugins/babel-plugin-redwood-import-dir.ts index 58f8f6c0c907..cf523405b7ec 100644 --- a/packages/babel-config/src/plugins/babel-plugin-redwood-import-dir.ts +++ b/packages/babel-config/src/plugins/babel-plugin-redwood-import-dir.ts @@ -21,7 +21,10 @@ import { importStatementPath } from '@redwoodjs/project-config' * // services.nested_c = require('src/services/nested/c.js') * ``` */ -export default function ({ types: t }: { types: typeof types }): PluginObj { +export default function ( + { types: t }: { types: typeof types }, + { projectIsEsm = false }: { projectIsEsm?: boolean } = {} +): PluginObj { return { name: 'babel-plugin-redwood-import-dir', visitor: { @@ -74,7 +77,11 @@ export default function ({ types: t }: { types: typeof types }): PluginObj { t.identifier(importName + '_' + fpVarName) ), ], - t.stringLiteral(filePathWithoutExtension) + t.stringLiteral( + projectIsEsm + ? `${filePathWithoutExtension}.js` + : filePathWithoutExtension + ) ) ) diff --git a/packages/cli-packages/dataMigrate/package.json b/packages/cli-packages/dataMigrate/package.json index 8ff1c11e774d..56870a98c499 100644 --- a/packages/cli-packages/dataMigrate/package.json +++ b/packages/cli-packages/dataMigrate/package.json @@ -36,7 +36,7 @@ "yargs": "17.7.2" }, "devDependencies": { - "@prisma/client": "5.9.1", + "@prisma/client": "5.10.2", "@redwoodjs/framework-tools": "7.0.0", "@types/fs-extra": "11.0.4", "@types/yargs": "17.0.32", diff --git a/packages/cli-packages/dataMigrate/src/__tests__/upHandler.test.ts b/packages/cli-packages/dataMigrate/src/__tests__/upHandler.test.ts index 4199e214e443..db19cf845c78 100644 --- a/packages/cli-packages/dataMigrate/src/__tests__/upHandler.test.ts +++ b/packages/cli-packages/dataMigrate/src/__tests__/upHandler.test.ts @@ -242,6 +242,7 @@ describe('upHandler', () => { { 'redwood.toml': '', api: { + 'package.json': '{}', dist: { lib: { 'db.js': '', diff --git a/packages/cli-packages/storybook/package.json b/packages/cli-packages/storybook/package.json index 64bd6e445234..067e0957b437 100644 --- a/packages/cli-packages/storybook/package.json +++ b/packages/cli-packages/storybook/package.json @@ -23,13 +23,13 @@ "@redwoodjs/cli-helpers": "7.0.0", "@redwoodjs/project-config": "7.0.0", "@redwoodjs/telemetry": "7.0.0", - "@storybook/addon-a11y": "7.6.10", - "@storybook/addon-docs": "7.6.10", - "@storybook/addon-essentials": "7.6.10", - "@storybook/react-webpack5": "7.6.10", + "@storybook/addon-a11y": "7.6.17", + "@storybook/addon-docs": "7.6.17", + "@storybook/addon-essentials": "7.6.17", + "@storybook/react-webpack5": "7.6.17", "chalk": "4.1.2", "execa": "5.1.1", - "storybook": "7.6.10", + "storybook": "7.6.17", "terminal-link": "2.1.1", "yargs": "17.7.2" }, diff --git a/packages/cli/package.json b/packages/cli/package.json index 2b53fc7f8d24..a8d2004f4bb7 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -29,7 +29,7 @@ "test:watch": "vitest watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@iarna/toml": "2.2.5", "@opentelemetry/api": "1.7.0", "@opentelemetry/core": "1.21.0", @@ -37,7 +37,7 @@ "@opentelemetry/resources": "1.21.0", "@opentelemetry/sdk-trace-node": "1.21.0", "@opentelemetry/semantic-conventions": "1.21.0", - "@prisma/internals": "5.9.1", + "@prisma/internals": "5.10.2", "@redwoodjs/api-server": "7.0.0", "@redwoodjs/cli-helpers": "7.0.0", "@redwoodjs/fastify-web": "7.0.0", @@ -73,7 +73,7 @@ "pluralize": "8.0.0", "portfinder": "1.0.32", "prettier": "2.8.8", - "prisma": "5.9.1", + "prisma": "5.10.2", "prompts": "2.4.2", "rimraf": "5.0.5", "semver": "7.5.4", diff --git a/packages/cli/src/__tests__/addAdditionalEnvFiles.test.js b/packages/cli/src/__tests__/loadEnvFiles.test.js similarity index 61% rename from packages/cli/src/__tests__/addAdditionalEnvFiles.test.js rename to packages/cli/src/__tests__/loadEnvFiles.test.js index fc20fe13079b..07c8542d93c1 100644 --- a/packages/cli/src/__tests__/addAdditionalEnvFiles.test.js +++ b/packages/cli/src/__tests__/loadEnvFiles.test.js @@ -2,9 +2,13 @@ import path from 'path' import { afterEach, beforeAll, describe, expect, it, test } from 'vitest' -import { addAdditionalEnvFiles } from '../middleware/addAdditionalEnvFiles' +import { + loadDefaultEnvFiles, + loadNodeEnvDerivedEnvFile, + loadUserSpecifiedEnvFiles, +} from '../lib/loadEnvFiles' -describe('addAdditionalEnvFiles', () => { +describe('loadEnvFiles', () => { let originalProcessEnv beforeAll(() => { originalProcessEnv = { ...process.env } @@ -14,17 +18,19 @@ describe('addAdditionalEnvFiles', () => { }) it("doesn't load .env files if there are none to load", () => { - const fn = addAdditionalEnvFiles(__dirname) - fn({}) + const cwd = __dirname + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, []) expect(process.env).toEqual(originalProcessEnv) }) it("doesn't load .env files if not instructed to", () => { - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-prod') - ) - fn({}) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-prod') + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, []) expect(process.env).toEqual(originalProcessEnv) }) @@ -32,10 +38,10 @@ describe('addAdditionalEnvFiles', () => { it('loads specified .env files', () => { expect(process.env).not.toHaveProperty('PROD_DATABASE_URL') - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-prod') - ) - fn({ includeEnvFiles: ['prod'] }) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-prod') + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, ['prod']) expect(process.env).toHaveProperty( 'PROD_DATABASE_URL', @@ -51,10 +57,10 @@ describe('addAdditionalEnvFiles', () => { expect(process.env).not.toHaveProperty('DEV_DATABASE_URL') expect(process.env).not.toHaveProperty('PROD_DATABASE_URL') - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-many') - ) - fn({ includeEnvFiles: ['dev', 'prod'] }) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-many') + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, ['dev', 'prod']) expect(process.env).toHaveProperty( 'DEV_DATABASE_URL', @@ -71,14 +77,14 @@ describe('addAdditionalEnvFiles', () => { expect(process.env).not.toHaveProperty('TEST_BASE') expect(process.env).not.toHaveProperty('TEST_COLLISION') - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-collision') - ) - fn({ includeEnvFiles: ['base', 'collision'] }) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-collision') + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, ['base', 'collision']) expect(process.env).toHaveProperty( 'DATABASE_URL', - 'postgresql://user:password@localhost:5432/mydb' + 'postgresql://user:password@localhost:5432/mycollisiondb' ) expect(process.env).toHaveProperty('TEST_BASE', '1') expect(process.env).toHaveProperty('TEST_COLLISION', '1') @@ -89,10 +95,10 @@ describe('addAdditionalEnvFiles', () => { expect(process.env).not.toHaveProperty('BAZINGA') process.env.NODE_ENV = 'bazinga' - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-node-env') - ) - fn({}) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-node-env') + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, []) expect(process.env).toHaveProperty( 'PROD_DATABASE_URL', @@ -101,17 +107,15 @@ describe('addAdditionalEnvFiles', () => { expect(process.env).toHaveProperty('BAZINGA', '1') }) - it('loads .env files based on NODE_ENV last', () => { + it('loads .env files based on NODE_ENV before user-specified .env files', () => { expect(process.env).not.toHaveProperty('PROD_DATABASE_URL') expect(process.env).not.toHaveProperty('BAZINGA') process.env.NODE_ENV = 'bazinga' - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-node-env') - ) - fn({ - includeEnvFiles: ['prod'], - }) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-node-env') + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, ['prod']) expect(process.env).toHaveProperty( 'PROD_DATABASE_URL', @@ -121,14 +125,12 @@ describe('addAdditionalEnvFiles', () => { }) it("throws if it can't find a specified env file", () => { - const fn = addAdditionalEnvFiles( - path.join(__dirname, '__fixtures__/redwood-app-env-node-env') - ) + const cwd = path.join(__dirname, '__fixtures__/redwood-app-env-node-env') try { - fn({ - includeEnvFiles: ['missing'], - }) + loadDefaultEnvFiles(cwd) + loadNodeEnvDerivedEnvFile(cwd) + loadUserSpecifiedEnvFiles(cwd, ['missing']) } catch (error) { // Just testing that the error message reports the file it tried to load. expect(error.message).toMatch(/\.env\.missing/) diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js index 9490c763956e..81d344fbb6d8 100644 --- a/packages/cli/src/index.js +++ b/packages/cli/src/index.js @@ -3,7 +3,6 @@ import path from 'path' import { trace, SpanStatusCode } from '@opentelemetry/api' -import { config } from 'dotenv-defaults' import fs from 'fs-extra' import { hideBin, Parser } from 'yargs/helpers' import yargs from 'yargs/yargs' @@ -32,10 +31,10 @@ import * as testCommand from './commands/test' import * as tstojsCommand from './commands/ts-to-js' import * as typeCheckCommand from './commands/type-check' import * as upgradeCommand from './commands/upgrade' -import { getPaths, findUp } from './lib' +import { findUp } from './lib' import { exitWithError } from './lib/exit' +import { loadEnvFiles } from './lib/loadEnvFiles' import * as updateCheck from './lib/updateCheck' -import { addAdditionalEnvFiles } from './middleware/addAdditionalEnvFiles' import { loadPlugins } from './plugin' import { startTelemetry, shutdownTelemetry } from './telemetry/index' @@ -102,20 +101,10 @@ try { process.env.RWJS_CWD = cwd -// # Load .env, .env.defaults +// Load .env.* files. // // This should be done as early as possible, and the earliest we can do it is after setting `cwd`. -// Further down in middleware, we allow additional .env files to be loaded based on args. - -if (!process.env.REDWOOD_ENV_FILES_LOADED) { - config({ - path: path.join(getPaths().base, '.env'), - defaults: path.join(getPaths().base, '.env.defaults'), - multiline: true, - }) - - process.env.REDWOOD_ENV_FILES_LOADED = 'true' -} +loadEnvFiles() async function main() { // Start telemetry if it hasn't been disabled @@ -139,6 +128,8 @@ async function main() { recordTelemetryAttributes({ command: '--help' }) } + // FIXME: There's currently a BIG RED BOX on exiting feServer + // Is yargs or the RW cli not passing SigInt on to the child process? try { // Run the command via yargs await runYargs() @@ -174,6 +165,8 @@ async function runYargs() { // Likewise for `telemetry`. (argv) => { delete argv.cwd + delete argv.addEnvFiles + delete argv['add-env-files'] delete argv.telemetry }, telemetry && telemetryMiddleware, @@ -183,27 +176,15 @@ async function runYargs() { .option('cwd', { describe: 'Working directory to use (where `redwood.toml` is located)', }) - .option('include-env-files', { - describe: 'Load additional .env files. These are incremental', + .option('add-env-files', { + describe: + 'Load additional .env files. Values defined in files specified later override earlier ones.', array: true, }) .example( - 'yarn rw exec MigrateUsers --include-env-files prod stripe-prod', - '"Run a script, and also include .env.prod and .env.stripe-prod"' + 'yarn rw exec migrateUsers --add-env-files stripe nakama', + "Run a script, also loading env vars from '.env.stripe' and '.env.nakama'" ) - .middleware([ - addAdditionalEnvFiles(cwd), - // Once we've loaded the additional .env files, remove the option from yargs. - // If we leave it in, it and its alias will be passed to scripts run via `yarn rw exec` like... - // - // ``` - // { args: { _: [ 'exec' ], 'include-env-files': [ 'prod' ], includeEnvFiles: [ 'prod' ], '$0': 'rw' } } - // ``` - (argv) => { - delete argv.includeEnvFiles - delete argv['include-env-files'] - }, - ]) .option('telemetry', { describe: 'Whether to send anonymous usage telemetry to RedwoodJS', boolean: true, diff --git a/packages/cli/src/lib/loadEnvFiles.js b/packages/cli/src/lib/loadEnvFiles.js new file mode 100644 index 000000000000..f6b61e1ada8f --- /dev/null +++ b/packages/cli/src/lib/loadEnvFiles.js @@ -0,0 +1,79 @@ +// @ts-check + +import path from 'path' + +import { config as dotenvConfig } from 'dotenv' +import { config as dotenvDefaultsConfig } from 'dotenv-defaults' +import fs from 'fs-extra' +import { hideBin, Parser } from 'yargs/helpers' + +import { getPaths } from '@redwoodjs/project-config' + +export function loadEnvFiles() { + if (process.env.REDWOOD_ENV_FILES_LOADED) { + return + } + + const { base } = getPaths() + + loadDefaultEnvFiles(base) + loadNodeEnvDerivedEnvFile(base) + + const { addEnvFiles } = Parser(hideBin(process.argv), { + array: ['add-env-files'], + default: { + addEnvFiles: [], + }, + }) + if (addEnvFiles.length > 0) { + loadUserSpecifiedEnvFiles(base, addEnvFiles) + } + + process.env.REDWOOD_ENV_FILES_LOADED = 'true' +} + +/** + * @param {string} cwd + */ +export function loadDefaultEnvFiles(cwd) { + dotenvDefaultsConfig({ + path: path.join(cwd, '.env'), + defaults: path.join(cwd, '.env.defaults'), + multiline: true, + }) +} + +/** + * @param {string} cwd + */ +export function loadNodeEnvDerivedEnvFile(cwd) { + if (!process.env.NODE_ENV) { + return + } + + const nodeEnvDerivedEnvFilePath = path.join( + cwd, + `.env.${process.env.NODE_ENV}` + ) + if (!fs.existsSync(nodeEnvDerivedEnvFilePath)) { + return + } + + dotenvConfig({ path: nodeEnvDerivedEnvFilePath, override: true }) +} + +/** + * @param {string} cwd + */ +export function loadUserSpecifiedEnvFiles(cwd, addEnvFiles) { + for (const suffix of addEnvFiles) { + const envPath = path.join(cwd, `.env.${suffix}`) + if (!fs.pathExistsSync(envPath)) { + throw new Error( + `Couldn't find an .env file at '${envPath}' as specified by '--add-env-files'` + ) + } + + dotenvConfig({ path: envPath, override: true }) + } +} diff --git a/packages/cli/src/middleware/addAdditionalEnvFiles.js b/packages/cli/src/middleware/addAdditionalEnvFiles.js deleted file mode 100644 index 7186dfd78dcd..000000000000 --- a/packages/cli/src/middleware/addAdditionalEnvFiles.js +++ /dev/null @@ -1,33 +0,0 @@ -// @ts-check -import fs from 'fs' -import path from 'path' - -import { config } from 'dotenv' - -/** - * @param { string } cwd - * @returns {(yargs: import('yargs').Argv) => void} - */ -export const addAdditionalEnvFiles = (cwd) => (yargs) => { - // Allow for additional .env files to be included via --include-env - if ('includeEnvFiles' in yargs && Array.isArray(yargs.includeEnvFiles)) { - for (const suffix of yargs.includeEnvFiles) { - const envPath = path.join(cwd, `.env.${suffix}`) - if (!fs.existsSync(envPath)) { - throw new Error( - `Couldn't find an .env file at '${envPath}' - which was noted via --include-env` - ) - } - - config({ path: envPath }) - } - } - - // Support automatically matching a .env file based on NODE_ENV - if (process.env.NODE_ENV) { - const processBasedEnvPath = path.join(cwd, `.env.${process.env.NODE_ENV}`) - if (fs.existsSync(processBasedEnvPath)) { - config({ path: processBasedEnvPath }) - } - } -} diff --git a/packages/codemods/package.json b/packages/codemods/package.json index e07f3f6219ad..33ffc8fb43e9 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.22.20", "@babel/parser": "^7.22.16", "@babel/plugin-transform-typescript": "^7.22.15", - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@babel/traverse": "^7.22.20", "@iarna/toml": "2.2.5", "@redwoodjs/project-config": "7.0.0", diff --git a/packages/core/package.json b/packages/core/package.json index bc3081217f05..62755c9010c1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@babel/cli": "7.23.9", - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "@redwoodjs/cli": "7.0.0", "@redwoodjs/eslint-config": "7.0.0", diff --git a/packages/forms/package.json b/packages/forms/package.json index b99843564828..6522a2bef99e 100644 --- a/packages/forms/package.json +++ b/packages/forms/package.json @@ -23,7 +23,7 @@ "test:watch": "vitest watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "core-js": "3.35.1", "graphql": "16.8.1", "pascalcase": "1.0.0", diff --git a/packages/graphql-server/build.mts b/packages/graphql-server/build.mts new file mode 100644 index 000000000000..16175a6725c0 --- /dev/null +++ b/packages/graphql-server/build.mts @@ -0,0 +1,3 @@ +import { build } from '@redwoodjs/framework-tools' + +await build() diff --git a/packages/graphql-server/package.json b/packages/graphql-server/package.json index 65ca97162d91..b951538b0245 100644 --- a/packages/graphql-server/package.json +++ b/packages/graphql-server/package.json @@ -13,8 +13,7 @@ "dist" ], "scripts": { - "build": "yarn build:js && yarn build:types", - "build:js": "babel src -d dist --extensions \".js,.jsx,.ts,.tsx\"", + "build": "tsx ./build.mts && yarn build:types", "build:pack": "yarn pack -o redwoodjs-graphql-server.tgz", "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build\"", @@ -23,7 +22,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@envelop/core": "5.0.0", "@envelop/depth-limit": "4.0.0", "@envelop/disable-introspection": "6.0.0", @@ -59,6 +58,7 @@ "aws-lambda": "1.0.7", "jest": "29.7.0", "jsonwebtoken": "9.0.2", + "tsx": "4.6.2", "typescript": "5.3.3" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/internal/package.json b/packages/internal/package.json index f5abd6de1600..819c7f960299 100644 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -32,7 +32,7 @@ "@babel/parser": "^7.22.16", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-typescript": "^7.22.15", - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@babel/traverse": "^7.22.20", "@graphql-codegen/add": "4.0.1", "@graphql-codegen/cli": "3.3.1", diff --git a/packages/internal/src/build/api.ts b/packages/internal/src/build/api.ts index e8770d6baf83..d1141c6f672b 100644 --- a/packages/internal/src/build/api.ts +++ b/packages/internal/src/build/api.ts @@ -1,12 +1,16 @@ import type { BuildContext, BuildOptions, PluginBuild } from 'esbuild' import { build, context } from 'esbuild' -import { remove } from 'fs-extra' +import fs from 'fs-extra' import { getApiSideBabelPlugins, transformWithBabel, } from '@redwoodjs/babel-config' -import { getConfig, getPaths } from '@redwoodjs/project-config' +import { + getConfig, + getPaths, + projectSideIsEsm, +} from '@redwoodjs/project-config' import { findApiFiles } from '../files' @@ -33,7 +37,7 @@ export const rebuildApi = async () => { export const cleanApiBuild = async () => { const rwjsPaths = getPaths() - return remove(rwjsPaths.api.dist) + return fs.remove(rwjsPaths.api.dist) } const runRwBabelTransformsPlugin = { @@ -51,6 +55,7 @@ const runRwBabelTransformsPlugin = { openTelemetry: rwjsConfig.experimental.opentelemetry.enabled && rwjsConfig.experimental.opentelemetry.wrapApi, + projectIsEsm: projectSideIsEsm('api'), }) ) @@ -72,13 +77,14 @@ export const transpileApi = async (files: string[]) => { function getEsbuildOptions(files: string[]): BuildOptions { const rwjsPaths = getPaths() + const format = projectSideIsEsm('api') ? 'esm' : 'cjs' return { absWorkingDir: rwjsPaths.api.base, entryPoints: files, platform: 'node', target: 'node20', - format: 'cjs', + format, allowOverwrite: true, bundle: false, plugins: [runRwBabelTransformsPlugin], diff --git a/packages/prerender/package.json b/packages/prerender/package.json index 32328e8ff24e..f789902568d3 100644 --- a/packages/prerender/package.json +++ b/packages/prerender/package.json @@ -25,7 +25,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "@redwoodjs/internal": "7.0.0", "@redwoodjs/project-config": "7.0.0", diff --git a/packages/project-config/src/__tests__/esmHelpers.test.ts b/packages/project-config/src/__tests__/esmHelpers.test.ts new file mode 100644 index 000000000000..d6b6eba742bc --- /dev/null +++ b/packages/project-config/src/__tests__/esmHelpers.test.ts @@ -0,0 +1,61 @@ +import path from 'path' + +import { describe, beforeAll, afterAll, expect, test } from 'vitest' + +import { projectIsEsm, projectRootIsEsm, projectSideIsEsm } from '../paths' + +const RWJS_CWD = process.env.RWJS_CWD + +describe('esm helpers', () => { + describe('esm fixture', () => { + const ESM_FIXTURE = path.join(__dirname, 'fixtures', 'esm') + + beforeAll(() => { + process.env.RWJS_CWD = ESM_FIXTURE + }) + afterAll(() => { + process.env.RWJS_CWD = RWJS_CWD + }) + + test('projectIsEsm', () => { + expect(projectIsEsm()).toEqual(true) + }) + + test('projectRootIsEsm', () => { + expect(projectRootIsEsm()).toEqual(true) + }) + + test('projectSideIsEsm', () => { + expect(projectSideIsEsm('api')).toEqual(true) + expect(projectSideIsEsm('web')).toEqual(true) + }) + }) + + describe('esm api only fixture', () => { + const ESM_API_ONLY_FIXTURE = path.join( + __dirname, + 'fixtures', + 'esm-api-only' + ) + + beforeAll(() => { + process.env.RWJS_CWD = ESM_API_ONLY_FIXTURE + }) + afterAll(() => { + process.env.RWJS_CWD = RWJS_CWD + }) + + test('projectIsEsm', () => { + expect(projectIsEsm()).toEqual(false) + }) + + test('projectRootIsEsm', () => { + expect(projectRootIsEsm()).toEqual(false) + }) + + test('projectSideIsEsm', () => { + expect(projectSideIsEsm('api')).toEqual(true) + expect(projectSideIsEsm('web')).toEqual(false) + }) + }) +}) diff --git a/packages/project-config/src/__tests__/fixtures/esm-api-only/api/package.json b/packages/project-config/src/__tests__/fixtures/esm-api-only/api/package.json new file mode 100644 index 000000000000..3dbc1ca591c0 --- /dev/null +++ b/packages/project-config/src/__tests__/fixtures/esm-api-only/api/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/project-config/src/__tests__/fixtures/esm-api-only/package.json b/packages/project-config/src/__tests__/fixtures/esm-api-only/package.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/project-config/src/__tests__/fixtures/esm-api-only/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/project-config/src/__tests__/fixtures/esm-api-only/redwood.toml b/packages/project-config/src/__tests__/fixtures/esm-api-only/redwood.toml new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/project-config/src/__tests__/fixtures/esm-api-only/web/package.json b/packages/project-config/src/__tests__/fixtures/esm-api-only/web/package.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/project-config/src/__tests__/fixtures/esm-api-only/web/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/project-config/src/__tests__/fixtures/esm/api/package.json b/packages/project-config/src/__tests__/fixtures/esm/api/package.json new file mode 100644 index 000000000000..3dbc1ca591c0 --- /dev/null +++ b/packages/project-config/src/__tests__/fixtures/esm/api/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/project-config/src/__tests__/fixtures/esm/package.json b/packages/project-config/src/__tests__/fixtures/esm/package.json new file mode 100644 index 000000000000..3dbc1ca591c0 --- /dev/null +++ b/packages/project-config/src/__tests__/fixtures/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/project-config/src/__tests__/fixtures/esm/redwood.toml b/packages/project-config/src/__tests__/fixtures/esm/redwood.toml new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/project-config/src/__tests__/fixtures/esm/web/package.json b/packages/project-config/src/__tests__/fixtures/esm/web/package.json new file mode 100644 index 000000000000..3dbc1ca591c0 --- /dev/null +++ b/packages/project-config/src/__tests__/fixtures/esm/web/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/project-config/src/__tests__/paths.test.ts b/packages/project-config/src/__tests__/paths.test.ts index 99e34e484f84..ac4acef637a4 100644 --- a/packages/project-config/src/__tests__/paths.test.ts +++ b/packages/project-config/src/__tests__/paths.test.ts @@ -155,6 +155,8 @@ describe('paths', () => { 'server', 'routeHooks' ), + distClient: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'client'), + distRsc: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'rsc'), distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), distDocumentServer: path.join( FIXTURE_BASEDIR, @@ -163,11 +165,11 @@ describe('paths', () => { 'server', 'Document.js' ), - distServerEntries: path.join( + distRscEntries: path.join( FIXTURE_BASEDIR, 'web', 'dist', - 'server', + 'rsc', 'entries.js' ), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), @@ -437,12 +439,14 @@ describe('paths', () => { 'server', 'routeHooks' ), + distClient: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'client'), + distRsc: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'rsc'), distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), - distServerEntries: path.join( + distRscEntries: path.join( FIXTURE_BASEDIR, 'web', 'dist', - 'server', + 'rsc', 'entries.js' ), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), @@ -761,12 +765,14 @@ describe('paths', () => { 'server', 'routeHooks' ), + distClient: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'client'), + distRsc: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'rsc'), distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), - distServerEntries: path.join( + distRscEntries: path.join( FIXTURE_BASEDIR, 'web', 'dist', - 'server', + 'rsc', 'entries.js' ), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), @@ -1036,12 +1042,14 @@ describe('paths', () => { 'server', 'routeHooks' ), + distClient: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'client'), + distRsc: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'rsc'), distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), - distServerEntries: path.join( + distRscEntries: path.join( FIXTURE_BASEDIR, 'web', 'dist', - 'server', + 'rsc', 'entries.js' ), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), diff --git a/packages/project-config/src/paths.ts b/packages/project-config/src/paths.ts index 62902ef16fa4..407483e729c7 100644 --- a/packages/project-config/src/paths.ts +++ b/packages/project-config/src/paths.ts @@ -48,11 +48,13 @@ export interface WebPaths { storybookPreviewConfig: string | null storybookManagerConfig: string dist: string + distClient: string + distRsc: string distServer: string distEntryServer: string distDocumentServer: string distRouteHooks: string - distServerEntries: string + distRscEntries: string routeManifest: string types: string graphql: string @@ -122,12 +124,18 @@ const PATH_WEB_DIR_CONFIG_STORYBOOK_CONFIG = 'web/config/storybook.config.js' const PATH_WEB_DIR_CONFIG_STORYBOOK_PREVIEW = 'web/config/storybook.preview' // .js, .tsx const PATH_WEB_DIR_CONFIG_STORYBOOK_MANAGER = 'web/config/storybook.manager.js' const PATH_WEB_DIR_DIST = 'web/dist' + +// Used by Streaming & RSC builds to output to their individual folders +const PATH_WEB_DIR_DIST_CLIENT = 'web/dist/client' +const PATH_WEB_DIR_DIST_RSC = 'web/dist/rsc' const PATH_WEB_DIR_DIST_SERVER = 'web/dist/server' -const PATH_WEB_DIR_DIST_SERVER_ENTRY_SERVER = 'web/dist/server/entry.server.js' -const PATH_WEB_DIR_DIST_DOCUMENT = 'web/dist/server/Document.js' + +// Don't specify extension, handled by resolve file +const PATH_WEB_DIR_DIST_SERVER_ENTRY_SERVER = 'web/dist/server/entry.server' +const PATH_WEB_DIR_DIST_DOCUMENT = 'web/dist/server/Document' const PATH_WEB_DIR_DIST_SERVER_ROUTEHOOKS = 'web/dist/server/routeHooks' -const PATH_WEB_DIR_DIST_SERVER_ENTRIES = 'web/dist/server/entries.js' +const PATH_WEB_DIR_DIST_RSC_ENTRIES = 'web/dist/rsc/entries.js' const PATH_WEB_DIR_ROUTE_MANIFEST = 'web/dist/server/route-manifest.json' /** @@ -236,14 +244,18 @@ export const getPaths = (BASE_DIR: string = getBaseDir()): Paths => { PATH_WEB_DIR_CONFIG_STORYBOOK_MANAGER ), dist: path.join(BASE_DIR, PATH_WEB_DIR_DIST), + distClient: path.join(BASE_DIR, PATH_WEB_DIR_DIST_CLIENT), + distRsc: path.join(BASE_DIR, PATH_WEB_DIR_DIST_RSC), distServer: path.join(BASE_DIR, PATH_WEB_DIR_DIST_SERVER), - distEntryServer: path.join( - BASE_DIR, - PATH_WEB_DIR_DIST_SERVER_ENTRY_SERVER + // Allow for the possibility of a .mjs file + distEntryServer: mjsOrJs( + path.join(BASE_DIR, PATH_WEB_DIR_DIST_SERVER_ENTRY_SERVER) + ), + distDocumentServer: mjsOrJs( + path.join(BASE_DIR, PATH_WEB_DIR_DIST_DOCUMENT) ), - distDocumentServer: path.join(BASE_DIR, PATH_WEB_DIR_DIST_DOCUMENT), distRouteHooks: path.join(BASE_DIR, PATH_WEB_DIR_DIST_SERVER_ROUTEHOOKS), - distServerEntries: path.join(BASE_DIR, PATH_WEB_DIR_DIST_SERVER_ENTRIES), + distRscEntries: path.join(BASE_DIR, PATH_WEB_DIR_DIST_RSC_ENTRIES), routeManifest: path.join(BASE_DIR, PATH_WEB_DIR_ROUTE_MANIFEST), types: path.join(BASE_DIR, 'web/types'), entryClient: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_ENTRY_CLIENT)), // new vite/stream entry point for client @@ -387,3 +399,43 @@ export const importStatementPath = (path: string) => { return importPath } + +// Small collection of ESM helpers. + +function packageJsonIsEsm(packageJsonPath: string) { + const packageJsonContents = JSON.parse( + fs.readFileSync(packageJsonPath, 'utf-8') + ) + return packageJsonContents.type === 'module' +} + +export function projectRootIsEsm() { + return packageJsonIsEsm(path.join(getPaths().base, 'package.json')) +} + +export function projectSideIsEsm(side: 'api' | 'web') { + const redwoodProjectPaths = getPaths() + return packageJsonIsEsm( + path.join(redwoodProjectPaths[side].base, 'package.json') + ) +} + +export function projectIsEsm() { + if (!projectRootIsEsm()) { + return false + } + + for (const side of ['api', 'web'] as const) { + if (!projectSideIsEsm(side)) { + return false + } + } + + return true +} + +/** Default to JS path, but if MJS exists, use it instead */ +const mjsOrJs = (filePath: string) => { + const mjsPath = resolveFile(filePath, ['.mjs']) + return mjsPath ? mjsPath : filePath + '.js' +} diff --git a/packages/record/package.json b/packages/record/package.json index 3200315982c9..87348ef53183 100644 --- a/packages/record/package.json +++ b/packages/record/package.json @@ -23,15 +23,15 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", - "@prisma/client": "5.9.1", + "@babel/runtime-corejs3": "7.24.0", + "@prisma/client": "5.10.2", "@redwoodjs/project-config": "7.0.0", "core-js": "3.35.1" }, "devDependencies": { "@babel/cli": "7.23.9", "@babel/core": "^7.22.20", - "@prisma/internals": "5.9.1", + "@prisma/internals": "5.10.2", "esbuild": "0.20.0", "vitest": "1.2.2" }, diff --git a/packages/router/package.json b/packages/router/package.json index a95767f74fc5..1a470f26b8ea 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -25,7 +25,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1" }, diff --git a/packages/structure/package.json b/packages/structure/package.json index 2d80baa51522..1e29b54b37e5 100644 --- a/packages/structure/package.json +++ b/packages/structure/package.json @@ -25,9 +25,9 @@ "test:watch": "vitest watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@iarna/toml": "2.2.5", - "@prisma/internals": "5.9.1", + "@prisma/internals": "5.10.2", "@redwoodjs/project-config": "7.0.0", "@types/line-column": "1.0.0", "camelcase": "6.3.0", diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 2531c3ccbaba..644034559e25 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -22,7 +22,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/project-config": "7.0.0", "@redwoodjs/structure": "7.0.0", "@whatwg-node/fetch": "0.9.16", diff --git a/packages/testing/config/jest/api/jest.setup.js b/packages/testing/config/jest/api/jest.setup.js index b962ff9ea476..2c6fba2a1ae0 100644 --- a/packages/testing/config/jest/api/jest.setup.js +++ b/packages/testing/config/jest/api/jest.setup.js @@ -104,13 +104,16 @@ const buildScenario = let { scenario } = loadScenarios(testPath, scenarioName) const scenarioData = await seedScenario(scenario) - const result = await testFunc(scenarioData) + try { + const result = await testFunc(scenarioData) - if (wasDbUsed()) { - await teardown() + return result + } finally { + // Make sure to cleanup, even if test fails + if (wasDbUsed()) { + await teardown() + } } - - return result }) } diff --git a/packages/testing/package.json b/packages/testing/package.json index 0b1b04bf77f4..bfc0722130c2 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -28,7 +28,7 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "@redwoodjs/babel-config": "7.0.0", "@redwoodjs/context": "7.0.0", diff --git a/packages/vite/package.json b/packages/vite/package.json index c5df72b87540..9ed79c030646 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -68,7 +68,7 @@ "test:watch": "vitest watch src" }, "dependencies": { - "@babel/runtime-corejs3": "7.23.9", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/internal": "7.0.0", "@redwoodjs/project-config": "7.0.0", "@redwoodjs/web": "7.0.0", diff --git a/packages/vite/src/buildFeServer.ts b/packages/vite/src/buildFeServer.ts index 22ea25ce4331..fc64bfb0097a 100644 --- a/packages/vite/src/buildFeServer.ts +++ b/packages/vite/src/buildFeServer.ts @@ -1,11 +1,10 @@ -import { build as viteBuild } from 'vite' - import { buildWeb } from '@redwoodjs/internal/dist/build/web' import { getConfig, getPaths } from '@redwoodjs/project-config' import { buildRouteHooks } from './buildRouteHooks' import { buildRouteManifest } from './buildRouteManifest' -import { buildRscFeServer } from './buildRscFeServer' +import { buildRscClientAndServer } from './buildRscClientAndServer' +import { buildForStreamingServer } from './streaming/buildForStreamingServer' import { ensureProcessDirWeb } from './utils' export interface BuildOptions { @@ -20,6 +19,9 @@ export const buildFeServer = async ({ verbose, webDir }: BuildOptions = {}) => { const rwConfig = getConfig() const viteConfigPath = rwPaths.web.viteConfig + const rscEnabled = rwConfig.experimental?.rsc?.enabled + const streamingSsrEnabled = rwConfig.experimental?.streamingSsr?.enabled + if (!viteConfigPath) { throw new Error( 'Vite config not found. You need to setup your project with Vite ' + @@ -35,46 +37,22 @@ export const buildFeServer = async ({ verbose, webDir }: BuildOptions = {}) => { ) } - if (rwConfig.experimental?.rsc?.enabled) { + if (rscEnabled) { if (!rwPaths.web.entries) { throw new Error('RSC entries file not found') } - await buildRscFeServer({ - viteConfigPath, - webHtml: rwPaths.web.html, - entries: rwPaths.web.entries, - webDist: rwPaths.web.dist, - webDistServer: rwPaths.web.distServer, - webDistServerEntries: rwPaths.web.distServerEntries, - }) - - // Write a route manifest - return await buildRouteManifest() - - // - // RSC specific code ends here - // + await buildRscClientAndServer() } - // - // SSR Specific code below - // - - // Step 1A: Generate the client bundle - await buildWeb({ verbose }) + // We generate the RSC client bundle in the rscBuildClient function + // Streaming and RSC client bundles are **not** the same + if (streamingSsrEnabled && !rscEnabled) { + console.log('Building client for streaming SSR...\n') + await buildWeb({ verbose }) + } - // Step 1B: Generate the server output - await viteBuild({ - configFile: viteConfigPath, - build: { - outDir: rwPaths.web.distServer, - ssr: true, // use boolean here, instead of string. - // rollup inputs are defined in the vite plugin - }, - envFile: false, - logLevel: verbose ? 'info' : 'warn', - }) + await buildForStreamingServer({ verbose }) await buildRouteHooks(verbose, rwPaths) diff --git a/packages/vite/src/buildRouteManifest.ts b/packages/vite/src/buildRouteManifest.ts index 818c501966e0..7047f5de5029 100644 --- a/packages/vite/src/buildRouteManifest.ts +++ b/packages/vite/src/buildRouteManifest.ts @@ -14,8 +14,10 @@ import type { RWRouteManifest } from './types' * Generate a route manifest file for the web server side. */ export async function buildRouteManifest() { + const rwPaths = getPaths() + const buildManifestUrl = url.pathToFileURL( - path.join(getPaths().web.dist, 'client-build-manifest.json') + path.join(getPaths().web.distClient, 'client-build-manifest.json') ).href const clientBuildManifest: ViteBuildManifest = ( await import(buildManifestUrl, { with: { type: 'json' } }) @@ -27,7 +29,10 @@ export async function buildRouteManifest() { acc[route.pathDefinition] = { name: route.name, bundle: route.relativeFilePath - ? clientBuildManifest[route.relativeFilePath]?.file ?? null + ? // @TODO(RSC_DC): this no longer resolves to anything i.e. its always null + // Because the clientBuildManifest has no pages, because all pages are Server-components? + // This may be a non-issue, because RSC pages don't need a client bundle per page (or atleast not the same bundle) + clientBuildManifest[route.relativeFilePath]?.file ?? null : null, matchRegexString: route.matchRegexString, // NOTE this is the path definition, not the actual path @@ -49,7 +54,8 @@ export async function buildRouteManifest() { console.log('routeManifest', JSON.stringify(routeManifest, null, 2)) - const webRouteManifest = getPaths().web.routeManifest + const webRouteManifest = rwPaths.web.routeManifest + await fs.mkdir(rwPaths.web.distServer, { recursive: true }) return fs.writeFile(webRouteManifest, JSON.stringify(routeManifest, null, 2)) } diff --git a/packages/vite/src/buildRscFeServer.ts b/packages/vite/src/buildRscClientAndServer.ts similarity index 55% rename from packages/vite/src/buildRscFeServer.ts rename to packages/vite/src/buildRscClientAndServer.ts index 625a5372afad..a9b8b23af8d3 100644 --- a/packages/vite/src/buildRscFeServer.ts +++ b/packages/vite/src/buildRscClientAndServer.ts @@ -2,57 +2,38 @@ import { rscBuildAnalyze } from './rsc/rscBuildAnalyze' import { rscBuildClient } from './rsc/rscBuildClient' import { rscBuildClientEntriesMappings } from './rsc/rscBuildClientEntriesFile' import { rscBuildCopyCssAssets } from './rsc/rscBuildCopyCssAssets' +import { rscBuildForServer } from './rsc/rscBuildForServer' import { rscBuildRwEnvVars } from './rsc/rscBuildRwEnvVars' -import { rscBuildServer } from './rsc/rscBuildServer' -interface Args { - viteConfigPath: string - webHtml: string - entries: string - webDist: string - webDistServer: string - webDistServerEntries: string -} - -export const buildRscFeServer = async ({ - viteConfigPath, - webHtml, - entries, - webDist, - webDistServer, - webDistServerEntries, -}: Args) => { +export const buildRscClientAndServer = async () => { // Analyze all files and generate a list of RSCs and RSFs - const { clientEntryFiles, serverEntryFiles } = await rscBuildAnalyze( - viteConfigPath - ) + const { clientEntryFiles, serverEntryFiles } = await rscBuildAnalyze() // Generate the client bundle - const clientBuildOutput = await rscBuildClient( - webHtml, - webDist, - clientEntryFiles - ) + const clientBuildOutput = await rscBuildClient(clientEntryFiles) // Generate the server output - const serverBuildOutput = await rscBuildServer( - entries, + const serverBuildOutput = await rscBuildForServer( clientEntryFiles, serverEntryFiles, {} ) // Copy CSS assets from server to client - await rscBuildCopyCssAssets(serverBuildOutput, webDist, webDistServer) + // + // TODO (RSC): We need to better understand how this work and how it can be + // improved. + // Can we do this more similar to how it's done for streaming? + await rscBuildCopyCssAssets(serverBuildOutput) // Mappings from server to client asset file names + // Used by the RSC worker await rscBuildClientEntriesMappings( clientBuildOutput, serverBuildOutput, - clientEntryFiles, - webDistServerEntries + clientEntryFiles ) // Make RW specific env vars, like RWJS_ENV, available to server components - await rscBuildRwEnvVars(webDistServerEntries) + await rscBuildRwEnvVars() } diff --git a/packages/vite/src/client.ts b/packages/vite/src/client.ts index c91b26ac6e9a..8d98276040af 100644 --- a/packages/vite/src/client.ts +++ b/packages/vite/src/client.ts @@ -22,6 +22,12 @@ const BASE_PATH = '/rw-rsc/' export function renderFromRscServer(rscId: string) { console.log('serve rscId', rscId) + // Temporarily skip rendering this component during SSR + // I don't know what we actually should do during SSR yet + if (typeof window === 'undefined') { + return null + } + type SetRerender = ( rerender: (next: [ReactElement, string]) => void ) => () => void diff --git a/packages/vite/src/fully-react/ProdRwRscServerGlobal.ts b/packages/vite/src/fully-react/ProdRwRscServerGlobal.ts index 8260bd6f869b..326284e0b6e1 100644 --- a/packages/vite/src/fully-react/ProdRwRscServerGlobal.ts +++ b/packages/vite/src/fully-react/ProdRwRscServerGlobal.ts @@ -21,7 +21,7 @@ export class ProdRwRscServerGlobal extends RwRscServerGlobal { const rwPaths = getPaths() this.serverManifest = readJSON( - join(rwPaths.web.distServer, 'server-build-manifest.json') + join(rwPaths.web.distRsc, 'server-build-manifest.json') ) } diff --git a/packages/vite/src/index.ts b/packages/vite/src/index.ts index b827958d1bf0..ee60be8ee102 100644 --- a/packages/vite/src/index.ts +++ b/packages/vite/src/index.ts @@ -2,14 +2,13 @@ import fs from 'fs' import path from 'path' import react from '@vitejs/plugin-react' -import type { InputOption } from 'rollup' -import type { ConfigEnv, UserConfig, PluginOption } from 'vite' +import type { PluginOption } from 'vite' import { normalizePath } from 'vite' import { getWebSideDefaultBabelConfig } from '@redwoodjs/babel-config' import { getConfig, getPaths } from '@redwoodjs/project-config' -import { getEnvVarDefinitions } from './envVarDefinitions' +import { getMergedConfig } from './lib/getMergedConfig' import handleJsAsJsx from './plugins/vite-plugin-jsx-loader' import removeFromBundle from './plugins/vite-plugin-remove-from-bundle' import swapApolloProvider from './plugins/vite-plugin-swap-apollo-provider' @@ -126,114 +125,9 @@ export default function redwoodPluginVite(): PluginOption[] { }, // ---------- End Bundle injection ---------- - config: (options: UserConfig, env: ConfigEnv): UserConfig => { - let apiHost = process.env.REDWOOD_API_HOST - apiHost ??= rwConfig.api.host - apiHost ??= process.env.NODE_ENV === 'production' ? '0.0.0.0' : '[::]' - - let apiPort - if (process.env.REDWOOD_API_PORT) { - apiPort = parseInt(process.env.REDWOOD_API_PORT) - } else { - apiPort = rwConfig.api.port - } - - return { - root: rwPaths.web.src, - // Disabling for now, let babel handle this for consistency - // resolve: { - // alias: [ - // { - // find: 'src', - // replacement: redwoodPaths.web.src, - // }, - // ], - // }, - envPrefix: 'REDWOOD_ENV_', - publicDir: path.join(rwPaths.web.base, 'public'), - define: getEnvVarDefinitions(), - css: { - // @NOTE config path is relative to where vite.config.js is if you use relative path - // postcss: './config/', - postcss: rwPaths.web.config, - }, - server: { - open: rwConfig.browser.open, - port: rwConfig.web.port, - host: true, // Listen to all hosts - proxy: { - [rwConfig.web.apiUrl]: { - target: `http://${apiHost}:${apiPort}`, - changeOrigin: false, - // Remove the `.redwood/functions` part, but leave the `/graphql` - rewrite: (path) => path.replace(rwConfig.web.apiUrl, ''), - configure: (proxy) => { - // @MARK: this is a hack to prevent showing confusing proxy errors on startup - // because Vite launches so much faster than the API server. - let waitingForApiServer = true - - // Wait for 2.5s, then restore regular proxy error logging - setTimeout(() => { - waitingForApiServer = false - }, 2500) - - proxy.on('error', (err, _req, res) => { - if ( - waitingForApiServer && - err.message.includes('ECONNREFUSED') - ) { - err.stack = - '⌛ API Server launching, please refresh your page...' - } - const msg = { - errors: [ - { - message: - 'The RedwoodJS API server is not available or is currently reloading. Please refresh.', - }, - ], - } - - res.writeHead(203, { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-cache', - }) - res.write(JSON.stringify(msg)) - res.end() - }) - }, - }, - }, - }, - build: { - outDir: options.build?.outDir || rwPaths.web.dist, - emptyOutDir: true, - manifest: !env.ssrBuild ? 'client-build-manifest.json' : undefined, - sourcemap: !env.ssrBuild && rwConfig.web.sourceMap, // Note that this can be boolean or 'inline' - rollupOptions: { - input: getRollupInput(!!env.ssrBuild), - }, - }, - legacy: { - buildSsrCjsExternalHeuristics: rwConfig.experimental?.rsc?.enabled - ? false - : env.ssrBuild, - }, - optimizeDeps: { - esbuildOptions: { - // @MARK this is because JS projects in Redwood don't have .jsx extensions - loader: { - '.js': 'jsx', - }, - // Node.js global to browser globalThis - // @MARK unsure why we need this, but required for DevFatalErrorPage atleast - define: { - global: 'globalThis', - }, - }, - }, - } - }, + // @MARK: Using the config hook here let's us modify the config + // but returning plugins will **not** work + config: getMergedConfig(rwConfig, rwPaths), }, // We can remove when streaming is stable rwConfig.experimental.streamingSsr.enabled && swapApolloProvider(), @@ -254,36 +148,9 @@ export default function redwoodPluginVite(): PluginOption[] { babel: { ...getWebSideDefaultBabelConfig({ forVite: true, + forRscClient: rwConfig.experimental.rsc?.enabled, }), }, }), ] } - -/** - * This function configures how vite (actually Rollup) will bundle. - * - * By default, the entry point is the index.html file - even if you don't specify it in RollupOptions - * - * With streaming SSR, out entrypoint is different - either entry.client.tsx or entry.server.tsx - * and the html file is not used at all, because it is defined in Document.tsx - * - * @param ssr {boolean} Whether to return the SSR inputs or not - * @returns Rollup input Options - */ -function getRollupInput(ssr: boolean): InputOption | undefined { - const rwConfig = getConfig() - const rwPaths = getPaths() - - // @NOTE once streaming ssr is out of experimental, this will become the default - if (rwConfig.experimental.streamingSsr.enabled) { - return ssr - ? { - 'entry.server': rwPaths.web.entryServer as string, - Document: rwPaths.web.document, // We need the document for React's fallback - } - : (rwPaths.web.entryClient as string) - } - - return rwPaths.web.html -} diff --git a/packages/vite/src/envVarDefinitions.ts b/packages/vite/src/lib/envVarDefinitions.ts similarity index 100% rename from packages/vite/src/envVarDefinitions.ts rename to packages/vite/src/lib/envVarDefinitions.ts diff --git a/packages/vite/src/lib/getMergedConfig.ts b/packages/vite/src/lib/getMergedConfig.ts new file mode 100644 index 000000000000..2e5d91f7aa5d --- /dev/null +++ b/packages/vite/src/lib/getMergedConfig.ts @@ -0,0 +1,181 @@ +import path from 'node:path' + +import type { InputOption } from 'rollup' +import type { ConfigEnv, UserConfig } from 'vite' +import { mergeConfig } from 'vite' + +import type { Config, Paths } from '@redwoodjs/project-config' +import { getConfig, getPaths } from '@redwoodjs/project-config' + +import { getEnvVarDefinitions } from './envVarDefinitions' + +/** + * This function will merge in the default Redwood Vite config passed into the + * build function (or in Vite.config.xxx) + * + * Note that returning plugins in this function will have no effect on the + * build + */ +export function getMergedConfig(rwConfig: Config, rwPaths: Paths) { + return (userConfig: UserConfig, env: ConfigEnv): UserConfig => { + let apiHost = process.env.REDWOOD_API_HOST + apiHost ??= rwConfig.api.host + apiHost ??= process.env.NODE_ENV === 'production' ? '0.0.0.0' : '[::]' + + const streamingSsrEnabled = rwConfig.experimental.streamingSsr?.enabled + // @MARK: note that most RSC settings sit in their individual build functions + const rscEnabled = rwConfig.experimental.rsc?.enabled + + let apiPort + if (process.env.REDWOOD_API_PORT) { + apiPort = parseInt(process.env.REDWOOD_API_PORT) + } else { + apiPort = rwConfig.api.port + } + + const defaultRwViteConfig: UserConfig = { + root: rwPaths.web.src, + // @MARK: when we have these aliases, the warnings from the FE server go + // away BUT, if you have imports like this: + // ``` + // import RandomNumberServerCell from + // 'src/components/RandomNumberServerCell/RandomNumberServerCell' + // ``` + // they start failing (can't have the double + // `/RandomNumberServerCell/RandomNumberServerCell` at the end) + // + // resolve: { + // alias: [ + // { + // find: 'src', + // replacement: rwPaths.web.src, + // }, + // ], + // }, + envPrefix: 'REDWOOD_ENV_', + publicDir: path.join(rwPaths.web.base, 'public'), + define: getEnvVarDefinitions(), + css: { + // @NOTE config path is relative to where vite.config.js is if you use + // a relative path + postcss: rwPaths.web.config, + }, + server: { + open: rwConfig.browser.open, + port: rwConfig.web.port, + host: true, // Listen to all hosts + proxy: { + [rwConfig.web.apiUrl]: { + target: `http://${apiHost}:${apiPort}`, + changeOrigin: false, + // Remove the `.redwood/functions` part, but leave the `/graphql` + rewrite: (path) => path.replace(rwConfig.web.apiUrl, ''), + configure: (proxy) => { + // @MARK: this is a hack to prevent showing confusing proxy + // errors on startup because Vite launches so much faster than + // the API server. + let waitingForApiServer = true + + // Wait for 2.5s, then restore regular proxy error logging + setTimeout(() => { + waitingForApiServer = false + }, 2500) + + proxy.on('error', (err, _req, res) => { + if ( + waitingForApiServer && + err.message.includes('ECONNREFUSED') + ) { + err.stack = + '⌛ API Server launching, please refresh your page...' + } + const msg = { + errors: [ + { + message: + 'The RedwoodJS API server is not available or is ' + + 'currently reloading. Please refresh.', + }, + ], + } + + res.writeHead(203, { + 'Content-Type': 'application/json', + 'Cache-Control': 'no-cache', + }) + res.write(JSON.stringify(msg)) + res.end() + }) + }, + }, + }, + }, + build: { + // NOTE this gets overridden when build gets called anyway! + outDir: + // @MARK: For RSC and Streaming, we build to dist/client directory + streamingSsrEnabled || rscEnabled + ? rwPaths.web.distClient + : rwPaths.web.dist, + emptyOutDir: true, + manifest: !env.ssrBuild ? 'client-build-manifest.json' : undefined, + // Note that sourcemap can be boolean or 'inline' + sourcemap: !env.ssrBuild && rwConfig.web.sourceMap, + rollupOptions: { + input: getRollupInput(!!env.ssrBuild), + }, + }, + // @MARK: do not set buildSsrCjsExternalHeuristics here + // because rsc builds want false, client and server build wants true + optimizeDeps: { + esbuildOptions: { + // @MARK this is because JS projects in Redwood don't have .jsx + // extensions + loader: { + '.js': 'jsx', + }, + // Node.js global to browser globalThis + // @MARK unsure why we need this, but required for DevFatalErrorPage + // at least + define: { + global: 'globalThis', + }, + }, + }, + } + + return mergeConfig(defaultRwViteConfig, userConfig) + } +} + +/** + * This function configures how vite (actually Rollup) will bundle. + * + * By default, the entry point is the index.html file - even if you don't + * specify it in RollupOptions + * + * With streaming SSR, out entrypoint is different - either entry.client.tsx or + * entry.server.tsx and the html file is not used at all, because it is defined + * in Document.tsx + * + * @param ssr {boolean} Whether to return the SSR inputs or not + * @returns Rollup input Options + */ +function getRollupInput(ssr: boolean): InputOption | undefined { + const rwConfig = getConfig() + const rwPaths = getPaths() + + // @NOTE once streaming ssr is out of experimental, this will become the + // default + if (rwConfig.experimental.streamingSsr.enabled) { + return ssr + ? { + 'entry.server': rwPaths.web.entryServer as string, + // We need the document for React's fallback + Document: rwPaths.web.document, + } + : (rwPaths.web.entryClient as string) + } + + return rwPaths.web.html +} diff --git a/packages/vite/src/middleware/invokeMiddleware.test.ts b/packages/vite/src/middleware/invokeMiddleware.test.ts index 7547f5a14f60..c5befa070c50 100644 --- a/packages/vite/src/middleware/invokeMiddleware.test.ts +++ b/packages/vite/src/middleware/invokeMiddleware.test.ts @@ -1,4 +1,5 @@ -import { describe, expect, test } from 'vitest' +import type { MockInstance } from 'vitest' +import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest' import { defaultAuthProviderState } from '@redwoodjs/auth' @@ -32,18 +33,30 @@ describe('Invoke middleware', () => { }) }) - test('returns a MiddlewareResponse, even if middleware throws', async () => { - const throwingMiddleware = () => { - throw new Error('I want to break free') - } + describe('throwing middleware behavior', () => { + let consoleErrorSpy: MockInstance - const [mwRes, authState] = await invoke( - new Request('https://example.com'), - throwingMiddleware - ) + beforeAll(() => { + consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) + }) - expect(mwRes).toBeInstanceOf(MiddlewareResponse) - expect(authState).toEqual(defaultAuthProviderState) + afterAll(() => { + consoleErrorSpy.mockRestore() + }) + + test('returns a MiddlewareResponse, even if middleware throws', async () => { + const throwingMiddleware = () => { + throw new Error('I want to break free') + } + + const [mwRes, authState] = await invoke( + new Request('https://example.com'), + throwingMiddleware + ) + + expect(mwRes).toBeInstanceOf(MiddlewareResponse) + expect(authState).toEqual(defaultAuthProviderState) + }) }) test('returns a MiddlewareResponse, even if middleware returns a Response', async () => { diff --git a/packages/vite/src/react-server-dom-webpack/node-loader.ts b/packages/vite/src/react-server-dom-webpack/node-loader.ts index 726c12b8398a..131df7c8758b 100644 --- a/packages/vite/src/react-server-dom-webpack/node-loader.ts +++ b/packages/vite/src/react-server-dom-webpack/node-loader.ts @@ -394,7 +394,7 @@ async function transformClientModule( // throw an error if it's undefined const loadId = entryRecord - ? path.join(getPaths().web.distServer, 'assets', entryRecord[0] + '.js') + ? path.join(getPaths().web.distRsc, 'assets', entryRecord[0] + '.js') : url let newSrc = diff --git a/packages/vite/src/rsc/rscBuildAnalyze.ts b/packages/vite/src/rsc/rscBuildAnalyze.ts index d95d3a64f249..5f466f72568a 100644 --- a/packages/vite/src/rsc/rscBuildAnalyze.ts +++ b/packages/vite/src/rsc/rscBuildAnalyze.ts @@ -1,4 +1,3 @@ -import react from '@vitejs/plugin-react' import { build as viteBuild } from 'vite' import { getPaths } from '@redwoodjs/project-config' @@ -14,7 +13,7 @@ import { rscAnalyzePlugin } from './rscVitePlugins' * Starts building the AST in entries.ts * Doesn't output any files, only collects a list of RSCs and RSFs */ -export async function rscBuildAnalyze(viteConfigPath: string) { +export async function rscBuildAnalyze() { console.log('\n') console.log('1. rscBuildAnalyze') console.log('==================\n') @@ -27,24 +26,31 @@ export async function rscBuildAnalyze(viteConfigPath: string) { throw new Error('RSC entries file not found') } + if (!rwPaths.web.viteConfig) { + throw new Error('Vite config not found') + } + + // TODO (RSC): Can we skip actually building here? We only need to analyze + // the files, we don't use the generated built files for anything. Maybe we + // can integrate this with building for the client, where we actually need + // the build for something. await viteBuild({ - configFile: viteConfigPath, - root: rwPaths.base, + configFile: rwPaths.web.viteConfig, + root: rwPaths.web.src, + // @MARK: We don't care about the build output from this step. It's just + // for returning the entry names. Plus, the entire RSC build is chatty + // enough as it is. You can enable this temporarily if you need to for + // debugging, but we're keeping it silent by default. + logLevel: 'silent', plugins: [ - react(), - // { - // name: 'rsc-test-plugin', - // transform(_code, id) { - // console.log('rsc-test-plugin id', id) - // }, - // }, rscAnalyzePlugin( (id) => clientEntryFileSet.add(id), (id) => serverEntryFileSet.add(id) ), ], ssr: { - // We can ignore everything that starts with `node:` because it's not going to be RSCs + // We can ignore everything that starts with `node:` because it's not + // going to be RSCs noExternal: /^(?!node:)/, // TODO (RSC): Figure out what the `external` list should be. Right // now it's just copied from waku @@ -60,6 +66,13 @@ export async function rscBuildAnalyze(viteConfigPath: string) { rollupOptions: { onwarn: onWarn, input: { + // TODO (RSC): In the future we want to generate the entries file + // automatically. Maybe by using `analyzeRoutes()` + // For the dev server we might need to generate these entries on the + // fly - so we will need something like a plugin or virtual module + // to generate these entries, rather than write to actual file. + // And so, we might as well use on-the-fly generation for regular + // builds too entries: rwPaths.web.entries, }, }, diff --git a/packages/vite/src/rsc/rscBuildClient.ts b/packages/vite/src/rsc/rscBuildClient.ts index 24c0734f9f94..230a25c64bab 100644 --- a/packages/vite/src/rsc/rscBuildClient.ts +++ b/packages/vite/src/rsc/rscBuildClient.ts @@ -1,59 +1,47 @@ -import path from 'node:path' - -import react from '@vitejs/plugin-react' import { build as viteBuild } from 'vite' -import { getWebSideDefaultBabelConfig } from '@redwoodjs/babel-config' import { getPaths } from '@redwoodjs/project-config' -import { getEnvVarDefinitions } from '../envVarDefinitions' import { onWarn } from '../lib/onWarn' - -import { rscIndexPlugin } from './rscVitePlugins' +import { ensureProcessDirWeb } from '../utils' /** * RSC build. Step 2. * buildFeServer -> buildRscFeServer -> rscBuildClient * Generate the client bundle */ -export async function rscBuildClient( - webHtml: string, - webDist: string, - clientEntryFiles: Record -) { +export async function rscBuildClient(clientEntryFiles: Record) { console.log('\n') console.log('2. rscBuildClient') console.log('=================\n') const rwPaths = getPaths() + // Safe-guard for the future, if someone tries to include this function in + // code that gets executed by running `vite build` or some other bin from the + // cli + // Running the web build in the wrong working directory can lead to + // unintended consequences on CSS processing + ensureProcessDirWeb() + + if (!rwPaths.web.entryClient) { + throw new Error('Missing web/src/entry.client') + } + const clientBuildOutput = await viteBuild({ - // configFile: viteConfigPath, - root: rwPaths.web.src, - envPrefix: 'REDWOOD_ENV_', - publicDir: path.join(rwPaths.web.base, 'public'), envFile: false, - define: getEnvVarDefinitions(), - plugins: [ - react({ - babel: { - ...getWebSideDefaultBabelConfig({ - forVite: true, - forRscClient: true, - }), - }, - }), - rscIndexPlugin(), - ], build: { - outDir: webDist, + outDir: rwPaths.web.distClient, emptyOutDir: true, // Needed because `outDir` is not inside `root` - // TODO (RSC) Enable this when we switch to a server-first approach - // emptyOutDir: false, // Already done when building server rollupOptions: { onwarn: onWarn, input: { - main: webHtml, + // @MARK: temporary hack to find the entry client so we can get the + // index.css bundle but we don't actually want this on an rsc page! + 'rwjs-client-entry': rwPaths.web.entryClient, + // we need this, so that the output contains rsc-specific bundles + // for the client-only components. They get loaded once the page is + // rendered ...clientEntryFiles, }, preserveEntrySignatures: 'exports-only', diff --git a/packages/vite/src/rsc/rscBuildClientEntriesFile.ts b/packages/vite/src/rsc/rscBuildClientEntriesFile.ts index 3a2797fa2014..ec911017c300 100644 --- a/packages/vite/src/rsc/rscBuildClientEntriesFile.ts +++ b/packages/vite/src/rsc/rscBuildClientEntriesFile.ts @@ -1,26 +1,34 @@ import fs from 'fs/promises' +import { getPaths } from '@redwoodjs/project-config' + import type { rscBuildClient } from './rscBuildClient' -import type { rscBuildServer } from './rscBuildServer' +import type { rscBuildForServer } from './rscBuildForServer' /** * RSC build. Step 5. * Append a mapping of server asset names to client asset names to the - * `web/dist/server/entries.js` file. + * `web/dist/rsc/entries.js` file. + * Only used by the RSC worker. */ +// TODO(RSC_DC): This function should eventually be removed. +// The dev server will need this implemented as a Vite plugin, +// so worth waiting till implementation to swap out and just include the plugin for the prod build export function rscBuildClientEntriesMappings( clientBuildOutput: Awaited>, - serverBuildOutput: Awaited>, - clientEntryFiles: Record, - webDistServerEntries: string + serverBuildOutput: Awaited>, + clientEntryFiles: Record ) { console.log('\n') console.log('5. rscBuildClientEntriesMapping') console.log('===============================\n') + const rwPaths = getPaths() + const clientEntries: Record = {} for (const item of clientBuildOutput) { const { name, fileName } = item + const entryFile = name && // TODO (RSC) Can't we just compare the names? `item.name === name` @@ -33,10 +41,10 @@ export function rscBuildClientEntriesMappings( if (entryFile) { console.log('entryFile', entryFile) if (process.platform === 'win32') { - const entryFileSlash = entryFile.replaceAll('\\', '/') - console.log('entryFileSlash', entryFileSlash) // Prevent errors on Windows like // Error: No client entry found for D:/a/redwood/rsc-project/web/dist/server/assets/rsc0.js + const entryFileSlash = entryFile.replaceAll('\\', '/') + console.log('entryFileSlash', entryFileSlash) clientEntries[entryFileSlash] = fileName } else { clientEntries[entryFile] = fileName @@ -47,7 +55,7 @@ export function rscBuildClientEntriesMappings( console.log('clientEntries', clientEntries) return fs.appendFile( - webDistServerEntries, + rwPaths.web.distRscEntries, `export const clientEntries=${JSON.stringify(clientEntries)};` ) } diff --git a/packages/vite/src/rsc/rscBuildCopyCssAssets.ts b/packages/vite/src/rsc/rscBuildCopyCssAssets.ts index 893369a1f8f0..2e8c645a9199 100644 --- a/packages/vite/src/rsc/rscBuildCopyCssAssets.ts +++ b/packages/vite/src/rsc/rscBuildCopyCssAssets.ts @@ -1,21 +1,23 @@ import fs from 'fs/promises' import path from 'path' -import type { rscBuildServer } from './rscBuildServer' +import { getPaths } from '@redwoodjs/project-config' + +import type { rscBuildForServer } from './rscBuildForServer' /** * RSC build. Step 4. * Copy CSS assets from server to client */ export function rscBuildCopyCssAssets( - serverBuildOutput: Awaited>, - webDist: string, - webDistServer: string + serverBuildOutput: Awaited> ) { console.log('\n') console.log('4. rscBuildCopyCssAssets') console.log('========================\n') + const rwPaths = getPaths() + // TODO (RSC) Some css is now duplicated in two files (i.e. for client // components). Probably don't want that. // Also not sure if this works on "soft" rerenders (i.e. not a full page @@ -27,8 +29,8 @@ export function rscBuildCopyCssAssets( }) .map((cssAsset) => { return fs.copyFile( - path.join(webDistServer, cssAsset.fileName), - path.join(webDist, cssAsset.fileName) + path.join(rwPaths.web.distRsc, cssAsset.fileName), + path.join(rwPaths.web.distClient, cssAsset.fileName) ) }) ) diff --git a/packages/vite/src/rsc/rscBuildServer.ts b/packages/vite/src/rsc/rscBuildForServer.ts similarity index 76% rename from packages/vite/src/rsc/rscBuildServer.ts rename to packages/vite/src/rsc/rscBuildForServer.ts index 28da442e08fe..2f2f13ea44a9 100644 --- a/packages/vite/src/rsc/rscBuildServer.ts +++ b/packages/vite/src/rsc/rscBuildForServer.ts @@ -1,55 +1,47 @@ import path from 'node:path' -import react from '@vitejs/plugin-react' import { build as viteBuild } from 'vite' -import { getWebSideDefaultBabelConfig } from '@redwoodjs/babel-config' -import { getConfig, getPaths } from '@redwoodjs/project-config' +import { getPaths } from '@redwoodjs/project-config' -import { getEnvVarDefinitions } from '../envVarDefinitions' import { onWarn } from '../lib/onWarn' import { rscTransformPlugin } from './rscVitePlugins' /** * RSC build. Step 3. - * buildFeServer -> buildRscFeServer -> rscBuildClient - * Generate the client bundle + * buildFeServer -> buildRscFeServer -> rscBuildForServer + * Generate the output to be used by the rsc worker (not the actual server!) */ -export async function rscBuildServer( - entriesFile: string, +export async function rscBuildForServer( clientEntryFiles: Record, serverEntryFiles: Record, customModules: Record ) { console.log('\n') - console.log('3. rscBuildServer') - console.log('=================\n') + console.log('3. rscBuildForServer') + console.log('====================\n') + + const rwPaths = getPaths() + + if (!rwPaths.web.entries) { + throw new Error('RSC entries file not found') + } const input = { - entries: entriesFile, + entries: rwPaths.web.entries, ...clientEntryFiles, ...serverEntryFiles, ...customModules, } - console.log('input', input) - - const rwPaths = getPaths() - const rwConfig = getConfig() - - console.log( - 'rscBuildServer.ts RWJS_EXP_RSC', - rwConfig.experimental?.rsc?.enabled - ) - - const serverBuildOutput = await viteBuild({ - // ...configFileConfig, - root: rwPaths.web.src, - envPrefix: 'REDWOOD_ENV_', - publicDir: path.join(rwPaths.web.base, 'public'), + // TODO (RSC): No redwood-vite plugin, add it in here + const rscServerBuildOutput = await viteBuild({ envFile: false, - define: getEnvVarDefinitions(), + legacy: { + // @MARK: for the worker, we're building ESM! (not CJS) + buildSsrCjsExternalHeuristics: false, + }, ssr: { // Externalize everything except packages with files that have // 'use client' in them (which are the files in `clientEntryFiles`) @@ -90,13 +82,6 @@ export async function rscBuildServer( }, }, plugins: [ - react({ - babel: { - ...getWebSideDefaultBabelConfig({ - forVite: true, - }), - }, - }), // The rscTransformPlugin maps paths like // /Users/tobbe/.../rw-app/node_modules/@tobbe.dev/rsc-test/dist/rsc-test.es.js // to @@ -108,10 +93,8 @@ export async function rscBuildServer( build: { ssr: true, ssrEmitAssets: true, - // TODO (RSC) Change output dir to just dist. We should be "server - // first". Client components are the "special case" and should be output - // to dist/client - outDir: rwPaths.web.distServer, + outDir: rwPaths.web.distRsc, + emptyOutDir: true, // Needed because `outDir` is not inside `root` manifest: 'server-build-manifest.json', rollupOptions: { onwarn: onWarn, @@ -155,9 +138,9 @@ export async function rscBuildServer( }, }) - if (!('output' in serverBuildOutput)) { - throw new Error('Unexpected vite server build output') + if (!('output' in rscServerBuildOutput)) { + throw new Error('Unexpected rsc server build output') } - return serverBuildOutput.output + return rscServerBuildOutput.output } diff --git a/packages/vite/src/rsc/rscBuildRwEnvVars.ts b/packages/vite/src/rsc/rscBuildRwEnvVars.ts index 4c3fe1d4ef2f..838ae8ec646d 100644 --- a/packages/vite/src/rsc/rscBuildRwEnvVars.ts +++ b/packages/vite/src/rsc/rscBuildRwEnvVars.ts @@ -1,5 +1,7 @@ import fs from 'fs/promises' +import { getPaths } from '@redwoodjs/project-config' + /** * RSC build. Step 6. * Make RW specific env vars available to server components. @@ -8,13 +10,15 @@ import fs from 'fs/promises' * The import of entries.js that we're adding this to is handled by the * RSC worker we've got set up */ -export async function rscBuildRwEnvVars(webDistServerEntries: string) { +export async function rscBuildRwEnvVars() { console.log('\n') console.log('6. rscBuildRwEnvVars') console.log('====================\n') + const rwPaths = getPaths() + await fs.appendFile( - webDistServerEntries, + rwPaths.web.distRscEntries, ` globalThis.RWJS_API_GRAPHQL_URL = RWJS_ENV.RWJS_API_GRAPHQL_URL @@ -25,6 +29,9 @@ globalThis.RWJS_EXP_RSC = RWJS_ENV.RWJS_EXP_RSC ` ) + // TODO (RSC): See if we can inject the code above into the server bundle + // while building, instead of having to do it as a manual step after + // TODO (RSC): See if we can just import that config.ts file from // @redwoodjs/web/dist/config here // Or find some other way to not duplicate the definitions diff --git a/packages/vite/src/rsc/rscVitePlugins.ts b/packages/vite/src/rsc/rscVitePlugins.ts index 916a32446571..a9e4323938f2 100644 --- a/packages/vite/src/rsc/rscVitePlugins.ts +++ b/packages/vite/src/rsc/rscVitePlugins.ts @@ -6,39 +6,12 @@ import type { Plugin } from 'vite' import * as RSDWNodeLoader from '../react-server-dom-webpack/node-loader' import type { ResolveFunction } from '../react-server-dom-webpack/node-loader' -// Used in Step 2 of the build process, for the client bundle -export function rscIndexPlugin(): Plugin { - const codeToInject = ` - globalThis.__rw_module_cache__ = new Map(); - - globalThis.__webpack_chunk_load__ = (id) => { - return import(id).then((m) => globalThis.__rw_module_cache__.set(id, m)) - }; - - globalThis.__webpack_require__ = (id) => { - return globalThis.__rw_module_cache__.get(id) - };\n ` - - return { - name: 'rsc-index-plugin', - async transformIndexHtml() { - return [ - { - tag: 'script', - children: codeToInject, - injectTo: 'body', - }, - ] - }, - } -} - export function rscTransformPlugin( clientEntryFiles: Record ): Plugin { return { name: 'rsc-transform-plugin', - // TODO(RSC): Seems like resolveId() is never called. Can we remove it? + // TODO (RSC): Seems like resolveId() is never called. Can we remove it? async resolveId(id, importer, options) { console.log( 'rscVitePlugins - rscTransformPlugin::resolveId()', @@ -129,10 +102,16 @@ export function rscReloadPlugin(fn: (type: 'full-reload') => void): Plugin { const isClientEntry = (id: string, code: string) => { const ext = path.extname(id) if (['.ts', '.tsx', '.js', '.jsx'].includes(ext)) { + // @MARK: We're using swc here, because that's what the code that I + // copy/pasted used. It works, but it's another dependency, and a + // slightly different syntax to get used to compared to babel or other + // AST parsing libraries we use. So maybe, in the future, we change this + // to something else that we use in other places in this package. const mod = swc.parseSync(code, { syntax: ext === '.ts' || ext === '.tsx' ? 'typescript' : 'ecmascript', tsx: ext === '.tsx', }) + for (const item of mod.body) { if ( item.type === 'ExpressionStatement' && @@ -143,6 +122,7 @@ export function rscReloadPlugin(fn: (type: 'full-reload') => void): Plugin { } } } + return false } diff --git a/packages/vite/src/rsc/rscWebpackShims.ts b/packages/vite/src/rsc/rscWebpackShims.ts new file mode 100644 index 000000000000..a62cd0958f72 --- /dev/null +++ b/packages/vite/src/rsc/rscWebpackShims.ts @@ -0,0 +1,9 @@ +export const rscWebpackShims = `globalThis.__rw_module_cache__ = new Map(); + +globalThis.__webpack_chunk_load__ = (id) => { + return import(id).then((m) => globalThis.__rw_module_cache__.set(id, m)) +}; + +globalThis.__webpack_require__ = (id) => { + return globalThis.__rw_module_cache__.get(id) +};\n` diff --git a/packages/vite/src/rsc/rscWorker.ts b/packages/vite/src/rsc/rscWorker.ts index 906f4801128c..8edb07a52a6b 100644 --- a/packages/vite/src/rsc/rscWorker.ts +++ b/packages/vite/src/rsc/rscWorker.ts @@ -28,6 +28,9 @@ import type { MessageReq, } from './rscWorkerCommunication' +// TODO (RSC): We should look into importing renderToReadableStream from +// 'react-server-dom-webpack/server.browser' so that we can respond with web +// streams const { renderToPipeableStream } = RSDWServer type Entries = { default: ReturnType } @@ -144,6 +147,8 @@ const shutdown = async () => { const loadServerFile = async (fname: string) => { const vite = await vitePromise + // TODO (RSC): In prod we shouldn't need this. We should be able to just + // import the built files return vite.ssrLoadModule(fname) } @@ -172,7 +177,7 @@ type ConfigType = Omit & { root: string } const configPromise: Promise = resolveConfig({}, 'serve') const getFunctionComponent = async (rscId: string) => { - const entriesFile = getPaths().web.distServerEntries + const entriesFile = getPaths().web.distRscEntries const { default: { getEntry }, } = await (loadServerFile(entriesFile) as Promise) @@ -217,8 +222,11 @@ async function setClientEntries( absoluteClientEntries = value return } + + // This is the Vite config const config = await configPromise - const entriesFile = getPaths().web.distServerEntries + + const entriesFile = getPaths().web.distRscEntries console.log('setClientEntries :: entriesFile', entriesFile) const { clientEntries } = await loadServerFile(entriesFile) console.log('setClientEntries :: clientEntries', clientEntries) @@ -226,6 +234,8 @@ async function setClientEntries( throw new Error('Failed to load clientEntries') } const baseDir = path.dirname(entriesFile) + + // Convert to absolute paths absoluteClientEntries = Object.fromEntries( Object.entries(clientEntries).map(([key, val]) => { let fullKey = path.join(baseDir, key) @@ -269,6 +279,10 @@ async function renderRsc(input: RenderInput): Promise { : rwPaths.base console.log('config.root', config.root) console.log('rwPaths.base', rwPaths.base) + + // TODO (RSC): Try removing the proxy here and see if it's really necessary. + // Looks like it'd work to just have a regular object with a getter. + // Remove the proxy and see what breaks. const bundlerConfig = new Proxy( {}, { diff --git a/packages/vite/src/rsc/rscWorkerCommunication.ts b/packages/vite/src/rsc/rscWorkerCommunication.ts index 1405a8661d2c..f743521cdc49 100644 --- a/packages/vite/src/rsc/rscWorkerCommunication.ts +++ b/packages/vite/src/rsc/rscWorkerCommunication.ts @@ -86,9 +86,11 @@ export function shutdown() { let nextId = 1 +/** Set the client entries in the worker (for the server build) */ export function setClientEntries( value: 'load' | Record ): Promise { + // Just making this function async instead of callback based return new Promise((resolve, reject) => { const id = nextId++ diff --git a/packages/vite/src/runFeServer.ts b/packages/vite/src/runFeServer.ts index 1475f5e65e80..37b305e0c199 100644 --- a/packages/vite/src/runFeServer.ts +++ b/packages/vite/src/runFeServer.ts @@ -49,16 +49,15 @@ export async function runFeServer() { const app = express() const rwPaths = getPaths() const rwConfig = getConfig() + const rscEnabled = rwConfig.experimental?.rsc?.enabled registerFwGlobals() - try { - // This will fail if we're not running in RSC mode (i.e. for Streaming SSR) - // TODO (RSC) Remove the try/catch, or at least the if-statement in there - // once RSC is always enabled - await setClientEntries('load') - } catch (e) { - if (rwConfig.experimental?.rsc?.enabled) { + if (rscEnabled) { + try { + // This will fail if we're not running in RSC mode (i.e. for Streaming SSR) + await setClientEntries('load') + } catch (e) { console.error('Failed to load client entries') console.error(e) process.exit(1) @@ -70,22 +69,28 @@ export async function runFeServer() { await import(routeManifestUrl, { with: { type: 'json' } }) ).default - const buildManifestUrl = url.pathToFileURL( - path.join(rwPaths.web.dist, 'client-build-manifest.json') + const clientBuildManifestUrl = url.pathToFileURL( + path.join(rwPaths.web.distClient, 'client-build-manifest.json') ).href - const buildManifest: ViteBuildManifest = ( - await import(buildManifestUrl, { with: { type: 'json' } }) + const clientBuildManifest: ViteBuildManifest = ( + await import(clientBuildManifestUrl, { with: { type: 'json' } }) ).default if (rwConfig.experimental?.rsc?.enabled) { console.log('='.repeat(80)) - console.log('buildManifest', buildManifest) + console.log('buildManifest', clientBuildManifest) console.log('='.repeat(80)) } - const indexEntry = Object.values(buildManifest).find((manifestItem) => { - return manifestItem.isEntry - }) + // @MARK: Surely there's a better way than this! + const clientEntry = Object.values(clientBuildManifest).find( + (manifestItem) => { + // For RSC builds, we pass in many Vite entries, so we need to find it differently. + return rscEnabled + ? manifestItem.file.includes('rwjs-client-entry-') + : manifestItem.isEntry + } + ) const handleWithMiddleware = (route?: RWRouteManifestItem) => { return createServerAdapter(async (req: Request) => { @@ -99,15 +104,15 @@ export async function runFeServer() { }) } - if (!indexEntry) { - throw new Error('Could not find index.html in build manifest') + if (!clientEntry) { + throw new Error('Could not find client entry in build manifest') } // 1. Use static handler for assets // For CF workers, we'd need an equivalent of this app.use( '/assets', - express.static(rwPaths.web.dist + '/assets', { index: false }) + express.static(rwPaths.web.distClient + '/assets', { index: false }) ) // 2. Proxy the api server @@ -129,8 +134,8 @@ export async function runFeServer() { }) ) - const getStylesheetLinks = () => indexEntry.css || [] - const clientEntry = '/' + indexEntry.file + const getStylesheetLinks = () => clientEntry.css || [] + const clientEntryPath = '/' + clientEntry.file for (const route of Object.values(routeManifest)) { // if it is a 404, register it at the end somehow. @@ -144,36 +149,22 @@ export async function runFeServer() { ? route.matchRegexString : route.pathDefinition - if (!getConfig().experimental?.rsc?.enabled) { - const routeHandler = await createReactStreamingHandler({ - route, - clientEntryPath: clientEntry, - getStylesheetLinks, - }) - - // Wrap with whatg/server adapter. Express handler -> Fetch API handler - app.get(expressPathDef, createServerAdapter(routeHandler)) - } else { - console.log('expressPathDef', expressPathDef) - - // This is for RSC only. And only for now, until we have SSR working we - // with RSC. This maps /, /about, etc to index.html - app.get(expressPathDef, (req, res, next) => { - // Serve index.html for all routes, to let client side routing take - // over - req.url = '/' - // Without this, we get a flash of a url with a trailing slash. Still - // works, but doesn't look nice - // For example, if we navigate to /about we'll see a flash of /about/ - // before returning to /about - req.originalUrl = '/' - - return express.static(rwPaths.web.dist)(req, res, next) - }) - } + // TODO(RSC_DC): RSC is rendering blank page, try using this function for initial render + const routeHandler = await createReactStreamingHandler({ + route, + clientEntryPath, + getStylesheetLinks, + }) + + console.log('Attaching streaming handler for route', route.pathDefinition) + + // Wrap with whatg/server adapter. Express handler -> Fetch API handler + app.get(expressPathDef, createServerAdapter(routeHandler)) // add express routes to capture extension requests and give them to middleware // ie. /about.json, /about.png, etc + // Note this happens _after_ the actual route handlers. So if you have a route /file/:fileNameWithExtension + // it will still be handled by the route handler, not the middleware app.get( createExtensionRouteDef(route.matchRegexString), handleWithMiddleware(route) @@ -186,17 +177,7 @@ export async function runFeServer() { // @MARK: put this after rw-rsc! app.post('*', handleWithMiddleware()) - // Serve static assets that aren't covered by any of the above routes or middleware - // Note: That the order here is important and that we are explicitly preventing access - // to the server dist folder - // TODO: In the future, we should explicitly serve `web/dist/client` and `web/dist/rsc` - // and simply not serve the `web/dist/server` folder - app.use(`/${path.basename(rwPaths.web.distServer)}/*`, (_req, res, _next) => { - return res - .status(403) - .end('403 Forbidden: Access to server dist is forbidden') - }) - app.use(express.static(rwPaths.web.dist, { index: false })) + app.use(express.static(rwPaths.web.distClient, { index: false })) app.listen(rwConfig.web.port) console.log( diff --git a/packages/vite/src/streaming/buildForStreamingServer.ts b/packages/vite/src/streaming/buildForStreamingServer.ts new file mode 100644 index 000000000000..310ed7b5a639 --- /dev/null +++ b/packages/vite/src/streaming/buildForStreamingServer.ts @@ -0,0 +1,33 @@ +import { build as viteBuild } from 'vite' + +import { getPaths } from '@redwoodjs/project-config' + +export async function buildForStreamingServer({ + verbose = false, +}: { + verbose?: boolean +}) { + console.log('Starting streaming server build...\n') + const rwPaths = getPaths() + + if (!rwPaths.web.viteConfig) { + throw new Error('Vite config not found') + } + + await viteBuild({ + configFile: rwPaths.web.viteConfig, + build: { + outDir: rwPaths.web.distServer, + ssr: true, + emptyOutDir: true, + }, + legacy: { + // @MARK The Streaming SSR build produces CJS output. RSC is ESM + // TODO: Remove this config once we can build ESM output for streaming + // too + buildSsrCjsExternalHeuristics: true, + }, + envFile: false, + logLevel: verbose ? 'info' : 'warn', + }) +} diff --git a/packages/vite/src/streaming/createReactStreamingHandler.ts b/packages/vite/src/streaming/createReactStreamingHandler.ts index 449492f043c7..f1019b1c16ac 100644 --- a/packages/vite/src/streaming/createReactStreamingHandler.ts +++ b/packages/vite/src/streaming/createReactStreamingHandler.ts @@ -6,7 +6,7 @@ import type { ViteDevServer } from 'vite' import { defaultAuthProviderState } from '@redwoodjs/auth' import type { RWRouteManifestItem } from '@redwoodjs/internal' -import { getAppRouteHook, getConfig, getPaths } from '@redwoodjs/project-config' +import { getAppRouteHook, getPaths } from '@redwoodjs/project-config' import { matchPath } from '@redwoodjs/router' import type { TagDescriptor } from '@redwoodjs/web' @@ -41,24 +41,10 @@ export const createReactStreamingHandler = async ( let fallbackDocumentImport: any if (isProd) { - // TODO (RSC) Consolidate paths, so we can have the same code for SSR and RSC - if (getConfig().experimental?.rsc?.enabled) { - entryServerImport = await import( - makeFilePath( - path.join(rwPaths.web.distServer, 'assets', 'entry.server.js') - ) - ) - fallbackDocumentImport = await import( - makeFilePath(path.join(rwPaths.web.distServer, 'assets', 'Document.js')) - ) - } else { - entryServerImport = await import( - makeFilePath(rwPaths.web.distEntryServer) - ) - fallbackDocumentImport = await import( - makeFilePath(rwPaths.web.distDocumentServer) - ) - } + entryServerImport = await import(makeFilePath(rwPaths.web.distEntryServer)) + fallbackDocumentImport = await import( + makeFilePath(rwPaths.web.distDocumentServer) + ) } // @NOTE: we are returning a FetchAPI handler @@ -129,6 +115,9 @@ export const createReactStreamingHandler = async ( metaTags = routeHookOutput.meta + // @MARK @TODO(RSC_DC): the entry path for RSC will be different, + // because we don't want to inject a full bundle, just a slice of it + // I'm not sure what though.... const jsBundles = [ clientEntryPath, // @NOTE: must have slash in front bundle && '/' + bundle, diff --git a/packages/vite/src/streaming/streamHelpers.ts b/packages/vite/src/streaming/streamHelpers.ts index e0a52ff1f25c..1b5941ef8af7 100644 --- a/packages/vite/src/streaming/streamHelpers.ts +++ b/packages/vite/src/streaming/streamHelpers.ts @@ -18,6 +18,7 @@ import { } from '@redwoodjs/web/dist/components/ServerInject' import type { MiddlewareResponse } from '../middleware/MiddlewareResponse' +import { rscWebpackShims } from '../rsc/rscWebpackShims' import { createBufferedTransformStream } from './transforms/bufferedTransform' import { createTimeoutTransform } from './transforms/cancelTimeoutTransform' @@ -123,7 +124,7 @@ export async function reactRenderToStreamResponse( bootstrapScriptContent: // Only insert assetMap if clientside JS will be loaded jsBundles.length > 0 - ? `window.__REDWOOD__ASSET_MAP = ${assetMap}` + ? `window.__REDWOOD__ASSET_MAP = ${assetMap}; ${rscWebpackShims}` : undefined, bootstrapModules: jsBundles, } diff --git a/packages/web/package.json b/packages/web/package.json index c8fa50fe33aa..50bce402a0c1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -37,8 +37,8 @@ "test:watch": "yarn test --watch" }, "dependencies": { - "@apollo/client": "3.8.10", - "@babel/runtime-corejs3": "7.23.9", + "@apollo/client": "3.9.5", + "@babel/runtime-corejs3": "7.24.0", "@redwoodjs/auth": "7.0.0", "core-js": "3.35.1", "graphql": "16.8.1", diff --git a/tasks/all-contributors/README.md b/tasks/all-contributors/README.md index d16b8f188eb7..b072f426aaf4 100644 --- a/tasks/all-contributors/README.md +++ b/tasks/all-contributors/README.md @@ -82,7 +82,6 @@ Don't forget to commit and PR changes. ## Roadmap - [ ] Create a script to handle Step 1 (check and add new contributors for each repo) -- [ ] Add the script to the end of the `yarn release` script to update with releases ## Contributing Help with this project is welcome and needed! No specific experience required. You'll want to be familiar with: diff --git a/tasks/e2e/cypress/e2e/04-logger/codemods/Step1_1_Setup_Logger.js b/tasks/e2e/cypress/e2e/04-logger/codemods/Step1_1_Setup_Logger.js deleted file mode 100644 index d40f6245f6c4..000000000000 --- a/tasks/e2e/cypress/e2e/04-logger/codemods/Step1_1_Setup_Logger.js +++ /dev/null @@ -1,25 +0,0 @@ -export const setupLogger = (BASE_DIR, LOG_FILENAME) => { - return ` -import { createLogger, isTest } from '@redwoodjs/api/logger' - -/** - * Creates a logger with RedwoodLoggerOptions - * - * These extend and override default LoggerOptions, - * can define a destination like a file or other supported pino log transport stream, - * and sets whether or not to show the logger configuration settings (defaults to false) - * - * @param RedwoodLoggerOptions - * - * RedwoodLoggerOptions have - * @param {options} LoggerOptions - defines how to log, such as pretty printing, redaction, and format - * @param {string | DestinationStream} destination - defines where to log, such as a transport stream or file - * @param {boolean} showConfig - whether to display logger configuration on initialization - */ -export const logger = createLogger({ - // If want to override in test, can force logging levels - options: { level: 'trace' }, - destination: '${BASE_DIR}/${LOG_FILENAME}', -}) -` -} diff --git a/tasks/e2e/cypress/e2e/04-logger/codemods/Step1_2_Add_Logger_to_Posts.js b/tasks/e2e/cypress/e2e/04-logger/codemods/Step1_2_Add_Logger_to_Posts.js deleted file mode 100644 index 59c0c4759823..000000000000 --- a/tasks/e2e/cypress/e2e/04-logger/codemods/Step1_2_Add_Logger_to_Posts.js +++ /dev/null @@ -1,48 +0,0 @@ -export default ` -import { db } from 'src/lib/db' -import { logger } from 'src/lib/logger' -import { requireAuth } from 'src/lib/auth' - -export const posts = () => { - logger.info('> in posts()') - - return db.post.findMany() -} - -export const post = ({ id }) => { - logger.info('> in post()') - logger.debug({ postId: id }, 'Fetching post by id') - - return db.post.findUnique({ - where: { id }, - }) -} - -export const createPost = ({ input }) => { - logger.info('> in createPost()') - logger.debug({ post: input }, 'Creating post with the input') - - return db.post.create({ - data: input, - }) -} - -export const updatePost = ({ id, input }) => { - logger.info('> in updatePost()') - logger.debug({ post: input }, 'Updating post with the input') - - return db.post.update({ - data: input, - where: { id }, - }) -} - -export const deletePost = ({ id }) => { - logger.info('> in deletePost()') - logger.debug({ postId: id }, 'Delete post by id') - - return db.post.delete({ - where: { id }, - }) -} -` diff --git a/tasks/e2e/cypress/e2e/04-logger/codemods/Step2_1_Setup_Prisma_Logger.js b/tasks/e2e/cypress/e2e/04-logger/codemods/Step2_1_Setup_Prisma_Logger.js deleted file mode 100644 index 830bb91a0292..000000000000 --- a/tasks/e2e/cypress/e2e/04-logger/codemods/Step2_1_Setup_Prisma_Logger.js +++ /dev/null @@ -1,26 +0,0 @@ -export const setupPrismaLogger = ({ slowQueryThreshold }) => { - return ` -// See https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/constructor -// for options. - -import { PrismaClient } from '@prisma/client' - -import { emitLogLevels, handlePrismaLogging } from '@redwoodjs/api/logger' - -import { logger } from './logger' - -/* - * Instance of the Prisma Client - */ -export const db = new PrismaClient({ - log: emitLogLevels(['info', 'warn', 'error', 'query']), -}) - -handlePrismaLogging({ - db, - logger, - logLevels: ['info', 'warn', 'error', 'query'], - slowQueryThreshold: ${slowQueryThreshold}, -}) -` -} diff --git a/tasks/e2e/cypress/e2e/04-logger/logger.cy.js b/tasks/e2e/cypress/e2e/04-logger/logger.cy.js deleted file mode 100644 index 82a40611fd81..000000000000 --- a/tasks/e2e/cypress/e2e/04-logger/logger.cy.js +++ /dev/null @@ -1,143 +0,0 @@ -/* eslint-disable no-undef, camelcase */ -/// -import path from 'path' - -import 'cypress-wait-until' - -import { waitForApiSide } from '../01-tutorial/sharedTests' - -import { setupLogger } from './codemods/Step1_1_Setup_Logger' -import Step1_2_Add_Logger from './codemods/Step1_2_Add_Logger_to_Posts' -import { setupPrismaLogger } from './codemods/Step2_1_Setup_Prisma_Logger' - -const BASE_DIR = Cypress.env('RW_PATH') -const LOG_FILENAME = 'e2e.log' - -import 'cypress-wait-until' - -describe('The Redwood Logger - Basic Scaffold CRUD Logging', () => { - const LOG_PATH = path.join(BASE_DIR, LOG_FILENAME) - - const WAIT_TIMEOUT = 10_000 - - it('1. Test Logging for CRUD', () => { - // Empty log file. - cy.writeFile(LOG_PATH, '') - - cy.writeFile( - path.join(BASE_DIR, 'api/src/lib/logger.js'), - setupLogger(BASE_DIR, LOG_FILENAME) - ) - cy.writeFile( - path.join(BASE_DIR, 'api/src/services/posts/posts.js'), - Step1_2_Add_Logger - ) - - waitForApiSide() - - cy.visit('http://localhost:8910/blog-post/3') - - cy.visit('http://localhost:8910/posts') - - cy.contains('Edit') - cy.contains('Loading...').should('not.exist') - - cy.waitUntil( - () => - cy.readFile(LOG_PATH).then((str) => { - console.log(str) - return str.includes('> in posts()') - }), - { interval: 2000, timeout: WAIT_TIMEOUT } - ) - - // CREATE / SAVE - cy.contains(' New Post').click() - cy.get('input#title').type('First post') - cy.get('input#body').type('Hello world!') - cy.get('button').contains('Save').click() - - cy.waitUntil(() => - cy.readFile(LOG_PATH).then((str) => { - console.log(str) - return str.includes('> in createPost()') - }) - ) - - // EDIT - cy.contains('Edit').click() - cy.get('input#body').clear().type('No, Margle the World!') - cy.get('button').contains('Save').click() - - cy.waitUntil(() => - cy.readFile(LOG_PATH).then((str) => { - console.log(str) - return str.includes('> in updatePost()') - }) - ) - - // DELETE - cy.contains('Delete').click() - cy.waitUntil(() => - cy.readFile(LOG_PATH).then((str) => { - console.log(str) - return str.includes('> in deletePost()') - }) - ) - }) - - it('2. Test logging for Prisma', () => { - // Without slow query logging. - // Reset log file. - cy.writeFile(LOG_PATH, '') - - cy.writeFile( - path.join(BASE_DIR, 'api/src/lib/db.js'), - setupPrismaLogger({ slowQueryThreshold: 9_999 }) - ) - - waitForApiSide() - - cy.visit('http://localhost:8910/posts') - - cy.contains('Edit') - cy.contains('Loading...').should('not.exist') - - cy.waitUntil( - () => - cy.readFile(LOG_PATH).then((str) => { - console.log(str) - return ( - str.includes('Query performed in ') && - !str.includes('Slow Query performed in ') - ) - }), - { interval: 2000, timeout: WAIT_TIMEOUT } - ) - - // With slow query logging. - // Reset log file. - cy.writeFile(LOG_PATH, '') - - cy.writeFile( - path.join(BASE_DIR, 'api/src/lib/db.js'), - setupPrismaLogger({ slowQueryThreshold: 0 }) - ) - - waitForApiSide() - - cy.visit('http://localhost:8910/posts') - - cy.contains('Edit') - cy.contains('Loading...').should('not.exist') - - cy.waitUntil( - () => - cy.readFile(LOG_PATH).then((str) => { - console.log(str) - return str.includes('Slow Query performed in ') - }), - { interval: 2000, timeout: WAIT_TIMEOUT } - ) - }) -}) diff --git a/tasks/release/.gitignore b/tasks/release/.gitignore deleted file mode 100644 index 4cc466696cac..000000000000 --- a/tasks/release/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Release notes -*_release_notes.md - -# Data files for QA. -*.symmetricDifference.json diff --git a/tasks/release/compare/compare.mjs b/tasks/release/compare/compare.mjs deleted file mode 100644 index 0b4620df64ba..000000000000 --- a/tasks/release/compare/compare.mjs +++ /dev/null @@ -1,151 +0,0 @@ -/* eslint-env node */ - -// Sometimes it's hard to tell where commits land. (The minor? The patch? The previous minor...?) -// This script gives you fine-grained information to work with to figure that out. -// -// Why's it hard to tell? Because... -// -// - sometimes you have to revert a commit; since most of the tooling here operates on git commit messages, -// the commit message will still be in git's history, even though the commit isn't in the release -// - when you release a patch, you cherry pick commits from the `next` branch into the release branch, -// but they'll be in the `next` branch's history (because it constitutes the next minor) - -import { parseArgs as _parseArgs } from 'node:util' - -import { within, $ } from 'zx' - -import { - consoleBoxen, - compareRange, - getLatestRelease, - getReleaseBranches, - prompts, - setVerbosity, - unwrap, -} from '../releaseLib.mjs' - -export async function main() { - let options - - try { - options = await parseArgs() - } catch (e) { - consoleBoxen('👷 Heads up', e.message) - process.exitCode = 1 - return - } - - const { verbose, range, colorSeed } = options - - setVerbosity(verbose) - - // The colors are randomly chosen, and sometimes they're not great. In those cases, use `--color-seed` to tweak things. - await compareRange(range, { colorSeed }) -} - -main() - -// ─── Helpers ───────────────────────────────────────────────────────────────── - -async function parseArgs() { - const { values } = _parseArgs({ - options: { - 'color-seed': { - type: 'string', - short: 'o', - default: '0', - }, - - verbose: { - type: 'boolean', - short: 'v', - default: false, - }, - }, - }) - - const colorSeed = parseInt(values['color-seed']) - - if (Number.isNaN(colorSeed)) { - throw new Error( - `\`--color-seed\` should be a number (you passed in \`${values['color-seed']}\`)` - ) - } - - const range = await getRange() - - // Spreading `values` here adds `color-seed`. - return { - range, - colorSeed, - verbose: values.verbose, - } -} - -async function getRange() { - const releaseBranches = await getReleaseBranches() - - let vMajorReleases = ['main', 'next', ...releaseBranches] - - // Get all the releases since the last major. - await within(async () => { - $.verbose = false - - const [vMajor] = (await getLatestRelease()).split('.') - - vMajorReleases = [ - ...vMajorReleases, - ...unwrap(await $`git tag -l ${vMajor}.?.?`) - .split('\n') - .reverse(), - ] - }) - - // Get rid of `v?.0.0`. - const choices = vMajorReleases.slice(0, -1).map((ref) => { - return { - title: ref, - value: ref, - } - }) - - let rangeFromRes = await prompts({ - type: 'select', - name: 'from', - message: 'Compare from?', - choices, - }) - - const range = { - from: rangeFromRes.from, - } - - const rangeToRes = await prompts({ - type: 'multiselect', - name: 'to', - message: 'Compare to?', - - // Get rid of `main` and what the user chose above. - // TODO: technically, we should get rid of any vMajorReleases that are "greater" than the user's choice. - choices: choices.slice(1).filter((choice) => choice.value !== range.from), - min: 1, - - // These are the default instructions with a space added to the end. - // With the defaults, if the user doesn't select an option, the error renders right next to the last line: - // - // ``` - // enter/return: Complete answerYou must select a minimum of 1 choices. - // ``` - instructions: [ - 'Instructions:', - ' ↑/↓: Highlight option', - ' ←/→/[space]: Toggle selection', - ' a: Toggle all', - ' enter/return: Complete answer ', - ].join('\n'), - }) - - range.to = rangeToRes.to - - return range -} diff --git a/tasks/release/compare/compareQA.mjs b/tasks/release/compare/compareQA.mjs deleted file mode 100644 index b12198b2a0e7..000000000000 --- a/tasks/release/compare/compareQA.mjs +++ /dev/null @@ -1,160 +0,0 @@ -/* eslint-env node */ -import { parseArgs as _parseArgs } from 'node:util' - -import { faker } from '@faker-js/faker' -import { chalk, fs, question, within, $ } from 'zx' - -import { - getLatestRelease, - getReleaseBranches, - prompts, - resolveLine, - unwrap, -} from '../releaseLib.mjs' - -async function main() { - const { lines, range } = await parseArgs() - - for (const line of lines) { - console.log(chalk.dim('='.repeat(process.stdout.columns))) - console.log(line) - console.log() - - await resolveLine(line, { - range, - refsToColorFunctions: range.to.reduce((refsToColorFunctions, ref) => { - refsToColorFunctions[ref] = chalk.bgHex(faker.color.rgb()) - return refsToColorFunctions - }, {}), - logger: console.log, - }) - - console.log() - await question('Press anything to continue > ') - } -} - -main() - -async function parseArgs() { - // Get the file path. - const dirents = await fs.readdir(new URL('.', import.meta.url), { - withFileTypes: true, - }) - - const filePathChoices = dirents - .filter( - (dirent) => - dirent.isFile() && dirent.name.endsWith('symmetricDifference.json') - ) - .map((dirent) => { - return { - title: dirent.name, - value: dirent.name, - } - }) - - const filePathPrompt = await prompts({ - name: 'filePath', - message: 'Choose a file', - type: 'select', - choices: filePathChoices, - }) - - // Get the lines. - let lines = await fs.readJSON( - new URL(filePathPrompt.filePath, import.meta.url) - ) - - const linesChoices = lines.map((line) => { - return { - title: line, - value: line, - } - }) - - const linesPrompt = await prompts({ - name: 'lines', - message: 'Which lines do you want to QA?', - type: 'autocompleteMultiselect', - choices: linesChoices, - async suggest(input, choices) { - return Promise.resolve( - choices.filter(({ title }) => title.includes(input)) - ) - }, - min: 1, - }) - - // Get the refs. - // TODO: a lot of the code here could be deduplicated. - let [from, to] = filePathPrompt.filePath - .replace('.symmetricDifference.json', '') - .split('_') - - from = from.replaceAll('-', '/') - to = to.replaceAll('-', '/') - - const releaseBranches = await getReleaseBranches() - - let vMajorReleases = ['main', 'next', ...releaseBranches] - - // Get all the releases since the last major. - await within(async () => { - $.verbose = false - - const [vMajor] = (await getLatestRelease()).split('.') - - vMajorReleases = [ - ...vMajorReleases, - ...unwrap(await $`git tag -l ${vMajor}.?.?`) - .split('\n') - .reverse(), - ] - }) - - // Get rid of `v?.0.0`. - const choices = vMajorReleases.slice(0, -1).map((ref) => { - return { - title: ref, - value: ref, - } - }) - - const refsPrompt = await prompts({ - type: 'multiselect', - name: 'to', - message: 'Compare to?', - - choices: choices.filter( - (choice) => choice.value !== from && choice.value !== to - ), - min: 1, - - // These are the default instructions with a space added to the end. - // With the defaults, if the user doesn't select an option, the error renders right next to the last line: - // - // ``` - // enter/return: Complete answerYou must select a minimum of 1 choices. - // ``` - instructions: [ - 'Instructions:', - ' ↑/↓: Highlight option', - ' ←/→/[space]: Toggle selection', - ' a: Toggle all', - ' enter/return: Complete answer ', - ].join('\n'), - }) - - // The logic for transforming `refs` into ascending order is here in this file - // beacuse we call `resolveLine` directly. - const refs = [to, ...refsPrompt.to].reverse() - - return { - lines: linesPrompt.lines, - range: { - from, - to: refs, - }, - } -} diff --git a/tasks/release/generateReleaseNotes.mjs b/tasks/release/generateReleaseNotes.mjs deleted file mode 100644 index 0ba4d3e0895e..000000000000 --- a/tasks/release/generateReleaseNotes.mjs +++ /dev/null @@ -1,196 +0,0 @@ -/* eslint-env node */ - -import { parseArgs as _parseArgs } from 'node:util' - -import { fs } from 'zx' - -import { - consoleBoxen, - getMilestones, - getPRsWithMilestone, - prompts, -} from './releaseLib.mjs' - -const coreDependenciesRegex = new RegExp( - [ - '@apollo/client', - 'babel', - 'fastify', - 'prisma', - 'react-hook-form', - 'storybook ', - 'vite', - 'webpack', - 'yarn', - ].join('|') -) - -export async function main() { - let options - - try { - options = await parseArgs() - } catch (e) { - consoleBoxen('👷 Heads up', e.message) - process.exitCode = 1 - return - } - - const { milestone } = options - - let prs = await getPRsWithMilestone(milestone) - - prs = prs - // Sort by when a PR was merged from least recently to most. - .sort( - (a, b) => new Date(a.mergedAt).getTime() - new Date(b.mergedAt).getTime() - ) - .map((pr) => { - // Get the PR's type from its release label. - const releaseLabel = pr.labels.nodes.find((label) => - label.name.startsWith('release:') - ) - - const releaseNotesEntry = [ - `- ${pr.title} #${pr.number} by @${pr.author.login}`, - '', - // Indent the body for proper markdown rendering. - pr.body - .split('\n') - .map((line) => ` ${line}`) - .join('\n'), - ] - .join('\n') - .trim() - - return { - ...pr, - type: releaseLabel.name.replace('release:', ''), - releaseNotesEntry, - } - }) - // Handle docs. - .map((pr) => { - if (pr.type !== 'docs') { - return pr - } - - return { - ...pr, - releaseNotesEntry: `- ${pr.title} #${pr.number} by @${pr.author.login}`, - } - }) - // Handle renovate. - .map((pr) => { - if (pr.author.login !== 'renovate') { - return pr - } - - return { - ...pr, - type: 'dependency', - releaseNotesEntry: `
  • ${pr.title} #${pr.number}
  • `, - } - }) - // Handle core dependencies. - .map((pr) => { - if (!coreDependenciesRegex.test(pr.title)) { - return pr - } - - return { - ...pr, - type: 'core-dependency', - releaseNotesEntry: `- ${pr.title} #${pr.number}`, - } - }) - - // Make an object of release types to PRs: - // - // ```js - // { - // feature: [{ ... }], - // docs: [{ ... }], - // chore: [{ ... }], - // } - // ``` - const releaseTypesToPRs = prs.reduce((releaseTypesToPRs, pr) => { - releaseTypesToPRs[pr.type] ??= [] - releaseTypesToPRs[pr.type].push(pr) - return releaseTypesToPRs - }, {}) - - // Write the release notes. - const releaseNotes = Object.entries(releaseTypesToPRs) - .flatMap(([type, prs]) => { - if (type === 'core-dependency') { - return [ - '## Core Dependencies', - '', - ...prs.map((pr) => pr.releaseNotesEntry), - '', - ] - } - - if (type === 'dependency') { - return [ - '## Dependencies', - '', - '
    ', - 'Click to see all upgraded dependencies', - '
      ', - ...prs.map((pr) => pr.releaseNotesEntry), - '
    ', - '
    ', - '', - ] - } - - return [ - `## ${type}`, - '', - ...prs.flatMap((pr) => [pr.releaseNotesEntry, '']), - ] - }) - .join('\n') - - const filePath = new URL(`./${milestone}_release_notes.md`, import.meta.url) - await fs.writeFile(filePath, releaseNotes) - console.log(`📝 Wrote ${milestone} release notes to ${filePath}`) -} - -main() - -// ─── Helpers ───────────────────────────────────────────────────────────────── - -async function parseArgs() { - const { positionals } = _parseArgs({ - allowPositionals: true, - }) - - let milestone - - if (positionals.length) { - milestone = positionals[0] - } else { - const milestones = await getMilestones() - - const milestoneRes = await prompts({ - name: 'milestone', - message: 'Select a milestone', - type: 'select', - choices: milestones.map((milestone) => { - return { - title: milestone.title, - value: milestone.title, - } - }), - }) - - milestone = milestoneRes.milestone - } - - return { - milestone, - } -} diff --git a/tasks/release/jest.config.js b/tasks/release/jest.config.js deleted file mode 100644 index 4359cf4c3d2c..000000000000 --- a/tasks/release/jest.config.js +++ /dev/null @@ -1,16 +0,0 @@ -// Don't forget to pass the `--experimental-vm-modules` flag: -// -// ``` -// yarn node --experimental-vm-modules $(yarn bin jest) -// ``` - -/** @type {import('jest').Config} */ -const config = { - rootDir: '.', - - // For ESM. - transform: {}, - testMatch: ['/tests/*.test.mjs'], -} - -module.exports = config diff --git a/tasks/release/release.mjs b/tasks/release/release.mjs deleted file mode 100644 index 626166607ed9..000000000000 --- a/tasks/release/release.mjs +++ /dev/null @@ -1,772 +0,0 @@ -/* eslint-env node */ - -import { fileURLToPath } from 'node:url' -import { parseArgs as _parseArgs } from 'node:util' - -import execa from 'execa' -import semverPackage from 'semver' -import { cd, chalk, fs, path, question, $ } from 'zx' - -import { - branchExists, - branchExistsOnRedwoodRemote, - consoleBoxen, - getOctokit, - getLatestRelease, - getMilestones, - getPRsWithMilestone, - getRedwoodRemote, - getSpinner, - isYes, - prompts, - unwrap, - setVerbosity, - findUp, -} from './releaseLib.mjs' - -let octokit -let semver -let latestRelease -let nextRelease -let milestone -let releaseBranch -let redwoodRemote - -const compareURL = 'https://github.com/redwoodjs/redwood/compare' - -export async function main() { - const options = parseArgs() - - const { verbose } = options - setVerbosity(verbose) - - try { - await doChecks() - } catch (e) { - consoleBoxen('👷 Heads up', e.message) - process.exitCode = 1 - return - } - - try { - // We'll be making requests to GitHub for PRs. While this data isn't private, we could get rate-limited without a token. - octokit = await getOctokit() - - const result = await getRedwoodRemote() - $.verbose && console.log() - - if (result.error) { - throw new Error(result.error) - } - - redwoodRemote = result.redwoodRemote - } catch (e) { - consoleBoxen('👷 Heads up', e.message) - process.exitCode = 1 - return - } - - const semverPromptRes = await prompts({ - name: 'semver', - message: 'Which semver do you want to release?', - type: 'select', - - choices: [{ value: 'major' }, { value: 'minor' }, { value: 'patch' }], - // `initial` is set to `patch` because that's the most common. - initial: 2, - }) - - semver = semverPromptRes.semver - - latestRelease = await getLatestRelease() - - exitIfNo( - await question( - `The latest release is ${chalk.magenta(latestRelease)}? [Y/n] > ` - ) - ) - - nextRelease = `v${semverPackage.inc(latestRelease, semver)}` - - exitIfNo( - await question( - `The next release is ${chalk.magenta(nextRelease)}? [Y/n] > ` - ) - ) - - // If the git tag for the desired semver already exists, this script was run before, but not to completion. - // The git tag is one of the last steps, so we need it to be deleted first. - const gitTagAlreadyExists = unwrap(await $`git tag -l ${nextRelease}`) - - if (gitTagAlreadyExists) { - consoleBoxen( - '🐙 The git tag already exists', - [ - `The git tag ${chalk.magenta( - nextRelease - )} already exists locally. You have to fix this before continuing.`, - "here's how you fix it...", - ].join('\n') - ) - - process.exitCode = 1 - return - } - - // We use milestones to keep track of where commits are supposed to land in a release. Let's double check that everything lines up. - await resolveMilestones() - console.log() - - console.log( - 'If you want to use `yarn release:notes` to generate release notes, now would be a good time to do so.' - ) - await question( - "Press any key to continue when you're done with the release notes > " - ) - - switch (semver) { - case 'major': - case 'minor': - await releaseMajorOrMinor() - break - case 'patch': - await releasePatch() - break - } -} - -main() - -// ─── Helpers ───────────────────────────────────────────────────────────────── - -async function doChecks() { - const nodeVersion = unwrap(await $`node -v`) - - if (!nodeVersion.startsWith('v20')) { - throw new Error( - [ - 'The framework is currently built for Node v20; running QA with any ' + - 'other version may cause issues.', - 'Please switch to Node v20.', - ].join('\n') - ) - } -} - -function parseArgs() { - const { values } = _parseArgs({ - options: { - verbose: { - type: 'boolean', - short: 'v', - default: false, - }, - }, - }) - - return values -} - -// ─── Milestone Helpers ─────────────────────────────────────────────────────── - -async function resolveMilestones() { - // Handle PRs that have been merged without a milestone. We have a check in CI for this, so it really shouldn't happen. - // But if it does, we handle it here. - const { - search: { nodes: mergedPRsNoMilestone }, - } = await octokit.graphql(` - { - search( - query: "repo:redwoodjs/redwood is:pr is:merged no:milestone" - first: 5 - type: ISSUE - ) { - nodes { - ... on PullRequest { - id - } - } - } - } - `) - - if (mergedPRsNoMilestone.length) { - console.log( - [ - '', - '🤔 It looks like there are some PRs that were merged without a milestone.', - 'Since we use milestones to indicate which release a PR is supposed to land in, this could be a problem. 😬', - '', - ].join('\n') - ) - - await question( - 'Press anything to open PRs that were merged without a milestone > ' - ) - await $`open https://github.com/redwoodjs/redwood/pulls?q=is%3Apr+is%3Amerged+no%3Amilestone` - await question( - 'Take some time to fix this, then press anything to continue > ' - ) - } - - // Depending on if we're releasing a patch or not, there's a few things we need to check. - const { - search: { nodes: prs }, - } = await octokit.graphql(` - { - search( - query: "repo:redwoodjs/redwood is:pr is:merged milestone:next-release-patch" - first: 51 - type: ISSUE - ) { - nodes { - ... on PullRequest { - id - } - } - } - } - `) - - if (semver === 'patch') { - const prettyPatch = chalk.magenta('next-release-patch') - const singularMsg = `There's 1 PR that has the ${prettyPatch} milestone.` - const pluralMsg = - prs.length <= 50 - ? `There are ${prs.length} PRs that have the ${prettyPatch} milestone.` - : `There are more than 50 PRs that have the ${prettyPatch} milestone.` - console.log() - console.log(prs.length === 1 ? singularMsg : pluralMsg) - - if ( - !isYes( - await question( - `Did you update the milestone of the PRs you plan to include in the patch to ${chalk.magenta( - 'next-release-patch' - )}? [Y/n] > ` - ) - ) - ) { - await question('Press anything to open a view of all the milestones > ') - await $`open https://github.com/redwoodjs/redwood/milestones` - await question( - `Take some time to fix this, then press anything to continue > ` - ) - } - } else { - if (prs.length) { - console.log() - console.log( - `If you're not releasing a patch, there probably shouldn't be any merged PRs with the ${chalk.magenta( - 'next-release-patch' - )} milestone.` - ) - - await question( - `Press anything to open merged PRs with the ${chalk.magenta( - 'next-release-patch' - )} milestone > ` - ) - await $`open https://github.com/redwoodjs/redwood/pulls?q=is%3Apr+is%3Amerged+milestone%3Anext-release-patch` - await question( - `Take some time to fix this, then press anything to continue > ` - ) - } - } - - // Now that all our ducks are in a row, we can change the milestone of the PRs we're releasing to the release milestone. - // If we're releasing a patch, the "from" milestone is `next-release-patch`. Otherwise, it's `next-release`. - const fromTitle = ['next-release', semver === 'patch' && 'patch'] - .filter(Boolean) - .join('-') - - const fromTitlePRs = await getPRsWithMilestone(fromTitle) - - if (fromTitlePRs.length) { - if ( - isYes( - await question( - `Ok to update ${ - fromTitlePRs.length - } PRs' milestone from ${chalk.magenta(fromTitle)} to ${chalk.magenta( - nextRelease - )}? [Y/n] > ` - ) - ) - ) { - const milestones = await getMilestones() - milestone = milestones.find(({ title }) => title === nextRelease) - - if (!milestone) { - milestone = await createMilestone(nextRelease) - } - - console.log() - - await Promise.all( - fromTitlePRs.map((milestonePR) => { - process.stdout.write( - `Updating #${milestonePR.number} ${milestonePR.title}\n` - ) - return updatePRMilestone(milestonePR.id, milestone.id) - }) - ) - } - } -} - -/** - * @param {string} title - */ -async function createMilestone(title) { - // There's no GraphQL mutation for this. - const { - data: { node_id: id, number }, - } = await octokit.request('POST /repos/{owner}/{repo}/milestones', { - owner: 'redwoodjs', - repo: 'redwood', - title, - }) - - return { title, id, number } -} - -function updatePRMilestone(prId, milestoneId) { - return octokit.graphql( - ` - mutation UpdatePRMilestone($pullRequestId: ID!, $milestoneId: ID!) { - updatePullRequest( - input: { pullRequestId: $pullRequestId, milestoneId: $milestoneId } - ) { - clientMutationId - } - } - `, - { - pullRequestId: prId, - milestoneId, - } - ) -} - -// ─── Release Helpers ───────────────────────────────────────────────────────── - -async function releaseMajorOrMinor() { - releaseBranch = ['release', semver, nextRelease].join('/') - const releaseBranchExists = await branchExists(releaseBranch) - const checkoutFromBranch = semver === 'major' ? 'main' : 'next' - - if (releaseBranchExists) { - console.log( - `Checking out the existing ${chalk.magenta(releaseBranch)} release branch` - ) - await $`git checkout ${releaseBranch}` - } else { - exitIfNo( - await question( - `Ok to checkout a new release branch, ${chalk.magenta( - releaseBranch - )}, from the ${chalk.magenta(checkoutFromBranch)} branch? [Y/n] > ` - ) - ) - await $`git checkout -b ${releaseBranch} ${checkoutFromBranch}` - } - - $.verbose && console.log() - await versionDocs() - $.verbose && console.log() - await cleanInstallUpdate() - $.verbose && console.log() - await runQA() - $.verbose && console.log() - - exitIfNo( - await question(`Everything passed local QA. Ok to publish to NPM? [Y/n] > `) - ) - - // Temporarily remove `packages/create-redwood-app` from the workspaces field - // so that we can publish it separately later. - await removeCreateRedwoodAppFromWorkspaces() - console.log() - - // Publish. - try { - await execa.command('yarn lerna publish from-package', { stdio: 'inherit' }) - } catch { - exitIfNo( - await question( - 'Publishing failed. You can usually recover from this by running `yarn lerna publish from-package` again. Continue? [Y/n] > ' - ) - ) - } - console.log() - - // Undo the temporary commit and publish CRWA. - await $`git reset --hard HEAD~1` - await updateCreateRedwoodAppTemplates() - console.log() - try { - await execa.command('yarn lerna publish from-package', { stdio: 'inherit' }) - } catch { - exitIfNo( - await question( - 'Publishing failed. You can usually recover from this by running `yarn lerna publish from-package` again. Continue? [Y/n] > ' - ) - ) - } - console.log() - - // Clean up commits and push. This combines the update package versions commit and update CRWA commit into one. - await $`git reset --soft HEAD~2` - await $`git commit -m "${nextRelease}"` - await $`git tag -am ${nextRelease} "${nextRelease}"` - await $`git push -u ${redwoodRemote} ${releaseBranch} --follow-tags` - - console.log() - console.log(`🚀 Released ${chalk.green(nextRelease)}`) - console.log() - - if (milestone) { - await closeMilestone(milestone.number) - } - - console.log( - [ - 'Only a few more things to do:', - ' - publish the release notes', - ' - merge the release branch into next and push the merge commit', - ' - Delete the release branch locally and on GitHub (https://github.com/redwoodjs/redwood/branches)', - ' - post on Slack, Discord, and Buffer', - ].join('\n') - ) -} - -async function versionDocs() { - if ( - !isYes( - await question( - `Ok to version docs to ${chalk.magenta(nextRelease)}? [Y/n] > ` - ) - ) - ) { - return - } - - const nextDocsVersion = nextRelease.slice(1, -2) - - const spinner = getSpinner('Versioning docs') - await cd('./docs') - - if (fs.existsSync(`./versioned_docs/version-${nextDocsVersion}`)) { - await $`rm -rf ./versioned_docs/version-${nextDocsVersion}` - - const versions = await fs.readJSON('./versions.json') - await fs.writeJSON('./versions.json', versions.slice(1)) - } - - await $`yarn` - await $`yarn clear` - await $`yarn docusaurus docs:version ${nextDocsVersion}` - await $`git add .` - await $`git commit -m "Version docs to ${nextDocsVersion}"` - await cd('../') - spinner.stop() -} - -async function cleanInstallUpdate() { - exitIfNo( - await question( - `Ok to clean, install, and update package versions? [Y/n] > ` - ) - ) - - const spinner = getSpinner('Cleaning') - await $`git clean -fxd` - - spinner.text = 'Installing' - await $`yarn install` - - spinner.text = 'Updating package versions' - - const lernaVersion = nextRelease.replace('v', '') - await $`yarn lerna version ${lernaVersion} --force-publish --no-push --no-git-tag-version --exact --yes` - - const cwd = path.dirname(findUp('lerna.json')) - - spinner.text = 'Updating CRWA templates...' - - const tsTemplatePath = path.join( - cwd, - 'packages/create-redwood-app/templates/ts' - ) - updateRWJSPkgsVersion(tsTemplatePath, lernaVersion) - updateRWJSPkgsVersion(path.join(tsTemplatePath, 'api'), lernaVersion) - updateRWJSPkgsVersion(path.join(tsTemplatePath, 'web'), lernaVersion) - $.verbose && console.log() - - const jsTemplatePath = path.join( - cwd, - 'packages/create-redwood-app/templates/js' - ) - updateRWJSPkgsVersion(jsTemplatePath, lernaVersion) - updateRWJSPkgsVersion(path.join(jsTemplatePath, 'api'), lernaVersion) - updateRWJSPkgsVersion(path.join(jsTemplatePath, 'web'), lernaVersion) - $.verbose && console.log() - - spinner.text = 'Updating test-project fixture...' - - const fixturePath = path.join(cwd, '__fixtures__/test-project') - updateRWJSPkgsVersion(fixturePath, lernaVersion) - updateRWJSPkgsVersion(path.join(fixturePath, 'api'), lernaVersion) - updateRWJSPkgsVersion(path.join(fixturePath, 'web'), lernaVersion) - $.verbose && console.log() - - spinner.text = 'Installing' - await $`yarn install` - spinner.stop() - - $.verbose && console.log() - - await $`git commit -am "chore: update package versions to ${nextRelease}"` -} - -async function runQA() { - exitIfNo(await question(`Ok to run local QA? [Y/n] > `)) - - const spinner = getSpinner('Building') - await $`yarn build` - - spinner.text = 'Linting' - await $`yarn lint` - - spinner.text = 'Testing' - await $`yarn test` - spinner.stop() -} - -async function removeCreateRedwoodAppFromWorkspaces() { - const frameworkPackageConfigPath = fileURLToPath( - new URL('../../package.json', import.meta.url) - ) - - const frameworkPackageConfig = fs.readJSONSync(frameworkPackageConfigPath) - - const packagePaths = (await $`yarn workspaces list --json`).stdout - .trim() - .split('\n') - .map(JSON.parse) - .filter(({ name }) => name) - .map(({ location }) => location) - - frameworkPackageConfig.workspaces = packagePaths.filter( - (packagePath) => packagePath !== 'packages/create-redwood-app' - ) - - fs.writeJSONSync(frameworkPackageConfigPath, frameworkPackageConfig, { - spaces: 2, - }) - - await $`git commit -am "chore: temporary update to workspaces"` -} - -async function updateCreateRedwoodAppTemplates() { - if ( - !isYes( - await question('Ok to update create-redwood-app templates? [Y/n] > ') - ) - ) { - return - } - - const spinner = getSpinner('Updating create-redwood-app templates') - cd('./packages/create-redwood-app/templates/ts') - await $`rm -f yarn.lock` - await $`touch yarn.lock` - await $`yarn install` - - cd('../..') - await $`yarn ts-to-js` - await $`git add .` - await $`git commit -m "chore: update create-redwood-app templates"` - cd('../..') - spinner.stop() -} - -function closeMilestone(number) { - return octokit.request( - 'POST /repos/{owner}/{repo}/milestones/{milestone_number}', - { - owner: 'redwoodjs', - repo: 'redwood', - milestone_number: number, - state: 'closed', - due_on: new Date().toISOString(), - } - ) -} - -async function releasePatch() { - releaseBranch = ['release', 'patch', nextRelease].join('/') - const releaseBranchExists = await branchExists(releaseBranch) - - if (releaseBranchExists) { - console.log( - `Checking out the existing ${chalk.magenta(releaseBranch)} release branch` - ) - await $`git checkout ${releaseBranch}` - } else { - exitIfNo( - await question( - `Ok to checkout a new release branch, ${chalk.magenta( - releaseBranch - )}, from the ${chalk.magenta(latestRelease)} tag? [Y/n] > ` - ) - ) - await $`git checkout -b ${releaseBranch} ${latestRelease}` - } - - if (!(await branchExistsOnRedwoodRemote(releaseBranch, redwoodRemote))) { - await pushAndDiff() - - console.log( - [ - "Time to cherry pick PRs. Here's a few things to keep in mind:", - ' - cherry pick PRs in the same order they were merged', - ' - after cherry picking PRs that change dependencies, run `yarn && yarn check`', - ].join('\n') - ) - - exitIfNo(await question(`Done cherry picking? [Y/n] > `)) - await pushAndDiff() - - exitIfNo(await question(`Does the diff look ok? [Y/n] > `)) - console.log() - } - - await cleanInstallUpdate() - $.verbose && console.log() - await runQA() - $.verbose && console.log() - await versionDocs() - $.verbose && console.log() - - exitIfNo( - await question(`Everything passed local QA. Ok to publish to NPM? [Y/n] > `) - ) - - // Temporarily remove `packages/create-redwood-app` from the workspaces field - // so that we can publish it separately later. - await removeCreateRedwoodAppFromWorkspaces() - console.log() - - // Publish. - try { - await execa.command('yarn lerna publish from-package', { - stdio: 'inherit', - }) - } catch { - exitIfNo( - await question( - 'Publishing failed. You can usually recover from this by running `yarn lerna publish from-package` again. Continue? [Y/n] > ' - ) - ) - } - console.log() - - // Undo the temporary commit and publish CRWA. - await $`git reset --hard HEAD~1` - await updateCreateRedwoodAppTemplates() - console.log() - try { - await execa.command('yarn lerna publish from-package', { stdio: 'inherit' }) - } catch { - exitIfNo( - await question( - 'Publishing failed. You can usually recover from this by running `yarn lerna publish from-package` again. Continue? [Y/n] > ' - ) - ) - } - console.log() - - // Clean up commits and push. This combines the update package versions commit and update CRWA commit into one. - await $`git reset --soft HEAD~2` - await $`git commit -m "${nextRelease}"` - await $`git tag -am ${nextRelease} "${nextRelease}"` - await $`git push -u ${redwoodRemote} ${releaseBranch} --follow-tags` - - console.log() - console.log(`🚀 Released ${chalk.green(nextRelease)}`) - console.log() - - if (milestone) { - await closeMilestone(milestone.number) - } - - console.log( - [ - 'Only a few more things to do:', - ' - publish the release notes', - ' - merge the release branch into next and push the merge commit', - ' - `git switch next`', - ` - \`git merge ${releaseBranch}\``, - ` - \`git push ${redwoodRemote}\``, - ' - delete the release branch locally and on GitHub (https://github.com/redwoodjs/redwood/branches)', - ` - \`git branch -d ${releaseBranch}\``, - ` - \`git push ${redwoodRemote} --delete ${releaseBranch}\``, - ' - Update the Algolia search index', - ' - https://crawler.algolia.com', - ' - "Restart crawling" (top right)', - ' - post on Slack, Discord, and Buffer', - ].join('\n') - ) -} - -async function pushAndDiff() { - exitIfNo( - await question( - `Ok to push ${chalk.magenta( - releaseBranch - )} to GitHub and open the diff? [Y/n] > ` - ) - ) - - await $`git push -u ${redwoodRemote} ${releaseBranch}` - await $`open ${compareURL}/${latestRelease}...${releaseBranch}` -} - -async function exitIfNo(answer, { code } = { code: 1 }) { - if (isYes(answer)) { - return - } - - process.exit(code) -} - -/** - * Iterates over `@redwoodjs/*` dependencies in a package.json and updates their version. - * - * @param {string} pkgPath - * @param {string} version - */ -function updateRWJSPkgsVersion(pkgPath, version) { - const pkg = fs.readJSONSync(path.join(pkgPath, 'package.json'), 'utf-8') - - for (const dep of Object.keys(pkg.dependencies ?? {}).filter(isRWJSPkg)) { - console.log(` - ${dep}: ${pkg.dependencies[dep]} => ${version}`) - pkg.dependencies[dep] = `${version}` - } - - for (const dep of Object.keys(pkg.devDependencies ?? {}).filter(isRWJSPkg)) { - console.log(` - ${dep}: ${pkg.devDependencies[dep]} => ${version}`) - pkg.devDependencies[dep] = `${version}` - } - - for (const dep of Object.keys(pkg.peerDependencies ?? {}).filter(isRWJSPkg)) { - console.log(` - ${dep}: ${pkg.peerDependencies[dep]} => ${version}`) - pkg.peerDependencies[dep] = `${version}` - } - - fs.writeJSONSync(path.join(pkgPath, 'package.json'), pkg, { spaces: 2 }) -} - -const isRWJSPkg = (pkg) => pkg.startsWith('@redwoodjs/') diff --git a/tasks/release/releaseLib.mjs b/tasks/release/releaseLib.mjs deleted file mode 100644 index 2f3ef0fc7a46..000000000000 --- a/tasks/release/releaseLib.mjs +++ /dev/null @@ -1,1341 +0,0 @@ -/* eslint-env node */ - -import { fileURLToPath } from 'node:url' - -import { faker } from '@faker-js/faker' -import boxen from 'boxen' -import { Octokit } from 'octokit' -import ora from 'ora' -import _prompts from 'prompts' -import semver from 'semver' -import { cd, chalk, fs, path, question, $ } from 'zx' - -import 'dotenv/config' - -// ─── Constants ─────────────────────────────────────────────────────────────── - -const triageDataRepoPath = new URL(`../../../triage-data/`, import.meta.url) - -// ─── Types ─────────────────────────────────────────────────────────────────── - -/** - * @typedef {{ - * line: string, - * ref: string, - * type: 'commit' | 'ui' | 'release-chore' | 'tag' - * pretty: string, - * needsCherryPick?: boolean, - * }} Commit - * - * @typedef {Map} CommitTriageData - * - * @typedef {{ from: string, to: string }} Range - */ - -// ─── IO ────────────────────────────────────────────────────────────────────── - -// A string of dashes that spans the width of the user's terminal terminal. -export const separator = chalk.dim('-'.repeat(process.stdout.columns)) - -// Set the verbosity of all the functions in this file. -export function setVerbosity(verbose) { - $.verbose = verbose -} - -export function getLogger() { - return $.verbose ? console.log : () => {} -} - -/** - * - * @param {string} message - */ -export function getSpinner(message) { - return $.verbose - ? { - stop: () => {}, - } - : ora(message).start() -} - -/** - * Helper for getting the trimmed stdout from `zx`'s `ProcessOutput`: - * - * ```js - * unwrap(await $`git branch --list release/*`) - * ``` - * - * @param {import('zx').ProcessOutput} processOutput - */ -export function unwrap(processOutput) { - return processOutput.stdout.trim() -} - -/** - * @param {string} title - * @param {string} message - */ -export function consoleBoxen(title, message) { - console.log() - console.log( - boxen(message, { - title, - - backgroundColor: '#333', - borderStyle: 'round', - - float: 'left', - - margin: { top: 0, right: 0, bottom: 0, left: 0 }, - padding: { top: 0, right: 1, bottom: 0, left: 1 }, - }) - ) -} - -/** - * See if the user answered yes to `zx`'s `question`, which is just `readline`. - * - * ``` - * const okToRelease = isYes(await question('Ok to release?')) - * - * if (okToRelease) { - * // ... - * } - * ``` - * - * @param {string} res - */ -export function isYes(res) { - return ['', 'Y', 'y'].includes(res) -} - -/** - * Wrapper around `prompts` to exit on crtl c. - * - * @template Name - * @param {import('prompts').PromptObject} promptsObject - * @param {import('prompts').Options} promptsOptions - */ -export function prompts(promptsObject, promptsOptions) { - return _prompts(promptsObject, { - ...promptsOptions, - onCancel: () => process.exit(1), - }) -} - -// ─── Branch Statuses ───────────────────────────────────────────────────────── - -/** - * Basically runs `git pull upstream` or `git fetch upstream` on branches with - * safety checks and logging. - * - * @param {string[]} branches - */ -export async function resolveBranchStatuses(branches) { - const spinner = getSpinner( - `Resolving branch statuses for: ${branches - .map((branch) => chalk.magenta(branch)) - .join(', ')}` - ) - - const logger = getLogger() - - logger(separator) - logger( - `Resolving statuses for: ${branches - .map((branch) => chalk.magenta(branch)) - .join(', ')}` - ) - - let result - - // We need to run `git remote update ${redwoodRemote}` to `git fetch ${branch}`. - // Nine out of ten times, the redwood remote is `upstream`. But let's just be sure. - result = await getRedwoodRemote() - - if (result.error) { - return result - } - - logger(`Found Redwood remote ${chalk.magenta(result.redwoodRemote)}`) - - await $`git remote update ${result.redwoodRemote}` - - // Get an object of branches to their commit statuses. I.e., if they're ahead, behind, or diverged. - const branchesToCommits = await getBranchesToCommits(branches, { - redwoodRemote: result.redwoodRemote, - }) - - spinner.stop() - - result = await handleBranchesToCommits(branchesToCommits, { - redwoodRemote: result.redwoodRemote, - }) - - return result -} - -/** - * Find the remote that points to `redwoodjs/redwood.git`. - */ -export async function getRedwoodRemote() { - const result = { - redwoodRemote: undefined, - error: undefined, - } - - const gitRemotes = unwrap(await $`git remote -v`).split('\n') - - result.redwoodRemote = gitRemotes.reduce((redwoodRemote, remote) => { - if (redwoodRemote) { - return redwoodRemote - } - - const found = remote.match( - /(?\w+)\s+(git@|https:\/\/)github\.com(:|\/)redwoodjs\/redwood\.git/ - ) - - if (found?.groups.name) { - return found.groups.name - } - }, result.redwoodRemote) - - if (!result.redwoodRemote) { - result.error = - "Couldn't find a git remote that points to redwoodjs/redwood.git" - } - - return result -} - -/** - * Build an object like... - * - * ```js - * { - * main: { - * existsOnRedwoodRemote: true, - * upToDate: false, - * diverged: false, - * commitsExclusiveToLocalBranch: 0, - * commitsExclusiveToRemoteBranch: 4 - * }, - * next: ... - * } - * ``` - * - * @param {string[]} branches - */ -export async function getBranchesToCommits(branches, { redwoodRemote }) { - return branches.reduce(async (branchesToCommitsPromise, branch) => { - const branchesToCommits = await branchesToCommitsPromise - - if (!(await branchExistsOnRedwoodRemote(branch, redwoodRemote))) { - branchesToCommits[branch] = { existsOnRedwoodRemote: false } - } else { - const commitsExclusiveToLocalBranch = +unwrap( - await $`git rev-list ${redwoodRemote}/${branch}..${branch} --count` - ) - const commitsExclusiveToRemoteBranch = +unwrap( - await $`git rev-list ${branch}..${redwoodRemote}/${branch} --count` - ) - - branchesToCommits[branch] = { - existsOnRedwoodRemote: true, - upToDate: - commitsExclusiveToLocalBranch === 0 && - commitsExclusiveToRemoteBranch === 0, - diverged: - commitsExclusiveToLocalBranch > 0 && - commitsExclusiveToRemoteBranch > 0, - commitsExclusiveToLocalBranch, - commitsExclusiveToRemoteBranch, - } - } - - return branchesToCommits - }, Promise.resolve({})) -} - -/** - * @param {string} branch - */ -export async function branchExistsOnRedwoodRemote(branch, redwoodRemote) { - return !!unwrap(await $`git ls-remote --heads ${redwoodRemote} ${branch}`) -} - -/** - * Logs results. Returns an error if a branch diverged. Otherwise, prompts the user to update their local branches if they need to. - */ -export async function handleBranchesToCommits( - branchesToCommits, - { redwoodRemote } -) { - const result = { - error: undefined, - } - - const message = Object.entries(branchesToCommits).map(([branch, status]) => { - if (!status.existsOnRedwoodRemote) { - return `❓ ${chalk.magenta( - branch - )} doesn't exist on the Redwood remote (${redwoodRemote})` - } - - if (status.upToDate) { - return `✅ ${chalk.magenta(branch)} is up to date` - } - - return [ - `🧮 ${chalk.magenta(branch)} has...`, - ` 🏠 ${status.commitsExclusiveToLocalBranch} commit(s) locally that the remote branch doesn't`, - ` 📡 ${status.commitsExclusiveToRemoteBranch} commit(s) remotely that the local branch doesn't`, - ].join('\n') - }) - - consoleBoxen('🐙 Branch status(es)', message.join('\n')) - - const divergedGetter = ([, { diverged }]) => diverged - - const diverged = Object.entries(branchesToCommits).some(divergedGetter) - - if (diverged) { - const branches = Object.entries(branchesToCommits) - .filter(divergedGetter) - .map(([branch]) => chalk.magenta(branch)) - .join(', ') - - result.error = [ - `The following branch(es) have diverged—they have commits that are exclusive to both the local and remote: ${branches}.`, - "Trying to triage commits right now probably isn't going to be a good time.", - ].join('\n') - } else { - for (const [branch, status] of Object.entries(branchesToCommits)) { - const pullOrFetch = branch === 'main' ? 'pull' : 'fetch' - - if ( - status.commitsExclusiveToRemoteBranch && - isYes( - await question( - `Ok to \`git ${pullOrFetch}\` ${chalk.magenta(branch)}? [Y/n] ` - ) - ) - ) { - await $`git ${pullOrFetch} ${redwoodRemote} ${branch}:${branch}` - } - } - } - - return result -} - -// ─── Git ───────────────────────────────────────────────────────────────────── - -/** - * @param {string} range - */ -export async function triageRange(range) { - const spinner = getSpinner( - `Getting the symmetric difference between ${chalk.magenta( - range.from - )} and ${chalk.magenta(range.to)}` - ) - - // Sometimes one of the `range` branches is a release branch with slashes like `release/branch/v6.3.3`. - // Here we're just replacing the slashes with dashes so that it's a valid file name. - const fileNamePrefix = [ - range.from.replaceAll('/', '-'), - range.to.replaceAll('/', '-'), - ].join('_') - - // Commit triage data files (like `main_next.commitTriageData.json`) come in and out of existence, - // so we can't rely on them to know if the triage data repo was cloned. Instead we use `.git`. - if (!fs.existsSync(new URL('./.git', triageDataRepoPath))) { - spinner.stop() - throw new Error( - [ - "You're missing commit triage data.", - 'You need to clone the triage data repo (https://github.com/redwoodjs/triage-data)', - 'adjacent to the redwood one:', - '', - '```', - '.', - '├── redwood', - '└── triage-data', - '```', - ].join('\n') - ) - } - - // Set up the commit triage data. This reads a file like `./main_next.commitTriageData.json` into a map - // and sets up a hook on `process.exit` so that we don't have to remember to write it. - // - // The commit triage data is a map of commit hashes to triage data: - // - // ```js - // 'adddd23987b8a1003053280fafe772275e932217' => { - // message: 'chore(deps): update dependency lerna to v7.3.0 (#9186)', - // needsCherryPick: false - // } - // ``` - let commitTriageData - const commitTriageDataPath = new URL( - `./${fileNamePrefix}.commitTriageData.json`, - triageDataRepoPath - ) - - try { - commitTriageData = new Map( - Object.entries(fs.readJSONSync(commitTriageDataPath, 'utf-8')) - ) - } catch (e) { - if (e.code === 'ENOENT') { - commitTriageData = new Map() - } else { - throw e - } - } - - // In git, the "symmetric difference" (syntactically, three dots: `...`) is what's different between two branches. - // It's the commits one branch has that the other doesn't, and vice versa: - // - // ``` - // git log main...next - // ``` - // - // Here we're only interested in the commits `range.from` (e.g., `main`) has that `range.to` (e.g. `next`) doesn't - // because we're cherry picking from the former to the latter. - // - // `git log` by itself isn't quite enough, but there are a couple flags that get us closer to what we want: - // - // - `--left-only` shows us the commits unique to the ref on the left side of the three dots - // - `--cherry-pick` omits commits that are _exactly_ the same between the branches - // - // It's very likely that some of the commits that are unique to the left ref have already been cherry picked into the right one. - // The reason that the `--cherry-pick` flag doesn't omit them is that they were changed while cherry picking - // (think updating `yarn.lock`, etc.) so the diffs aren't one-to-one. The commit triage data and `git log --grep` get us the rest of the way there. - const lines = await getSymmetricDifference(range) - - // Save the result for QA. (See `./triage/triageQA.mjs`.) - await fs.writeJSON( - new URL( - `./triage/${fileNamePrefix}.symmetricDifference.json`, - import.meta.url - ), - lines, - { - spaces: 2, - } - ) - - spinner.text = 'Resolving the symmetric difference' - const commits = await resolveSymmetricDifference(lines, { - range, - }) - spinner.stop() - - const commitsToTriage = await resolveCommitsToTriage({ - commits, - commitTriageData, - range, - }) - - if (commitsToTriage.length) { - // Reversing here so that we triage commits from oldest newest. It's more natural to triage this way - // because otherwise you'll be missing context for the newer commits. - await triageCommits({ - commits: commitsToTriage.reverse(), - commitTriageData, - range, - }) - console.log() - } - - reportCommitStatuses({ commits, commitTriageData, range }) - - if (commitTriageData.size || prMilestoneCache.size) { - fs.writeJSONSync( - commitTriageDataPath, - Object.fromEntries(commitTriageData), - { - spaces: 2, - } - ) - fs.writeJSONSync( - prMilestoneCachePath, - Object.fromEntries(prMilestoneCache), - { - spaces: 2, - } - ) - - await cd(fileURLToPath(triageDataRepoPath)) - await $`git commit -am "triage ${new Date().toISOString()}"` - await $`git push` - } -} - -export const defaultGitLogOptions = [ - '--oneline', - '--no-abbrev-commit', - '--left-right', - '--graph', - '--left-only', - '--cherry-pick', - '--boundary', -] - -/** - * Get the symmetric difference between two refs. (Basically, what's different about them.) - * This is used to compare: - * - main to next - * - next to the release branch - * - * It doesn't really matter which ref is left and which is right. - * The commits in the left ref will be prefixed with "<", while the commits in the right ref will be prefixed with ">". - * - * For a quick reference on the `...` syntax, - * see https://stackoverflow.com/questions/462974/what-are-the-differences-between-double-dot-and-triple-dot-in-git-com. - * - * @param {string} leftRef - * @param {string} rightRef - */ -export async function getSymmetricDifference( - range, - { gitLogOptions = undefined } = {} -) { - return unwrap( - await $`git log ${gitLogOptions ?? defaultGitLogOptions} ${range.from}...${ - range.to - }` - ).split('\n') -} - -/** - * Resolves the return of `getSymmetricDifference`. `getSymmetricDifference` gets us the commits that are different between two refs, - * but some of those commits are... - * - * - decorative (some lines are just UI when `--graph` is passed) - * - virtually the same (only the `yarn.lock` has changed) - * - aren't meant to be cherry picked - * - etc. - * - * @param {string[]} lines - * @param {{ - * range: { from: string, to: string }, - * refsToColors?: Record string> - * }} options - * - * @return {Commit[]} - */ -export async function resolveSymmetricDifference( - lines, - { range, refsToColorFunctions = {} } -) { - const logger = getLogger() - - // We make a copy and reverse so that the refs are in ascending order (v6.3.0, v6.3.1, v6.3.2, etc) - // so that we can break out of a loop later on earlier than otherwise. - const refs = Array.isArray(range.to) ? [...range.to] : [range.to] - refs.reverse() - - // Set defaults. - for (const ref of refs) { - refsToColorFunctions[ref] ??= chalk.dim.bgBlue - } - - const commits = await Promise.all( - lines.map((line) => - resolveLine(line, { - range: { ...range, to: refs }, - refsToColorFunctions, - logger, - }) - ) - ) - - return commits -} - -export async function resolveLine( - line, - { range, refsToColorFunctions, logger } -) { - const logs = [] - - const commit = { - line, - type: 'commit', - ref: range.from, - pretty: line, - } - - // This functions modifies the commit object above. - await resolveCommitType(commit, { logs }) - - if (['ui', 'tag', 'release-chore'].includes(commit.type)) { - return commit - } - - // We check refs in order from least recent to most and break once we find one. - for (const ref of range.to) { - logs.push( - ['', `🔎 checking if commit is in ${chalk.magenta(ref)}`].join('\n') - ) - - const isInRef = unwrap( - await $`git log ${ref} --oneline --grep ${sanitizeMessage( - commit.message - )}` - ) - - if (isInRef) { - logs.push(`✅ commit is in ${chalk.magenta(ref)}`) - - commit.ref = ref - commit.pretty = refsToColorFunctions[ref](commit.pretty) - - break - } - - logs.push(`❌ commit isn't in ${chalk.magenta(ref)}`) - } - - logger( - [...logs, '', commit.pretty, JSON.stringify({ commit }, null, 2)].join('\n') - ) - - return commit -} - -async function resolveCommitType(commit, { logs }) { - logs.push(separator) - - if (isLineGitLogUI(commit.line)) { - commit.type = 'ui' - commit.pretty = chalk.dim(commit.line) - - logs.push('🎄 this line is just `git log` ui') - - return - } - - // Every commit has a hash so we're not bothering with optional chaining here. - commit.hash = commit.line.match(commitRegExps.hash).groups.hash - - // TODO: explain this. - commit.message = unwrap(await $`git log --format=%s -n 1 ${commit.hash}`) - - if (commitRegExps.annotatedTag.test(commit.message)) { - commit.type = 'tag' - commit.ref = commit.message - commit.pretty = chalk.dim(commit.line) - - logs.push('🔖 this commit is an annotated tag') - - return - } - - if (isCommitReleaseChore(commit.line)) { - commit.type = 'release-chore' - commit.pretty = chalk.dim(commit.line) - - logs.push('🧹 this commit is a release chore') - - return - } - - if (commit.message.startsWith('Revert')) { - commit.type = 'revert' - commit.pretty = chalk.underline(commit.line) - - logs.push('↩️ this commit reverts a previous commit') - - return - } - - // Not all commits are associated with a PR. - commit.pr = commit.message.match(commitRegExps.pr)?.groups.pr - - if (!commit.pr) { - return - } - - commit.url = `https://github.com/redwoodjs/redwood/pull/${commit.pr}` - - // If we can't get a commit that has a PR's milestone, it's a bug. - try { - commit.milestone = await getPRMilestoneFromURL(commit.url) - } catch (e) { - throw new Error( - [ - `Error: Couldn't get milestone for ${commit.line} using ${commit.url}`, - '', - e, - ].join('\n') - ) - } - - commit.line = `${commit.line} (${commit.milestone})` - commit.pretty = commit.line - - logs.push('🔖 this commit is a pr with a milestone') -} - -/** - * Find out if a line from `git log --graph` is just UI: - * - * ``` - * * 1b0b9a9 | chore: update dependencies - * |\ # This is just UI - * | * 3a4b5c6 (HEAD -> release/3.6, origin/release/3.6) chore: update dependencies - * ``` - * - * @param {string} line - */ -function isLineGitLogUI(line) { - // TODO: test this fn for sure. can't i cross check against the git docs? - const marks = ['o', ' /', '|\\', '| o', '|\\|', '|/'] - return marks.some((mark) => line.startsWith(mark)) -} - -const commitRegExps = { - hash: /\s(?\w{40})\s/, - pr: /\(#(?\d+)\)$/, - annotatedTag: /^v\d.\d.\d$/, -} - -/** - * See if a commit is a release chore via it's message. Note that these are different than PRs with the chore milestone. - * - * @param {string} line - */ -function isCommitReleaseChore(line) { - const choreMessages = [ - 'chore: update yarn.lock', - 'Version docs', - 'chore: update all contributors', - ] - - return ( - /Merge branch (?.*)/.test(line) || - choreMessages.some((message) => line.includes(message)) - ) -} - -/** - * Square brackets (`[` or `]`) in commit messages need to be escaped. - * - * @param {string} message - */ -function sanitizeMessage(message) { - return message.replace('[', '\\[').replace(']', '\\]') -} - -/** - * @param {{ - * commits: Commit[] - * commitTriageData: CommitTriageData, - * targetBranch: string, - * }} options - */ -export async function resolveCommitsToTriage({ - commits, - commitTriageData, - range, -}) { - const logs = [] - - const commitHashes = commits.map((commit) => commit.hash) - - // `commits` are commits from main (or another branch) that are candidates for cherry picking. - // If the hash of one of them isn't in the commit triage data, it was cherry picked cleanly, - // so we don't need to keep track of it anymore. - for (const [hash] of commitTriageData) { - if (!commitHashes.includes(hash)) { - logs.push( - `✨ ${chalk.cyan( - commitTriageData.get(hash).message - )} was cherry picked cleanly` - ) - commitTriageData.delete(hash) - } - } - - // Delete those that needed to be cherry picked and have been. These ones weren't clean cherry picks. - const needsCherryPick = new Map( - [...commitTriageData.entries()].filter( - ([_hash, triageData]) => triageData.needsCherryPick - ) - ) - - for (const [hash, triageData] of needsCherryPick) { - const { ref } = commits.find((commit) => commit.hash === hash) - - if (ref === range.to) { - logs.push( - `🐙 ${chalk.cyan(triageData.message)} was cherry picked with changes` - ) - commitTriageData.delete(hash) - } - } - - if (logs.length) { - consoleBoxen( - '🧹 Purging commit triage data', - [`Removed ${logs.length} commits:`, ...logs].join('\n') - ) - } else { - consoleBoxen('✅', 'The commit triage data is up to date') - } - - // Get the commits that need triage. The logic for the filters is: - // - // - not every annotated commit is a commit; some are just `git log --graph` ui, so filter those out - // - at this point, annotated commits that have a `ref` that's the same as the target branch have already been cherry picked - // - now that the commit triage data is up to date, any annotated commits that aren't in it haven't been triaged - return commits - .filter((commit) => commit.type === 'commit') - .filter((commit) => commit.ref !== range.to) - .filter((commit) => !commitTriageData.has(commit.hash)) -} - -/** - * Given an array of commit objects, ask if they need to be cherry picked and update the commit triage data in response. - * - * @param {{ - * commitsToTriage: AnnotatedCommit[], - * commitTriageData: CommitTriageData, - * range: Range, - * }} options - */ -export async function triageCommits({ commits, commitTriageData, range }) { - consoleBoxen( - `🐙 New commit(s)`, - [ - [ - `There is/are ${chalk.magenta(commits.length)} commit(s)`, - `in the ${chalk.magenta(range.from)} branch`, - `that isn't/aren't in the ${chalk.magenta(range.to)} branch:`, - ].join(' '), - ...commits.map(({ hash, message }) => `• ${chalk.dim(hash)} ${message}`), - ].join('\n') - ) - - for (const commit of commits) { - // eslint-disable-next-line no-constant-condition - while (true) { - const message = [ - 'Does...', - [ - ' •', - chalk.dim(commit.hash), - chalk.cyan(commit.message), - commit.milestone && chalk.yellow(`(${commit.milestone})`), - ] - .filter(Boolean) - .join(' '), - `need to be cherry picked into ${chalk.magenta( - range.to - )}? [Y/n/s(kip)/o(pen)] > `, - ] - .filter(Boolean) - .join('\n') - - let answer = 'no' - if (!['RSC', 'v7.0.0'].includes(commit.milestone)) { - answer = await question(message) - } - - answer = getLongAnswer(answer) - - let comment = '' - if (answer === 'skip') { - const commentRes = await prompts({ - type: 'text', - name: 'comment', - message: 'Why are you skipping it?', - - validate: (comment) => comment.length > 0 || 'Please enter a comment', - }) - - comment = commentRes.comment - } - - if (answer === 'open') { - if (commit.url) { - await $`open ${commit.url}` - } else { - console.log("There's no PR for this commit") - } - - continue - } - - commitTriageData.set(commit.hash, { - message: commit.message, - needsCherryPick: answer, - ...(comment && { comment }), - }) - - break - } - } -} - -/** - * - * @param {string} answer - * @returns {'yes'|'no'|'skip'|'open'} - */ -function getLongAnswer(answer) { - answer = answer.toLowerCase() - - if (['', 'y', 'yes'].includes(answer)) { - return 'yes' - } - - if (['n', 'no'].includes(answer)) { - return 'no' - } - - if (['s', 'skip'].includes(answer)) { - return 'skip' - } - - if (['o', 'open'].includes(answer)) { - return 'open' - } -} - -export let prMilestoneCache -const prMilestoneCachePath = new URL( - './prMilestoneCache.json', - triageDataRepoPath -) - -/** - * @param {string} prURL - */ -export async function getPRMilestoneFromURL(prURL) { - if (!prMilestoneCache) { - try { - prMilestoneCache = new Map( - Object.entries(fs.readJSONSync(prMilestoneCachePath, 'utf-8')) - ) - } catch (e) { - if (e.code === 'ENOENT') { - prMilestoneCache = new Map() - } else { - throw e - } - } - } - - if (prMilestoneCache.has(prURL)) { - return prMilestoneCache.get(prURL) - } - - const octokit = await getOctokit() - - const { - resource: { - milestone: { title }, - }, - } = await octokit.graphql(getPRMilestoneFromURLQuery, { prURL }) - - prMilestoneCache.set(prURL, title) - - return title -} - -const getPRMilestoneFromURLQuery = ` - query GetMilestoneForCommitQuery($prURL: URI!) { - resource(url: $prURL) { - ...on PullRequest { - milestone { - title - } - } - } - } -` - -/** - * @param {{ - * commit: Commit[], - * commitTriageData: CommitTriageData - * range: { from: string, to: string }, - * }} param0 - */ -export function reportCommitStatuses({ commits, commitTriageData, range }) { - // We still have to color commits based on their cherry pick status. - // First, get the ones to color: - const commitsToColor = commits - .filter((commit) => commit.type === 'commit') - .filter((commit) => commit.ref !== range.to) - - // If everything was called in order, this shouldn't happen. - const needsTriage = commitsToColor.filter( - (commit) => !commitTriageData.has(commit.hash) - ) - - if (needsTriage.length) { - consoleBoxen( - '👷 Heads up', - [ - "At this point, there shouldn't been any commits that haven't been triaged", - "but it looks like there's a few:", - '', - ...needsTriage.map((commit) => chalk.bgYellowBright(commit.line)), - ].join('\n') - ) - } - - for (const commit of commitsToColor) { - const { needsCherryPick, comment } = commitTriageData.get(commit.hash) - - if (needsCherryPick === 'yes') { - commit.pretty = chalk.green(commit.line) - } else if (needsCherryPick === 'no') { - commit.pretty = chalk.red(commit.line) - } else { - commit.pretty = [chalk.yellow(commit.line), ` ${comment}`].join('\n') - } - - commit.needsCherryPick = needsCherryPick - } - - consoleBoxen( - '🔑 Key', - [ - `${chalk.green('■')} Needs to be cherry picked into ${chalk.magenta( - range.to - )}`, - `${chalk.yellow('■')} Skipped (see comments for details)`, - $.verbose && - `${chalk.blue('■')} Was cherry picked into ${chalk.magenta( - range.to - )} with changes`, - $.verbose && - `${chalk.dim.red('■')} Shouldn't be cherry picked into ${chalk.magenta( - range.to - )}`, - $.verbose && `${chalk.dim('■')} Chore commit or purely-decorative line`, - ] - .filter(Boolean) - .join('\n') - ) - console.log() - console.log( - commits - .filter( - (commit) => - $.verbose || ['yes', 'skip'].includes(commit.needsCherryPick) - ) - .map(({ pretty }) => pretty) - .join('\n') - ) -} - -/** - * - * @param {{ from: string, to: string[] }} range - * @param {{ colorSeed: number }} options - */ -export async function compareRange(range, { colorSeed = 0 } = {}) { - const spinner = getSpinner( - `Getting the symmetric difference between ${chalk.magenta( - range.from - )} and ${chalk.magenta(range.to[0])}` - ) - - const lines = await getSymmetricDifference({ - ...range, - to: range.to[0], - }) - - // Save the result for QA. (See `./compare/compareQA.mjs`.) - // Sometimes one of the `range` branches is a release branch with slashes like `release/branch/v6.3.3`. - // Here we're just replacing the slashes with dashes so that it's a valid file name. - const fileNamePrefix = [ - range.from.replaceAll('/', '-'), - range.to[0].replaceAll('/', '-'), - ].join('_') - - await fs.writeJSON( - new URL( - `./compare/${fileNamePrefix}.symmetricDifference.json`, - import.meta.url - ), - lines, - { - spaces: 2, - } - ) - - faker.seed(colorSeed) - - const refsToColors = range.to.reduce((colors, ref) => { - colors[ref] = faker.color.rgb() - return colors - }, {}) - - spinner.text = 'Resolving the symmetric difference (this could take a while)' - const commits = await resolveSymmetricDifference(lines, { - range, - refsToColorFunctions: Object.entries(refsToColors).reduce( - (refsToColorFunctions, [ref, color]) => { - refsToColorFunctions[ref] = chalk.bgHex(color) - return refsToColorFunctions - }, - {} - ), - }) - spinner.stop() - - const milestonesToCommits = commits.reduce((milestonesToCommits, commit) => { - if (!commit.milestone) { - return milestonesToCommits - } - - milestonesToCommits[commit.milestone] = - (milestonesToCommits[commit.milestone] ?? 0) + 1 - return milestonesToCommits - }, {}) - - consoleBoxen( - '🔖 Milestones to commits', - Object.entries(milestonesToCommits) - .map(([milestone, commits]) => `${milestone} (${commits})`) - .sort() - .join('\n') - ) - - // Make an object of refs to the number of commits with that ref to show in the key: - // - // ```js - // { - // next: 23, - // 'v6.3.2': 4, - // ... - // } - // ``` - const refsToCommits = commits.reduce((refsToCommits, commit) => { - refsToCommits[commit.ref] = (refsToCommits[commit.ref] ?? 0) + 1 - return refsToCommits - }, {}) - - // Sometimes we check quite a few versions to figure out where a commit was released for the first time. - const refsToColorsKey = Object.entries(refsToColors) - .filter(([ref]) => - commits - // TODO: it may be worth making this filter a little smarter. - .filter((commit) => commit.type === 'commit') - .some((commit) => commit.ref === ref) - ) - .map(([ref, color]) => { - return `${chalk.hex(color)('■')} ${ref} (${refsToCommits[ref]})` - }) - - consoleBoxen( - '🔑 Key', - [ - `${chalk.white('■')} ${range.from} ${`(${refsToCommits[range.from]})`}`, - ...refsToColorsKey, - `${chalk.dim('■')} Chore commit or purely-decorative line`, - ].join('\n') - ) - console.log([...commits.map((commit) => commit.pretty)].join('\n')) -} - -/** - * Gets the latest release. Uses the "-" prefix of `git tag`'s `--sort` option. See https://git-scm.com/docs/git-tag#Documentation/git-tag.txt---sortltkeygt - */ -export async function getLatestRelease() { - return unwrap( - await $`git tag --sort="-version:refname" --list "v?.?.?" | head -n 1` - ) -} - -/** - * Gets releases branches (e.g. `release/major/v7.0.0`, `release/minor/v6.4.0`, `release/patch/v6.3.2`, etc.) - */ -export async function getReleaseBranches() { - let releaseBranches = unwrap(await $`git branch --list release/*`) - - if (releaseBranches === '') { - return [] - } - - releaseBranches = releaseBranches - .split('\n') - .map((branch) => branch.trim()) - .sort((releaseBranchA, releaseBranchB) => { - const [, , versionA] = releaseBranchA.split('/') - const [, , versionB] = releaseBranchB.split('/') - - return semver.compare(versionA, versionB) - }) - - return releaseBranches.reverse() -} - -/** - * @param {string} branch - */ -export async function branchExists(branch) { - return !!unwrap(await $`git branch --list ${branch}`) -} - -// ─── Github ────────────────────────────────────────────────────────────────── - -let octokit - -export async function getOctokit() { - if (octokit) { - return octokit - } - - if (process.env.GITHUB_TOKEN === undefined) { - throw new Error( - [ - `You have to set the ${chalk.magenta( - 'GITHUB_TOKEN' - )} env var to a personal access token.`, - `Create a personal access token with the ${chalk.magenta( - 'repo' - )} scope here: https://github.com/settings/tokens.`, - ].join('\n') - ) - } - - octokit = new Octokit({ auth: process.env.GITHUB_TOKEN }) - - try { - await octokit.graphql(`{ viewer { login } }`) - } catch (e) { - if (e.status === 401) { - throw new Error( - `The ${chalk.magenta( - 'GITHUB_TOKEN' - )} env var is set, but using it in a test query returned a 401. It may have expired` - ) - } - - throw e - } - - return octokit -} - -/** - * @param {string} title - */ -export async function getMilestones() { - const octokit = await getOctokit() - - const { - repository: { - milestones: { nodes }, - }, - } = await octokit.graphql(` - { - repository(owner: "redwoodjs", name: "redwood") { - milestones(first: 100, states: OPEN) { - nodes { - title - id - number - } - } - } - } - `) - - return nodes -} - -// TODO: this needs to be recursive. -/** - * @param {string} milestoneTitle - */ -export async function getPRsWithMilestone(milestoneTitle) { - const milestone = (await getMilestones()).find( - (milestone) => milestone.title === milestoneTitle - ) - - const octokit = await getOctokit() - - const { - node: { - pullRequests: { nodes }, - }, - } = /** @type {GetPullRequestIdsRes} */ ( - await octokit.graphql( - ` - query ($milestoneId: ID!) { - node(id: $milestoneId) { - ... on Milestone { - pullRequests(first: 100, states: MERGED) { - nodes { - id - mergedAt - - labels(first: 10) { - nodes { - name - } - } - - title - number - author { - login - } - - body - } - } - } - } - } - `, - { - milestoneId: milestone.id, - } - ) - ) - - return nodes -} - -export async function openCherryPickPRs() { - await $`open https://github.com/redwoodjs/redwood/pulls?q=is%3Apr+is%3Aopen+label%3Acherry-pick` -} - -// ─── Misc ──────────────────────────────────────────────────────────────────── - -/** - * Find a file by walking up parent directories. - * - * @param {string} file - * @param {string} [startingDirectory=process.cwd()] - * @returns {string | null} - */ -export function findUp(file, startingDirectory = process.cwd()) { - const possibleFilepath = path.join(startingDirectory, file) - - if (fs.existsSync(possibleFilepath)) { - return possibleFilepath - } - - const parentDirectory = path.dirname(startingDirectory) - - // If we've reached the root directory, there's no file to be found. - if (parentDirectory === startingDirectory) { - return null - } - - return findUp(file, parentDirectory) -} diff --git a/tasks/release/tests/__snapshots__/release.test.mjs.snap b/tasks/release/tests/__snapshots__/release.test.mjs.snap deleted file mode 100644 index 0dac2fcc2f4f..000000000000 --- a/tasks/release/tests/__snapshots__/release.test.mjs.snap +++ /dev/null @@ -1,153 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`releaseLib symmetric difference \`getSymmetricDifference\` gets the symmetric difference between fixture branches 1`] = ` -[ - "< a070dac21fce536a2ea49a10de010d3690a4e6f6 chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)", - "< 01f6565ce058273fc2c0389f04c3f93b9a9749bb fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)", - "< 97b235fd343efdc8fa267e7d6ca07b5b4cb06465 chore(api-server): remove server survey tests in CI (#9348)", - "< be2cb77b228d01394e13e216aa2b37190fbe2518 chore(deps): update babel monorepo to v7.23.2 (#9344)", - "< 602aba999faf47c7ebfa886fa3433b60b86e417e chore(deps): bump @babel/traverse from 7.18.9 to 7.23.2 in /docs (#9311)", - "< e57d214aeb4b0407a13882831cbb24ebaa68f51d chore(deps): update dependency @tsconfig/docusaurus to v2 (#9347)", - "< 4505b60136e6479dbf8ee40c56b7756a9566a787 fix(deps): update dependency react-player to v2.13.0 (#9346)", - "< ee1ad2745a0ec151af2e002ee220ca3b4caf412b fix(deps): update docusaurus monorepo to v2.4.3 (#9345)", - "< 3d18bce20c9a565d99a4cc7e78aab2c8a72fbd64 fix(deps): update dependency @babel/traverse to v7.23.2 [security] (#9322)", - "< 73579f84378d8dfd64437406eb9add63b010ef09 chore: increase server test timeout, fix \`yarn build:clean\` (#9336)", - "< a12d411c37f780a9b1cd2f7ee0429808f72387e0 feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)", - "< 8e59d9198e7c253c6ef3d002fa646144b4a0a297 fix(cli): Tailwind setup updates \`scaffold.css\` when needed (#9290)", - "< 045531957188895e3ee42c3815030445bb59b87f fix(cli): Exit with non-zero exit code when \`yarn rw g types\` has errors (#9280)", - "< 8e676c83f6f0838982826afbf2a241219a26f62c Update all GitHub actions to run on Node 20 (#9334)", - "< c8c8a3b1e3c599a610b3856b71078357e70e44be RSC: vite externalConditions (#9333)", - "< 45065da262c1a57d67b0013ea7168c0fca687dc6 RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "< 4c5a3ebd1e254b4558c6d2d5c7800514e6b04b2d Don't remount wrap components when navigating within Set (#9312)", - "< 35c0eeba90187d60b92c975ee202362035fcb6c2 chore(api-server): improve tests (#9325)", - "< 18c5d961f203820facc8a42eebe2d382ed7ff7dd RSC: Implement RSC worker (#9331)", - "< 9d4a1e7b031138527f9e654275b443535070ae36 fix(babel): Improved message for error relating to multiple files ending in \`Page.{js,jsx,ts,tsx}\` in page directories (#9329)", - "< 433d8ef99b0025cf2a5d6faceef303be6089f155 RSC: createRscRequestHandler (#9330)", - "< 104c8e289340310dd4cba7d8cc20666a9abb85e6 RSA smoke-test (#9327)", - "< 6d4fd3eed2006db5b63e7dd21fae6820f3d7e954 Upgrade to vite v4.5.0 (#9328)", - "< f157c3ec9c76848716311c928a047138775279a3 RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "< daaa1998837bdb6eaa42d9160292e781fadb3dc8 fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "< c44a5244ae5d7b07f215777bab387ef3dc883a55 Fix Set wrapper type so you can have an array of wrappers (#9314)", - "< fca02b61b747751aa88dd71c4280779a91452d07 \`\` (#9303)", - "< e2cf25db2518833ad0b833c5e6b5308557ecc7fd fix(ssr-build): Generate document in ssr build too! (#9310)", - "< 984c9e067fc26c5c1487ae3ee1255504f98e257c fix(fastify): Dont fallback to index html if requesting static assets (#9272)", - "< 43efb0f4b1f7f7d0c00878463a70c23db19a7071 chore: Restore name of terminating Apollo link to httpLink (#9205)", - "< 1ed2b5b477a6b08a0d4731160591bebfaaeac34b feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "< 14f5b0d9c2576087024fd69e5a2fe409019b13da Router utils: Fix some spelling misstakes and other minor changes (#9302)", - "< d6436e46ec3564441d9765877c2a50e6cb8fb030 feat(cli-helpers): Root package install and RWJS env var (#9296)", - "< 79a7e0163b53318af7ae0eb20b63ce8b118d64c7 Conditionally guarantee cell success data (#9037)", - "< 10a856d8377f4ef96f24ed0db0720c7128d019f5 Cell generator: Fix formatting in template (#9301)", - "< 3ed46eceb6b39de1b55a4be20cb1cee0b9f49615 chore(router): Add missing tests in analyze routes (#9274)", - "< 43b68459c0057c20a91163ce39e25a35fc7e48cf fix(deps): update prisma monorepo to v5.4.2 (#9294)", - "< ba296b40d90292100bb765d58f664d2e27949a63 fix(deps): update apollo graphql packages (#9292)", - "< 282b8343ff5884b1373164097d2f1ed96024b646 fix(deps): update dependency @fastify/static to v6.11.2 (#9202)", - "< 4bc0925af2529ef831fd650e951c45a5cebe4421 chore(deps): update dependency firebase to v10.4.0 (#9203)", - "< 229bd4b241aea267aefae4d2f2983e6ebe063cef fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)", - "< 58a7a8fe7399f721408d4d1a7050a25f3ef81cef chore(deps): update babel monorepo (#9254)", - "< 8ddafad958463fdd9b8585c290c86bb843c64861 fix(deps): update dependency vite to v4.4.11 (#9255)", - "< 6f3ee2541a523e707610bc01ff1b107b1122c566 chore(deps): update dependency postcss to v8.4.31 [security] (#9260)", - "< 8dc7bdb556305a584181517a726d788f9868a99b fix(deps): update storybook monorepo to v7.4.6 (#9256)", - "< cd37907d3d6bda782cb73fa38dfe3f810ed39e75 dbAuth: Unique session cookie name per port (#9248)", - "< 08a67208947c2c48365ecddeee32d0ce43c368fb feat: add experimental docker setup command (#9024)", - "< 53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de Include @types/react as devDep in projects (#9250)", - "< 8c22d4deac32d29b72844f8de3ca72f9bac10a03 graphql possibleTypes: Fix formatting (#9239)", - "< 18555d0e196cfc69ed322e24cafeb2d228773ae1 RSC: Smoke test (#9194)", - "< 27d33d3e29276d0d5c61d604034d65b4c6ae5f65 RSC: Handle Windows paths in clientEntries (#9233)", - "< 61f0f51d8557c591e0432ffe9b75520c0df86ed1 chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)", - "< 12aa24adc31f1719152ab1d8dc445959a2a43a6e fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)", - "< 817eba4501b985424dcdce11068509452d0d3449 fix(deps): update dependency graphql to v16.8.1 [security] (#9228)", - "< a886bf5703e3d92e70e478272757fd5951f38fe7 chore(deps): update dependency @clerk/types to v3.52.0 (#9213)", - "< 2cbdf11a07d1b142065c9e1464574287f9625253 feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)", - "< a8336bf0b9c533f45b867b6af401b8ba68e27a5e fix(deps): update storybook monorepo to v7.4.3 (#9211)", - "< 9f69fe6357ced942c23a02e066a604679750b9e9 fix(deps): update dependency @apollo/client to v3.8.4 (#9208)", - "< 5921359bf6482873df1bf9d9df51f3eaaba9c566 chore(crwa): remove React \`prop-types\` package (#9206)", - "< ed4ef0894139af0a4305c77bf1fdf92f9dc5511f chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)", - "< 74d36b75091551bfec46933fbe7746d772ecce19 feat(mailer): Resend handler (#9175)", - "< 30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9 chore: bump babel packages' versions (#9200)", - "< 4d06556988b8f1da0a9ecd7d6b0e133707e22921 smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "< 83d180fc477b17bf33c7673f010b68e9f7d5e0a2 RSC: Check if index.html has already been updated during setup (#9197)", - "< e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4 RSC: Use react/experimental types (#9196)", - "< a7bab85513ded97c500399daacf3a39de1fc1378 RSC: Patch vite when running setup command (#9192)", - "< a436b1cfe82b0ce53baadc0149a5d2831928135b RSC: Support 'use client' in 3pp packages (#9191)", - "< 1b52e3dda6b6e8fe5ea2522aaee8c687566912b7 chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "< 1e23e0ab344ff5e70b69000babc9adf006a61d72 fix(deps): update storybook monorepo to v7.4.2 (#9185)", - "< aa15dad514bec009f275921e048901bd4fd4c2f2 fix(deps): update prisma monorepo to v5.3.1 (#9187)", - "< adddd23987b8a1003053280fafe772275e932217 chore(deps): update dependency lerna to v7.3.0 (#9186)", - "< 842d24566fc83623278bf00fe8e2a57f04f31573 fix(deps): update dependency fastify to v4.23.2 (#9184)", - "< 552eec353a72f426b384263c530eb052601c12ac fix(deps): update dependency @fastify/static to v6.11.1 (#9182)", - "< dc86db59dcc18e8e711f9f1a0d5196060de7dbbb fix(babel): use caret to specify some package versions (#9174)", - "< 91fb06b378ea2b156f0cb619033021f4b116a6a7 Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "< 9d63d080a69f1428bb2b961690ecb09eaee64edd RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "< b8ce4efbd2dea27a01133741994ec3c4f1db9c38 fix(deps): update dependency fastify to v4.23.1 (#9167)", - "< 08870babd04bdfaa735f645603de0d5c515d66c2 chore(ci): undo changes to test project stories (#9166)", - "< 49e6221dc8789b87af05ae75002506368a8e9391 fix(deps): update jest monorepo to v29.7.0 (#9163)", - "< 208bce31a64fdf7d1991f0b98f3e90017ae14f21 chore(deps): update babel monorepo (#9144)", - "< f40d11b379ac53967e2e35d8480c54ba0ba2a8e2 fix(deps): update dependency fastify to v4.23.0 (#9160)", - "< a089495bbe3a2e11875ff5071d1745dc104c6918 fix(deps): update dependency react-hook-form to v7.46.1 (#9162)", - "< 2b056c6da66e115d61929cb8b3f91932ebcc1d72 fix(deps): update dependency msw to v1.3.0 (#9161)", - "< 15bb687eb63c22d6592a10d075d6786761643533 fix(deps): update storybook monorepo to v7.4.1 (#9159)", - "< 9257e3944fe1f49a3e9bd39a1f076c02134de28c RSC: Decode RSF args from request (#9157)", - "< c46bb67a75c4f78b4cbd5d744f52937a567f0e43 RSC: RSF aka Server Actions (#9155)", - "< d3475cd7041b20106bf73968a1d59dcae611afcd RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "< ee334bcf08f760cdfe26c03e7d65dc7da2f76281 RSC: Work around an issue in Rollup (#9153)", - "< 6af5356c4a964e0b46935edf6c66c8a6593ab7b9 fix(deps): update dependency nodemailer to v6.9.5 (#9145)", - "< d9404187472ba951c6f1b4b3fd78af4c87683e7f fix(deps): update opentelemetry-js monorepo (#9147)", - "< 33db0478dcab02ae05ea8d926d1a1e0d89076309 chore(deps): update dependency typescript to v5.2.2 (#9128)", - "< 7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)", - "< 0cc790a6b48a448119b85d4dd7c5453ec792d890 fix(deps): update dependency @fastify/static to v6.11.0 (#9129)", - "< 9e932fba52d43aa4c1d981b52e64678e8172db6c fix(deps): update dependency core-js to v3.32.2 (#9125)", - "< c01ae41211aed94c51cfd9754532e402487f9734 fix(deps): update dependency fastify to v4.22.2 (#9124)", - "< 7dcdf19b25ad0e4dd97e884c01ce956ad6497de7 fix(deps): update dependency @apollo/client to v3.8.3 (#9123)", - "< 050a16925ab9768374e56f20792bbb2a026488bb Streaming: meta charSet=utf-8 (#9142)", - "< 634099091ade40b5bba9f86cd6fc573ae5be480c chore(tasks): Benchmark tests (#8578)", - "< 2897cd718e9a0eceaece63f58fa090e882c49c10 style(eslint): enable \`@typescript-eslint/consistent-type-imports\` (#9082)", - "< ae11f69df494be05d33e558bfea328b751223f43 Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "< 0ff463f05dc1bba7797e3b178dcf788be2bcd028 Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)", - "< 7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2 RSC: Don't set the react-server condition for client builds (#9132)", - "< e90ae0cb2b06165f8886602b3644c5dfd32d98b1 fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)", - "< 93f28064032842d909de971d42f3d1259eb52413 fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)", - "< ed8a87d98d8c3e5dad23ac3e2143b46a201194dc chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "< 80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153 chore(deps): update dependency postcss to v8.4.29 (#9109)", - "< 0c23f67708b286d1e923e4d93aaba238edf66bb3 Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "< 8d0ab16aa1c39f1526e4213211608805735f6974 fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "< 89f0303f2d3ebf8c3fb8a09611066230fd560a4c feat: Mailer packages and studio tooling updates (#9058)", - "< d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8 chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "< 2b8a5558c6d88f37346346c5f9db2cdd0073f83f feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "< 2f49ac90349e2ddd793e0adeaf00967abfd54912 chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "< 2cc76e697d7976ccdd61803ab6503663f25c9250 chore(cli): make \`@redwoodjs/cli-data-migrate\` package size smaller (#9085)", - "< c55f1c56b3b3279089784f3c388829ca3438e1e1 chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "< 65acc365f05e2862d50aa86aaf2cd1377137b105 chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "< 029fa48c4186ec820704c666a9c31da448a2f7c4 chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "< 8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7 Fix yarn lint warnings regarding {} (#9099)", - "< 52fc187a3c609db9e05dc3d68dd2857f68209d0b chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "< 069101b7ca1115d021a20f4d9b80e9b10107df24 feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "< 4f2791acdcce6058dd7421eb575f09d5c929459b chore(deps): update babel monorepo (#9090)", - "< 5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2 fix(deps): update jest monorepo (#9092)", - "< b5fdb47bef8396550f2c53f81f614a7d311b7a9b fix(deps): update storybook monorepo to v7.4.0 (#9095)", - "< 9958845199de1d58166da7b8f7ad745421851565 fix(deps): update dependency msw to v1.2.5 (#9091)", - "< bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805 fix(deps): update dependency fastify to v4.22.0 (#9093)", - "< f3ce9b1efee76c795d8aa076eaa123b2480ae800 fix(deps): update dependency graphql to v16.8.0 (#9094)", - "< ae4f5cab8fac1394baeea237c1e62dc3fc09e118 chore(deps): update dependency firebase to v10.3.0 (#9086)", - "< 3c6b845948e334c9afc686512aab4a89d254e8c8 fix(deps): update prisma monorepo to v5.2.0 (#9064)", - "< fbd39919afc75bd7fc7082e22fcb4f650c916771 chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "< 944a93b1df26afa6749fe34c12f1e334385aef6a chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "< a0834d4d94507deae107893c603f25ad8fa11f97 fix(data-migrate): add \`dotenv-defaults\`, properly plug into CLI (#9087)", - "< 2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb fix(data-migrate): add missing dependency \`@redwoodjs/cli-helpers\`", - "< f4ea5138b51f44c02b0085d4a335508aa502ab34 feat(cli): lazy install data migrate and make it runnable on its own (#8572)", - "< 8ca4b0201a6129efb50414c014bc910b3572625e chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "< a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3 feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)", - "< c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "< 8aa76885fdbdd603e2afdeef4d0abba1d0e75477 fix(deps): update storybook monorepo to v7.3.2 (#9020)", - "< bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7 Create releaseCommits.json", - "< 33995028445e817a35b669dd1889c20f91a3f8d4 chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)", - "< fc26cd76c67bd2ef329b7369ca400c8b8063b5da chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)", - "< 8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18 fix(deps): update jest monorepo to v29.6.2 (#8984)", - "< 0ec4c5e15488d73e95d08d3965968797ecd23315 chore(deps): update babel monorepo to v7.22.10 (#9016)", - "< c89e1364c7e9af541438f3274ddf1f92401dc2c8 exp(streaming): Allow SSR with experimental apollo client (#9038)", - "< 865c9085bf1519c6b2f153b7497ef005d42f3bad manually bump web-server package version", - "< 7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39 Merge branch 'release/patch/v6.0.7'", - "| < a38d6f08df99db83239008b75d2bf6f569ea0609 fix(deps): update dependency core-js to v3.32.0 (#9030)", - "| o a2fcc1618a70a77570943e4bc85d29ea055ab507 chore(deps): update dependency @playwright/test to v1.37.0 (#9028)", - "o 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7", -] -`; diff --git a/tasks/release/tests/annotatedSymmetricDifference.json b/tasks/release/tests/annotatedSymmetricDifference.json deleted file mode 100644 index 1a54bd6b355f..000000000000 --- a/tasks/release/tests/annotatedSymmetricDifference.json +++ /dev/null @@ -1,2350 +0,0 @@ -{ - "commit": [ - { - "line": "< a070dac21fce536a2ea49a10de010d3690a4e6f6 chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a070dac21fce536a2ea49a10de010d3690a4e6f6 chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)\u001b[39m\u001b[49m", - "hash": "a070dac21fce536a2ea49a10de010d3690a4e6f6", - "message": "chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)", - "pr": "9307" - }, - { - "line": "< 01f6565ce058273fc2c0389f04c3f93b9a9749bb fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 01f6565ce058273fc2c0389f04c3f93b9a9749bb fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)\u001b[39m\u001b[49m", - "hash": "01f6565ce058273fc2c0389f04c3f93b9a9749bb", - "message": "fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)", - "pr": "9298" - }, - { - "line": "< 97b235fd343efdc8fa267e7d6ca07b5b4cb06465 chore(api-server): remove server survey tests in CI (#9348)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 97b235fd343efdc8fa267e7d6ca07b5b4cb06465 chore(api-server): remove server survey tests in CI (#9348)\u001b[39m\u001b[49m", - "hash": "97b235fd343efdc8fa267e7d6ca07b5b4cb06465", - "message": "chore(api-server): remove server survey tests in CI (#9348)", - "pr": "9348" - }, - { - "line": "< be2cb77b228d01394e13e216aa2b37190fbe2518 chore(deps): update babel monorepo to v7.23.2 (#9344)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< be2cb77b228d01394e13e216aa2b37190fbe2518 chore(deps): update babel monorepo to v7.23.2 (#9344)\u001b[39m\u001b[49m", - "hash": "be2cb77b228d01394e13e216aa2b37190fbe2518", - "message": "chore(deps): update babel monorepo to v7.23.2 (#9344)", - "pr": "9344" - }, - { - "line": "< 73579f84378d8dfd64437406eb9add63b010ef09 chore: increase server test timeout, fix `yarn build:clean` (#9336)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 73579f84378d8dfd64437406eb9add63b010ef09 chore: increase server test timeout, fix `yarn build:clean` (#9336)\u001b[39m\u001b[49m", - "hash": "73579f84378d8dfd64437406eb9add63b010ef09", - "message": "chore: increase server test timeout, fix `yarn build:clean` (#9336)", - "pr": "9336" - }, - { - "line": "< a12d411c37f780a9b1cd2f7ee0429808f72387e0 feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a12d411c37f780a9b1cd2f7ee0429808f72387e0 feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)\u001b[39m\u001b[49m", - "hash": "a12d411c37f780a9b1cd2f7ee0429808f72387e0", - "message": "feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)", - "pr": "9324" - }, - { - "line": "< 045531957188895e3ee42c3815030445bb59b87f fix(cli): Exit with non-zero exit code when `yarn rw g types` has errors (#9280)", - "ref": "main", - "type": "commit", - "pretty": "< 045531957188895e3ee42c3815030445bb59b87f fix(cli): Exit with non-zero exit code when `yarn rw g types` has errors (#9280)", - "hash": "045531957188895e3ee42c3815030445bb59b87f", - "message": "fix(cli): Exit with non-zero exit code when `yarn rw g types` has errors (#9280)", - "pr": "9280" - }, - { - "line": "< 8e676c83f6f0838982826afbf2a241219a26f62c Update all GitHub actions to run on Node 20 (#9334)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8e676c83f6f0838982826afbf2a241219a26f62c Update all GitHub actions to run on Node 20 (#9334)\u001b[39m\u001b[49m", - "hash": "8e676c83f6f0838982826afbf2a241219a26f62c", - "message": "Update all GitHub actions to run on Node 20 (#9334)", - "pr": "9334" - }, - { - "line": "< c8c8a3b1e3c599a610b3856b71078357e70e44be RSC: vite externalConditions (#9333)", - "ref": "main", - "type": "commit", - "pretty": "< c8c8a3b1e3c599a610b3856b71078357e70e44be RSC: vite externalConditions (#9333)", - "hash": "c8c8a3b1e3c599a610b3856b71078357e70e44be", - "message": "RSC: vite externalConditions (#9333)", - "pr": "9333" - }, - { - "line": "< 45065da262c1a57d67b0013ea7168c0fca687dc6 RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "ref": "main", - "type": "commit", - "pretty": "< 45065da262c1a57d67b0013ea7168c0fca687dc6 RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "hash": "45065da262c1a57d67b0013ea7168c0fca687dc6", - "message": "RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "pr": "9332" - }, - { - "line": "< 35c0eeba90187d60b92c975ee202362035fcb6c2 chore(api-server): improve tests (#9325)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 35c0eeba90187d60b92c975ee202362035fcb6c2 chore(api-server): improve tests (#9325)\u001b[39m\u001b[49m", - "hash": "35c0eeba90187d60b92c975ee202362035fcb6c2", - "message": "chore(api-server): improve tests (#9325)", - "pr": "9325" - }, - { - "line": "< 18c5d961f203820facc8a42eebe2d382ed7ff7dd RSC: Implement RSC worker (#9331)", - "ref": "main", - "type": "commit", - "pretty": "< 18c5d961f203820facc8a42eebe2d382ed7ff7dd RSC: Implement RSC worker (#9331)", - "hash": "18c5d961f203820facc8a42eebe2d382ed7ff7dd", - "message": "RSC: Implement RSC worker (#9331)", - "pr": "9331" - }, - { - "line": "< 433d8ef99b0025cf2a5d6faceef303be6089f155 RSC: createRscRequestHandler (#9330)", - "ref": "main", - "type": "commit", - "pretty": "< 433d8ef99b0025cf2a5d6faceef303be6089f155 RSC: createRscRequestHandler (#9330)", - "hash": "433d8ef99b0025cf2a5d6faceef303be6089f155", - "message": "RSC: createRscRequestHandler (#9330)", - "pr": "9330" - }, - { - "line": "< 104c8e289340310dd4cba7d8cc20666a9abb85e6 RSA smoke-test (#9327)", - "ref": "main", - "type": "commit", - "pretty": "< 104c8e289340310dd4cba7d8cc20666a9abb85e6 RSA smoke-test (#9327)", - "hash": "104c8e289340310dd4cba7d8cc20666a9abb85e6", - "message": "RSA smoke-test (#9327)", - "pr": "9327" - }, - { - "line": "< 6d4fd3eed2006db5b63e7dd21fae6820f3d7e954 Upgrade to vite v4.5.0 (#9328)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 6d4fd3eed2006db5b63e7dd21fae6820f3d7e954 Upgrade to vite v4.5.0 (#9328)\u001b[39m\u001b[49m", - "hash": "6d4fd3eed2006db5b63e7dd21fae6820f3d7e954", - "message": "Upgrade to vite v4.5.0 (#9328)", - "pr": "9328" - }, - { - "line": "< f157c3ec9c76848716311c928a047138775279a3 RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "ref": "main", - "type": "commit", - "pretty": "< f157c3ec9c76848716311c928a047138775279a3 RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "hash": "f157c3ec9c76848716311c928a047138775279a3", - "message": "RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "pr": "9326" - }, - { - "line": "< daaa1998837bdb6eaa42d9160292e781fadb3dc8 fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "ref": "main", - "type": "commit", - "pretty": "< daaa1998837bdb6eaa42d9160292e781fadb3dc8 fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "hash": "daaa1998837bdb6eaa42d9160292e781fadb3dc8", - "message": "fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "pr": "9317" - }, - { - "line": "< e2cf25db2518833ad0b833c5e6b5308557ecc7fd fix(ssr-build): Generate document in ssr build too! (#9310)", - "ref": "main", - "type": "commit", - "pretty": "< e2cf25db2518833ad0b833c5e6b5308557ecc7fd fix(ssr-build): Generate document in ssr build too! (#9310)", - "hash": "e2cf25db2518833ad0b833c5e6b5308557ecc7fd", - "message": "fix(ssr-build): Generate document in ssr build too! (#9310)", - "pr": "9310" - }, - { - "line": "< 1ed2b5b477a6b08a0d4731160591bebfaaeac34b feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "ref": "main", - "type": "commit", - "pretty": "< 1ed2b5b477a6b08a0d4731160591bebfaaeac34b feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "hash": "1ed2b5b477a6b08a0d4731160591bebfaaeac34b", - "message": "feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "pr": "9295" - }, - { - "line": "< 79a7e0163b53318af7ae0eb20b63ce8b118d64c7 Conditionally guarantee cell success data (#9037)", - "ref": "main", - "type": "commit", - "pretty": "< 79a7e0163b53318af7ae0eb20b63ce8b118d64c7 Conditionally guarantee cell success data (#9037)", - "hash": "79a7e0163b53318af7ae0eb20b63ce8b118d64c7", - "message": "Conditionally guarantee cell success data (#9037)", - "pr": "9037" - }, - { - "line": "< 43b68459c0057c20a91163ce39e25a35fc7e48cf fix(deps): update prisma monorepo to v5.4.2 (#9294)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 43b68459c0057c20a91163ce39e25a35fc7e48cf fix(deps): update prisma monorepo to v5.4.2 (#9294)\u001b[39m\u001b[49m", - "hash": "43b68459c0057c20a91163ce39e25a35fc7e48cf", - "message": "fix(deps): update prisma monorepo to v5.4.2 (#9294)", - "pr": "9294" - }, - { - "line": "< ba296b40d90292100bb765d58f664d2e27949a63 fix(deps): update apollo graphql packages (#9292)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< ba296b40d90292100bb765d58f664d2e27949a63 fix(deps): update apollo graphql packages (#9292)\u001b[39m\u001b[49m", - "hash": "ba296b40d90292100bb765d58f664d2e27949a63", - "message": "fix(deps): update apollo graphql packages (#9292)", - "pr": "9292" - }, - { - "line": "< 282b8343ff5884b1373164097d2f1ed96024b646 fix(deps): update dependency @fastify/static to v6.11.2 (#9202)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 282b8343ff5884b1373164097d2f1ed96024b646 fix(deps): update dependency @fastify/static to v6.11.2 (#9202)\u001b[39m\u001b[49m", - "hash": "282b8343ff5884b1373164097d2f1ed96024b646", - "message": "fix(deps): update dependency @fastify/static to v6.11.2 (#9202)", - "pr": "9202" - }, - { - "line": "< 4bc0925af2529ef831fd650e951c45a5cebe4421 chore(deps): update dependency firebase to v10.4.0 (#9203)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 4bc0925af2529ef831fd650e951c45a5cebe4421 chore(deps): update dependency firebase to v10.4.0 (#9203)\u001b[39m\u001b[49m", - "hash": "4bc0925af2529ef831fd650e951c45a5cebe4421", - "message": "chore(deps): update dependency firebase to v10.4.0 (#9203)", - "pr": "9203" - }, - { - "line": "< 229bd4b241aea267aefae4d2f2983e6ebe063cef fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 229bd4b241aea267aefae4d2f2983e6ebe063cef fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)\u001b[39m\u001b[49m", - "hash": "229bd4b241aea267aefae4d2f2983e6ebe063cef", - "message": "fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)", - "pr": "9281" - }, - { - "line": "< 58a7a8fe7399f721408d4d1a7050a25f3ef81cef chore(deps): update babel monorepo (#9254)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 58a7a8fe7399f721408d4d1a7050a25f3ef81cef chore(deps): update babel monorepo (#9254)\u001b[39m\u001b[49m", - "hash": "58a7a8fe7399f721408d4d1a7050a25f3ef81cef", - "message": "chore(deps): update babel monorepo (#9254)", - "pr": "9254" - }, - { - "line": "< 8ddafad958463fdd9b8585c290c86bb843c64861 fix(deps): update dependency vite to v4.4.11 (#9255)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8ddafad958463fdd9b8585c290c86bb843c64861 fix(deps): update dependency vite to v4.4.11 (#9255)\u001b[39m\u001b[49m", - "hash": "8ddafad958463fdd9b8585c290c86bb843c64861", - "message": "fix(deps): update dependency vite to v4.4.11 (#9255)", - "pr": "9255" - }, - { - "line": "< 6f3ee2541a523e707610bc01ff1b107b1122c566 chore(deps): update dependency postcss to v8.4.31 [security] (#9260)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 6f3ee2541a523e707610bc01ff1b107b1122c566 chore(deps): update dependency postcss to v8.4.31 [security] (#9260)\u001b[39m\u001b[49m", - "hash": "6f3ee2541a523e707610bc01ff1b107b1122c566", - "message": "chore(deps): update dependency postcss to v8.4.31 [security] (#9260)", - "pr": "9260" - }, - { - "line": "< 8dc7bdb556305a584181517a726d788f9868a99b fix(deps): update storybook monorepo to v7.4.6 (#9256)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8dc7bdb556305a584181517a726d788f9868a99b fix(deps): update storybook monorepo to v7.4.6 (#9256)\u001b[39m\u001b[49m", - "hash": "8dc7bdb556305a584181517a726d788f9868a99b", - "message": "fix(deps): update storybook monorepo to v7.4.6 (#9256)", - "pr": "9256" - }, - { - "line": "< cd37907d3d6bda782cb73fa38dfe3f810ed39e75 dbAuth: Unique session cookie name per port (#9248)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< cd37907d3d6bda782cb73fa38dfe3f810ed39e75 dbAuth: Unique session cookie name per port (#9248)\u001b[39m\u001b[49m", - "hash": "cd37907d3d6bda782cb73fa38dfe3f810ed39e75", - "message": "dbAuth: Unique session cookie name per port (#9248)", - "pr": "9248" - }, - { - "line": "< 08a67208947c2c48365ecddeee32d0ce43c368fb feat: add experimental docker setup command (#9024)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 08a67208947c2c48365ecddeee32d0ce43c368fb feat: add experimental docker setup command (#9024)\u001b[39m\u001b[49m", - "hash": "08a67208947c2c48365ecddeee32d0ce43c368fb", - "message": "feat: add experimental docker setup command (#9024)", - "pr": "9024" - }, - { - "line": "< 53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de Include @types/react as devDep in projects (#9250)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de Include @types/react as devDep in projects (#9250)\u001b[39m\u001b[49m", - "hash": "53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de", - "message": "Include @types/react as devDep in projects (#9250)", - "pr": "9250" - }, - { - "line": "< 8c22d4deac32d29b72844f8de3ca72f9bac10a03 graphql possibleTypes: Fix formatting (#9239)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8c22d4deac32d29b72844f8de3ca72f9bac10a03 graphql possibleTypes: Fix formatting (#9239)\u001b[39m\u001b[49m", - "hash": "8c22d4deac32d29b72844f8de3ca72f9bac10a03", - "message": "graphql possibleTypes: Fix formatting (#9239)", - "pr": "9239" - }, - { - "line": "< 18555d0e196cfc69ed322e24cafeb2d228773ae1 RSC: Smoke test (#9194)", - "ref": "main", - "type": "commit", - "pretty": "< 18555d0e196cfc69ed322e24cafeb2d228773ae1 RSC: Smoke test (#9194)", - "hash": "18555d0e196cfc69ed322e24cafeb2d228773ae1", - "message": "RSC: Smoke test (#9194)", - "pr": "9194" - }, - { - "line": "< 27d33d3e29276d0d5c61d604034d65b4c6ae5f65 RSC: Handle Windows paths in clientEntries (#9233)", - "ref": "main", - "type": "commit", - "pretty": "< 27d33d3e29276d0d5c61d604034d65b4c6ae5f65 RSC: Handle Windows paths in clientEntries (#9233)", - "hash": "27d33d3e29276d0d5c61d604034d65b4c6ae5f65", - "message": "RSC: Handle Windows paths in clientEntries (#9233)", - "pr": "9233" - }, - { - "line": "< 61f0f51d8557c591e0432ffe9b75520c0df86ed1 chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 61f0f51d8557c591e0432ffe9b75520c0df86ed1 chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)\u001b[39m\u001b[49m", - "hash": "61f0f51d8557c591e0432ffe9b75520c0df86ed1", - "message": "chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)", - "pr": "9212" - }, - { - "line": "< 12aa24adc31f1719152ab1d8dc445959a2a43a6e fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 12aa24adc31f1719152ab1d8dc445959a2a43a6e fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)\u001b[39m\u001b[49m", - "hash": "12aa24adc31f1719152ab1d8dc445959a2a43a6e", - "message": "fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)", - "pr": "9214" - }, - { - "line": "< 817eba4501b985424dcdce11068509452d0d3449 fix(deps): update dependency graphql to v16.8.1 [security] (#9228)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 817eba4501b985424dcdce11068509452d0d3449 fix(deps): update dependency graphql to v16.8.1 [security] (#9228)\u001b[39m\u001b[49m", - "hash": "817eba4501b985424dcdce11068509452d0d3449", - "message": "fix(deps): update dependency graphql to v16.8.1 [security] (#9228)", - "pr": "9228" - }, - { - "line": "< a886bf5703e3d92e70e478272757fd5951f38fe7 chore(deps): update dependency @clerk/types to v3.52.0 (#9213)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a886bf5703e3d92e70e478272757fd5951f38fe7 chore(deps): update dependency @clerk/types to v3.52.0 (#9213)\u001b[39m\u001b[49m", - "hash": "a886bf5703e3d92e70e478272757fd5951f38fe7", - "message": "chore(deps): update dependency @clerk/types to v3.52.0 (#9213)", - "pr": "9213" - }, - { - "line": "< 2cbdf11a07d1b142065c9e1464574287f9625253 feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2cbdf11a07d1b142065c9e1464574287f9625253 feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)\u001b[39m\u001b[49m", - "hash": "2cbdf11a07d1b142065c9e1464574287f9625253", - "message": "feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)", - "pr": "9140" - }, - { - "line": "< a8336bf0b9c533f45b867b6af401b8ba68e27a5e fix(deps): update storybook monorepo to v7.4.3 (#9211)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a8336bf0b9c533f45b867b6af401b8ba68e27a5e fix(deps): update storybook monorepo to v7.4.3 (#9211)\u001b[39m\u001b[49m", - "hash": "a8336bf0b9c533f45b867b6af401b8ba68e27a5e", - "message": "fix(deps): update storybook monorepo to v7.4.3 (#9211)", - "pr": "9211" - }, - { - "line": "< 9f69fe6357ced942c23a02e066a604679750b9e9 fix(deps): update dependency @apollo/client to v3.8.4 (#9208)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 9f69fe6357ced942c23a02e066a604679750b9e9 fix(deps): update dependency @apollo/client to v3.8.4 (#9208)\u001b[39m\u001b[49m", - "hash": "9f69fe6357ced942c23a02e066a604679750b9e9", - "message": "fix(deps): update dependency @apollo/client to v3.8.4 (#9208)", - "pr": "9208" - }, - { - "line": "< 5921359bf6482873df1bf9d9df51f3eaaba9c566 chore(crwa): remove React `prop-types` package (#9206)", - "ref": "main", - "type": "commit", - "pretty": "< 5921359bf6482873df1bf9d9df51f3eaaba9c566 chore(crwa): remove React `prop-types` package (#9206)", - "hash": "5921359bf6482873df1bf9d9df51f3eaaba9c566", - "message": "chore(crwa): remove React `prop-types` package (#9206)", - "pr": "9206" - }, - { - "line": "< ed4ef0894139af0a4305c77bf1fdf92f9dc5511f chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< ed4ef0894139af0a4305c77bf1fdf92f9dc5511f chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)\u001b[39m\u001b[49m", - "hash": "ed4ef0894139af0a4305c77bf1fdf92f9dc5511f", - "message": "chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)", - "pr": "9181" - }, - { - "line": "< 74d36b75091551bfec46933fbe7746d772ecce19 feat(mailer): Resend handler (#9175)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 74d36b75091551bfec46933fbe7746d772ecce19 feat(mailer): Resend handler (#9175)\u001b[39m\u001b[49m", - "hash": "74d36b75091551bfec46933fbe7746d772ecce19", - "message": "feat(mailer): Resend handler (#9175)", - "pr": "9175" - }, - { - "line": "< 30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9 chore: bump babel packages' versions (#9200)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9 chore: bump babel packages' versions (#9200)\u001b[39m\u001b[49m", - "hash": "30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9", - "message": "chore: bump babel packages' versions (#9200)", - "pr": "9200" - }, - { - "line": "< 4d06556988b8f1da0a9ecd7d6b0e133707e22921 smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "ref": "main", - "type": "commit", - "pretty": "< 4d06556988b8f1da0a9ecd7d6b0e133707e22921 smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "hash": "4d06556988b8f1da0a9ecd7d6b0e133707e22921", - "message": "smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "pr": "9193" - }, - { - "line": "< 83d180fc477b17bf33c7673f010b68e9f7d5e0a2 RSC: Check if index.html has already been updated during setup (#9197)", - "ref": "main", - "type": "commit", - "pretty": "< 83d180fc477b17bf33c7673f010b68e9f7d5e0a2 RSC: Check if index.html has already been updated during setup (#9197)", - "hash": "83d180fc477b17bf33c7673f010b68e9f7d5e0a2", - "message": "RSC: Check if index.html has already been updated during setup (#9197)", - "pr": "9197" - }, - { - "line": "< e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4 RSC: Use react/experimental types (#9196)", - "ref": "main", - "type": "commit", - "pretty": "< e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4 RSC: Use react/experimental types (#9196)", - "hash": "e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4", - "message": "RSC: Use react/experimental types (#9196)", - "pr": "9196" - }, - { - "line": "< a7bab85513ded97c500399daacf3a39de1fc1378 RSC: Patch vite when running setup command (#9192)", - "ref": "main", - "type": "commit", - "pretty": "< a7bab85513ded97c500399daacf3a39de1fc1378 RSC: Patch vite when running setup command (#9192)", - "hash": "a7bab85513ded97c500399daacf3a39de1fc1378", - "message": "RSC: Patch vite when running setup command (#9192)", - "pr": "9192" - }, - { - "line": "< a436b1cfe82b0ce53baadc0149a5d2831928135b RSC: Support 'use client' in 3pp packages (#9191)", - "ref": "main", - "type": "commit", - "pretty": "< a436b1cfe82b0ce53baadc0149a5d2831928135b RSC: Support 'use client' in 3pp packages (#9191)", - "hash": "a436b1cfe82b0ce53baadc0149a5d2831928135b", - "message": "RSC: Support 'use client' in 3pp packages (#9191)", - "pr": "9191" - }, - { - "line": "< 1b52e3dda6b6e8fe5ea2522aaee8c687566912b7 chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "ref": "main", - "type": "commit", - "pretty": "< 1b52e3dda6b6e8fe5ea2522aaee8c687566912b7 chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "hash": "1b52e3dda6b6e8fe5ea2522aaee8c687566912b7", - "message": "chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "pr": "9180" - }, - { - "line": "< 1e23e0ab344ff5e70b69000babc9adf006a61d72 fix(deps): update storybook monorepo to v7.4.2 (#9185)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 1e23e0ab344ff5e70b69000babc9adf006a61d72 fix(deps): update storybook monorepo to v7.4.2 (#9185)\u001b[39m\u001b[49m", - "hash": "1e23e0ab344ff5e70b69000babc9adf006a61d72", - "message": "fix(deps): update storybook monorepo to v7.4.2 (#9185)", - "pr": "9185" - }, - { - "line": "< aa15dad514bec009f275921e048901bd4fd4c2f2 fix(deps): update prisma monorepo to v5.3.1 (#9187)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< aa15dad514bec009f275921e048901bd4fd4c2f2 fix(deps): update prisma monorepo to v5.3.1 (#9187)\u001b[39m\u001b[49m", - "hash": "aa15dad514bec009f275921e048901bd4fd4c2f2", - "message": "fix(deps): update prisma monorepo to v5.3.1 (#9187)", - "pr": "9187" - }, - { - "line": "< adddd23987b8a1003053280fafe772275e932217 chore(deps): update dependency lerna to v7.3.0 (#9186)", - "ref": "main", - "type": "commit", - "pretty": "< adddd23987b8a1003053280fafe772275e932217 chore(deps): update dependency lerna to v7.3.0 (#9186)", - "hash": "adddd23987b8a1003053280fafe772275e932217", - "message": "chore(deps): update dependency lerna to v7.3.0 (#9186)", - "pr": "9186" - }, - { - "line": "< 842d24566fc83623278bf00fe8e2a57f04f31573 fix(deps): update dependency fastify to v4.23.2 (#9184)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 842d24566fc83623278bf00fe8e2a57f04f31573 fix(deps): update dependency fastify to v4.23.2 (#9184)\u001b[39m\u001b[49m", - "hash": "842d24566fc83623278bf00fe8e2a57f04f31573", - "message": "fix(deps): update dependency fastify to v4.23.2 (#9184)", - "pr": "9184" - }, - { - "line": "< 552eec353a72f426b384263c530eb052601c12ac fix(deps): update dependency @fastify/static to v6.11.1 (#9182)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 552eec353a72f426b384263c530eb052601c12ac fix(deps): update dependency @fastify/static to v6.11.1 (#9182)\u001b[39m\u001b[49m", - "hash": "552eec353a72f426b384263c530eb052601c12ac", - "message": "fix(deps): update dependency @fastify/static to v6.11.1 (#9182)", - "pr": "9182" - }, - { - "line": "< dc86db59dcc18e8e711f9f1a0d5196060de7dbbb fix(babel): use caret to specify some package versions (#9174)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< dc86db59dcc18e8e711f9f1a0d5196060de7dbbb fix(babel): use caret to specify some package versions (#9174)\u001b[39m\u001b[49m", - "hash": "dc86db59dcc18e8e711f9f1a0d5196060de7dbbb", - "message": "fix(babel): use caret to specify some package versions (#9174)", - "pr": "9174" - }, - { - "line": "< 91fb06b378ea2b156f0cb619033021f4b116a6a7 Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "ref": "main", - "type": "commit", - "pretty": "< 91fb06b378ea2b156f0cb619033021f4b116a6a7 Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "hash": "91fb06b378ea2b156f0cb619033021f4b116a6a7", - "message": "Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "pr": "9173" - }, - { - "line": "< 9d63d080a69f1428bb2b961690ecb09eaee64edd RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "ref": "main", - "type": "commit", - "pretty": "< 9d63d080a69f1428bb2b961690ecb09eaee64edd RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "hash": "9d63d080a69f1428bb2b961690ecb09eaee64edd", - "message": "RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "pr": "9164" - }, - { - "line": "< b8ce4efbd2dea27a01133741994ec3c4f1db9c38 fix(deps): update dependency fastify to v4.23.1 (#9167)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< b8ce4efbd2dea27a01133741994ec3c4f1db9c38 fix(deps): update dependency fastify to v4.23.1 (#9167)\u001b[39m\u001b[49m", - "hash": "b8ce4efbd2dea27a01133741994ec3c4f1db9c38", - "message": "fix(deps): update dependency fastify to v4.23.1 (#9167)", - "pr": "9167" - }, - { - "line": "< 08870babd04bdfaa735f645603de0d5c515d66c2 chore(ci): undo changes to test project stories (#9166)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 08870babd04bdfaa735f645603de0d5c515d66c2 chore(ci): undo changes to test project stories (#9166)\u001b[39m\u001b[49m", - "hash": "08870babd04bdfaa735f645603de0d5c515d66c2", - "message": "chore(ci): undo changes to test project stories (#9166)", - "pr": "9166" - }, - { - "line": "< 49e6221dc8789b87af05ae75002506368a8e9391 fix(deps): update jest monorepo to v29.7.0 (#9163)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 49e6221dc8789b87af05ae75002506368a8e9391 fix(deps): update jest monorepo to v29.7.0 (#9163)\u001b[39m\u001b[49m", - "hash": "49e6221dc8789b87af05ae75002506368a8e9391", - "message": "fix(deps): update jest monorepo to v29.7.0 (#9163)", - "pr": "9163" - }, - { - "line": "< 208bce31a64fdf7d1991f0b98f3e90017ae14f21 chore(deps): update babel monorepo (#9144)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 208bce31a64fdf7d1991f0b98f3e90017ae14f21 chore(deps): update babel monorepo (#9144)\u001b[39m\u001b[49m", - "hash": "208bce31a64fdf7d1991f0b98f3e90017ae14f21", - "message": "chore(deps): update babel monorepo (#9144)", - "pr": "9144" - }, - { - "line": "< f40d11b379ac53967e2e35d8480c54ba0ba2a8e2 fix(deps): update dependency fastify to v4.23.0 (#9160)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< f40d11b379ac53967e2e35d8480c54ba0ba2a8e2 fix(deps): update dependency fastify to v4.23.0 (#9160)\u001b[39m\u001b[49m", - "hash": "f40d11b379ac53967e2e35d8480c54ba0ba2a8e2", - "message": "fix(deps): update dependency fastify to v4.23.0 (#9160)", - "pr": "9160" - }, - { - "line": "< a089495bbe3a2e11875ff5071d1745dc104c6918 fix(deps): update dependency react-hook-form to v7.46.1 (#9162)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a089495bbe3a2e11875ff5071d1745dc104c6918 fix(deps): update dependency react-hook-form to v7.46.1 (#9162)\u001b[39m\u001b[49m", - "hash": "a089495bbe3a2e11875ff5071d1745dc104c6918", - "message": "fix(deps): update dependency react-hook-form to v7.46.1 (#9162)", - "pr": "9162" - }, - { - "line": "< 2b056c6da66e115d61929cb8b3f91932ebcc1d72 fix(deps): update dependency msw to v1.3.0 (#9161)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2b056c6da66e115d61929cb8b3f91932ebcc1d72 fix(deps): update dependency msw to v1.3.0 (#9161)\u001b[39m\u001b[49m", - "hash": "2b056c6da66e115d61929cb8b3f91932ebcc1d72", - "message": "fix(deps): update dependency msw to v1.3.0 (#9161)", - "pr": "9161" - }, - { - "line": "< 15bb687eb63c22d6592a10d075d6786761643533 fix(deps): update storybook monorepo to v7.4.1 (#9159)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 15bb687eb63c22d6592a10d075d6786761643533 fix(deps): update storybook monorepo to v7.4.1 (#9159)\u001b[39m\u001b[49m", - "hash": "15bb687eb63c22d6592a10d075d6786761643533", - "message": "fix(deps): update storybook monorepo to v7.4.1 (#9159)", - "pr": "9159" - }, - { - "line": "< 9257e3944fe1f49a3e9bd39a1f076c02134de28c RSC: Decode RSF args from request (#9157)", - "ref": "main", - "type": "commit", - "pretty": "< 9257e3944fe1f49a3e9bd39a1f076c02134de28c RSC: Decode RSF args from request (#9157)", - "hash": "9257e3944fe1f49a3e9bd39a1f076c02134de28c", - "message": "RSC: Decode RSF args from request (#9157)", - "pr": "9157" - }, - { - "line": "< c46bb67a75c4f78b4cbd5d744f52937a567f0e43 RSC: RSF aka Server Actions (#9155)", - "ref": "main", - "type": "commit", - "pretty": "< c46bb67a75c4f78b4cbd5d744f52937a567f0e43 RSC: RSF aka Server Actions (#9155)", - "hash": "c46bb67a75c4f78b4cbd5d744f52937a567f0e43", - "message": "RSC: RSF aka Server Actions (#9155)", - "pr": "9155" - }, - { - "line": "< d3475cd7041b20106bf73968a1d59dcae611afcd RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "ref": "main", - "type": "commit", - "pretty": "< d3475cd7041b20106bf73968a1d59dcae611afcd RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "hash": "d3475cd7041b20106bf73968a1d59dcae611afcd", - "message": "RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "pr": "9154" - }, - { - "line": "< ee334bcf08f760cdfe26c03e7d65dc7da2f76281 RSC: Work around an issue in Rollup (#9153)", - "ref": "main", - "type": "commit", - "pretty": "< ee334bcf08f760cdfe26c03e7d65dc7da2f76281 RSC: Work around an issue in Rollup (#9153)", - "hash": "ee334bcf08f760cdfe26c03e7d65dc7da2f76281", - "message": "RSC: Work around an issue in Rollup (#9153)", - "pr": "9153" - }, - { - "line": "< 6af5356c4a964e0b46935edf6c66c8a6593ab7b9 fix(deps): update dependency nodemailer to v6.9.5 (#9145)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 6af5356c4a964e0b46935edf6c66c8a6593ab7b9 fix(deps): update dependency nodemailer to v6.9.5 (#9145)\u001b[39m\u001b[49m", - "hash": "6af5356c4a964e0b46935edf6c66c8a6593ab7b9", - "message": "fix(deps): update dependency nodemailer to v6.9.5 (#9145)", - "pr": "9145" - }, - { - "line": "< d9404187472ba951c6f1b4b3fd78af4c87683e7f fix(deps): update opentelemetry-js monorepo (#9147)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< d9404187472ba951c6f1b4b3fd78af4c87683e7f fix(deps): update opentelemetry-js monorepo (#9147)\u001b[39m\u001b[49m", - "hash": "d9404187472ba951c6f1b4b3fd78af4c87683e7f", - "message": "fix(deps): update opentelemetry-js monorepo (#9147)", - "pr": "9147" - }, - { - "line": "< 33db0478dcab02ae05ea8d926d1a1e0d89076309 chore(deps): update dependency typescript to v5.2.2 (#9128)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 33db0478dcab02ae05ea8d926d1a1e0d89076309 chore(deps): update dependency typescript to v5.2.2 (#9128)\u001b[39m\u001b[49m", - "hash": "33db0478dcab02ae05ea8d926d1a1e0d89076309", - "message": "chore(deps): update dependency typescript to v5.2.2 (#9128)", - "pr": "9128" - }, - { - "line": "< 7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)\u001b[39m\u001b[49m", - "hash": "7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec", - "message": "fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)", - "pr": "9126" - }, - { - "line": "< 0cc790a6b48a448119b85d4dd7c5453ec792d890 fix(deps): update dependency @fastify/static to v6.11.0 (#9129)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 0cc790a6b48a448119b85d4dd7c5453ec792d890 fix(deps): update dependency @fastify/static to v6.11.0 (#9129)\u001b[39m\u001b[49m", - "hash": "0cc790a6b48a448119b85d4dd7c5453ec792d890", - "message": "fix(deps): update dependency @fastify/static to v6.11.0 (#9129)", - "pr": "9129" - }, - { - "line": "< 9e932fba52d43aa4c1d981b52e64678e8172db6c fix(deps): update dependency core-js to v3.32.2 (#9125)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 9e932fba52d43aa4c1d981b52e64678e8172db6c fix(deps): update dependency core-js to v3.32.2 (#9125)\u001b[39m\u001b[49m", - "hash": "9e932fba52d43aa4c1d981b52e64678e8172db6c", - "message": "fix(deps): update dependency core-js to v3.32.2 (#9125)", - "pr": "9125" - }, - { - "line": "< c01ae41211aed94c51cfd9754532e402487f9734 fix(deps): update dependency fastify to v4.22.2 (#9124)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< c01ae41211aed94c51cfd9754532e402487f9734 fix(deps): update dependency fastify to v4.22.2 (#9124)\u001b[39m\u001b[49m", - "hash": "c01ae41211aed94c51cfd9754532e402487f9734", - "message": "fix(deps): update dependency fastify to v4.22.2 (#9124)", - "pr": "9124" - }, - { - "line": "< 7dcdf19b25ad0e4dd97e884c01ce956ad6497de7 fix(deps): update dependency @apollo/client to v3.8.3 (#9123)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 7dcdf19b25ad0e4dd97e884c01ce956ad6497de7 fix(deps): update dependency @apollo/client to v3.8.3 (#9123)\u001b[39m\u001b[49m", - "hash": "7dcdf19b25ad0e4dd97e884c01ce956ad6497de7", - "message": "fix(deps): update dependency @apollo/client to v3.8.3 (#9123)", - "pr": "9123" - }, - { - "line": "< 050a16925ab9768374e56f20792bbb2a026488bb Streaming: meta charSet=utf-8 (#9142)", - "ref": "main", - "type": "commit", - "pretty": "< 050a16925ab9768374e56f20792bbb2a026488bb Streaming: meta charSet=utf-8 (#9142)", - "hash": "050a16925ab9768374e56f20792bbb2a026488bb", - "message": "Streaming: meta charSet=utf-8 (#9142)", - "pr": "9142" - }, - { - "line": "< 634099091ade40b5bba9f86cd6fc573ae5be480c chore(tasks): Benchmark tests (#8578)", - "ref": "main", - "type": "commit", - "pretty": "< 634099091ade40b5bba9f86cd6fc573ae5be480c chore(tasks): Benchmark tests (#8578)", - "hash": "634099091ade40b5bba9f86cd6fc573ae5be480c", - "message": "chore(tasks): Benchmark tests (#8578)", - "pr": "8578" - }, - { - "line": "< 2897cd718e9a0eceaece63f58fa090e882c49c10 style(eslint): enable `@typescript-eslint/consistent-type-imports` (#9082)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2897cd718e9a0eceaece63f58fa090e882c49c10 style(eslint): enable `@typescript-eslint/consistent-type-imports` (#9082)\u001b[39m\u001b[49m", - "hash": "2897cd718e9a0eceaece63f58fa090e882c49c10", - "message": "style(eslint): enable `@typescript-eslint/consistent-type-imports` (#9082)", - "pr": "9082" - }, - { - "line": "< ae11f69df494be05d33e558bfea328b751223f43 Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "ref": "main", - "type": "commit", - "pretty": "< ae11f69df494be05d33e558bfea328b751223f43 Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "hash": "ae11f69df494be05d33e558bfea328b751223f43", - "message": "Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "pr": "9134" - }, - { - "line": "< 0ff463f05dc1bba7797e3b178dcf788be2bcd028 Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 0ff463f05dc1bba7797e3b178dcf788be2bcd028 Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)\u001b[39m\u001b[49m", - "hash": "0ff463f05dc1bba7797e3b178dcf788be2bcd028", - "message": "Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)", - "pr": "9133" - }, - { - "line": "< 7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2 RSC: Don't set the react-server condition for client builds (#9132)", - "ref": "main", - "type": "commit", - "pretty": "< 7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2 RSC: Don't set the react-server condition for client builds (#9132)", - "hash": "7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2", - "message": "RSC: Don't set the react-server condition for client builds (#9132)", - "pr": "9132" - }, - { - "line": "< e90ae0cb2b06165f8886602b3644c5dfd32d98b1 fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< e90ae0cb2b06165f8886602b3644c5dfd32d98b1 fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)\u001b[39m\u001b[49m", - "hash": "e90ae0cb2b06165f8886602b3644c5dfd32d98b1", - "message": "fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)", - "pr": "9065" - }, - { - "line": "< 93f28064032842d909de971d42f3d1259eb52413 fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 93f28064032842d909de971d42f3d1259eb52413 fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)\u001b[39m\u001b[49m", - "hash": "93f28064032842d909de971d42f3d1259eb52413", - "message": "fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)", - "pr": "9114" - }, - { - "line": "< ed8a87d98d8c3e5dad23ac3e2143b46a201194dc chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "ref": "main", - "type": "commit", - "pretty": "< ed8a87d98d8c3e5dad23ac3e2143b46a201194dc chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "hash": "ed8a87d98d8c3e5dad23ac3e2143b46a201194dc", - "message": "chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "pr": "9029" - }, - { - "line": "< 80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153 chore(deps): update dependency postcss to v8.4.29 (#9109)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153 chore(deps): update dependency postcss to v8.4.29 (#9109)\u001b[39m\u001b[49m", - "hash": "80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153", - "message": "chore(deps): update dependency postcss to v8.4.29 (#9109)", - "pr": "9109" - }, - { - "line": "< 0c23f67708b286d1e923e4d93aaba238edf66bb3 Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "ref": "main", - "type": "commit", - "pretty": "< 0c23f67708b286d1e923e4d93aaba238edf66bb3 Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "hash": "0c23f67708b286d1e923e4d93aaba238edf66bb3", - "message": "Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "pr": "9115" - }, - { - "line": "< 8d0ab16aa1c39f1526e4213211608805735f6974 fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "ref": "main", - "type": "commit", - "pretty": "< 8d0ab16aa1c39f1526e4213211608805735f6974 fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "hash": "8d0ab16aa1c39f1526e4213211608805735f6974", - "message": "fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "pr": "9113" - }, - { - "line": "< 89f0303f2d3ebf8c3fb8a09611066230fd560a4c feat: Mailer packages and studio tooling updates (#9058)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 89f0303f2d3ebf8c3fb8a09611066230fd560a4c feat: Mailer packages and studio tooling updates (#9058)\u001b[39m\u001b[49m", - "hash": "89f0303f2d3ebf8c3fb8a09611066230fd560a4c", - "message": "feat: Mailer packages and studio tooling updates (#9058)", - "pr": "9058" - }, - { - "line": "< d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8 chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "ref": "main", - "type": "commit", - "pretty": "< d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8 chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "hash": "d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8", - "message": "chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "pr": "9021" - }, - { - "line": "< 2b8a5558c6d88f37346346c5f9db2cdd0073f83f feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "ref": "main", - "type": "commit", - "pretty": "< 2b8a5558c6d88f37346346c5f9db2cdd0073f83f feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "hash": "2b8a5558c6d88f37346346c5f9db2cdd0073f83f", - "message": "feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "pr": "9106" - }, - { - "line": "< 2f49ac90349e2ddd793e0adeaf00967abfd54912 chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "ref": "main", - "type": "commit", - "pretty": "< 2f49ac90349e2ddd793e0adeaf00967abfd54912 chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "hash": "2f49ac90349e2ddd793e0adeaf00967abfd54912", - "message": "chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "pr": "9100" - }, - { - "line": "< 2cc76e697d7976ccdd61803ab6503663f25c9250 chore(cli): make `@redwoodjs/cli-data-migrate` package size smaller (#9085)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2cc76e697d7976ccdd61803ab6503663f25c9250 chore(cli): make `@redwoodjs/cli-data-migrate` package size smaller (#9085)\u001b[39m\u001b[49m", - "hash": "2cc76e697d7976ccdd61803ab6503663f25c9250", - "message": "chore(cli): make `@redwoodjs/cli-data-migrate` package size smaller (#9085)", - "pr": "9085" - }, - { - "line": "< c55f1c56b3b3279089784f3c388829ca3438e1e1 chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "ref": "main", - "type": "commit", - "pretty": "< c55f1c56b3b3279089784f3c388829ca3438e1e1 chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "hash": "c55f1c56b3b3279089784f3c388829ca3438e1e1", - "message": "chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "pr": "9103" - }, - { - "line": "< 65acc365f05e2862d50aa86aaf2cd1377137b105 chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "ref": "main", - "type": "commit", - "pretty": "< 65acc365f05e2862d50aa86aaf2cd1377137b105 chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "hash": "65acc365f05e2862d50aa86aaf2cd1377137b105", - "message": "chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "pr": "9102" - }, - { - "line": "< 029fa48c4186ec820704c666a9c31da448a2f7c4 chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "ref": "main", - "type": "commit", - "pretty": "< 029fa48c4186ec820704c666a9c31da448a2f7c4 chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "hash": "029fa48c4186ec820704c666a9c31da448a2f7c4", - "message": "chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "pr": "9101" - }, - { - "line": "< 8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7 Fix yarn lint warnings regarding {} (#9099)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7 Fix yarn lint warnings regarding {} (#9099)\u001b[39m\u001b[49m", - "hash": "8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7", - "message": "Fix yarn lint warnings regarding {} (#9099)", - "pr": "9099" - }, - { - "line": "< 52fc187a3c609db9e05dc3d68dd2857f68209d0b chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "ref": "main", - "type": "commit", - "pretty": "< 52fc187a3c609db9e05dc3d68dd2857f68209d0b chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "hash": "52fc187a3c609db9e05dc3d68dd2857f68209d0b", - "message": "chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "pr": "9098" - }, - { - "line": "< 069101b7ca1115d021a20f4d9b80e9b10107df24 feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "ref": "main", - "type": "commit", - "pretty": "< 069101b7ca1115d021a20f4d9b80e9b10107df24 feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "hash": "069101b7ca1115d021a20f4d9b80e9b10107df24", - "message": "feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "pr": "9074" - }, - { - "line": "< 4f2791acdcce6058dd7421eb575f09d5c929459b chore(deps): update babel monorepo (#9090)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 4f2791acdcce6058dd7421eb575f09d5c929459b chore(deps): update babel monorepo (#9090)\u001b[39m\u001b[49m", - "hash": "4f2791acdcce6058dd7421eb575f09d5c929459b", - "message": "chore(deps): update babel monorepo (#9090)", - "pr": "9090" - }, - { - "line": "< 5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2 fix(deps): update jest monorepo (#9092)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2 fix(deps): update jest monorepo (#9092)\u001b[39m\u001b[49m", - "hash": "5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2", - "message": "fix(deps): update jest monorepo (#9092)", - "pr": "9092" - }, - { - "line": "< b5fdb47bef8396550f2c53f81f614a7d311b7a9b fix(deps): update storybook monorepo to v7.4.0 (#9095)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< b5fdb47bef8396550f2c53f81f614a7d311b7a9b fix(deps): update storybook monorepo to v7.4.0 (#9095)\u001b[39m\u001b[49m", - "hash": "b5fdb47bef8396550f2c53f81f614a7d311b7a9b", - "message": "fix(deps): update storybook monorepo to v7.4.0 (#9095)", - "pr": "9095" - }, - { - "line": "< 9958845199de1d58166da7b8f7ad745421851565 fix(deps): update dependency msw to v1.2.5 (#9091)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 9958845199de1d58166da7b8f7ad745421851565 fix(deps): update dependency msw to v1.2.5 (#9091)\u001b[39m\u001b[49m", - "hash": "9958845199de1d58166da7b8f7ad745421851565", - "message": "fix(deps): update dependency msw to v1.2.5 (#9091)", - "pr": "9091" - }, - { - "line": "< bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805 fix(deps): update dependency fastify to v4.22.0 (#9093)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805 fix(deps): update dependency fastify to v4.22.0 (#9093)\u001b[39m\u001b[49m", - "hash": "bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805", - "message": "fix(deps): update dependency fastify to v4.22.0 (#9093)", - "pr": "9093" - }, - { - "line": "< f3ce9b1efee76c795d8aa076eaa123b2480ae800 fix(deps): update dependency graphql to v16.8.0 (#9094)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< f3ce9b1efee76c795d8aa076eaa123b2480ae800 fix(deps): update dependency graphql to v16.8.0 (#9094)\u001b[39m\u001b[49m", - "hash": "f3ce9b1efee76c795d8aa076eaa123b2480ae800", - "message": "fix(deps): update dependency graphql to v16.8.0 (#9094)", - "pr": "9094" - }, - { - "line": "< ae4f5cab8fac1394baeea237c1e62dc3fc09e118 chore(deps): update dependency firebase to v10.3.0 (#9086)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< ae4f5cab8fac1394baeea237c1e62dc3fc09e118 chore(deps): update dependency firebase to v10.3.0 (#9086)\u001b[39m\u001b[49m", - "hash": "ae4f5cab8fac1394baeea237c1e62dc3fc09e118", - "message": "chore(deps): update dependency firebase to v10.3.0 (#9086)", - "pr": "9086" - }, - { - "line": "< 3c6b845948e334c9afc686512aab4a89d254e8c8 fix(deps): update prisma monorepo to v5.2.0 (#9064)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 3c6b845948e334c9afc686512aab4a89d254e8c8 fix(deps): update prisma monorepo to v5.2.0 (#9064)\u001b[39m\u001b[49m", - "hash": "3c6b845948e334c9afc686512aab4a89d254e8c8", - "message": "fix(deps): update prisma monorepo to v5.2.0 (#9064)", - "pr": "9064" - }, - { - "line": "< fbd39919afc75bd7fc7082e22fcb4f650c916771 chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "ref": "main", - "type": "commit", - "pretty": "< fbd39919afc75bd7fc7082e22fcb4f650c916771 chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "hash": "fbd39919afc75bd7fc7082e22fcb4f650c916771", - "message": "chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "pr": "9089" - }, - { - "line": "< 944a93b1df26afa6749fe34c12f1e334385aef6a chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "ref": "main", - "type": "commit", - "pretty": "< 944a93b1df26afa6749fe34c12f1e334385aef6a chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "hash": "944a93b1df26afa6749fe34c12f1e334385aef6a", - "message": "chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "pr": "9088" - }, - { - "line": "< a0834d4d94507deae107893c603f25ad8fa11f97 fix(data-migrate): add `dotenv-defaults`, properly plug into CLI (#9087)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a0834d4d94507deae107893c603f25ad8fa11f97 fix(data-migrate): add `dotenv-defaults`, properly plug into CLI (#9087)\u001b[39m\u001b[49m", - "hash": "a0834d4d94507deae107893c603f25ad8fa11f97", - "message": "fix(data-migrate): add `dotenv-defaults`, properly plug into CLI (#9087)", - "pr": "9087" - }, - { - "line": "< 2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb fix(data-migrate): add missing dependency `@redwoodjs/cli-helpers`", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb fix(data-migrate): add missing dependency `@redwoodjs/cli-helpers`\u001b[39m\u001b[49m", - "hash": "2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb", - "message": "fix(data-migrate): add missing dependency `@redwoodjs/cli-helpers`" - }, - { - "line": "< f4ea5138b51f44c02b0085d4a335508aa502ab34 feat(cli): lazy install data migrate and make it runnable on its own (#8572)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< f4ea5138b51f44c02b0085d4a335508aa502ab34 feat(cli): lazy install data migrate and make it runnable on its own (#8572)\u001b[39m\u001b[49m", - "hash": "f4ea5138b51f44c02b0085d4a335508aa502ab34", - "message": "feat(cli): lazy install data migrate and make it runnable on its own (#8572)", - "pr": "8572" - }, - { - "line": "< 8ca4b0201a6129efb50414c014bc910b3572625e chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "ref": "main", - "type": "commit", - "pretty": "< 8ca4b0201a6129efb50414c014bc910b3572625e chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "hash": "8ca4b0201a6129efb50414c014bc910b3572625e", - "message": "chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "pr": "9042" - }, - { - "line": "< a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3 feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3 feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)\u001b[39m\u001b[49m", - "hash": "a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3", - "message": "feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)", - "pr": "9009" - }, - { - "line": "< c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "ref": "main", - "type": "commit", - "pretty": "< c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "hash": "c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb", - "message": "feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "pr": "9047" - }, - { - "line": "< 8aa76885fdbdd603e2afdeef4d0abba1d0e75477 fix(deps): update storybook monorepo to v7.3.2 (#9020)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8aa76885fdbdd603e2afdeef4d0abba1d0e75477 fix(deps): update storybook monorepo to v7.3.2 (#9020)\u001b[39m\u001b[49m", - "hash": "8aa76885fdbdd603e2afdeef4d0abba1d0e75477", - "message": "fix(deps): update storybook monorepo to v7.3.2 (#9020)", - "pr": "9020" - }, - { - "line": "< bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7 Create releaseCommits.json", - "ref": "main", - "type": "commit", - "pretty": "< bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7 Create releaseCommits.json", - "hash": "bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7", - "message": "Create releaseCommits.json" - }, - { - "line": "< 33995028445e817a35b669dd1889c20f91a3f8d4 chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 33995028445e817a35b669dd1889c20f91a3f8d4 chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)\u001b[39m\u001b[49m", - "hash": "33995028445e817a35b669dd1889c20f91a3f8d4", - "message": "chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)", - "pr": "8912" - }, - { - "line": "< fc26cd76c67bd2ef329b7369ca400c8b8063b5da chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< fc26cd76c67bd2ef329b7369ca400c8b8063b5da chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)\u001b[39m\u001b[49m", - "hash": "fc26cd76c67bd2ef329b7369ca400c8b8063b5da", - "message": "chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)", - "pr": "8913" - }, - { - "line": "< 8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18 fix(deps): update jest monorepo to v29.6.2 (#8984)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18 fix(deps): update jest monorepo to v29.6.2 (#8984)\u001b[39m\u001b[49m", - "hash": "8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18", - "message": "fix(deps): update jest monorepo to v29.6.2 (#8984)", - "pr": "8984" - }, - { - "line": "< 0ec4c5e15488d73e95d08d3965968797ecd23315 chore(deps): update babel monorepo to v7.22.10 (#9016)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 0ec4c5e15488d73e95d08d3965968797ecd23315 chore(deps): update babel monorepo to v7.22.10 (#9016)\u001b[39m\u001b[49m", - "hash": "0ec4c5e15488d73e95d08d3965968797ecd23315", - "message": "chore(deps): update babel monorepo to v7.22.10 (#9016)", - "pr": "9016" - }, - { - "line": "< c89e1364c7e9af541438f3274ddf1f92401dc2c8 exp(streaming): Allow SSR with experimental apollo client (#9038)", - "ref": "main", - "type": "commit", - "pretty": "< c89e1364c7e9af541438f3274ddf1f92401dc2c8 exp(streaming): Allow SSR with experimental apollo client (#9038)", - "hash": "c89e1364c7e9af541438f3274ddf1f92401dc2c8", - "message": "exp(streaming): Allow SSR with experimental apollo client (#9038)", - "pr": "9038" - }, - { - "line": "< 865c9085bf1519c6b2f153b7497ef005d42f3bad manually bump web-server package version", - "ref": "main", - "type": "commit", - "pretty": "< 865c9085bf1519c6b2f153b7497ef005d42f3bad manually bump web-server package version", - "hash": "865c9085bf1519c6b2f153b7497ef005d42f3bad", - "message": "manually bump web-server package version" - }, - { - "line": "| < a38d6f08df99db83239008b75d2bf6f569ea0609 fix(deps): update dependency core-js to v3.32.0 (#9030)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m| < a38d6f08df99db83239008b75d2bf6f569ea0609 fix(deps): update dependency core-js to v3.32.0 (#9030)\u001b[39m\u001b[49m", - "hash": "a38d6f08df99db83239008b75d2bf6f569ea0609", - "message": "fix(deps): update dependency core-js to v3.32.0 (#9030)", - "pr": "9030" - } - ], - "chore": [ - { - "line": "< 7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39 Merge branch 'release/patch/v6.0.7'", - "ref": "main", - "type": "chore", - "pretty": "\u001b[2m< 7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39 Merge branch 'release/patch/v6.0.7'\u001b[22m", - "hash": "7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39", - "message": "Merge branch 'release/patch/v6.0.7'" - } - ], - "ui": [ - { - "line": "| o a2fcc1618a70a77570943e4bc85d29ea055ab507 chore(deps): update dependency @playwright/test to v1.37.0 (#9028)", - "ref": "main", - "type": "ui", - "pretty": "\u001b[2m| o a2fcc1618a70a77570943e4bc85d29ea055ab507 chore(deps): update dependency @playwright/test to v1.37.0 (#9028)\u001b[22m" - }, - { - "line": "o 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7", - "ref": "main", - "type": "ui", - "pretty": "\u001b[2mo 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7\u001b[22m" - } - ], - "main": [ - { - "line": "< 045531957188895e3ee42c3815030445bb59b87f fix(cli): Exit with non-zero exit code when `yarn rw g types` has errors (#9280)", - "ref": "main", - "type": "commit", - "pretty": "< 045531957188895e3ee42c3815030445bb59b87f fix(cli): Exit with non-zero exit code when `yarn rw g types` has errors (#9280)", - "hash": "045531957188895e3ee42c3815030445bb59b87f", - "message": "fix(cli): Exit with non-zero exit code when `yarn rw g types` has errors (#9280)", - "pr": "9280" - }, - { - "line": "< c8c8a3b1e3c599a610b3856b71078357e70e44be RSC: vite externalConditions (#9333)", - "ref": "main", - "type": "commit", - "pretty": "< c8c8a3b1e3c599a610b3856b71078357e70e44be RSC: vite externalConditions (#9333)", - "hash": "c8c8a3b1e3c599a610b3856b71078357e70e44be", - "message": "RSC: vite externalConditions (#9333)", - "pr": "9333" - }, - { - "line": "< 45065da262c1a57d67b0013ea7168c0fca687dc6 RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "ref": "main", - "type": "commit", - "pretty": "< 45065da262c1a57d67b0013ea7168c0fca687dc6 RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "hash": "45065da262c1a57d67b0013ea7168c0fca687dc6", - "message": "RSC: test-project-rsa: Fix TS type error in onSend (#9332)", - "pr": "9332" - }, - { - "line": "< 18c5d961f203820facc8a42eebe2d382ed7ff7dd RSC: Implement RSC worker (#9331)", - "ref": "main", - "type": "commit", - "pretty": "< 18c5d961f203820facc8a42eebe2d382ed7ff7dd RSC: Implement RSC worker (#9331)", - "hash": "18c5d961f203820facc8a42eebe2d382ed7ff7dd", - "message": "RSC: Implement RSC worker (#9331)", - "pr": "9331" - }, - { - "line": "< 433d8ef99b0025cf2a5d6faceef303be6089f155 RSC: createRscRequestHandler (#9330)", - "ref": "main", - "type": "commit", - "pretty": "< 433d8ef99b0025cf2a5d6faceef303be6089f155 RSC: createRscRequestHandler (#9330)", - "hash": "433d8ef99b0025cf2a5d6faceef303be6089f155", - "message": "RSC: createRscRequestHandler (#9330)", - "pr": "9330" - }, - { - "line": "< 104c8e289340310dd4cba7d8cc20666a9abb85e6 RSA smoke-test (#9327)", - "ref": "main", - "type": "commit", - "pretty": "< 104c8e289340310dd4cba7d8cc20666a9abb85e6 RSA smoke-test (#9327)", - "hash": "104c8e289340310dd4cba7d8cc20666a9abb85e6", - "message": "RSA smoke-test (#9327)", - "pr": "9327" - }, - { - "line": "< f157c3ec9c76848716311c928a047138775279a3 RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "ref": "main", - "type": "commit", - "pretty": "< f157c3ec9c76848716311c928a047138775279a3 RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "hash": "f157c3ec9c76848716311c928a047138775279a3", - "message": "RSC e2e scripts: Fix console.log text. Change local test path (#9326)", - "pr": "9326" - }, - { - "line": "< daaa1998837bdb6eaa42d9160292e781fadb3dc8 fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "ref": "main", - "type": "commit", - "pretty": "< daaa1998837bdb6eaa42d9160292e781fadb3dc8 fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "hash": "daaa1998837bdb6eaa42d9160292e781fadb3dc8", - "message": "fix(stream-ssr): Cancel the timeout when the react stream has finished (#9317)", - "pr": "9317" - }, - { - "line": "< e2cf25db2518833ad0b833c5e6b5308557ecc7fd fix(ssr-build): Generate document in ssr build too! (#9310)", - "ref": "main", - "type": "commit", - "pretty": "< e2cf25db2518833ad0b833c5e6b5308557ecc7fd fix(ssr-build): Generate document in ssr build too! (#9310)", - "hash": "e2cf25db2518833ad0b833c5e6b5308557ecc7fd", - "message": "fix(ssr-build): Generate document in ssr build too! (#9310)", - "pr": "9310" - }, - { - "line": "< 1ed2b5b477a6b08a0d4731160591bebfaaeac34b feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "ref": "main", - "type": "commit", - "pretty": "< 1ed2b5b477a6b08a0d4731160591bebfaaeac34b feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "hash": "1ed2b5b477a6b08a0d4731160591bebfaaeac34b", - "message": "feat(streaming-ssr): Various bug fixes and migrate to FetchAPI/Web streams (#9295)", - "pr": "9295" - }, - { - "line": "< 79a7e0163b53318af7ae0eb20b63ce8b118d64c7 Conditionally guarantee cell success data (#9037)", - "ref": "main", - "type": "commit", - "pretty": "< 79a7e0163b53318af7ae0eb20b63ce8b118d64c7 Conditionally guarantee cell success data (#9037)", - "hash": "79a7e0163b53318af7ae0eb20b63ce8b118d64c7", - "message": "Conditionally guarantee cell success data (#9037)", - "pr": "9037" - }, - { - "line": "< 18555d0e196cfc69ed322e24cafeb2d228773ae1 RSC: Smoke test (#9194)", - "ref": "main", - "type": "commit", - "pretty": "< 18555d0e196cfc69ed322e24cafeb2d228773ae1 RSC: Smoke test (#9194)", - "hash": "18555d0e196cfc69ed322e24cafeb2d228773ae1", - "message": "RSC: Smoke test (#9194)", - "pr": "9194" - }, - { - "line": "< 27d33d3e29276d0d5c61d604034d65b4c6ae5f65 RSC: Handle Windows paths in clientEntries (#9233)", - "ref": "main", - "type": "commit", - "pretty": "< 27d33d3e29276d0d5c61d604034d65b4c6ae5f65 RSC: Handle Windows paths in clientEntries (#9233)", - "hash": "27d33d3e29276d0d5c61d604034d65b4c6ae5f65", - "message": "RSC: Handle Windows paths in clientEntries (#9233)", - "pr": "9233" - }, - { - "line": "< 5921359bf6482873df1bf9d9df51f3eaaba9c566 chore(crwa): remove React `prop-types` package (#9206)", - "ref": "main", - "type": "commit", - "pretty": "< 5921359bf6482873df1bf9d9df51f3eaaba9c566 chore(crwa): remove React `prop-types` package (#9206)", - "hash": "5921359bf6482873df1bf9d9df51f3eaaba9c566", - "message": "chore(crwa): remove React `prop-types` package (#9206)", - "pr": "9206" - }, - { - "line": "< 4d06556988b8f1da0a9ecd7d6b0e133707e22921 smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "ref": "main", - "type": "commit", - "pretty": "< 4d06556988b8f1da0a9ecd7d6b0e133707e22921 smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "hash": "4d06556988b8f1da0a9ecd7d6b0e133707e22921", - "message": "smoke-tests: Fix red squiggles (type import, * as) (#9193)", - "pr": "9193" - }, - { - "line": "< 83d180fc477b17bf33c7673f010b68e9f7d5e0a2 RSC: Check if index.html has already been updated during setup (#9197)", - "ref": "main", - "type": "commit", - "pretty": "< 83d180fc477b17bf33c7673f010b68e9f7d5e0a2 RSC: Check if index.html has already been updated during setup (#9197)", - "hash": "83d180fc477b17bf33c7673f010b68e9f7d5e0a2", - "message": "RSC: Check if index.html has already been updated during setup (#9197)", - "pr": "9197" - }, - { - "line": "< e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4 RSC: Use react/experimental types (#9196)", - "ref": "main", - "type": "commit", - "pretty": "< e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4 RSC: Use react/experimental types (#9196)", - "hash": "e2c14ebf9cb4f62d3d5eed63becd4cbf587485a4", - "message": "RSC: Use react/experimental types (#9196)", - "pr": "9196" - }, - { - "line": "< a7bab85513ded97c500399daacf3a39de1fc1378 RSC: Patch vite when running setup command (#9192)", - "ref": "main", - "type": "commit", - "pretty": "< a7bab85513ded97c500399daacf3a39de1fc1378 RSC: Patch vite when running setup command (#9192)", - "hash": "a7bab85513ded97c500399daacf3a39de1fc1378", - "message": "RSC: Patch vite when running setup command (#9192)", - "pr": "9192" - }, - { - "line": "< a436b1cfe82b0ce53baadc0149a5d2831928135b RSC: Support 'use client' in 3pp packages (#9191)", - "ref": "main", - "type": "commit", - "pretty": "< a436b1cfe82b0ce53baadc0149a5d2831928135b RSC: Support 'use client' in 3pp packages (#9191)", - "hash": "a436b1cfe82b0ce53baadc0149a5d2831928135b", - "message": "RSC: Support 'use client' in 3pp packages (#9191)", - "pr": "9191" - }, - { - "line": "< 1b52e3dda6b6e8fe5ea2522aaee8c687566912b7 chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "ref": "main", - "type": "commit", - "pretty": "< 1b52e3dda6b6e8fe5ea2522aaee8c687566912b7 chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "hash": "1b52e3dda6b6e8fe5ea2522aaee8c687566912b7", - "message": "chore(deps): update dependency esbuild to v0.19.3 (#9180)", - "pr": "9180" - }, - { - "line": "< adddd23987b8a1003053280fafe772275e932217 chore(deps): update dependency lerna to v7.3.0 (#9186)", - "ref": "main", - "type": "commit", - "pretty": "< adddd23987b8a1003053280fafe772275e932217 chore(deps): update dependency lerna to v7.3.0 (#9186)", - "hash": "adddd23987b8a1003053280fafe772275e932217", - "message": "chore(deps): update dependency lerna to v7.3.0 (#9186)", - "pr": "9186" - }, - { - "line": "< 91fb06b378ea2b156f0cb619033021f4b116a6a7 Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "ref": "main", - "type": "commit", - "pretty": "< 91fb06b378ea2b156f0cb619033021f4b116a6a7 Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "hash": "91fb06b378ea2b156f0cb619033021f4b116a6a7", - "message": "Allow resuming rebuild-test-project-fixture at a specific sub step (#9173)", - "pr": "9173" - }, - { - "line": "< 9d63d080a69f1428bb2b961690ecb09eaee64edd RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "ref": "main", - "type": "commit", - "pretty": "< 9d63d080a69f1428bb2b961690ecb09eaee64edd RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "hash": "9d63d080a69f1428bb2b961690ecb09eaee64edd", - "message": "RSC: react-18.3.0-canary-bbc8530ed-20230912 (#9164)", - "pr": "9164" - }, - { - "line": "< 9257e3944fe1f49a3e9bd39a1f076c02134de28c RSC: Decode RSF args from request (#9157)", - "ref": "main", - "type": "commit", - "pretty": "< 9257e3944fe1f49a3e9bd39a1f076c02134de28c RSC: Decode RSF args from request (#9157)", - "hash": "9257e3944fe1f49a3e9bd39a1f076c02134de28c", - "message": "RSC: Decode RSF args from request (#9157)", - "pr": "9157" - }, - { - "line": "< c46bb67a75c4f78b4cbd5d744f52937a567f0e43 RSC: RSF aka Server Actions (#9155)", - "ref": "main", - "type": "commit", - "pretty": "< c46bb67a75c4f78b4cbd5d744f52937a567f0e43 RSC: RSF aka Server Actions (#9155)", - "hash": "c46bb67a75c4f78b4cbd5d744f52937a567f0e43", - "message": "RSC: RSF aka Server Actions (#9155)", - "pr": "9155" - }, - { - "line": "< d3475cd7041b20106bf73968a1d59dcae611afcd RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "ref": "main", - "type": "commit", - "pretty": "< d3475cd7041b20106bf73968a1d59dcae611afcd RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "hash": "d3475cd7041b20106bf73968a1d59dcae611afcd", - "message": "RSC: Make code and execution easier to follow. Improve error handling. (#9154)", - "pr": "9154" - }, - { - "line": "< ee334bcf08f760cdfe26c03e7d65dc7da2f76281 RSC: Work around an issue in Rollup (#9153)", - "ref": "main", - "type": "commit", - "pretty": "< ee334bcf08f760cdfe26c03e7d65dc7da2f76281 RSC: Work around an issue in Rollup (#9153)", - "hash": "ee334bcf08f760cdfe26c03e7d65dc7da2f76281", - "message": "RSC: Work around an issue in Rollup (#9153)", - "pr": "9153" - }, - { - "line": "< 050a16925ab9768374e56f20792bbb2a026488bb Streaming: meta charSet=utf-8 (#9142)", - "ref": "main", - "type": "commit", - "pretty": "< 050a16925ab9768374e56f20792bbb2a026488bb Streaming: meta charSet=utf-8 (#9142)", - "hash": "050a16925ab9768374e56f20792bbb2a026488bb", - "message": "Streaming: meta charSet=utf-8 (#9142)", - "pr": "9142" - }, - { - "line": "< 634099091ade40b5bba9f86cd6fc573ae5be480c chore(tasks): Benchmark tests (#8578)", - "ref": "main", - "type": "commit", - "pretty": "< 634099091ade40b5bba9f86cd6fc573ae5be480c chore(tasks): Benchmark tests (#8578)", - "hash": "634099091ade40b5bba9f86cd6fc573ae5be480c", - "message": "chore(tasks): Benchmark tests (#8578)", - "pr": "8578" - }, - { - "line": "< ae11f69df494be05d33e558bfea328b751223f43 Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "ref": "main", - "type": "commit", - "pretty": "< ae11f69df494be05d33e558bfea328b751223f43 Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "hash": "ae11f69df494be05d33e558bfea328b751223f43", - "message": "Streaming SSR: Fix RWJS_EXP_SSR_GRAPHQL_ENDPOINT logic (#9134)", - "pr": "9134" - }, - { - "line": "< 7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2 RSC: Don't set the react-server condition for client builds (#9132)", - "ref": "main", - "type": "commit", - "pretty": "< 7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2 RSC: Don't set the react-server condition for client builds (#9132)", - "hash": "7ee61534f9131657b920f2d95b3d0e8d7a6e4ab2", - "message": "RSC: Don't set the react-server condition for client builds (#9132)", - "pr": "9132" - }, - { - "line": "< ed8a87d98d8c3e5dad23ac3e2143b46a201194dc chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "ref": "main", - "type": "commit", - "pretty": "< ed8a87d98d8c3e5dad23ac3e2143b46a201194dc chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "hash": "ed8a87d98d8c3e5dad23ac3e2143b46a201194dc", - "message": "chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "pr": "9029" - }, - { - "line": "< 0c23f67708b286d1e923e4d93aaba238edf66bb3 Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "ref": "main", - "type": "commit", - "pretty": "< 0c23f67708b286d1e923e4d93aaba238edf66bb3 Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "hash": "0c23f67708b286d1e923e4d93aaba238edf66bb3", - "message": "Streaming fe server: bind to 0.0.0.0 in prod (#9115)", - "pr": "9115" - }, - { - "line": "< 8d0ab16aa1c39f1526e4213211608805735f6974 fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "ref": "main", - "type": "commit", - "pretty": "< 8d0ab16aa1c39f1526e4213211608805735f6974 fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "hash": "8d0ab16aa1c39f1526e4213211608805735f6974", - "message": "fix(meta): Remove duplicated title and meta attributes (possible edge cases) (#9113)", - "pr": "9113" - }, - { - "line": "< d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8 chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "ref": "main", - "type": "commit", - "pretty": "< d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8 chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "hash": "d7560ec9c1b9b7d6feff3f6a952a49793e6ac8f8", - "message": "chore(deps): update dependency @apollo/experimental-nextjs-app-support to v0.4.2 (#9021)", - "pr": "9021" - }, - { - "line": "< 2b8a5558c6d88f37346346c5f9db2cdd0073f83f feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "ref": "main", - "type": "commit", - "pretty": "< 2b8a5558c6d88f37346346c5f9db2cdd0073f83f feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "hash": "2b8a5558c6d88f37346346c5f9db2cdd0073f83f", - "message": "feat(Cell Suspense): Allow Cells to not Suspend (#9106)", - "pr": "9106" - }, - { - "line": "< 2f49ac90349e2ddd793e0adeaf00967abfd54912 chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "ref": "main", - "type": "commit", - "pretty": "< 2f49ac90349e2ddd793e0adeaf00967abfd54912 chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "hash": "2f49ac90349e2ddd793e0adeaf00967abfd54912", - "message": "chore(deps): bump @apollo/server from 4.7.5 to 4.9.3 (#9100)", - "pr": "9100" - }, - { - "line": "< c55f1c56b3b3279089784f3c388829ca3438e1e1 chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "ref": "main", - "type": "commit", - "pretty": "< c55f1c56b3b3279089784f3c388829ca3438e1e1 chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "hash": "c55f1c56b3b3279089784f3c388829ca3438e1e1", - "message": "chore(deps): bump apollo-server-core from 2.25.3 to 2.26.2 in /__fixtures__/example-todo-main (#9103)", - "pr": "9103" - }, - { - "line": "< 65acc365f05e2862d50aa86aaf2cd1377137b105 chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "ref": "main", - "type": "commit", - "pretty": "< 65acc365f05e2862d50aa86aaf2cd1377137b105 chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "hash": "65acc365f05e2862d50aa86aaf2cd1377137b105", - "message": "chore(deps): bump @apollo/server from 4.9.2 to 4.9.3 in /__fixtures__/example-todo-main (#9102)", - "pr": "9102" - }, - { - "line": "< 029fa48c4186ec820704c666a9c31da448a2f7c4 chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "ref": "main", - "type": "commit", - "pretty": "< 029fa48c4186ec820704c666a9c31da448a2f7c4 chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "hash": "029fa48c4186ec820704c666a9c31da448a2f7c4", - "message": "chore(deps): bump apollo-server-core from 2.11.0 to 2.26.2 in /__fixtures__/example-todo-main-with-errors (#9101)", - "pr": "9101" - }, - { - "line": "< 52fc187a3c609db9e05dc3d68dd2857f68209d0b chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "ref": "main", - "type": "commit", - "pretty": "< 52fc187a3c609db9e05dc3d68dd2857f68209d0b chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "hash": "52fc187a3c609db9e05dc3d68dd2857f68209d0b", - "message": "chore(deps): update dependency @playwright/test to v1.37.1 (#9098)", - "pr": "9098" - }, - { - "line": "< 069101b7ca1115d021a20f4d9b80e9b10107df24 feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "ref": "main", - "type": "commit", - "pretty": "< 069101b7ca1115d021a20f4d9b80e9b10107df24 feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "hash": "069101b7ca1115d021a20f4d9b80e9b10107df24", - "message": "feat(streaming): Make Cells render on the server with useBackgroundQuery and useReadQuery (#9074)", - "pr": "9074" - }, - { - "line": "< fbd39919afc75bd7fc7082e22fcb4f650c916771 chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "ref": "main", - "type": "commit", - "pretty": "< fbd39919afc75bd7fc7082e22fcb4f650c916771 chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "hash": "fbd39919afc75bd7fc7082e22fcb4f650c916771", - "message": "chore(deps): bump @adobe/css-tools from 4.1.0 to 4.3.1 in /__fixtures__/example-todo-main (#9089)", - "pr": "9089" - }, - { - "line": "< 944a93b1df26afa6749fe34c12f1e334385aef6a chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "ref": "main", - "type": "commit", - "pretty": "< 944a93b1df26afa6749fe34c12f1e334385aef6a chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "hash": "944a93b1df26afa6749fe34c12f1e334385aef6a", - "message": "chore(deps): bump @adobe/css-tools from 4.2.0 to 4.3.1 (#9088)", - "pr": "9088" - }, - { - "line": "< 8ca4b0201a6129efb50414c014bc910b3572625e chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "ref": "main", - "type": "commit", - "pretty": "< 8ca4b0201a6129efb50414c014bc910b3572625e chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "hash": "8ca4b0201a6129efb50414c014bc910b3572625e", - "message": "chore(deps): bump protobufjs from 6.11.3 to 6.11.4 (#9042)", - "pr": "9042" - }, - { - "line": "< c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "ref": "main", - "type": "commit", - "pretty": "< c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "hash": "c5ba4888a87e5ea0b11ff5d2768d13f47f672eeb", - "message": "feat(streaming): Cleanup/Unify streaming dev and prod server (#9047)", - "pr": "9047" - }, - { - "line": "< bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7 Create releaseCommits.json", - "ref": "main", - "type": "commit", - "pretty": "< bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7 Create releaseCommits.json", - "hash": "bb3ef0bd6034dfa7c6a38efcdabb444eea9665c7", - "message": "Create releaseCommits.json" - }, - { - "line": "< c89e1364c7e9af541438f3274ddf1f92401dc2c8 exp(streaming): Allow SSR with experimental apollo client (#9038)", - "ref": "main", - "type": "commit", - "pretty": "< c89e1364c7e9af541438f3274ddf1f92401dc2c8 exp(streaming): Allow SSR with experimental apollo client (#9038)", - "hash": "c89e1364c7e9af541438f3274ddf1f92401dc2c8", - "message": "exp(streaming): Allow SSR with experimental apollo client (#9038)", - "pr": "9038" - }, - { - "line": "< 865c9085bf1519c6b2f153b7497ef005d42f3bad manually bump web-server package version", - "ref": "main", - "type": "commit", - "pretty": "< 865c9085bf1519c6b2f153b7497ef005d42f3bad manually bump web-server package version", - "hash": "865c9085bf1519c6b2f153b7497ef005d42f3bad", - "message": "manually bump web-server package version" - }, - { - "line": "< 7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39 Merge branch 'release/patch/v6.0.7'", - "ref": "main", - "type": "chore", - "pretty": "\u001b[2m< 7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39 Merge branch 'release/patch/v6.0.7'\u001b[22m", - "hash": "7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39", - "message": "Merge branch 'release/patch/v6.0.7'" - }, - { - "line": "| o a2fcc1618a70a77570943e4bc85d29ea055ab507 chore(deps): update dependency @playwright/test to v1.37.0 (#9028)", - "ref": "main", - "type": "ui", - "pretty": "\u001b[2m| o a2fcc1618a70a77570943e4bc85d29ea055ab507 chore(deps): update dependency @playwright/test to v1.37.0 (#9028)\u001b[22m" - }, - { - "line": "o 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7", - "ref": "main", - "type": "ui", - "pretty": "\u001b[2mo 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7\u001b[22m" - } - ], - "next": [ - { - "line": "< a070dac21fce536a2ea49a10de010d3690a4e6f6 chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a070dac21fce536a2ea49a10de010d3690a4e6f6 chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)\u001b[39m\u001b[49m", - "hash": "a070dac21fce536a2ea49a10de010d3690a4e6f6", - "message": "chore(deps): bump undici from 5.22.1 to 5.26.3 (#9307)", - "pr": "9307" - }, - { - "line": "< 01f6565ce058273fc2c0389f04c3f93b9a9749bb fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 01f6565ce058273fc2c0389f04c3f93b9a9749bb fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)\u001b[39m\u001b[49m", - "hash": "01f6565ce058273fc2c0389f04c3f93b9a9749bb", - "message": "fix(babel): Fix opentelemetry api wrapping and allow it to be disabled (#9298)", - "pr": "9298" - }, - { - "line": "< 97b235fd343efdc8fa267e7d6ca07b5b4cb06465 chore(api-server): remove server survey tests in CI (#9348)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 97b235fd343efdc8fa267e7d6ca07b5b4cb06465 chore(api-server): remove server survey tests in CI (#9348)\u001b[39m\u001b[49m", - "hash": "97b235fd343efdc8fa267e7d6ca07b5b4cb06465", - "message": "chore(api-server): remove server survey tests in CI (#9348)", - "pr": "9348" - }, - { - "line": "< be2cb77b228d01394e13e216aa2b37190fbe2518 chore(deps): update babel monorepo to v7.23.2 (#9344)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< be2cb77b228d01394e13e216aa2b37190fbe2518 chore(deps): update babel monorepo to v7.23.2 (#9344)\u001b[39m\u001b[49m", - "hash": "be2cb77b228d01394e13e216aa2b37190fbe2518", - "message": "chore(deps): update babel monorepo to v7.23.2 (#9344)", - "pr": "9344" - }, - { - "line": "< 73579f84378d8dfd64437406eb9add63b010ef09 chore: increase server test timeout, fix `yarn build:clean` (#9336)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 73579f84378d8dfd64437406eb9add63b010ef09 chore: increase server test timeout, fix `yarn build:clean` (#9336)\u001b[39m\u001b[49m", - "hash": "73579f84378d8dfd64437406eb9add63b010ef09", - "message": "chore: increase server test timeout, fix `yarn build:clean` (#9336)", - "pr": "9336" - }, - { - "line": "< a12d411c37f780a9b1cd2f7ee0429808f72387e0 feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a12d411c37f780a9b1cd2f7ee0429808f72387e0 feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)\u001b[39m\u001b[49m", - "hash": "a12d411c37f780a9b1cd2f7ee0429808f72387e0", - "message": "feature: Adds utility functions to add envars and update Redwood toml for plugin packages to cli helpers for use in simplifying CLI setup commands (#9324)", - "pr": "9324" - }, - { - "line": "< 8e676c83f6f0838982826afbf2a241219a26f62c Update all GitHub actions to run on Node 20 (#9334)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8e676c83f6f0838982826afbf2a241219a26f62c Update all GitHub actions to run on Node 20 (#9334)\u001b[39m\u001b[49m", - "hash": "8e676c83f6f0838982826afbf2a241219a26f62c", - "message": "Update all GitHub actions to run on Node 20 (#9334)", - "pr": "9334" - }, - { - "line": "< 35c0eeba90187d60b92c975ee202362035fcb6c2 chore(api-server): improve tests (#9325)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 35c0eeba90187d60b92c975ee202362035fcb6c2 chore(api-server): improve tests (#9325)\u001b[39m\u001b[49m", - "hash": "35c0eeba90187d60b92c975ee202362035fcb6c2", - "message": "chore(api-server): improve tests (#9325)", - "pr": "9325" - }, - { - "line": "< 6d4fd3eed2006db5b63e7dd21fae6820f3d7e954 Upgrade to vite v4.5.0 (#9328)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 6d4fd3eed2006db5b63e7dd21fae6820f3d7e954 Upgrade to vite v4.5.0 (#9328)\u001b[39m\u001b[49m", - "hash": "6d4fd3eed2006db5b63e7dd21fae6820f3d7e954", - "message": "Upgrade to vite v4.5.0 (#9328)", - "pr": "9328" - }, - { - "line": "< 43b68459c0057c20a91163ce39e25a35fc7e48cf fix(deps): update prisma monorepo to v5.4.2 (#9294)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 43b68459c0057c20a91163ce39e25a35fc7e48cf fix(deps): update prisma monorepo to v5.4.2 (#9294)\u001b[39m\u001b[49m", - "hash": "43b68459c0057c20a91163ce39e25a35fc7e48cf", - "message": "fix(deps): update prisma monorepo to v5.4.2 (#9294)", - "pr": "9294" - }, - { - "line": "< ba296b40d90292100bb765d58f664d2e27949a63 fix(deps): update apollo graphql packages (#9292)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< ba296b40d90292100bb765d58f664d2e27949a63 fix(deps): update apollo graphql packages (#9292)\u001b[39m\u001b[49m", - "hash": "ba296b40d90292100bb765d58f664d2e27949a63", - "message": "fix(deps): update apollo graphql packages (#9292)", - "pr": "9292" - }, - { - "line": "< 282b8343ff5884b1373164097d2f1ed96024b646 fix(deps): update dependency @fastify/static to v6.11.2 (#9202)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 282b8343ff5884b1373164097d2f1ed96024b646 fix(deps): update dependency @fastify/static to v6.11.2 (#9202)\u001b[39m\u001b[49m", - "hash": "282b8343ff5884b1373164097d2f1ed96024b646", - "message": "fix(deps): update dependency @fastify/static to v6.11.2 (#9202)", - "pr": "9202" - }, - { - "line": "< 4bc0925af2529ef831fd650e951c45a5cebe4421 chore(deps): update dependency firebase to v10.4.0 (#9203)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 4bc0925af2529ef831fd650e951c45a5cebe4421 chore(deps): update dependency firebase to v10.4.0 (#9203)\u001b[39m\u001b[49m", - "hash": "4bc0925af2529ef831fd650e951c45a5cebe4421", - "message": "chore(deps): update dependency firebase to v10.4.0 (#9203)", - "pr": "9203" - }, - { - "line": "< 229bd4b241aea267aefae4d2f2983e6ebe063cef fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 229bd4b241aea267aefae4d2f2983e6ebe063cef fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)\u001b[39m\u001b[49m", - "hash": "229bd4b241aea267aefae4d2f2983e6ebe063cef", - "message": "fix(serverless): move project-config to auth-dbauth-api dependencies (#9281)", - "pr": "9281" - }, - { - "line": "< 58a7a8fe7399f721408d4d1a7050a25f3ef81cef chore(deps): update babel monorepo (#9254)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 58a7a8fe7399f721408d4d1a7050a25f3ef81cef chore(deps): update babel monorepo (#9254)\u001b[39m\u001b[49m", - "hash": "58a7a8fe7399f721408d4d1a7050a25f3ef81cef", - "message": "chore(deps): update babel monorepo (#9254)", - "pr": "9254" - }, - { - "line": "< 8ddafad958463fdd9b8585c290c86bb843c64861 fix(deps): update dependency vite to v4.4.11 (#9255)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8ddafad958463fdd9b8585c290c86bb843c64861 fix(deps): update dependency vite to v4.4.11 (#9255)\u001b[39m\u001b[49m", - "hash": "8ddafad958463fdd9b8585c290c86bb843c64861", - "message": "fix(deps): update dependency vite to v4.4.11 (#9255)", - "pr": "9255" - }, - { - "line": "< 6f3ee2541a523e707610bc01ff1b107b1122c566 chore(deps): update dependency postcss to v8.4.31 [security] (#9260)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 6f3ee2541a523e707610bc01ff1b107b1122c566 chore(deps): update dependency postcss to v8.4.31 [security] (#9260)\u001b[39m\u001b[49m", - "hash": "6f3ee2541a523e707610bc01ff1b107b1122c566", - "message": "chore(deps): update dependency postcss to v8.4.31 [security] (#9260)", - "pr": "9260" - }, - { - "line": "< 8dc7bdb556305a584181517a726d788f9868a99b fix(deps): update storybook monorepo to v7.4.6 (#9256)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8dc7bdb556305a584181517a726d788f9868a99b fix(deps): update storybook monorepo to v7.4.6 (#9256)\u001b[39m\u001b[49m", - "hash": "8dc7bdb556305a584181517a726d788f9868a99b", - "message": "fix(deps): update storybook monorepo to v7.4.6 (#9256)", - "pr": "9256" - }, - { - "line": "< cd37907d3d6bda782cb73fa38dfe3f810ed39e75 dbAuth: Unique session cookie name per port (#9248)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< cd37907d3d6bda782cb73fa38dfe3f810ed39e75 dbAuth: Unique session cookie name per port (#9248)\u001b[39m\u001b[49m", - "hash": "cd37907d3d6bda782cb73fa38dfe3f810ed39e75", - "message": "dbAuth: Unique session cookie name per port (#9248)", - "pr": "9248" - }, - { - "line": "< 08a67208947c2c48365ecddeee32d0ce43c368fb feat: add experimental docker setup command (#9024)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 08a67208947c2c48365ecddeee32d0ce43c368fb feat: add experimental docker setup command (#9024)\u001b[39m\u001b[49m", - "hash": "08a67208947c2c48365ecddeee32d0ce43c368fb", - "message": "feat: add experimental docker setup command (#9024)", - "pr": "9024" - }, - { - "line": "< 53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de Include @types/react as devDep in projects (#9250)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de Include @types/react as devDep in projects (#9250)\u001b[39m\u001b[49m", - "hash": "53d86c95a4d58fb58ae4a2edd4c43a6b9d25e5de", - "message": "Include @types/react as devDep in projects (#9250)", - "pr": "9250" - }, - { - "line": "< 8c22d4deac32d29b72844f8de3ca72f9bac10a03 graphql possibleTypes: Fix formatting (#9239)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8c22d4deac32d29b72844f8de3ca72f9bac10a03 graphql possibleTypes: Fix formatting (#9239)\u001b[39m\u001b[49m", - "hash": "8c22d4deac32d29b72844f8de3ca72f9bac10a03", - "message": "graphql possibleTypes: Fix formatting (#9239)", - "pr": "9239" - }, - { - "line": "< 61f0f51d8557c591e0432ffe9b75520c0df86ed1 chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 61f0f51d8557c591e0432ffe9b75520c0df86ed1 chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)\u001b[39m\u001b[49m", - "hash": "61f0f51d8557c591e0432ffe9b75520c0df86ed1", - "message": "chore(deps): update dependency @clerk/clerk-react to v4.25.1 (#9212)", - "pr": "9212" - }, - { - "line": "< 12aa24adc31f1719152ab1d8dc445959a2a43a6e fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 12aa24adc31f1719152ab1d8dc445959a2a43a6e fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)\u001b[39m\u001b[49m", - "hash": "12aa24adc31f1719152ab1d8dc445959a2a43a6e", - "message": "fix(deps): update dependency @clerk/clerk-sdk-node to v4.12.6 (#9214)", - "pr": "9214" - }, - { - "line": "< 817eba4501b985424dcdce11068509452d0d3449 fix(deps): update dependency graphql to v16.8.1 [security] (#9228)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 817eba4501b985424dcdce11068509452d0d3449 fix(deps): update dependency graphql to v16.8.1 [security] (#9228)\u001b[39m\u001b[49m", - "hash": "817eba4501b985424dcdce11068509452d0d3449", - "message": "fix(deps): update dependency graphql to v16.8.1 [security] (#9228)", - "pr": "9228" - }, - { - "line": "< a886bf5703e3d92e70e478272757fd5951f38fe7 chore(deps): update dependency @clerk/types to v3.52.0 (#9213)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a886bf5703e3d92e70e478272757fd5951f38fe7 chore(deps): update dependency @clerk/types to v3.52.0 (#9213)\u001b[39m\u001b[49m", - "hash": "a886bf5703e3d92e70e478272757fd5951f38fe7", - "message": "chore(deps): update dependency @clerk/types to v3.52.0 (#9213)", - "pr": "9213" - }, - { - "line": "< 2cbdf11a07d1b142065c9e1464574287f9625253 feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2cbdf11a07d1b142065c9e1464574287f9625253 feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)\u001b[39m\u001b[49m", - "hash": "2cbdf11a07d1b142065c9e1464574287f9625253", - "message": "feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)", - "pr": "9140" - }, - { - "line": "< a8336bf0b9c533f45b867b6af401b8ba68e27a5e fix(deps): update storybook monorepo to v7.4.3 (#9211)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a8336bf0b9c533f45b867b6af401b8ba68e27a5e fix(deps): update storybook monorepo to v7.4.3 (#9211)\u001b[39m\u001b[49m", - "hash": "a8336bf0b9c533f45b867b6af401b8ba68e27a5e", - "message": "fix(deps): update storybook monorepo to v7.4.3 (#9211)", - "pr": "9211" - }, - { - "line": "< 9f69fe6357ced942c23a02e066a604679750b9e9 fix(deps): update dependency @apollo/client to v3.8.4 (#9208)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 9f69fe6357ced942c23a02e066a604679750b9e9 fix(deps): update dependency @apollo/client to v3.8.4 (#9208)\u001b[39m\u001b[49m", - "hash": "9f69fe6357ced942c23a02e066a604679750b9e9", - "message": "fix(deps): update dependency @apollo/client to v3.8.4 (#9208)", - "pr": "9208" - }, - { - "line": "< ed4ef0894139af0a4305c77bf1fdf92f9dc5511f chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< ed4ef0894139af0a4305c77bf1fdf92f9dc5511f chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)\u001b[39m\u001b[49m", - "hash": "ed4ef0894139af0a4305c77bf1fdf92f9dc5511f", - "message": "chore(deps): update dependency react-error-boundary to v4.0.11 (#9181)", - "pr": "9181" - }, - { - "line": "< 74d36b75091551bfec46933fbe7746d772ecce19 feat(mailer): Resend handler (#9175)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 74d36b75091551bfec46933fbe7746d772ecce19 feat(mailer): Resend handler (#9175)\u001b[39m\u001b[49m", - "hash": "74d36b75091551bfec46933fbe7746d772ecce19", - "message": "feat(mailer): Resend handler (#9175)", - "pr": "9175" - }, - { - "line": "< 30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9 chore: bump babel packages' versions (#9200)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9 chore: bump babel packages' versions (#9200)\u001b[39m\u001b[49m", - "hash": "30c4e00e7da21c2b0bc3f710dfa3c48fa93659d9", - "message": "chore: bump babel packages' versions (#9200)", - "pr": "9200" - }, - { - "line": "< 1e23e0ab344ff5e70b69000babc9adf006a61d72 fix(deps): update storybook monorepo to v7.4.2 (#9185)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 1e23e0ab344ff5e70b69000babc9adf006a61d72 fix(deps): update storybook monorepo to v7.4.2 (#9185)\u001b[39m\u001b[49m", - "hash": "1e23e0ab344ff5e70b69000babc9adf006a61d72", - "message": "fix(deps): update storybook monorepo to v7.4.2 (#9185)", - "pr": "9185" - }, - { - "line": "< aa15dad514bec009f275921e048901bd4fd4c2f2 fix(deps): update prisma monorepo to v5.3.1 (#9187)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< aa15dad514bec009f275921e048901bd4fd4c2f2 fix(deps): update prisma monorepo to v5.3.1 (#9187)\u001b[39m\u001b[49m", - "hash": "aa15dad514bec009f275921e048901bd4fd4c2f2", - "message": "fix(deps): update prisma monorepo to v5.3.1 (#9187)", - "pr": "9187" - }, - { - "line": "< 842d24566fc83623278bf00fe8e2a57f04f31573 fix(deps): update dependency fastify to v4.23.2 (#9184)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 842d24566fc83623278bf00fe8e2a57f04f31573 fix(deps): update dependency fastify to v4.23.2 (#9184)\u001b[39m\u001b[49m", - "hash": "842d24566fc83623278bf00fe8e2a57f04f31573", - "message": "fix(deps): update dependency fastify to v4.23.2 (#9184)", - "pr": "9184" - }, - { - "line": "< 552eec353a72f426b384263c530eb052601c12ac fix(deps): update dependency @fastify/static to v6.11.1 (#9182)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 552eec353a72f426b384263c530eb052601c12ac fix(deps): update dependency @fastify/static to v6.11.1 (#9182)\u001b[39m\u001b[49m", - "hash": "552eec353a72f426b384263c530eb052601c12ac", - "message": "fix(deps): update dependency @fastify/static to v6.11.1 (#9182)", - "pr": "9182" - }, - { - "line": "< dc86db59dcc18e8e711f9f1a0d5196060de7dbbb fix(babel): use caret to specify some package versions (#9174)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< dc86db59dcc18e8e711f9f1a0d5196060de7dbbb fix(babel): use caret to specify some package versions (#9174)\u001b[39m\u001b[49m", - "hash": "dc86db59dcc18e8e711f9f1a0d5196060de7dbbb", - "message": "fix(babel): use caret to specify some package versions (#9174)", - "pr": "9174" - }, - { - "line": "< b8ce4efbd2dea27a01133741994ec3c4f1db9c38 fix(deps): update dependency fastify to v4.23.1 (#9167)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< b8ce4efbd2dea27a01133741994ec3c4f1db9c38 fix(deps): update dependency fastify to v4.23.1 (#9167)\u001b[39m\u001b[49m", - "hash": "b8ce4efbd2dea27a01133741994ec3c4f1db9c38", - "message": "fix(deps): update dependency fastify to v4.23.1 (#9167)", - "pr": "9167" - }, - { - "line": "< 08870babd04bdfaa735f645603de0d5c515d66c2 chore(ci): undo changes to test project stories (#9166)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 08870babd04bdfaa735f645603de0d5c515d66c2 chore(ci): undo changes to test project stories (#9166)\u001b[39m\u001b[49m", - "hash": "08870babd04bdfaa735f645603de0d5c515d66c2", - "message": "chore(ci): undo changes to test project stories (#9166)", - "pr": "9166" - }, - { - "line": "< 49e6221dc8789b87af05ae75002506368a8e9391 fix(deps): update jest monorepo to v29.7.0 (#9163)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 49e6221dc8789b87af05ae75002506368a8e9391 fix(deps): update jest monorepo to v29.7.0 (#9163)\u001b[39m\u001b[49m", - "hash": "49e6221dc8789b87af05ae75002506368a8e9391", - "message": "fix(deps): update jest monorepo to v29.7.0 (#9163)", - "pr": "9163" - }, - { - "line": "< 208bce31a64fdf7d1991f0b98f3e90017ae14f21 chore(deps): update babel monorepo (#9144)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 208bce31a64fdf7d1991f0b98f3e90017ae14f21 chore(deps): update babel monorepo (#9144)\u001b[39m\u001b[49m", - "hash": "208bce31a64fdf7d1991f0b98f3e90017ae14f21", - "message": "chore(deps): update babel monorepo (#9144)", - "pr": "9144" - }, - { - "line": "< f40d11b379ac53967e2e35d8480c54ba0ba2a8e2 fix(deps): update dependency fastify to v4.23.0 (#9160)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< f40d11b379ac53967e2e35d8480c54ba0ba2a8e2 fix(deps): update dependency fastify to v4.23.0 (#9160)\u001b[39m\u001b[49m", - "hash": "f40d11b379ac53967e2e35d8480c54ba0ba2a8e2", - "message": "fix(deps): update dependency fastify to v4.23.0 (#9160)", - "pr": "9160" - }, - { - "line": "< a089495bbe3a2e11875ff5071d1745dc104c6918 fix(deps): update dependency react-hook-form to v7.46.1 (#9162)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a089495bbe3a2e11875ff5071d1745dc104c6918 fix(deps): update dependency react-hook-form to v7.46.1 (#9162)\u001b[39m\u001b[49m", - "hash": "a089495bbe3a2e11875ff5071d1745dc104c6918", - "message": "fix(deps): update dependency react-hook-form to v7.46.1 (#9162)", - "pr": "9162" - }, - { - "line": "< 2b056c6da66e115d61929cb8b3f91932ebcc1d72 fix(deps): update dependency msw to v1.3.0 (#9161)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2b056c6da66e115d61929cb8b3f91932ebcc1d72 fix(deps): update dependency msw to v1.3.0 (#9161)\u001b[39m\u001b[49m", - "hash": "2b056c6da66e115d61929cb8b3f91932ebcc1d72", - "message": "fix(deps): update dependency msw to v1.3.0 (#9161)", - "pr": "9161" - }, - { - "line": "< 15bb687eb63c22d6592a10d075d6786761643533 fix(deps): update storybook monorepo to v7.4.1 (#9159)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 15bb687eb63c22d6592a10d075d6786761643533 fix(deps): update storybook monorepo to v7.4.1 (#9159)\u001b[39m\u001b[49m", - "hash": "15bb687eb63c22d6592a10d075d6786761643533", - "message": "fix(deps): update storybook monorepo to v7.4.1 (#9159)", - "pr": "9159" - }, - { - "line": "< 6af5356c4a964e0b46935edf6c66c8a6593ab7b9 fix(deps): update dependency nodemailer to v6.9.5 (#9145)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 6af5356c4a964e0b46935edf6c66c8a6593ab7b9 fix(deps): update dependency nodemailer to v6.9.5 (#9145)\u001b[39m\u001b[49m", - "hash": "6af5356c4a964e0b46935edf6c66c8a6593ab7b9", - "message": "fix(deps): update dependency nodemailer to v6.9.5 (#9145)", - "pr": "9145" - }, - { - "line": "< d9404187472ba951c6f1b4b3fd78af4c87683e7f fix(deps): update opentelemetry-js monorepo (#9147)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< d9404187472ba951c6f1b4b3fd78af4c87683e7f fix(deps): update opentelemetry-js monorepo (#9147)\u001b[39m\u001b[49m", - "hash": "d9404187472ba951c6f1b4b3fd78af4c87683e7f", - "message": "fix(deps): update opentelemetry-js monorepo (#9147)", - "pr": "9147" - }, - { - "line": "< 33db0478dcab02ae05ea8d926d1a1e0d89076309 chore(deps): update dependency typescript to v5.2.2 (#9128)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 33db0478dcab02ae05ea8d926d1a1e0d89076309 chore(deps): update dependency typescript to v5.2.2 (#9128)\u001b[39m\u001b[49m", - "hash": "33db0478dcab02ae05ea8d926d1a1e0d89076309", - "message": "chore(deps): update dependency typescript to v5.2.2 (#9128)", - "pr": "9128" - }, - { - "line": "< 7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)\u001b[39m\u001b[49m", - "hash": "7be03fc33f2994f1e712dfdd6ab0dfe8082c2dec", - "message": "fix(deps): update dependency fastify-raw-body to v4.2.2 (#9126)", - "pr": "9126" - }, - { - "line": "< 0cc790a6b48a448119b85d4dd7c5453ec792d890 fix(deps): update dependency @fastify/static to v6.11.0 (#9129)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 0cc790a6b48a448119b85d4dd7c5453ec792d890 fix(deps): update dependency @fastify/static to v6.11.0 (#9129)\u001b[39m\u001b[49m", - "hash": "0cc790a6b48a448119b85d4dd7c5453ec792d890", - "message": "fix(deps): update dependency @fastify/static to v6.11.0 (#9129)", - "pr": "9129" - }, - { - "line": "< 9e932fba52d43aa4c1d981b52e64678e8172db6c fix(deps): update dependency core-js to v3.32.2 (#9125)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 9e932fba52d43aa4c1d981b52e64678e8172db6c fix(deps): update dependency core-js to v3.32.2 (#9125)\u001b[39m\u001b[49m", - "hash": "9e932fba52d43aa4c1d981b52e64678e8172db6c", - "message": "fix(deps): update dependency core-js to v3.32.2 (#9125)", - "pr": "9125" - }, - { - "line": "< c01ae41211aed94c51cfd9754532e402487f9734 fix(deps): update dependency fastify to v4.22.2 (#9124)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< c01ae41211aed94c51cfd9754532e402487f9734 fix(deps): update dependency fastify to v4.22.2 (#9124)\u001b[39m\u001b[49m", - "hash": "c01ae41211aed94c51cfd9754532e402487f9734", - "message": "fix(deps): update dependency fastify to v4.22.2 (#9124)", - "pr": "9124" - }, - { - "line": "< 7dcdf19b25ad0e4dd97e884c01ce956ad6497de7 fix(deps): update dependency @apollo/client to v3.8.3 (#9123)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 7dcdf19b25ad0e4dd97e884c01ce956ad6497de7 fix(deps): update dependency @apollo/client to v3.8.3 (#9123)\u001b[39m\u001b[49m", - "hash": "7dcdf19b25ad0e4dd97e884c01ce956ad6497de7", - "message": "fix(deps): update dependency @apollo/client to v3.8.3 (#9123)", - "pr": "9123" - }, - { - "line": "< 2897cd718e9a0eceaece63f58fa090e882c49c10 style(eslint): enable `@typescript-eslint/consistent-type-imports` (#9082)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2897cd718e9a0eceaece63f58fa090e882c49c10 style(eslint): enable `@typescript-eslint/consistent-type-imports` (#9082)\u001b[39m\u001b[49m", - "hash": "2897cd718e9a0eceaece63f58fa090e882c49c10", - "message": "style(eslint): enable `@typescript-eslint/consistent-type-imports` (#9082)", - "pr": "9082" - }, - { - "line": "< 0ff463f05dc1bba7797e3b178dcf788be2bcd028 Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 0ff463f05dc1bba7797e3b178dcf788be2bcd028 Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)\u001b[39m\u001b[49m", - "hash": "0ff463f05dc1bba7797e3b178dcf788be2bcd028", - "message": "Support jsx/tsx on the api side (for mail templates, ai-jsx, etc) (#9133)", - "pr": "9133" - }, - { - "line": "< e90ae0cb2b06165f8886602b3644c5dfd32d98b1 fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< e90ae0cb2b06165f8886602b3644c5dfd32d98b1 fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)\u001b[39m\u001b[49m", - "hash": "e90ae0cb2b06165f8886602b3644c5dfd32d98b1", - "message": "fix(jest): Include RWJS_DEBUG_ENV in jest web env (#9065)", - "pr": "9065" - }, - { - "line": "< 93f28064032842d909de971d42f3d1259eb52413 fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 93f28064032842d909de971d42f3d1259eb52413 fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)\u001b[39m\u001b[49m", - "hash": "93f28064032842d909de971d42f3d1259eb52413", - "message": "fix(deps): update dependency @escape.tech/graphql-armor to v2.3.1 (#9114)", - "pr": "9114" - }, - { - "line": "< 80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153 chore(deps): update dependency postcss to v8.4.29 (#9109)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153 chore(deps): update dependency postcss to v8.4.29 (#9109)\u001b[39m\u001b[49m", - "hash": "80de2bcb4d24ef3ea508f75b2c5ad2a8e3c4c153", - "message": "chore(deps): update dependency postcss to v8.4.29 (#9109)", - "pr": "9109" - }, - { - "line": "< 89f0303f2d3ebf8c3fb8a09611066230fd560a4c feat: Mailer packages and studio tooling updates (#9058)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 89f0303f2d3ebf8c3fb8a09611066230fd560a4c feat: Mailer packages and studio tooling updates (#9058)\u001b[39m\u001b[49m", - "hash": "89f0303f2d3ebf8c3fb8a09611066230fd560a4c", - "message": "feat: Mailer packages and studio tooling updates (#9058)", - "pr": "9058" - }, - { - "line": "< 2cc76e697d7976ccdd61803ab6503663f25c9250 chore(cli): make `@redwoodjs/cli-data-migrate` package size smaller (#9085)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2cc76e697d7976ccdd61803ab6503663f25c9250 chore(cli): make `@redwoodjs/cli-data-migrate` package size smaller (#9085)\u001b[39m\u001b[49m", - "hash": "2cc76e697d7976ccdd61803ab6503663f25c9250", - "message": "chore(cli): make `@redwoodjs/cli-data-migrate` package size smaller (#9085)", - "pr": "9085" - }, - { - "line": "< 8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7 Fix yarn lint warnings regarding {} (#9099)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7 Fix yarn lint warnings regarding {} (#9099)\u001b[39m\u001b[49m", - "hash": "8afc6c0d10c4016cf3d1d7fcbb27eb0e42754be7", - "message": "Fix yarn lint warnings regarding {} (#9099)", - "pr": "9099" - }, - { - "line": "< 4f2791acdcce6058dd7421eb575f09d5c929459b chore(deps): update babel monorepo (#9090)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 4f2791acdcce6058dd7421eb575f09d5c929459b chore(deps): update babel monorepo (#9090)\u001b[39m\u001b[49m", - "hash": "4f2791acdcce6058dd7421eb575f09d5c929459b", - "message": "chore(deps): update babel monorepo (#9090)", - "pr": "9090" - }, - { - "line": "< 5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2 fix(deps): update jest monorepo (#9092)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2 fix(deps): update jest monorepo (#9092)\u001b[39m\u001b[49m", - "hash": "5ae083d9e0bd59b93c9af52ba5eb51f38407cdb2", - "message": "fix(deps): update jest monorepo (#9092)", - "pr": "9092" - }, - { - "line": "< b5fdb47bef8396550f2c53f81f614a7d311b7a9b fix(deps): update storybook monorepo to v7.4.0 (#9095)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< b5fdb47bef8396550f2c53f81f614a7d311b7a9b fix(deps): update storybook monorepo to v7.4.0 (#9095)\u001b[39m\u001b[49m", - "hash": "b5fdb47bef8396550f2c53f81f614a7d311b7a9b", - "message": "fix(deps): update storybook monorepo to v7.4.0 (#9095)", - "pr": "9095" - }, - { - "line": "< 9958845199de1d58166da7b8f7ad745421851565 fix(deps): update dependency msw to v1.2.5 (#9091)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 9958845199de1d58166da7b8f7ad745421851565 fix(deps): update dependency msw to v1.2.5 (#9091)\u001b[39m\u001b[49m", - "hash": "9958845199de1d58166da7b8f7ad745421851565", - "message": "fix(deps): update dependency msw to v1.2.5 (#9091)", - "pr": "9091" - }, - { - "line": "< bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805 fix(deps): update dependency fastify to v4.22.0 (#9093)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805 fix(deps): update dependency fastify to v4.22.0 (#9093)\u001b[39m\u001b[49m", - "hash": "bf999c67fc7cdc15dd8eb2d64faba0b6d59a8805", - "message": "fix(deps): update dependency fastify to v4.22.0 (#9093)", - "pr": "9093" - }, - { - "line": "< f3ce9b1efee76c795d8aa076eaa123b2480ae800 fix(deps): update dependency graphql to v16.8.0 (#9094)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< f3ce9b1efee76c795d8aa076eaa123b2480ae800 fix(deps): update dependency graphql to v16.8.0 (#9094)\u001b[39m\u001b[49m", - "hash": "f3ce9b1efee76c795d8aa076eaa123b2480ae800", - "message": "fix(deps): update dependency graphql to v16.8.0 (#9094)", - "pr": "9094" - }, - { - "line": "< ae4f5cab8fac1394baeea237c1e62dc3fc09e118 chore(deps): update dependency firebase to v10.3.0 (#9086)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< ae4f5cab8fac1394baeea237c1e62dc3fc09e118 chore(deps): update dependency firebase to v10.3.0 (#9086)\u001b[39m\u001b[49m", - "hash": "ae4f5cab8fac1394baeea237c1e62dc3fc09e118", - "message": "chore(deps): update dependency firebase to v10.3.0 (#9086)", - "pr": "9086" - }, - { - "line": "< 3c6b845948e334c9afc686512aab4a89d254e8c8 fix(deps): update prisma monorepo to v5.2.0 (#9064)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 3c6b845948e334c9afc686512aab4a89d254e8c8 fix(deps): update prisma monorepo to v5.2.0 (#9064)\u001b[39m\u001b[49m", - "hash": "3c6b845948e334c9afc686512aab4a89d254e8c8", - "message": "fix(deps): update prisma monorepo to v5.2.0 (#9064)", - "pr": "9064" - }, - { - "line": "< a0834d4d94507deae107893c603f25ad8fa11f97 fix(data-migrate): add `dotenv-defaults`, properly plug into CLI (#9087)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a0834d4d94507deae107893c603f25ad8fa11f97 fix(data-migrate): add `dotenv-defaults`, properly plug into CLI (#9087)\u001b[39m\u001b[49m", - "hash": "a0834d4d94507deae107893c603f25ad8fa11f97", - "message": "fix(data-migrate): add `dotenv-defaults`, properly plug into CLI (#9087)", - "pr": "9087" - }, - { - "line": "< 2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb fix(data-migrate): add missing dependency `@redwoodjs/cli-helpers`", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb fix(data-migrate): add missing dependency `@redwoodjs/cli-helpers`\u001b[39m\u001b[49m", - "hash": "2d6b93d2f7661025eb49ffe5321f9fef2d65d4eb", - "message": "fix(data-migrate): add missing dependency `@redwoodjs/cli-helpers`" - }, - { - "line": "< f4ea5138b51f44c02b0085d4a335508aa502ab34 feat(cli): lazy install data migrate and make it runnable on its own (#8572)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< f4ea5138b51f44c02b0085d4a335508aa502ab34 feat(cli): lazy install data migrate and make it runnable on its own (#8572)\u001b[39m\u001b[49m", - "hash": "f4ea5138b51f44c02b0085d4a335508aa502ab34", - "message": "feat(cli): lazy install data migrate and make it runnable on its own (#8572)", - "pr": "8572" - }, - { - "line": "< a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3 feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3 feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)\u001b[39m\u001b[49m", - "hash": "a13174a5b1b1fd84b0cee0a1d09851ffe86d7cf3", - "message": "feat: Support GraphQL Subscriptions in Apollo Client using SSE links (#9009)", - "pr": "9009" - }, - { - "line": "< 8aa76885fdbdd603e2afdeef4d0abba1d0e75477 fix(deps): update storybook monorepo to v7.3.2 (#9020)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8aa76885fdbdd603e2afdeef4d0abba1d0e75477 fix(deps): update storybook monorepo to v7.3.2 (#9020)\u001b[39m\u001b[49m", - "hash": "8aa76885fdbdd603e2afdeef4d0abba1d0e75477", - "message": "fix(deps): update storybook monorepo to v7.3.2 (#9020)", - "pr": "9020" - }, - { - "line": "< 33995028445e817a35b669dd1889c20f91a3f8d4 chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 33995028445e817a35b669dd1889c20f91a3f8d4 chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)\u001b[39m\u001b[49m", - "hash": "33995028445e817a35b669dd1889c20f91a3f8d4", - "message": "chore(deps): update dependency @auth0/auth0-spa-js to v2.1.1 (#8912)", - "pr": "8912" - }, - { - "line": "< fc26cd76c67bd2ef329b7369ca400c8b8063b5da chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< fc26cd76c67bd2ef329b7369ca400c8b8063b5da chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)\u001b[39m\u001b[49m", - "hash": "fc26cd76c67bd2ef329b7369ca400c8b8063b5da", - "message": "chore(deps): update dependency @azure/msal-browser to v2.38.1 (#8913)", - "pr": "8913" - }, - { - "line": "< 8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18 fix(deps): update jest monorepo to v29.6.2 (#8984)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18 fix(deps): update jest monorepo to v29.6.2 (#8984)\u001b[39m\u001b[49m", - "hash": "8ff7e3cca7bb7d581862c7b00dfe5cda9b25bf18", - "message": "fix(deps): update jest monorepo to v29.6.2 (#8984)", - "pr": "8984" - }, - { - "line": "< 0ec4c5e15488d73e95d08d3965968797ecd23315 chore(deps): update babel monorepo to v7.22.10 (#9016)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m< 0ec4c5e15488d73e95d08d3965968797ecd23315 chore(deps): update babel monorepo to v7.22.10 (#9016)\u001b[39m\u001b[49m", - "hash": "0ec4c5e15488d73e95d08d3965968797ecd23315", - "message": "chore(deps): update babel monorepo to v7.22.10 (#9016)", - "pr": "9016" - }, - { - "line": "| < a38d6f08df99db83239008b75d2bf6f569ea0609 fix(deps): update dependency core-js to v3.32.0 (#9030)", - "ref": "next", - "type": "commit", - "pretty": "\u001b[44m\u001b[90m| < a38d6f08df99db83239008b75d2bf6f569ea0609 fix(deps): update dependency core-js to v3.32.0 (#9030)\u001b[39m\u001b[49m", - "hash": "a38d6f08df99db83239008b75d2bf6f569ea0609", - "message": "fix(deps): update dependency core-js to v3.32.0 (#9030)", - "pr": "9030" - } - ] -} diff --git a/tasks/release/tests/release.test.mjs b/tasks/release/tests/release.test.mjs deleted file mode 100644 index 711750f98482..000000000000 --- a/tasks/release/tests/release.test.mjs +++ /dev/null @@ -1,461 +0,0 @@ -import { jest } from '@jest/globals' -import execa from 'execa' -import { chalk, fs, $ } from 'zx' - -import * as releaseLib from '../releaseLib.mjs' - -const range = { - from: 'ds-fixture-dont-delete-main', - to: 'ds-fixture-dont-delete-next', -} - -releaseLib.setVerbosity(false) - -describe('releaseLib', () => { - test("its exports haven't unintentionally changed", async () => { - const releaseLib = await import('../releaseLib.mjs') - - expect(releaseLib).toMatchInlineSnapshot(` - { - "compareRange": [Function], - "consoleBoxen": [Function], - "defaultGitLogOptions": [ - "--oneline", - "--no-abbrev-commit", - "--left-right", - "--graph", - "--left-only", - "--cherry-pick", - "--boundary", - ], - "getBranchesToCommits": [Function], - "getLatestRelease": [Function], - "getMilestone": [Function], - "getOctokit": [Function], - "getPRMilestoneFromURL": [Function], - "getRedwoodRemote": [Function], - "getReleaseBranches": [Function], - "getSymmetricDifference": [Function], - "handleBranchesToCommits": [Function], - "isYes": [Function], - "openCherryPickPRs": [Function], - "prMilestoneCache": undefined, - "prompts": [Function], - "reportCommitStatuses": [Function], - "resolveBranchStatuses": [Function], - "resolveCommitsToTriage": [Function], - "resolveLine": [Function], - "resolveSymmetricDifference": [Function], - "separator": "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------", - "setUpDataFile": [Function], - "setVerbosity": [Function], - "triageCommits": [Function], - "triageRange": [Function], - "unwrap": [Function], - } - `) - }) - - describe('setUpDataFile', () => { - it("returns an empty map if the file doesn't exist", async () => { - const data = releaseLib.setUpDataFile( - new URL('./nonExistentFile.json', import.meta.url) - ) - - expect(data).toEqual(new Map()) - }) - - it('returns a map the if the file exists', async () => { - const data = releaseLib.setUpDataFile( - new URL('./test.commitTriageData.json', import.meta.url) - ) - - expect(data).toMatchInlineSnapshot(` - Map { - "ed8a87d98d8c3e5dad23ac3e2143b46a201194dc" => { - "message": "chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "needsCherryPick": false, - }, - } - `) - }) - - describe('process.exit', () => { - const file = './testFile.json' - - afterAll(async () => { - await fs.rm(file) - }) - - it("doesn't write a file if the map is empty on the `process`'s `exit` event", async () => { - await execa.command( - `yarn node ./setUpDataFileTest.mjs --file=${file} --scenario=empty-map` - ) - - expect(await fs.exists(file)).toBe(false) - }) - - it("writes a file if the map is populated on `process`'s `exit`", async () => { - await execa.command(`yarn node ./setUpDataFileTest.mjs --file=${file}`) - - expect(await fs.exists(file)).toBe(true) - }) - }) - }) - - describe('symmetric difference', () => { - let symmetricDifference - - test('`getSymmetricDifference` gets the symmetric difference between fixture branches', async () => { - symmetricDifference = await releaseLib.getSymmetricDifference(range) - - expect(symmetricDifference.length).toEqual(147) - expect(symmetricDifference).toMatchSnapshot() - }) - - describe('resolveSymmetricDifference', () => { - describe('resolveLine', () => { - const options = { - range: { - ...range, - to: [range.to], - }, - refsToColorFunctions: { - [range.to]: chalk.dim.bgBlue, - }, - logger: () => {}, - } - - it('resolves a ui line starting with `| o`', async () => { - const line = - '| o a2fcc1618a70a77570943e4bc85d29ea055ab507 chore(deps): update dependency @playwright/test to v1.37.0 (#9028)' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - type: 'ui', - ref: range.from, - pretty: chalk.dim(line), - }) - }) - - it('resolve a ui line starting with `o`', async () => { - const line = 'o 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toEqual({ - line, - type: 'ui', - ref: range.from, - pretty: chalk.dim(line), - }) - }) - - it("parses a commit's hash and message", async () => { - const line = - '< c80df9b30ffbfbf1b9b75af92938a9941215a075 Update crypto library, CryptoJS CVE & deprecation (#9350)' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - hash: 'c80df9b30ffbfbf1b9b75af92938a9941215a075', - message: - 'Update crypto library, CryptoJS CVE & deprecation (#9350)', - }) - }) - - it('resolves an annotated tag', async () => { - const line = '< 79faf45ead7bdaa351afb7d5f99ca7ee828939bf v6.0.7' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - type: 'tag', - ref: 'v6.0.7', - pretty: chalk.dim(line), - }) - }) - - it('resolves a release chore', async () => { - const line = - "< 7bf030a3c3dd94d7ff95d964d75dc4cd54a0de39 Merge branch 'release/patch/v6.0.7'" - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - type: 'release-chore', - pretty: chalk.dim(line), - }) - }) - - it('resolves a commit that revert a commit', async () => { - const line = - '< 8469ce6e189b9628f785950b1a0dc800aa7eea3c Revert "feat: Support GraphQL Fragments with Apollo Client and Fragment Registry (#9140)"' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - type: 'revert', - pretty: chalk.underline(line), - }) - }) - - it("parses a commit's pr and fetches its milestone", async () => { - const line = - '< 18555d0e196cfc69ed322e24cafeb2d228773ae1 RSC: Smoke test (#9194)' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - pr: '9194', - url: 'https://github.com/redwoodjs/redwood/pull/9194', - milestone: 'RSC', - }) - }) - - it('checks if a commit is in the `range.to` ref', async () => { - const line = - '< 0ec4c5e15488d73e95d08d3965968797ecd23315 chore(deps): update babel monorepo to v7.22.10 (#9016)' - - const commit = await releaseLib.resolveLine(line, options) - - expect(commit).toMatchObject({ - ref: range.to, - pretty: options.refsToColorFunctions[range.to]( - `${line} (${commit.milestone})` - ), - }) - }) - }) - }) - }) - - describe('getReleaseBranches', () => { - it('gets branches prefixed with `release/`', async () => { - const releaseBranches = await releaseLib.getReleaseBranches() - - // Release branches look like `release/major/v7.0.0`, `release/minor/v6.4.0`, or `release/patch/v6.3.2`. - const releaseBranchRegExp = /release\/major|minor|patch\/v\d.\d.\d/ - - expect( - releaseBranches.every((releaseBranch) => - releaseBranchRegExp.test(releaseBranch) - ) - ).toEqual(true) - }) - - it("sorts them if there's more than one,", async () => { - const mockReleaseBranches = [ - `release/major/3.0.0`, - `release/minor/v2.1.0`, - `release/patch/v2.0.1`, - `release/major/v2.0.0`, - ] - - await Promise.all( - mockReleaseBranches.map((branch) => $`git branch ${branch}`) - ) - - const releaseBranches = await releaseLib.getReleaseBranches() - expect(releaseBranches.slice(-4)).toEqual(mockReleaseBranches) - - await Promise.all( - mockReleaseBranches.map((branch) => $`git branch -D ${branch}`) - ) - }) - }) - - test('getLatestRelease returns a string in the shape of a release tag', async () => { - const latestRelease = await releaseLib.getLatestRelease() - expect(latestRelease).toMatch(/v\d\.\d\.\d/) - }) - - describe('resolveBranchStatuses', () => { - test('getRedwoodRemote', async () => { - const result = await releaseLib.getRedwoodRemote() - expect(result.redwoodRemote).toBeDefined() - expect(result.error).toBeUndefined() - }) - - test('getBranchesToCommits', async () => { - const branchesToCommits = await releaseLib.getBranchesToCommits( - ['main', 'next'], - { - redwoodRemote: 'origin', - } - ) - - expect(branchesToCommits).toEqual({ - main: { - existsOnRedwoodRemote: expect.any(Boolean), - diverged: expect.any(Boolean), - upToDate: expect.any(Boolean), - commitsExclusiveToLocalBranch: expect.any(Number), - commitsExclusiveToRemoteBranch: expect.any(Number), - }, - next: { - existsOnRedwoodRemote: expect.any(Boolean), - upToDate: expect.any(Boolean), - commitsExclusiveToLocalBranch: expect.any(Number), - commitsExclusiveToRemoteBranch: expect.any(Number), - diverged: expect.any(Boolean), - }, - }) - }) - - describe('handleBranchesToCommits', () => { - it('handles branches being up to date', async () => { - console.log = jest.fn() - - const result = await releaseLib.handleBranchesToCommits( - { - main: { - existsOnRedwoodRemote: true, - upToDate: true, - }, - next: { - existsOnRedwoodRemote: true, - upToDate: true, - }, - }, - { - redwoodRemote: 'origin', - } - ) - - expect(console.log.mock.calls[0][0]).toMatchInlineSnapshot(` - "╭ 🐙 Branch status(es) ─╮ - │ ✅ main is up to date │ - │ ✅ next is up to date │ - ╰───────────────────────╯" - `) - expect(result.error).toBeUndefined() - }) - - it('handles diverged branches', async () => { - console.log = jest.fn() - - const result = await releaseLib.handleBranchesToCommits( - { - main: { - existsOnRedwoodRemote: true, - upToDate: false, - diverged: true, - commitsExclusiveToLocalBranch: 42, - commitsExclusiveToRemoteBranch: 42, - }, - next: { - existsOnRedwoodRemote: true, - upToDate: false, - diverged: true, - commitsExclusiveToLocalBranch: 42, - commitsExclusiveToRemoteBranch: 42, - }, - }, - { - redwoodRemote: 'origin', - } - ) - - expect(console.log.mock.calls[0][0]).toMatchInlineSnapshot(` - "╭ 🐙 Branch status(es) ──────────────────────────────────────────╮ - │ 🧮 main has... │ - │ 🏠 42 commit(s) locally that the remote branch doesn't have │ - │ 📡 42 commit(s) remotely that the local branch doesn't │ - │ 🧮 next has... │ - │ 🏠 42 commit(s) locally that the remote branch doesn't have │ - │ 📡 42 commit(s) remotely that the local branch doesn't │ - ╰────────────────────────────────────────────────────────────────╯" - `) - expect(result.error).toMatchInlineSnapshot(` - "The following branch(es) have diverged—they have commits that are exclusive to both the local and remote: main, next. - Trying to triage commits right now probably isn't going to be a good time." - `) - }) - - it("handles branches that aren't main or next", async () => { - console.log = jest.fn() - - const result = await releaseLib.handleBranchesToCommits( - { - 'release/minor/v6.4.0': { - existsOnRedwoodRemote: true, - upToDate: true, - }, - 'next-v5-archive': { - existsOnRedwoodRemote: true, - upToDate: true, - }, - }, - { - redwoodRemote: 'origin', - } - ) - - expect(console.log.mock.calls[0][0]).toMatchInlineSnapshot(` - "╭ 🐙 Branch status(es) ─────────────────╮ - │ ✅ release/minor/v6.4.0 is up to date │ - │ ✅ next-v5-archive is up to date │ - ╰───────────────────────────────────────╯" - `) - expect(result.error).toBeUndefined() - }) - - it("handles branches that don't have remotes", async () => { - console.log = jest.fn() - - const result = await releaseLib.handleBranchesToCommits( - { - 'release/epoch/bighorn': { - existsOnRedwoodRemote: false, - }, - 'epoch-arapaho-archive': { - existsOnRedwoodRemote: false, - }, - }, - { - redwoodRemote: 'origin', - } - ) - - expect(console.log.mock.calls[0][0]).toMatchInlineSnapshot(` - "╭ 🐙 Branch status(es) ─────────────────────────────────────────────────╮ - │ ❓ release/epoch/bighorn doesn't exist on the Redwood remote (origin) │ - │ ❓ epoch-arapaho-archive doesn't exist on the Redwood remote (origin) │ - ╰───────────────────────────────────────────────────────────────────────╯" - `) - expect(result.error).toBeUndefined() - }) - }) - }) - - test("`getPRMilestoneFromURL` gets a PR's milestone", async () => { - const pr = { - url: 'https://github.com/redwoodjs/redwood/pull/9361', - milestone: 'v6.4.0', - } - - const milestone = await releaseLib.getPRMilestoneFromURL(pr.url) - - expect(milestone).toEqual(pr.milestone) - expect(releaseLib.prMilestoneCache.has(pr.url)).toEqual(true) - expect(releaseLib.prMilestoneCache.get(pr.url)).toEqual(milestone) - }) - - test('`getOctokit` throws if `process.env.GITHUB_TOKEN` is `undefined`', () => { - const GITHUB_TOKEN = process.env.GITHUB_TOKEN - delete process.env.GITHUB_TOKEN - - try { - releaseLib.getOctokit() - } catch (e) { - expect(e.message).toMatchInlineSnapshot(` - "You have to set the GITHUB_TOKEN env var to a personal access token. - Create a personal access token with the repo scope here: https://github.com/settings/tokens." - `) - } - - process.env.GITHUB_TOKEN = GITHUB_TOKEN - }) -}) diff --git a/tasks/release/tests/releaseLibQA.mjs b/tasks/release/tests/releaseLibQA.mjs deleted file mode 100644 index 04bf36ac6dc4..000000000000 --- a/tasks/release/tests/releaseLibQA.mjs +++ /dev/null @@ -1,126 +0,0 @@ -/* eslint-env node */ - -// This file runs some lib functions in an observable way for QA. -// Run this file with... -// -//```js -// yarn node ./tasks/release/tests/releaseLibQA.mjs -//``` -// -// TODO: some of this code would break on an annotated tag... - -import { fs, question } from 'zx' - -import { annotateSymmetricDifference, purgeTriageData } from '../releaseLib.mjs' - -async function main() { - const linesFileURL = new URL('./lines.json', import.meta.url) - - let lines - - try { - lines = await fs.readJSON(linesFileURL) - } catch (e) { - console.log( - `Couldn't read ${linesFileURL}. Have you run \`yarn node ./tasks/release/triageMain.mjs\`?` - ) - process.exitCode = 1 - return - } - - const range = { - from: 'main', - to: 'next', - } - - const annotatedSymmetricDifference = await annotateSymmetricDifference( - lines, - { - ...range, - // Uncomment this to `true` to go step by step: - // verbose: true, - } - ) - - // await QA_AnnotateSymmetricDifference(annotatedSymmetricDifference, range) - // await QA_MainCommits(annotatedSymmetricDifference, range) - // await QA_TriageData(annotatedSymmetricDifference, range) -} - -main() - -//------------------------ - -async function QA_AnnotateSymmetricDifference( - annotatedSymmetricDifference, - { from, to } -) { - const types = new Set( - annotatedSymmetricDifference.map((commit) => commit.type) - ) - - const categoryToCommitsInitialValue = [...types, from, to].reduce( - (obj, type) => { - obj[type] = [] - return obj - }, - {} - ) - - const categoryToCommits = annotatedSymmetricDifference.reduce( - (categoryToCommits, commit) => { - categoryToCommits[commit.type].push(commit) - categoryToCommits[commit.ref].push(commit) - return categoryToCommits - }, - categoryToCommitsInitialValue - ) - - fs.writeJSON( - new URL('./tests/annotatedSymmetricDifference.json', import.meta.url), - categoryToCommits, - { spaces: 2 } - ) -} - -async function QA_MainCommits(annotatedSymmetricDifference, { from }) { - const fromCommits = annotatedSymmetricDifference.filter( - (commit) => commit.ref === from - ) - - const triageMainData = await fs.readJSON( - new URL('./data/triageMainData.json', import.meta.url) - ) - - for (const commit of fromCommits) { - const triageStatus = triageMainData[commit.hash]?.needsCherryPick - - if (triageStatus === undefined) { - console.log(`${commit.pretty} has no triage status`) - } else { - console.log(`${commit.pretty}`) - console.log(`needs cherry pick? ${triageStatus}`) - } - - await question('') - } -} - -async function QA_TriageData(annotatedSymmetricDifference, { to }) { - const triageMainData = new Map( - Object.entries( - await fs.readJSON(new URL('./data/triageMainData.json', import.meta.url)) - ) - ) - - await purgeTriageData(triageMainData, { - commits: annotatedSymmetricDifference.filter( - (commit) => commit.type === 'commit' - ), - branch: to, - }) -} - -// qa commits to be released... -// since last minor... -// since last patch... diff --git a/tasks/release/tests/releaseMock.test.mjs b/tasks/release/tests/releaseMock.test.mjs deleted file mode 100644 index 9ba05c3ab7d1..000000000000 --- a/tasks/release/tests/releaseMock.test.mjs +++ /dev/null @@ -1,88 +0,0 @@ -import { jest } from '@jest/globals' -import chalk from 'chalk' - -jest.unstable_mockModule('zx', () => { - return { - $: jest.fn(() => { - return { - stdout: '', - } - }), - question: jest.fn(), - chalk, - fs: { - readJSONSync: jest.fn(() => { - throw { code: 'ENOENT' } - }), - }, - within: jest.fn(), - } -}) - -describe('releaseLib with mocks', () => { - test("`setUpDataFile` shouldn't throw if the file doesn't exist", async () => { - const releaseLib = await import('../releaseLib.mjs') - - expect(() => { - releaseLib.setUpDataFile( - new URL('./testTriageData.json', import.meta.url) - ) - }).not.toThrow() - }) - - test("`getRedwoodRemote` returns an error if it can't find the Redwood remote", async () => { - const releaseLib = await import('../releaseLib.mjs') - - const result = await releaseLib.getRedwoodRemote() - - expect(result).toEqual({ - error: - "Couldn't find a git remote that points to git@github.com:redwoodjs/redwood.git", - }) - }) - - test('`handleBranchesToCommits` handles branches having commits exclusive to the remote', async () => { - const releaseLib = await import('../releaseLib.mjs') - const { question } = await import('zx') - - console.log = jest.fn() - - const result = await releaseLib.handleBranchesToCommits( - { - main: { - existsOnRedwoodRemote: true, - upToDate: false, - commitsExclusiveToLocalBranch: 0, - commitsExclusiveToRemoteBranch: 42, - }, - next: { - existsOnRedwoodRemote: true, - upToDate: false, - commitsExclusiveToLocalBranch: 0, - commitsExclusiveToRemoteBranch: 42, - }, - }, - { - redwoodRemote: 'origin', - } - ) - - expect(console.log.mock.calls[0][0]).toMatchInlineSnapshot(` - "╭ 🐙 Branch status(es) ─────────────────────────────────────────╮ - │ 🧮 main has... │ - │ 🏠 0 commit(s) locally that the remote branch doesn't have │ - │ 📡 42 commit(s) remotely that the local branch doesn't │ - │ 🧮 next has... │ - │ 🏠 0 commit(s) locally that the remote branch doesn't have │ - │ 📡 42 commit(s) remotely that the local branch doesn't │ - ╰───────────────────────────────────────────────────────────────╯" - `) - expect(result.error).toBeUndefined() - expect(question).toHaveBeenCalledWith( - `Ok to \`git fetch\` ${chalk.magenta('main')}? [Y/n] ` - ) - expect(question).toHaveBeenCalledWith( - `Ok to \`git fetch\` ${chalk.magenta('next')}? [Y/n] ` - ) - }) -}) diff --git a/tasks/release/tests/setUpDataFileTest.mjs b/tasks/release/tests/setUpDataFileTest.mjs deleted file mode 100644 index e8a320046e10..000000000000 --- a/tasks/release/tests/setUpDataFileTest.mjs +++ /dev/null @@ -1,32 +0,0 @@ -/* eslint-env node */ -import { parseArgs } from 'node:util' - -import { setUpDataFile } from '../releaseLib.mjs' - -function main() { - const { values } = parseArgs({ - options: { - file: { - type: 'string', - short: 'f', - }, - scenario: { - type: 'string', - short: 's', - }, - }, - }) - - const data = setUpDataFile(new URL(values.file, import.meta.url)) - - if (values.scenario === 'empty-map') { - return - } - - data.set('ed8a87d98d8c3e5dad23ac3e2143b46a201194dc', { - message: 'chore(deps): update dependency esbuild to v0.19.2 (#9029)', - needsCherryPick: false, - }) -} - -main() diff --git a/tasks/release/tests/test.commitTriageData.json b/tasks/release/tests/test.commitTriageData.json deleted file mode 100644 index 4dc8fea933f3..000000000000 --- a/tasks/release/tests/test.commitTriageData.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ed8a87d98d8c3e5dad23ac3e2143b46a201194dc": { - "message": "chore(deps): update dependency esbuild to v0.19.2 (#9029)", - "needsCherryPick": false - } -} diff --git a/tasks/release/triage/triage.mjs b/tasks/release/triage/triage.mjs deleted file mode 100644 index 08c66f4a8e65..000000000000 --- a/tasks/release/triage/triage.mjs +++ /dev/null @@ -1,179 +0,0 @@ -/* eslint-env node */ - -// Checklist for manual testing: -// -// - [ ] accepts a range (`main...next`) as a a positional arg -// - [ ] throws if the range is syntactically invalid (`main..next`) -// - [ ] throws if the branches specified in the range don't exist -// - [ ] prompts if no positional arg is provided -// -// - [ ] --verbose (-v) controls verbosity -// - [ ] --verbose (-v) defaults to false -// -// - [ ] --skip-branch-check skips the branch status check - -import { parseArgs as _parseArgs } from 'node:util' - -import { chalk } from 'zx' - -import { - branchExists, - consoleBoxen, - getReleaseBranches, - prompts, - resolveBranchStatuses, - setVerbosity, - triageRange, -} from '../releaseLib.mjs' - -async function main() { - let options - - try { - options = await parseArgs() - } catch (e) { - consoleBoxen('👷 Heads up', e.message) - process.exitCode = 1 - return - } - - const { verbose, checkBranchStatuses, range } = options - - setVerbosity(verbose) - - // One gotcha when triaging commits: you don't have the latest branches. - if (checkBranchStatuses) { - const result = await resolveBranchStatuses([range.from, range.to]) - - if (result.error) { - consoleBoxen('👷 Heads up', result.error) - process.exitCode = 1 - return - } - } - - try { - await triageRange(range) - } catch (e) { - consoleBoxen('👷 Heads up', e.message) - process.exitCode = 1 - return - } -} - -main() - -// ─── Helpers ───────────────────────────────────────────────────────────────── - -async function parseArgs() { - const { positionals, values } = _parseArgs({ - allowPositionals: true, - - options: { - // Seems like a limitation of `parseArgs`, but we can't specify `check-branches: { default: true }` - // because there's no way to unset it at the CLI. - 'skip-branch-status-check': { - type: 'boolean', - }, - - verbose: { - type: 'boolean', - short: 'v', - default: false, - }, - }, - }) - - const range = {} - - // We let the user provide a range (`main...next`) as a positional argument. If they don't, we prompt. - if (positionals.length) { - const [userProvidedRange] = positionals - - // Matches something like `main...next`. - const rangeRegExp = /.+\.\.\..+/ - - if (!rangeRegExp.test(userProvidedRange)) { - throw new Error( - `Error: If you provide a positional argument, it must be in the form of a range like ${chalk.magenta( - 'main...next' - )}` - ) - } - - const [from, to] = userProvidedRange.split('...') - - if (!(await branchExists(from))) { - throw new Error(`The branch ${chalk.magenta(from)} doesn't exist.`) - } - if (!(await branchExists(to))) { - throw new Error(`The branch ${chalk.magenta(to)} doesn't exist.`) - } - - range.from = from - range.to = to - } else { - const releaseBranches = await getReleaseBranches() - - // You should cherry pick from - // - // - main -> next - // - next -> a release branch - // - // You shouldn't cherry pick straight from `main` to a release branch - // because if the release branch is a patch, the minor (which is cut from `next`) will be missing that commit. - const choices = [ - 'main...next', - ...releaseBranches.map((branch) => `next...${branch}`), - ].map((branch) => { - return { - title: branch, - value: branch, - } - }) - - const rangeRes = await prompts({ - name: 'range', - message: 'Which range do you want to triage?', - type: 'select', - choices, - }) - - const [from, to] = rangeRes.range.split('...') - range.from = from - range.to = to - } - - // Spreading `values` here adds `no-check-branches-statuses`. Instead we add them by hand, specifying defaults: - // - // - if range isn't explicitly set, default to `main...next` - // - if `--no-check-branches-statuses` isn't explicitly set, default to `true`. - return { - range, - checkBranchStatuses: !values['skip-check-branch-check'] ?? true, - verbose: values.verbose, - } -} - -// TODO -// function getHelp() { -// return [ -// chalk.bold('# 📥 Triage'), -// '', -// chalk.bold('## Usage'), -// '', -// chalk.green(' yarn node ./tasks/release/triage/triage.mjs [range]'), -// '', -// chalk.dim( -// ' # Triage from next to a release branch like release/patch/v6.3.3' -// ), -// chalk.cyan( -// ' yarn node ./tasks/release/triage/triage.mjs next...release/patch/v6.3.3' -// ), -// '', -// chalk.bold('## Options'), -// '', -// chalk.green('--verbose'), -// chalk.green('--skip-branch-status-check'), -// ].join('\n') -// } diff --git a/tasks/release/triage/triageQA.mjs b/tasks/release/triage/triageQA.mjs deleted file mode 100644 index 57340b074a9a..000000000000 --- a/tasks/release/triage/triageQA.mjs +++ /dev/null @@ -1,90 +0,0 @@ -/* eslint-env node */ -import { parseArgs as _parseArgs } from 'node:util' - -import { chalk, fs, question } from 'zx' - -import { prompts, resolveLine } from '../releaseLib.mjs' - -async function main() { - const { filePath, lines } = await parseArgs() - - const [from, to] = filePath.split('.')[0].split('_') - - for (const line of lines) { - console.log(chalk.dim('='.repeat(process.stdout.columns))) - console.log(line) - console.log() - - await resolveLine(line, { - range: { - from, - to: [to], - }, - refsToColorFunctions: { - [to]: chalk.bgBlue.gray, - }, - logger: console.log, - }) - - console.log() - await question('Press anything to continue > ') - } -} - -main() - -async function parseArgs() { - // Get the file path. - const dirents = await fs.readdir(new URL('.', import.meta.url), { - withFileTypes: true, - }) - - const filePathChoices = dirents - .filter( - (dirent) => - dirent.isFile() && dirent.name.endsWith('symmetricDifference.json') - ) - .map((dirent) => { - return { - title: dirent.name, - value: dirent.name, - } - }) - - const filePathPrompt = await prompts({ - name: 'filePath', - message: 'Choose a file', - type: 'select', - choices: filePathChoices, - }) - - // Get the lines. - let lines = await fs.readJSON( - new URL(filePathPrompt.filePath, import.meta.url) - ) - - const linesChoices = lines.map((line) => { - return { - title: line, - value: line, - } - }) - - const linesPrompt = await prompts({ - name: 'lines', - message: 'Which lines do you want to QA?', - type: 'autocompleteMultiselect', - choices: linesChoices, - async suggest(input, choices) { - return Promise.resolve( - choices.filter(({ title }) => title.includes(input)) - ) - }, - min: 1, - }) - - return { - filePath: filePathPrompt.filePath, - lines: linesPrompt.lines, - } -} diff --git a/tasks/server-tests/bothServer.test.mts b/tasks/server-tests/bothServer.test.mts index ab0fde7f26b5..964f81b9e230 100644 --- a/tasks/server-tests/bothServer.test.mts +++ b/tasks/server-tests/bothServer.test.mts @@ -20,8 +20,9 @@ describe('rw serve', () => { --version Show version number [boolean] --cwd Working directory to use (where \`redwood.toml\` is located) - --include-env-files Load additional .env files. These - are incremental [array] + --add-env-files Load additional .env files. Values + defined in files specified later + override earlier ones. [array] --telemetry Whether to send anonymous usage telemetry to RedwoodJS [boolean] --webPort, --web-port The port for the web server to @@ -67,8 +68,9 @@ describe('rw serve', () => { --version Show version number [boolean] --cwd Working directory to use (where \`redwood.toml\` is located) - --include-env-files Load additional .env files. These - are incremental [array] + --add-env-files Load additional .env files. Values + defined in files specified later + override earlier ones. [array] --telemetry Whether to send anonymous usage telemetry to RedwoodJS [boolean] --webPort, --web-port The port for the web server to diff --git a/tasks/smoke-tests/rsa/tests/rsa.spec.ts b/tasks/smoke-tests/rsa/tests/rsa.spec.ts index 006a38043859..decd1c0b0560 100644 --- a/tasks/smoke-tests/rsa/tests/rsa.spec.ts +++ b/tasks/smoke-tests/rsa/tests/rsa.spec.ts @@ -3,8 +3,8 @@ import { test, expect } from '@playwright/test' test('Submitting the form should return a response', async ({ page }) => { await page.goto('/') - const h3 = await page.locator('h1').innerHTML() - expect(h3).toMatch(/Hello Anonymous!!/) + const h1 = await page.locator('h1').innerText() + expect(h1).toMatch(/Hello Anonymous!!/) const pageText = await page.locator('#redwood-app > div').innerText() expect(pageText).toMatch('The form has been submitted 0 times.') diff --git a/tasks/smoke-tests/rsc-external-packages-and-cells/tests/rsc-external-packages-and-cells.spec.ts b/tasks/smoke-tests/rsc-external-packages-and-cells/tests/rsc-external-packages-and-cells.spec.ts index ffa82ab4cecb..868d88b32531 100644 --- a/tasks/smoke-tests/rsc-external-packages-and-cells/tests/rsc-external-packages-and-cells.spec.ts +++ b/tasks/smoke-tests/rsc-external-packages-and-cells/tests/rsc-external-packages-and-cells.spec.ts @@ -18,7 +18,7 @@ test('Client components should work', async ({ page }) => { test('Submitting the form should return a response', async ({ page }) => { await page.goto('/') - const h1 = await page.locator('h1').innerHTML() + const h1 = await page.locator('h1').innerText() expect(h1).toMatch(/Hello Anonymous!!/) const pageText = await page.locator('#redwood-app > div').innerText() diff --git a/yarn.lock b/yarn.lock index 192e9435bf58..779969677677 100644 --- a/yarn.lock +++ b/yarn.lock @@ -103,24 +103,26 @@ __metadata: languageName: node linkType: hard -"@apollo/client@npm:3.8.10": - version: 3.8.10 - resolution: "@apollo/client@npm:3.8.10" +"@apollo/client@npm:3.9.5": + version: 3.9.5 + resolution: "@apollo/client@npm:3.9.5" dependencies: "@graphql-typed-document-node/core": "npm:^3.1.1" + "@wry/caches": "npm:^1.0.0" "@wry/equality": "npm:^0.5.6" "@wry/trie": "npm:^0.5.0" graphql-tag: "npm:^2.12.6" hoist-non-react-statics: "npm:^3.3.2" optimism: "npm:^0.18.0" prop-types: "npm:^15.7.2" + rehackt: "npm:0.0.5" response-iterator: "npm:^0.2.6" symbol-observable: "npm:^4.0.0" ts-invariant: "npm:^0.10.3" tslib: "npm:^2.3.0" zen-observable-ts: "npm:^1.2.5" peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql: ^15.0.0 || ^16.0.0 graphql-ws: ^5.5.5 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -134,7 +136,7 @@ __metadata: optional: true subscriptions-transport-ws: optional: true - checksum: 10c0/983306f61de042aca2f02e414533fbdac0c9c905648a98b42bb79bccb19012306eebb3c55c6d665523addbc1948625d1aae70bdc2dd511775b7a962a40dfc5b1 + checksum: 10c0/ede8ea975ba12cbf11d1b88074808ff7c8677321b5780c952c4b7d7672a4bdda24f27a6a1fed79cc6e6d9787b083f12afed0033c2fee06a2d226faadf3f44aec languageName: node linkType: hard @@ -385,7 +387,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.3, @babel/compat-data@npm:^7.23.5": +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" checksum: 10c0/081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c @@ -393,25 +395,25 @@ __metadata: linkType: hard "@babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.12.9, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.9, @babel/core@npm:^7.21.3, @babel/core@npm:^7.22.20, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.5": - version: 7.23.9 - resolution: "@babel/core@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/core@npm:7.24.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/helpers": "npm:^7.24.0" + "@babel/parser": "npm:^7.24.0" + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/03883300bf1252ab4c9ba5b52f161232dd52873dbe5cde9289bb2bb26e935c42682493acbac9194a59a3b6cbd17f4c4c84030db8d6d482588afe64531532ff9b + checksum: 10c0/bb37cbf0bdfd676b246af0a3d9a7932d10573f2d45114fdda02a71889e35530ce13d8930177e78b065d6734b8d45a4fbf7c77f223b1d44b4a28cfe5fefee93ed languageName: node linkType: hard @@ -484,9 +486,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.23.6, @babel/helper-create-class-features-plugin@npm:^7.23.9": - version: 7.23.10 - resolution: "@babel/helper-create-class-features-plugin@npm:7.23.10" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.23.6, @babel/helper-create-class-features-plugin@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.0" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-environment-visitor": "npm:^7.22.20" @@ -499,7 +501,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/f30437aa16f3585cc3382ea630f24457ef622c22f5e4eccffbc03f6a81efbef0b6714fb5a78baa64c838884ba7e1427e3280d7b27481b9f587bc8fbbed05dd36 + checksum: 10c0/341548496df202805489422a160bba75b111d994c64d788a397c35f01784632af48bf06023af8aa2fe72c2c254f8c885b4e0f7f3df5ef17a37370f2feaf80328 languageName: node linkType: hard @@ -599,10 +601,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/helper-plugin-utils@npm:7.22.5" - checksum: 10c0/d2c4bfe2fa91058bcdee4f4e57a3f4933aed7af843acfd169cd6179fab8d13c1d636474ecabb2af107dc77462c7e893199aa26632bac1c6d7e025a17cbb9d20d +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/helper-plugin-utils@npm:7.24.0" + checksum: 10c0/90f41bd1b4dfe7226b1d33a4bb745844c5c63e400f9e4e8bf9103a7ceddd7d425d65333b564d9daba3cebd105985764d51b4bd4c95822b97c2e3ac1201a8a5da languageName: node linkType: hard @@ -691,14 +693,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/helpers@npm:7.23.9" +"@babel/helpers@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/helpers@npm:7.24.0" dependencies: - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 10c0/f69fd0aca96a6fb8bd6dd044cd8a5c0f1851072d4ce23355345b9493c4032e76d1217f86b70df795e127553cf7f3fcd1587ede9d1b03b95e8b62681ca2165b87 + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/dd27c9f11c1c5244ef312fae37636f2fcc69c541c46508017b846c4cf680af059f1922ce84e3f778f123a70d027ded75c96070ee8e906f3bc52dc26dc43df608 languageName: node linkType: hard @@ -731,12 +733,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.16, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.3.2": - version: 7.23.9 - resolution: "@babel/parser@npm:7.23.9" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.16, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.3.2": + version: 7.24.0 + resolution: "@babel/parser@npm:7.24.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/7df97386431366d4810538db4b9ec538f4377096f720c0591c7587a16f6810e62747e9fbbfa1ff99257fd4330035e4fb1b5b77c7bd3b97ce0d2e3780a6618975 + checksum: 10c0/77593d0b9de9906823c4d653bb6cda1c7593837598516330f655f70cba6224a37def7dbe5b4dad0038482d407d8d209eb8be5f48ca9a13357d769f829c5adb8e languageName: node linkType: hard @@ -788,16 +790,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-decorators@npm:7.23.9": - version: 7.23.9 - resolution: "@babel/plugin-proposal-decorators@npm:7.23.9" +"@babel/plugin-proposal-decorators@npm:7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-proposal-decorators@npm:7.24.0" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.23.9" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-decorators": "npm:^7.23.3" + "@babel/helper-create-class-features-plugin": "npm:^7.24.0" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/plugin-syntax-decorators": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3e5d7f077bc8a98c72b2de275095bf2556b39fcc1c2b0f77ea73b171ff872548288ac228d13af24e3c6f657807f93ada21fbb35cb5201a63ce858caae6afbde1 + checksum: 10c0/6bf16cb2b5b2f1b63b5ea964853cd3b3419c8285296b5bf64a64127c9d5c1b2e6829e84bd92734e4b71df67686d8f36fb01bb8a45fc52bcece7503b73bc42ec7 languageName: node linkType: hard @@ -894,14 +896,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-decorators@npm:7.23.3" +"@babel/plugin-syntax-decorators@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-syntax-decorators@npm:7.24.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/86299c050b0a5b6565d6b9e3529f2d6dca4780215ab88050bdd0ae9a576868a17f9cd1e140857089cc5d06bdfeb89f0711285f99481b82316896a552a62e449f + checksum: 10c0/6c11801e062772d4e1b0b418a4732574128b1dfc13193a2909fa93937346746aaa7046f88f6026ff3c80777c967d0fe2e4bb19a1d3fb399e8349c81741e4f471 languageName: node linkType: hard @@ -1470,18 +1472,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.4" +"@babel/plugin-transform-object-rest-spread@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.0" dependencies: - "@babel/compat-data": "npm:^7.23.3" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-compilation-targets": "npm:^7.23.6" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-transform-parameters": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b56017992ffe7fcd1dd9a9da67c39995a141820316266bcf7d77dc912980d228ccbd3f36191d234f5cc389b09157b5d2a955e33e8fb368319534affd1c72b262 + checksum: 10c0/02fe8b99ee6329e68b97b1b1b5410e50c6c20470e73dcd1d287c6ddb5623c654dce82327b2a3f6710ee3b512fe4950e43ab81d0bbc33d771f0cad3bc3cef87c6 languageName: node linkType: hard @@ -1664,19 +1666,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:7.23.9": - version: 7.23.9 - resolution: "@babel/plugin-transform-runtime@npm:7.23.9" +"@babel/plugin-transform-runtime@npm:7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-transform-runtime@npm:7.24.0" dependencies: "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" babel-plugin-polyfill-corejs2: "npm:^0.4.8" babel-plugin-polyfill-corejs3: "npm:^0.9.0" babel-plugin-polyfill-regenerator: "npm:^0.5.5" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3b959c2b88ea0009c288fa190d9f69b0d26cb336b8a7cab54a5e54b844f33cce1996725c15305a40049c8f23ca30082ee27e1f6853ff35fad723543e3d2dba47 + checksum: 10c0/a632e0c6f4b1be21955646ba4f6e4af323daaa6ab68ce39f92f5186d444402e920b33cabd40759c36f72d8c36f256a35ea03060e407ca69bcf373fdcb450aa42 languageName: node linkType: hard @@ -1798,12 +1800,12 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.22.20, @babel/preset-env@npm:^7.23.2": - version: 7.23.9 - resolution: "@babel/preset-env@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/preset-env@npm:7.24.0" dependencies: "@babel/compat-data": "npm:^7.23.5" "@babel/helper-compilation-targets": "npm:^7.23.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-validator-option": "npm:^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" @@ -1856,7 +1858,7 @@ __metadata: "@babel/plugin-transform-new-target": "npm:^7.23.3" "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.4" "@babel/plugin-transform-numeric-separator": "npm:^7.23.4" - "@babel/plugin-transform-object-rest-spread": "npm:^7.23.4" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.0" "@babel/plugin-transform-object-super": "npm:^7.23.3" "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.4" "@babel/plugin-transform-optional-chaining": "npm:^7.23.4" @@ -1883,7 +1885,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2837a42089180e51bfd6864b6d197e01fc0abec1920422e71c0513c2fc8fb5f3bfe694ed778cc4e45856c546964945bc53bf8105e4b26f3580ce3685fa50cc0f + checksum: 10c0/cb5098bb860aede8418f204d7a693108d7c318edbb227f9842ac6aa71f2154ea1737846994af9bcd0c0b716cd73904f69f09bef635a9679465ec3558144beb4f languageName: node linkType: hard @@ -1966,13 +1968,13 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:7.23.9": - version: 7.23.9 - resolution: "@babel/runtime-corejs3@npm:7.23.9" +"@babel/runtime-corejs3@npm:7.24.0": + version: 7.24.0 + resolution: "@babel/runtime-corejs3@npm:7.24.0" dependencies: core-js-pure: "npm:^3.30.2" regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/7926ebf38285b41e2a486b25aaa10861db1cfd29accd0b0eaa1338080d853339481f78d8d73e5d1f219a8ad52c477dcd4e7cc3473d1befbb290c77b27ed1ec91 + checksum: 10c0/5ed3f35c8bd06cd7f398112577b440d8ed4dfbe95f35695990b739543c0199bccd09f2c4c7870a82b7088652bc365bdd3548e6306e603bc036afcecb580e3755 languageName: node linkType: hard @@ -1985,20 +1987,20 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": - version: 7.23.9 - resolution: "@babel/template@npm:7.23.9" +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 10c0/0e8b60119433787742bc08ae762bbd8d6755611c4cabbcb7627b292ec901a55af65d93d1c88572326069efb64136ef151ec91ffb74b2df7689bbab237030833a + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/9d3dd8d22fe1c36bc3bdef6118af1f4b030aaf6d7d2619f5da203efa818a2185d717523486c111de8d99a8649ddf4bbf6b2a7a64962d8411cf6a8fa89f010e54 languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.20, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/traverse@npm:7.23.9" +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.20, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/traverse@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" @@ -2006,22 +2008,22 @@ __metadata: "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/d1615d1d02f04d47111a7ea4446a1a6275668ca39082f31d51f08380de9502e19862be434eaa34b022ce9a17dbb8f9e2b73a746c654d9575f3a680a7ffdf5630 + checksum: 10c0/55ffd2b0ce0fbd0a09051edc4def4fb1e96f35e0b100c0dc2a7429df569971ae312c290e980e423471f350961705698a257c7eea8c8304918024cc26f02468ba languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.1.6, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.9 - resolution: "@babel/types@npm:7.23.9" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.1.6, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/types@npm:7.24.0" dependencies: "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/edc7bb180ce7e4d2aea10c6972fb10474341ac39ba8fdc4a27ffb328368dfdfbf40fca18e441bbe7c483774500d5c05e222cec276c242e952853dcaf4eb884f7 + checksum: 10c0/777a0bb5dbe038ca4c905fdafb1cdb6bdd10fe9d63ce13eca0bd91909363cbad554a53dc1f902004b78c1dcbc742056f877f2c99eeedff647333b1fadf51235d languageName: node linkType: hard @@ -6582,93 +6584,93 @@ __metadata: languageName: node linkType: hard -"@prisma/client@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/client@npm:5.9.1" +"@prisma/client@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/client@npm:5.10.2" peerDependencies: prisma: "*" peerDependenciesMeta: prisma: optional: true - checksum: 10c0/5447007e42d507e45960210d804736000b53556b076dd15797dfaed0c58e462dc24eb27e9c6636b8a145dd1a103fc7f6cd876f1906217e8fd8b74c6533169287 + checksum: 10c0/d2bd28d72601c24a180910a8b0264a9b01c2c9120b5255e51ae95559e21630c77120d9258f2ea5fac1c353c8f0b2390276481fcedc6594b6b79cc31c0b02c7c9 languageName: node linkType: hard -"@prisma/debug@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/debug@npm:5.9.1" - checksum: 10c0/0e116019f5e8df7ec30503bcfd033e54c94a20e2a6d6abeed525eac3e0be8f40f8cd3b0cf43abad91d1ec80c3dbca8d827f753b2ccbf9eea20a05ff1cd1d12f5 +"@prisma/debug@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/debug@npm:5.10.2" + checksum: 10c0/9a76f4197d0072f1588c4bf1501aaf6df0729edc929485551d3f90df0b1f5d5933fcc88b9dae8dfeda028c705debe4c436c4bca007687d32bbbf95c5771c7f1f languageName: node linkType: hard -"@prisma/engines-version@npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64": - version: 5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64 - resolution: "@prisma/engines-version@npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64" - checksum: 10c0/861dd5f88fec224c5bd5885f0a33f8ab0cd39190497806d27d411ea8abde2b684eb27518c47bb0b560e025219284b94d2c5d85abc715f2765f2500e766bf2fdd +"@prisma/engines-version@npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9": + version: 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9 + resolution: "@prisma/engines-version@npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9" + checksum: 10c0/b712c8222915d9cb4bf8284d2687ff080d4f8cac61faf0da1d2967f66d086f9202d916f65a6657af11983c5f33890a90657a3360146cbaad6a92876aea889054 languageName: node linkType: hard -"@prisma/engines@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/engines@npm:5.9.1" +"@prisma/engines@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/engines@npm:5.10.2" dependencies: - "@prisma/debug": "npm:5.9.1" - "@prisma/engines-version": "npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64" - "@prisma/fetch-engine": "npm:5.9.1" - "@prisma/get-platform": "npm:5.9.1" - checksum: 10c0/2148c14ec3d46709477319b23dae0e837c91a8119ee01e0a06daf73e6f008bfda5439603d29d722e17b297f2ebe2e73eedb50a4e914a2103931d3de2b4409436 + "@prisma/debug": "npm:5.10.2" + "@prisma/engines-version": "npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9" + "@prisma/fetch-engine": "npm:5.10.2" + "@prisma/get-platform": "npm:5.10.2" + checksum: 10c0/bea6988d78c8e7733af18ec0f2d8f60375a311424f2b45911c9077c4f9d1b04e539802ad62239b8355579214aaccb094af34b5ac86e4a7642d7ac0ed9d7a85b7 languageName: node linkType: hard -"@prisma/fetch-engine@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/fetch-engine@npm:5.9.1" +"@prisma/fetch-engine@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/fetch-engine@npm:5.10.2" dependencies: - "@prisma/debug": "npm:5.9.1" - "@prisma/engines-version": "npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64" - "@prisma/get-platform": "npm:5.9.1" - checksum: 10c0/3abe9ce5dcdea042a6047ba6497730f6d7ce05103de7cf1634e7543742369abc4a62179a8de1cb219e132f5e45729c95c04fc039cebee5b93c23400722ba0583 + "@prisma/debug": "npm:5.10.2" + "@prisma/engines-version": "npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9" + "@prisma/get-platform": "npm:5.10.2" + checksum: 10c0/38f8506ca98280cc011b872ee8d650e857fca07ffeab7214d58c104ee70285739e2dd2b93e78a20d1e57067fc85565bf8ebc23acc350021dcd9ccc4eecb0a831 languageName: node linkType: hard -"@prisma/generator-helper@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/generator-helper@npm:5.9.1" +"@prisma/generator-helper@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/generator-helper@npm:5.10.2" dependencies: - "@prisma/debug": "npm:5.9.1" - checksum: 10c0/34179bc1aded0fec379393f9849046cf3ec3792ca9c052a5486720127af0a234aa0ce3f2b31b04246ac481549a028ddbd9c08259ddcbdce81e8f88db77d5d1f4 + "@prisma/debug": "npm:5.10.2" + checksum: 10c0/ed55784d09780234002149d9712c4410739b7b06cd3aaf22a00639108783df6b43108e56423f5a6cbb28164c864a323988003a830240e9cbbf3d563cf26929ea languageName: node linkType: hard -"@prisma/get-platform@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/get-platform@npm:5.9.1" +"@prisma/get-platform@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/get-platform@npm:5.10.2" dependencies: - "@prisma/debug": "npm:5.9.1" - checksum: 10c0/ac7aa5fca0d5c2a6f04b04bc30eef8df4524ec34e9b2761b47c9fa58ab9b718c5525cb20a944d10e66d7978a4f8ec1ba6cb44a41139d26f885dbfd69c17d385b + "@prisma/debug": "npm:5.10.2" + checksum: 10c0/c3f12262f3dbfe47010ac08a04d29bdc97ca7d112d6abb125c0c90e0001bf7816274715f0605edc261327ec705734bf5ba54101cb7f2b0bb6aa93964f05791e3 languageName: node linkType: hard -"@prisma/internals@npm:5.9.1": - version: 5.9.1 - resolution: "@prisma/internals@npm:5.9.1" - dependencies: - "@prisma/debug": "npm:5.9.1" - "@prisma/engines": "npm:5.9.1" - "@prisma/fetch-engine": "npm:5.9.1" - "@prisma/generator-helper": "npm:5.9.1" - "@prisma/get-platform": "npm:5.9.1" - "@prisma/prisma-schema-wasm": "npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64" +"@prisma/internals@npm:5.10.2": + version: 5.10.2 + resolution: "@prisma/internals@npm:5.10.2" + dependencies: + "@prisma/debug": "npm:5.10.2" + "@prisma/engines": "npm:5.10.2" + "@prisma/fetch-engine": "npm:5.10.2" + "@prisma/generator-helper": "npm:5.10.2" + "@prisma/get-platform": "npm:5.10.2" + "@prisma/prisma-schema-wasm": "npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9" arg: "npm:5.0.2" prompts: "npm:2.4.2" - checksum: 10c0/1afc0e9cbdef678260524b32111d5d2d8aaa684c5800f407055f20c68d39e6afa3e5c0378ce9223a58c6021023c19b08b7ed4a2ee0418552e9213d39b8eeec17 + checksum: 10c0/a648c4320ed036a1649a8ee708971c41469225e469e059ce0388594755a849d7bfe8a732496a778828b38a6aa0399e2a1c138d3dd7934fc6d275a6634d30c774 languageName: node linkType: hard -"@prisma/prisma-schema-wasm@npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64": - version: 5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64 - resolution: "@prisma/prisma-schema-wasm@npm:5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64" - checksum: 10c0/ad61814eb28b57f540fbaa508db7056742905305e0393ee6a5bc3624ed9e54dba75f8472f1bff620b6c47364355e3caa69a1dd2009735e4c4ecbe5cd2110204e +"@prisma/prisma-schema-wasm@npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9": + version: 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9 + resolution: "@prisma/prisma-schema-wasm@npm:5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9" + checksum: 10c0/4a79514d15294dc364670d83eecbcbab71bf2ff04ff7a9fcebdc794e9047b6fef7686d84c0db829514bd2ea1afdd101ab4fcb2574cc27abef285d526cb63df1b languageName: node linkType: hard @@ -7444,8 +7446,8 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" - "@prisma/client": "npm:5.9.1" + "@babel/runtime-corejs3": "npm:7.24.0" + "@prisma/client": "npm:5.10.2" "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" "@types/memjs": "npm:1" @@ -7486,7 +7488,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.35.1" @@ -7503,7 +7505,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7519,7 +7521,7 @@ __metadata: "@auth0/auth0-spa-js": "npm:2.1.2" "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@types/react": "npm:^18.2.55" core-js: "npm:3.35.1" @@ -7537,7 +7539,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" @@ -7555,7 +7557,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7571,7 +7573,7 @@ __metadata: "@azure/msal-browser": "npm:2.38.3" "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@types/netlify-identity-widget": "npm:1.9.6" "@types/react": "npm:^18.2.55" @@ -7590,7 +7592,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@clerk/clerk-sdk-node": "npm:4.13.7" "@redwoodjs/api": "npm:7.0.0" "@types/aws-lambda": "npm:8.10.126" @@ -7606,7 +7608,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7620,7 +7622,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@clerk/clerk-react": "npm:4.30.3" "@clerk/types": "npm:3.60.0" "@redwoodjs/auth": "npm:7.0.0" @@ -7640,7 +7642,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7655,7 +7657,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@redwoodjs/project-config": "npm:7.0.0" "@simplewebauthn/server": "npm:7.4.0" @@ -7676,7 +7678,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@simplewebauthn/browser": "npm:7.4.0" "@simplewebauthn/typescript-types": "npm:7.4.0" @@ -7694,7 +7696,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@simplewebauthn/browser": "npm:7.4.0" "@simplewebauthn/typescript-types": "npm:7.4.0" @@ -7712,7 +7714,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@types/aws-lambda": "npm:8.10.126" core-js: "npm:3.35.1" @@ -7728,7 +7730,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7743,7 +7745,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@types/react": "npm:^18.2.55" core-js: "npm:3.35.1" @@ -7762,7 +7764,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" @@ -7779,7 +7781,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7794,7 +7796,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@types/netlify-identity-widget": "npm:1.9.6" "@types/react": "npm:^18.2.55" @@ -7813,7 +7815,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" @@ -7830,7 +7832,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7844,7 +7846,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@supabase/supabase-js": "npm:2.39.0" "@types/react": "npm:^18.2.55" core-js: "npm:3.35.1" @@ -7862,7 +7864,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/api": "npm:7.0.0" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.35.1" @@ -7881,7 +7883,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.35.1" @@ -7897,7 +7899,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@types/react": "npm:^18.2.55" core-js: "npm:3.35.1" @@ -7916,7 +7918,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@testing-library/jest-dom": "npm:6.3.0" "@testing-library/react": "npm:14.1.2" core-js: "npm:3.35.1" @@ -7937,12 +7939,12 @@ __metadata: "@babel/plugin-transform-private-methods": "npm:^7.22.5" "@babel/plugin-transform-private-property-in-object": "npm:^7.22.11" "@babel/plugin-transform-react-jsx": "npm:^7.22.15" - "@babel/plugin-transform-runtime": "npm:7.23.9" + "@babel/plugin-transform-runtime": "npm:7.24.0" "@babel/preset-env": "npm:^7.22.20" "@babel/preset-react": "npm:^7.22.15" "@babel/preset-typescript": "npm:^7.22.15" "@babel/register": "npm:^7.22.15" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@babel/traverse": "npm:^7.22.20" "@redwoodjs/framework-tools": "npm:7.0.0" "@redwoodjs/project-config": "npm:7.0.0" @@ -7966,7 +7968,7 @@ __metadata: version: 0.0.0-use.local resolution: "@redwoodjs/cli-data-migrate@workspace:packages/cli-packages/dataMigrate" dependencies: - "@prisma/client": "npm:5.9.1" + "@prisma/client": "npm:5.10.2" "@redwoodjs/babel-config": "npm:7.0.0" "@redwoodjs/framework-tools": "npm:7.0.0" "@redwoodjs/project-config": "npm:7.0.0" @@ -8023,14 +8025,14 @@ __metadata: "@redwoodjs/framework-tools": "npm:7.0.0" "@redwoodjs/project-config": "npm:7.0.0" "@redwoodjs/telemetry": "npm:7.0.0" - "@storybook/addon-a11y": "npm:7.6.10" - "@storybook/addon-docs": "npm:7.6.10" - "@storybook/addon-essentials": "npm:7.6.10" - "@storybook/react-webpack5": "npm:7.6.10" + "@storybook/addon-a11y": "npm:7.6.17" + "@storybook/addon-docs": "npm:7.6.17" + "@storybook/addon-essentials": "npm:7.6.17" + "@storybook/react-webpack5": "npm:7.6.17" "@types/yargs": "npm:17.0.32" chalk: "npm:4.1.2" execa: "npm:5.1.1" - storybook: "npm:7.6.10" + storybook: "npm:7.6.17" terminal-link: "npm:2.1.1" tsx: "npm:4.6.2" typescript: "npm:5.3.3" @@ -8044,7 +8046,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@iarna/toml": "npm:2.2.5" "@opentelemetry/api": "npm:1.7.0" "@opentelemetry/core": "npm:1.21.0" @@ -8052,7 +8054,7 @@ __metadata: "@opentelemetry/resources": "npm:1.21.0" "@opentelemetry/sdk-trace-node": "npm:1.21.0" "@opentelemetry/semantic-conventions": "npm:1.21.0" - "@prisma/internals": "npm:5.9.1" + "@prisma/internals": "npm:5.10.2" "@redwoodjs/api-server": "npm:7.0.0" "@redwoodjs/cli-helpers": "npm:7.0.0" "@redwoodjs/fastify-web": "npm:7.0.0" @@ -8090,7 +8092,7 @@ __metadata: pluralize: "npm:8.0.0" portfinder: "npm:1.0.32" prettier: "npm:2.8.8" - prisma: "npm:5.9.1" + prisma: "npm:5.10.2" prompts: "npm:2.4.2" rimraf: "npm:5.0.5" semver: "npm:7.5.4" @@ -8117,7 +8119,7 @@ __metadata: "@babel/core": "npm:^7.22.20" "@babel/parser": "npm:^7.22.16" "@babel/plugin-transform-typescript": "npm:^7.22.15" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@babel/traverse": "npm:^7.22.20" "@iarna/toml": "npm:2.2.5" "@redwoodjs/project-config": "npm:7.0.0" @@ -8166,7 +8168,7 @@ __metadata: resolution: "@redwoodjs/core@workspace:packages/core" dependencies: "@babel/cli": "npm:7.23.9" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@pmmmwh/react-refresh-webpack-plugin": "npm:0.5.11" "@redwoodjs/cli": "npm:7.0.0" "@redwoodjs/eslint-config": "npm:7.0.0" @@ -8289,7 +8291,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@testing-library/dom": "npm:9.3.4" "@testing-library/jest-dom": "npm:6.3.0" "@testing-library/react": "npm:14.1.2" @@ -8330,7 +8332,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@envelop/core": "npm:5.0.0" "@envelop/depth-limit": "npm:4.0.0" "@envelop/disable-introspection": "npm:6.0.0" @@ -8361,6 +8363,7 @@ __metadata: jest: "npm:29.7.0" jsonwebtoken: "npm:9.0.2" lodash: "npm:4.17.21" + tsx: "npm:4.6.2" typescript: "npm:5.3.3" uuid: "npm:9.0.1" languageName: unknown @@ -8375,7 +8378,7 @@ __metadata: "@babel/parser": "npm:^7.22.16" "@babel/plugin-transform-react-jsx": "npm:^7.22.15" "@babel/plugin-transform-typescript": "npm:^7.22.15" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@babel/traverse": "npm:^7.22.20" "@graphql-codegen/add": "npm:4.0.1" "@graphql-codegen/cli": "npm:3.3.1" @@ -8513,7 +8516,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@redwoodjs/internal": "npm:7.0.0" "@redwoodjs/project-config": "npm:7.0.0" @@ -8589,9 +8592,9 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" - "@prisma/client": "npm:5.9.1" - "@prisma/internals": "npm:5.9.1" + "@babel/runtime-corejs3": "npm:7.24.0" + "@prisma/client": "npm:5.10.2" + "@prisma/internals": "npm:5.10.2" "@redwoodjs/project-config": "npm:7.0.0" core-js: "npm:3.35.1" esbuild: "npm:0.20.0" @@ -8605,7 +8608,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@types/react": "npm:^18.2.55" "@types/react-dom": "npm:^18.2.19" @@ -8627,9 +8630,9 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@iarna/toml": "npm:2.2.5" - "@prisma/internals": "npm:5.9.1" + "@prisma/internals": "npm:5.10.2" "@redwoodjs/project-config": "npm:7.0.0" "@types/fs-extra": "npm:11.0.4" "@types/line-column": "npm:1.0.0" @@ -8666,7 +8669,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/project-config": "npm:7.0.0" "@redwoodjs/structure": "npm:7.0.0" "@types/envinfo": "npm:7.8.3" @@ -8689,7 +8692,7 @@ __metadata: dependencies: "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@redwoodjs/babel-config": "npm:7.0.0" "@redwoodjs/context": "npm:7.0.0" @@ -8738,7 +8741,7 @@ __metadata: resolution: "@redwoodjs/vite@workspace:packages/vite" dependencies: "@babel/cli": "npm:7.23.9" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/internal": "npm:7.0.0" "@redwoodjs/project-config": "npm:7.0.0" "@redwoodjs/web": "npm:7.0.0" @@ -8800,11 +8803,11 @@ __metadata: version: 0.0.0-use.local resolution: "@redwoodjs/web@workspace:packages/web" dependencies: - "@apollo/client": "npm:3.8.10" + "@apollo/client": "npm:3.9.5" "@apollo/experimental-nextjs-app-support": "npm:0.0.0-commit-b8a73fe" "@babel/cli": "npm:7.23.9" "@babel/core": "npm:^7.22.20" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@redwoodjs/auth": "npm:7.0.0" "@testing-library/jest-dom": "npm:6.3.0" "@testing-library/react": "npm:14.1.2" @@ -9126,71 +9129,71 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-a11y@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-a11y@npm:7.6.10" +"@storybook/addon-a11y@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-a11y@npm:7.6.17" dependencies: - "@storybook/addon-highlight": "npm:7.6.10" + "@storybook/addon-highlight": "npm:7.6.17" axe-core: "npm:^4.2.0" - checksum: 10c0/dfbf9d1ea10d313cb3855693c68264c0ced28c88aaecd0556bb62ce9ee01e38294aaa5298d9a136313c35cb9edaed447d9aef063802d1862119e78d8d03404db + checksum: 10c0/2784a9caea452eff3101605bf1fa5a7b992340ecc13d6edc7965fcfbf4d3b4249ede6d111e9d4a6cff1434064c9d3c3d65481ef68c9312dc8b46419217bf7725 languageName: node linkType: hard -"@storybook/addon-actions@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-actions@npm:7.6.10" +"@storybook/addon-actions@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-actions@npm:7.6.17" dependencies: - "@storybook/core-events": "npm:7.6.10" + "@storybook/core-events": "npm:7.6.17" "@storybook/global": "npm:^5.0.0" "@types/uuid": "npm:^9.0.1" dequal: "npm:^2.0.2" polished: "npm:^4.2.2" uuid: "npm:^9.0.0" - checksum: 10c0/1b394d0be63400963fcecc0f50ef8554185d628f8c5b29f357656eaa9d6a52e40560ac8f34140fa7c7de15c13b910d7c0585a23e3e23bbf0068e94f7bcc4f382 + checksum: 10c0/91d20a7c35fff6a0b2aa33f2c1171d457c68fb9d955da12629d6f75d931d5aa3756837e413ab7bb928c4cc4b48dcc5cdd63510e6028e7bd8fc8c82d93be967d0 languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-backgrounds@npm:7.6.10" +"@storybook/addon-backgrounds@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-backgrounds@npm:7.6.17" dependencies: "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" ts-dedent: "npm:^2.0.0" - checksum: 10c0/3dab198f8bec8525e9ad0f31d9b8a98d4debb224ce81b91cd96199018de300cb08b36b337e580a532646db4de3580fee3606be4bf2f86867b1e02ec4bca54bff + checksum: 10c0/43518d762efa8dd140d029541e8e2bb748173a8428e3de67287ca132525e33e443282a2b06f3b381250d9557ada9ea3a07039aa69cf3de6b04aec02027fb9943 languageName: node linkType: hard -"@storybook/addon-controls@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-controls@npm:7.6.10" +"@storybook/addon-controls@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-controls@npm:7.6.17" dependencies: - "@storybook/blocks": "npm:7.6.10" + "@storybook/blocks": "npm:7.6.17" lodash: "npm:^4.17.21" ts-dedent: "npm:^2.0.0" - checksum: 10c0/4af41964c74c8eeb2420a8922a1a2725efd7ea8d8a06a5c897885a3fc09cccaa05035738cff7089df352e345696ae6781ceef0e6e9626c749760bb2d5ad37513 + checksum: 10c0/da66466b801064a916e059ce127efb2ab074a5c80fb65b568ac361d09fe55e0e993cd5400d6b0361bdfd783725e59449bbd30f87643964fa0db8e02a5f9550fd languageName: node linkType: hard -"@storybook/addon-docs@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-docs@npm:7.6.10" +"@storybook/addon-docs@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-docs@npm:7.6.17" dependencies: "@jest/transform": "npm:^29.3.1" "@mdx-js/react": "npm:^2.1.5" - "@storybook/blocks": "npm:7.6.10" - "@storybook/client-logger": "npm:7.6.10" - "@storybook/components": "npm:7.6.10" - "@storybook/csf-plugin": "npm:7.6.10" - "@storybook/csf-tools": "npm:7.6.10" + "@storybook/blocks": "npm:7.6.17" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/components": "npm:7.6.17" + "@storybook/csf-plugin": "npm:7.6.17" + "@storybook/csf-tools": "npm:7.6.17" "@storybook/global": "npm:^5.0.0" "@storybook/mdx2-csf": "npm:^1.0.0" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/postinstall": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" - "@storybook/react-dom-shim": "npm:7.6.10" - "@storybook/theming": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/postinstall": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" + "@storybook/react-dom-shim": "npm:7.6.17" + "@storybook/theming": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" fs-extra: "npm:^11.1.0" remark-external-links: "npm:^8.0.0" remark-slug: "npm:^6.0.0" @@ -9198,95 +9201,95 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/d30f0cbd4f6edd454b47fad2ece36de0fe246d2b2a5b90f505ad76b9991dc8572822c758e0b48ae5f9d04b46581ebf9bd86d1ed257317d7453fe1cbc4d58cf93 - languageName: node - linkType: hard - -"@storybook/addon-essentials@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-essentials@npm:7.6.10" - dependencies: - "@storybook/addon-actions": "npm:7.6.10" - "@storybook/addon-backgrounds": "npm:7.6.10" - "@storybook/addon-controls": "npm:7.6.10" - "@storybook/addon-docs": "npm:7.6.10" - "@storybook/addon-highlight": "npm:7.6.10" - "@storybook/addon-measure": "npm:7.6.10" - "@storybook/addon-outline": "npm:7.6.10" - "@storybook/addon-toolbars": "npm:7.6.10" - "@storybook/addon-viewport": "npm:7.6.10" - "@storybook/core-common": "npm:7.6.10" - "@storybook/manager-api": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" + checksum: 10c0/b43666832f1657f4dfac976ac8b8071995d65860a29f1ac66b80adb69a0d02f0d1d70684d94ddb76f0957f003b94b4252599e19f1e6a4342686598bbb40280ae + languageName: node + linkType: hard + +"@storybook/addon-essentials@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-essentials@npm:7.6.17" + dependencies: + "@storybook/addon-actions": "npm:7.6.17" + "@storybook/addon-backgrounds": "npm:7.6.17" + "@storybook/addon-controls": "npm:7.6.17" + "@storybook/addon-docs": "npm:7.6.17" + "@storybook/addon-highlight": "npm:7.6.17" + "@storybook/addon-measure": "npm:7.6.17" + "@storybook/addon-outline": "npm:7.6.17" + "@storybook/addon-toolbars": "npm:7.6.17" + "@storybook/addon-viewport": "npm:7.6.17" + "@storybook/core-common": "npm:7.6.17" + "@storybook/manager-api": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" ts-dedent: "npm:^2.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/4fdaac14b2b0be6ac6cfe7d43760cbffd6be612917c4f3f553512b655ef6460fe9f4734eccc85b0358ca1a51e8b0f82ce94f70866ac56729903e4626a0ee39ae + checksum: 10c0/3208790b219e88fadc634aa00134eb3f0da9d2c05cd84e733d07e201177c58bccb85879ee4c26441a35b1e7fd318111dd668fdd8b3e57b37da512a658d4f50e9 languageName: node linkType: hard -"@storybook/addon-highlight@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-highlight@npm:7.6.10" +"@storybook/addon-highlight@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-highlight@npm:7.6.17" dependencies: "@storybook/global": "npm:^5.0.0" - checksum: 10c0/879fa4723150fa1c0d7eb975144d0194571f1343c10c3b105032ecf1f678da8d1b65fa895b1e74b68f0770596fc90ca43c734b81b88b79722b63f726a66827fc + checksum: 10c0/5f16a648a38257bdd66f592b519cc6b4ecf36c50d0cb01696f1c42c6c9fa2b44b7056b64d611579f2ec4764787b6bd34ea6b9ebddb01b0e562b3eb8100b1cf96 languageName: node linkType: hard -"@storybook/addon-measure@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-measure@npm:7.6.10" +"@storybook/addon-measure@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-measure@npm:7.6.17" dependencies: "@storybook/global": "npm:^5.0.0" tiny-invariant: "npm:^1.3.1" - checksum: 10c0/ee5bcebfe1827fc290d8f26b673f3b209037c08b2e7f3711b581238bb9a58214ef318bd63f0ceb6ce162e0976260d5f880b73c72226da0ba5e6ec7a0777e282b + checksum: 10c0/18c26fd08c6b369ae74cbea4447ae0791efb6968875223b12e84021cf1c7a48496d56c35c6b1de03603081b650c3e4b54530b8704b68467bc667cbf550623ef9 languageName: node linkType: hard -"@storybook/addon-outline@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-outline@npm:7.6.10" +"@storybook/addon-outline@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-outline@npm:7.6.17" dependencies: "@storybook/global": "npm:^5.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10c0/81fa670e385311a9430fc7037aa20a90bf8c5e8731c52cac2d0f575e893c24e8747e961267a4d4d72ba8bd440063d5cb7671d97527b1403fbd17cca2c79611b8 + checksum: 10c0/840a554504c457e3dee273266ba90a7f36b7488a72644d046f0233c305d7fe3a0773848d104a3dc7d6efafc3e1b41a3fc4d6cdd7a37b3a3fe75a03fcde206efb languageName: node linkType: hard -"@storybook/addon-toolbars@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-toolbars@npm:7.6.10" - checksum: 10c0/876808b468b0baf60c275349fde43e12f3aa1a362d7b3d72f78f3ac63e54020b4999da21cee4a542c671cd01238da051c2ecbcf7ce05e063bdde801453230e2e +"@storybook/addon-toolbars@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-toolbars@npm:7.6.17" + checksum: 10c0/af4453848c29ab8edb0cf6ca42ff14750841eaf3b523920620e42c27c0f07574a83c0dfe75f6a0de1846178aafb6833d59cef7faa7268777c24ed490da647814 languageName: node linkType: hard -"@storybook/addon-viewport@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/addon-viewport@npm:7.6.10" +"@storybook/addon-viewport@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/addon-viewport@npm:7.6.17" dependencies: memoizerific: "npm:^1.11.3" - checksum: 10c0/97ee1bd3a64a715b0bbf28eeb430107fc02cf568d2e0a6f2b8b1ac161b8355a2e384de6a81ded98f08f9bd1f78329d928f3c73ff0556c57b8dc0684c05e5ed64 + checksum: 10c0/d888954f45ab358189cf0172e1c9b8a1bd2b68aa99d5d6518abe7fc355bbfeb91cc1c21c64e461994f5987652d05944aaa270366e22475eaeccadc701419b0d7 languageName: node linkType: hard -"@storybook/blocks@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/blocks@npm:7.6.10" +"@storybook/blocks@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/blocks@npm:7.6.17" dependencies: - "@storybook/channels": "npm:7.6.10" - "@storybook/client-logger": "npm:7.6.10" - "@storybook/components": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" + "@storybook/channels": "npm:7.6.17" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/components": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" "@storybook/csf": "npm:^0.1.2" - "@storybook/docs-tools": "npm:7.6.10" + "@storybook/docs-tools": "npm:7.6.17" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" - "@storybook/theming": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/manager-api": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" + "@storybook/theming": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/lodash": "npm:^4.14.167" color-convert: "npm:^2.0.1" dequal: "npm:^2.0.2" @@ -9302,18 +9305,18 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/a24947dcfbfda75f1a2f5c07f1a2a35d98960ce985c4dde1520169020b40ba85192c25e61b31e104d739bfecc4b7f03e05e31c8954024f2a08e6c13a54b1acd1 + checksum: 10c0/f38233c935679345b4893d3d75b38ca8e74f3749b1f42a2356b61754bf1886cde8565546cdf53217335c8318506c56954aee7cc23c627b06f2d8c3b842d5d12b languageName: node linkType: hard -"@storybook/builder-manager@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/builder-manager@npm:7.6.10" +"@storybook/builder-manager@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/builder-manager@npm:7.6.17" dependencies: "@fal-works/esbuild-plugin-global-externals": "npm:^2.1.2" - "@storybook/core-common": "npm:7.6.10" - "@storybook/manager": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" + "@storybook/core-common": "npm:7.6.17" + "@storybook/manager": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" "@types/ejs": "npm:^3.1.1" "@types/find-cache-dir": "npm:^3.2.1" "@yarnpkg/esbuild-plugin-pnp": "npm:^3.0.0-rc.10" @@ -9326,23 +9329,23 @@ __metadata: fs-extra: "npm:^11.1.0" process: "npm:^0.11.10" util: "npm:^0.12.4" - checksum: 10c0/06294f7a54241b320c92a241812d4e8a36b6ecf7d76fe1befd855f8fae77f8545d1168f3f6f005a5224afdc788e529cf822162b31fcd9a172b271ae46f815d38 + checksum: 10c0/1b2ca77f7f3bf3c72890e949cfadc45d633fee7315ebcabfc1d6e23cd259db93114cbd9b9197597057f90c5fd60b3e72b0782a284a4f80c6efdd15f118b2c594 languageName: node linkType: hard -"@storybook/builder-webpack5@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/builder-webpack5@npm:7.6.10" +"@storybook/builder-webpack5@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/builder-webpack5@npm:7.6.17" dependencies: "@babel/core": "npm:^7.23.2" - "@storybook/channels": "npm:7.6.10" - "@storybook/client-logger": "npm:7.6.10" - "@storybook/core-common": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" - "@storybook/core-webpack": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/preview": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" + "@storybook/channels": "npm:7.6.17" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/core-common": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" + "@storybook/core-webpack": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/preview": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" "@swc/core": "npm:^1.3.82" "@types/node": "npm:^18.0.0" "@types/semver": "npm:^7.3.4" @@ -9375,40 +9378,40 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/8771a1666d41d3318d5fbb34c5307ca75c3e526293cc9db8b915750526ea5f238c0e3368eb2980f9dc205f2b0f5c29263ed38238461591d006abeb9ab34efa60 + checksum: 10c0/5d5eb4cefb8e52119c3d0ef7f6b13557c00ebad80af8f35482bcd7d55ce50575d33dc12a66a0844f0171619174c7021489cfcf3b8cc128e0f05da6ff2b14e819 languageName: node linkType: hard -"@storybook/channels@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/channels@npm:7.6.10" +"@storybook/channels@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/channels@npm:7.6.17" dependencies: - "@storybook/client-logger": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" "@storybook/global": "npm:^5.0.0" qs: "npm:^6.10.0" telejson: "npm:^7.2.0" tiny-invariant: "npm:^1.3.1" - checksum: 10c0/4c7522701fd4b0e2c6c9bca2513ff38f97cdbbaf4f9d3d3d02f3aafce4b7395151232aaa70af5b33b9c830008b6e7ab6149d16ab6b6bebcce4593dbb0c42aec2 + checksum: 10c0/7109b67a60c656d22deb1b9b44bf0e26b565044de6ccf63589b0e52188931e2eaa11b78f7a0e1b59396f654537f79ac4264c715417d467aca602a6e80495f49e languageName: node linkType: hard -"@storybook/cli@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/cli@npm:7.6.10" +"@storybook/cli@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/cli@npm:7.6.17" dependencies: "@babel/core": "npm:^7.23.2" "@babel/preset-env": "npm:^7.23.2" "@babel/types": "npm:^7.23.0" "@ndelangen/get-tarball": "npm:^3.0.7" - "@storybook/codemod": "npm:7.6.10" - "@storybook/core-common": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" - "@storybook/core-server": "npm:7.6.10" - "@storybook/csf-tools": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/telemetry": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/codemod": "npm:7.6.17" + "@storybook/core-common": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" + "@storybook/core-server": "npm:7.6.17" + "@storybook/csf-tools": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/telemetry": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/semver": "npm:^7.3.4" "@yarnpkg/fslib": "npm:2.10.3" "@yarnpkg/libzip": "npm:2.3.0" @@ -9440,30 +9443,30 @@ __metadata: bin: getstorybook: ./bin/index.js sb: ./bin/index.js - checksum: 10c0/7f6d5193f1fd7e2ff89189925e82f52bda1ada726d9cf368179e62e34d29fe9540c33a7f8df5e24340ce254a7743c78631dd6dc4469c33d565aaf015096ecd32 + checksum: 10c0/8d8d426a1eca5d58a4cafa8418a1c8a41736e21a89c66307d18cea98c583976d672ae0773ab53e4e38f110dad2db788bd5d8daef3970ae14834db205818713ef languageName: node linkType: hard -"@storybook/client-logger@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/client-logger@npm:7.6.10" +"@storybook/client-logger@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/client-logger@npm:7.6.17" dependencies: "@storybook/global": "npm:^5.0.0" - checksum: 10c0/055ddeedb39a172c1d2f5ee3b3806c8a3fa1b060faea496520aecc513a79661498be1f08ab8720465054bc958910cfceb652b8a725a5254a33e6747a4eb5d869 + checksum: 10c0/77ebd176e65171b10b94f65ce7f10ed8c78e162b54462f5b87604f568e747f1604b4eb62ff7a601bf02d7e72b32e373fb980dd9c688a655706e74c025ebb82f3 languageName: node linkType: hard -"@storybook/codemod@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/codemod@npm:7.6.10" +"@storybook/codemod@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/codemod@npm:7.6.17" dependencies: "@babel/core": "npm:^7.23.2" "@babel/preset-env": "npm:^7.23.2" "@babel/types": "npm:^7.23.0" "@storybook/csf": "npm:^0.1.2" - "@storybook/csf-tools": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/csf-tools": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/cross-spawn": "npm:^6.0.2" cross-spawn: "npm:^7.0.3" globby: "npm:^11.0.2" @@ -9471,48 +9474,48 @@ __metadata: lodash: "npm:^4.17.21" prettier: "npm:^2.8.0" recast: "npm:^0.23.1" - checksum: 10c0/f6073a99fd7f6cde73bfa3146642a8d1c131274c1c890e1a2c159e9b1442c767839b265e713145507195a1fa8c3b1b962bad4e79d689aa2edccf6805422552ee + checksum: 10c0/b8428203dfa551ea34b34659e5231cdc03eeb0fba2c53f801794b732515b173131bbe3df14dff9a540c18d3dfdafa7f94d11dbf34bf4dbaf03a47dd7c80d09ae languageName: node linkType: hard -"@storybook/components@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/components@npm:7.6.10" +"@storybook/components@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/components@npm:7.6.17" dependencies: "@radix-ui/react-select": "npm:^1.2.2" "@radix-ui/react-toolbar": "npm:^1.0.4" - "@storybook/client-logger": "npm:7.6.10" + "@storybook/client-logger": "npm:7.6.17" "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/theming": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/theming": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" memoizerific: "npm:^1.11.3" use-resize-observer: "npm:^9.1.0" util-deprecate: "npm:^1.0.2" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/1f8d9d22a0fc929cbc61704ee0234a0a3b31c163e250801022d9a6e896980963773b47840c26a55911afd2d52e0041a450458f9a9e7916cc34572287f40b2035 + checksum: 10c0/199421d7668a3afcce9375c567443704778b4288bed16a39f02e5c1aaa9892b4ffba829b47d5a3fa8328521f6e0c26e5e7e7beed898cc0f8f835a99ec8f125a6 languageName: node linkType: hard -"@storybook/core-client@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/core-client@npm:7.6.10" +"@storybook/core-client@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/core-client@npm:7.6.17" dependencies: - "@storybook/client-logger": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" - checksum: 10c0/15e27a56778789cfd2afe03a7722b6bc72302eb5aaea7f0d641008e3a01fa57f2651db5839c539f43cf42ac7783870be67f12411a56a763fa9f38ad74d8cd94c + "@storybook/client-logger": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" + checksum: 10c0/3342367bce219d46ac0c5b494688ae86aeb5c4006d98749dec2e30518850bc76a8b255611e9151f043d5141d11deb781b972c8610e98565cab4112dc86b7c1d5 languageName: node linkType: hard -"@storybook/core-common@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/core-common@npm:7.6.10" +"@storybook/core-common@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/core-common@npm:7.6.17" dependencies: - "@storybook/core-events": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/core-events": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/find-cache-dir": "npm:^3.2.1" "@types/node": "npm:^18.0.0" "@types/node-fetch": "npm:^2.6.4" @@ -9533,38 +9536,38 @@ __metadata: pretty-hrtime: "npm:^1.0.3" resolve-from: "npm:^5.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10c0/0d08aa5b36385ae323f4d4fb940954df90ac4d91ba4f5960d1287b23b43d51116ad92cd4037349f8aace1c0770aac39d2f7d6723e50cf9e79634ea2a42c990e8 + checksum: 10c0/5be46d8f2d97dcde4a45de688278baed78185b44895825fe2f9423b70410fa88214a9709f40e7656cebe218a2c57cfa9979228e9f2b522eb47cf5af825d1133d languageName: node linkType: hard -"@storybook/core-events@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/core-events@npm:7.6.10" +"@storybook/core-events@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/core-events@npm:7.6.17" dependencies: ts-dedent: "npm:^2.0.0" - checksum: 10c0/9432820a7742621f2eba58e4a121b9f00cf052977d059a32e4e9fe15e877b75c21b4ffd3c925138b59c18c06b3e3ef00c0e67ff3769ee3125e6423cec5a2bc91 + checksum: 10c0/ab6410da3a456a61138b4a760a28b74bb9dc6f4c81de0d5ff7760b1853c6a437f8a0d05301c291f45503575d60c3be4805db4178f649eccd32c5ffd98a790250 languageName: node linkType: hard -"@storybook/core-server@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/core-server@npm:7.6.10" +"@storybook/core-server@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/core-server@npm:7.6.17" dependencies: "@aw-web-design/x-default-browser": "npm:1.4.126" "@discoveryjs/json-ext": "npm:^0.5.3" - "@storybook/builder-manager": "npm:7.6.10" - "@storybook/channels": "npm:7.6.10" - "@storybook/core-common": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" + "@storybook/builder-manager": "npm:7.6.17" + "@storybook/channels": "npm:7.6.17" + "@storybook/core-common": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" "@storybook/csf": "npm:^0.1.2" - "@storybook/csf-tools": "npm:7.6.10" + "@storybook/csf-tools": "npm:7.6.17" "@storybook/docs-mdx": "npm:^0.1.0" "@storybook/global": "npm:^5.0.0" - "@storybook/manager": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" - "@storybook/telemetry": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/manager": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" + "@storybook/telemetry": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/detect-port": "npm:^1.3.0" "@types/node": "npm:^18.0.0" "@types/pretty-hrtime": "npm:^1.0.0" @@ -9577,7 +9580,7 @@ __metadata: express: "npm:^4.17.3" fs-extra: "npm:^11.1.0" globby: "npm:^11.0.2" - ip: "npm:^2.0.0" + ip: "npm:^2.0.1" lodash: "npm:^4.17.21" open: "npm:^8.4.0" pretty-hrtime: "npm:^1.0.3" @@ -9591,47 +9594,47 @@ __metadata: util-deprecate: "npm:^1.0.2" watchpack: "npm:^2.2.0" ws: "npm:^8.2.3" - checksum: 10c0/68e9f02f8e8d405c2cfa50d8eb343515ed93594d4035dbcb7951ae861eeacea22fed865fa2f6b793e804e8b4e252c38cf222aea4b9ef0e2a6b6c5b83f3449195 + checksum: 10c0/b56077bea18c22151adb72c96efb1717034314b08bba5cae12b1f8a0e4135773f5c1e334ad3523dfeb578078b2d41a6091e2b0a992a110ca1859fdd89b1a4702 languageName: node linkType: hard -"@storybook/core-webpack@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/core-webpack@npm:7.6.10" +"@storybook/core-webpack@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/core-webpack@npm:7.6.17" dependencies: - "@storybook/core-common": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/core-common": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/node": "npm:^18.0.0" ts-dedent: "npm:^2.0.0" - checksum: 10c0/e7b6a78921753a099bf6e53a990460f1b0b6103e9996490b6f323468cf2466282ec2513654f8aee6c38dbe1498b402ff6e79f009791b2cdadd53e34ccb9d4a35 + checksum: 10c0/dad0817906effbd833939ed3cfdd9ae6e3fecd74b77e367f1c140f297ac20d551a609bde2363f8690649bee680ea5136bf2ee258e1034f4a30ff46d88ea1cf64 languageName: node linkType: hard -"@storybook/csf-plugin@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/csf-plugin@npm:7.6.10" +"@storybook/csf-plugin@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/csf-plugin@npm:7.6.17" dependencies: - "@storybook/csf-tools": "npm:7.6.10" + "@storybook/csf-tools": "npm:7.6.17" unplugin: "npm:^1.3.1" - checksum: 10c0/82e5704db25b4fe41a0a5b6dacec5f01971aa0f69e8bf89f0b6f2867bbb935df986aec74aac2e69d568e53aa06fba45cde6cfa27885344db70bc587d923502bb + checksum: 10c0/720ecbd2e845f6d6d575b8fb5b05a085ddba1eb486318a9b7d6f2ea6646fe3e62d7c9589e18aab15ce0a715c653c9d24b2e0f38117e92845e636f0410a85f76d languageName: node linkType: hard -"@storybook/csf-tools@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/csf-tools@npm:7.6.10" +"@storybook/csf-tools@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/csf-tools@npm:7.6.17" dependencies: "@babel/generator": "npm:^7.23.0" "@babel/parser": "npm:^7.23.0" "@babel/traverse": "npm:^7.23.2" "@babel/types": "npm:^7.23.0" "@storybook/csf": "npm:^0.1.2" - "@storybook/types": "npm:7.6.10" + "@storybook/types": "npm:7.6.17" fs-extra: "npm:^11.1.0" recast: "npm:^0.23.1" ts-dedent: "npm:^2.0.0" - checksum: 10c0/ab0d3ab39fb3a2c1b6e88f504ba23b42717c5186f4bf2222edd800f01f7f2ff781b8651d90e21a844c24b744ce3ffb25b176a619f866ed40c9db45ba5e3a0534 + checksum: 10c0/827458c97de27127a026d6f4592ad8760f27b69dc1082251710b8067b0616bf2c6b9c13b12cbf12a8162a6528d92ca81839cf78d0d10d09978d3ccdedaca7bce languageName: node linkType: hard @@ -9651,18 +9654,18 @@ __metadata: languageName: node linkType: hard -"@storybook/docs-tools@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/docs-tools@npm:7.6.10" +"@storybook/docs-tools@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/docs-tools@npm:7.6.17" dependencies: - "@storybook/core-common": "npm:7.6.10" - "@storybook/preview-api": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/core-common": "npm:7.6.17" + "@storybook/preview-api": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/doctrine": "npm:^0.0.3" assert: "npm:^2.1.0" doctrine: "npm:^3.0.0" lodash: "npm:^4.17.21" - checksum: 10c0/6d4a7c8385589c9f9ee8bc3847c031452d22491bd6877e6112c241dbf8a1666cc7df3fd5eed09079d15eb6d01325d32b3db9b397e20328237fcc7ba0431d4d9f + checksum: 10c0/38473d0ce609cee38df5a8f3ad34a23ce6050e06b492cab51052ba67a2c6ecece532e0dee9f5e3cc5dee3d7105233289d05465a7ae0f5cb94fd2bbda1c267d38 languageName: node linkType: hard @@ -9673,32 +9676,32 @@ __metadata: languageName: node linkType: hard -"@storybook/manager-api@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/manager-api@npm:7.6.10" +"@storybook/manager-api@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/manager-api@npm:7.6.17" dependencies: - "@storybook/channels": "npm:7.6.10" - "@storybook/client-logger": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" + "@storybook/channels": "npm:7.6.17" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/router": "npm:7.6.10" - "@storybook/theming": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/router": "npm:7.6.17" + "@storybook/theming": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" memoizerific: "npm:^1.11.3" store2: "npm:^2.14.2" telejson: "npm:^7.2.0" ts-dedent: "npm:^2.0.0" - checksum: 10c0/99c2cdd18a581f7bc1adb2a167036f61ea72bf48df1c942dabf01674ffa1eb0be7caa96b4b2999a028b35b3bff745af37fc6c52e1f2f2581e8492164c97398e2 + checksum: 10c0/475d0e0d37a72087c6b4f4e0bfe6ad648c27b5ea34951580b2e339f883d697ac7c4d99926db544a7c58b0aba959ad2d70129d7a7cee4bafaccd3810329a51e03 languageName: node linkType: hard -"@storybook/manager@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/manager@npm:7.6.10" - checksum: 10c0/c5e6c2ca8c016d2d2b9482f2b72a63718850929993d50eca1d30e0b24b54b25986416deda2dd52fe6c36aaa41498a66066844dfa3bac4db6a2f112789e8607ef +"@storybook/manager@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/manager@npm:7.6.17" + checksum: 10c0/e703466e95b0fca58963ac0abec188164e6bce904471171dd360c0d63ead0183a5b242db034af63157acd42d38348984e5fe4e6414af6190234c4d5d41608cee languageName: node linkType: hard @@ -9709,31 +9712,31 @@ __metadata: languageName: node linkType: hard -"@storybook/node-logger@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/node-logger@npm:7.6.10" - checksum: 10c0/6e1946d48c1ed756c3c0a8b082ece63d1e3bd437afdd3abc711ebd68ed913af7e50b3f6b1f79f8b8b94b07e3d3f8bd8adccd42aac9b5c6f886557dd21a0a947e +"@storybook/node-logger@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/node-logger@npm:7.6.17" + checksum: 10c0/7b91f10812b8ea4e8716c3b133c5a78ac419e6bcd6a6ab80117cee25287aa973c1710a74a882238697499a1eca6521c4171f4f2d2e8651fb8ef6e28b7ee167fe languageName: node linkType: hard -"@storybook/postinstall@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/postinstall@npm:7.6.10" - checksum: 10c0/54b1b0712dbe9091e07e35b52a6fc2a06ca40550df1674182f0b819491aea4e232cb605c03ef460b74b04bf5dc331a1b6cd47e8d27d9bcadc61819e136d0ec2e +"@storybook/postinstall@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/postinstall@npm:7.6.17" + checksum: 10c0/62038e1feacfa5b9acc85afd1cdcbee3c9d780c8dbb6d2eb8cf7bfbb6a14d989fa61351958f512415761d5190075367f1f3641e104c0cec0a2c8dd056617dea6 languageName: node linkType: hard -"@storybook/preset-react-webpack@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/preset-react-webpack@npm:7.6.10" +"@storybook/preset-react-webpack@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/preset-react-webpack@npm:7.6.17" dependencies: "@babel/preset-flow": "npm:^7.22.15" "@babel/preset-react": "npm:^7.22.15" "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.11" - "@storybook/core-webpack": "npm:7.6.10" - "@storybook/docs-tools": "npm:7.6.10" - "@storybook/node-logger": "npm:7.6.10" - "@storybook/react": "npm:7.6.10" + "@storybook/core-webpack": "npm:7.6.17" + "@storybook/docs-tools": "npm:7.6.17" + "@storybook/node-logger": "npm:7.6.17" + "@storybook/react": "npm:7.6.17" "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" "@types/node": "npm:^18.0.0" "@types/semver": "npm:^7.3.4" @@ -9753,20 +9756,20 @@ __metadata: optional: true typescript: optional: true - checksum: 10c0/25b4ad5650c5a73a9b4502d0b275760d9c9ad1b0b28357f5eda3659020bba411719765790c373930edcf80bc9c7cc845cb5d8ec5626bd978cdfa7db466a5b261 + checksum: 10c0/092af3e2fed5fd17750dea11809981e9baa2d02f69f1fcc66da21e49aec006820ad72a45d53f96bdfee1c6481370c2a15d9bda626681d7ac09d2c22e7eb1e77d languageName: node linkType: hard -"@storybook/preview-api@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/preview-api@npm:7.6.10" +"@storybook/preview-api@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/preview-api@npm:7.6.17" dependencies: - "@storybook/channels": "npm:7.6.10" - "@storybook/client-logger": "npm:7.6.10" - "@storybook/core-events": "npm:7.6.10" + "@storybook/channels": "npm:7.6.17" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/core-events": "npm:7.6.17" "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/types": "npm:7.6.10" + "@storybook/types": "npm:7.6.17" "@types/qs": "npm:^6.9.5" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" @@ -9775,14 +9778,14 @@ __metadata: synchronous-promise: "npm:^2.0.15" ts-dedent: "npm:^2.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10c0/57d82b807e5d20e6582f0ebd38d0edda393f9712c71aabad16b72567e8978d005e5bf3d8470a8a64ad49b7929bf4ef67f172c66797375273e64fa26db542aabf + checksum: 10c0/b4357ee0c1f9b05feee051d0c0ed3343972277f12d9d033fcc59acfb18d336cecc4a5f0b23998011af4a92c8126e785b2931dbdbdf79787aac5756a01c32aee0 languageName: node linkType: hard -"@storybook/preview@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/preview@npm:7.6.10" - checksum: 10c0/519dd85d1c560ee4aa960c4fe9354c5ba5a51eca711bc498f55e5b846860352da53c27939982ab79edebafa4fcb2c7465ccb6e25ba15e5c699d8ed48e6499b8c +"@storybook/preview@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/preview@npm:7.6.17" + checksum: 10c0/b4a2394c4622ff7291ba1b161d537902c53ed52ae3511c65e10c934b04463f6e7e55487b88889800acab55ea1c0aa33ea2a207786f3e06eda4617787f859da6b languageName: node linkType: hard @@ -9804,23 +9807,23 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/react-dom-shim@npm:7.6.10" +"@storybook/react-dom-shim@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/react-dom-shim@npm:7.6.17" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/4626bfa823440f142835e9a7750a1e6aeeb573ba80eb94d42435814168b52288dc0dd79373ebe54699107f2a7b6d0f10f76fac786e17c9208dbec47ef73806a0 + checksum: 10c0/20558c58f9f0a3a00c5a1bbf2aa3517e3d318e6528f503129c99fb9ee4b604a225e79725f67e01e6e99d5d8c7db0614575dcc89af7768381afe59c976cb7cfc0 languageName: node linkType: hard -"@storybook/react-webpack5@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/react-webpack5@npm:7.6.10" +"@storybook/react-webpack5@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/react-webpack5@npm:7.6.17" dependencies: - "@storybook/builder-webpack5": "npm:7.6.10" - "@storybook/preset-react-webpack": "npm:7.6.10" - "@storybook/react": "npm:7.6.10" + "@storybook/builder-webpack5": "npm:7.6.17" + "@storybook/preset-react-webpack": "npm:7.6.17" + "@storybook/react": "npm:7.6.17" "@types/node": "npm:^18.0.0" peerDependencies: "@babel/core": ^7.22.0 @@ -9832,21 +9835,21 @@ __metadata: optional: true typescript: optional: true - checksum: 10c0/9406f464f0fcfb9c226b1b962194e06b9445527bd2d6c0e6e99074d4174b69992fb99b8d2e069977030c879cf4296c6ea0cc6675e0022cc51f9c54f05fe2ca07 + checksum: 10c0/c95317c225fba4ae0cd93f3b602d758adb598dd8952ea0fee425809ba991086a0260a64eb3e6f815a8c99a877cc97af9a2d21862b178f4e0249818e3454d0193 languageName: node linkType: hard -"@storybook/react@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/react@npm:7.6.10" +"@storybook/react@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/react@npm:7.6.17" dependencies: - "@storybook/client-logger": "npm:7.6.10" - "@storybook/core-client": "npm:7.6.10" - "@storybook/docs-tools": "npm:7.6.10" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/core-client": "npm:7.6.17" + "@storybook/docs-tools": "npm:7.6.17" "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.6.10" - "@storybook/react-dom-shim": "npm:7.6.10" - "@storybook/types": "npm:7.6.10" + "@storybook/preview-api": "npm:7.6.17" + "@storybook/react-dom-shim": "npm:7.6.17" + "@storybook/types": "npm:7.6.17" "@types/escodegen": "npm:^0.0.6" "@types/estree": "npm:^0.0.51" "@types/node": "npm:^18.0.0" @@ -9868,61 +9871,61 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/eabdeb5420a24b4fe7b80d31ae4eb9a230af68f16e57117eccb08adea785c623f4863afd97596329d77992e550dc64490871dad65d9b1e2c3e64d3d4e7f3046e + checksum: 10c0/747bb48413865701716652b9587c8c5b07cc51cb1d54125a69a4ec355f24fdcfc3a9d925a0b6268786875e97addf435e10efe737450e50eea1d19408049674e6 languageName: node linkType: hard -"@storybook/router@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/router@npm:7.6.10" +"@storybook/router@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/router@npm:7.6.17" dependencies: - "@storybook/client-logger": "npm:7.6.10" + "@storybook/client-logger": "npm:7.6.17" memoizerific: "npm:^1.11.3" qs: "npm:^6.10.0" - checksum: 10c0/3899b7aa525243ce57f26621d9e5602d7168887d26a98c03b0cc935c8fd98d17ec6dde3cca34226f8fe29f5f292b1fa329e762a4a6a75edbe87592512640705e + checksum: 10c0/8e5f354bd835319ca3c7f3ea8248914e7c22dee5815b1bdcbdbf6a9dc018f608683e482013767004105bc726d42c71f001a6c8d10c2177a511e6c0e093b7cf2d languageName: node linkType: hard -"@storybook/telemetry@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/telemetry@npm:7.6.10" +"@storybook/telemetry@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/telemetry@npm:7.6.17" dependencies: - "@storybook/client-logger": "npm:7.6.10" - "@storybook/core-common": "npm:7.6.10" - "@storybook/csf-tools": "npm:7.6.10" + "@storybook/client-logger": "npm:7.6.17" + "@storybook/core-common": "npm:7.6.17" + "@storybook/csf-tools": "npm:7.6.17" chalk: "npm:^4.1.0" detect-package-manager: "npm:^2.0.1" fetch-retry: "npm:^5.0.2" fs-extra: "npm:^11.1.0" read-pkg-up: "npm:^7.0.1" - checksum: 10c0/a0cc6b2b4979cf91917f21e200bb58e29080d252c86e4ea58f7776e6991fc9ff8f1e43122caa87e80b630a43630da2b16e451cb5cd903f3554ff531e9764052e + checksum: 10c0/2d13afef0fd73982c1efec1598583ed592bd608bbc61f9c4d96c47be9202d80043041764e00ea3b10b0636417cfbfe7b3d13c6898187a09554c8a696f89ac226 languageName: node linkType: hard -"@storybook/theming@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/theming@npm:7.6.10" +"@storybook/theming@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/theming@npm:7.6.17" dependencies: "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.0" - "@storybook/client-logger": "npm:7.6.10" + "@storybook/client-logger": "npm:7.6.17" "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/999bd56a2914d247c82c6b723eb3244e34add13d6c504c8913dbfdb6e5b16144e12e4d9ceba2371e69ba374498117dbc39c609c78fb58375459dcf62e84f31e8 + checksum: 10c0/f18c52b236554056a97d9df23c5ecf186ffe2ef22eae3812a961b5d9beff96c2a05134ce2a39ad246c2b4ae0d5904a4e7148f7eb3d38d9c7b676d6d0a6c30595 languageName: node linkType: hard -"@storybook/types@npm:7.6.10": - version: 7.6.10 - resolution: "@storybook/types@npm:7.6.10" +"@storybook/types@npm:7.6.17": + version: 7.6.17 + resolution: "@storybook/types@npm:7.6.17" dependencies: - "@storybook/channels": "npm:7.6.10" + "@storybook/channels": "npm:7.6.17" "@types/babel__core": "npm:^7.0.0" "@types/express": "npm:^4.7.0" file-system-cache: "npm:2.3.0" - checksum: 10c0/21a8a3a0820ce934467860c10a170d1abd49dc1a005003a07cc2674cf0f53e188c031b7800573d96debe8c248431d87d543b6d631ab1252554d42e10215a912d + checksum: 10c0/7de04987b44b2d78d9e6ff39b54ece657b1d5266cc180a6b1a192ab394f893f8352578d9c8d0d2327e21689843a1c314f08e05eec18992d78a8d9347b0bcc72a languageName: node linkType: hard @@ -21339,7 +21342,7 @@ __metadata: languageName: node linkType: hard -"ip@npm:^2.0.0": +"ip@npm:^2.0.0, ip@npm:^2.0.1": version: 2.0.1 resolution: "ip@npm:2.0.1" checksum: 10c0/cab8eb3e88d0abe23e4724829621ec4c4c5cb41a7f936a2e626c947128c1be16ed543448d42af7cca95379f9892bfcacc1ccd8d09bc7e8bea0e86d492ce33616 @@ -28073,14 +28076,14 @@ __metadata: languageName: node linkType: hard -"prisma@npm:5.9.1": - version: 5.9.1 - resolution: "prisma@npm:5.9.1" +"prisma@npm:5.10.2": + version: 5.10.2 + resolution: "prisma@npm:5.10.2" dependencies: - "@prisma/engines": "npm:5.9.1" + "@prisma/engines": "npm:5.10.2" bin: prisma: build/index.js - checksum: 10c0/f934bd94bea6863902d8abe2711fd7655ed25da267f92f33eef763a20c325e98e63111613b645ba6ae241e8add652aa598dd61ada560a40dcc47572229bb9960 + checksum: 10c0/f57f9e2032766d02d9f8c5ffbd8a9b52459fe69c2a19abe472ef97057256d2fc23d25efebddcd76bb07c35c0c5ba94c91b74bcde7e061b4a01aa21794076195a languageName: node linkType: hard @@ -29263,6 +29266,21 @@ __metadata: languageName: node linkType: hard +"rehackt@npm:0.0.5": + version: 0.0.5 + resolution: "rehackt@npm:0.0.5" + peerDependencies: + "@types/react": "*" + react: "*" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: 10c0/6123188b6cae82441e2e670ec1dbd741a11874958479b44a69323429bc038398a0b431ffd845c69fc60cc0c0939252ffd2cb37255c314eda38f6a4072bf81b56 + languageName: node + linkType: hard + "relateurl@npm:^0.2.7": version: 0.2.7 resolution: "relateurl@npm:0.2.7" @@ -29765,17 +29783,17 @@ __metadata: "@babel/core": "npm:^7.22.20" "@babel/generator": "npm:7.23.6" "@babel/node": "npm:7.23.9" - "@babel/plugin-proposal-decorators": "npm:7.23.9" + "@babel/plugin-proposal-decorators": "npm:7.24.0" "@babel/plugin-transform-class-properties": "npm:^7.22.5" "@babel/plugin-transform-nullish-coalescing-operator": "npm:7.23.4" "@babel/plugin-transform-private-methods": "npm:^7.22.5" "@babel/plugin-transform-private-property-in-object": "npm:^7.22.11" "@babel/plugin-transform-react-jsx": "npm:^7.22.15" - "@babel/plugin-transform-runtime": "npm:7.23.9" + "@babel/plugin-transform-runtime": "npm:7.24.0" "@babel/preset-env": "npm:^7.22.20" "@babel/preset-react": "npm:^7.22.15" "@babel/preset-typescript": "npm:^7.22.15" - "@babel/runtime-corejs3": "npm:7.23.9" + "@babel/runtime-corejs3": "npm:7.24.0" "@faker-js/faker": "npm:8.0.2" "@npmcli/arborist": "npm:7.2.2" "@playwright/test": "npm:1.41.2" @@ -31002,15 +31020,15 @@ __metadata: languageName: node linkType: hard -"storybook@npm:7.6.10": - version: 7.6.10 - resolution: "storybook@npm:7.6.10" +"storybook@npm:7.6.17": + version: 7.6.17 + resolution: "storybook@npm:7.6.17" dependencies: - "@storybook/cli": "npm:7.6.10" + "@storybook/cli": "npm:7.6.17" bin: sb: ./index.js storybook: ./index.js - checksum: 10c0/1bfa9f355ff45755153b8edeb31917469cd765961b4a2213432934118c5199b30e01673b264601077758f7a886e62cb56aa1e73ee9901aeaf2fcca190e093a04 + checksum: 10c0/256b8ff26b69f622889488605e786c0742350a901037139dd469ec20f2e7031c326d65f2a202a5ee7baa407ff407a6746af2f01d91c0c617eda2013679a65271 languageName: node linkType: hard