@react-email/render 0.0.7 → 0.0.9-canary.0
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/dist/index.d.mts +12 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +122 -22
- package/dist/index.mjs +119 -22
- package/package.json +24 -21
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Options {
|
|
2
|
+
pretty?: boolean;
|
|
3
|
+
plainText?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare const render: (component: React.ReactElement, options?: Options) => Promise<string>;
|
|
6
|
+
|
|
7
|
+
declare const renderAsync: (component: React.ReactElement, options?: {
|
|
8
|
+
pretty?: boolean;
|
|
9
|
+
plainText?: boolean;
|
|
10
|
+
}) => Promise<string>;
|
|
11
|
+
|
|
12
|
+
export { Options, render, renderAsync };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ interface Options {
|
|
|
2
2
|
pretty?: boolean;
|
|
3
3
|
plainText?: boolean;
|
|
4
4
|
}
|
|
5
|
-
declare const render: (component: React.ReactElement, options?: Options) => string
|
|
5
|
+
declare const render: (component: React.ReactElement, options?: Options) => Promise<string>;
|
|
6
6
|
|
|
7
7
|
declare const renderAsync: (component: React.ReactElement, options?: {
|
|
8
8
|
pretty?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,11 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __knownSymbol = (name, symbol) => {
|
|
9
|
+
if (symbol = Symbol[name])
|
|
10
|
+
return symbol;
|
|
11
|
+
throw Error("Symbol." + name + " is not defined");
|
|
12
|
+
};
|
|
8
13
|
var __export = (target, all) => {
|
|
9
14
|
for (var name in all)
|
|
10
15
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -18,10 +23,35 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
23
|
return to;
|
|
19
24
|
};
|
|
20
25
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
26
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
27
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
28
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
29
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
30
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
31
|
mod
|
|
23
32
|
));
|
|
24
33
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
34
|
+
var __async = (__this, __arguments, generator) => {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
var fulfilled = (value) => {
|
|
37
|
+
try {
|
|
38
|
+
step(generator.next(value));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
reject(e);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var rejected = (value) => {
|
|
44
|
+
try {
|
|
45
|
+
step(generator.throw(value));
|
|
46
|
+
} catch (e) {
|
|
47
|
+
reject(e);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
51
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
|
|
25
55
|
|
|
26
56
|
// src/index.ts
|
|
27
57
|
var src_exports = {};
|
|
@@ -35,18 +65,65 @@ module.exports = __toCommonJS(src_exports);
|
|
|
35
65
|
var ReactDomServer = __toESM(require("react-dom/server"));
|
|
36
66
|
var import_html_to_text = require("html-to-text");
|
|
37
67
|
var import_pretty = __toESM(require("pretty"));
|
|
38
|
-
var
|
|
68
|
+
var readPipeableStream = (readableStream) => __async(void 0, null, function* () {
|
|
69
|
+
let buffer = "";
|
|
70
|
+
try {
|
|
71
|
+
for (var iter = __forAwait(readableStream), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
72
|
+
const chunk = temp.value;
|
|
73
|
+
const chunkText = new TextDecoder("utf-8").decode(chunk);
|
|
74
|
+
buffer += chunkText;
|
|
75
|
+
}
|
|
76
|
+
} catch (temp) {
|
|
77
|
+
error = [temp];
|
|
78
|
+
} finally {
|
|
79
|
+
try {
|
|
80
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
81
|
+
} finally {
|
|
82
|
+
if (error)
|
|
83
|
+
throw error[0];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return buffer;
|
|
87
|
+
});
|
|
88
|
+
var readReactDOMServerReadableStream = (readableStream) => __async(void 0, null, function* () {
|
|
89
|
+
const reader = readableStream.getReader();
|
|
90
|
+
const chunks = [];
|
|
91
|
+
while (true) {
|
|
92
|
+
const { value, done } = yield reader.read();
|
|
93
|
+
if (done) {
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
chunks.push(value);
|
|
97
|
+
}
|
|
98
|
+
return chunks.map((chunk) => new TextDecoder("utf-8").decode(chunk)).join("");
|
|
99
|
+
});
|
|
100
|
+
var isPipeableStream = (stream) => "pipeTo" in stream;
|
|
101
|
+
var readStream = (readableStream) => __async(void 0, null, function* () {
|
|
102
|
+
if (isPipeableStream(readableStream)) {
|
|
103
|
+
return readPipeableStream(readableStream);
|
|
104
|
+
} else if (typeof readableStream === "string") {
|
|
105
|
+
return readableStream;
|
|
106
|
+
}
|
|
107
|
+
return readReactDOMServerReadableStream(readableStream);
|
|
108
|
+
});
|
|
109
|
+
var render = (component, options) => __async(void 0, null, function* () {
|
|
110
|
+
const reactDOMServer = (yield import("react-dom/server")).default;
|
|
111
|
+
const renderToStream2 = (
|
|
112
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
113
|
+
reactDOMServer.renderToReadableStream || reactDOMServer.renderToPipeableStream
|
|
114
|
+
);
|
|
39
115
|
if (options == null ? void 0 : options.plainText) {
|
|
40
116
|
return renderAsPlainText(component, options);
|
|
41
117
|
}
|
|
42
118
|
const doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
|
|
43
|
-
const
|
|
44
|
-
const
|
|
119
|
+
const readableStream = yield renderToStream2(component);
|
|
120
|
+
const html = yield readStream(readableStream);
|
|
121
|
+
const document = `${doctype}${html}`;
|
|
45
122
|
if (options && options.pretty) {
|
|
46
123
|
return (0, import_pretty.default)(document);
|
|
47
124
|
}
|
|
48
125
|
return document;
|
|
49
|
-
};
|
|
126
|
+
});
|
|
50
127
|
var renderAsPlainText = (component, _options) => {
|
|
51
128
|
return (0, import_html_to_text.convert)(ReactDomServer.renderToStaticMarkup(component), {
|
|
52
129
|
selectors: [
|
|
@@ -56,27 +133,50 @@ var renderAsPlainText = (component, _options) => {
|
|
|
56
133
|
});
|
|
57
134
|
};
|
|
58
135
|
|
|
59
|
-
// src/
|
|
136
|
+
// src/render-async.ts
|
|
60
137
|
var import_html_to_text2 = require("html-to-text");
|
|
61
138
|
var import_pretty2 = __toESM(require("pretty"));
|
|
62
|
-
var import_server = require("react-dom/server");
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
139
|
+
var import_server = __toESM(require("react-dom/server"));
|
|
140
|
+
var { renderToStaticMarkup: renderToStaticMarkup2 } = import_server.default;
|
|
141
|
+
var renderToStream = (
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
143
|
+
import_server.default.renderToReadableStream || import_server.default.renderToPipeableStream
|
|
144
|
+
);
|
|
145
|
+
function renderToString(children) {
|
|
146
|
+
return __async(this, null, function* () {
|
|
147
|
+
const stream = yield renderToStream(children);
|
|
148
|
+
const html = yield readableStreamToString(
|
|
149
|
+
// ReactDOMServerReadableStream behaves like ReadableStream
|
|
150
|
+
// in modern edge runtimes but the types are not compatible
|
|
151
|
+
stream
|
|
152
|
+
);
|
|
153
|
+
return html.replace(/^<!DOCTYPE html>/, "").replace(/<!-- -->/g, "");
|
|
154
|
+
});
|
|
69
155
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
156
|
+
function readableStreamToString(readableStream) {
|
|
157
|
+
return __async(this, null, function* () {
|
|
158
|
+
let result = "";
|
|
159
|
+
const decoder = new TextDecoder();
|
|
160
|
+
try {
|
|
161
|
+
for (var iter = __forAwait(readableStream), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
162
|
+
const chunk = temp.value;
|
|
163
|
+
result += decoder.decode(chunk);
|
|
164
|
+
}
|
|
165
|
+
} catch (temp) {
|
|
166
|
+
error = [temp];
|
|
167
|
+
} finally {
|
|
168
|
+
try {
|
|
169
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
170
|
+
} finally {
|
|
171
|
+
if (error)
|
|
172
|
+
throw error[0];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
});
|
|
77
177
|
}
|
|
78
|
-
var renderAsync =
|
|
79
|
-
const markup = typeof
|
|
178
|
+
var renderAsync = (component, options) => __async(void 0, null, function* () {
|
|
179
|
+
const markup = typeof renderToStaticMarkup2 === "undefined" ? yield renderToString(component) : renderToStaticMarkup2(component);
|
|
80
180
|
if (options == null ? void 0 : options.plainText) {
|
|
81
181
|
return (0, import_html_to_text2.convert)(markup, {
|
|
82
182
|
selectors: [
|
|
@@ -91,7 +191,7 @@ var renderAsync = async (component, options) => {
|
|
|
91
191
|
return (0, import_pretty2.default)(document);
|
|
92
192
|
}
|
|
93
193
|
return document;
|
|
94
|
-
};
|
|
194
|
+
});
|
|
95
195
|
// Annotate the CommonJS export names for ESM import in node:
|
|
96
196
|
0 && (module.exports = {
|
|
97
197
|
render,
|
package/dist/index.mjs
CHANGED
|
@@ -1,19 +1,93 @@
|
|
|
1
|
+
var __knownSymbol = (name, symbol) => {
|
|
2
|
+
if (symbol = Symbol[name])
|
|
3
|
+
return symbol;
|
|
4
|
+
throw Error("Symbol." + name + " is not defined");
|
|
5
|
+
};
|
|
6
|
+
var __async = (__this, __arguments, generator) => {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
var fulfilled = (value) => {
|
|
9
|
+
try {
|
|
10
|
+
step(generator.next(value));
|
|
11
|
+
} catch (e) {
|
|
12
|
+
reject(e);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
var rejected = (value) => {
|
|
16
|
+
try {
|
|
17
|
+
step(generator.throw(value));
|
|
18
|
+
} catch (e) {
|
|
19
|
+
reject(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
23
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
|
|
27
|
+
|
|
1
28
|
// src/render.ts
|
|
2
29
|
import * as ReactDomServer from "react-dom/server";
|
|
3
30
|
import { convert } from "html-to-text";
|
|
4
31
|
import pretty from "pretty";
|
|
5
|
-
var
|
|
32
|
+
var readPipeableStream = (readableStream) => __async(void 0, null, function* () {
|
|
33
|
+
let buffer = "";
|
|
34
|
+
try {
|
|
35
|
+
for (var iter = __forAwait(readableStream), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
36
|
+
const chunk = temp.value;
|
|
37
|
+
const chunkText = new TextDecoder("utf-8").decode(chunk);
|
|
38
|
+
buffer += chunkText;
|
|
39
|
+
}
|
|
40
|
+
} catch (temp) {
|
|
41
|
+
error = [temp];
|
|
42
|
+
} finally {
|
|
43
|
+
try {
|
|
44
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
45
|
+
} finally {
|
|
46
|
+
if (error)
|
|
47
|
+
throw error[0];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return buffer;
|
|
51
|
+
});
|
|
52
|
+
var readReactDOMServerReadableStream = (readableStream) => __async(void 0, null, function* () {
|
|
53
|
+
const reader = readableStream.getReader();
|
|
54
|
+
const chunks = [];
|
|
55
|
+
while (true) {
|
|
56
|
+
const { value, done } = yield reader.read();
|
|
57
|
+
if (done) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
chunks.push(value);
|
|
61
|
+
}
|
|
62
|
+
return chunks.map((chunk) => new TextDecoder("utf-8").decode(chunk)).join("");
|
|
63
|
+
});
|
|
64
|
+
var isPipeableStream = (stream) => "pipeTo" in stream;
|
|
65
|
+
var readStream = (readableStream) => __async(void 0, null, function* () {
|
|
66
|
+
if (isPipeableStream(readableStream)) {
|
|
67
|
+
return readPipeableStream(readableStream);
|
|
68
|
+
} else if (typeof readableStream === "string") {
|
|
69
|
+
return readableStream;
|
|
70
|
+
}
|
|
71
|
+
return readReactDOMServerReadableStream(readableStream);
|
|
72
|
+
});
|
|
73
|
+
var render = (component, options) => __async(void 0, null, function* () {
|
|
74
|
+
const reactDOMServer = (yield import("react-dom/server")).default;
|
|
75
|
+
const renderToStream2 = (
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
77
|
+
reactDOMServer.renderToReadableStream || reactDOMServer.renderToPipeableStream
|
|
78
|
+
);
|
|
6
79
|
if (options == null ? void 0 : options.plainText) {
|
|
7
80
|
return renderAsPlainText(component, options);
|
|
8
81
|
}
|
|
9
82
|
const doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
|
|
10
|
-
const
|
|
11
|
-
const
|
|
83
|
+
const readableStream = yield renderToStream2(component);
|
|
84
|
+
const html = yield readStream(readableStream);
|
|
85
|
+
const document = `${doctype}${html}`;
|
|
12
86
|
if (options && options.pretty) {
|
|
13
87
|
return pretty(document);
|
|
14
88
|
}
|
|
15
89
|
return document;
|
|
16
|
-
};
|
|
90
|
+
});
|
|
17
91
|
var renderAsPlainText = (component, _options) => {
|
|
18
92
|
return convert(ReactDomServer.renderToStaticMarkup(component), {
|
|
19
93
|
selectors: [
|
|
@@ -23,27 +97,50 @@ var renderAsPlainText = (component, _options) => {
|
|
|
23
97
|
});
|
|
24
98
|
};
|
|
25
99
|
|
|
26
|
-
// src/
|
|
100
|
+
// src/render-async.ts
|
|
27
101
|
import { convert as convert2 } from "html-to-text";
|
|
28
102
|
import pretty2 from "pretty";
|
|
29
|
-
import
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
103
|
+
import react from "react-dom/server";
|
|
104
|
+
var { renderToStaticMarkup: renderToStaticMarkup2 } = react;
|
|
105
|
+
var renderToStream = (
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
107
|
+
react.renderToReadableStream || react.renderToPipeableStream
|
|
108
|
+
);
|
|
109
|
+
function renderToString(children) {
|
|
110
|
+
return __async(this, null, function* () {
|
|
111
|
+
const stream = yield renderToStream(children);
|
|
112
|
+
const html = yield readableStreamToString(
|
|
113
|
+
// ReactDOMServerReadableStream behaves like ReadableStream
|
|
114
|
+
// in modern edge runtimes but the types are not compatible
|
|
115
|
+
stream
|
|
116
|
+
);
|
|
117
|
+
return html.replace(/^<!DOCTYPE html>/, "").replace(/<!-- -->/g, "");
|
|
118
|
+
});
|
|
36
119
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
120
|
+
function readableStreamToString(readableStream) {
|
|
121
|
+
return __async(this, null, function* () {
|
|
122
|
+
let result = "";
|
|
123
|
+
const decoder = new TextDecoder();
|
|
124
|
+
try {
|
|
125
|
+
for (var iter = __forAwait(readableStream), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
126
|
+
const chunk = temp.value;
|
|
127
|
+
result += decoder.decode(chunk);
|
|
128
|
+
}
|
|
129
|
+
} catch (temp) {
|
|
130
|
+
error = [temp];
|
|
131
|
+
} finally {
|
|
132
|
+
try {
|
|
133
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
134
|
+
} finally {
|
|
135
|
+
if (error)
|
|
136
|
+
throw error[0];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
});
|
|
44
141
|
}
|
|
45
|
-
var renderAsync =
|
|
46
|
-
const markup = typeof renderToStaticMarkup2 === "undefined" ?
|
|
142
|
+
var renderAsync = (component, options) => __async(void 0, null, function* () {
|
|
143
|
+
const markup = typeof renderToStaticMarkup2 === "undefined" ? yield renderToString(component) : renderToStaticMarkup2(component);
|
|
47
144
|
if (options == null ? void 0 : options.plainText) {
|
|
48
145
|
return convert2(markup, {
|
|
49
146
|
selectors: [
|
|
@@ -58,7 +155,7 @@ var renderAsync = async (component, options) => {
|
|
|
58
155
|
return pretty2(document);
|
|
59
156
|
}
|
|
60
157
|
return document;
|
|
61
|
-
};
|
|
158
|
+
});
|
|
62
159
|
export {
|
|
63
160
|
render,
|
|
64
161
|
renderAsync
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-email/render",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9-canary.0",
|
|
4
4
|
"description": "Transform React components into HTML email templates",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -9,16 +9,26 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"dist/**"
|
|
11
11
|
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.mjs"
|
|
17
|
+
},
|
|
18
|
+
"require": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"default": "./dist/index.js"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
12
24
|
"license": "MIT",
|
|
13
25
|
"scripts": {
|
|
14
26
|
"build": "tsup src/index.ts --format esm,cjs --dts --external react",
|
|
15
|
-
"dev": "tsup src/index.ts --format esm,cjs --dts --external react --watch",
|
|
16
|
-
"lint": "eslint",
|
|
17
27
|
"clean": "rm -rf dist",
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
28
|
+
"dev": "tsup src/index.ts --format esm,cjs --dts --external react --watch",
|
|
29
|
+
"lint": "eslint .",
|
|
30
|
+
"test:watch": "vitest",
|
|
31
|
+
"test": "vitest run"
|
|
22
32
|
},
|
|
23
33
|
"repository": {
|
|
24
34
|
"type": "git",
|
|
@@ -30,28 +40,21 @@
|
|
|
30
40
|
"email"
|
|
31
41
|
],
|
|
32
42
|
"engines": {
|
|
33
|
-
"node": ">=
|
|
43
|
+
"node": ">=18.0.0"
|
|
34
44
|
},
|
|
35
45
|
"dependencies": {
|
|
36
|
-
"html-to-text": "9.0.
|
|
46
|
+
"html-to-text": "9.0.5",
|
|
37
47
|
"pretty": "2.0.0",
|
|
38
48
|
"react": "18.2.0",
|
|
39
49
|
"react-dom": "18.2.0"
|
|
40
50
|
},
|
|
41
51
|
"devDependencies": {
|
|
42
|
-
"@babel/preset-react": "7.
|
|
43
|
-
"@types/html-to-text": "9.0.
|
|
44
|
-
"@types/jest": "29.5.0",
|
|
52
|
+
"@babel/preset-react": "7.22.5",
|
|
53
|
+
"@types/html-to-text": "9.0.1",
|
|
45
54
|
"@types/pretty": "2.0.1",
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"eslint": "8.23.1",
|
|
50
|
-
"jest": "28.1.3",
|
|
51
|
-
"prettier": "2.8.4",
|
|
52
|
-
"ts-jest": "28.0.8",
|
|
53
|
-
"tsup": "6.2.3",
|
|
54
|
-
"typescript": "4.8.3"
|
|
55
|
+
"eslint-config-custom": "workspace:*",
|
|
56
|
+
"tsconfig": "workspace:*",
|
|
57
|
+
"typescript": "5.1.6"
|
|
55
58
|
},
|
|
56
59
|
"publishConfig": {
|
|
57
60
|
"access": "public"
|