From 4e003b17db6f5d8e6bd56fe16b3a98dffb21b5eb Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 16:48:30 +0700 Subject: [PATCH 01/62] Convert tsc bin to mts --- packages/web/src/bins/{tsc.ts => tsc.mts} | 2 ++ 1 file changed, 2 insertions(+) rename packages/web/src/bins/{tsc.ts => tsc.mts} (83%) diff --git a/packages/web/src/bins/tsc.ts b/packages/web/src/bins/tsc.mts similarity index 83% rename from packages/web/src/bins/tsc.ts rename to packages/web/src/bins/tsc.mts index d447f04f5a1b..bcaeaa3daae3 100644 --- a/packages/web/src/bins/tsc.ts +++ b/packages/web/src/bins/tsc.mts @@ -1,6 +1,8 @@ #!/usr/bin/env node import { createRequire } from 'module' +const require = createRequire(import.meta.url) + const requireFromTypeScript = createRequire( require.resolve('typescript/package.json'), ) From 794466b7a431b8c8cf4c4791be4eefde73093f56 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 18:52:16 +0700 Subject: [PATCH 02/62] Add build.mts --- packages/web/build.mts | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 packages/web/build.mts diff --git a/packages/web/build.mts b/packages/web/build.mts new file mode 100644 index 000000000000..1a3b3a22408d --- /dev/null +++ b/packages/web/build.mts @@ -0,0 +1,44 @@ +import { writeFileSync } from 'node:fs' + +import { + build, + defaultBuildOptions, + defaultIgnorePatterns, +} from '@redwoodjs/framework-tools' + +// ESM build +// await build({ +// entryPointOptions: { +// ignore: [...defaultIgnorePatterns, 'src/entry/**'], +// }, +// buildOptions: { +// ...defaultBuildOptions, +// // ⭐ No special tsconfig here +// // tsconfig: 'tsconfig.build.json', +// format: 'esm', +// packages: 'external', +// }, +// }) + +// CJS build +await build({ + entryPointOptions: { + ignore: [...defaultIgnorePatterns, 'src/entry/**', 'src/bins/**'], + }, + buildOptions: { + ...defaultBuildOptions, + // ⭐ No special tsconfig here + // outdir: 'dist/cjs', DONT DO THIS JUST YET + outdir: 'dist', + packages: 'external', + }, +}) + +// DONT DO THIS YET +// // Place a package.json file with `type: commonjs` in the dist folder so that +// // all .js files are treated as CommonJS files. +// writeFileSync('dist/cjs/package.json', JSON.stringify({ type: 'commonjs' })) + +// // Place a package.json file with `type: module` in the dist/esm folder so that +// // all .js files are treated as ES Module files. +// writeFileSync('dist/package.json', JSON.stringify({ type: 'module' })) From 169d62216d2a330a70e73496deda8ea1a289b02e Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 18:53:15 +0700 Subject: [PATCH 03/62] Update build script for rwjs/web --- packages/web/package.json | 7 ++++--- yarn.lock | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index 572fe9f5d37a..aee411e72957 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -26,10 +26,9 @@ "src/entry" ], "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-web.tgz", - "build:types": "tsc --build --verbose", + "build:types": "tsc --build --verbose tsconfig.json", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", "test": "vitest run", @@ -55,6 +54,7 @@ "@babel/core": "^7.22.20", "@babel/plugin-transform-runtime": "7.24.3", "@babel/runtime": "7.24.5", + "@redwoodjs/framework-tools": "workspace:*", "@rollup/plugin-babel": "6.0.4", "@testing-library/jest-dom": "6.4.5", "@testing-library/react": "14.3.1", @@ -64,6 +64,7 @@ "react": "19.0.0-beta-04b058868c-20240508", "react-dom": "19.0.0-beta-04b058868c-20240508", "tstyche": "1.1.0", + "tsx": "4.10.3", "typescript": "5.4.5", "vitest": "1.6.0" }, diff --git a/yarn.lock b/yarn.lock index 963251db18a7..0334aaaca6e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8793,6 +8793,7 @@ __metadata: "@babel/runtime": "npm:7.24.5" "@babel/runtime-corejs3": "npm:7.24.5" "@redwoodjs/auth": "workspace:*" + "@redwoodjs/framework-tools": "workspace:*" "@rollup/plugin-babel": "npm:6.0.4" "@testing-library/jest-dom": "npm:6.4.5" "@testing-library/react": "npm:14.3.1" @@ -8810,6 +8811,7 @@ __metadata: stacktracey: "npm:2.1.8" ts-toolbelt: "npm:9.6.0" tstyche: "npm:1.1.0" + tsx: "npm:4.10.3" typescript: "npm:5.4.5" vitest: "npm:1.6.0" peerDependencies: From 669c59565ba87648ea686256af706e3fbf8ec585 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 18:54:24 +0700 Subject: [PATCH 04/62] Update buildDefaults in framework tools to include .mts --- packages/framework-tools/src/buildDefaults.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework-tools/src/buildDefaults.ts b/packages/framework-tools/src/buildDefaults.ts index d292442b6d74..17de5d4fb8da 100644 --- a/packages/framework-tools/src/buildDefaults.ts +++ b/packages/framework-tools/src/buildDefaults.ts @@ -21,7 +21,7 @@ export const defaultBuildOptions: ESBuildOptions = { metafile: true, } -export const defaultPatterns = ['./src/**/*.{ts,js,tsx,jsx}'] +export const defaultPatterns = ['./src/**/*.{ts,js,tsx,jsx,mts}'] export const defaultIgnorePatterns = [ '**/__tests__', '**/*.test.{ts,js}', From bf128bba3fe326499367cca649c1a8d39b55f604 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 19:01:22 +0700 Subject: [PATCH 05/62] Restore tsc bin to how it was to check CJS build first --- packages/web/build.mts | 2 +- packages/web/src/bins/{tsc.mts => tsc.ts} | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) rename packages/web/src/bins/{tsc.mts => tsc.ts} (83%) diff --git a/packages/web/build.mts b/packages/web/build.mts index 1a3b3a22408d..d7f9a2341dd7 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -23,7 +23,7 @@ import { // CJS build await build({ entryPointOptions: { - ignore: [...defaultIgnorePatterns, 'src/entry/**', 'src/bins/**'], + ignore: [...defaultIgnorePatterns, 'src/entry/**'], }, buildOptions: { ...defaultBuildOptions, diff --git a/packages/web/src/bins/tsc.mts b/packages/web/src/bins/tsc.ts similarity index 83% rename from packages/web/src/bins/tsc.mts rename to packages/web/src/bins/tsc.ts index bcaeaa3daae3..d447f04f5a1b 100644 --- a/packages/web/src/bins/tsc.mts +++ b/packages/web/src/bins/tsc.ts @@ -1,8 +1,6 @@ #!/usr/bin/env node import { createRequire } from 'module' -const require = createRequire(import.meta.url) - const requireFromTypeScript = createRequire( require.resolve('typescript/package.json'), ) From db802ad33df7cde87b51d8e535d645d53b659728 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 19:33:33 +0700 Subject: [PATCH 06/62] Add react imports to everything that has JSX Rename files without JSX files to just ts --- packages/web/src/apollo/index.tsx | 2 ++ packages/web/src/apollo/{links.tsx => links.ts} | 0 packages/web/src/apollo/{sseLink.tsx => sseLink.ts} | 0 packages/web/src/apollo/suspense.tsx | 2 +- packages/web/src/apollo/{useCache.tsx => useCache.ts} | 0 packages/web/src/components/DevFatalErrorPage.tsx | 2 +- packages/web/src/components/FatalErrorBoundary.tsx | 2 ++ packages/web/src/components/GraphQLHooksProvider.tsx | 2 ++ packages/web/src/components/MetaTags.tsx | 2 ++ packages/web/src/components/RedwoodProvider.tsx | 2 ++ packages/web/src/components/cell/createCell.tsx | 2 ++ packages/web/src/components/cell/createServerCell.tsx | 2 +- packages/web/src/components/cell/createSuspendingCell.tsx | 2 +- .../web/src/components/cell/{isCellEmpty.tsx => isCellEmpty.ts} | 0 packages/web/src/components/htmlTags.tsx | 1 + 15 files changed, 17 insertions(+), 4 deletions(-) rename packages/web/src/apollo/{links.tsx => links.ts} (100%) rename packages/web/src/apollo/{sseLink.tsx => sseLink.ts} (100%) rename packages/web/src/apollo/{useCache.tsx => useCache.ts} (100%) rename packages/web/src/components/cell/{isCellEmpty.tsx => isCellEmpty.ts} (100%) diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index 6835fe0fea34..341b24875537 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import type { ApolloClientOptions, setLogVerbosity, diff --git a/packages/web/src/apollo/links.tsx b/packages/web/src/apollo/links.ts similarity index 100% rename from packages/web/src/apollo/links.tsx rename to packages/web/src/apollo/links.ts diff --git a/packages/web/src/apollo/sseLink.tsx b/packages/web/src/apollo/sseLink.ts similarity index 100% rename from packages/web/src/apollo/sseLink.tsx rename to packages/web/src/apollo/sseLink.ts diff --git a/packages/web/src/apollo/suspense.tsx b/packages/web/src/apollo/suspense.tsx index dabb1aae9905..873fb99acfea 100644 --- a/packages/web/src/apollo/suspense.tsx +++ b/packages/web/src/apollo/suspense.tsx @@ -7,7 +7,7 @@ * Eventually we will have one ApolloProvider, not multiple. */ -import { useContext } from 'react' +import React, { useContext } from 'react' import type { ApolloCache, diff --git a/packages/web/src/apollo/useCache.tsx b/packages/web/src/apollo/useCache.ts similarity index 100% rename from packages/web/src/apollo/useCache.tsx rename to packages/web/src/apollo/useCache.ts diff --git a/packages/web/src/components/DevFatalErrorPage.tsx b/packages/web/src/components/DevFatalErrorPage.tsx index 2b4387c13f8f..d43885a2e285 100644 --- a/packages/web/src/components/DevFatalErrorPage.tsx +++ b/packages/web/src/components/DevFatalErrorPage.tsx @@ -7,7 +7,7 @@ if (typeof window !== 'undefined') { window.Buffer = window.Buffer || require('buffer').Buffer } -import { useState } from 'react' +import React, { useState } from 'react' import type { GraphQLError } from 'graphql' import StackTracey from 'stacktracey' diff --git a/packages/web/src/components/FatalErrorBoundary.tsx b/packages/web/src/components/FatalErrorBoundary.tsx index f200a3daadf7..1ff1b024b30f 100644 --- a/packages/web/src/components/FatalErrorBoundary.tsx +++ b/packages/web/src/components/FatalErrorBoundary.tsx @@ -1,3 +1,5 @@ +import React from 'react' + type PropsInfallibleErrorBoundary = Partial<{ children: React.ReactNode }> diff --git a/packages/web/src/components/GraphQLHooksProvider.tsx b/packages/web/src/components/GraphQLHooksProvider.tsx index 574a19a033c9..3031e16e97ab 100644 --- a/packages/web/src/components/GraphQLHooksProvider.tsx +++ b/packages/web/src/components/GraphQLHooksProvider.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import type { OperationVariables, useBackgroundQuery as apolloUseBackgroundQuery, diff --git a/packages/web/src/components/MetaTags.tsx b/packages/web/src/components/MetaTags.tsx index e145a58bf446..3da635364d94 100644 --- a/packages/web/src/components/MetaTags.tsx +++ b/packages/web/src/components/MetaTags.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import { Helmet as HelmetHead } from 'react-helmet-async' // Ideally we wouldn't include this for non experiment builds diff --git a/packages/web/src/components/RedwoodProvider.tsx b/packages/web/src/components/RedwoodProvider.tsx index 64a4a3308164..d1f0771e69e7 100644 --- a/packages/web/src/components/RedwoodProvider.tsx +++ b/packages/web/src/components/RedwoodProvider.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import { Helmet, HelmetProvider } from 'react-helmet-async' interface RedwoodProviderProps { diff --git a/packages/web/src/components/cell/createCell.tsx b/packages/web/src/components/cell/createCell.tsx index 0c1783ecd68e..9577c7e17fa3 100644 --- a/packages/web/src/components/cell/createCell.tsx +++ b/packages/web/src/components/cell/createCell.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import { fragmentRegistry } from '../../apollo/fragmentRegistry.js' import { getOperationName } from '../../graphql.js' /** diff --git a/packages/web/src/components/cell/createServerCell.tsx b/packages/web/src/components/cell/createServerCell.tsx index 9439968cb486..1da96ed5dcde 100644 --- a/packages/web/src/components/cell/createServerCell.tsx +++ b/packages/web/src/components/cell/createServerCell.tsx @@ -1,6 +1,6 @@ /// -import { Suspense } from 'react' +import React, { Suspense } from 'react' // Class components are not supported on the server // https://nextjs.org/docs/app/building-your-application/rendering/composition-patterns#when-to-use-server-and-client-components diff --git a/packages/web/src/components/cell/createSuspendingCell.tsx b/packages/web/src/components/cell/createSuspendingCell.tsx index ad15ffece93a..888ba514dc5e 100644 --- a/packages/web/src/components/cell/createSuspendingCell.tsx +++ b/packages/web/src/components/cell/createSuspendingCell.tsx @@ -1,4 +1,4 @@ -import { Suspense } from 'react' +import React, { Suspense } from 'react' import type { OperationVariables, QueryReference } from '@apollo/client' import { useApolloClient } from '@apollo/client' diff --git a/packages/web/src/components/cell/isCellEmpty.tsx b/packages/web/src/components/cell/isCellEmpty.ts similarity index 100% rename from packages/web/src/components/cell/isCellEmpty.tsx rename to packages/web/src/components/cell/isCellEmpty.ts diff --git a/packages/web/src/components/htmlTags.tsx b/packages/web/src/components/htmlTags.tsx index b4287b76cd41..632acbded020 100644 --- a/packages/web/src/components/htmlTags.tsx +++ b/packages/web/src/components/htmlTags.tsx @@ -1,3 +1,4 @@ +import React from 'react' import { Fragment } from 'react' declare const window: { From 40b4b7b2eddc3a7a2b49d0cf1bd5d2cace03a19e Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 19:35:35 +0700 Subject: [PATCH 07/62] Remove React from eslint auto import rule --- .eslintrc.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 7ce7a34be528..3f656abff264 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -69,7 +69,6 @@ module.exports = { browser: true, }, globals: { - React: 'readonly', // We auto-import React via Babel. window: 'off', // Developers should use `global` instead of window. Since window is undefined in NodeJS. }, }, From 209cbe6edb0f20ea7a773abf550e8792d686a038 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 19:35:46 +0700 Subject: [PATCH 08/62] Fix linting errors caused by eslint rule removal --- packages/forms/src/FormError.tsx | 2 ++ packages/router/src/rsc-link.tsx | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/forms/src/FormError.tsx b/packages/forms/src/FormError.tsx index 1d9f79760050..84393273fb8a 100644 --- a/packages/forms/src/FormError.tsx +++ b/packages/forms/src/FormError.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import type { GraphQLError } from 'graphql' export interface ServerParseError extends Error { diff --git a/packages/router/src/rsc-link.tsx b/packages/router/src/rsc-link.tsx index 9a4555f52c8b..d65d16dffda9 100644 --- a/packages/router/src/rsc-link.tsx +++ b/packages/router/src/rsc-link.tsx @@ -1,4 +1,4 @@ -import { forwardRef } from 'react' +import React, { forwardRef } from 'react' export interface LinkProps { to: string From 88877ca45541fa69ddae48115ae50fce019fd9e6 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 7 Jun 2024 19:41:34 +0700 Subject: [PATCH 09/62] Update build.mts with comments --- packages/web/build.mts | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/packages/web/build.mts b/packages/web/build.mts index d7f9a2341dd7..1bdb3511998e 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -1,4 +1,4 @@ -import { writeFileSync } from 'node:fs' +// import { writeFileSync } from 'node:fs' import { build, @@ -6,23 +6,11 @@ import { defaultIgnorePatterns, } from '@redwoodjs/framework-tools' -// ESM build -// await build({ -// entryPointOptions: { -// ignore: [...defaultIgnorePatterns, 'src/entry/**'], -// }, -// buildOptions: { -// ...defaultBuildOptions, -// // ⭐ No special tsconfig here -// // tsconfig: 'tsconfig.build.json', -// format: 'esm', -// packages: 'external', -// }, -// }) - // CJS build await build({ entryPointOptions: { + // @NOTE: I'm not building src/entry, it's included in "files" in package.json + // this used to be for custom-web-index. ignore: [...defaultIgnorePatterns, 'src/entry/**'], }, buildOptions: { @@ -34,7 +22,22 @@ await build({ }, }) -// DONT DO THIS YET +// THIS IS IN PART 2 ~ making this a dual module + +// ESM build +// await build({ +// entryPointOptions: { +// ignore: [...defaultIgnorePatterns, 'src/entry/**'], +// }, +// buildOptions: { +// ...defaultBuildOptions, +// // ⭐ No special tsconfig here +// // tsconfig: 'tsconfig.build.json', +// format: 'esm', +// packages: 'external', +// }, +// }) + // // Place a package.json file with `type: commonjs` in the dist folder so that // // all .js files are treated as CommonJS files. // writeFileSync('dist/cjs/package.json', JSON.stringify({ type: 'commonjs' })) From 5c2e4f9731272e0f8edfeda9b90586b9b3caa184 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 17 Jun 2024 15:11:41 +0700 Subject: [PATCH 10/62] Update comments --- packages/web/build.mts | 45 ++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/packages/web/build.mts b/packages/web/build.mts index 1bdb3511998e..4c3d84acace1 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -10,7 +10,7 @@ import { await build({ entryPointOptions: { // @NOTE: I'm not building src/entry, it's included in "files" in package.json - // this used to be for custom-web-index. + // this used to be for custom-web-index with webpack ignore: [...defaultIgnorePatterns, 'src/entry/**'], }, buildOptions: { @@ -22,26 +22,29 @@ await build({ }, }) -// THIS IS IN PART 2 ~ making this a dual module +/** THIS IS IN PART 2 ~ making this a dual module +Will enable in follow up PR -// ESM build -// await build({ -// entryPointOptions: { -// ignore: [...defaultIgnorePatterns, 'src/entry/**'], -// }, -// buildOptions: { -// ...defaultBuildOptions, -// // ⭐ No special tsconfig here -// // tsconfig: 'tsconfig.build.json', -// format: 'esm', -// packages: 'external', -// }, -// }) +ESM build +await build({ + entryPointOptions: { + ignore: [...defaultIgnorePatterns, 'src/entry/**'], + }, + buildOptions: { + ...defaultBuildOptions, + // ⭐ No special tsconfig here + // tsconfig: 'tsconfig.build.json', + format: 'esm', + packages: 'external', + }, +}) + +// Place a package.json file with `type: commonjs` in the dist folder so that +// all .js files are treated as CommonJS files. +writeFileSync('dist/cjs/package.json', JSON.stringify({ type: 'commonjs' })) -// // Place a package.json file with `type: commonjs` in the dist folder so that -// // all .js files are treated as CommonJS files. -// writeFileSync('dist/cjs/package.json', JSON.stringify({ type: 'commonjs' })) +// Place a package.json file with `type: module` in the dist/esm folder so that +// all .js files are treated as ES Module files. +writeFileSync('dist/package.json', JSON.stringify({ type: 'module' })) -// // Place a package.json file with `type: module` in the dist/esm folder so that -// // all .js files are treated as ES Module files. -// writeFileSync('dist/package.json', JSON.stringify({ type: 'module' })) +*/ From 58e08c7d9feab174d2f7b8fcfeae9fc05cc0d308 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 17 Jun 2024 21:51:40 +0700 Subject: [PATCH 11/62] Bump tsx version --- packages/web/package.json | 2 +- yarn.lock | 20 ++------------------ 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index d560e55896cf..53a1dc3fd576 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -64,7 +64,7 @@ "react": "19.0.0-beta-04b058868c-20240508", "react-dom": "19.0.0-beta-04b058868c-20240508", "tstyche": "2.0.0", - "tsx": "4.10.3", + "tsx": "4.15.2", "typescript": "5.4.5", "vitest": "1.6.0" }, diff --git a/yarn.lock b/yarn.lock index 8ce97442fabc..371b3156959a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9000,7 +9000,7 @@ __metadata: stacktracey: "npm:2.1.8" ts-toolbelt: "npm:9.6.0" tstyche: "npm:2.0.0" - tsx: "npm:4.10.3" + tsx: "npm:4.15.2" typescript: "npm:5.4.5" vitest: "npm:1.6.0" peerDependencies: @@ -17174,7 +17174,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.20.1, esbuild@npm:~0.20.2": +"esbuild@npm:^0.20.1": version: 0.20.2 resolution: "esbuild@npm:0.20.2" dependencies: @@ -30646,22 +30646,6 @@ __metadata: languageName: node linkType: hard -"tsx@npm:4.10.3": - version: 4.10.3 - resolution: "tsx@npm:4.10.3" - dependencies: - esbuild: "npm:~0.20.2" - fsevents: "npm:~2.3.3" - get-tsconfig: "npm:^4.7.5" - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: 10c0/0036641dcc4d7970b5aa8e9db1a3365ec615d32e2b9b26e762e24c0588e79bc80c96639eb9b1c08b16befee75add0e527d8c24cfa4e519f1bf5805b95769eba5 - languageName: node - linkType: hard - "tsx@npm:4.15.2": version: 4.15.2 resolution: "tsx@npm:4.15.2" From 92d4d3186b3f6dfd567f5e3b718f3f3ed02441b4 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 17 Jun 2024 22:28:24 +0700 Subject: [PATCH 12/62] Handle webpack entrry --- .../setup/custom-web-index/custom-web-index-handler.js | 2 +- packages/web/build.mts | 4 +--- packages/web/src/entry/{index.js => index.jsx} | 0 3 files changed, 2 insertions(+), 4 deletions(-) rename packages/web/src/entry/{index.js => index.jsx} (100%) diff --git a/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js b/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js index 5386a4132d16..0314375e9ebf 100644 --- a/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js +++ b/packages/cli/src/commands/setup/custom-web-index/custom-web-index-handler.js @@ -35,7 +35,7 @@ export const handler = async ({ force }) => { path.join( getPaths().base, // NOTE we're copying over the index.js before babel transform - 'node_modules/@redwoodjs/web/src/entry/index.js', + 'node_modules/@redwoodjs/web/src/entry/index.jsx', ), ) .toString() diff --git a/packages/web/build.mts b/packages/web/build.mts index 4c3d84acace1..942e976fa81b 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -9,9 +9,7 @@ import { // CJS build await build({ entryPointOptions: { - // @NOTE: I'm not building src/entry, it's included in "files" in package.json - // this used to be for custom-web-index with webpack - ignore: [...defaultIgnorePatterns, 'src/entry/**'], + ignore: [...defaultIgnorePatterns], }, buildOptions: { ...defaultBuildOptions, diff --git a/packages/web/src/entry/index.js b/packages/web/src/entry/index.jsx similarity index 100% rename from packages/web/src/entry/index.js rename to packages/web/src/entry/index.jsx From 856180510946cb1914f2cfe28c4795e27294cf6f Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 17 Jun 2024 22:34:37 +0700 Subject: [PATCH 13/62] Add react to webpack entry --- packages/web/src/entry/index.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/web/src/entry/index.jsx b/packages/web/src/entry/index.jsx index 5f900939821f..d6c07bb1a20f 100644 --- a/packages/web/src/entry/index.jsx +++ b/packages/web/src/entry/index.jsx @@ -1,3 +1,5 @@ +import React from 'react' + import { hydrateRoot, createRoot } from 'react-dom/client' import App from '~redwood-app-root' From c6eb4a79aef8a91af6c8a57e4640b10d7a9b1947 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 18 Jun 2024 17:22:17 +0700 Subject: [PATCH 14/62] export default for bundle removal --- packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts b/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts index d254d1392ff9..e01deafd55ea 100644 --- a/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts +++ b/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts @@ -29,9 +29,8 @@ export default function removeFromBundle( } } -// Currently configured for CJS only. const EMPTY_MODULE = { - code: `module.exports = {}`, + code: `module.exports = {}; export default {};`, } export function excludeOnMatch(modulesToExclude: ModulesToExclude, id: string) { From ea1be4c02c0f051b70730bf00e8ca4b714e4ff8a Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 18 Jun 2024 17:43:18 +0700 Subject: [PATCH 15/62] Just do export default --- packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts b/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts index e01deafd55ea..3bf8a7cfd399 100644 --- a/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts +++ b/packages/vite/src/plugins/vite-plugin-remove-from-bundle.ts @@ -30,7 +30,7 @@ export default function removeFromBundle( } const EMPTY_MODULE = { - code: `module.exports = {}; export default {};`, + code: `export default {};`, } export function excludeOnMatch(modulesToExclude: ModulesToExclude, id: string) { From 5e43bdecd076c40f9bd7d43bf9a4ae5a2bcf6c29 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Wed, 19 Jun 2024 13:17:38 +0700 Subject: [PATCH 16/62] Update yarn.lock --- yarn.lock | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/yarn.lock b/yarn.lock index dad8d2eed458..b5f0af6c1466 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30439,6 +30439,22 @@ __metadata: languageName: node linkType: hard +"tsx@npm:4.15.2": + version: 4.15.2 + resolution: "tsx@npm:4.15.2" + dependencies: + esbuild: "npm:~0.21.4" + fsevents: "npm:~2.3.3" + get-tsconfig: "npm:^4.7.5" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 10c0/6349ac29c13b567ece91d38e239606c0a8655ddbbdfab7250c04d7f9d5c447ff28f8dc7db62eaa16cafaff9cb5194c2a511d618cbfd4909e76cc54f07bc22424 + languageName: node + linkType: hard + "tsx@npm:4.15.6": version: 4.15.6 resolution: "tsx@npm:4.15.6" From f8c34e2135557860996573daec1a5bb1997c97f3 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Wed, 19 Jun 2024 13:20:34 +0700 Subject: [PATCH 17/62] Bump tsx version to match other packages --- packages/web/package.json | 2 +- yarn.lock | 18 +----------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index d2ee43ef7d7d..4924e2502de5 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -64,7 +64,7 @@ "react": "19.0.0-beta-04b058868c-20240508", "react-dom": "19.0.0-beta-04b058868c-20240508", "tstyche": "2.0.0", - "tsx": "4.15.2", + "tsx": "4.15.6", "typescript": "5.4.5", "vitest": "1.6.0" }, diff --git a/yarn.lock b/yarn.lock index b5f0af6c1466..68b6a769ea12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8929,7 +8929,7 @@ __metadata: stacktracey: "npm:2.1.8" ts-toolbelt: "npm:9.6.0" tstyche: "npm:2.0.0" - tsx: "npm:4.15.2" + tsx: "npm:4.15.6" typescript: "npm:5.4.5" vitest: "npm:1.6.0" peerDependencies: @@ -30439,22 +30439,6 @@ __metadata: languageName: node linkType: hard -"tsx@npm:4.15.2": - version: 4.15.2 - resolution: "tsx@npm:4.15.2" - dependencies: - esbuild: "npm:~0.21.4" - fsevents: "npm:~2.3.3" - get-tsconfig: "npm:^4.7.5" - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: 10c0/6349ac29c13b567ece91d38e239606c0a8655ddbbdfab7250c04d7f9d5c447ff28f8dc7db62eaa16cafaff9cb5194c2a511d618cbfd4909e76cc54f07bc22424 - languageName: node - linkType: hard - "tsx@npm:4.15.6": version: 4.15.6 resolution: "tsx@npm:4.15.6" From ccf9954382affbbc9036836109afdfc1089c5326 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Wed, 19 Jun 2024 18:43:44 +0700 Subject: [PATCH 18/62] Set exports and type module + Still use cjs bins + Build esm + Update yarn.lock so new bins are picked up --- packages/web/build.mts | 15 ++++----- packages/web/package.json | 62 +++++++++++++++++++++++++++++++++----- packages/web/tsconfig.json | 5 ++- yarn.lock | 16 +++++----- 4 files changed, 74 insertions(+), 24 deletions(-) diff --git a/packages/web/build.mts b/packages/web/build.mts index 942e976fa81b..0c84454fd1dc 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -5,6 +5,7 @@ import { defaultBuildOptions, defaultIgnorePatterns, } from '@redwoodjs/framework-tools' +import { writeFileSync } from 'node:fs' // CJS build await build({ @@ -14,19 +15,21 @@ await build({ buildOptions: { ...defaultBuildOptions, // ⭐ No special tsconfig here - // outdir: 'dist/cjs', DONT DO THIS JUST YET - outdir: 'dist', + outdir: 'dist/cjs', + // outdir: 'dist', packages: 'external', }, }) /** THIS IS IN PART 2 ~ making this a dual module -Will enable in follow up PR +Will enable in follow up PR **/ -ESM build +// ESM build await build({ entryPointOptions: { - ignore: [...defaultIgnorePatterns, 'src/entry/**'], + // @NOTE: building the cjs bins only... + // I haven't tried esm bins yet... + ignore: [...defaultIgnorePatterns, 'src/bins/**'], }, buildOptions: { ...defaultBuildOptions, @@ -44,5 +47,3 @@ writeFileSync('dist/cjs/package.json', JSON.stringify({ type: 'commonjs' })) // Place a package.json file with `type: module` in the dist/esm folder so that // all .js files are treated as ES Module files. writeFileSync('dist/package.json', JSON.stringify({ type: 'module' })) - -*/ diff --git a/packages/web/package.json b/packages/web/package.json index 4924e2502de5..781bd8ccc61d 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,6 +1,7 @@ { "name": "@redwoodjs/web", "version": "7.0.0", + "type": "module", "repository": { "type": "git", "url": "git+https://github.com/redwoodjs/redwood.git", @@ -10,14 +11,59 @@ "main": "./dist/index.js", "types": "dist/index.d.ts", "bin": { - "cross-env": "./dist/bins/cross-env.js", - "msw": "./dist/bins/msw.js", - "redwood": "./dist/bins/redwood.js", - "rw": "./dist/bins/redwood.js", - "rwfw": "./dist/bins/rwfw.js", - "storybook": "./dist/bins/storybook.js", - "tsc": "./dist/bins/tsc.js", - "webpack": "./dist/bins/webpack.js" + "cross-env": "./dist/cjs/bins/cross-env.js", + "msw": "./dist/cjs/bins/msw.js", + "redwood": "./dist/cjs/bins/redwood.js", + "rw": "./dist/cjs/bins/redwood.js", + "rwfw": "./dist/cjs/bins/rwfw.js", + "storybook": "./dist/cjs/bins/storybook.js", + "tsc": "./dist/cjs/bins/tsc.js", + "webpack": "./dist/cjs/bins/webpack.js" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/cjs/index.js" + }, + "./serverStore": { + "require": "./dist/cjs/server/serverStore.js", + "import": "./dist/server/serverStore.js", + "types": "./dist/server/serverStore.d.ts" + }, + "./cookie": { + "require": "./dist/cjs/server/CookieJar.js", + "import": "./dist/server/CookieJar.js", + "types": "./dist/server/CookieJar.d.ts" + }, + "./middleware": { + "require": "./dist/cjs/server/middleware.js", + "import": "./dist/server/middleware.js", + "types": "./dist/server/middleware.d.ts" + }, + "./serverInject": { + "require": "./dist/cjs/components/ServerInject.js", + "import": "./dist/components/ServerInject.js", + "types": "./dist/components/ServerInject.d.ts" + }, + "./dist/components/*": { + "require": "./dist/cjs/components/*.js", + "import": "./dist/components/*.js" + }, + "./dist/apollo/suspense": { + "require": "./dist/cjs/apollo/suspense.js", + "import": "./dist/apollo/suspense.js" + }, + "./toast": { + "require": "./dist/cjs/toast/index.js", + "import": "./dist/toast/index.js", + "types": "./dist/toast/index.d.ts" + }, + "./apollo": { + "require": "./dist/cjs/apollo/index.js", + "import": "./dist/apollo/index.js", + "types": "./dist/apollo/index.d.ts" + } }, "files": [ "dist", diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json index b036d670c6fa..57fcd541165b 100644 --- a/packages/web/tsconfig.json +++ b/packages/web/tsconfig.json @@ -2,7 +2,10 @@ "extends": "../../tsconfig.compilerOption.json", "compilerOptions": { "rootDir": "src", - "outDir": "dist" + "outDir": "dist", + "esModuleInterop": true, + "moduleResolution": "NodeNext", + "module": "NodeNext", }, "include": ["./src/**/*", "ambient.d.ts", "testing-library.d.ts"], "references": [{ "path": "../auth/tsconfig.build.json" }] diff --git a/yarn.lock b/yarn.lock index 68b6a769ea12..d917e5c836fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8936,14 +8936,14 @@ __metadata: react: 19.0.0-beta-04b058868c-20240508 react-dom: 19.0.0-beta-04b058868c-20240508 bin: - cross-env: ./dist/bins/cross-env.js - msw: ./dist/bins/msw.js - redwood: ./dist/bins/redwood.js - rw: ./dist/bins/redwood.js - rwfw: ./dist/bins/rwfw.js - storybook: ./dist/bins/storybook.js - tsc: ./dist/bins/tsc.js - webpack: ./dist/bins/webpack.js + cross-env: ./dist/cjs/bins/cross-env.js + msw: ./dist/cjs/bins/msw.js + redwood: ./dist/cjs/bins/redwood.js + rw: ./dist/cjs/bins/redwood.js + rwfw: ./dist/cjs/bins/rwfw.js + storybook: ./dist/cjs/bins/storybook.js + tsc: ./dist/cjs/bins/tsc.js + webpack: ./dist/cjs/bins/webpack.js languageName: unknown linkType: soft From 517208eca9755c4d903110288527d4a59edee267 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Wed, 19 Jun 2024 18:44:13 +0700 Subject: [PATCH 19/62] Add extensions to all relative imports in packages/web --- packages/web/src/apollo/index.tsx | 2 +- packages/web/src/apollo/links.ts | 2 +- packages/web/src/apollo/suspense.tsx | 8 ++++---- packages/web/src/apollo/useCache.ts | 2 +- .../components/__tests__/GraphQLHooksProvider.test.tsx | 2 +- packages/web/src/components/cell/createSuspendingCell.tsx | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index 341b24875537..806491f3f728 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -10,7 +10,7 @@ import { setContext } from '@apollo/client/link/context' import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries' import { getMainDefinition } from '@apollo/client/utilities' import { fetch as crossFetch } from '@whatwg-node/fetch' -import { print } from 'graphql/language/printer' +import { print } from 'graphql/language/printer.js' // Note: Importing directly from `apollo/client` doesn't work properly in Storybook. const { diff --git a/packages/web/src/apollo/links.ts b/packages/web/src/apollo/links.ts index 6394b23df832..2ce51b26cf86 100644 --- a/packages/web/src/apollo/links.ts +++ b/packages/web/src/apollo/links.ts @@ -1,7 +1,7 @@ import type { HttpOptions, Operation } from '@apollo/client' import { ApolloLink, HttpLink, Observable } from '@apollo/client' import { setContext } from '@apollo/client/link/context' -import { print } from 'graphql/language/printer' +import { print } from 'graphql/language/printer.js' export function createHttpLink( uri: string, diff --git a/packages/web/src/apollo/suspense.tsx b/packages/web/src/apollo/suspense.tsx index 873fb99acfea..8f2be3ca0c0b 100644 --- a/packages/web/src/apollo/suspense.tsx +++ b/packages/web/src/apollo/suspense.tsx @@ -41,23 +41,23 @@ import './typeOverride' import { FetchConfigProvider, useFetchConfig, -} from '../components/FetchConfigProvider' +} from '../components/FetchConfigProvider.js' import { GraphQLHooksProvider } from '../components/GraphQLHooksProvider.js' -import { ServerHtmlContext } from '../components/ServerInject' +import { ServerHtmlContext } from '../components/ServerInject.js' import type { RedwoodApolloLink, RedwoodApolloLinkFactory, RedwoodApolloLinkName, RedwoodApolloLinks, -} from './links' +} from './links.js' import { createAuthApolloLink, createFinalLink, createHttpLink, createTokenLink, createUpdateDataLink, -} from './links' +} from './links.js' export type ApolloClientCacheConfig = InMemoryCacheConfig diff --git a/packages/web/src/apollo/useCache.ts b/packages/web/src/apollo/useCache.ts index 92dcb70d18c1..bfd444d98d28 100644 --- a/packages/web/src/apollo/useCache.ts +++ b/packages/web/src/apollo/useCache.ts @@ -1,6 +1,6 @@ import type { ApolloCache, Reference, StoreObject } from '@apollo/client' import { useApolloClient } from '@apollo/client' -import type { NormalizedCacheObject } from '@apollo/client/cache/inmemory/types' +import type { NormalizedCacheObject } from '@apollo/client/cache/inmemory/types.js' import type { ApolloQueryResult } from '@apollo/client/core' type useCacheType = { diff --git a/packages/web/src/components/__tests__/GraphQLHooksProvider.test.tsx b/packages/web/src/components/__tests__/GraphQLHooksProvider.test.tsx index fe9e4e949107..e1bef1281049 100644 --- a/packages/web/src/components/__tests__/GraphQLHooksProvider.test.tsx +++ b/packages/web/src/components/__tests__/GraphQLHooksProvider.test.tsx @@ -8,7 +8,7 @@ import { useQuery, useMutation, useSubscription, -} from '../GraphQLHooksProvider' +} from '../GraphQLHooksProvider.js' const TestUseQueryHook: React.FunctionComponent = () => { // @ts-expect-error - Purposefully not passing in a DocumentNode type here. diff --git a/packages/web/src/components/cell/createSuspendingCell.tsx b/packages/web/src/components/cell/createSuspendingCell.tsx index 888ba514dc5e..ee5e9e7e1859 100644 --- a/packages/web/src/components/cell/createSuspendingCell.tsx +++ b/packages/web/src/components/cell/createSuspendingCell.tsx @@ -15,7 +15,7 @@ import type { DataObject, SuspendingSuccessProps, SuspenseCellQueryResult, -} from './cellTypes' +} from './cellTypes.js' import { isDataEmpty } from './isCellEmpty.js' type AnyObj = Record From f451c3026575a78ebead487d5ee047ff476be03f Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Wed, 19 Jun 2024 18:44:43 +0700 Subject: [PATCH 20/62] =?UTF-8?q?Remove=20module=20augmentation=20syntax?= =?UTF-8?q?=20for=20asset=20imports=20as=20not=20supported=20in=20ESM=20pa?= =?UTF-8?q?ckages=20=F0=9F=A4=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/src/assetImports.ts | 54 ++++++-------------------------- 1 file changed, 10 insertions(+), 44 deletions(-) diff --git a/packages/web/src/assetImports.ts b/packages/web/src/assetImports.ts index 6d5d7e39132b..ab532f31c763 100644 --- a/packages/web/src/assetImports.ts +++ b/packages/web/src/assetImports.ts @@ -6,47 +6,13 @@ // see: redwood/packages/core/config/webpack.common.js // These declarations are the most common types -declare module '*.svg' { - const content: string - export default content -} - -declare module '*.png' { - const content: string - export default content -} - -declare module '*.bmp' { - const content: string - export default content -} - -declare module '*.jpg' { - const content: string - export default content -} - -declare module '*.jpe?g' { - const content: string - export default content -} - -declare module '*.gif' { - const content: string - export default content -} - -declare module '*.webp' { - const content: string - export default content -} - -declare module '*.ico' { - const content: string - export default content -} - -declare module '*.pdf' { - const content: string - export default content -} +/// + +/** + * @NOTE + * Declare module syntax does not work in ESM projects. + * + * I'm just trying to import Vite's types here and 🤞 it works. + * + * REMEMBER TO VALIDATE THIS! + */ From f8b6edb197df8b4749ec264fdaea91f6497f90de Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 16:02:18 +0700 Subject: [PATCH 21/62] cjsInterop - update settings to not transform auth or web. Why was auth being transformed? --- packages/vite/src/devFeServer.ts | 8 +++++++- packages/vite/src/rsc/rscBuildForSsr.ts | 10 +++++++++- packages/vite/src/streaming/buildForStreamingServer.ts | 8 +++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/devFeServer.ts b/packages/vite/src/devFeServer.ts index a142135588fe..3b1e691966d9 100644 --- a/packages/vite/src/devFeServer.ts +++ b/packages/vite/src/devFeServer.ts @@ -67,7 +67,13 @@ async function createServer() { configFile: rwPaths.web.viteConfig, plugins: [ cjsInterop({ - dependencies: ['@redwoodjs/**'], + dependencies: [ + '@redwoodjs/forms', + '@redwoodjs/prerender/*', + '@redwoodjs/router', + '@redwoodjs/auth-*', + // '@redwoodjs/web', + ], }), rscEnabled && rscRoutesAutoLoader(), ], diff --git a/packages/vite/src/rsc/rscBuildForSsr.ts b/packages/vite/src/rsc/rscBuildForSsr.ts index 1f97b9aebcea..2b09d873d6e7 100644 --- a/packages/vite/src/rsc/rscBuildForSsr.ts +++ b/packages/vite/src/rsc/rscBuildForSsr.ts @@ -61,7 +61,15 @@ export async function rscBuildForSsr({ ], }, plugins: [ - cjsInterop({ dependencies: ['@redwoodjs/**'] }), + cjsInterop({ + dependencies: [ + '@redwoodjs/forms', + '@redwoodjs/prerender/*', + '@redwoodjs/router', + '@redwoodjs/auth-*', + // '@redwoodjs/web', + ], + }), rscRoutesAutoLoader(), rscSsrRouterImport(), ], diff --git a/packages/vite/src/streaming/buildForStreamingServer.ts b/packages/vite/src/streaming/buildForStreamingServer.ts index 38a8d1539990..363c1d1ad0cc 100644 --- a/packages/vite/src/streaming/buildForStreamingServer.ts +++ b/packages/vite/src/streaming/buildForStreamingServer.ts @@ -19,7 +19,13 @@ export async function buildForStreamingServer({ configFile: rwPaths.web.viteConfig, plugins: [ cjsInterop({ - dependencies: ['@redwoodjs/**'], + dependencies: [ + '@redwoodjs/forms', + '@redwoodjs/prerender/*', + '@redwoodjs/router', + '@redwoodjs/auth-*', + // '@redwoodjs/web', + ], }), ], build: { From 152cd8066321a97d51c2c5007f438c96fe1a0350 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 16:05:54 +0700 Subject: [PATCH 22/62] Remove babel from vitest config --- packages/web/vitest.config.mts | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/packages/web/vitest.config.mts b/packages/web/vitest.config.mts index ab52b1743ced..ef908baf89b3 100644 --- a/packages/web/vitest.config.mts +++ b/packages/web/vitest.config.mts @@ -11,28 +11,6 @@ export default defineConfig({ define: { RWJS_ENV: {}, }, - plugins: [ - // @ts-expect-error plugin types do not seem happy with each other - babel({ - babelHelpers: 'runtime', - extensions: ['.ts', '.tsx', '.js'], - include: ['src/**/*'], - plugins: [ - [ - 'babel-plugin-auto-import', - { - declarations: [ - { - // import { React } from 'react' - default: 'React', - path: 'react', - }, - ], - }, - ] - ] - }) - ] }) From 619d8d5935a6d89e466ece11893c60ba74c037b0 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 16:06:17 +0700 Subject: [PATCH 23/62] Add export "type" for cell types --- packages/web/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 7335de935a1c..8c488c72a0bf 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -18,7 +18,7 @@ export * from './components/cell/CellCacheContext.js' export { createCell } from './components/cell/createCell.js' -export { +export type { CellProps, CellFailureProps, CellLoadingProps, From 301fb0d6eebcab58c99bdae760253f3dd0d05ed8 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 16:07:46 +0700 Subject: [PATCH 24/62] Fix apollo client imports for esm --- packages/web/src/apollo/fragmentRegistry.ts | 6 +++--- packages/web/src/apollo/links.ts | 6 ++++-- packages/web/src/apollo/suspense.tsx | 4 ++-- packages/web/src/apollo/useCache.ts | 2 +- .../web/src/components/cell/createSuspendingCell.test.tsx | 2 +- packages/web/src/components/cell/createSuspendingCell.tsx | 2 +- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/web/src/apollo/fragmentRegistry.ts b/packages/web/src/apollo/fragmentRegistry.ts index ba26c2b387d5..59268c355d58 100644 --- a/packages/web/src/apollo/fragmentRegistry.ts +++ b/packages/web/src/apollo/fragmentRegistry.ts @@ -1,8 +1,8 @@ import * as apolloClient from '@apollo/client' import type { UseFragmentResult } from '@apollo/client' -import type { FragmentRegistryAPI } from '@apollo/client/cache' -import { createFragmentRegistry } from '@apollo/client/cache' -import { getFragmentDefinitions } from '@apollo/client/utilities' +import type { FragmentRegistryAPI } from '@apollo/client/cache/index.js' +import { createFragmentRegistry } from '@apollo/client/cache/index.js' +import { getFragmentDefinitions } from '@apollo/client/utilities/index.js' import type { DocumentNode } from 'graphql' export type FragmentIdentifier = string | number diff --git a/packages/web/src/apollo/links.ts b/packages/web/src/apollo/links.ts index 2ce51b26cf86..aace390c188e 100644 --- a/packages/web/src/apollo/links.ts +++ b/packages/web/src/apollo/links.ts @@ -1,6 +1,8 @@ import type { HttpOptions, Operation } from '@apollo/client' -import { ApolloLink, HttpLink, Observable } from '@apollo/client' -import { setContext } from '@apollo/client/link/context' +import { Observable } from '@apollo/client/core/index.js' +import { setContext } from '@apollo/client/link/context/index.js' +import { ApolloLink } from '@apollo/client/link/core/index.js' +import { HttpLink } from '@apollo/client/link/http/index.js' import { print } from 'graphql/language/printer.js' export function createHttpLink( diff --git a/packages/web/src/apollo/suspense.tsx b/packages/web/src/apollo/suspense.tsx index 8f2be3ca0c0b..07b76fec72ec 100644 --- a/packages/web/src/apollo/suspense.tsx +++ b/packages/web/src/apollo/suspense.tsx @@ -17,15 +17,15 @@ import type { InMemoryCacheConfig, setLogVerbosity, } from '@apollo/client' +import { setLogVerbosity as apolloSetLogVerbosity } from '@apollo/client/core/index.js' import { - setLogVerbosity as apolloSetLogVerbosity, useMutation, useSubscription, useBackgroundQuery, useQuery, useReadQuery, useSuspenseQuery, -} from '@apollo/client' +} from '@apollo/client/react/hooks/index.js' import { ApolloClient, InMemoryCache, diff --git a/packages/web/src/apollo/useCache.ts b/packages/web/src/apollo/useCache.ts index bfd444d98d28..a8127116834b 100644 --- a/packages/web/src/apollo/useCache.ts +++ b/packages/web/src/apollo/useCache.ts @@ -1,7 +1,7 @@ import type { ApolloCache, Reference, StoreObject } from '@apollo/client' -import { useApolloClient } from '@apollo/client' import type { NormalizedCacheObject } from '@apollo/client/cache/inmemory/types.js' import type { ApolloQueryResult } from '@apollo/client/core' +import { useApolloClient } from '@apollo/client/react/hooks/useApolloClient.js' type useCacheType = { cache: ApolloCache diff --git a/packages/web/src/components/cell/createSuspendingCell.test.tsx b/packages/web/src/components/cell/createSuspendingCell.test.tsx index c368802649ed..6ac516b92e1b 100644 --- a/packages/web/src/components/cell/createSuspendingCell.test.tsx +++ b/packages/web/src/components/cell/createSuspendingCell.test.tsx @@ -12,7 +12,7 @@ import { createSuspendingCell } from './createSuspendingCell.js' type ReadQueryHook = typeof useReadQuery type BgQueryHook = typeof useBackgroundQuery -vi.mock('@apollo/client', () => { +vi.mock('@apollo/client/react/hooks/useApolloClient.js', () => { return { useApolloClient: vi.fn(), } diff --git a/packages/web/src/components/cell/createSuspendingCell.tsx b/packages/web/src/components/cell/createSuspendingCell.tsx index ee5e9e7e1859..fc3f383506d4 100644 --- a/packages/web/src/components/cell/createSuspendingCell.tsx +++ b/packages/web/src/components/cell/createSuspendingCell.tsx @@ -1,7 +1,7 @@ import React, { Suspense } from 'react' import type { OperationVariables, QueryReference } from '@apollo/client' -import { useApolloClient } from '@apollo/client' +import { useApolloClient } from '@apollo/client/react/hooks/useApolloClient.js' import { useBackgroundQuery, useReadQuery } from '../GraphQLHooksProvider.js' From 9a1cba35f6c834d9d4616b3c93df19bb602af55a Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 16:09:44 +0700 Subject: [PATCH 25/62] Type ovverride imports --- packages/web/src/apollo/index.tsx | 2 +- packages/web/src/apollo/suspense.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index 806491f3f728..da87fe0effed 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -30,7 +30,7 @@ const { import type { UseAuth } from '@redwoodjs/auth' import { useNoAuth } from '@redwoodjs/auth' -import './typeOverride' +import './typeOverride.js' import { FetchConfigProvider, diff --git a/packages/web/src/apollo/suspense.tsx b/packages/web/src/apollo/suspense.tsx index 07b76fec72ec..f5112c40a34d 100644 --- a/packages/web/src/apollo/suspense.tsx +++ b/packages/web/src/apollo/suspense.tsx @@ -36,7 +36,7 @@ import { buildManualDataTransport } from '@apollo/client-react-streaming/manual- import type { UseAuth } from '@redwoodjs/auth' import { useNoAuth } from '@redwoodjs/auth' import { ServerAuthContext } from '@redwoodjs/auth/dist/AuthProvider/ServerAuthProvider.js' -import './typeOverride' +import './typeOverride.js' import { FetchConfigProvider, From 8ebc02f9ca32f7c09e142f0b463f41f5bbe070ec Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 16:10:19 +0700 Subject: [PATCH 26/62] Remove extension from serverInject because exported --- packages/vite/src/streaming/streamHelpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/streaming/streamHelpers.ts b/packages/vite/src/streaming/streamHelpers.ts index 27002f0c9446..7fb4849beb05 100644 --- a/packages/vite/src/streaming/streamHelpers.ts +++ b/packages/vite/src/streaming/streamHelpers.ts @@ -108,7 +108,7 @@ export async function reactRenderToStreamResponse( ServerInjectedHtml, }: ServerInjectType = rscEnabled ? await importModule('__rwjs__server_inject') - : await import('@redwoodjs/web/dist/components/ServerInject.js') + : await import('@redwoodjs/web/dist/components/ServerInject') const { renderToString }: RDServerType = rscEnabled ? await importModule('rd-server') : await import('react-dom/server') From a8ae31639cec1f96e1a41ffc0a0478a4ef2390a0 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 20 Jun 2024 19:35:49 +0700 Subject: [PATCH 27/62] Fix graphql import for prerender --- packages/prerender/src/graphql/graphql.ts | 2 +- packages/web/package.json | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/prerender/src/graphql/graphql.ts b/packages/prerender/src/graphql/graphql.ts index 6350b81b3ffe..985efb2fafe0 100644 --- a/packages/prerender/src/graphql/graphql.ts +++ b/packages/prerender/src/graphql/graphql.ts @@ -5,7 +5,7 @@ import { print } from 'graphql' import { getConfig, getPaths } from '@redwoodjs/project-config' // @MARK: have to do this, otherwise rwjs/web is loaded before shims -import { getOperationName } from '@redwoodjs/web/dist/graphql' +import { getOperationName } from '@redwoodjs/web/dist/graphql.js' import { GqlHandlerImportError } from '../errors' diff --git a/packages/web/package.json b/packages/web/package.json index 781bd8ccc61d..d34687f071e6 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -54,14 +54,17 @@ "require": "./dist/cjs/apollo/suspense.js", "import": "./dist/apollo/suspense.js" }, + "./dist/graphql.js": { + "require": "./dist/cjs/graphql.js", + "import": "./dist/graphql.js" + }, "./toast": { "require": "./dist/cjs/toast/index.js", "import": "./dist/toast/index.js", "types": "./dist/toast/index.d.ts" }, "./apollo": { - "require": "./dist/cjs/apollo/index.js", - "import": "./dist/apollo/index.js", + "default": "./dist/cjs/apollo/index.js", "types": "./dist/apollo/index.d.ts" } }, From a20357f6a4f314850a5e674cf0095129dd6b8ba8 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 14:53:23 +0700 Subject: [PATCH 28/62] ESM compatbility imports for react-helmet-async --- packages/web/src/components/MetaTags.tsx | 3 ++- packages/web/src/components/Metadata.tsx | 3 ++- packages/web/src/components/RedwoodProvider.tsx | 3 ++- packages/web/src/index.ts | 4 +++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/web/src/components/MetaTags.tsx b/packages/web/src/components/MetaTags.tsx index 3da635364d94..f8cee4fda23c 100644 --- a/packages/web/src/components/MetaTags.tsx +++ b/packages/web/src/components/MetaTags.tsx @@ -1,7 +1,8 @@ import React from 'react' -import { Helmet as HelmetHead } from 'react-helmet-async' +import helmetPkg from 'react-helmet-async' +const { Helmet: HelmetHead } = helmetPkg // Ideally we wouldn't include this for non experiment builds // But.... not worth the effort to remove it from bundle atm import PortalHead from './PortalHead.js' diff --git a/packages/web/src/components/Metadata.tsx b/packages/web/src/components/Metadata.tsx index c0722fa1541a..c9d1a06fa161 100644 --- a/packages/web/src/components/Metadata.tsx +++ b/packages/web/src/components/Metadata.tsx @@ -2,7 +2,8 @@ import React from 'react' -import { Helmet as HelmetHead } from 'react-helmet-async' +import helmetPkg from 'react-helmet-async' +const { Helmet: HelmetHead } = helmetPkg // Ideally we wouldn't include this for non experiment builds // But.... not worth the effort to remove it from bundle atm diff --git a/packages/web/src/components/RedwoodProvider.tsx b/packages/web/src/components/RedwoodProvider.tsx index d1f0771e69e7..7c82c6f97bc3 100644 --- a/packages/web/src/components/RedwoodProvider.tsx +++ b/packages/web/src/components/RedwoodProvider.tsx @@ -1,6 +1,7 @@ import React from 'react' -import { Helmet, HelmetProvider } from 'react-helmet-async' +import helmetPkg from 'react-helmet-async' +const { Helmet, HelmetProvider } = helmetPkg interface RedwoodProviderProps { children: React.ReactNode diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 8c488c72a0bf..88d8a80030c6 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -32,7 +32,9 @@ export * from './components/RedwoodProvider.js' export * from './components/MetaTags.js' export * from './components/Metadata.js' -export { Helmet as Head, Helmet } from 'react-helmet-async' +import helmetPkg from 'react-helmet-async' +const { Helmet } = helmetPkg +export { Helmet as Head, Helmet } export * from './components/htmlTags.js' export * from './routeHooks.types.js' From 80487d330169d308103dc315383a073004b095ee Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 16:14:45 +0700 Subject: [PATCH 29/62] Use import * for helmet --- packages/web/src/components/MetaTags.tsx | 2 +- packages/web/src/components/Metadata.tsx | 3 ++- packages/web/src/components/RedwoodProvider.tsx | 3 ++- packages/web/src/index.ts | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/web/src/components/MetaTags.tsx b/packages/web/src/components/MetaTags.tsx index f8cee4fda23c..57132e69b664 100644 --- a/packages/web/src/components/MetaTags.tsx +++ b/packages/web/src/components/MetaTags.tsx @@ -1,6 +1,6 @@ import React from 'react' -import helmetPkg from 'react-helmet-async' +import * as helmetPkg from 'react-helmet-async' const { Helmet: HelmetHead } = helmetPkg // Ideally we wouldn't include this for non experiment builds diff --git a/packages/web/src/components/Metadata.tsx b/packages/web/src/components/Metadata.tsx index c9d1a06fa161..f33c75f85279 100644 --- a/packages/web/src/components/Metadata.tsx +++ b/packages/web/src/components/Metadata.tsx @@ -2,7 +2,8 @@ import React from 'react' -import helmetPkg from 'react-helmet-async' +import * as helmetPkg from 'react-helmet-async' + const { Helmet: HelmetHead } = helmetPkg // Ideally we wouldn't include this for non experiment builds diff --git a/packages/web/src/components/RedwoodProvider.tsx b/packages/web/src/components/RedwoodProvider.tsx index 7c82c6f97bc3..3a56390ec763 100644 --- a/packages/web/src/components/RedwoodProvider.tsx +++ b/packages/web/src/components/RedwoodProvider.tsx @@ -1,6 +1,7 @@ import React from 'react' -import helmetPkg from 'react-helmet-async' +import * as helmetPkg from 'react-helmet-async' + const { Helmet, HelmetProvider } = helmetPkg interface RedwoodProviderProps { diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 88d8a80030c6..7ee4ad4ac9a6 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -32,7 +32,8 @@ export * from './components/RedwoodProvider.js' export * from './components/MetaTags.js' export * from './components/Metadata.js' -import helmetPkg from 'react-helmet-async' +import * as helmetPkg from 'react-helmet-async' + const { Helmet } = helmetPkg export { Helmet as Head, Helmet } From 78f3f78adfa8b30219cb8ee0055504fd61627af9 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 16:44:56 +0700 Subject: [PATCH 30/62] Add useClient to apollo/suspense.tsx to prevent bundling --- packages/web/src/apollo/suspense.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/apollo/suspense.tsx b/packages/web/src/apollo/suspense.tsx index f5112c40a34d..b111eaff5b07 100644 --- a/packages/web/src/apollo/suspense.tsx +++ b/packages/web/src/apollo/suspense.tsx @@ -6,7 +6,7 @@ * Done this way, to avoid making changes breaking on main, due to the experimental-nextjs import * Eventually we will have one ApolloProvider, not multiple. */ - +'use client' import React, { useContext } from 'react' import type { From e756770ce66f1821e4aa362e696132cd4ee035b5 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 16:45:06 +0700 Subject: [PATCH 31/62] Fix streamInjector imports for rsc --- packages/vite/src/rsc/rscBuildForSsr.ts | 4 +++- packages/vite/src/streaming/streamHelpers.ts | 7 +++++-- packages/web/package.json | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/rsc/rscBuildForSsr.ts b/packages/vite/src/rsc/rscBuildForSsr.ts index 2b09d873d6e7..27637baf2859 100644 --- a/packages/vite/src/rsc/rscBuildForSsr.ts +++ b/packages/vite/src/rsc/rscBuildForSsr.ts @@ -66,6 +66,7 @@ export async function rscBuildForSsr({ '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', + '@redwoodjs/router/*', '@redwoodjs/auth-*', // '@redwoodjs/web', ], @@ -92,10 +93,11 @@ export async function rscBuildForSsr({ // for the client-only components. They get loaded once the page is // rendered ...clientEntryFiles, + // These import redirections are so that we don't bundle multiple versions of react __rwjs__react: 'react', __rwjs__location: '@redwoodjs/router/dist/location', __rwjs__server_auth_provider: '@redwoodjs/auth/ServerAuthProvider', - __rwjs__server_inject: '@redwoodjs/web/dist/components/ServerInject', + __rwjs__server_inject: '@redwoodjs/web/serverInject', '__rwjs__rsdw-client': 'react-server-dom-webpack/client.edge', // TODO (RSC): add __rwjs__ prefix to the entry below 'rd-server': 'react-dom/server.edge', diff --git a/packages/vite/src/streaming/streamHelpers.ts b/packages/vite/src/streaming/streamHelpers.ts index 7fb4849beb05..46aaac47e840 100644 --- a/packages/vite/src/streaming/streamHelpers.ts +++ b/packages/vite/src/streaming/streamHelpers.ts @@ -102,13 +102,15 @@ export async function reactRenderToStreamResponse( const { createElement }: React = rscEnabled ? await importModule('__rwjs__react') : await import('react') + const { createInjector, ServerHtmlProvider, ServerInjectedHtml, }: ServerInjectType = rscEnabled ? await importModule('__rwjs__server_inject') - : await import('@redwoodjs/web/dist/components/ServerInject') + : // @MARK: cannot use exports field because of moduleResolution in this package + await import('@redwoodjs/web/dist/components/ServerInject') const { renderToString }: RDServerType = rscEnabled ? await importModule('rd-server') : await import('react-dom/server') @@ -322,7 +324,8 @@ export async function importModule( } else if (mod === '__rwjs__server_auth_provider') { return await import(ServerAuthProviderPath) } else if (mod === '__rwjs__server_inject') { - return (await import(ServerInjectPath)).default + // Don't need default because rwjs/web is now ESM + return await import(ServerInjectPath) } throw new Error('Unknown module ' + mod) diff --git a/packages/web/package.json b/packages/web/package.json index d34687f071e6..27a5df3d40de 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -44,7 +44,8 @@ "./serverInject": { "require": "./dist/cjs/components/ServerInject.js", "import": "./dist/components/ServerInject.js", - "types": "./dist/components/ServerInject.d.ts" + "types": "./dist/components/ServerInject.d.ts", + "default": "./dist/components/ServerInject.js" }, "./dist/components/*": { "require": "./dist/cjs/components/*.js", From 42899f8a8f0de6c9f6e85347b325173efa272cfb Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 17:31:26 +0700 Subject: [PATCH 32/62] Fix apollo provider import in legacy dev with exports field --- packages/web/package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index 27a5df3d40de..57561f6e9dac 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -65,8 +65,10 @@ "types": "./dist/toast/index.d.ts" }, "./apollo": { - "default": "./dist/cjs/apollo/index.js", - "types": "./dist/apollo/index.d.ts" + "require": "./dist/cjs/apollo/index.js", + "import": "./dist/apollo/index.js", + "types": "./dist/apollo/index.d.ts", + "default": "./dist/cjs/apollo/index.js" } }, "files": [ From 7a10a671e96ac380f7db07383a13c382dbf5e373 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 18:00:48 +0700 Subject: [PATCH 33/62] Update how sseLInk is imported to fix legacy builds --- packages/web/src/apollo/index.tsx | 4 +++- packages/web/src/apollo/sseLink.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index da87fe0effed..188da3f5176d 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -43,8 +43,10 @@ import { registerFragment, registerFragments, } from './fragmentRegistry.js' -import { SSELink } from './sseLink.js' +import * as SSELinkExports from './sseLink.js' import { useCache } from './useCache.js' +// Not sure why we need to import it this way for legacy builds to work +const { SSELink } = SSELinkExports export type { CacheKey, diff --git a/packages/web/src/apollo/sseLink.ts b/packages/web/src/apollo/sseLink.ts index 24e28d614443..59b1de5ddf26 100644 --- a/packages/web/src/apollo/sseLink.ts +++ b/packages/web/src/apollo/sseLink.ts @@ -60,7 +60,7 @@ const mapReferrerPolicyHeader = ( /** * GraphQL over Server-Sent Events (SSE) spec link for Apollo Client */ -export class SSELink extends ApolloLink { +class SSELink extends ApolloLink { private client: Client constructor(options: SSELinkOptions) { @@ -104,3 +104,5 @@ export class SSELink extends ApolloLink { }) } } + +export { SSELink } From eb8ef7276e8471640c75321f02b35072add13cbc Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 21 Jun 2024 18:06:24 +0700 Subject: [PATCH 34/62] Update path for apollo import proxy (not sure if necessary) --- packages/web/apollo/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/apollo/index.js b/packages/web/apollo/index.js index 4cd7b24834fc..4f02affbabbb 100644 --- a/packages/web/apollo/index.js +++ b/packages/web/apollo/index.js @@ -1,2 +1,2 @@ /* eslint-env es6, commonjs */ -module.exports = require('../dist/apollo') +module.exports = require('../dist/cjs/apollo/index.js') From ae872d509973ed3b2cb66eb1bbe1e02fabdc2c59 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 17:32:12 +0700 Subject: [PATCH 35/62] Fix fatal error boundary double default --- packages/web/src/components/FatalErrorBoundary.tsx | 2 +- packages/web/src/index.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/web/src/components/FatalErrorBoundary.tsx b/packages/web/src/components/FatalErrorBoundary.tsx index 1ff1b024b30f..851ad18d10f6 100644 --- a/packages/web/src/components/FatalErrorBoundary.tsx +++ b/packages/web/src/components/FatalErrorBoundary.tsx @@ -57,4 +57,4 @@ class FatalErrorBoundary extends React.Component< } } -export default FatalErrorBoundary +export { FatalErrorBoundary } diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 7ee4ad4ac9a6..0d48a1d96a06 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -2,7 +2,8 @@ import './global.web-auto-imports.js' import './config.js' import './assetImports.js' -export { default as FatalErrorBoundary } from './components/FatalErrorBoundary.js' +export { FatalErrorBoundary } from './components/FatalErrorBoundary.js' + export { FetchConfigProvider, useFetchConfig, From 02f9275fe196d7050661ab050e852a0077a8dd52 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 17:34:07 +0700 Subject: [PATCH 36/62] Use await import --- packages/prerender/src/runPrerender.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/prerender/src/runPrerender.tsx b/packages/prerender/src/runPrerender.tsx index cce03e057784..51b3db956299 100644 --- a/packages/prerender/src/runPrerender.tsx +++ b/packages/prerender/src/runPrerender.tsx @@ -45,10 +45,9 @@ async function recursivelyRender( queryCache: Record, ): Promise { // Load this async, to prevent rwjs/web being loaded before shims - const { - CellCacheContextProvider, - getOperationName, - } = require('@redwoodjs/web') + const { CellCacheContextProvider, getOperationName } = await import( + '@redwoodjs/web' + ) let shouldShowGraphqlHandlerNotFoundWarn = false // Execute all gql queries we haven't already fetched From 360645c4f448abb03a37a8397e1d5bfcd9d20464 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 17:34:17 +0700 Subject: [PATCH 37/62] Force cjs import of certain apollo deps --- packages/web/src/apollo/fragmentRegistry.ts | 6 ++++-- packages/web/src/apollo/useCache.ts | 3 ++- packages/web/src/components/cell/createSuspendingCell.tsx | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/web/src/apollo/fragmentRegistry.ts b/packages/web/src/apollo/fragmentRegistry.ts index 59268c355d58..40867e2c8aa4 100644 --- a/packages/web/src/apollo/fragmentRegistry.ts +++ b/packages/web/src/apollo/fragmentRegistry.ts @@ -1,8 +1,10 @@ import * as apolloClient from '@apollo/client' import type { UseFragmentResult } from '@apollo/client' +// @ts-expect-error Force import cjs module +import { createFragmentRegistry } from '@apollo/client/cache/cache.cjs' import type { FragmentRegistryAPI } from '@apollo/client/cache/index.js' -import { createFragmentRegistry } from '@apollo/client/cache/index.js' -import { getFragmentDefinitions } from '@apollo/client/utilities/index.js' +// @ts-expect-error Force import cjs module +import { getFragmentDefinitions } from '@apollo/client/utilities/utilities.cjs' import type { DocumentNode } from 'graphql' export type FragmentIdentifier = string | number diff --git a/packages/web/src/apollo/useCache.ts b/packages/web/src/apollo/useCache.ts index a8127116834b..9f29dec1168f 100644 --- a/packages/web/src/apollo/useCache.ts +++ b/packages/web/src/apollo/useCache.ts @@ -1,7 +1,8 @@ import type { ApolloCache, Reference, StoreObject } from '@apollo/client' import type { NormalizedCacheObject } from '@apollo/client/cache/inmemory/types.js' import type { ApolloQueryResult } from '@apollo/client/core' -import { useApolloClient } from '@apollo/client/react/hooks/useApolloClient.js' +// @ts-expect-error Force import cjs module +import { useApolloClient } from '@apollo/client/react/hooks/hooks.cjs' type useCacheType = { cache: ApolloCache diff --git a/packages/web/src/components/cell/createSuspendingCell.tsx b/packages/web/src/components/cell/createSuspendingCell.tsx index fc3f383506d4..24b5ae63bfee 100644 --- a/packages/web/src/components/cell/createSuspendingCell.tsx +++ b/packages/web/src/components/cell/createSuspendingCell.tsx @@ -1,7 +1,8 @@ import React, { Suspense } from 'react' import type { OperationVariables, QueryReference } from '@apollo/client' -import { useApolloClient } from '@apollo/client/react/hooks/useApolloClient.js' +// @ts-expect-error Force import cjs module +import { useApolloClient } from '@apollo/client/react/hooks/hooks.cjs' import { useBackgroundQuery, useReadQuery } from '../GraphQLHooksProvider.js' From 15876aca974be3212a348257befad1b42789d5a5 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 17:51:39 +0700 Subject: [PATCH 38/62] Update test path --- packages/web/src/components/cell/createSuspendingCell.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/components/cell/createSuspendingCell.test.tsx b/packages/web/src/components/cell/createSuspendingCell.test.tsx index 6ac516b92e1b..f59b4f27f793 100644 --- a/packages/web/src/components/cell/createSuspendingCell.test.tsx +++ b/packages/web/src/components/cell/createSuspendingCell.test.tsx @@ -12,7 +12,7 @@ import { createSuspendingCell } from './createSuspendingCell.js' type ReadQueryHook = typeof useReadQuery type BgQueryHook = typeof useBackgroundQuery -vi.mock('@apollo/client/react/hooks/useApolloClient.js', () => { +vi.mock('@apollo/client/react/hooks/hooks.cjs', () => { return { useApolloClient: vi.fn(), } From ae30ea63449a46c0bf7700500cce1b5ae9dcabef Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 17:58:01 +0700 Subject: [PATCH 39/62] Ignore type tests and avoid default import of gql tag --- packages/web/build.mts | 4 ++-- packages/web/src/__typetests__/cellProps.test.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/web/build.mts b/packages/web/build.mts index 0c84454fd1dc..08805ea0d85d 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -10,7 +10,7 @@ import { writeFileSync } from 'node:fs' // CJS build await build({ entryPointOptions: { - ignore: [...defaultIgnorePatterns], + ignore: [...defaultIgnorePatterns, 'src/__typetests__/**'], }, buildOptions: { ...defaultBuildOptions, @@ -29,7 +29,7 @@ await build({ entryPointOptions: { // @NOTE: building the cjs bins only... // I haven't tried esm bins yet... - ignore: [...defaultIgnorePatterns, 'src/bins/**'], + ignore: [...defaultIgnorePatterns, 'src/bins/**', 'src/__typetests__/**'], }, buildOptions: { ...defaultBuildOptions, diff --git a/packages/web/src/__typetests__/cellProps.test.tsx b/packages/web/src/__typetests__/cellProps.test.tsx index 6797e42bbcf6..1ff1ecf35ff7 100644 --- a/packages/web/src/__typetests__/cellProps.test.tsx +++ b/packages/web/src/__typetests__/cellProps.test.tsx @@ -1,7 +1,7 @@ // These are normally auto-imported by babel import React from 'react' -import gql from 'graphql-tag' +import { gql } from 'graphql-tag' import { describe, expect, test } from 'tstyche' import type { CellProps, CellSuccessProps } from '@redwoodjs/web' From 78ed8fdda5462abb09a476fe1cc1da43b284b901 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 19:18:36 +0700 Subject: [PATCH 40/62] Add entry export field --- packages/web/package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web/package.json b/packages/web/package.json index 57561f6e9dac..1d90fc115097 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -9,6 +9,7 @@ }, "license": "MIT", "main": "./dist/index.js", + "types": "dist/index.d.ts", "bin": { "cross-env": "./dist/cjs/bins/cross-env.js", @@ -59,6 +60,10 @@ "require": "./dist/cjs/graphql.js", "import": "./dist/graphql.js" }, + "./dist/entry/index.js": { + "require": "./dist/cjs/entry/index.js", + "import": "./dist/entry/index.js" + }, "./toast": { "require": "./dist/cjs/toast/index.js", "import": "./dist/toast/index.js", From ee48b97ba1a04d4176dddeb4db7d676a116e7dcc Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 19:23:50 +0700 Subject: [PATCH 41/62] Undo ServerINject change --- packages/vite/src/streaming/streamHelpers.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/vite/src/streaming/streamHelpers.ts b/packages/vite/src/streaming/streamHelpers.ts index 46aaac47e840..f2ae9dbabae4 100644 --- a/packages/vite/src/streaming/streamHelpers.ts +++ b/packages/vite/src/streaming/streamHelpers.ts @@ -109,8 +109,7 @@ export async function reactRenderToStreamResponse( ServerInjectedHtml, }: ServerInjectType = rscEnabled ? await importModule('__rwjs__server_inject') - : // @MARK: cannot use exports field because of moduleResolution in this package - await import('@redwoodjs/web/dist/components/ServerInject') + : await import('@redwoodjs/web/dist/components/ServerInject.js') const { renderToString }: RDServerType = rscEnabled ? await importModule('rd-server') : await import('react-dom/server') From de2c3c2b90424c5771c532fb98e061cc4fecf1ea Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 20:12:28 +0700 Subject: [PATCH 42/62] Fix CJS issues with webpack --- packages/core/config/webpack.common.js | 2 +- packages/web/package.json | 6 +++++- packages/web/src/apollo/index.tsx | 10 +++++++--- packages/web/src/apollo/sseLink.ts | 9 ++++++--- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/packages/core/config/webpack.common.js b/packages/core/config/webpack.common.js index e5476c69d47b..dbfdba0dd674 100644 --- a/packages/core/config/webpack.common.js +++ b/packages/core/config/webpack.common.js @@ -228,7 +228,7 @@ module.exports = (webpackEnv) => { */ app: redwoodPaths.web.index || - require.resolve('@redwoodjs/web/dist/entry/index.js'), + require.resolve('@redwoodjs/web/webpackEntry').default, }, resolve: { extensions: ['.wasm', '.mjs', '.js', '.jsx', '.ts', '.tsx', '.json'], diff --git a/packages/web/package.json b/packages/web/package.json index 1d90fc115097..65ce059b4475 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -56,11 +56,15 @@ "require": "./dist/cjs/apollo/suspense.js", "import": "./dist/apollo/suspense.js" }, + "./dist/apollo/sseLink": { + "require": "./dist/cjs/apollo/sseLink.js", + "import": "./dist/apollo/sseLink.js" + }, "./dist/graphql.js": { "require": "./dist/cjs/graphql.js", "import": "./dist/graphql.js" }, - "./dist/entry/index.js": { + "./webpackEntry": { "require": "./dist/cjs/entry/index.js", "import": "./dist/entry/index.js" }, diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index 188da3f5176d..d1e9d30a9279 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -6,9 +6,12 @@ import type { ApolloCache, } from '@apollo/client' import * as apolloClient from '@apollo/client' -import { setContext } from '@apollo/client/link/context' -import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries' -import { getMainDefinition } from '@apollo/client/utilities' +// @ts-expect-error Force import cjs module +import { setContext } from '@apollo/client/link/context/context.cjs' +// @ts-expect-error Force import cjs module +import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries/persisted-queries.cjs' +// @ts-expect-error Force import cjs module +import { getMainDefinition } from '@apollo/client/utilities/utilities.cjs' import { fetch as crossFetch } from '@whatwg-node/fetch' import { print } from 'graphql/language/printer.js' @@ -242,6 +245,7 @@ const ApolloProviderWithFetchConfig: React.FunctionComponent<{ definition.operation === 'subscription' ) }, + // @ts-expect-error @TODO look into this new SSELink({ url: uri, auth: { authProviderType, tokenFn: getToken }, diff --git a/packages/web/src/apollo/sseLink.ts b/packages/web/src/apollo/sseLink.ts index 59b1de5ddf26..307c98090a14 100644 --- a/packages/web/src/apollo/sseLink.ts +++ b/packages/web/src/apollo/sseLink.ts @@ -1,8 +1,11 @@ import type { HttpOptions } from '@apollo/client' import type { Operation, FetchResult } from '@apollo/client/core' -import { ApolloLink, Observable } from '@apollo/client/core' +// @ts-expect-error Force import cjs module +import { ApolloLink } from '@apollo/client/link/core/core.cjs' +// @ts-expect-error Force import cjs module +import { Observable } from '@apollo/client/utilities/utilities.cjs' import { print } from 'graphql' -import type { ClientOptions, Client } from 'graphql-sse' +import type { ClientOptions, Client, Sink } from 'graphql-sse' import { createClient } from 'graphql-sse' interface SSELinkOptions extends Partial { url: string @@ -92,7 +95,7 @@ class SSELink extends ApolloLink { } public request(operation: Operation): Observable { - return new Observable((sink) => { + return new Observable((sink: Sink) => { return this.client.subscribe( { ...operation, query: print(operation.query) }, { From 2e71a8512aca36d43e7a4b4ecc0a219cb1a473f3 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 23:22:05 +0700 Subject: [PATCH 43/62] Use ESM version of webpack entry Dont build CJS version --- packages/core/config/webpack.common.js | 2 +- packages/web/build.mts | 9 ++++++++- packages/web/package.json | 4 +--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/core/config/webpack.common.js b/packages/core/config/webpack.common.js index dbfdba0dd674..9ce17b462a30 100644 --- a/packages/core/config/webpack.common.js +++ b/packages/core/config/webpack.common.js @@ -228,7 +228,7 @@ module.exports = (webpackEnv) => { */ app: redwoodPaths.web.index || - require.resolve('@redwoodjs/web/webpackEntry').default, + require.resolve('@redwoodjs/web/webpackEntry'), }, resolve: { extensions: ['.wasm', '.mjs', '.js', '.jsx', '.ts', '.tsx', '.json'], diff --git a/packages/web/build.mts b/packages/web/build.mts index 08805ea0d85d..051d9d563ffa 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -8,9 +8,16 @@ import { import { writeFileSync } from 'node:fs' // CJS build +/** + * Notes: + * - we don't build the webpack entry point in CJS, because it produces a double wrapped module + * instead we use the ESM version (see ./webpackEntry in package.json) + * - we build bins in CJS, until projects fully switch to ESM (or we produce .mts files) this is probably + * the better option + */ await build({ entryPointOptions: { - ignore: [...defaultIgnorePatterns, 'src/__typetests__/**'], + ignore: [...defaultIgnorePatterns, 'src/__typetests__/**', 'src/entry/**'], }, buildOptions: { ...defaultBuildOptions, diff --git a/packages/web/package.json b/packages/web/package.json index 65ce059b4475..af78bc3ea1ad 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -9,7 +9,6 @@ }, "license": "MIT", "main": "./dist/index.js", - "types": "dist/index.d.ts", "bin": { "cross-env": "./dist/cjs/bins/cross-env.js", @@ -65,8 +64,7 @@ "import": "./dist/graphql.js" }, "./webpackEntry": { - "require": "./dist/cjs/entry/index.js", - "import": "./dist/entry/index.js" + "default": "./dist/entry/index.js" }, "./toast": { "require": "./dist/cjs/toast/index.js", From aacb89adbb6cd59efeee67cf865ce4e37fa7c222 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 23:31:26 +0700 Subject: [PATCH 44/62] Use serverInject from exports --- packages/vite/src/streaming/streamHelpers.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/streaming/streamHelpers.ts b/packages/vite/src/streaming/streamHelpers.ts index f2ae9dbabae4..68b18f8ad141 100644 --- a/packages/vite/src/streaming/streamHelpers.ts +++ b/packages/vite/src/streaming/streamHelpers.ts @@ -109,7 +109,9 @@ export async function reactRenderToStreamResponse( ServerInjectedHtml, }: ServerInjectType = rscEnabled ? await importModule('__rwjs__server_inject') - : await import('@redwoodjs/web/dist/components/ServerInject.js') + : // @ts-expect-error this is defined in packages/web/package.json exports. + // This package just doesn't have moduleResolution configured + await import('@redwoodjs/web/serverInject') const { renderToString }: RDServerType = rscEnabled ? await importModule('rd-server') : await import('react-dom/server') From 37186b2bcfe45f2dc2a6546d039d53f4becd0832 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Mon, 24 Jun 2024 23:55:42 +0700 Subject: [PATCH 45/62] Temporarily remove buffer from devFatalError page --- packages/web/src/components/DevFatalErrorPage.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/web/src/components/DevFatalErrorPage.tsx b/packages/web/src/components/DevFatalErrorPage.tsx index d43885a2e285..4dd9a6063b4b 100644 --- a/packages/web/src/components/DevFatalErrorPage.tsx +++ b/packages/web/src/components/DevFatalErrorPage.tsx @@ -4,7 +4,9 @@ // Stacktracey requires buffer, which Vite does not polyfill by default if (typeof window !== 'undefined') { - window.Buffer = window.Buffer || require('buffer').Buffer + // @TODO We need a better way to polyfill Buffer + // Possibly just in webpack and vite settings for dev. + // window.Buffer = window.Buffer || require('buffer').Buffer } import React, { useState } from 'react' From 3a735ba480eb00e1cc193423f973fa843376e927 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 00:37:05 +0700 Subject: [PATCH 46/62] Update prerender import --- packages/prerender/src/runPrerender.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/prerender/src/runPrerender.tsx b/packages/prerender/src/runPrerender.tsx index 51b3db956299..cce03e057784 100644 --- a/packages/prerender/src/runPrerender.tsx +++ b/packages/prerender/src/runPrerender.tsx @@ -45,9 +45,10 @@ async function recursivelyRender( queryCache: Record, ): Promise { // Load this async, to prevent rwjs/web being loaded before shims - const { CellCacheContextProvider, getOperationName } = await import( - '@redwoodjs/web' - ) + const { + CellCacheContextProvider, + getOperationName, + } = require('@redwoodjs/web') let shouldShowGraphqlHandlerNotFoundWarn = false // Execute all gql queries we haven't already fetched From 5f03763ea936c8500057c928530608caf3f8a730 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 00:37:24 +0700 Subject: [PATCH 47/62] Remove serverStore, middleware exports fields. Not there yet! --- packages/web/package.json | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index af78bc3ea1ad..22a6f9eae205 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -26,21 +26,6 @@ "import": "./dist/index.js", "require": "./dist/cjs/index.js" }, - "./serverStore": { - "require": "./dist/cjs/server/serverStore.js", - "import": "./dist/server/serverStore.js", - "types": "./dist/server/serverStore.d.ts" - }, - "./cookie": { - "require": "./dist/cjs/server/CookieJar.js", - "import": "./dist/server/CookieJar.js", - "types": "./dist/server/CookieJar.d.ts" - }, - "./middleware": { - "require": "./dist/cjs/server/middleware.js", - "import": "./dist/server/middleware.js", - "types": "./dist/server/middleware.d.ts" - }, "./serverInject": { "require": "./dist/cjs/components/ServerInject.js", "import": "./dist/components/ServerInject.js", @@ -87,7 +72,7 @@ "scripts": { "build": "tsx ./build.mts && yarn build:types", "build:pack": "yarn pack -o redwoodjs-web.tgz", - "build:types": "tsc --build --verbose tsconfig.json", + "build:types": "tsc --build --verbose ./tsconfig.json ./tsconfig.types-cjs.json", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", "test": "vitest run", From b8cb18337bc310c60ae2b77f0605ee5335366ae3 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 00:37:42 +0700 Subject: [PATCH 48/62] Add tsconfig for building cjs types --- unsure --- packages/web/tsconfig.types-cjs.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 packages/web/tsconfig.types-cjs.json diff --git a/packages/web/tsconfig.types-cjs.json b/packages/web/tsconfig.types-cjs.json new file mode 100644 index 000000000000..f43f9cd1bd82 --- /dev/null +++ b/packages/web/tsconfig.types-cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "dist/cjs", + "module": "commonjs", + "moduleResolution": "node", + }, +} From c32ce6b4377c56f537610731904866910a9204a6 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 00:37:48 +0700 Subject: [PATCH 49/62] Update comment --- packages/web/build.mts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/web/build.mts b/packages/web/build.mts index 051d9d563ffa..7ff452ae346e 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -11,7 +11,8 @@ import { writeFileSync } from 'node:fs' /** * Notes: * - we don't build the webpack entry point in CJS, because it produces a double wrapped module - * instead we use the ESM version (see ./webpackEntry in package.json) + * instead we use the ESM version (see ./webpackEntry in package.json). The double wrapping happens + * when you set type: module in package.json. * - we build bins in CJS, until projects fully switch to ESM (or we produce .mts files) this is probably * the better option */ From 75d53ba0702e6269b564d7b1100415d4a13fffac Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 01:16:48 +0700 Subject: [PATCH 50/62] Disable helmet completely for SSR and RSC --- packages/web/src/components/RedwoodProvider.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/web/src/components/RedwoodProvider.tsx b/packages/web/src/components/RedwoodProvider.tsx index 3a56390ec763..4d215a7fe17a 100644 --- a/packages/web/src/components/RedwoodProvider.tsx +++ b/packages/web/src/components/RedwoodProvider.tsx @@ -1,7 +1,7 @@ import React from 'react' +// @NOTE: Helmet is not used in SSR & RSC import * as helmetPkg from 'react-helmet-async' - const { Helmet, HelmetProvider } = helmetPkg interface RedwoodProviderProps { @@ -23,8 +23,10 @@ export const RedwoodProvider = ({ return '' } - // @TODO (STREAMING): We can remove Helmet, HelmetProvider - // Once we've migrated to using the new PortalHead component + if (RWJS_ENV.RWJS_EXP_STREAMING_SSR) { + return <>{children} + } + return ( From b82fc377ef61622f9ae58d783e302f9e84924999 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 01:30:45 +0700 Subject: [PATCH 51/62] Map jest preset to CJS build --- packages/testing/config/jest/web/jest-preset.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/testing/config/jest/web/jest-preset.js b/packages/testing/config/jest/web/jest-preset.js index b2ad05105777..e2ffc5d58349 100644 --- a/packages/testing/config/jest/web/jest-preset.js +++ b/packages/testing/config/jest/web/jest-preset.js @@ -54,7 +54,7 @@ module.exports = { NODE_MODULES_PATH, '@redwoodjs/testing/dist/web/MockRouter.js', ), - '^@redwoodjs/web$': path.join(NODE_MODULES_PATH, '@redwoodjs/web'), + '^@redwoodjs/web$': path.join(NODE_MODULES_PATH, '@redwoodjs/web/dist/cjs'), // This allows us to mock `createAuthentication` which is used by auth // clients, which in turn lets us mock `useAuth` in tests From ddd33b0f0585521dbbd0bd1180df74bd257daaa3 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 01:30:56 +0700 Subject: [PATCH 52/62] Reorder require and import --- packages/web/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index 22a6f9eae205..1e92476b5d0f 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -23,8 +23,8 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/cjs/index.js" + "require": "./dist/cjs/index.js", + "import": "./dist/index.js" }, "./serverInject": { "require": "./dist/cjs/components/ServerInject.js", From a8fc727e476666d2f1cbeb4bfe1db406459ccf68 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 01:34:04 +0700 Subject: [PATCH 53/62] Cleanup build.mts --- packages/web/build.mts | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/web/build.mts b/packages/web/build.mts index 7ff452ae346e..ad8cc749bae7 100644 --- a/packages/web/build.mts +++ b/packages/web/build.mts @@ -1,5 +1,3 @@ -// import { writeFileSync } from 'node:fs' - import { build, defaultBuildOptions, @@ -12,7 +10,7 @@ import { writeFileSync } from 'node:fs' * Notes: * - we don't build the webpack entry point in CJS, because it produces a double wrapped module * instead we use the ESM version (see ./webpackEntry in package.json). The double wrapping happens - * when you set type: module in package.json. + * when you set type: module in package.json, and occurs on the App & Routes import from the project. * - we build bins in CJS, until projects fully switch to ESM (or we produce .mts files) this is probably * the better option */ @@ -22,16 +20,12 @@ await build({ }, buildOptions: { ...defaultBuildOptions, - // ⭐ No special tsconfig here + // ⭐ No special build tsconfig in this package outdir: 'dist/cjs', - // outdir: 'dist', packages: 'external', }, }) -/** THIS IS IN PART 2 ~ making this a dual module -Will enable in follow up PR **/ - // ESM build await build({ entryPointOptions: { @@ -41,8 +35,7 @@ await build({ }, buildOptions: { ...defaultBuildOptions, - // ⭐ No special tsconfig here - // tsconfig: 'tsconfig.build.json', + // ⭐ No special build tsconfig in this package format: 'esm', packages: 'external', }, From 0a8628f62a6aa0198cb9560aec0c40911e7c26c3 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Tue, 25 Jun 2024 01:54:13 +0700 Subject: [PATCH 54/62] Make red squigglies go away on ssr project --- packages/web/package.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index 1e92476b5d0f..d238508780d6 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -22,9 +22,14 @@ }, "exports": { ".": { - "types": "./dist/index.d.ts", - "require": "./dist/cjs/index.js", - "import": "./dist/index.js" + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.ts", + "default": "./dist/cjs/index.js" + } }, "./serverInject": { "require": "./dist/cjs/components/ServerInject.js", From 9b4118aa15894c30a63cac1c5e6100faecd436d5 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Wed, 26 Jun 2024 18:50:23 +0700 Subject: [PATCH 55/62] Update apollo imports to make storybook-webpack work --- packages/web/src/apollo/index.tsx | 63 ++++++++++++++++--------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index d1e9d30a9279..7942fa25994e 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -4,32 +4,38 @@ import type { ApolloClientOptions, setLogVerbosity, ApolloCache, + InMemoryCacheConfig, + HttpOptions, + DocumentNode, } from '@apollo/client' -import * as apolloClient from '@apollo/client' -// @ts-expect-error Force import cjs module -import { setContext } from '@apollo/client/link/context/context.cjs' -// @ts-expect-error Force import cjs module -import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries/persisted-queries.cjs' -// @ts-expect-error Force import cjs module -import { getMainDefinition } from '@apollo/client/utilities/utilities.cjs' -import { fetch as crossFetch } from '@whatwg-node/fetch' -import { print } from 'graphql/language/printer.js' - -// Note: Importing directly from `apollo/client` doesn't work properly in Storybook. -const { +import { ApolloProvider, ApolloClient, ApolloLink, - HttpLink, InMemoryCache, + split, +} from '@apollo/client' +// @ts-expect-error Force import cjs module +import { setLogVerbosity as apolloSetLogVerbosity } from '@apollo/client/core/core.cjs' +// @ts-expect-error Force import cjs module +import { setContext } from '@apollo/client/link/context/context.cjs' +// @ts-expect-error Force import cjs module +import { HttpLink } from '@apollo/client/link/http/http.cjs' +// @ts-expect-error Force import cjs module +import { createPersistedQueryLink } from '@apollo/client/link/persisted-queries/persisted-queries.cjs' +import { useQuery, useMutation, useSubscription, useBackgroundQuery, useReadQuery, useSuspenseQuery, - setLogVerbosity: apolloSetLogVerbosity, -} = apolloClient + // @ts-expect-error Force import cjs module +} from '@apollo/client/react/hooks/hooks.cjs' +// @ts-expect-error Force import cjs module +import { getMainDefinition } from '@apollo/client/utilities/utilities.cjs' +import { fetch as crossFetch } from '@whatwg-node/fetch' +import { print } from 'graphql/language/printer.js' import type { UseAuth } from '@redwoodjs/auth' import { useNoAuth } from '@redwoodjs/auth' @@ -61,7 +67,7 @@ export { useCache } export { fragmentRegistry, registerFragment, registerFragments } -export type ApolloClientCacheConfig = apolloClient.InMemoryCacheConfig +export type ApolloClientCacheConfig = InMemoryCacheConfig export type RedwoodApolloLinkName = | 'withToken' @@ -71,7 +77,7 @@ export type RedwoodApolloLinkName = export type RedwoodApolloLink< Name extends RedwoodApolloLinkName, - Link extends apolloClient.ApolloLink = apolloClient.ApolloLink, + Link extends ApolloLink = ApolloLink, > = { name: Name link: Link @@ -81,15 +87,10 @@ export type RedwoodApolloLinks = [ RedwoodApolloLink<'withToken'>, RedwoodApolloLink<'authMiddleware'>, RedwoodApolloLink<'updateDataApolloLink'>, - RedwoodApolloLink< - 'httpLink', - apolloClient.ApolloLink | apolloClient.HttpLink - >, + RedwoodApolloLink<'httpLink', ApolloLink | HttpLink>, ] -export type RedwoodApolloLinkFactory = ( - links: RedwoodApolloLinks, -) => apolloClient.ApolloLink +export type RedwoodApolloLinkFactory = (links: RedwoodApolloLinks) => ApolloLink export type GraphQLClientConfigProp = Omit< ApolloClientOptions, @@ -113,7 +114,7 @@ export type GraphQLClientConfigProp = Omit< * }}> * ``` */ - httpLinkConfig?: apolloClient.HttpOptions + httpLinkConfig?: HttpOptions /** * Extend or overwrite `RedwoodApolloProvider`'s Apollo Link. * @@ -137,7 +138,7 @@ export type GraphQLClientConfigProp = Omit< * - your function should return a single link (e.g., using `ApolloLink.from`; see https://www.apollographql.com/docs/react/api/link/introduction/#additive-composition) * - the `HttpLink` should come last (https://www.apollographql.com/docs/react/api/link/introduction/#the-terminating-link) */ - link?: apolloClient.ApolloLink | RedwoodApolloLinkFactory + link?: ApolloLink | RedwoodApolloLinkFactory } const ApolloProviderWithFetchConfig: React.FunctionComponent<{ @@ -236,7 +237,7 @@ const ApolloProviderWithFetchConfig: React.FunctionComponent<{ // is subscription it needs to use the SSELink (server sent events link). const httpOrSSELink = typeof SSELink !== 'undefined' - ? apolloClient.split( + ? split( ({ query }) => { const definition = getMainDefinition(query) @@ -245,7 +246,7 @@ const ApolloProviderWithFetchConfig: React.FunctionComponent<{ definition.operation === 'subscription' ) }, - // @ts-expect-error @TODO look into this + // @ts-expect-error Due to CJS imports new SSELink({ url: uri, auth: { authProviderType, tokenFn: getToken }, @@ -265,14 +266,14 @@ const ApolloProviderWithFetchConfig: React.FunctionComponent<{ * * See https://www.apollographql.com/docs/react/api/link/persisted-queries/ */ - interface DocumentNodeWithMeta extends apolloClient.DocumentNode { + interface DocumentNodeWithMeta extends DocumentNode { __meta__?: { hash: string } } // Check if the query made includes the hash, and if so then make the request with the persisted query link - const terminatingLink = apolloClient.split( + const terminatingLink = split( ({ query }) => { const documentQuery = query as DocumentNodeWithMeta return documentQuery?.['__meta__']?.['hash'] !== undefined @@ -354,7 +355,7 @@ class ErrorBoundary extends React.Component { export const RedwoodApolloProvider: React.FunctionComponent<{ graphQLClientConfig?: GraphQLClientConfigProp - fragments?: apolloClient.DocumentNode[] + fragments?: DocumentNode[] useAuth?: UseAuth logLevel?: ReturnType children: React.ReactNode From 028d2e7dc48ac8b4d8685cdc7dead609ff39bf09 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 27 Jun 2024 15:45:05 +0700 Subject: [PATCH 56/62] Alias rwjs/web/apollo in storybook-webpack --- packages/testing/config/storybook/main.js | 8 ++++++++ packages/web/package.json | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/packages/testing/config/storybook/main.js b/packages/testing/config/storybook/main.js index a03ba6be846c..83d6b013b015 100644 --- a/packages/testing/config/storybook/main.js +++ b/packages/testing/config/storybook/main.js @@ -55,6 +55,14 @@ const baseConfig = { sbConfig.resolve.alias['@redwoodjs/auth$'] = require.resolve( '@redwoodjs/testing/dist/web/mockAuth.js', ) + + // Force loading the ESM version of ApolloProvider in Storybook + // I'm unsure why storybook-webpack does not work with the CJS version + // All other cases are fine with the CJS import. + sbConfig.resolve.alias['@redwoodjs/web/apollo$'] = require.resolve( + '@redwoodjs/web/forceEsmApollo', + ) + sbConfig.resolve.alias['~__REDWOOD__USER_ROUTES_FOR_MOCK'] = redwoodProjectPaths.web.routes sbConfig.resolve.alias['~__REDWOOD__USER_WEB_SRC'] = diff --git a/packages/web/package.json b/packages/web/package.json index d238508780d6..a65b2e5168b1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -66,6 +66,10 @@ "import": "./dist/apollo/index.js", "types": "./dist/apollo/index.d.ts", "default": "./dist/cjs/apollo/index.js" + }, + "./forceEsmApollo": { + "require": "./dist/apollo/index.js", + "import": "./dist/apollo/index.js" } }, "files": [ From af27666843578a9b44a0cc077309e331b1e9f8c1 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 27 Jun 2024 18:45:50 +0700 Subject: [PATCH 57/62] Add buffer polyfill for vite dev only for DevFatalErrorPage --- packages/vite/package.json | 1 + packages/vite/src/index.ts | 11 + .../web/src/components/DevFatalErrorPage.tsx | 6 - yarn.lock | 571 +++++++++++++++++- 4 files changed, 570 insertions(+), 19 deletions(-) diff --git a/packages/vite/package.json b/packages/vite/package.json index 9f7d0e5f0d9d..53d8fa9d503f 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -94,6 +94,7 @@ "react-server-dom-webpack": "19.0.0-beta-04b058868c-20240508", "vite": "5.3.1", "vite-plugin-cjs-interop": "2.1.1", + "vite-plugin-node-polyfills": "^0.22.0", "yargs-parser": "21.1.1" }, "devDependencies": { diff --git a/packages/vite/src/index.ts b/packages/vite/src/index.ts index de1663be514a..b45231bd752e 100644 --- a/packages/vite/src/index.ts +++ b/packages/vite/src/index.ts @@ -4,6 +4,7 @@ import path from 'path' import react from '@vitejs/plugin-react' import type { PluginOption } from 'vite' import { normalizePath } from 'vite' +import { nodePolyfills } from 'vite-plugin-node-polyfills' import { getWebSideDefaultBabelConfig } from '@redwoodjs/babel-config' import { getConfig, getPaths } from '@redwoodjs/project-config' @@ -156,5 +157,15 @@ export default function redwoodPluginVite(): PluginOption[] { }), }, }), + // Only include + { + ...nodePolyfills({ + include: ['buffer'], + globals: { + Buffer: true, + }, + }), + apply: 'serve', + }, ] } diff --git a/packages/web/src/components/DevFatalErrorPage.tsx b/packages/web/src/components/DevFatalErrorPage.tsx index 4dd9a6063b4b..236bb7d84d3a 100644 --- a/packages/web/src/components/DevFatalErrorPage.tsx +++ b/packages/web/src/components/DevFatalErrorPage.tsx @@ -3,12 +3,6 @@ // making it fine for embedding inside this project. // Stacktracey requires buffer, which Vite does not polyfill by default -if (typeof window !== 'undefined') { - // @TODO We need a better way to polyfill Buffer - // Possibly just in webpack and vite settings for dev. - // window.Buffer = window.Buffer || require('buffer').Buffer -} - import React, { useState } from 'react' import type { GraphQLError } from 'graphql' diff --git a/yarn.lock b/yarn.lock index 644955cc6238..becf6de0b6dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8707,6 +8707,7 @@ __metadata: typescript: "npm:5.4.5" vite: "npm:5.3.1" vite-plugin-cjs-interop: "npm:2.1.1" + vite-plugin-node-polyfills: "npm:^0.22.0" vitest: "npm:1.6.0" yargs-parser: "npm:21.1.1" bin: @@ -8811,6 +8812,22 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-inject@npm:^5.0.5": + version: 5.0.5 + resolution: "@rollup/plugin-inject@npm:5.0.5" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + estree-walker: "npm:^2.0.2" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/22d10cf44fa56a6683d5ac4df24a9003379b3dcaae9897f5c30c844afc2ebca83cfaa5557f13a1399b1c8a0d312c3217bcacd508b7ebc4b2cbee401bd1ec8be2 + languageName: node + linkType: hard + "@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.0.2, @rollup/pluginutils@npm:^5.1.0": version: 5.1.0 resolution: "@rollup/pluginutils@npm:5.1.0" @@ -12886,6 +12903,17 @@ __metadata: languageName: node linkType: hard +"asn1.js@npm:^4.10.1": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" + dependencies: + bn.js: "npm:^4.0.0" + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + checksum: 10c0/afa7f3ab9e31566c80175a75b182e5dba50589dcc738aa485be42bdd787e2a07246a4b034d481861123cbe646a7656f318f4f1cad2e9e5e808a210d5d6feaa88 + languageName: node + linkType: hard + "asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" @@ -13495,6 +13523,20 @@ __metadata: languageName: node linkType: hard +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 10c0/9736aaa317421b6b3ed038ff3d4491935a01419ac2d83ddcfebc5717385295fcfcf0c57311d90fe49926d0abbd7a9dbefdd8861e6129939177f7e67ebc645b21 + languageName: node + linkType: hard + +"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + "body-parser@npm:1.20.2": version: 1.20.2 resolution: "body-parser@npm:1.20.2" @@ -13587,6 +13629,13 @@ __metadata: languageName: node linkType: hard +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + "browser-assert@npm:^1.2.1": version: 1.2.1 resolution: "browser-assert@npm:1.2.1" @@ -13594,6 +13643,80 @@ __metadata: languageName: node linkType: hard +"browser-resolve@npm:^2.0.0": + version: 2.0.0 + resolution: "browser-resolve@npm:2.0.0" + dependencies: + resolve: "npm:^1.17.0" + checksum: 10c0/06c43adf3cb1939825ab9a4ac355b23272820ee421a20d04f62e0dabd9ea305e497b97f3ac027f87d53c366483aafe8673bbe1aaa5e41cd69eeafa65ac5fda6e + languageName: node + linkType: hard + +"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": + version: 1.2.0 + resolution: "browserify-aes@npm:1.2.0" + dependencies: + buffer-xor: "npm:^1.0.3" + cipher-base: "npm:^1.0.0" + create-hash: "npm:^1.1.0" + evp_bytestokey: "npm:^1.0.3" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/967f2ae60d610b7b252a4cbb55a7a3331c78293c94b4dd9c264d384ca93354c089b3af9c0dd023534efdc74ffbc82510f7ad4399cf82bc37bc07052eea485f18 + languageName: node + linkType: hard + +"browserify-cipher@npm:^1.0.0": + version: 1.0.1 + resolution: "browserify-cipher@npm:1.0.1" + dependencies: + browserify-aes: "npm:^1.0.4" + browserify-des: "npm:^1.0.0" + evp_bytestokey: "npm:^1.0.0" + checksum: 10c0/aa256dcb42bc53a67168bbc94ab85d243b0a3b56109dee3b51230b7d010d9b78985ffc1fb36e145c6e4db151f888076c1cfc207baf1525d3e375cbe8187fe27d + languageName: node + linkType: hard + +"browserify-des@npm:^1.0.0": + version: 1.0.2 + resolution: "browserify-des@npm:1.0.2" + dependencies: + cipher-base: "npm:^1.0.1" + des.js: "npm:^1.0.0" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/943eb5d4045eff80a6cde5be4e5fbb1f2d5002126b5a4789c3c1aae3cdddb1eb92b00fb92277f512288e5c6af330730b1dbabcf7ce0923e749e151fcee5a074d + languageName: node + linkType: hard + +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" + dependencies: + bn.js: "npm:^5.0.0" + randombytes: "npm:^2.0.1" + checksum: 10c0/fb2b5a8279d8a567a28d8ee03fb62e448428a906bab5c3dc9e9c3253ace551b5ea271db15e566ac78f1b1d71b243559031446604168b9235c351a32cae99d02a + languageName: node + linkType: hard + +"browserify-sign@npm:^4.0.0": + version: 4.2.3 + resolution: "browserify-sign@npm:4.2.3" + dependencies: + bn.js: "npm:^5.2.1" + browserify-rsa: "npm:^4.1.0" + create-hash: "npm:^1.2.0" + create-hmac: "npm:^1.1.7" + elliptic: "npm:^6.5.5" + hash-base: "npm:~3.0" + inherits: "npm:^2.0.4" + parse-asn1: "npm:^5.1.7" + readable-stream: "npm:^2.3.8" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/30c0eba3f5970a20866a4d3fbba2c5bd1928cd24f47faf995f913f1499214c6f3be14bb4d6ec1ab5c6cafb1eca9cb76ba1c2e1c04ed018370634d4e659c77216 + languageName: node + linkType: hard + "browserify-zlib@npm:^0.1.4": version: 0.1.4 resolution: "browserify-zlib@npm:0.1.4" @@ -13603,6 +13726,15 @@ __metadata: languageName: node linkType: hard +"browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" + dependencies: + pako: "npm:~1.0.5" + checksum: 10c0/9ab10b6dc732c6c5ec8ebcbe5cb7fe1467f97402c9b2140113f47b5f187b9438f93a8e065d8baf8b929323c18324fbf1105af479ee86d9d36cab7d7ef3424ad9 + languageName: node + linkType: hard + "browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": version: 4.23.0 resolution: "browserslist@npm:4.23.0" @@ -13654,6 +13786,13 @@ __metadata: languageName: node linkType: hard +"buffer-xor@npm:^1.0.3": + version: 1.0.3 + resolution: "buffer-xor@npm:1.0.3" + checksum: 10c0/fd269d0e0bf71ecac3146187cfc79edc9dbb054e2ee69b4d97dfb857c6d997c33de391696d04bdd669272751fa48e7872a22f3a6c7b07d6c0bc31dbe02a4075c + languageName: node + linkType: hard + "buffer@npm:6.0.3, buffer@npm:^6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" @@ -13674,6 +13813,13 @@ __metadata: languageName: node linkType: hard +"builtin-status-codes@npm:^3.0.0": + version: 3.0.0 + resolution: "builtin-status-codes@npm:3.0.0" + checksum: 10c0/c37bbba11a34c4431e56bd681b175512e99147defbe2358318d8152b3a01df7bf25e0305873947e5b350073d5ef41a364a22b37e48f1fb6d2fe6d5286a0f348c + languageName: node + linkType: hard + "builtins@npm:^1.0.3": version: 1.0.3 resolution: "builtins@npm:1.0.3" @@ -14229,6 +14375,16 @@ __metadata: languageName: node linkType: hard +"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/d8d005f8b64d8a77b3d3ce531301ae7b45902c9cab4ec8b66bdbd2bf2a1d9fceb9a2133c293eb3c060b2d964da0f14c47fb740366081338aa3795dd1faa8984b + languageName: node + linkType: hard + "cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.3": version: 1.2.3 resolution: "cjs-module-lexer@npm:1.2.3" @@ -14733,6 +14889,13 @@ __metadata: languageName: node linkType: hard +"console-browserify@npm:^1.1.0": + version: 1.2.0 + resolution: "console-browserify@npm:1.2.0" + checksum: 10c0/89b99a53b7d6cee54e1e64fa6b1f7ac24b844b4019c5d39db298637e55c1f4ffa5c165457ad984864de1379df2c8e1886cbbdac85d9dbb6876a9f26c3106f226 + languageName: node + linkType: hard + "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -15027,6 +15190,43 @@ __metadata: languageName: node linkType: hard +"create-ecdh@npm:^4.0.0": + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" + dependencies: + bn.js: "npm:^4.1.0" + elliptic: "npm:^6.5.3" + checksum: 10c0/77b11a51360fec9c3bce7a76288fc0deba4b9c838d5fb354b3e40c59194d23d66efe6355fd4b81df7580da0661e1334a235a2a5c040b7569ba97db428d466e7f + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: "npm:^1.0.1" + inherits: "npm:^2.0.1" + md5.js: "npm:^1.3.4" + ripemd160: "npm:^2.0.1" + sha.js: "npm:^2.4.0" + checksum: 10c0/d402e60e65e70e5083cb57af96d89567954d0669e90550d7cec58b56d49c4b193d35c43cec8338bc72358198b8cbf2f0cac14775b651e99238e1cf411490f915 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": + version: 1.1.7 + resolution: "create-hmac@npm:1.1.7" + dependencies: + cipher-base: "npm:^1.0.3" + create-hash: "npm:^1.1.0" + inherits: "npm:^2.0.1" + ripemd160: "npm:^2.0.0" + safe-buffer: "npm:^5.0.1" + sha.js: "npm:^2.4.8" + checksum: 10c0/24332bab51011652a9a0a6d160eed1e8caa091b802335324ae056b0dcb5acbc9fcf173cf10d128eba8548c3ce98dfa4eadaa01bd02f44a34414baee26b651835 + languageName: node + linkType: hard + "create-jest@npm:^29.7.0": version: 29.7.0 resolution: "create-jest@npm:29.7.0" @@ -15078,7 +15278,7 @@ __metadata: languageName: unknown linkType: soft -"create-require@npm:^1.1.0": +"create-require@npm:^1.1.0, create-require@npm:^1.1.1": version: 1.1.1 resolution: "create-require@npm:1.1.1" checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 @@ -15133,6 +15333,25 @@ __metadata: languageName: node linkType: hard +"crypto-browserify@npm:^3.11.0": + version: 3.12.0 + resolution: "crypto-browserify@npm:3.12.0" + dependencies: + browserify-cipher: "npm:^1.0.0" + browserify-sign: "npm:^4.0.0" + create-ecdh: "npm:^4.0.0" + create-hash: "npm:^1.1.0" + create-hmac: "npm:^1.1.0" + diffie-hellman: "npm:^5.0.0" + inherits: "npm:^2.0.1" + pbkdf2: "npm:^3.0.3" + public-encrypt: "npm:^4.0.0" + randombytes: "npm:^2.0.0" + randomfill: "npm:^1.0.3" + checksum: 10c0/0c20198886576050a6aa5ba6ae42f2b82778bfba1753d80c5e7a090836890dc372bdc780986b2568b4fb8ed2a91c958e61db1f0b6b1cc96af4bd03ffc298ba92 + languageName: node + linkType: hard + "crypto-random-string@npm:^1.0.0": version: 1.0.0 resolution: "crypto-random-string@npm:1.0.0" @@ -15939,6 +16158,16 @@ __metadata: languageName: node linkType: hard +"des.js@npm:^1.0.0": + version: 1.1.0 + resolution: "des.js@npm:1.1.0" + dependencies: + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + checksum: 10c0/671354943ad67493e49eb4c555480ab153edd7cee3a51c658082fcde539d2690ed2a4a0b5d1f401f9cde822edf3939a6afb2585f32c091f2d3a1b1665cd45236 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -16040,6 +16269,17 @@ __metadata: languageName: node linkType: hard +"diffie-hellman@npm:^5.0.0": + version: 5.0.3 + resolution: "diffie-hellman@npm:5.0.3" + dependencies: + bn.js: "npm:^4.1.0" + miller-rabin: "npm:^4.0.0" + randombytes: "npm:^2.0.0" + checksum: 10c0/ce53ccafa9ca544b7fc29b08a626e23a9b6562efc2a98559a0c97b4718937cebaa9b5d7d0a05032cc9c1435e9b3c1532b9e9bf2e0ede868525922807ad6e1ecf + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -16128,6 +16368,13 @@ __metadata: languageName: node linkType: hard +"domain-browser@npm:^4.22.0": + version: 4.23.0 + resolution: "domain-browser@npm:4.23.0" + checksum: 10c0/dfcc6ba070a2c968a4d922e7d99ef440d1076812af0d983404aadf64729f746bb4a0ad2c5e73ccd5d9cf41bc79037f2a1e4a915bdf33d07e0d77f487b635b5b2 + languageName: node + linkType: hard + "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" @@ -16395,6 +16642,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": + version: 6.5.5 + resolution: "elliptic@npm:6.5.5" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/3e591e93783a1b66f234ebf5bd3a8a9a8e063a75073a35a671e03e3b25253b6e33ac121f7efe9b8808890fffb17b40596cc19d01e6e8d1fa13b9a56ff65597c8 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -17449,6 +17711,17 @@ __metadata: languageName: node linkType: hard +"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": + version: 1.0.3 + resolution: "evp_bytestokey@npm:1.0.3" + dependencies: + md5.js: "npm:^1.3.4" + node-gyp: "npm:latest" + safe-buffer: "npm:^5.1.1" + checksum: 10c0/77fbe2d94a902a80e9b8f5a73dcd695d9c14899c5e82967a61b1fc6cbbb28c46552d9b127cff47c45fcf684748bdbcfa0a50410349109de87ceb4b199ef6ee99 + languageName: node + linkType: hard + "execa@npm:4.1.0": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -19288,6 +19561,37 @@ __metadata: languageName: node linkType: hard +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.6.0" + safe-buffer: "npm:^5.2.0" + checksum: 10c0/663eabcf4173326fbb65a1918a509045590a26cc7e0964b754eef248d281305c6ec9f6b31cb508d02ffca383ab50028180ce5aefe013e942b44a903ac8dc80d0 + languageName: node + linkType: hard + +"hash-base@npm:~3.0": + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/a13357dccb3827f0bb0b56bf928da85c428dc8670f6e4a1c7265e4f1653ce02d69030b40fd01b0f1d218a995a066eea279cded9cec72d207b593bcdfe309c2f0 + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + "hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -19323,6 +19627,17 @@ __metadata: languageName: node linkType: hard +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -19681,6 +19996,13 @@ __metadata: languageName: node linkType: hard +"https-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "https-browserify@npm:1.0.0" + checksum: 10c0/e17b6943bc24ea9b9a7da5714645d808670af75a425f29baffc3284962626efdc1eb3aa9bbffaa6e64028a6ad98af5b09fabcb454a8f918fb686abfdc9e9b8ae + languageName: node + linkType: hard + "https-proxy-agent@npm:^4.0.0": version: 4.0.0 resolution: "https-proxy-agent@npm:4.0.0" @@ -19916,7 +20238,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -20730,6 +21052,13 @@ __metadata: languageName: node linkType: hard +"isomorphic-timers-promises@npm:^1.0.1": + version: 1.0.1 + resolution: "isomorphic-timers-promises@npm:1.0.1" + checksum: 10c0/3b4761d0012ebe6b6382246079fc667f3513f36fe4042638f2bfb7db1557e4f1acd33a9c9907706c04270890ec6434120f132f3f300161a42a7dd8628926c8a4 + languageName: node + linkType: hard + "isomorphic-ws@npm:5.0.0, isomorphic-ws@npm:^5.0.0": version: 5.0.0 resolution: "isomorphic-ws@npm:5.0.0" @@ -22709,7 +23038,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.10, magic-string@npm:^0.30.5": +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.10, magic-string@npm:^0.30.3, magic-string@npm:^0.30.5": version: 0.30.10 resolution: "magic-string@npm:0.30.10" dependencies: @@ -22869,6 +23198,17 @@ __metadata: languageName: node linkType: hard +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: "npm:^3.0.0" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/b7bd75077f419c8e013fc4d4dada48be71882e37d69a44af65a2f2804b91e253441eb43a0614423a1c91bb830b8140b0dc906bc797245e2e275759584f4efcc5 + languageName: node + linkType: hard + "md5@npm:2.3.0": version: 2.3.0 resolution: "md5@npm:2.3.0" @@ -23059,6 +23399,18 @@ __metadata: languageName: node linkType: hard +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: "npm:^4.0.0" + brorand: "npm:^1.0.1" + bin: + miller-rabin: bin/miller-rabin + checksum: 10c0/26b2b96f6e49dbcff7faebb78708ed2f5f9ae27ac8cbbf1d7c08f83cf39bed3d418c0c11034dce997da70d135cc0ff6f3a4c15dc452f8e114c11986388a64346 + languageName: node + linkType: hard + "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -23156,13 +23508,20 @@ __metadata: languageName: node linkType: hard -"minimalistic-assert@npm:^1.0.0": +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd languageName: node linkType: hard +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + "minimatch@npm:3.0.5": version: 3.0.5 resolution: "minimatch@npm:3.0.5" @@ -24185,6 +24544,41 @@ __metadata: languageName: node linkType: hard +"node-stdlib-browser@npm:^1.2.0": + version: 1.2.0 + resolution: "node-stdlib-browser@npm:1.2.0" + dependencies: + assert: "npm:^2.0.0" + browser-resolve: "npm:^2.0.0" + browserify-zlib: "npm:^0.2.0" + buffer: "npm:^5.7.1" + console-browserify: "npm:^1.1.0" + constants-browserify: "npm:^1.0.0" + create-require: "npm:^1.1.1" + crypto-browserify: "npm:^3.11.0" + domain-browser: "npm:^4.22.0" + events: "npm:^3.0.0" + https-browserify: "npm:^1.0.0" + isomorphic-timers-promises: "npm:^1.0.1" + os-browserify: "npm:^0.3.0" + path-browserify: "npm:^1.0.1" + pkg-dir: "npm:^5.0.0" + process: "npm:^0.11.10" + punycode: "npm:^1.4.1" + querystring-es3: "npm:^0.2.1" + readable-stream: "npm:^3.6.0" + stream-browserify: "npm:^3.0.0" + stream-http: "npm:^3.2.0" + string_decoder: "npm:^1.0.0" + timers-browserify: "npm:^2.0.4" + tty-browserify: "npm:0.0.1" + url: "npm:^0.11.0" + util: "npm:^0.12.4" + vm-browserify: "npm:^1.0.1" + checksum: 10c0/4da239ebabcba68e09b2620aaae02dd589045b101441beb90988bc60f1af3d286e9fab0c334503eaf74986e583923e7648a8fa081edc4981e4d738636773f32e + languageName: node + linkType: hard + "nodemailer@npm:6.9.13": version: 6.9.13 resolution: "nodemailer@npm:6.9.13" @@ -24909,6 +25303,13 @@ __metadata: languageName: node linkType: hard +"os-browserify@npm:^0.3.0": + version: 0.3.0 + resolution: "os-browserify@npm:0.3.0" + checksum: 10c0/6ff32cb1efe2bc6930ad0fd4c50e30c38010aee909eba8d65be60af55efd6cbb48f0287e3649b4e3f3a63dce5a667b23c187c4293a75e557f0d5489d735bcf52 + languageName: node + linkType: hard + "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -25190,6 +25591,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:~1.0.5": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 10c0/86dd99d8b34c3930345b8bbeb5e1cd8a05f608eeb40967b293f72fe469d0e9c88b783a8777e4cc7dc7c91ce54c5e93d88ff4b4f060e6ff18408fd21030d9ffbe + languageName: node + linkType: hard + "param-case@npm:^2.1.1": version: 2.1.1 resolution: "param-case@npm:2.1.1" @@ -25218,6 +25626,20 @@ __metadata: languageName: node linkType: hard +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": + version: 5.1.7 + resolution: "parse-asn1@npm:5.1.7" + dependencies: + asn1.js: "npm:^4.10.1" + browserify-aes: "npm:^1.2.0" + evp_bytestokey: "npm:^1.0.3" + hash-base: "npm:~3.0" + pbkdf2: "npm:^3.1.2" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/05eb5937405c904eb5a7f3633bab1acc11f4ae3478a07ef5c6d81ce88c3c0e505ff51f9c7b935ebc1265c868343793698fc91025755a895d0276f620f95e8a82 + languageName: node + linkType: hard + "parse-conflict-json@npm:^3.0.0": version: 3.0.1 resolution: "parse-conflict-json@npm:3.0.1" @@ -25493,6 +25915,19 @@ __metadata: languageName: node linkType: hard +"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" + dependencies: + create-hash: "npm:^1.1.2" + create-hmac: "npm:^1.1.4" + ripemd160: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + sha.js: "npm:^2.4.8" + checksum: 10c0/5a30374e87d33fa080a92734d778cf172542cc7e41b96198c4c88763997b62d7850de3fbda5c3111ddf79805ee7c1da7046881c90ac4920b5e324204518b05fd + languageName: node + linkType: hard + "peberminta@npm:^0.8.0": version: 0.8.0 resolution: "peberminta@npm:0.8.0" @@ -26545,6 +26980,20 @@ __metadata: languageName: node linkType: hard +"public-encrypt@npm:^4.0.0": + version: 4.0.3 + resolution: "public-encrypt@npm:4.0.3" + dependencies: + bn.js: "npm:^4.1.0" + browserify-rsa: "npm:^4.0.0" + create-hash: "npm:^1.1.0" + parse-asn1: "npm:^5.0.0" + randombytes: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/6c2cc19fbb554449e47f2175065d6b32f828f9b3badbee4c76585ac28ae8641aafb9bb107afc430c33c5edd6b05dbe318df4f7d6d7712b1093407b11c4280700 + languageName: node + linkType: hard + "pump@npm:^2.0.0": version: 2.0.1 resolution: "pump@npm:2.0.1" @@ -26665,6 +27114,13 @@ __metadata: languageName: node linkType: hard +"querystring-es3@npm:^0.2.1": + version: 0.2.1 + resolution: "querystring-es3@npm:0.2.1" + checksum: 10c0/476938c1adb45c141f024fccd2ffd919a3746e79ed444d00e670aad68532977b793889648980e7ca7ff5ffc7bfece623118d0fbadcaf217495eeb7059ae51580 + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -26721,7 +27177,7 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.1.0": +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: @@ -26730,6 +27186,16 @@ __metadata: languageName: node linkType: hard +"randomfill@npm:^1.0.3": + version: 1.0.4 + resolution: "randomfill@npm:1.0.4" + dependencies: + randombytes: "npm:^2.0.5" + safe-buffer: "npm:^5.1.0" + checksum: 10c0/11aeed35515872e8f8a2edec306734e6b74c39c46653607f03c68385ab8030e2adcc4215f76b5e4598e028c4750d820afd5c65202527d831d2a5f207fe2bc87c + languageName: node + linkType: hard + "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -27149,7 +27615,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -27164,7 +27630,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -27623,7 +28089,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.11.1, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8": +"resolve@npm:^1.10.0, resolve@npm:^1.11.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -27649,7 +28115,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -27812,6 +28278,16 @@ __metadata: languageName: node linkType: hard +"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: "npm:^3.0.0" + inherits: "npm:^2.0.1" + checksum: 10c0/f6f0df78817e78287c766687aed4d5accbebc308a8e7e673fb085b9977473c1f139f0c5335d353f172a915bb288098430755d2ad3c4f30612f4dd0c901cd2c3a + languageName: node + linkType: hard + "rollup@npm:4.18.0, rollup@npm:^4.13.0": version: 4.18.0 resolution: "rollup@npm:4.18.0" @@ -28029,7 +28505,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -28333,7 +28809,7 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.5": +"setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 @@ -28354,6 +28830,18 @@ __metadata: languageName: node linkType: hard +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10c0/b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5 + languageName: node + linkType: hard + "shallow-clone@npm:^3.0.0": version: 3.0.1 resolution: "shallow-clone@npm:3.0.1" @@ -29033,6 +29521,16 @@ __metadata: languageName: node linkType: hard +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: "npm:~2.0.4" + readable-stream: "npm:^3.5.0" + checksum: 10c0/ec3b975a4e0aa4b3dc5e70ffae3fc8fd29ac725353a14e72f213dff477b00330140ad014b163a8cbb9922dfe90803f81a5ea2b269e1bbfd8bd71511b88f889ad + languageName: node + linkType: hard + "stream-events@npm:^1.0.5": version: 1.0.5 resolution: "stream-events@npm:1.0.5" @@ -29042,6 +29540,18 @@ __metadata: languageName: node linkType: hard +"stream-http@npm:^3.2.0": + version: 3.2.0 + resolution: "stream-http@npm:3.2.0" + dependencies: + builtin-status-codes: "npm:^3.0.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.6.0" + xtend: "npm:^4.0.2" + checksum: 10c0/f128fb8076d60cd548f229554b6a1a70c08a04b7b2afd4dbe7811d20f27f7d4112562eb8bce86d72a8691df3b50573228afcf1271e55e81f981536c67498bc41 + languageName: node + linkType: hard + "stream-shift@npm:^1.0.0, stream-shift@npm:^1.0.2": version: 1.0.3 resolution: "stream-shift@npm:1.0.3" @@ -29207,7 +29717,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": +"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -29799,6 +30309,15 @@ __metadata: languageName: node linkType: hard +"timers-browserify@npm:^2.0.4": + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" + dependencies: + setimmediate: "npm:^1.0.4" + checksum: 10c0/98e84db1a685bc8827c117a8bc62aac811ad56a995d07938fc7ed8cdc5bf3777bfe2d4e5da868847194e771aac3749a20f6cdd22091300fe889a76fe214a4641 + languageName: node + linkType: hard + "tiny-invariant@npm:^1.3.1": version: 1.3.1 resolution: "tiny-invariant@npm:1.3.1" @@ -30213,6 +30732,13 @@ __metadata: languageName: node linkType: hard +"tty-browserify@npm:0.0.1": + version: 0.0.1 + resolution: "tty-browserify@npm:0.0.1" + checksum: 10c0/5e34883388eb5f556234dae75b08e069b9e62de12bd6d87687f7817f5569430a6dfef550b51dbc961715ae0cd0eb5a059e6e3fc34dc127ea164aa0f9b5bb033d + languageName: node + linkType: hard + "tuf-js@npm:^1.1.7": version: 1.1.7 resolution: "tuf-js@npm:1.1.7" @@ -31044,6 +31570,18 @@ __metadata: languageName: node linkType: hard +"vite-plugin-node-polyfills@npm:^0.22.0": + version: 0.22.0 + resolution: "vite-plugin-node-polyfills@npm:0.22.0" + dependencies: + "@rollup/plugin-inject": "npm:^5.0.5" + node-stdlib-browser: "npm:^1.2.0" + peerDependencies: + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + checksum: 10c0/f8ddc452eb6fba280977d037f8a6406aa522e69590641ce72ce5bb31c3498856a9f63ab3671bc6a822dcd1ff9ba5cac02cacef4a0e170fd8500cdeeb38c81675 + languageName: node + linkType: hard + "vite@npm:5.3.1, vite@npm:^5.0.0": version: 5.3.1 resolution: "vite@npm:5.3.1" @@ -31134,6 +31672,13 @@ __metadata: languageName: node linkType: hard +"vm-browserify@npm:^1.0.1": + version: 1.1.2 + resolution: "vm-browserify@npm:1.1.2" + checksum: 10c0/0cc1af6e0d880deb58bc974921320c187f9e0a94f25570fca6b1bd64e798ce454ab87dfd797551b1b0cc1849307421aae0193cedf5f06bdb5680476780ee344b + languageName: node + linkType: hard + "vscode-jsonrpc@npm:8.2.0": version: 8.2.0 resolution: "vscode-jsonrpc@npm:8.2.0" @@ -31986,7 +32531,7 @@ __metadata: languageName: node linkType: hard -"xtend@npm:~4.0.1": +"xtend@npm:^4.0.2, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e From e679f12ee78a4e617270d7f6edeee7035e157745 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 27 Jun 2024 19:15:05 +0700 Subject: [PATCH 58/62] Update cjsInterop comments --- packages/vite/src/devFeServer.ts | 2 +- packages/vite/src/rsc/rscBuildForSsr.ts | 2 +- packages/vite/src/streaming/buildForStreamingServer.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/devFeServer.ts b/packages/vite/src/devFeServer.ts index 3b1e691966d9..30644f3e9f8e 100644 --- a/packages/vite/src/devFeServer.ts +++ b/packages/vite/src/devFeServer.ts @@ -68,11 +68,11 @@ async function createServer() { plugins: [ cjsInterop({ dependencies: [ + // Skip ESM modules: rwjs/auth, rwjs/web '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', '@redwoodjs/auth-*', - // '@redwoodjs/web', ], }), rscEnabled && rscRoutesAutoLoader(), diff --git a/packages/vite/src/rsc/rscBuildForSsr.ts b/packages/vite/src/rsc/rscBuildForSsr.ts index 27637baf2859..7506955100a0 100644 --- a/packages/vite/src/rsc/rscBuildForSsr.ts +++ b/packages/vite/src/rsc/rscBuildForSsr.ts @@ -63,12 +63,12 @@ export async function rscBuildForSsr({ plugins: [ cjsInterop({ dependencies: [ + // Skip ESM modules: rwjs/auth, rwjs/web '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', '@redwoodjs/router/*', '@redwoodjs/auth-*', - // '@redwoodjs/web', ], }), rscRoutesAutoLoader(), diff --git a/packages/vite/src/streaming/buildForStreamingServer.ts b/packages/vite/src/streaming/buildForStreamingServer.ts index 363c1d1ad0cc..56f644037c10 100644 --- a/packages/vite/src/streaming/buildForStreamingServer.ts +++ b/packages/vite/src/streaming/buildForStreamingServer.ts @@ -20,11 +20,11 @@ export async function buildForStreamingServer({ plugins: [ cjsInterop({ dependencies: [ + // Skip ESM modules: rwjs/auth, rwjs/web '@redwoodjs/forms', '@redwoodjs/prerender/*', '@redwoodjs/router', '@redwoodjs/auth-*', - // '@redwoodjs/web', ], }), ], From 9c210bffdbbef4ecc314a2c7e4f3d32480d91370 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Thu, 27 Jun 2024 19:38:51 +0700 Subject: [PATCH 59/62] Use vite client imports --- packages/web/src/assetImports.ts | 18 ------------------ packages/web/src/index.ts | 3 ++- 2 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 packages/web/src/assetImports.ts diff --git a/packages/web/src/assetImports.ts b/packages/web/src/assetImports.ts deleted file mode 100644 index ab532f31c763..000000000000 --- a/packages/web/src/assetImports.ts +++ /dev/null @@ -1,18 +0,0 @@ -// These declarations are based on the webpack bundler settings -// For svgs we use a babel-plugin -// see: redwood/packages/internal/src/build/babel/web.ts - -// For other assets, we're using webpack asset loader -// see: redwood/packages/core/config/webpack.common.js -// These declarations are the most common types - -/// - -/** - * @NOTE - * Declare module syntax does not work in ESM projects. - * - * I'm just trying to import Vite's types here and 🤞 it works. - * - * REMEMBER TO VALIDATE THIS! - */ diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 0d48a1d96a06..98c53f58a6b1 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -1,6 +1,7 @@ import './global.web-auto-imports.js' import './config.js' -import './assetImports.js' +// Type declarations come from Vite, because we use the standard Vite way of doing types +import 'vite/client' export { FatalErrorBoundary } from './components/FatalErrorBoundary.js' From 35a8debfb8b2db7f73bc40b97c115611aafeff86 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 28 Jun 2024 13:08:22 +0700 Subject: [PATCH 60/62] Import dts file specifically --- packages/web/src/global.web-auto-imports.ts | 3 +++ packages/web/src/index.ts | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/web/src/global.web-auto-imports.ts b/packages/web/src/global.web-auto-imports.ts index fc341c6c0509..7243ef6ebd7d 100644 --- a/packages/web/src/global.web-auto-imports.ts +++ b/packages/web/src/global.web-auto-imports.ts @@ -2,6 +2,9 @@ import type _React from 'react' import type { DocumentNode } from 'graphql' +// So that asset imports such as *.svg, *.jpg, etc. are typed +import 'vite/client/index.d.ts' + // These are the global types exposed to a user's project // For "internal" global types see ambient.d.ts diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 98c53f58a6b1..3a93867d291c 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -1,7 +1,5 @@ import './global.web-auto-imports.js' import './config.js' -// Type declarations come from Vite, because we use the standard Vite way of doing types -import 'vite/client' export { FatalErrorBoundary } from './components/FatalErrorBoundary.js' From 9d06bc420b974669154bab6ba3687029b4e1e4e1 Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 28 Jun 2024 13:23:09 +0700 Subject: [PATCH 61/62] Move vite assets directive to typegen --- .../internal/src/generate/typeDefinitions.ts | 17 +++++++++++++++++ packages/web/src/global.web-auto-imports.ts | 3 --- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/internal/src/generate/typeDefinitions.ts b/packages/internal/src/generate/typeDefinitions.ts index 05224ea25a29..a77f8d1a6992 100644 --- a/packages/internal/src/generate/typeDefinitions.ts +++ b/packages/internal/src/generate/typeDefinitions.ts @@ -62,6 +62,7 @@ export const generateTypeDefs = async () => { ...generateTypeDefScenarios(), ...generateTypeDefTestMocks(), ...generateStubStorybookTypes(), + ...generateViteClientTypesDirective(), ...gqlApiTypeDefFiles, ...gqlWebTypeDefFiles, ], @@ -378,6 +379,22 @@ export const generateTypeDefGlobImports = () => { export const generateTypeDefGlobalContext = () => { return writeTypeDefIncludeFile('api-globalContext.d.ts.template') } +/** + * Typescript does not preserve triple slash directives when outputting js or d.ts files. + * This is a work around so that *.svg, *.png, etc. imports have types. + */ +export const generateViteClientTypesDirective = () => { + const viteClientDirective = `/// ` + const redwoodProjectPaths = getPaths() + + const viteClientDirectivePath = path.join( + redwoodProjectPaths.generated.types.includes, + 'web-vite-client.d.ts', + ) + fs.writeFileSync(viteClientDirectivePath, viteClientDirective) + + return [viteClientDirectivePath] +} function generateStubStorybookTypes() { const stubStorybookTypesFileContent = `\ diff --git a/packages/web/src/global.web-auto-imports.ts b/packages/web/src/global.web-auto-imports.ts index 7243ef6ebd7d..fc341c6c0509 100644 --- a/packages/web/src/global.web-auto-imports.ts +++ b/packages/web/src/global.web-auto-imports.ts @@ -2,9 +2,6 @@ import type _React from 'react' import type { DocumentNode } from 'graphql' -// So that asset imports such as *.svg, *.jpg, etc. are typed -import 'vite/client/index.d.ts' - // These are the global types exposed to a user's project // For "internal" global types see ambient.d.ts From 0313271f24a47f55322a3472f07d2507ed294b5b Mon Sep 17 00:00:00 2001 From: Daniel Choudhury Date: Fri, 28 Jun 2024 17:05:13 +0700 Subject: [PATCH 62/62] Dont polyfill for rsc builds --- packages/vite/src/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/index.ts b/packages/vite/src/index.ts index b45231bd752e..2d128913826e 100644 --- a/packages/vite/src/index.ts +++ b/packages/vite/src/index.ts @@ -157,8 +157,9 @@ export default function redwoodPluginVite(): PluginOption[] { }), }, }), - // Only include - { + // Only include the Buffer polyfill for non-rsc dev, for DevFatalErrorPage + // Including the polyfill plugin in any form in RSC breaks + !rscEnabled && { ...nodePolyfills({ include: ['buffer'], globals: {