react-email 3.0.3-canary.0 → 3.0.3-canary.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cli/index.js +52 -29
- package/dist/cli/index.mjs +41 -31
- package/dist/preview/.next/BUILD_ID +1 -1
- package/dist/preview/.next/app-build-manifest.json +31 -31
- package/dist/preview/.next/build-manifest.json +15 -14
- package/dist/preview/.next/cache/.rscinfo +1 -0
- package/dist/preview/.next/cache/eslint/.cache_3mtju8 +1 -0
- package/dist/preview/.next/cache/webpack/client-production/0.pack +0 -0
- package/dist/preview/.next/cache/webpack/client-production/index.pack +0 -0
- package/dist/preview/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/dist/preview/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/dist/preview/.next/cache/webpack/server-production/0.pack +0 -0
- package/dist/preview/.next/cache/webpack/server-production/index.pack +0 -0
- package/dist/preview/.next/diagnostics/build-diagnostics.json +6 -0
- package/dist/preview/.next/diagnostics/framework.json +1 -0
- package/dist/preview/.next/images-manifest.json +1 -1
- package/dist/preview/.next/next-minimal-server.js.nft.json +1 -1
- package/dist/preview/.next/next-server.js.nft.json +1 -1
- package/dist/preview/.next/prerender-manifest.json +1 -1
- package/dist/preview/.next/required-server-files.json +1 -1
- package/dist/preview/.next/routes-manifest.json +1 -1
- package/dist/preview/.next/server/app/_not-found/page.js +1 -1
- package/dist/preview/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/preview/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/preview/.next/server/app/favicon.ico/route.js +1 -12
- package/dist/preview/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/dist/preview/.next/server/app/page.js +1 -1
- package/dist/preview/.next/server/app/page.js.nft.json +1 -1
- package/dist/preview/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/preview/.next/server/app/preview/[...slug]/page.js +6 -6
- package/dist/preview/.next/server/app/preview/[...slug]/page.js.nft.json +1 -1
- package/dist/preview/.next/server/app/preview/[...slug]/page_client-reference-manifest.js +1 -1
- package/dist/preview/.next/server/chunks/183.js +5 -0
- package/dist/preview/.next/server/chunks/194.js +10 -0
- package/dist/preview/.next/server/chunks/457.js +13 -0
- package/dist/preview/.next/server/chunks/5.js +4 -0
- package/dist/preview/.next/server/chunks/527.js +7 -0
- package/dist/preview/.next/server/chunks/536.js +1 -0
- package/dist/preview/.next/server/chunks/607.js +6 -0
- package/dist/preview/.next/server/functions-config-manifest.json +1 -1
- package/dist/preview/.next/server/middleware-build-manifest.js +1 -1
- package/dist/preview/.next/server/next-font-manifest.js +1 -1
- package/dist/preview/.next/server/next-font-manifest.json +1 -1
- package/dist/preview/.next/server/pages/500.html +1 -1
- package/dist/preview/.next/server/pages/_app.js +1 -1
- package/dist/preview/.next/server/pages/_app.js.nft.json +1 -1
- package/dist/preview/.next/server/pages/_document.js +1 -1
- package/dist/preview/.next/server/pages/_document.js.nft.json +1 -1
- package/dist/preview/.next/server/pages/_error.js +1 -1
- package/dist/preview/.next/server/pages/_error.js.nft.json +1 -1
- package/dist/preview/.next/server/server-reference-manifest.js +1 -1
- package/dist/preview/.next/server/server-reference-manifest.json +1 -1
- package/dist/preview/.next/server/webpack-runtime.js +1 -1
- package/dist/preview/.next/static/chunks/222-d83d1ce861584126.js +1 -0
- package/dist/preview/.next/static/chunks/348-7e5081ec7ec2a57e.js +1 -0
- package/dist/preview/.next/static/chunks/407-7fdb35e6c94d0003.js +9 -0
- package/dist/preview/.next/static/chunks/6ff14a1c-6b0c36f3714add95.js +1 -0
- package/dist/preview/.next/static/chunks/778-e4bb61810ad70376.js +1 -0
- package/dist/preview/.next/static/chunks/865-ebaeee2a1cbbdfe3.js +2 -0
- package/dist/preview/.next/static/chunks/app/_not-found/page-9f09a1976f9ac24d.js +1 -0
- package/dist/preview/.next/static/chunks/app/layout-64b19f80c1a14ffa.js +1 -0
- package/dist/preview/.next/static/chunks/app/page-83a11eaeeb3b2cd8.js +1 -0
- package/dist/preview/.next/static/chunks/app/preview/[...slug]/page-37cf85d60193e3c8.js +1 -0
- package/dist/preview/.next/static/chunks/framework-b6b5bdf722e87661.js +1 -0
- package/dist/preview/.next/static/chunks/main-app-6f290117bcc6218f.js +1 -0
- package/dist/preview/.next/static/chunks/main-b1fba789b633e4c2.js +1 -0
- package/dist/preview/.next/static/chunks/pages/_app-32876247a89ccc56.js +1 -0
- package/dist/preview/.next/static/chunks/pages/_error-83c1246d6b33e504.js +1 -0
- package/dist/preview/.next/static/chunks/webpack-7e0752f036608d72.js +1 -0
- package/dist/preview/.next/static/css/eecb5c96aca6bd9e.css +1 -0
- package/dist/preview/.next/static/k_UwO-UPiYO7d-_2HfftA/_buildManifest.js +1 -0
- package/dist/preview/.next/trace +21 -52
- package/dist/preview/.next/types/app/layout.ts +11 -6
- package/dist/preview/.next/types/app/preview/[...slug]/page.ts +11 -6
- package/dist/preview/.next/types/cache-life.d.ts +139 -0
- package/package.json +2 -2
- package/src/actions/render-email-by-path.tsx +6 -3
- package/src/utils/register-spinner-autostopping.ts +28 -0
- package/dist/preview/.next/cache/eslint/.cache_117y9un +0 -1
- package/dist/preview/.next/server/chunks/29.js +0 -10
- package/dist/preview/.next/server/chunks/6.js +0 -1
- package/dist/preview/.next/server/chunks/702.js +0 -7
- package/dist/preview/.next/server/chunks/765.js +0 -6
- package/dist/preview/.next/server/chunks/845.js +0 -2
- package/dist/preview/.next/server/chunks/95.js +0 -4
- package/dist/preview/.next/server/chunks/979.js +0 -4
- package/dist/preview/.next/server/chunks/font-manifest.json +0 -1
- package/dist/preview/.next/server/font-manifest.json +0 -1
- package/dist/preview/.next/static/chunks/124-ae7f66e23ad37cb6.js +0 -1
- package/dist/preview/.next/static/chunks/246-aeae0d42438095fa.js +0 -1
- package/dist/preview/.next/static/chunks/271-465a8f7fa0f088b0.js +0 -1
- package/dist/preview/.next/static/chunks/814-1930a70da275907a.js +0 -9
- package/dist/preview/.next/static/chunks/816-025a1ae3d98f8bbc.js +0 -2
- package/dist/preview/.next/static/chunks/9e70e2c9-cf735c555aae829e.js +0 -1
- package/dist/preview/.next/static/chunks/app/_not-found/page-f013323e54e30eb4.js +0 -1
- package/dist/preview/.next/static/chunks/app/layout-6a058829ca2e1648.js +0 -1
- package/dist/preview/.next/static/chunks/app/page-bfde41be5bed6456.js +0 -1
- package/dist/preview/.next/static/chunks/app/preview/[...slug]/page-970a94d529b78bd7.js +0 -1
- package/dist/preview/.next/static/chunks/framework-bef83a85c94ff7de.js +0 -1
- package/dist/preview/.next/static/chunks/main-3b591628bc46f6ef.js +0 -1
- package/dist/preview/.next/static/chunks/main-app-f5afc98786b35330.js +0 -1
- package/dist/preview/.next/static/chunks/pages/_app-88c2f98e605e9ac8.js +0 -1
- package/dist/preview/.next/static/chunks/pages/_error-2c30ce48edcc8dfe.js +0 -1
- package/dist/preview/.next/static/chunks/webpack-787bdf42b5977b69.js +0 -1
- package/dist/preview/.next/static/css/0a13d10225a26b9d.css +0 -1
- package/dist/preview/.next/static/s_pExEZPmuoM9TOY986_0/_buildManifest.js +0 -1
- package/src/utils/close-ora-on-sigint.ts +0 -15
- /package/dist/preview/.next/static/{s_pExEZPmuoM9TOY986_0 → k_UwO-UPiYO7d-_2HfftA}/_ssgManifest.js +0 -0
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
// File: /home/gabriel/Projects/
|
|
1
|
+
// File: /home/gabriel/Projects/react-email/packages/react-email/src/app/layout.tsx
|
|
2
2
|
import * as entry from '../../../src/app/layout.js'
|
|
3
3
|
import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
|
|
4
4
|
|
|
5
5
|
type TEntry = typeof import('../../../src/app/layout.js')
|
|
6
6
|
|
|
7
|
+
type SegmentParams<T extends Object = any> = T extends Record<string, any>
|
|
8
|
+
? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
|
|
9
|
+
: T
|
|
10
|
+
|
|
7
11
|
// Check that the entry is a valid entry
|
|
8
12
|
checkFields<Diff<{
|
|
9
13
|
default: Function
|
|
@@ -21,9 +25,11 @@ checkFields<Diff<{
|
|
|
21
25
|
generateMetadata?: Function
|
|
22
26
|
viewport?: any
|
|
23
27
|
generateViewport?: Function
|
|
28
|
+
experimental_ppr?: boolean
|
|
24
29
|
|
|
25
30
|
}, TEntry, ''>>()
|
|
26
31
|
|
|
32
|
+
|
|
27
33
|
// Check the prop type of the entry function
|
|
28
34
|
checkFields<Diff<LayoutProps, FirstArg<TEntry['default']>, 'default'>>()
|
|
29
35
|
|
|
@@ -41,19 +47,18 @@ if ('generateViewport' in entry) {
|
|
|
41
47
|
|
|
42
48
|
// Check the arguments and return type of the generateStaticParams function
|
|
43
49
|
if ('generateStaticParams' in entry) {
|
|
44
|
-
checkFields<Diff<{ params:
|
|
50
|
+
checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
|
|
45
51
|
checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
type PageParams = any
|
|
49
54
|
export interface PageProps {
|
|
50
|
-
params?:
|
|
51
|
-
searchParams?: any
|
|
55
|
+
params?: Promise<SegmentParams>
|
|
56
|
+
searchParams?: Promise<any>
|
|
52
57
|
}
|
|
53
58
|
export interface LayoutProps {
|
|
54
59
|
children?: React.ReactNode
|
|
55
60
|
|
|
56
|
-
params?:
|
|
61
|
+
params?: Promise<SegmentParams>
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
// =============
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
// File: /home/gabriel/Projects/
|
|
1
|
+
// File: /home/gabriel/Projects/react-email/packages/react-email/src/app/preview/[...slug]/page.tsx
|
|
2
2
|
import * as entry from '../../../../../src/app/preview/[...slug]/page.js'
|
|
3
3
|
import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
|
|
4
4
|
|
|
5
5
|
type TEntry = typeof import('../../../../../src/app/preview/[...slug]/page.js')
|
|
6
6
|
|
|
7
|
+
type SegmentParams<T extends Object = any> = T extends Record<string, any>
|
|
8
|
+
? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
|
|
9
|
+
: T
|
|
10
|
+
|
|
7
11
|
// Check that the entry is a valid entry
|
|
8
12
|
checkFields<Diff<{
|
|
9
13
|
default: Function
|
|
@@ -21,9 +25,11 @@ checkFields<Diff<{
|
|
|
21
25
|
generateMetadata?: Function
|
|
22
26
|
viewport?: any
|
|
23
27
|
generateViewport?: Function
|
|
28
|
+
experimental_ppr?: boolean
|
|
24
29
|
|
|
25
30
|
}, TEntry, ''>>()
|
|
26
31
|
|
|
32
|
+
|
|
27
33
|
// Check the prop type of the entry function
|
|
28
34
|
checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>()
|
|
29
35
|
|
|
@@ -41,19 +47,18 @@ if ('generateViewport' in entry) {
|
|
|
41
47
|
|
|
42
48
|
// Check the arguments and return type of the generateStaticParams function
|
|
43
49
|
if ('generateStaticParams' in entry) {
|
|
44
|
-
checkFields<Diff<{ params:
|
|
50
|
+
checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
|
|
45
51
|
checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
type PageParams = any
|
|
49
54
|
export interface PageProps {
|
|
50
|
-
params?:
|
|
51
|
-
searchParams?: any
|
|
55
|
+
params?: Promise<SegmentParams>
|
|
56
|
+
searchParams?: Promise<any>
|
|
52
57
|
}
|
|
53
58
|
export interface LayoutProps {
|
|
54
59
|
children?: React.ReactNode
|
|
55
60
|
|
|
56
|
-
params?:
|
|
61
|
+
params?: Promise<SegmentParams>
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
// =============
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Type definitions for Next.js cacheLife configs
|
|
2
|
+
|
|
3
|
+
declare module 'next/cache' {
|
|
4
|
+
export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache'
|
|
5
|
+
export {
|
|
6
|
+
revalidateTag,
|
|
7
|
+
revalidatePath,
|
|
8
|
+
} from 'next/dist/server/web/spec-extension/revalidate'
|
|
9
|
+
export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Cache this `"use cache"` for a timespan defined by the `"default"` profile.
|
|
14
|
+
* ```
|
|
15
|
+
* stale: 300 seconds (5 minutes)
|
|
16
|
+
* revalidate: 900 seconds (15 minutes)
|
|
17
|
+
* expire: never
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
21
|
+
* If the server receives a new request after 15 minutes, start revalidating new values in the background.
|
|
22
|
+
* It lives for the maximum age of the server cache. If this entry has no traffic for a while, it may serve an old value the next request.
|
|
23
|
+
*/
|
|
24
|
+
export function unstable_cacheLife(profile: "default"): void
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Cache this `"use cache"` for a timespan defined by the `"seconds"` profile.
|
|
28
|
+
* ```
|
|
29
|
+
* stale: 0 seconds
|
|
30
|
+
* revalidate: 1 seconds
|
|
31
|
+
* expire: 60 seconds (1 minute)
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* This cache may be stale on clients for 0 seconds before checking with the server.
|
|
35
|
+
* If the server receives a new request after 1 seconds, start revalidating new values in the background.
|
|
36
|
+
* If this entry has no traffic for 1 minute it will expire. The next request will recompute it.
|
|
37
|
+
*/
|
|
38
|
+
export function unstable_cacheLife(profile: "seconds"): void
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Cache this `"use cache"` for a timespan defined by the `"minutes"` profile.
|
|
42
|
+
* ```
|
|
43
|
+
* stale: 300 seconds (5 minutes)
|
|
44
|
+
* revalidate: 60 seconds (1 minute)
|
|
45
|
+
* expire: 3600 seconds (1 hour)
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
49
|
+
* If the server receives a new request after 1 minute, start revalidating new values in the background.
|
|
50
|
+
* If this entry has no traffic for 1 hour it will expire. The next request will recompute it.
|
|
51
|
+
*/
|
|
52
|
+
export function unstable_cacheLife(profile: "minutes"): void
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Cache this `"use cache"` for a timespan defined by the `"hours"` profile.
|
|
56
|
+
* ```
|
|
57
|
+
* stale: 300 seconds (5 minutes)
|
|
58
|
+
* revalidate: 3600 seconds (1 hour)
|
|
59
|
+
* expire: 86400 seconds (1 day)
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
63
|
+
* If the server receives a new request after 1 hour, start revalidating new values in the background.
|
|
64
|
+
* If this entry has no traffic for 1 day it will expire. The next request will recompute it.
|
|
65
|
+
*/
|
|
66
|
+
export function unstable_cacheLife(profile: "hours"): void
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Cache this `"use cache"` for a timespan defined by the `"days"` profile.
|
|
70
|
+
* ```
|
|
71
|
+
* stale: 300 seconds (5 minutes)
|
|
72
|
+
* revalidate: 86400 seconds (1 day)
|
|
73
|
+
* expire: 604800 seconds (1 week)
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
77
|
+
* If the server receives a new request after 1 day, start revalidating new values in the background.
|
|
78
|
+
* If this entry has no traffic for 1 week it will expire. The next request will recompute it.
|
|
79
|
+
*/
|
|
80
|
+
export function unstable_cacheLife(profile: "days"): void
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Cache this `"use cache"` for a timespan defined by the `"weeks"` profile.
|
|
84
|
+
* ```
|
|
85
|
+
* stale: 300 seconds (5 minutes)
|
|
86
|
+
* revalidate: 604800 seconds (1 week)
|
|
87
|
+
* expire: 2592000 seconds (30 days)
|
|
88
|
+
* ```
|
|
89
|
+
*
|
|
90
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
91
|
+
* If the server receives a new request after 1 week, start revalidating new values in the background.
|
|
92
|
+
* If this entry has no traffic for 30 days it will expire. The next request will recompute it.
|
|
93
|
+
*/
|
|
94
|
+
export function unstable_cacheLife(profile: "weeks"): void
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Cache this `"use cache"` for a timespan defined by the `"max"` profile.
|
|
98
|
+
* ```
|
|
99
|
+
* stale: 300 seconds (5 minutes)
|
|
100
|
+
* revalidate: 2592000 seconds (30 days)
|
|
101
|
+
* expire: never
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
105
|
+
* If the server receives a new request after 30 days, start revalidating new values in the background.
|
|
106
|
+
* It lives for the maximum age of the server cache. If this entry has no traffic for a while, it may serve an old value the next request.
|
|
107
|
+
*/
|
|
108
|
+
export function unstable_cacheLife(profile: "max"): void
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Cache this `"use cache"` using a custom timespan.
|
|
112
|
+
* ```
|
|
113
|
+
* stale: ... // seconds
|
|
114
|
+
* revalidate: ... // seconds
|
|
115
|
+
* expire: ... // seconds
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* This is similar to Cache-Control: max-age=`stale`,s-max-age=`revalidate`,stale-while-revalidate=`expire-revalidate`
|
|
119
|
+
*
|
|
120
|
+
* If a value is left out, the lowest of other cacheLife() calls or the default, is used instead.
|
|
121
|
+
*/
|
|
122
|
+
export function unstable_cacheLife(profile: {
|
|
123
|
+
/**
|
|
124
|
+
* This cache may be stale on clients for ... seconds before checking with the server.
|
|
125
|
+
*/
|
|
126
|
+
stale?: number,
|
|
127
|
+
/**
|
|
128
|
+
* If the server receives a new request after ... seconds, start revalidating new values in the background.
|
|
129
|
+
*/
|
|
130
|
+
revalidate?: number,
|
|
131
|
+
/**
|
|
132
|
+
* If this entry has no traffic for ... seconds it will expire. The next request will recompute it.
|
|
133
|
+
*/
|
|
134
|
+
expire?: number
|
|
135
|
+
}): void
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
export { cacheTag as unstable_cacheTag } from 'next/dist/server/use-cache/cache-tag'
|
|
139
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-email",
|
|
3
|
-
"version": "3.0.3-canary.
|
|
3
|
+
"version": "3.0.3-canary.2",
|
|
4
4
|
"description": "A live preview of your emails right in your browser.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"email": "./dist/cli/index.js"
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"tsx": "4.9.0",
|
|
73
73
|
"typescript": "5.1.6",
|
|
74
74
|
"vitest": "1.1.3",
|
|
75
|
-
"@react-email/render": "1.0.3-canary.
|
|
75
|
+
"@react-email/render": "1.0.3-canary.3"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
78
78
|
"build": "tsup-node && node build-preview-server.mjs",
|
|
@@ -7,7 +7,7 @@ import chalk from 'chalk';
|
|
|
7
7
|
import { getEmailComponent } from '../utils/get-email-component';
|
|
8
8
|
import type { ErrorObject } from '../utils/types/error-object';
|
|
9
9
|
import { improveErrorWithSourceMap } from '../utils/improve-error-with-sourcemap';
|
|
10
|
-
import {
|
|
10
|
+
import { registerSpinnerAutostopping } from '../utils/register-spinner-autostopping';
|
|
11
11
|
|
|
12
12
|
export interface RenderedEmailMetadata {
|
|
13
13
|
markup: string;
|
|
@@ -33,7 +33,7 @@ export const renderEmailByPath = async (
|
|
|
33
33
|
text: `Rendering email template ${emailFilename}\n`,
|
|
34
34
|
prefixText: ' ',
|
|
35
35
|
}).start();
|
|
36
|
-
|
|
36
|
+
registerSpinnerAutostopping(spinner);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
const result = await getEmailComponent(emailPath);
|
|
@@ -83,7 +83,10 @@ export const renderEmailByPath = async (
|
|
|
83
83
|
});
|
|
84
84
|
|
|
85
85
|
return {
|
|
86
|
-
|
|
86
|
+
// This ensures that no null byte character ends up in the rendered
|
|
87
|
+
// markup making users suspect of any issues. These null byte characters
|
|
88
|
+
// only seem to happen with React 18, as it has no similar incident with React 19.
|
|
89
|
+
markup: markup.replaceAll('\0', ''),
|
|
87
90
|
plainText,
|
|
88
91
|
reactMarkup,
|
|
89
92
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import logSymbols from 'log-symbols';
|
|
2
|
+
import type { Ora } from 'ora';
|
|
3
|
+
|
|
4
|
+
const spinners = new Set<Ora>();
|
|
5
|
+
|
|
6
|
+
process.on('SIGINT', () => {
|
|
7
|
+
spinners.forEach((spinner) => {
|
|
8
|
+
if (spinner.isSpinning) {
|
|
9
|
+
spinner.stop();
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
process.on('exit', (code) => {
|
|
15
|
+
if (code !== 0) {
|
|
16
|
+
spinners.forEach((spinner) => {
|
|
17
|
+
if (spinner.isSpinning) {
|
|
18
|
+
spinner.stopAndPersist({
|
|
19
|
+
symbol: logSymbols.error,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export const registerSpinnerAutostopping = (spinner: Ora) => {
|
|
27
|
+
spinners.add(spinner);
|
|
28
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[{"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/get-email-path-from-slug.ts":"1","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/get-emails-directory-metadata.spec.ts":"2","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/get-emails-directory-metadata.ts":"3","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/render-email-by-path.tsx":"4","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/inter.ts":"5","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/layout.tsx":"6","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/page.tsx":"7","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/preview/[...slug]/page.tsx":"8","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/preview/[...slug]/preview.tsx":"9","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/preview/[...slug]/rendering-error.tsx":"10","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/button.tsx":"11","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/code-container.tsx":"12","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/code.tsx":"13","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/heading.tsx":"14","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-arrow-down.tsx":"15","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-base.tsx":"16","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-button.tsx":"17","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-check.tsx":"18","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-clipboard.tsx":"19","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-download.tsx":"20","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-file.tsx":"21","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-folder-open.tsx":"22","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-folder.tsx":"23","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-hide-sidebar.tsx":"24","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-monitor.tsx":"25","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-phone.tsx":"26","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-source.tsx":"27","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/index.ts":"28","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/logo.tsx":"29","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/send.tsx":"30","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/shell.tsx":"31","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/index.ts":"32","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/sidebar-directory-children.tsx":"33","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/sidebar-directory.tsx":"34","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/sidebar.tsx":"35","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/text.tsx":"36","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/tooltip-content.tsx":"37","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/tooltip.tsx":"38","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/topbar.tsx":"39","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/contexts/emails.tsx":"40","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/hooks/use-hot-reload.ts":"41","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/hooks/use-rendering-metadata.ts":"42","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/close-ora-on-sigint.ts":"43","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/cn.ts":"44","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/constants.ts":"45","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/copy-text-to-clipboard.ts":"46","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/emails-directory-absolute-path.ts":"47","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/esbuild/escape-string-for-regex.ts":"48","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/esbuild/renderring-utilities-exporter.ts":"49","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/get-email-component.spec.ts":"50","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/get-email-component.ts":"51","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/improve-error-with-sourcemap.ts":"52","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/index.ts":"53","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/language-map.ts":"54","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/static-node-modules-for-vm.ts":"55","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/testing/request-response-email.tsx":"56","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/as.ts":"57","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/email-template.ts":"58","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/error-object.ts":"59","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/hot-reload-change.ts":"60","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/hot-reload-event.ts":"61","/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/unreachable.ts":"62"},{"size":1157,"mtime":1729618451507,"results":"63","hashOfConfig":"64"},{"size":2553,"mtime":1729618451507,"results":"65","hashOfConfig":"64"},{"size":3413,"mtime":1729618451507,"results":"66","hashOfConfig":"64"},{"size":2828,"mtime":1729618451507,"results":"67","hashOfConfig":"64"},{"size":145,"mtime":1728572768691,"results":"68","hashOfConfig":"64"},{"size":1076,"mtime":1729618451507,"results":"69","hashOfConfig":"64"},{"size":1588,"mtime":1728572768698,"results":"70","hashOfConfig":"64"},{"size":2349,"mtime":1729618451507,"results":"71","hashOfConfig":"64"},{"size":4626,"mtime":1730819595800,"results":"72","hashOfConfig":"64"},{"size":1698,"mtime":1729618451507,"results":"73","hashOfConfig":"64"},{"size":2220,"mtime":1728572768794,"results":"74","hashOfConfig":"64"},{"size":4619,"mtime":1728572768798,"results":"75","hashOfConfig":"64"},{"size":3184,"mtime":1728572768801,"results":"76","hashOfConfig":"64"},{"size":2418,"mtime":1728572768804,"results":"77","hashOfConfig":"64"},{"size":486,"mtime":1728572768751,"results":"78","hashOfConfig":"64"},{"size":564,"mtime":1728572768751,"results":"79","hashOfConfig":"64"},{"size":631,"mtime":1728572768754,"results":"80","hashOfConfig":"64"},{"size":538,"mtime":1728572768758,"results":"81","hashOfConfig":"64"},{"size":1336,"mtime":1728572768761,"results":"82","hashOfConfig":"64"},{"size":607,"mtime":1728572768764,"results":"83","hashOfConfig":"64"},{"size":909,"mtime":1728572768764,"results":"84","hashOfConfig":"64"},{"size":1437,"mtime":1728572768768,"results":"85","hashOfConfig":"64"},{"size":950,"mtime":1728572768771,"results":"86","hashOfConfig":"64"},{"size":1240,"mtime":1728572768774,"results":"87","hashOfConfig":"64"},{"size":775,"mtime":1728572768778,"results":"88","hashOfConfig":"64"},{"size":857,"mtime":1728572768778,"results":"89","hashOfConfig":"64"},{"size":569,"mtime":1728572768781,"results":"90","hashOfConfig":"64"},{"size":178,"mtime":1728572768804,"results":"91","hashOfConfig":"64"},{"size":11813,"mtime":1728572768808,"results":"92","hashOfConfig":"64"},{"size":4736,"mtime":1728572768811,"results":"93","hashOfConfig":"64"},{"size":3837,"mtime":1730819595800,"results":"94","hashOfConfig":"64"},{"size":27,"mtime":1728572768784,"results":"95","hashOfConfig":"64"},{"size":5308,"mtime":1729618451507,"results":"96","hashOfConfig":"64"},{"size":2912,"mtime":1729618451507,"results":"97","hashOfConfig":"64"},{"size":1309,"mtime":1728572768791,"results":"98","hashOfConfig":"64"},{"size":2336,"mtime":1728572768818,"results":"99","hashOfConfig":"64"},{"size":943,"mtime":1729618451507,"results":"100","hashOfConfig":"64"},{"size":642,"mtime":1728572768821,"results":"101","hashOfConfig":"64"},{"size":6168,"mtime":1730819595800,"results":"102","hashOfConfig":"64"},{"size":3648,"mtime":1729618451507,"results":"103","hashOfConfig":"64"},{"size":854,"mtime":1729618451507,"results":"104","hashOfConfig":"64"},{"size":1175,"mtime":1729618451507,"results":"105","hashOfConfig":"64"},{"size":279,"mtime":1729618451507,"results":"106","hashOfConfig":"64"},{"size":173,"mtime":1728572768864,"results":"107","hashOfConfig":"64"},{"size":97,"mtime":1728572768868,"results":"108","hashOfConfig":"64"},{"size":176,"mtime":1728572768871,"results":"109","hashOfConfig":"64"},{"size":406,"mtime":1729618451507,"results":"110","hashOfConfig":"64"},{"size":136,"mtime":1729618451507,"results":"111","hashOfConfig":"64"},{"size":2297,"mtime":1729618451507,"results":"112","hashOfConfig":"64"},{"size":1193,"mtime":1730819600213,"results":"113","hashOfConfig":"64"},{"size":4632,"mtime":1730819600213,"results":"114","hashOfConfig":"64"},{"size":2774,"mtime":1729618451511,"results":"115","hashOfConfig":"64"},{"size":155,"mtime":1728572768884,"results":"116","hashOfConfig":"64"},{"size":114,"mtime":1728572768888,"results":"117","hashOfConfig":"64"},{"size":2322,"mtime":1730819600213,"results":"118","hashOfConfig":"64"},{"size":202,"mtime":1730819600213,"results":"119","hashOfConfig":"64"},{"size":630,"mtime":1728572768848,"results":"120","hashOfConfig":"64"},{"size":267,"mtime":1728572768851,"results":"121","hashOfConfig":"64"},{"size":271,"mtime":1728572768851,"results":"122","hashOfConfig":"64"},{"size":141,"mtime":1728572768854,"results":"123","hashOfConfig":"64"},{"size":95,"mtime":1728572768858,"results":"124","hashOfConfig":"64"},{"size":259,"mtime":1728572768894,"results":"125","hashOfConfig":"64"},{"filePath":"126","messages":"127","suppressedMessages":"128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"wnk3yg",{"filePath":"129","messages":"130","suppressedMessages":"131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"132","messages":"133","suppressedMessages":"134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"135","messages":"136","suppressedMessages":"137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"138","messages":"139","suppressedMessages":"140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"141","messages":"142","suppressedMessages":"143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"144","messages":"145","suppressedMessages":"146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"147","messages":"148","suppressedMessages":"149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"150","messages":"151","suppressedMessages":"152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"153","messages":"154","suppressedMessages":"155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"156","messages":"157","suppressedMessages":"158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"159","messages":"160","suppressedMessages":"161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"162","messages":"163","suppressedMessages":"164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"165","messages":"166","suppressedMessages":"167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"168","messages":"169","suppressedMessages":"170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"171","messages":"172","suppressedMessages":"173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"174","messages":"175","suppressedMessages":"176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"177","messages":"178","suppressedMessages":"179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"180","messages":"181","suppressedMessages":"182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"183","messages":"184","suppressedMessages":"185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"186","messages":"187","suppressedMessages":"188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"189","messages":"190","suppressedMessages":"191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"192","messages":"193","suppressedMessages":"194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"195","messages":"196","suppressedMessages":"197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"198","messages":"199","suppressedMessages":"200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"201","messages":"202","suppressedMessages":"203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"204","messages":"205","suppressedMessages":"206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"207","messages":"208","suppressedMessages":"209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"210","messages":"211","suppressedMessages":"212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"213","messages":"214","suppressedMessages":"215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"216","messages":"217","suppressedMessages":"218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"219","messages":"220","suppressedMessages":"221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"222","messages":"223","suppressedMessages":"224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"225","messages":"226","suppressedMessages":"227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"228","messages":"229","suppressedMessages":"230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"231","messages":"232","suppressedMessages":"233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"234","messages":"235","suppressedMessages":"236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"237","messages":"238","suppressedMessages":"239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"240","messages":"241","suppressedMessages":"242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"243","messages":"244","suppressedMessages":"245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"246","messages":"247","suppressedMessages":"248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"249","messages":"250","suppressedMessages":"251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"252","messages":"253","suppressedMessages":"254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","suppressedMessages":"257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"258","messages":"259","suppressedMessages":"260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"261","messages":"262","suppressedMessages":"263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","suppressedMessages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","suppressedMessages":"269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","suppressedMessages":"272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","suppressedMessages":"275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","suppressedMessages":"278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","suppressedMessages":"281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","suppressedMessages":"284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"285","messages":"286","suppressedMessages":"287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","suppressedMessages":"290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"291","messages":"292","suppressedMessages":"293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","suppressedMessages":"296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","suppressedMessages":"299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"300","messages":"301","suppressedMessages":"302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","suppressedMessages":"305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","suppressedMessages":"308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"309","messages":"310","suppressedMessages":"311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/get-email-path-from-slug.ts",[],["312"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/get-emails-directory-metadata.spec.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/get-emails-directory-metadata.ts",[],["313","314"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/actions/render-email-by-path.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/inter.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/layout.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/page.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/preview/[...slug]/page.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/preview/[...slug]/preview.tsx",[],["315"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/app/preview/[...slug]/rendering-error.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/button.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/code-container.tsx",[],["316"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/code.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/heading.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-arrow-down.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-base.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-button.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-check.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-clipboard.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-download.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-file.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-folder-open.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-folder.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-hide-sidebar.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-monitor.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-phone.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/icons/icon-source.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/index.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/logo.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/send.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/shell.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/index.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/sidebar-directory-children.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/sidebar-directory.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/sidebar/sidebar.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/text.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/tooltip-content.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/tooltip.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/components/topbar.tsx",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/contexts/emails.tsx",[],["317","318"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/hooks/use-hot-reload.ts",[],["319"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/hooks/use-rendering-metadata.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/close-ora-on-sigint.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/cn.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/constants.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/copy-text-to-clipboard.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/emails-directory-absolute-path.ts",[],["320","321","322"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/esbuild/escape-string-for-regex.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/esbuild/renderring-utilities-exporter.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/get-email-component.spec.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/get-email-component.ts",[],["323","324","325","326","327","328"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/improve-error-with-sourcemap.ts",[],["329"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/index.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/language-map.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/static-node-modules-for-vm.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/testing/request-response-email.tsx",[],["330","331"],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/as.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/email-template.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/error-object.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/hot-reload-change.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/types/hot-reload-event.ts",[],[],"/home/gabriel/Projects/Resend/react-email.git/primary/packages/react-email/src/utils/unreachable.ts",[],[],{"ruleId":"332","severity":2,"message":"333","line":7,"column":58,"nodeType":"334","messageId":"335","endLine":7,"endColumn":60,"suppressions":"336"},{"ruleId":"337","severity":2,"message":"338","line":47,"column":30,"nodeType":"339","messageId":"340","endLine":47,"endColumn":80,"suppressions":"341"},{"ruleId":"337","severity":2,"message":"338","line":112,"column":20,"nodeType":"339","messageId":"340","endLine":112,"endColumn":72,"suppressions":"342"},{"ruleId":"343","severity":2,"message":"344","line":51,"column":5,"nodeType":"345","endLine":51,"endColumn":17,"suppressions":"346"},{"ruleId":"337","severity":2,"message":"338","line":56,"column":33,"nodeType":"339","messageId":"340","endLine":56,"endColumn":50,"suggestions":"347","suppressions":"348"},{"ruleId":"343","severity":2,"message":"344","line":54,"column":5,"nodeType":"345","endLine":54,"endColumn":17,"suppressions":"349"},{"ruleId":"337","severity":2,"message":"338","line":106,"column":20,"nodeType":"339","messageId":"340","endLine":106,"endColumn":59,"suppressions":"350"},{"ruleId":"351","severity":2,"message":"352","line":12,"column":51,"nodeType":"353","messageId":"354","endLine":12,"endColumn":54,"suggestions":"355","suppressions":"356"},{"ruleId":"337","severity":2,"message":"338","line":3,"column":38,"nodeType":"339","messageId":"340","endLine":3,"endColumn":75,"suppressions":"357"},{"ruleId":"337","severity":2,"message":"338","line":6,"column":36,"nodeType":"339","messageId":"340","endLine":6,"endColumn":70,"suppressions":"358"},{"ruleId":"337","severity":2,"message":"338","line":10,"column":3,"nodeType":"339","messageId":"340","endLine":10,"endColumn":40,"suppressions":"359"},{"ruleId":"337","severity":2,"message":"338","line":60,"column":25,"nodeType":"339","messageId":"340","endLine":60,"endColumn":40,"suppressions":"360"},{"ruleId":"337","severity":2,"message":"338","line":61,"column":28,"nodeType":"339","messageId":"340","endLine":61,"endColumn":43,"suppressions":"361"},{"ruleId":"337","severity":2,"message":"338","line":93,"column":13,"nodeType":"339","messageId":"340","endLine":93,"endColumn":29,"suppressions":"362"},{"ruleId":"363","severity":2,"message":"364","line":98,"column":9,"nodeType":"365","messageId":"366","endLine":98,"endColumn":42,"suppressions":"367"},{"ruleId":"368","severity":2,"message":"369","line":102,"column":14,"nodeType":"370","messageId":"371","endLine":102,"endColumn":43,"suppressions":"372"},{"ruleId":"373","severity":2,"message":"374","line":102,"column":25,"nodeType":"345","messageId":"375","endLine":102,"endColumn":40,"fix":"376","suppressions":"377"},{"ruleId":"378","severity":2,"message":"379","line":52,"column":15,"nodeType":"380","messageId":"381","endLine":52,"endColumn":39,"suppressions":"382"},{"ruleId":"383","severity":2,"message":"384","line":2,"column":7,"nodeType":"345","messageId":"385","endLine":2,"endColumn":10,"suppressions":"386"},{"ruleId":"383","severity":2,"message":"387","line":3,"column":7,"nodeType":"345","messageId":"385","endLine":3,"endColumn":10,"suppressions":"388"},"@typescript-eslint/require-await","Async arrow function 'getEmailPathFromSlug' has no 'await' expression.","ArrowFunctionExpression","missingAwait",["389"],"@typescript-eslint/no-non-null-assertion","Forbidden non-null assertion.","TSNonNullExpression","noNonNull",["390"],["391"],"react-hooks/rules-of-hooks","React Hook \"useHotreload\" is called conditionally. React Hooks must be called in the exact same order in every component render.","Identifier",["392"],["393"],["394"],["395"],["396"],"@typescript-eslint/no-explicit-any","Unexpected any. Specify a different type.","TSAnyKeyword","unexpectedAny",["397","398"],["399"],["400"],["401"],["402"],["403"],["404"],["405"],"@typescript-eslint/no-unsafe-return","Unsafe return of an `any` typed value.","ReturnStatement","unsafeReturn",["406"],"@typescript-eslint/no-var-requires","Require statement not part of import statement.","CallExpression","noVarReqs",["407"],"@typescript-eslint/no-useless-template-literals","Template literal expression is unnecessary and can be simplified.","noUselessTemplateLiteral",{"range":"408","text":"409"},["410"],"@typescript-eslint/no-unnecessary-condition","Unnecessary conditional, expected left-hand side of `??` operator to be possibly null or undefined.","MemberExpression","neverNullish",["411"],"@typescript-eslint/no-unused-vars","'req' is assigned a value but never used. Allowed unused vars must match /^_/u.","unusedVar",["412"],"'res' is assigned a value but never used. Allowed unused vars must match /^_/u.",["413"],{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"messageId":"416","fix":"417","desc":"418"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"messageId":"419","fix":"420","desc":"421"},{"messageId":"422","fix":"423","desc":"424"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},[2935,2955],"specifiedModule",{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},{"kind":"414","justification":"415"},"directive","","suggestOptionalChain",{"range":"425","text":"426"},"Consider using the optional chain operator `?.` instead. This operator includes runtime checks, so it is safer than the compile-only non-null assertion operator.","suggestUnknown",{"range":"427","text":"428"},"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct.","suggestNever",{"range":"429","text":"430"},"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of.",[1779,1780],"?",[452,455],"unknown",[452,455],"never"]
|