From 5ef9fe8c274b6b571f35ec201d4c91332fce6e9e Mon Sep 17 00:00:00 2001 From: Gabriel Miranda Date: Thu, 1 May 2025 11:55:35 -0300 Subject: [PATCH 01/12] feat(react-email): Support for `import ... = require(...)` syntax (#2202) --- .changeset/icy-bikes-obey.md | 5 +++++ .../cli/utils/preview/hot-reloading/get-imported-modules.ts | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 .changeset/icy-bikes-obey.md diff --git a/.changeset/icy-bikes-obey.md b/.changeset/icy-bikes-obey.md new file mode 100644 index 0000000000..5f0df0166e --- /dev/null +++ b/.changeset/icy-bikes-obey.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +fix support for `import ... = require(...)` syntax diff --git a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts index 29212742a6..3b0fe1caf6 100644 --- a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts +++ b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts @@ -22,6 +22,9 @@ export const getImportedModules = (contents: string) => { importedPaths.push(node.source.value); } }, + TSExternalModuleReference({ node }) { + importedPaths.push(node.expression.value); + }, CallExpression({ node }) { if ('name' in node.callee && node.callee.name === 'require') { if (node.arguments.length === 1) { From 4c7f5979b98fc58023fb779f21c835d6cc5a123d Mon Sep 17 00:00:00 2001 From: Gabriel Miranda Date: Thu, 1 May 2025 12:09:04 -0300 Subject: [PATCH 02/12] fix(react-email): Fix use of `@babel/traverse` use in ESM (#2201) --- .changeset/long-words-attack.md | 5 +++++ .../utils/preview/hot-reloading/get-imported-modules.ts | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .changeset/long-words-attack.md diff --git a/.changeset/long-words-attack.md b/.changeset/long-words-attack.md new file mode 100644 index 0000000000..b980c56add --- /dev/null +++ b/.changeset/long-words-attack.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +fix `email dev` not working with `traversal` error diff --git a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts index 3b0fe1caf6..b91b6efcf5 100644 --- a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts +++ b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts @@ -1,5 +1,8 @@ import { parse } from '@babel/parser'; -import traverse from '@babel/traverse'; + +import traverseModule from '@babel/traverse'; +// @ts-expect-error This is fine since the default export is wrapped in a default function. The problem is that babel/traverse is not ESM. +const traverse = traverseModule.default; export const getImportedModules = (contents: string) => { const importedPaths: string[] = []; @@ -10,7 +13,7 @@ export const getImportedModules = (contents: string) => { plugins: ['jsx', 'typescript', 'decorators'], }); - traverse(parsedContents, { + traverse.default(parsedContents, { ImportDeclaration({ node }) { importedPaths.push(node.source.value); }, From 7b1ae74ea68cc8ed3d4c3ffbdc57717ac37e6bee Mon Sep 17 00:00:00 2001 From: gabriel miranda Date: Thu, 1 May 2025 12:10:25 -0300 Subject: [PATCH 03/12] chore(root): Lint --- .../src/cli/utils/preview/hot-reloading/get-imported-modules.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts index b91b6efcf5..d29e4fbbda 100644 --- a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts +++ b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts @@ -1,6 +1,7 @@ import { parse } from '@babel/parser'; import traverseModule from '@babel/traverse'; + // @ts-expect-error This is fine since the default export is wrapped in a default function. The problem is that babel/traverse is not ESM. const traverse = traverseModule.default; From 2431f83813af7f83c225d8bb10eb73474faeb669 Mon Sep 17 00:00:00 2001 From: gabriel miranda Date: Thu, 1 May 2025 13:16:43 -0300 Subject: [PATCH 04/12] fix(react-email): Improper use of traverse --- .../src/cli/utils/preview/hot-reloading/get-imported-modules.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts index d29e4fbbda..cd5ad7b05b 100644 --- a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts +++ b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.ts @@ -14,7 +14,7 @@ export const getImportedModules = (contents: string) => { plugins: ['jsx', 'typescript', 'decorators'], }); - traverse.default(parsedContents, { + traverse(parsedContents, { ImportDeclaration({ node }) { importedPaths.push(node.source.value); }, From a41a94387df28a423cd1f1c309345a1308f8d5a1 Mon Sep 17 00:00:00 2001 From: Gabriel Miranda Date: Thu, 1 May 2025 13:23:20 -0300 Subject: [PATCH 05/12] fix(react-email): Tests not importing @babel/traverse the same as raw ESM (#2205) --- .../preview/hot-reloading/create-dependency-graph.spec.ts | 5 +++++ .../utils/preview/hot-reloading/get-imported-modules.spec.ts | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/packages/react-email/src/cli/utils/preview/hot-reloading/create-dependency-graph.spec.ts b/packages/react-email/src/cli/utils/preview/hot-reloading/create-dependency-graph.spec.ts index 25133d48eb..493e455529 100644 --- a/packages/react-email/src/cli/utils/preview/hot-reloading/create-dependency-graph.spec.ts +++ b/packages/react-email/src/cli/utils/preview/hot-reloading/create-dependency-graph.spec.ts @@ -10,6 +10,11 @@ const pathToFileForTestingDependencyGraph = path.join( '.for-dependency-graph.ts', ); +vi.mock('@babel/traverse', async () => { + const traverse = await vi.importActual('@babel/traverse'); + return { default: traverse }; +}); + test('createDependencyGraph()', async () => { if (existsSync(pathToFileForTestingDependencyGraph)) { await fs.rm(pathToFileForTestingDependencyGraph); diff --git a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.spec.ts b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.spec.ts index e55c151f01..8e7d545271 100644 --- a/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.spec.ts +++ b/packages/react-email/src/cli/utils/preview/hot-reloading/get-imported-modules.spec.ts @@ -1,6 +1,11 @@ import { promises as fs } from 'node:fs'; import { getImportedModules } from './get-imported-modules'; +vi.mock('@babel/traverse', async () => { + const traverse = await vi.importActual('@babel/traverse'); + return { default: traverse }; +}); + describe('getImportedModules()', () => { it('should work with this test file', async () => { const contents = await fs.readFile(import.meta.filename, 'utf8'); From 6e331670a8447c8703307ef00790007349e4447b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 13:32:07 -0300 Subject: [PATCH 06/12] chore(root): Version packages (#2203) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/icy-bikes-obey.md | 5 ----- .changeset/long-words-attack.md | 5 ----- packages/react-email/CHANGELOG.md | 7 +++++++ packages/react-email/package.json | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 .changeset/icy-bikes-obey.md delete mode 100644 .changeset/long-words-attack.md diff --git a/.changeset/icy-bikes-obey.md b/.changeset/icy-bikes-obey.md deleted file mode 100644 index 5f0df0166e..0000000000 --- a/.changeset/icy-bikes-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-email": patch ---- - -fix support for `import ... = require(...)` syntax diff --git a/.changeset/long-words-attack.md b/.changeset/long-words-attack.md deleted file mode 100644 index b980c56add..0000000000 --- a/.changeset/long-words-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-email": patch ---- - -fix `email dev` not working with `traversal` error diff --git a/packages/react-email/CHANGELOG.md b/packages/react-email/CHANGELOG.md index cfe4eafb57..c9e524d210 100644 --- a/packages/react-email/CHANGELOG.md +++ b/packages/react-email/CHANGELOG.md @@ -1,5 +1,12 @@ # react-email +## 4.0.10 + +### Patch Changes + +- 5ef9fe8: fix support for `import ... = require(...)` syntax +- 4c7f597: fix `email dev` not working with `traversal` error + ## 4.0.9 ### Patch Changes diff --git a/packages/react-email/package.json b/packages/react-email/package.json index ef5ffbbf05..6e7c10c21f 100644 --- a/packages/react-email/package.json +++ b/packages/react-email/package.json @@ -1,6 +1,6 @@ { "name": "react-email", - "version": "4.0.9", + "version": "4.0.10", "description": "A live preview of your emails right in your browser.", "bin": { "email": "./dist/cli/index.mjs" From 1a172198ca1ae9a77c526a004459282b141b7584 Mon Sep 17 00:00:00 2001 From: Gabriel Miranda Date: Thu, 1 May 2025 14:13:06 -0300 Subject: [PATCH 07/12] fix(react-email): Import compiled templates with `createRequire`'s require (#2207) --- .changeset/hip-items-create.md | 5 +++++ packages/react-email/src/cli/commands/export.ts | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/hip-items-create.md diff --git a/.changeset/hip-items-create.md b/.changeset/hip-items-create.md new file mode 100644 index 0000000000..739f71b37f --- /dev/null +++ b/.changeset/hip-items-create.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +fix improper `require` in `email export` diff --git a/packages/react-email/src/cli/commands/export.ts b/packages/react-email/src/cli/commands/export.ts index 39320dbc81..442c4ee0e1 100644 --- a/packages/react-email/src/cli/commands/export.ts +++ b/packages/react-email/src/cli/commands/export.ts @@ -1,5 +1,7 @@ import fs, { unlinkSync, writeFileSync } from 'node:fs'; +import { createRequire } from 'node:module'; import path from 'node:path'; +import url from 'node:url'; import type { Options } from '@react-email/components'; import { type BuildFailure, build } from 'esbuild'; import { glob } from 'glob'; @@ -32,6 +34,10 @@ type ExportTemplatesOptions = Options & { pretty?: boolean; }; +const filename = url.fileURLToPath(import.meta.url); + +const require = createRequire(filename); + /* This first builds all the templates using esbuild and then puts the output in the `.js` files. Then these `.js` files are imported dynamically and rendered to `.html` files From 45ab698a64b116c10289f2da32561336d4e02dc3 Mon Sep 17 00:00:00 2001 From: Gabriel Miranda Date: Thu, 1 May 2025 14:29:27 -0300 Subject: [PATCH 08/12] fix(react-email): "createServerParamsForMetadata is not a function" (#2206) --- .changeset/honest-paws-wash.md | 5 + packages/react-email/package.json | 2 +- .../react-email/src/cli/commands/export.ts | 1 + pnpm-lock.yaml | 127 +----------------- 4 files changed, 9 insertions(+), 126 deletions(-) create mode 100644 .changeset/honest-paws-wash.md diff --git a/.changeset/honest-paws-wash.md b/.changeset/honest-paws-wash.md new file mode 100644 index 0000000000..e5b2f41bf8 --- /dev/null +++ b/.changeset/honest-paws-wash.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +update next to 15.3.1 diff --git a/packages/react-email/package.json b/packages/react-email/package.json index 6e7c10c21f..9e9c0a68a6 100644 --- a/packages/react-email/package.json +++ b/packages/react-email/package.json @@ -38,7 +38,7 @@ "glob": "^11.0.0", "log-symbols": "^7.0.0", "mime-types": "^3.0.0", - "next": "^15.2.4", + "next": "^15.3.1", "normalize-path": "^3.0.0", "ora": "^8.0.0", "socket.io": "^4.8.1" diff --git a/packages/react-email/src/cli/commands/export.ts b/packages/react-email/src/cli/commands/export.ts index 442c4ee0e1..4a8455e755 100644 --- a/packages/react-email/src/cli/commands/export.ts +++ b/packages/react-email/src/cli/commands/export.ts @@ -130,6 +130,7 @@ export const exportTemplates = async ( ) => Promise; reactEmailCreateReactElement: typeof React.createElement; }; + console.log(emailModule); const rendered = await emailModule.render( emailModule.reactEmailCreateReactElement(emailModule.default, {}), options, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a99d89b500..b01f2d0cf0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -642,8 +642,8 @@ importers: specifier: ^3.0.0 version: 3.0.1 next: - specifier: ^15.2.4 - version: 15.2.4(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^15.3.1 + version: 15.3.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) normalize-path: specifier: ^3.0.0 version: 3.0.0 @@ -2124,9 +2124,6 @@ packages: '@next/env@14.2.3': resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} - '@next/env@15.2.4': - resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} - '@next/env@15.3.1': resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==} @@ -2136,12 +2133,6 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-arm64@15.2.4': - resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@next/swc-darwin-arm64@15.3.1': resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==} engines: {node: '>= 10'} @@ -2154,12 +2145,6 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-darwin-x64@15.2.4': - resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@next/swc-darwin-x64@15.3.1': resolution: {integrity: sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==} engines: {node: '>= 10'} @@ -2172,12 +2157,6 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-gnu@15.2.4': - resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-gnu@15.3.1': resolution: {integrity: sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==} engines: {node: '>= 10'} @@ -2190,12 +2169,6 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.4': - resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-musl@15.3.1': resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==} engines: {node: '>= 10'} @@ -2208,12 +2181,6 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.4': - resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-gnu@15.3.1': resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==} engines: {node: '>= 10'} @@ -2226,12 +2193,6 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.4': - resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-musl@15.3.1': resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==} engines: {node: '>= 10'} @@ -2244,12 +2205,6 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-arm64-msvc@15.2.4': - resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@next/swc-win32-arm64-msvc@15.3.1': resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==} engines: {node: '>= 10'} @@ -2268,12 +2223,6 @@ packages: cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.4': - resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@next/swc-win32-x64-msvc@15.3.1': resolution: {integrity: sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==} engines: {node: '>= 10'} @@ -6242,27 +6191,6 @@ packages: sass: optional: true - next@15.2.4: - resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^19.0.0 - react-dom: ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - next@15.3.1: resolution: {integrity: sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} @@ -9550,70 +9478,47 @@ snapshots: '@next/env@14.2.3': {} - '@next/env@15.2.4': {} - '@next/env@15.3.1': {} '@next/swc-darwin-arm64@14.2.3': optional: true - '@next/swc-darwin-arm64@15.2.4': - optional: true - '@next/swc-darwin-arm64@15.3.1': optional: true '@next/swc-darwin-x64@14.2.3': optional: true - '@next/swc-darwin-x64@15.2.4': - optional: true - '@next/swc-darwin-x64@15.3.1': optional: true '@next/swc-linux-arm64-gnu@14.2.3': optional: true - '@next/swc-linux-arm64-gnu@15.2.4': - optional: true - '@next/swc-linux-arm64-gnu@15.3.1': optional: true '@next/swc-linux-arm64-musl@14.2.3': optional: true - '@next/swc-linux-arm64-musl@15.2.4': - optional: true - '@next/swc-linux-arm64-musl@15.3.1': optional: true '@next/swc-linux-x64-gnu@14.2.3': optional: true - '@next/swc-linux-x64-gnu@15.2.4': - optional: true - '@next/swc-linux-x64-gnu@15.3.1': optional: true '@next/swc-linux-x64-musl@14.2.3': optional: true - '@next/swc-linux-x64-musl@15.2.4': - optional: true - '@next/swc-linux-x64-musl@15.3.1': optional: true '@next/swc-win32-arm64-msvc@14.2.3': optional: true - '@next/swc-win32-arm64-msvc@15.2.4': - optional: true - '@next/swc-win32-arm64-msvc@15.3.1': optional: true @@ -9623,9 +9528,6 @@ snapshots: '@next/swc-win32-x64-msvc@14.2.3': optional: true - '@next/swc-win32-x64-msvc@15.2.4': - optional: true - '@next/swc-win32-x64-msvc@15.3.1': optional: true @@ -14239,31 +14141,6 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.2.4(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@next/env': 15.2.4 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001690 - postcss: 8.4.31 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.4 - '@next/swc-darwin-x64': 15.2.4 - '@next/swc-linux-arm64-gnu': 15.2.4 - '@next/swc-linux-arm64-musl': 15.2.4 - '@next/swc-linux-x64-gnu': 15.2.4 - '@next/swc-linux-x64-musl': 15.2.4 - '@next/swc-win32-arm64-msvc': 15.2.4 - '@next/swc-win32-x64-msvc': 15.2.4 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - next@15.3.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@next/env': 15.3.1 From e42c26764ad3c6fbebc3604bc7f9c627686a9827 Mon Sep 17 00:00:00 2001 From: gabriel miranda Date: Thu, 1 May 2025 14:29:48 -0300 Subject: [PATCH 09/12] chore(react-email): Remove debugging log --- packages/react-email/src/cli/commands/export.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-email/src/cli/commands/export.ts b/packages/react-email/src/cli/commands/export.ts index 4a8455e755..442c4ee0e1 100644 --- a/packages/react-email/src/cli/commands/export.ts +++ b/packages/react-email/src/cli/commands/export.ts @@ -130,7 +130,6 @@ export const exportTemplates = async ( ) => Promise; reactEmailCreateReactElement: typeof React.createElement; }; - console.log(emailModule); const rendered = await emailModule.render( emailModule.reactEmailCreateReactElement(emailModule.default, {}), options, From dcb8164f0b6509207155021b9beefae6664f5c94 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 14:31:17 -0300 Subject: [PATCH 10/12] chore(root): Version packages (#2208) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/hip-items-create.md | 5 ----- .changeset/honest-paws-wash.md | 5 ----- packages/react-email/CHANGELOG.md | 7 +++++++ packages/react-email/package.json | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 .changeset/hip-items-create.md delete mode 100644 .changeset/honest-paws-wash.md diff --git a/.changeset/hip-items-create.md b/.changeset/hip-items-create.md deleted file mode 100644 index 739f71b37f..0000000000 --- a/.changeset/hip-items-create.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-email": patch ---- - -fix improper `require` in `email export` diff --git a/.changeset/honest-paws-wash.md b/.changeset/honest-paws-wash.md deleted file mode 100644 index e5b2f41bf8..0000000000 --- a/.changeset/honest-paws-wash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-email": patch ---- - -update next to 15.3.1 diff --git a/packages/react-email/CHANGELOG.md b/packages/react-email/CHANGELOG.md index c9e524d210..f8dc3d7fe9 100644 --- a/packages/react-email/CHANGELOG.md +++ b/packages/react-email/CHANGELOG.md @@ -1,5 +1,12 @@ # react-email +## 4.0.11 + +### Patch Changes + +- 1a17219: fix improper `require` in `email export` +- 45ab698: update next to 15.3.1 + ## 4.0.10 ### Patch Changes diff --git a/packages/react-email/package.json b/packages/react-email/package.json index 9e9c0a68a6..7997cd4af5 100644 --- a/packages/react-email/package.json +++ b/packages/react-email/package.json @@ -1,6 +1,6 @@ { "name": "react-email", - "version": "4.0.10", + "version": "4.0.11", "description": "A live preview of your emails right in your browser.", "bin": { "email": "./dist/cli/index.mjs" From 6cd353b238cda344f83329ea9ef88c283c22d616 Mon Sep 17 00:00:00 2001 From: Gabriel Miranda Date: Fri, 2 May 2025 10:09:32 -0300 Subject: [PATCH 11/12] fix(text): User's style not having priority (#2211) --- .changeset/curly-cameras-ask.md | 5 +++++ packages/text/src/text.spec.tsx | 6 ++++++ packages/text/src/text.tsx | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/curly-cameras-ask.md diff --git a/.changeset/curly-cameras-ask.md b/.changeset/curly-cameras-ask.md new file mode 100644 index 0000000000..18736223dc --- /dev/null +++ b/.changeset/curly-cameras-ask.md @@ -0,0 +1,5 @@ +--- +"@react-email/text": patch +--- + +give priority to the user's style diff --git a/packages/text/src/text.spec.tsx b/packages/text/src/text.spec.tsx index 242f339c90..c97ad7b388 100644 --- a/packages/text/src/text.spec.tsx +++ b/packages/text/src/text.spec.tsx @@ -8,6 +8,12 @@ describe(' component', () => { expect(html).toContain(testMessage); }); + it("gives priority to the user's style", async () => { + const style = { marginTop: '0px' }; + const html = await render(); + expect(html).toContain('margin-top:0px'); + }); + it('passes style and other props correctly', async () => { const style = { fontSize: '16px' }; const html = await render( diff --git a/packages/text/src/text.tsx b/packages/text/src/text.tsx index f89145a1a0..a4639a1d98 100644 --- a/packages/text/src/text.tsx +++ b/packages/text/src/text.tsx @@ -5,13 +5,14 @@ export type TextProps = Readonly>; export const Text = React.forwardRef( ({ style, ...props }, ref) => { - const modifiedStyle = { ...style }; + let modifiedStyle: React.CSSProperties = {}; if (modifiedStyle.marginBottom === undefined) { modifiedStyle.marginBottom = '16px'; } if (modifiedStyle.marginTop === undefined) { modifiedStyle.marginTop = '16px'; } + modifiedStyle = { ...modifiedStyle, ...style }; const margins = computeMargins(modifiedStyle); return ( From f20a4922f7fdc38a3ed77b09aecd8c8e4230168c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 10:19:19 -0300 Subject: [PATCH 12/12] chore(root): Version packages (#2212) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/curly-cameras-ask.md | 5 ----- packages/components/CHANGELOG.md | 7 +++++++ packages/components/package.json | 4 ++-- packages/text/CHANGELOG.md | 6 ++++++ packages/text/package.json | 2 +- pnpm-lock.yaml | 2 +- 6 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 .changeset/curly-cameras-ask.md diff --git a/.changeset/curly-cameras-ask.md b/.changeset/curly-cameras-ask.md deleted file mode 100644 index 18736223dc..0000000000 --- a/.changeset/curly-cameras-ask.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-email/text": patch ---- - -give priority to the user's style diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 7052b90d2a..5e76e542b5 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,12 @@ # @react-email/components +## 0.0.38 + +### Patch Changes + +- Updated dependencies [6cd353b] + - @react-email/text@0.1.3 + ## 0.0.37 ### Patch Changes diff --git a/packages/components/package.json b/packages/components/package.json index 62ab2bc1cb..44b217e7b5 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@react-email/components", - "version": "0.0.37", + "version": "0.0.38", "description": "A collection of all components React Email.", "sideEffects": false, "main": "./dist/index.js", @@ -59,7 +59,7 @@ "@react-email/row": "workspace:0.0.12", "@react-email/section": "workspace:0.0.16", "@react-email/tailwind": "workspace:1.0.5", - "@react-email/text": "workspace:0.1.2" + "@react-email/text": "workspace:0.1.3" }, "peerDependencies": { "react": "^18.0 || ^19.0 || ^19.0.0-rc" diff --git a/packages/text/CHANGELOG.md b/packages/text/CHANGELOG.md index 59e2a0459e..8aea0ff2dd 100644 --- a/packages/text/CHANGELOG.md +++ b/packages/text/CHANGELOG.md @@ -1,5 +1,11 @@ # @react-email/text +## 0.1.3 + +### Patch Changes + +- 6cd353b: give priority to the user's style + ## 0.1.2 ### Patch Changes diff --git a/packages/text/package.json b/packages/text/package.json index d6c6c8f521..a3525f826f 100644 --- a/packages/text/package.json +++ b/packages/text/package.json @@ -1,6 +1,6 @@ { "name": "@react-email/text", - "version": "0.1.2", + "version": "0.1.3", "description": "A block of text separated by blank spaces", "sideEffects": false, "main": "./dist/index.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b01f2d0cf0..ec5c103a2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -408,7 +408,7 @@ importers: specifier: workspace:1.0.5 version: link:../tailwind '@react-email/text': - specifier: workspace:0.1.2 + specifier: workspace:0.1.3 version: link:../text react: specifier: ^19.0.0