mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-01 01:29:31 +08:00
feat(server): improve ci build (#15386)
#### PR Dependency Tree * **PR #15386** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved email rendering and formatting consistency. * Preserved calendar synchronization windows while removing reliance on date utility libraries. * Enhanced cleanup of Prisma engine files, including deduplication and space-saving reporting. * **Tests** * Updated email snapshots to validate formatted HTML output. * **Refactor** * Streamlined email component usage and centralized email rendering behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -64,13 +64,21 @@
|
||||
"@prisma/client": "^6.6.0",
|
||||
"@prisma/instrumentation": "^6.7.0",
|
||||
"@queuedash/api": "^3.16.0",
|
||||
"@react-email/components": "^0.5.7",
|
||||
"@react-email/body": "0.3.0",
|
||||
"@react-email/button": "0.2.1",
|
||||
"@react-email/container": "0.0.16",
|
||||
"@react-email/head": "0.0.13",
|
||||
"@react-email/html": "0.0.12",
|
||||
"@react-email/img": "0.0.12",
|
||||
"@react-email/link": "0.0.13",
|
||||
"@react-email/row": "0.0.13",
|
||||
"@react-email/section": "0.0.17",
|
||||
"@react-email/text": "0.1.6",
|
||||
"@socket.io/redis-adapter": "^8.3.0",
|
||||
"bullmq": "^5.79.0",
|
||||
"commander": "^13.1.0",
|
||||
"cookie-parser": "^1.4.7",
|
||||
"cross-env": "^10.1.0",
|
||||
"date-fns": "^4.4.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"eventemitter2": "^6.4.9",
|
||||
"exa-js": "^2.4.0",
|
||||
@@ -81,7 +89,6 @@
|
||||
"graphql": "^16.13.2",
|
||||
"graphql-scalars": "^1.24.0",
|
||||
"graphql-upload": "^17.0.0",
|
||||
"html-validate": "^9.0.0",
|
||||
"htmlrewriter": "^0.0.12",
|
||||
"http-errors": "^2.0.0",
|
||||
"ioredis": "^5.11.1",
|
||||
@@ -102,7 +109,6 @@
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"rxjs": "^7.8.2",
|
||||
"semver": "^7.7.4",
|
||||
"ses": "^1.15.0",
|
||||
"socket.io": "^4.8.3",
|
||||
"stripe": "^17.7.0",
|
||||
"tldts": "^7.0.19",
|
||||
@@ -119,6 +125,7 @@
|
||||
"@faker-js/faker": "^10.1.0",
|
||||
"@nestjs/swagger": "^11.2.7",
|
||||
"@nestjs/testing": "patch:@nestjs/testing@npm%3A11.1.18#~/.yarn/patches/@nestjs-testing-npm-11.1.18-32c0f6af12.patch",
|
||||
"@react-email/render": "1.4.0",
|
||||
"@types/cookie-parser": "^1.4.8",
|
||||
"@types/express": "^5.0.1",
|
||||
"@types/express-serve-static-core": "^5.0.6",
|
||||
|
||||
@@ -484,7 +484,7 @@ async function prunePrismaQueryEngines(dirPath, keepTarget) {
|
||||
for (const name of entries) {
|
||||
if (
|
||||
name.startsWith('libquery_engine-') &&
|
||||
name.endsWith('.so.node') &&
|
||||
name.endsWith('.node') &&
|
||||
name !== keepName
|
||||
) {
|
||||
await fs.rm(path.join(dirPath, name), { force: true }).catch(() => {});
|
||||
@@ -492,6 +492,55 @@ async function prunePrismaQueryEngines(dirPath, keepTarget) {
|
||||
}
|
||||
}
|
||||
|
||||
async function hardlinkPrismaQueryEngines(appRoot, keepTarget) {
|
||||
const queryEngineName = `libquery_engine-${keepTarget}.so.node`;
|
||||
const paths = [
|
||||
path.join(appRoot, 'node_modules', '.prisma', 'client', queryEngineName),
|
||||
path.join(appRoot, 'node_modules', 'prisma', queryEngineName),
|
||||
path.join(appRoot, 'node_modules', '@prisma', 'engines', queryEngineName),
|
||||
];
|
||||
const stats = await Promise.all(
|
||||
paths.map(filePath => fs.lstat(filePath).catch(() => null))
|
||||
);
|
||||
|
||||
if (stats.some(stat => !stat?.isFile())) {
|
||||
debug('missing prisma query engine copy, skip hardlinking');
|
||||
return { linked: 0, savedBytes: 0 };
|
||||
}
|
||||
|
||||
const canonicalPath = paths[0];
|
||||
const canonicalStat = stats[0];
|
||||
const canonicalDigest = await sha256(canonicalPath);
|
||||
let linked = 0;
|
||||
let savedBytes = 0;
|
||||
|
||||
for (let i = 1; i < paths.length; i += 1) {
|
||||
const duplicatePath = paths[i];
|
||||
const duplicateStat = stats[i];
|
||||
if (
|
||||
!hasCompatibleHardlinkMetadata(canonicalStat, duplicateStat) ||
|
||||
(await sha256(duplicatePath)) !== canonicalDigest
|
||||
) {
|
||||
debug(`prisma query engine copy differs: ${duplicatePath}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (
|
||||
canonicalStat.dev === duplicateStat.dev &&
|
||||
canonicalStat.ino === duplicateStat.ino
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (await hardlinkDuplicate(canonicalPath, duplicatePath)) {
|
||||
linked += 1;
|
||||
savedBytes += duplicateStat.size;
|
||||
}
|
||||
}
|
||||
|
||||
return { linked, savedBytes };
|
||||
}
|
||||
|
||||
function runPrismaVersion(prismaBinPath, cwd) {
|
||||
const result = spawnSync(prismaBinPath, ['-v'], {
|
||||
cwd,
|
||||
@@ -518,7 +567,7 @@ async function prunePrismaEngines(appRoot, targetKey) {
|
||||
const prismaBinPath = path.join(appRoot, 'node_modules', '.bin', 'prisma');
|
||||
|
||||
if (!(await exists(prismaClientDir))) {
|
||||
return;
|
||||
return { linked: 0, savedBytes: 0 };
|
||||
}
|
||||
|
||||
const keepTarget = await pickExistingPrismaTarget(
|
||||
@@ -528,7 +577,7 @@ async function prunePrismaEngines(appRoot, targetKey) {
|
||||
|
||||
if (!keepTarget) {
|
||||
debug('no prisma keepTarget detected, skip prisma pruning');
|
||||
return;
|
||||
return { linked: 0, savedBytes: 0 };
|
||||
}
|
||||
|
||||
await prunePrismaQueryEngines(prismaClientDir, keepTarget);
|
||||
@@ -545,7 +594,7 @@ async function prunePrismaEngines(appRoot, targetKey) {
|
||||
|
||||
if (!(await exists(keepSchemaEngine))) {
|
||||
debug(`missing ${keepSchemaEngine}, skip pruning @prisma/engines`);
|
||||
return;
|
||||
return { linked: 0, savedBytes: 0 };
|
||||
}
|
||||
|
||||
const keepLibQueryEngine = `libquery_engine-${keepTarget}.so.node`;
|
||||
@@ -566,6 +615,8 @@ async function prunePrismaEngines(appRoot, targetKey) {
|
||||
.catch(() => {});
|
||||
}
|
||||
}
|
||||
|
||||
return hardlinkPrismaQueryEngines(appRoot, keepTarget);
|
||||
}
|
||||
|
||||
async function prunePrismaRuntimeArtifacts(nodeModulesDir) {
|
||||
@@ -738,7 +789,12 @@ await pruneOptionalNativeDeps(
|
||||
cpuPruneRegexes(targetKey)
|
||||
);
|
||||
|
||||
await prunePrismaEngines(APP_ROOT, targetKey);
|
||||
const prismaQueryEngineDedupe = await prunePrismaEngines(APP_ROOT, targetKey);
|
||||
log(
|
||||
`hardlinked prisma query engines: ${prismaQueryEngineDedupe.linked}, saved ${formatMiB(
|
||||
prismaQueryEngineDedupe.savedBytes
|
||||
)}`
|
||||
);
|
||||
|
||||
const nodeModulesDir = path.join(APP_ROOT, 'node_modules');
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { pretty } from '@react-email/render';
|
||||
import test from 'ava';
|
||||
|
||||
import { normalizeSMTPHeloHostname } from '../core/mail/utils';
|
||||
@@ -8,7 +9,7 @@ test('should render emails', async t => {
|
||||
for (const render of Object.values(Renderers)) {
|
||||
// @ts-expect-error use [PreviewProps]
|
||||
const content = await render();
|
||||
t.snapshot(content.html, content.subject);
|
||||
t.snapshot(await pretty(content.html), content.subject);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -20,7 +21,7 @@ test('should render mention email with empty doc title', async t => {
|
||||
title: '',
|
||||
},
|
||||
});
|
||||
t.snapshot(content.html, content.subject);
|
||||
t.snapshot(await pretty(content.html), content.subject);
|
||||
});
|
||||
|
||||
test('should normalize valid SMTP HELO hostnames', t => {
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import { format } from 'date-fns';
|
||||
|
||||
import { Bold } from './template';
|
||||
|
||||
export interface DateProps {
|
||||
@@ -7,5 +5,9 @@ export interface DateProps {
|
||||
}
|
||||
|
||||
export const IOSDate = (props: DateProps) => {
|
||||
return <Bold>{format(props.value, 'yyyy-MM-dd')}</Bold>;
|
||||
const year = String(props.value.getFullYear()).padStart(4, '0');
|
||||
const month = String(props.value.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(props.value.getDate()).padStart(2, '0');
|
||||
|
||||
return <Bold>{`${year}-${month}-${day}`}</Bold>;
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Link } from '@react-email/components';
|
||||
import { Link } from '@react-email/link';
|
||||
|
||||
import { Bold } from './template';
|
||||
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import { Container, Img, Link, Row, Section } from '@react-email/components';
|
||||
import { Container } from '@react-email/container';
|
||||
import { Img } from '@react-email/img';
|
||||
import { Link } from '@react-email/link';
|
||||
import { Row } from '@react-email/row';
|
||||
import { Section } from '@react-email/section';
|
||||
import type { CSSProperties } from 'react';
|
||||
|
||||
import { BasicTextStyle } from './common';
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
import {
|
||||
Body,
|
||||
Button as EmailButton,
|
||||
Container,
|
||||
Head,
|
||||
Html,
|
||||
Img,
|
||||
Link,
|
||||
Row,
|
||||
Section,
|
||||
Text as EmailText,
|
||||
} from '@react-email/components';
|
||||
import { Body } from '@react-email/body';
|
||||
import { Button as EmailButton } from '@react-email/button';
|
||||
import { Container } from '@react-email/container';
|
||||
import { Head } from '@react-email/head';
|
||||
import { Html } from '@react-email/html';
|
||||
import { Img } from '@react-email/img';
|
||||
import { Link } from '@react-email/link';
|
||||
import { Row } from '@react-email/row';
|
||||
import { Section } from '@react-email/section';
|
||||
import { Text as EmailText } from '@react-email/text';
|
||||
import type { PropsWithChildren } from 'react';
|
||||
|
||||
import { BasicTextStyle } from './common';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { render as rawRender } from '@react-email/components';
|
||||
import { type ComponentType, createElement, type ReactElement } from 'react';
|
||||
import { type ComponentType, createElement } from 'react';
|
||||
|
||||
import { Comment, CommentMention, Mention } from './docs';
|
||||
import { render } from './render';
|
||||
import {
|
||||
TeamBecomeAdmin,
|
||||
TeamBecomeCollaborator,
|
||||
@@ -41,10 +41,6 @@ type EmailContent = {
|
||||
html: string;
|
||||
};
|
||||
|
||||
function render(component: ReactElement) {
|
||||
return rawRender(component, { pretty: env.testing });
|
||||
}
|
||||
|
||||
type Props<T> = T extends ComponentType<infer P> ? P : never;
|
||||
export type EmailRenderer<Props> = (props: Props) => Promise<EmailContent>;
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import { createElement, type ReactElement, Suspense } from 'react';
|
||||
import { renderToReadableStream } from 'react-dom/server';
|
||||
|
||||
const doctype =
|
||||
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
|
||||
|
||||
export async function render(component: ReactElement) {
|
||||
const stream = await renderToReadableStream(
|
||||
createElement(Suspense, null, component),
|
||||
{ progressiveChunkSize: Number.POSITIVE_INFINITY }
|
||||
);
|
||||
const decoder = new TextDecoder('utf-8');
|
||||
let html = '';
|
||||
|
||||
for await (const chunk of stream) {
|
||||
html += decoder.decode(chunk, { stream: true });
|
||||
}
|
||||
html += decoder.decode();
|
||||
|
||||
return `${doctype}${html.replace(/<!DOCTYPE.*?>/, '')}`;
|
||||
}
|
||||
@@ -3,7 +3,6 @@ import { randomUUID } from 'node:crypto';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { Transactional } from '@nestjs-cls/transactional';
|
||||
import type { CalendarAccount, Prisma } from '@prisma/client';
|
||||
import { addDays, subDays } from 'date-fns';
|
||||
|
||||
import {
|
||||
CalendarProviderRequestError,
|
||||
@@ -819,9 +818,14 @@ export class CalendarService {
|
||||
|
||||
private getSyncWindow() {
|
||||
const now = this.now();
|
||||
const timeMin = new Date(now);
|
||||
const timeMax = new Date(now);
|
||||
timeMin.setDate(timeMin.getDate() - DEFAULT_PAST_DAYS);
|
||||
timeMax.setDate(timeMax.getDate() + DEFAULT_FUTURE_DAYS);
|
||||
|
||||
return {
|
||||
timeMin: subDays(now, DEFAULT_PAST_DAYS).toISOString(),
|
||||
timeMax: addDays(now, DEFAULT_FUTURE_DAYS).toISOString(),
|
||||
timeMin: timeMin.toISOString(),
|
||||
timeMax: timeMax.toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -944,7 +944,17 @@ __metadata:
|
||||
"@prisma/client": "npm:^6.6.0"
|
||||
"@prisma/instrumentation": "npm:^6.7.0"
|
||||
"@queuedash/api": "npm:^3.16.0"
|
||||
"@react-email/components": "npm:^0.5.7"
|
||||
"@react-email/body": "npm:0.3.0"
|
||||
"@react-email/button": "npm:0.2.1"
|
||||
"@react-email/container": "npm:0.0.16"
|
||||
"@react-email/head": "npm:0.0.13"
|
||||
"@react-email/html": "npm:0.0.12"
|
||||
"@react-email/img": "npm:0.0.12"
|
||||
"@react-email/link": "npm:0.0.13"
|
||||
"@react-email/render": "npm:1.4.0"
|
||||
"@react-email/row": "npm:0.0.13"
|
||||
"@react-email/section": "npm:0.0.17"
|
||||
"@react-email/text": "npm:0.1.6"
|
||||
"@socket.io/redis-adapter": "npm:^8.3.0"
|
||||
"@types/cookie-parser": "npm:^1.4.8"
|
||||
"@types/express": "npm:^5.0.1"
|
||||
@@ -967,7 +977,6 @@ __metadata:
|
||||
commander: "npm:^13.1.0"
|
||||
cookie-parser: "npm:^1.4.7"
|
||||
cross-env: "npm:^10.1.0"
|
||||
date-fns: "npm:^4.4.0"
|
||||
dotenv: "npm:^16.4.7"
|
||||
eventemitter2: "npm:^6.4.9"
|
||||
exa-js: "npm:^2.4.0"
|
||||
@@ -978,7 +987,6 @@ __metadata:
|
||||
graphql: "npm:^16.13.2"
|
||||
graphql-scalars: "npm:^1.24.0"
|
||||
graphql-upload: "npm:^17.0.0"
|
||||
html-validate: "npm:^9.0.0"
|
||||
htmlrewriter: "npm:^0.0.12"
|
||||
http-errors: "npm:^2.0.0"
|
||||
ioredis: "npm:^5.11.1"
|
||||
@@ -1001,7 +1009,6 @@ __metadata:
|
||||
reflect-metadata: "npm:^0.2.2"
|
||||
rxjs: "npm:^7.8.2"
|
||||
semver: "npm:^7.7.4"
|
||||
ses: "npm:^1.15.0"
|
||||
sinon: "npm:^21.0.1"
|
||||
socket.io: "npm:^4.8.3"
|
||||
socket.io-client: "npm:^4.8.3"
|
||||
@@ -4737,27 +4744,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@endo/cache-map@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "@endo/cache-map@npm:1.1.0"
|
||||
checksum: 10/1cf2ebae70e9983edd30e830933df52ab9a0140fdecd420325fd20f1633b9afeb377b5cac548c7b7d04beb4cd1a14e672055ad25145119b2b151db78ffaa0b2f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@endo/env-options@npm:^1.1.11":
|
||||
version: 1.1.11
|
||||
resolution: "@endo/env-options@npm:1.1.11"
|
||||
checksum: 10/a85326b2f422ebb3f5895ed263d230bf9c4915ed2f798210bebb3941daf94d97495f4767f4113bab8f3781b0534ecbe1d29067d7806478fd6237ab69e97fe5c1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@endo/immutable-arraybuffer@npm:^1.1.2":
|
||||
version: 1.1.2
|
||||
resolution: "@endo/immutable-arraybuffer@npm:1.1.2"
|
||||
checksum: 10/99159e4a04aad1dbe633b54b90f4591ff527c301ff2dc6585b65949e9c98b8942d726a23815470e6e4641c447bc94368cc96282f8fb50fb78f326b670c48cd16
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@envelop/core@npm:^5.4.0":
|
||||
version: 5.5.1
|
||||
resolution: "@envelop/core@npm:5.5.1"
|
||||
@@ -6441,15 +6427,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@html-validate/stylish@npm:^4.1.0":
|
||||
version: 4.2.0
|
||||
resolution: "@html-validate/stylish@npm:4.2.0"
|
||||
dependencies:
|
||||
kleur: "npm:^4.0.0"
|
||||
checksum: 10/563af4be8bdeeabbe5975d97128fbc56e153ddf70ed863c22d39c1b05b690efd74483bbcb1be6c4eb87f97f5c1d2b71b3025994546c5e0548f1f1ca620efc63f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@humanfs/core@npm:^0.19.1":
|
||||
version: 0.19.1
|
||||
resolution: "@humanfs/core@npm:0.19.1"
|
||||
@@ -13270,172 +13247,66 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/body@npm:0.1.0":
|
||||
version: 0.1.0
|
||||
resolution: "@react-email/body@npm:0.1.0"
|
||||
"@react-email/body@npm:0.3.0":
|
||||
version: 0.3.0
|
||||
resolution: "@react-email/body@npm:0.3.0"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/46090b3d36b45f48b277659440d3907afa638bab228b5409bb8306594efbe49b34d688abbd438d256450fb022067dae5853a894ac05cd69ed038b4ac2d48b224
|
||||
checksum: 10/e156223023105f6900409da45c699c0f67618dff390073d0892ccac82b316654ae5abdb9a7fa02b24fc9996967c677a22d5ed075f87f462a7db4be08e7ed91b0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/button@npm:0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "@react-email/button@npm:0.2.0"
|
||||
"@react-email/button@npm:0.2.1":
|
||||
version: 0.2.1
|
||||
resolution: "@react-email/button@npm:0.2.1"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/9ed50062859e868ae4eaecbf1cc01368ff20906f5949bfafbc9b3f6777c86ce553baffbb9f28d3bed758e71572e4b1feb4e08a76976a524bd16d5dc731785b37
|
||||
checksum: 10/abc540b8a5c73f4e214dfb3aa02a82d8aa556778699322e8ce41a0cfef725fb9e63c4314cfa2a785b861f819669b28debe1e72d312fb03a6477b13d23dad7192
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/code-block@npm:0.1.0":
|
||||
version: 0.1.0
|
||||
resolution: "@react-email/code-block@npm:0.1.0"
|
||||
dependencies:
|
||||
prismjs: "npm:^1.30.0"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/292e2ff365318386b7545a9bc4ef04e76c10d18bae4283cce150cd9a1c8b9a47b7a5f6095f55ff0cda2af8767388a26e042427c92abbfca4c657ac8e019c875d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/code-inline@npm:0.0.5":
|
||||
version: 0.0.5
|
||||
resolution: "@react-email/code-inline@npm:0.0.5"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/ecca1173b3f019d19c16cc0af7202bcd4eef09054e6ef423482f97918d136cb234ed21067b0690df279e8addd73b29d0ea3d7dadef4d7b68c256783a114853f8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/column@npm:0.0.13":
|
||||
version: 0.0.13
|
||||
resolution: "@react-email/column@npm:0.0.13"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/5cdc383329caab109647b9c6269bfed7fad4e986eb41036392026a8b25a0265f46e8190e5ab7dffb943da36cce69e2918ec41774f598d793ee977911840348fe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/components@npm:^0.5.7":
|
||||
version: 0.5.7
|
||||
resolution: "@react-email/components@npm:0.5.7"
|
||||
dependencies:
|
||||
"@react-email/body": "npm:0.1.0"
|
||||
"@react-email/button": "npm:0.2.0"
|
||||
"@react-email/code-block": "npm:0.1.0"
|
||||
"@react-email/code-inline": "npm:0.0.5"
|
||||
"@react-email/column": "npm:0.0.13"
|
||||
"@react-email/container": "npm:0.0.15"
|
||||
"@react-email/font": "npm:0.0.9"
|
||||
"@react-email/head": "npm:0.0.12"
|
||||
"@react-email/heading": "npm:0.0.15"
|
||||
"@react-email/hr": "npm:0.0.11"
|
||||
"@react-email/html": "npm:0.0.11"
|
||||
"@react-email/img": "npm:0.0.11"
|
||||
"@react-email/link": "npm:0.0.12"
|
||||
"@react-email/markdown": "npm:0.0.16"
|
||||
"@react-email/preview": "npm:0.0.13"
|
||||
"@react-email/render": "npm:1.4.0"
|
||||
"@react-email/row": "npm:0.0.12"
|
||||
"@react-email/section": "npm:0.0.16"
|
||||
"@react-email/tailwind": "npm:1.2.2"
|
||||
"@react-email/text": "npm:0.1.5"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/2aad3306dde7760488de910d33bed93231f989cb7de00ee3264b4c2771a0d4c2aa066402487e45f1e1c7b89fb5557de085b4896a4ef04aec5ab91d01ea1810eb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/container@npm:0.0.15":
|
||||
version: 0.0.15
|
||||
resolution: "@react-email/container@npm:0.0.15"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/10cd6eb35b02f7a871741183a28c84eb3f12b2aea0df8269e380a215a7907f8aff7b2b7639066377e56d72097eed52bba6a44c5cb92fecc2ef796d26b94f3430
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/font@npm:0.0.9":
|
||||
version: 0.0.9
|
||||
resolution: "@react-email/font@npm:0.0.9"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/55ab760b82d3a09bd49c69d5d33d39270b69c6d419abe4a9ff790750f78f3dbf398a3b855beb242dc17f2908d54c103e52d2978b7134cbc51ac592ef567db9bc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/head@npm:0.0.12":
|
||||
version: 0.0.12
|
||||
resolution: "@react-email/head@npm:0.0.12"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/37a59ea76538f1f865f029cae75144d3bd9d74981a26e416a5fe9e4dd10b54a972ec1c4c4c8a72ecc240a991780bca713ff9fdd1054c600f6b8549d4430d8610
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/heading@npm:0.0.15":
|
||||
version: 0.0.15
|
||||
resolution: "@react-email/heading@npm:0.0.15"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/5a0f304b162fe61e854b606ee2c753bf49bd80cec24502ebec71cbd9efec4f8f14bc20f89a3adfd457e75b3cfc566a59c49eca29dc383c352d76038d0e376dab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/hr@npm:0.0.11":
|
||||
version: 0.0.11
|
||||
resolution: "@react-email/hr@npm:0.0.11"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/0a904a174d28adda494342021db5e7b05d830402fbb2f351b360a1775fee28e3dffe123e9286545c2c612c17165635e1d73b3c20a5785b696240b039631b19ab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/html@npm:0.0.11":
|
||||
version: 0.0.11
|
||||
resolution: "@react-email/html@npm:0.0.11"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/c302e38e0a6c059cbe42dab7473e24b099130f1ca8a4b7c231275dee1518b18426c62e87ad3a2f20df46d3844f9ecb7c6b27a106dfdb13e1e75289809ffe534a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/img@npm:0.0.11":
|
||||
version: 0.0.11
|
||||
resolution: "@react-email/img@npm:0.0.11"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/d85b1e42708c10b1f95e9cf9f74b7065d460db106b4b015ff71435891c38702e3fb5fc0b62d38521f93253b573645215ef4d5041202c05d79de59a1a2deda03e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/link@npm:0.0.12":
|
||||
version: 0.0.12
|
||||
resolution: "@react-email/link@npm:0.0.12"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/2c1c15ef363f49e50460288e3758c0c51b8b225992d8a4dae48d515392afa7354f4036da4884933306257ae776552f543068def067d3eeb95af0d1ef86b3cded
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/markdown@npm:0.0.16":
|
||||
"@react-email/container@npm:0.0.16":
|
||||
version: 0.0.16
|
||||
resolution: "@react-email/markdown@npm:0.0.16"
|
||||
dependencies:
|
||||
marked: "npm:^15.0.12"
|
||||
resolution: "@react-email/container@npm:0.0.16"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/9889af29aae286ab1fbda81f99b80790f1d1f378775d4ac30a0f910cb304ea61171062d32cc1332acbb17ba6b13bf3cfa2703a8ed818e9752dfe0f44b2864654
|
||||
checksum: 10/d6a544cdc123742eab4161d56e8d7599b0adf6a940dbf6c0ac63c204116ab0f5dbc2152c5db1653671014b9b201522b8a1fd109f07073b89e10885aaeee85642
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/preview@npm:0.0.13":
|
||||
"@react-email/head@npm:0.0.13":
|
||||
version: 0.0.13
|
||||
resolution: "@react-email/preview@npm:0.0.13"
|
||||
resolution: "@react-email/head@npm:0.0.13"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/a47316d047abf5137559a469b695b76640d17e4cf51fd6547af0ef7bd1719bedb0de5affa4b6058ce47290466eaa5b9b10e559d8532eacf1677fe5376c5546d6
|
||||
checksum: 10/b02fcbfc8903ca50449e66aac99444f191b4919a16d56ee65aa4e16c9865c562ed629cc97775634c023ef1df214f230507d06f4a2d14b8f786fc4c139acf1b91
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/html@npm:0.0.12":
|
||||
version: 0.0.12
|
||||
resolution: "@react-email/html@npm:0.0.12"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/24386ef210ca1747d2410790b43e9aff94515b9eda8fe0d046f06f478e10553dd7fb03735e00c28303825df0eb28fbb7ab34f0d610daf9b91c08a516a45c2af8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/img@npm:0.0.12":
|
||||
version: 0.0.12
|
||||
resolution: "@react-email/img@npm:0.0.12"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/85a8c761fe8ba2802e74d9e6439348bad17f616bca28c00def1dcea54ea45a6f3f32e4a7b6b8a7b622924ebbf43008bb5150cb8da91920ff8c17381fcd8e11f3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/link@npm:0.0.13":
|
||||
version: 0.0.13
|
||||
resolution: "@react-email/link@npm:0.0.13"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/5abf884a1ddb9af8787c0be5fdad561780a9961c76a07a34917b32bb192ed01bd13b3fe2412a190a7a18978abffd4d4177856f8b788b01b0f5632f1abebc4d0d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -13453,39 +13324,30 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/row@npm:0.0.12":
|
||||
version: 0.0.12
|
||||
resolution: "@react-email/row@npm:0.0.12"
|
||||
"@react-email/row@npm:0.0.13":
|
||||
version: 0.0.13
|
||||
resolution: "@react-email/row@npm:0.0.13"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/8290dac2661920ce1b8c10d22a9cb69c1b45b43af35a79c05250a7e20d165d232154932d820aa2cf863ff3020b1d51344eaf6bee0ac4aeb750b8ebc012d0a91e
|
||||
checksum: 10/3f6ae4d83a815f569458fc4a5f54da411d0b5447480c3b57f99f1af898b8d4c004522aa2c7c6bf2ffbc73d8a8a0473b7b0153fdbb1c41e394003efbc9331cc82
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/section@npm:0.0.16":
|
||||
version: 0.0.16
|
||||
resolution: "@react-email/section@npm:0.0.16"
|
||||
"@react-email/section@npm:0.0.17":
|
||||
version: 0.0.17
|
||||
resolution: "@react-email/section@npm:0.0.17"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/0dc243d06d15d234760d9c4e5450f8bf98ebf8c4447caa1d804d740453d0d5d373233f3eda74f31fc947041856d040fe465114b07e9d658333162a2f99992665
|
||||
checksum: 10/be64dc115b62f2851bcba37527751e8ca35542fba16f0de20b9ca8a8585323ecb219864b432003fb59185f75d8b1ad4ade8f3148733dfbe9460363351a23bdac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/tailwind@npm:1.2.2":
|
||||
version: 1.2.2
|
||||
resolution: "@react-email/tailwind@npm:1.2.2"
|
||||
"@react-email/text@npm:0.1.6":
|
||||
version: 0.1.6
|
||||
resolution: "@react-email/text@npm:0.1.6"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/a66e192c2d110d66891f3a806356103f6093959d64968d3ae942faba3c22d5b610c04cfa1f35aee5a7a6bdf71020313a34d272b880f7626da6f56a23cdc547d1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@react-email/text@npm:0.1.5":
|
||||
version: 0.1.5
|
||||
resolution: "@react-email/text@npm:0.1.5"
|
||||
peerDependencies:
|
||||
react: ^18.0 || ^19.0 || ^19.0.0-rc
|
||||
checksum: 10/3f33649b4fb7f1f0d008dcd4573b2b41a99e658b549721e89842e9b4ca70e022f2d0f543dffd374b4da0505772d82cecd2b031766fc0eb738304474688a23a5d
|
||||
checksum: 10/63c832a5cf0cd5c2e6fe21f2cea9c20bc7d8af711d27961adc4bb5809bd5399e0849ab18c6cf9ed63f72521128bc2bf51d72a30acf245db4dda49231bc130730
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -15402,17 +15264,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sidvind/better-ajv-errors@npm:4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "@sidvind/better-ajv-errors@npm:4.0.0"
|
||||
dependencies:
|
||||
kleur: "npm:^4.1.0"
|
||||
peerDependencies:
|
||||
ajv: ^7.0.0 || ^8.0.0
|
||||
checksum: 10/fa4635332ed0a7c012470690b62312d2a4d394b8b56d1bd84665d5574472f1a4af64a2d32d30df8b1a7926985484b9b64601d43cbd16c9eeacb80f733b53b321
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sindresorhus/is@npm:^4.0.0":
|
||||
version: 4.6.0
|
||||
resolution: "@sindresorhus/is@npm:4.6.0"
|
||||
@@ -24675,7 +24526,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.4.1":
|
||||
"glob@npm:^10.2.2, glob@npm:^10.4.1":
|
||||
version: 10.5.0
|
||||
resolution: "glob@npm:10.5.0"
|
||||
dependencies:
|
||||
@@ -25275,38 +25126,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-validate@npm:^9.0.0":
|
||||
version: 9.5.3
|
||||
resolution: "html-validate@npm:9.5.3"
|
||||
dependencies:
|
||||
"@html-validate/stylish": "npm:^4.1.0"
|
||||
"@sidvind/better-ajv-errors": "npm:4.0.0"
|
||||
ajv: "npm:^8.0.0"
|
||||
glob: "npm:^10.0.0"
|
||||
kleur: "npm:^4.1.0"
|
||||
minimist: "npm:^1.2.0"
|
||||
prompts: "npm:^2.0.0"
|
||||
semver: "npm:^7.0.0"
|
||||
peerDependencies:
|
||||
jest: ^27.1 || ^28.1.3 || ^29.0.3
|
||||
jest-diff: ^27.1 || ^28.1.3 || ^29.0.3
|
||||
jest-snapshot: ^27.1 || ^28.1.3 || ^29.0.3
|
||||
vitest: ^0.34.0 || ^1.0.0 || ^2.0.0 || ^3.0.0
|
||||
peerDependenciesMeta:
|
||||
jest:
|
||||
optional: true
|
||||
jest-diff:
|
||||
optional: true
|
||||
jest-snapshot:
|
||||
optional: true
|
||||
vitest:
|
||||
optional: true
|
||||
bin:
|
||||
html-validate: bin/html-validate.mjs
|
||||
checksum: 10/a942989c66898bf13a030fb0cf2dc565777e601409a9eb7a149f51e101aec2aef26dd921aeca56961815e1bf00bb72955b8e166e1b417309d7737a092f89d92b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"html-void-elements@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "html-void-elements@npm:3.0.0"
|
||||
@@ -26767,7 +26586,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"kleur@npm:^4.0.0, kleur@npm:^4.1.0, kleur@npm:^4.1.5":
|
||||
"kleur@npm:^4.1.5":
|
||||
version: 4.1.5
|
||||
resolution: "kleur@npm:4.1.5"
|
||||
checksum: 10/44d84cc4eedd4311099402ef6d4acd9b2d16e08e499d6ef3bb92389bd4692d7ef09e35248c26e27f98acac532122acb12a1bfee645994ae3af4f0a37996da7df
|
||||
@@ -31047,13 +30866,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"prismjs@npm:^1.30.0":
|
||||
version: 1.30.0
|
||||
resolution: "prismjs@npm:1.30.0"
|
||||
checksum: 10/6b48a2439a82e5c6882f48ebc1564c3890e16463ba17ac10c3ad4f62d98dea5b5c915b172b63b83023a70ad4f5d7be3e8a60304420db34a161fae69dd4e3e2da
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"proc-log@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "proc-log@npm:2.0.1"
|
||||
@@ -31106,7 +30918,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"prompts@npm:2.4.2, prompts@npm:^2.0.0, prompts@npm:^2.4.2":
|
||||
"prompts@npm:2.4.2, prompts@npm:^2.4.2":
|
||||
version: 2.4.2
|
||||
resolution: "prompts@npm:2.4.2"
|
||||
dependencies:
|
||||
@@ -32801,7 +32613,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:7.8.1, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3, semver@npm:^7.7.1, semver@npm:^7.7.2, semver@npm:^7.7.3, semver@npm:^7.7.4":
|
||||
"semver@npm:7.8.1, semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3, semver@npm:^7.7.1, semver@npm:^7.7.2, semver@npm:^7.7.3, semver@npm:^7.7.4":
|
||||
version: 7.8.1
|
||||
resolution: "semver@npm:7.8.1"
|
||||
bin:
|
||||
@@ -32922,17 +32734,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ses@npm:^1.15.0":
|
||||
version: 1.15.0
|
||||
resolution: "ses@npm:1.15.0"
|
||||
dependencies:
|
||||
"@endo/cache-map": "npm:^1.1.0"
|
||||
"@endo/env-options": "npm:^1.1.11"
|
||||
"@endo/immutable-arraybuffer": "npm:^1.1.2"
|
||||
checksum: 10/494894d35de847103ca0e4357632d80436c0e3dbc0e0bf98448a962d2257cb9045db9c6e7737b4003846a690318fcf5c06ef5a9a51c8b47cd4ffeaf2fa330155
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"set-cookie-parser@npm:^2.6.0, set-cookie-parser@npm:^2.7.1":
|
||||
version: 2.7.1
|
||||
resolution: "set-cookie-parser@npm:2.7.1"
|
||||
|
||||
Reference in New Issue
Block a user