react-email 3.0.0 → 3.0.1

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.
Files changed (55) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/index.js +10 -10
  3. package/dist/cli/index.mjs +9 -9
  4. package/dist/preview/.next/BUILD_ID +1 -1
  5. package/dist/preview/.next/app-build-manifest.json +9 -9
  6. package/dist/preview/.next/app-path-routes-manifest.json +1 -1
  7. package/dist/preview/.next/build-manifest.json +3 -3
  8. package/dist/preview/.next/cache/eslint/.cache_6f202j +1 -0
  9. package/dist/preview/.next/cache/webpack/client-production/0.pack +0 -0
  10. package/dist/preview/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/dist/preview/.next/cache/webpack/edge-server-production/index.pack +0 -0
  12. package/dist/preview/.next/cache/webpack/server-production/0.pack +0 -0
  13. package/dist/preview/.next/cache/webpack/server-production/index.pack +0 -0
  14. package/dist/preview/.next/next-minimal-server.js.nft.json +1 -1
  15. package/dist/preview/.next/next-server.js.nft.json +1 -1
  16. package/dist/preview/.next/prerender-manifest.json +1 -1
  17. package/dist/preview/.next/required-server-files.json +1 -1
  18. package/dist/preview/.next/server/app/_not-found/page.js +1 -1
  19. package/dist/preview/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/dist/preview/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/dist/preview/.next/server/app/favicon.ico/route.js +3 -3
  22. package/dist/preview/.next/server/app/page.js +1 -1
  23. package/dist/preview/.next/server/app/page.js.nft.json +1 -1
  24. package/dist/preview/.next/server/app/page_client-reference-manifest.js +1 -1
  25. package/dist/preview/.next/server/app/preview/[...slug]/page.js +5 -5
  26. package/dist/preview/.next/server/app/preview/[...slug]/page.js.nft.json +1 -1
  27. package/dist/preview/.next/server/app/preview/[...slug]/page_client-reference-manifest.js +1 -1
  28. package/dist/preview/.next/server/app-paths-manifest.json +1 -1
  29. package/dist/preview/.next/server/chunks/{949.js → 415.js} +1 -1
  30. package/dist/preview/.next/server/chunks/{85.js → 575.js} +4 -4
  31. package/dist/preview/.next/server/chunks/593.js +1 -1
  32. package/dist/preview/.next/server/chunks/835.js +1 -1
  33. package/dist/preview/.next/server/middleware-build-manifest.js +1 -1
  34. package/dist/preview/.next/server/next-font-manifest.js +1 -1
  35. package/dist/preview/.next/server/next-font-manifest.json +1 -1
  36. package/dist/preview/.next/server/pages/500.html +1 -1
  37. package/dist/preview/.next/server/server-reference-manifest.js +1 -1
  38. package/dist/preview/.next/server/server-reference-manifest.json +1 -1
  39. package/dist/preview/.next/static/chunks/{739-50e72482bbc45590.js → 739-2c6de7a98f0ed2f8.js} +1 -1
  40. package/dist/preview/.next/static/chunks/app/layout-5f27947cf5e208fc.js +1 -0
  41. package/dist/preview/.next/static/chunks/app/{page-ec31790465d856cb.js → page-1c752add061e09ac.js} +1 -1
  42. package/dist/preview/.next/static/chunks/app/preview/[...slug]/{page-a683d0be240013ae.js → page-e0a2bd1fabf8ccac.js} +1 -1
  43. package/dist/preview/.next/static/chunks/{main-app-3901b786a8a59cbd.js → main-app-ba9de861208f5226.js} +1 -1
  44. package/dist/preview/.next/trace +52 -52
  45. package/dist/preview/.next/types/app/layout.ts +1 -1
  46. package/dist/preview/.next/types/app/preview/[...slug]/page.ts +1 -1
  47. package/package.json +1 -1
  48. package/cli/index.d.mts +0 -1
  49. package/cli/index.d.ts +0 -1
  50. package/cli/index.js +0 -2684
  51. package/cli/index.mjs +0 -1234
  52. package/dist/preview/.next/cache/eslint/.cache_1nlfowd +0 -1
  53. package/dist/preview/.next/static/chunks/app/layout-a2a755f27614eb27.js +0 -1
  54. /package/dist/preview/.next/static/{ogc8W4T2H5KDJzjc2H1rP → AJ4wdeFcgkOgG_NW4Vcri}/_buildManifest.js +0 -0
  55. /package/dist/preview/.next/static/{ogc8W4T2H5KDJzjc2H1rP → AJ4wdeFcgkOgG_NW4Vcri}/_ssgManifest.js +0 -0
package/cli/index.js DELETED
@@ -1,2684 +0,0 @@
1
- #!/usr/bin/env node
2
- function _array_like_to_array(arr, len) {
3
- if (len == null || len > arr.length) len = arr.length;
4
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
- return arr2;
6
- }
7
- function _array_with_holes(arr) {
8
- if (Array.isArray(arr)) return arr;
9
- }
10
- function _array_without_holes(arr) {
11
- if (Array.isArray(arr)) return _array_like_to_array(arr);
12
- }
13
- function _async_iterator(iterable) {
14
- var method, async, sync, retry = 2;
15
- for("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;){
16
- if (async && null != (method = iterable[async])) return method.call(iterable);
17
- if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
18
- async = "@@asyncIterator", sync = "@@iterator";
19
- }
20
- throw new TypeError("Object is not async iterable");
21
- }
22
- function AsyncFromSyncIterator(s) {
23
- function AsyncFromSyncIteratorContinuation(r) {
24
- if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
25
- var done = r.done;
26
- return Promise.resolve(r.value).then(function(value) {
27
- return {
28
- value: value,
29
- done: done
30
- };
31
- });
32
- }
33
- return AsyncFromSyncIterator = function(s) {
34
- this.s = s, this.n = s.next;
35
- }, AsyncFromSyncIterator.prototype = {
36
- s: null,
37
- n: null,
38
- next: function() {
39
- return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
40
- },
41
- return: function(value) {
42
- var ret = this.s.return;
43
- return void 0 === ret ? Promise.resolve({
44
- value: value,
45
- done: !0
46
- }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
47
- },
48
- throw: function(value) {
49
- var thr = this.s.return;
50
- return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
51
- }
52
- }, new AsyncFromSyncIterator(s);
53
- }
54
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
55
- try {
56
- var info = gen[key](arg);
57
- var value = info.value;
58
- } catch (error) {
59
- reject(error);
60
- return;
61
- }
62
- if (info.done) {
63
- resolve(value);
64
- } else {
65
- Promise.resolve(value).then(_next, _throw);
66
- }
67
- }
68
- function _async_to_generator(fn) {
69
- return function() {
70
- var self = this, args = arguments;
71
- return new Promise(function(resolve, reject) {
72
- var gen = fn.apply(self, args);
73
- function _next(value) {
74
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
75
- }
76
- function _throw(err) {
77
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
78
- }
79
- _next(undefined);
80
- });
81
- };
82
- }
83
- function _define_property(obj, key, value) {
84
- if (key in obj) {
85
- Object.defineProperty(obj, key, {
86
- value: value,
87
- enumerable: true,
88
- configurable: true,
89
- writable: true
90
- });
91
- } else {
92
- obj[key] = value;
93
- }
94
- return obj;
95
- }
96
- function _iterable_to_array(iter) {
97
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
98
- }
99
- function _iterable_to_array_limit(arr, i) {
100
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
101
- if (_i == null) return;
102
- var _arr = [];
103
- var _n = true;
104
- var _d = false;
105
- var _s, _e;
106
- try {
107
- for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
108
- _arr.push(_s.value);
109
- if (i && _arr.length === i) break;
110
- }
111
- } catch (err) {
112
- _d = true;
113
- _e = err;
114
- } finally{
115
- try {
116
- if (!_n && _i["return"] != null) _i["return"]();
117
- } finally{
118
- if (_d) throw _e;
119
- }
120
- }
121
- return _arr;
122
- }
123
- function _non_iterable_rest() {
124
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
125
- }
126
- function _non_iterable_spread() {
127
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
128
- }
129
- function _object_spread(target) {
130
- for(var i = 1; i < arguments.length; i++){
131
- var source = arguments[i] != null ? arguments[i] : {};
132
- var ownKeys = Object.keys(source);
133
- if (typeof Object.getOwnPropertySymbols === "function") {
134
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
135
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
136
- }));
137
- }
138
- ownKeys.forEach(function(key) {
139
- _define_property(target, key, source[key]);
140
- });
141
- }
142
- return target;
143
- }
144
- function ownKeys(object, enumerableOnly) {
145
- var keys = Object.keys(object);
146
- if (Object.getOwnPropertySymbols) {
147
- var symbols = Object.getOwnPropertySymbols(object);
148
- if (enumerableOnly) {
149
- symbols = symbols.filter(function(sym) {
150
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
151
- });
152
- }
153
- keys.push.apply(keys, symbols);
154
- }
155
- return keys;
156
- }
157
- function _object_spread_props(target, source) {
158
- source = source != null ? source : {};
159
- if (Object.getOwnPropertyDescriptors) {
160
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
161
- } else {
162
- ownKeys(Object(source)).forEach(function(key) {
163
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
164
- });
165
- }
166
- return target;
167
- }
168
- function _sliced_to_array(arr, i) {
169
- return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
170
- }
171
- function _to_consumable_array(arr) {
172
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
173
- }
174
- function _unsupported_iterable_to_array(o, minLen) {
175
- if (!o) return;
176
- if (typeof o === "string") return _array_like_to_array(o, minLen);
177
- var n = Object.prototype.toString.call(o).slice(8, -1);
178
- if (n === "Object" && o.constructor) n = o.constructor.name;
179
- if (n === "Map" || n === "Set") return Array.from(n);
180
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
181
- }
182
- function _ts_generator(thisArg, body) {
183
- var f, y, t, g, _ = {
184
- label: 0,
185
- sent: function() {
186
- if (t[0] & 1) throw t[1];
187
- return t[1];
188
- },
189
- trys: [],
190
- ops: []
191
- };
192
- return g = {
193
- next: verb(0),
194
- "throw": verb(1),
195
- "return": verb(2)
196
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
197
- return this;
198
- }), g;
199
- function verb(n) {
200
- return function(v) {
201
- return step([
202
- n,
203
- v
204
- ]);
205
- };
206
- }
207
- function step(op) {
208
- if (f) throw new TypeError("Generator is already executing.");
209
- while(_)try {
210
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
211
- if (y = 0, t) op = [
212
- op[0] & 2,
213
- t.value
214
- ];
215
- switch(op[0]){
216
- case 0:
217
- case 1:
218
- t = op;
219
- break;
220
- case 4:
221
- _.label++;
222
- return {
223
- value: op[1],
224
- done: false
225
- };
226
- case 5:
227
- _.label++;
228
- y = op[1];
229
- op = [
230
- 0
231
- ];
232
- continue;
233
- case 7:
234
- op = _.ops.pop();
235
- _.trys.pop();
236
- continue;
237
- default:
238
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
239
- _ = 0;
240
- continue;
241
- }
242
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
243
- _.label = op[1];
244
- break;
245
- }
246
- if (op[0] === 6 && _.label < t[1]) {
247
- _.label = t[1];
248
- t = op;
249
- break;
250
- }
251
- if (t && _.label < t[2]) {
252
- _.label = t[2];
253
- _.ops.push(op);
254
- break;
255
- }
256
- if (t[2]) _.ops.pop();
257
- _.trys.pop();
258
- continue;
259
- }
260
- op = body.call(thisArg, _);
261
- } catch (e) {
262
- op = [
263
- 6,
264
- e
265
- ];
266
- y = 0;
267
- } finally{
268
- f = t = 0;
269
- }
270
- if (op[0] & 5) throw op[1];
271
- return {
272
- value: op[0] ? op[1] : void 0,
273
- done: true
274
- };
275
- }
276
- }
277
- function _ts_values(o) {
278
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
279
- if (m) return m.call(o);
280
- if (o && typeof o.length === "number") return {
281
- next: function() {
282
- if (o && i >= o.length) o = void 0;
283
- return {
284
- value: o && o[i++],
285
- done: !o
286
- };
287
- }
288
- };
289
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
290
- }
291
- var __create = Object.create;
292
- var __defProp = Object.defineProperty;
293
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
294
- var __getOwnPropNames = Object.getOwnPropertyNames;
295
- var __getProtoOf = Object.getPrototypeOf;
296
- var __hasOwnProp = Object.prototype.hasOwnProperty;
297
- var __copyProps = function(to, from, except, desc) {
298
- if (from && typeof from === "object" || typeof from === "function") {
299
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
300
- try {
301
- var _loop = function() {
302
- var key = _step.value;
303
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
304
- get: function() {
305
- return from[key];
306
- },
307
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
308
- });
309
- };
310
- for(var _iterator = __getOwnPropNames(from)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
311
- } catch (err) {
312
- _didIteratorError = true;
313
- _iteratorError = err;
314
- } finally{
315
- try {
316
- if (!_iteratorNormalCompletion && _iterator.return != null) {
317
- _iterator.return();
318
- }
319
- } finally{
320
- if (_didIteratorError) {
321
- throw _iteratorError;
322
- }
323
- }
324
- }
325
- }
326
- return to;
327
- };
328
- var __toESM = function(mod, isNodeMode, target) {
329
- return target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(// If the importer is in node compatibility mode or this is not an ESM
330
- // file that has been converted to a CommonJS file using a Babel-
331
- // compatible transform (i.e. "__esModule" has not been set), then set
332
- // "default" to the CommonJS "module.exports" for node compatibility.
333
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
334
- value: mod,
335
- enumerable: true
336
- }) : target, mod);
337
- };
338
- // src/cli/index.ts
339
- var import_commander = require("commander");
340
- // package.json
341
- var package_default = {
342
- name: "react-email",
343
- version: "2.1.7-canary.2",
344
- description: "A live preview of your emails right in your browser.",
345
- bin: {
346
- email: "./cli/index.js"
347
- },
348
- scripts: {
349
- build: "tsup",
350
- dev: "tsup --watch",
351
- test: "vitest run",
352
- "test:watch": "vitest",
353
- clean: "rm -rf dist",
354
- lint: "eslint . && tsc"
355
- },
356
- license: "MIT",
357
- repository: {
358
- type: "git",
359
- url: "https://github.com/resend/react-email.git",
360
- directory: "packages/react-email"
361
- },
362
- keywords: [
363
- "react",
364
- "email"
365
- ],
366
- engines: {
367
- node: ">=18.0.0"
368
- },
369
- dependencies: {
370
- "@babel/core": "7.24.5",
371
- "@babel/parser": "7.24.5",
372
- "@radix-ui/colors": "1.0.1",
373
- "@radix-ui/react-collapsible": "1.1.0",
374
- "@radix-ui/react-popover": "1.1.1",
375
- "@radix-ui/react-slot": "1.1.0",
376
- "@radix-ui/react-toggle-group": "1.1.0",
377
- "@radix-ui/react-tooltip": "1.1.1",
378
- "@swc/core": "1.3.101",
379
- "@types/react": "^18.2.0",
380
- "@types/react-dom": "^18.2.0",
381
- "@types/webpack": "5.28.5",
382
- autoprefixer: "10.4.14",
383
- chalk: "4.1.2",
384
- chokidar: "3.6.0",
385
- clsx: "2.1.0",
386
- commander: "11.1.0",
387
- debounce: "2.0.0",
388
- esbuild: "0.19.11",
389
- "eslint-config-prettier": "9.0.0",
390
- "eslint-config-turbo": "1.10.12",
391
- "framer-motion": "12.0.0-alpha.0",
392
- glob: "10.3.4",
393
- "log-symbols": "4.1.0",
394
- "mime-types": "2.1.35",
395
- next: "14.2.3",
396
- "normalize-path": "3.0.0",
397
- ora: "5.4.1",
398
- postcss: "8.4.40",
399
- "prism-react-renderer": "2.1.0",
400
- react: "18.3.1",
401
- "react-dom": "18.3.1",
402
- "socket.io": "4.7.5",
403
- "socket.io-client": "4.7.5",
404
- sonner: "1.3.1",
405
- "source-map-js": "1.0.2",
406
- "stacktrace-parser": "0.1.10",
407
- "tailwind-merge": "2.2.0",
408
- tailwindcss: "3.4.0",
409
- typescript: "5.1.6"
410
- },
411
- devDependencies: {
412
- "@react-email/components": "workspace:*",
413
- "@react-email/render": "workspace:*",
414
- "@types/babel__core": "7.20.5",
415
- "@types/fs-extra": "11.0.1",
416
- "@types/mime-types": "2.1.4",
417
- "@types/node": "18.0.0",
418
- "@types/normalize-path": "3.0.2",
419
- "@vercel/style-guide": "5.1.0",
420
- eslint: "8.50.0",
421
- tsup: "7.2.0",
422
- tsx: "4.9.0",
423
- vitest: "1.1.3"
424
- }
425
- };
426
- // src/cli/commands/dev.ts
427
- var import_node_fs4 = __toESM(require("fs"));
428
- // src/cli/utils/tree.ts
429
- var import_node_fs = require("fs");
430
- var import_node_os = __toESM(require("os"));
431
- var import_node_path = __toESM(require("path"));
432
- var SYMBOLS = {
433
- BRANCH: "├── ",
434
- EMPTY: "",
435
- INDENT: " ",
436
- LAST_BRANCH: "└── ",
437
- VERTICAL: "│ "
438
- };
439
- var getTreeLines = function() {
440
- var _ref = _async_to_generator(function(dirPath, depth) {
441
- var currentDepth, base, dirFullpath, dirname, lines, dirStat, _loop, childDirents, i;
442
- var _arguments = arguments;
443
- return _ts_generator(this, function(_state) {
444
- switch(_state.label){
445
- case 0:
446
- currentDepth = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : 0;
447
- base = process.cwd();
448
- dirFullpath = import_node_path.default.resolve(base, dirPath);
449
- dirname = import_node_path.default.basename(dirFullpath);
450
- lines = [
451
- dirname
452
- ];
453
- return [
454
- 4,
455
- import_node_fs.promises.stat(dirFullpath)
456
- ];
457
- case 1:
458
- dirStat = _state.sent();
459
- if (!(dirStat.isDirectory() && currentDepth < depth)) return [
460
- 3,
461
- 6
462
- ];
463
- _loop = function(i) {
464
- var dirent, isLast, branchingSymbol, verticalSymbol, pathToDirectory, treeLinesForSubDirectory;
465
- return _ts_generator(this, function(_state) {
466
- switch(_state.label){
467
- case 0:
468
- dirent = childDirents[i];
469
- isLast = i === childDirents.length - 1;
470
- branchingSymbol = isLast ? SYMBOLS.LAST_BRANCH : SYMBOLS.BRANCH;
471
- verticalSymbol = isLast ? SYMBOLS.INDENT : SYMBOLS.VERTICAL;
472
- if (!dirent.isFile()) return [
473
- 3,
474
- 1
475
- ];
476
- lines.push("".concat(branchingSymbol).concat(dirent.name));
477
- return [
478
- 3,
479
- 3
480
- ];
481
- case 1:
482
- pathToDirectory = import_node_path.default.join(dirFullpath, dirent.name);
483
- return [
484
- 4,
485
- getTreeLines(pathToDirectory, depth, currentDepth + 1)
486
- ];
487
- case 2:
488
- treeLinesForSubDirectory = _state.sent();
489
- lines = lines.concat(treeLinesForSubDirectory.map(function(line, index) {
490
- return index === 0 ? "".concat(branchingSymbol).concat(line) : "".concat(verticalSymbol).concat(line);
491
- }));
492
- _state.label = 3;
493
- case 3:
494
- return [
495
- 2
496
- ];
497
- }
498
- });
499
- };
500
- return [
501
- 4,
502
- import_node_fs.promises.readdir(dirFullpath, {
503
- withFileTypes: true
504
- })
505
- ];
506
- case 2:
507
- childDirents = _state.sent();
508
- childDirents.sort(function(a, b) {
509
- if (a.isDirectory() && b.isFile()) {
510
- return -1;
511
- } else if (a.isFile() && b.isDirectory()) {
512
- return 1;
513
- }
514
- return b.name > a.name ? -1 : 1;
515
- });
516
- i = 0;
517
- _state.label = 3;
518
- case 3:
519
- if (!(i < childDirents.length)) return [
520
- 3,
521
- 6
522
- ];
523
- return [
524
- 5,
525
- _ts_values(_loop(i))
526
- ];
527
- case 4:
528
- _state.sent();
529
- _state.label = 5;
530
- case 5:
531
- i++;
532
- return [
533
- 3,
534
- 3
535
- ];
536
- case 6:
537
- return [
538
- 2,
539
- lines
540
- ];
541
- }
542
- });
543
- });
544
- return function getTreeLines(dirPath, depth) {
545
- return _ref.apply(this, arguments);
546
- };
547
- }();
548
- var tree = function() {
549
- var _ref = _async_to_generator(function(dirPath, depth) {
550
- var lines;
551
- return _ts_generator(this, function(_state) {
552
- switch(_state.label){
553
- case 0:
554
- return [
555
- 4,
556
- getTreeLines(dirPath, depth)
557
- ];
558
- case 1:
559
- lines = _state.sent();
560
- return [
561
- 2,
562
- lines.join(import_node_os.default.EOL)
563
- ];
564
- }
565
- });
566
- });
567
- return function tree(dirPath, depth) {
568
- return _ref.apply(this, arguments);
569
- };
570
- }();
571
- // src/cli/utils/preview/hot-reloading/setup-hot-reloading.ts
572
- var import_node_path5 = __toESM(require("path"));
573
- var import_socket = require("socket.io");
574
- var import_chokidar = require("chokidar");
575
- var import_debounce = __toESM(require("debounce"));
576
- // src/cli/utils/preview/hot-reloading/create-dependency-graph.ts
577
- var import_node_path4 = __toESM(require("path"));
578
- var import_node_fs3 = require("fs");
579
- // src/cli/utils/preview/hot-reloading/get-imported-modules.ts
580
- var import_core = require("@babel/core");
581
- var import_parser = require("@babel/parser");
582
- var getImportedModules = function(contents) {
583
- var importedPaths = [];
584
- var parsedContents = (0, import_parser.parse)(contents, {
585
- sourceType: "unambiguous",
586
- strictMode: false,
587
- errorRecovery: true,
588
- plugins: [
589
- "jsx",
590
- "typescript",
591
- "decorators"
592
- ]
593
- });
594
- (0, import_core.traverse)(parsedContents, {
595
- ImportDeclaration: function ImportDeclaration(param) {
596
- var node = param.node;
597
- importedPaths.push(node.source.value);
598
- },
599
- ExportAllDeclaration: function ExportAllDeclaration(param) {
600
- var node = param.node;
601
- importedPaths.push(node.source.value);
602
- },
603
- ExportNamedDeclaration: function ExportNamedDeclaration(param) {
604
- var node = param.node;
605
- if (node.source) {
606
- importedPaths.push(node.source.value);
607
- }
608
- },
609
- CallExpression: function CallExpression(param) {
610
- var node = param.node;
611
- if ("name" in node.callee && node.callee.name === "require") {
612
- if (node.arguments.length === 1) {
613
- var importPathNode = node.arguments[0];
614
- if (importPathNode.type === "StringLiteral") {
615
- importedPaths.push(importPathNode.value);
616
- }
617
- }
618
- }
619
- }
620
- });
621
- return importedPaths;
622
- };
623
- // src/cli/utils/preview/start-dev-server.ts
624
- var import_node_path3 = __toESM(require("path"));
625
- var import_node_http = __toESM(require("http"));
626
- var import_node_url = __toESM(require("url"));
627
- var import_next = __toESM(require("next"));
628
- var import_ora = __toESM(require("ora"));
629
- var import_log_symbols = __toESM(require("log-symbols"));
630
- var import_chalk = __toESM(require("chalk"));
631
- // src/cli/utils/close-ora-on-sigint.ts
632
- var closeOraOnSIGNIT = function(spinner) {
633
- process.on("SIGINT", function() {
634
- spinner.stop();
635
- });
636
- };
637
- // src/cli/utils/preview/serve-static-file.ts
638
- var import_node_path2 = __toESM(require("path"));
639
- var import_node_fs2 = require("fs");
640
- var import_mime_types = require("mime-types");
641
- var serveStaticFile = function() {
642
- var _ref = _async_to_generator(function(res, parsedUrl, staticDirRelativePath) {
643
- var staticBaseDir, pathname, ext, fileAbsolutePath, fileHandle, fileData, exception;
644
- return _ts_generator(this, function(_state) {
645
- switch(_state.label){
646
- case 0:
647
- staticBaseDir = import_node_path2.default.join(process.cwd(), staticDirRelativePath);
648
- pathname = parsedUrl.pathname;
649
- ext = import_node_path2.default.parse(pathname).ext;
650
- fileAbsolutePath = import_node_path2.default.join(staticBaseDir, pathname);
651
- return [
652
- 4,
653
- import_node_fs2.promises.open(fileAbsolutePath, "r")
654
- ];
655
- case 1:
656
- fileHandle = _state.sent();
657
- _state.label = 2;
658
- case 2:
659
- _state.trys.push([
660
- 2,
661
- 4,
662
- 5,
663
- 6
664
- ]);
665
- return [
666
- 4,
667
- import_node_fs2.promises.readFile(fileHandle)
668
- ];
669
- case 3:
670
- fileData = _state.sent();
671
- res.setHeader("Content-type", (0, import_mime_types.lookup)(ext) || "text/plain");
672
- res.end(fileData);
673
- return [
674
- 3,
675
- 6
676
- ];
677
- case 4:
678
- exception = _state.sent();
679
- console.error("Could not read file at ".concat(fileAbsolutePath, " to be served, here's the exception:"), exception);
680
- res.statusCode = 500;
681
- res.end("Could not read file to be served! Check your terminal for more information.");
682
- return [
683
- 3,
684
- 6
685
- ];
686
- case 5:
687
- fileHandle.close();
688
- return [
689
- 7
690
- ];
691
- case 6:
692
- return [
693
- 2
694
- ];
695
- }
696
- });
697
- });
698
- return function serveStaticFile(res, parsedUrl, staticDirRelativePath) {
699
- return _ref.apply(this, arguments);
700
- };
701
- }();
702
- // src/cli/utils/preview/get-env-variables-for-preview-app.ts
703
- var import_path = __toESM(require("path"));
704
- var getEnvVariablesForPreviewApp = function(relativePathToEmailsDirectory, cliPackageLocation, cwd) {
705
- return {
706
- NEXT_PUBLIC_EMAILS_DIR_RELATIVE_PATH: relativePathToEmailsDirectory,
707
- NEXT_PUBLIC_CLI_PACKAGE_LOCATION: cliPackageLocation,
708
- NEXT_PUBLIC_OS_PATH_SEPARATOR: import_path.default.sep,
709
- NEXT_PUBLIC_USER_PROJECT_LOCATION: cwd
710
- };
711
- };
712
- // src/cli/utils/preview/start-dev-server.ts
713
- var devServer;
714
- var safeAsyncServerListen = function(server, port) {
715
- return new Promise(function(resolve2) {
716
- server.listen(port, function() {
717
- resolve2({
718
- portAlreadyInUse: false
719
- });
720
- });
721
- server.on("error", function(e) {
722
- if (e.code === "EADDRINUSE") {
723
- resolve2({
724
- portAlreadyInUse: true
725
- });
726
- }
727
- });
728
- });
729
- };
730
- var isRunningBuilt = __filename.endsWith(import_node_path3.default.join("cli", "index.js"));
731
- var cliPacakgeLocation = isRunningBuilt ? import_node_path3.default.resolve(__dirname, "..") : import_node_path3.default.resolve(__dirname, "../../../..");
732
- var startDevServer = function() {
733
- var _ref = _async_to_generator(function(emailsDirRelativePath, staticBaseDirRelativePath, port) {
734
- var portAlreadyInUse, nextPortToTry, spinner, timeBeforeNextReady, app, isNextReady, nextReadyPromise, nextHandleRequest, secondsToNextReady;
735
- return _ts_generator(this, function(_state) {
736
- switch(_state.label){
737
- case 0:
738
- devServer = import_node_http.default.createServer(function(req, res) {
739
- if (!req.url) {
740
- res.end(404);
741
- return;
742
- }
743
- var parsedUrl = import_node_url.default.parse(req.url, true);
744
- res.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");
745
- res.setHeader("Pragma", "no-cache");
746
- res.setHeader("Expires", "-1");
747
- try {
748
- if (parsedUrl.path && parsedUrl.path.includes("static/") && !parsedUrl.path.includes("_next/static/")) {
749
- void serveStaticFile(res, parsedUrl, staticBaseDirRelativePath);
750
- } else if (!isNextReady) {
751
- void nextReadyPromise.then(function() {
752
- return nextHandleRequest === null || nextHandleRequest === void 0 ? void 0 : nextHandleRequest(req, res, parsedUrl);
753
- });
754
- } else {
755
- void (nextHandleRequest === null || nextHandleRequest === void 0 ? void 0 : nextHandleRequest(req, res, parsedUrl));
756
- }
757
- } catch (e) {
758
- console.error("caught error", e);
759
- res.writeHead(500);
760
- res.end();
761
- }
762
- });
763
- return [
764
- 4,
765
- safeAsyncServerListen(devServer, port)
766
- ];
767
- case 1:
768
- portAlreadyInUse = _state.sent().portAlreadyInUse;
769
- if (!portAlreadyInUse) {
770
- console.log(import_chalk.default.greenBright(" React Email ".concat(package_default.version)));
771
- console.log(" Running preview at: http://localhost:".concat(port, "\n"));
772
- } else {
773
- nextPortToTry = port + 1;
774
- console.warn(" ".concat(import_log_symbols.default.warning, " Port ").concat(port, " is already in use, trying ").concat(nextPortToTry));
775
- return [
776
- 2,
777
- startDevServer(emailsDirRelativePath, staticBaseDirRelativePath, nextPortToTry)
778
- ];
779
- }
780
- devServer.on("close", /*#__PURE__*/ _async_to_generator(function() {
781
- return _ts_generator(this, function(_state) {
782
- switch(_state.label){
783
- case 0:
784
- return [
785
- 4,
786
- app.close()
787
- ];
788
- case 1:
789
- _state.sent();
790
- return [
791
- 2
792
- ];
793
- }
794
- });
795
- }));
796
- devServer.on("error", function(e) {
797
- console.error(" ".concat(import_log_symbols.default.error, " preview server error: "), JSON.stringify(e));
798
- process.exit(1);
799
- });
800
- spinner = (0, import_ora.default)({
801
- text: "Getting react-email preview server ready...\n",
802
- prefixText: " "
803
- }).start();
804
- closeOraOnSIGNIT(spinner);
805
- timeBeforeNextReady = performance.now();
806
- process.env = _object_spread({}, process.env, getEnvVariablesForPreviewApp(// If we don't do normalization here, stuff like https://github.com/resend/react-email/issues/1354 happens.
807
- import_node_path3.default.normalize(emailsDirRelativePath), cliPacakgeLocation, process.cwd()));
808
- app = (0, import_next.default)({
809
- // passing in env here does not get the environment variables there
810
- dev: true,
811
- hostname: "localhost",
812
- port: port,
813
- dir: cliPacakgeLocation
814
- });
815
- isNextReady = false;
816
- nextReadyPromise = app.prepare();
817
- return [
818
- 4,
819
- nextReadyPromise
820
- ];
821
- case 2:
822
- _state.sent();
823
- isNextReady = true;
824
- nextHandleRequest = app.getRequestHandler();
825
- secondsToNextReady = ((performance.now() - timeBeforeNextReady) / 1e3).toFixed(1);
826
- spinner.stopAndPersist({
827
- text: "Ready in ".concat(secondsToNextReady, "s\n"),
828
- symbol: import_log_symbols.default.success
829
- });
830
- return [
831
- 2,
832
- devServer
833
- ];
834
- }
835
- });
836
- });
837
- return function startDevServer(emailsDirRelativePath, staticBaseDirRelativePath, port) {
838
- return _ref.apply(this, arguments);
839
- };
840
- }();
841
- var makeExitHandler = function(options) {
842
- return function(_codeOrSignal) {
843
- if (typeof devServer !== "undefined") {
844
- console.log("\nshutting down dev server");
845
- devServer.close();
846
- devServer = void 0;
847
- }
848
- if (options === null || options === void 0 ? void 0 : options.shouldKillProcess) {
849
- process.exit(options.killWithErrorCode ? 1 : 0);
850
- }
851
- };
852
- };
853
- process.on("exit", makeExitHandler());
854
- process.on("SIGINT", makeExitHandler({
855
- shouldKillProcess: true,
856
- killWithErrorCode: false
857
- }));
858
- process.on("SIGUSR1", makeExitHandler({
859
- shouldKillProcess: true,
860
- killWithErrorCode: false
861
- }));
862
- process.on("SIGUSR2", makeExitHandler({
863
- shouldKillProcess: true,
864
- killWithErrorCode: false
865
- }));
866
- process.on("uncaughtException", makeExitHandler({
867
- shouldKillProcess: true,
868
- killWithErrorCode: true
869
- }));
870
- // src/cli/utils/preview/hot-reloading/create-dependency-graph.ts
871
- var readAllFilesInsideDirectory = function() {
872
- var _ref = _async_to_generator(function(directory) {
873
- var allFilePaths, topLevelDirents, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, dirent, pathToDirent, _, err;
874
- return _ts_generator(this, function(_state) {
875
- switch(_state.label){
876
- case 0:
877
- allFilePaths = [];
878
- return [
879
- 4,
880
- import_node_fs3.promises.readdir(directory, {
881
- withFileTypes: true
882
- })
883
- ];
884
- case 1:
885
- topLevelDirents = _state.sent();
886
- _iteratorAbruptCompletion = false, _didIteratorError = false;
887
- _state.label = 2;
888
- case 2:
889
- _state.trys.push([
890
- 2,
891
- 9,
892
- 10,
893
- 15
894
- ]);
895
- _iterator = _async_iterator(topLevelDirents);
896
- _state.label = 3;
897
- case 3:
898
- return [
899
- 4,
900
- _iterator.next()
901
- ];
902
- case 4:
903
- if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [
904
- 3,
905
- 8
906
- ];
907
- _value = _step.value;
908
- dirent = _value;
909
- pathToDirent = import_node_path4.default.join(directory, dirent.name);
910
- if (!dirent.isDirectory()) return [
911
- 3,
912
- 6
913
- ];
914
- _ = allFilePaths.concat;
915
- return [
916
- 4,
917
- readAllFilesInsideDirectory(pathToDirent)
918
- ];
919
- case 5:
920
- allFilePaths = _.apply(allFilePaths, [
921
- _state.sent()
922
- ]);
923
- return [
924
- 3,
925
- 7
926
- ];
927
- case 6:
928
- allFilePaths.push(pathToDirent);
929
- _state.label = 7;
930
- case 7:
931
- _iteratorAbruptCompletion = false;
932
- return [
933
- 3,
934
- 3
935
- ];
936
- case 8:
937
- return [
938
- 3,
939
- 15
940
- ];
941
- case 9:
942
- err = _state.sent();
943
- _didIteratorError = true;
944
- _iteratorError = err;
945
- return [
946
- 3,
947
- 15
948
- ];
949
- case 10:
950
- _state.trys.push([
951
- 10,
952
- ,
953
- 13,
954
- 14
955
- ]);
956
- if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [
957
- 3,
958
- 12
959
- ];
960
- return [
961
- 4,
962
- _iterator.return()
963
- ];
964
- case 11:
965
- _state.sent();
966
- _state.label = 12;
967
- case 12:
968
- return [
969
- 3,
970
- 14
971
- ];
972
- case 13:
973
- if (_didIteratorError) {
974
- throw _iteratorError;
975
- }
976
- return [
977
- 7
978
- ];
979
- case 14:
980
- return [
981
- 7
982
- ];
983
- case 15:
984
- return [
985
- 2,
986
- allFilePaths
987
- ];
988
- }
989
- });
990
- });
991
- return function readAllFilesInsideDirectory(directory) {
992
- return _ref.apply(this, arguments);
993
- };
994
- }();
995
- var isJavascriptModule = function(filePath) {
996
- var extensionName = import_node_path4.default.extname(filePath);
997
- return [
998
- ".js",
999
- ".ts",
1000
- ".jsx",
1001
- ".tsx",
1002
- ".mjs",
1003
- ".cjs"
1004
- ].includes(extensionName);
1005
- };
1006
- var checkFileExtensionsUntilItExists = function(pathWithoutExtension) {
1007
- if ((0, import_node_fs3.existsSync)("".concat(pathWithoutExtension, ".ts"))) {
1008
- return "".concat(pathWithoutExtension, ".ts");
1009
- } else if ((0, import_node_fs3.existsSync)("".concat(pathWithoutExtension, ".tsx"))) {
1010
- return "".concat(pathWithoutExtension, ".tsx");
1011
- } else if ((0, import_node_fs3.existsSync)("".concat(pathWithoutExtension, ".js"))) {
1012
- return "".concat(pathWithoutExtension, ".js");
1013
- } else if ((0, import_node_fs3.existsSync)("".concat(pathWithoutExtension, ".jsx"))) {
1014
- return "".concat(pathWithoutExtension, ".jsx");
1015
- } else if ((0, import_node_fs3.existsSync)("".concat(pathWithoutExtension, ".mjs"))) {
1016
- return "".concat(pathWithoutExtension, ".mjs");
1017
- } else if ((0, import_node_fs3.existsSync)("".concat(pathWithoutExtension, ".cjs"))) {
1018
- return "".concat(pathWithoutExtension, ".cjs");
1019
- }
1020
- };
1021
- var createDependencyGraph = function() {
1022
- var _ref = _async_to_generator(function(directory) {
1023
- var filePaths, modulePaths, graph, getDependencyPaths, updateModuleDependenciesInGraph, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, filePath, err, removeModuleFromGraph;
1024
- return _ts_generator(this, function(_state) {
1025
- switch(_state.label){
1026
- case 0:
1027
- return [
1028
- 4,
1029
- readAllFilesInsideDirectory(directory)
1030
- ];
1031
- case 1:
1032
- filePaths = _state.sent();
1033
- modulePaths = filePaths.filter(isJavascriptModule);
1034
- graph = Object.fromEntries(modulePaths.map(function(path12) {
1035
- return [
1036
- path12,
1037
- {
1038
- path: path12,
1039
- dependencyPaths: [],
1040
- dependentPaths: [],
1041
- moduleDependencies: []
1042
- }
1043
- ];
1044
- }));
1045
- getDependencyPaths = function() {
1046
- var _ref = _async_to_generator(function(filePath) {
1047
- var contents, importedPaths, importedPathsRelativeToDirectory, moduleDependencies, nonNodeModuleImportPathsRelativeToDirectory;
1048
- return _ts_generator(this, function(_state) {
1049
- switch(_state.label){
1050
- case 0:
1051
- return [
1052
- 4,
1053
- import_node_fs3.promises.readFile(filePath, "utf8")
1054
- ];
1055
- case 1:
1056
- contents = _state.sent();
1057
- importedPaths = getImportedModules(contents);
1058
- importedPathsRelativeToDirectory = importedPaths.map(function(dependencyPath) {
1059
- var isModulePath = !dependencyPath.startsWith(".");
1060
- if (!isModulePath && !import_node_path4.default.isAbsolute(dependencyPath)) {
1061
- var pathToDependencyFromDirectory = import_node_path4.default.resolve(/*
1062
- path.resolve resolves paths differently from what imports on javascript do.
1063
-
1064
- So if we wouldn't do this, for an email at "/path/to/email.tsx" with a dependecy path of "./other-email"
1065
- would end up going into /path/to/email.tsx/other-email instead of /path/to/other-email which is the
1066
- one the import is meant to go to
1067
- */ import_node_path4.default.dirname(filePath), dependencyPath);
1068
- var isDirectory = false;
1069
- try {
1070
- isDirectory = (0, import_node_fs3.statSync)(pathToDependencyFromDirectory).isDirectory();
1071
- } catch (_) {}
1072
- if (isDirectory) {
1073
- var pathToSubDirectory = pathToDependencyFromDirectory;
1074
- var pathWithExtension = checkFileExtensionsUntilItExists("".concat(pathToSubDirectory, "/index"));
1075
- if (pathWithExtension) {
1076
- pathToDependencyFromDirectory = pathWithExtension;
1077
- } else if (!isRunningBuilt) {
1078
- console.warn("Could not find index file for directory at ".concat(pathToDependencyFromDirectory, ". This is probably going to cause issues with both hot reloading and your code."));
1079
- }
1080
- }
1081
- if (!isJavascriptModule(pathToDependencyFromDirectory)) {
1082
- var pathWithExtension1 = checkFileExtensionsUntilItExists(pathToDependencyFromDirectory);
1083
- if (pathWithExtension1) {
1084
- pathToDependencyFromDirectory = pathWithExtension1;
1085
- } else if (!isRunningBuilt) {
1086
- console.warn("Could not determine the file extension for the file at ".concat(pathWithExtension1));
1087
- }
1088
- }
1089
- return pathToDependencyFromDirectory;
1090
- } else {
1091
- return dependencyPath;
1092
- }
1093
- });
1094
- moduleDependencies = importedPathsRelativeToDirectory.filter(function(dependencyPath) {
1095
- return !dependencyPath.startsWith(".") && !import_node_path4.default.isAbsolute(dependencyPath);
1096
- });
1097
- nonNodeModuleImportPathsRelativeToDirectory = importedPathsRelativeToDirectory.filter(function(dependencyPath) {
1098
- return dependencyPath.startsWith(".") || import_node_path4.default.isAbsolute(dependencyPath);
1099
- });
1100
- return [
1101
- 2,
1102
- {
1103
- dependencyPaths: nonNodeModuleImportPathsRelativeToDirectory,
1104
- moduleDependencies: moduleDependencies
1105
- }
1106
- ];
1107
- }
1108
- });
1109
- });
1110
- return function getDependencyPaths(filePath) {
1111
- return _ref.apply(this, arguments);
1112
- };
1113
- }();
1114
- updateModuleDependenciesInGraph = function() {
1115
- var _ref = _async_to_generator(function(moduleFilePath) {
1116
- var _graph_moduleFilePath, module2, _ref, moduleDependencies, newDependencyPaths, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, dependencyPath, dependencyModule, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, dependencyPath1, dependencyModule1;
1117
- return _ts_generator(this, function(_state) {
1118
- switch(_state.label){
1119
- case 0:
1120
- module2 = (_graph_moduleFilePath = graph[moduleFilePath]) !== null && _graph_moduleFilePath !== void 0 ? _graph_moduleFilePath : {
1121
- path: moduleFilePath,
1122
- dependencyPaths: [],
1123
- dependentPaths: [],
1124
- moduleDependencies: []
1125
- };
1126
- return [
1127
- 4,
1128
- getDependencyPaths(moduleFilePath)
1129
- ];
1130
- case 1:
1131
- _ref = _state.sent(), moduleDependencies = _ref.moduleDependencies, newDependencyPaths = _ref.dependencyPaths;
1132
- module2.moduleDependencies = moduleDependencies;
1133
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1134
- try {
1135
- for(_iterator = module2.dependencyPaths[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1136
- dependencyPath = _step.value;
1137
- if (newDependencyPaths.includes(dependencyPath)) continue;
1138
- dependencyModule = graph[dependencyPath];
1139
- if (dependencyModule !== void 0) {
1140
- dependencyModule.dependentPaths = dependencyModule.dependentPaths.filter(function(dependentPath) {
1141
- return dependentPath !== moduleFilePath;
1142
- });
1143
- }
1144
- }
1145
- } catch (err) {
1146
- _didIteratorError = true;
1147
- _iteratorError = err;
1148
- } finally{
1149
- try {
1150
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1151
- _iterator.return();
1152
- }
1153
- } finally{
1154
- if (_didIteratorError) {
1155
- throw _iteratorError;
1156
- }
1157
- }
1158
- }
1159
- module2.dependencyPaths = newDependencyPaths;
1160
- _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1161
- try {
1162
- for(_iterator1 = newDependencyPaths[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1163
- dependencyPath1 = _step1.value;
1164
- dependencyModule1 = graph[dependencyPath1];
1165
- if (dependencyModule1 !== void 0 && !dependencyModule1.dependentPaths.includes(moduleFilePath)) {
1166
- dependencyModule1.dependentPaths.push(moduleFilePath);
1167
- } else {
1168
- graph[dependencyPath1] = {
1169
- path: dependencyPath1,
1170
- moduleDependencies: [],
1171
- dependencyPaths: [],
1172
- dependentPaths: [
1173
- moduleFilePath
1174
- ]
1175
- };
1176
- }
1177
- }
1178
- } catch (err) {
1179
- _didIteratorError1 = true;
1180
- _iteratorError1 = err;
1181
- } finally{
1182
- try {
1183
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1184
- _iterator1.return();
1185
- }
1186
- } finally{
1187
- if (_didIteratorError1) {
1188
- throw _iteratorError1;
1189
- }
1190
- }
1191
- }
1192
- graph[moduleFilePath] = module2;
1193
- return [
1194
- 2
1195
- ];
1196
- }
1197
- });
1198
- });
1199
- return function updateModuleDependenciesInGraph(moduleFilePath) {
1200
- return _ref.apply(this, arguments);
1201
- };
1202
- }();
1203
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1204
- _state.label = 2;
1205
- case 2:
1206
- _state.trys.push([
1207
- 2,
1208
- 7,
1209
- 8,
1210
- 9
1211
- ]);
1212
- _iterator = modulePaths[Symbol.iterator]();
1213
- _state.label = 3;
1214
- case 3:
1215
- if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
1216
- 3,
1217
- 6
1218
- ];
1219
- filePath = _step.value;
1220
- return [
1221
- 4,
1222
- updateModuleDependenciesInGraph(filePath)
1223
- ];
1224
- case 4:
1225
- _state.sent();
1226
- _state.label = 5;
1227
- case 5:
1228
- _iteratorNormalCompletion = true;
1229
- return [
1230
- 3,
1231
- 3
1232
- ];
1233
- case 6:
1234
- return [
1235
- 3,
1236
- 9
1237
- ];
1238
- case 7:
1239
- err = _state.sent();
1240
- _didIteratorError = true;
1241
- _iteratorError = err;
1242
- return [
1243
- 3,
1244
- 9
1245
- ];
1246
- case 8:
1247
- try {
1248
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1249
- _iterator.return();
1250
- }
1251
- } finally{
1252
- if (_didIteratorError) {
1253
- throw _iteratorError;
1254
- }
1255
- }
1256
- return [
1257
- 7
1258
- ];
1259
- case 9:
1260
- removeModuleFromGraph = function(filePath) {
1261
- var module2 = graph[filePath];
1262
- if (module2) {
1263
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1264
- try {
1265
- for(var _iterator = module2.dependencyPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1266
- var dependencyPath = _step.value;
1267
- if (graph[dependencyPath]) {
1268
- graph[dependencyPath].dependentPaths = graph[dependencyPath].dependentPaths.filter(function(dependentPath) {
1269
- return dependentPath !== filePath;
1270
- });
1271
- }
1272
- }
1273
- } catch (err) {
1274
- _didIteratorError = true;
1275
- _iteratorError = err;
1276
- } finally{
1277
- try {
1278
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1279
- _iterator.return();
1280
- }
1281
- } finally{
1282
- if (_didIteratorError) {
1283
- throw _iteratorError;
1284
- }
1285
- }
1286
- }
1287
- delete graph[filePath];
1288
- }
1289
- };
1290
- return [
1291
- 2,
1292
- [
1293
- graph,
1294
- function() {
1295
- var _ref = _async_to_generator(function(event, pathToModified) {
1296
- var filesInsideAddedDirectory, modulesInsideAddedDirectory, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, filePath, err, filesInsideDeletedDirectory, modulesInsideDeletedDirectory, _iteratorAbruptCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _value1, filePath1, err1;
1297
- return _ts_generator(this, function(_state) {
1298
- switch(_state.label){
1299
- case 0:
1300
- switch(event){
1301
- case "change":
1302
- return [
1303
- 3,
1304
- 1
1305
- ];
1306
- case "add":
1307
- return [
1308
- 3,
1309
- 4
1310
- ];
1311
- case "addDir":
1312
- return [
1313
- 3,
1314
- 7
1315
- ];
1316
- case "unlink":
1317
- return [
1318
- 3,
1319
- 22
1320
- ];
1321
- case "unlinkDir":
1322
- return [
1323
- 3,
1324
- 23
1325
- ];
1326
- }
1327
- return [
1328
- 3,
1329
- 37
1330
- ];
1331
- case 1:
1332
- if (!isJavascriptModule(pathToModified)) return [
1333
- 3,
1334
- 3
1335
- ];
1336
- return [
1337
- 4,
1338
- updateModuleDependenciesInGraph(pathToModified)
1339
- ];
1340
- case 2:
1341
- _state.sent();
1342
- _state.label = 3;
1343
- case 3:
1344
- return [
1345
- 3,
1346
- 37
1347
- ];
1348
- case 4:
1349
- if (!isJavascriptModule(pathToModified)) return [
1350
- 3,
1351
- 6
1352
- ];
1353
- return [
1354
- 4,
1355
- updateModuleDependenciesInGraph(pathToModified)
1356
- ];
1357
- case 5:
1358
- _state.sent();
1359
- _state.label = 6;
1360
- case 6:
1361
- return [
1362
- 3,
1363
- 37
1364
- ];
1365
- case 7:
1366
- return [
1367
- 4,
1368
- readAllFilesInsideDirectory(pathToModified)
1369
- ];
1370
- case 8:
1371
- filesInsideAddedDirectory = _state.sent();
1372
- modulesInsideAddedDirectory = filesInsideAddedDirectory.filter(isJavascriptModule);
1373
- _iteratorAbruptCompletion = false, _didIteratorError = false;
1374
- _state.label = 9;
1375
- case 9:
1376
- _state.trys.push([
1377
- 9,
1378
- 15,
1379
- 16,
1380
- 21
1381
- ]);
1382
- _iterator = _async_iterator(modulesInsideAddedDirectory);
1383
- _state.label = 10;
1384
- case 10:
1385
- return [
1386
- 4,
1387
- _iterator.next()
1388
- ];
1389
- case 11:
1390
- if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [
1391
- 3,
1392
- 14
1393
- ];
1394
- _value = _step.value;
1395
- filePath = _value;
1396
- return [
1397
- 4,
1398
- updateModuleDependenciesInGraph(filePath)
1399
- ];
1400
- case 12:
1401
- _state.sent();
1402
- _state.label = 13;
1403
- case 13:
1404
- _iteratorAbruptCompletion = false;
1405
- return [
1406
- 3,
1407
- 10
1408
- ];
1409
- case 14:
1410
- return [
1411
- 3,
1412
- 21
1413
- ];
1414
- case 15:
1415
- err = _state.sent();
1416
- _didIteratorError = true;
1417
- _iteratorError = err;
1418
- return [
1419
- 3,
1420
- 21
1421
- ];
1422
- case 16:
1423
- _state.trys.push([
1424
- 16,
1425
- ,
1426
- 19,
1427
- 20
1428
- ]);
1429
- if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [
1430
- 3,
1431
- 18
1432
- ];
1433
- return [
1434
- 4,
1435
- _iterator.return()
1436
- ];
1437
- case 17:
1438
- _state.sent();
1439
- _state.label = 18;
1440
- case 18:
1441
- return [
1442
- 3,
1443
- 20
1444
- ];
1445
- case 19:
1446
- if (_didIteratorError) {
1447
- throw _iteratorError;
1448
- }
1449
- return [
1450
- 7
1451
- ];
1452
- case 20:
1453
- return [
1454
- 7
1455
- ];
1456
- case 21:
1457
- return [
1458
- 3,
1459
- 37
1460
- ];
1461
- case 22:
1462
- if (isJavascriptModule(pathToModified)) {
1463
- removeModuleFromGraph(pathToModified);
1464
- }
1465
- return [
1466
- 3,
1467
- 37
1468
- ];
1469
- case 23:
1470
- return [
1471
- 4,
1472
- readAllFilesInsideDirectory(pathToModified)
1473
- ];
1474
- case 24:
1475
- filesInsideDeletedDirectory = _state.sent();
1476
- modulesInsideDeletedDirectory = filesInsideDeletedDirectory.filter(isJavascriptModule);
1477
- _iteratorAbruptCompletion1 = false, _didIteratorError1 = false;
1478
- _state.label = 25;
1479
- case 25:
1480
- _state.trys.push([
1481
- 25,
1482
- 30,
1483
- 31,
1484
- 36
1485
- ]);
1486
- _iterator1 = _async_iterator(modulesInsideDeletedDirectory);
1487
- _state.label = 26;
1488
- case 26:
1489
- return [
1490
- 4,
1491
- _iterator1.next()
1492
- ];
1493
- case 27:
1494
- if (!(_iteratorAbruptCompletion1 = !(_step1 = _state.sent()).done)) return [
1495
- 3,
1496
- 29
1497
- ];
1498
- _value1 = _step1.value;
1499
- filePath1 = _value1;
1500
- removeModuleFromGraph(filePath1);
1501
- _state.label = 28;
1502
- case 28:
1503
- _iteratorAbruptCompletion1 = false;
1504
- return [
1505
- 3,
1506
- 26
1507
- ];
1508
- case 29:
1509
- return [
1510
- 3,
1511
- 36
1512
- ];
1513
- case 30:
1514
- err1 = _state.sent();
1515
- _didIteratorError1 = true;
1516
- _iteratorError1 = err1;
1517
- return [
1518
- 3,
1519
- 36
1520
- ];
1521
- case 31:
1522
- _state.trys.push([
1523
- 31,
1524
- ,
1525
- 34,
1526
- 35
1527
- ]);
1528
- if (!(_iteratorAbruptCompletion1 && _iterator1.return != null)) return [
1529
- 3,
1530
- 33
1531
- ];
1532
- return [
1533
- 4,
1534
- _iterator1.return()
1535
- ];
1536
- case 32:
1537
- _state.sent();
1538
- _state.label = 33;
1539
- case 33:
1540
- return [
1541
- 3,
1542
- 35
1543
- ];
1544
- case 34:
1545
- if (_didIteratorError1) {
1546
- throw _iteratorError1;
1547
- }
1548
- return [
1549
- 7
1550
- ];
1551
- case 35:
1552
- return [
1553
- 7
1554
- ];
1555
- case 36:
1556
- return [
1557
- 3,
1558
- 37
1559
- ];
1560
- case 37:
1561
- return [
1562
- 2
1563
- ];
1564
- }
1565
- });
1566
- });
1567
- return function(event, pathToModified) {
1568
- return _ref.apply(this, arguments);
1569
- };
1570
- }(),
1571
- {
1572
- resolveDependentsOf: function resolveDependentsOf(pathToModule) {
1573
- var moduleEntry = graph[pathToModule];
1574
- var dependentPaths = [];
1575
- if (moduleEntry) {
1576
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1577
- try {
1578
- for(var _iterator = moduleEntry.dependentPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1579
- var dependentPath = _step.value;
1580
- var _dependentPaths;
1581
- var dependentsOfDependent = resolveDependentsOf(dependentPath);
1582
- (_dependentPaths = dependentPaths).push.apply(_dependentPaths, _to_consumable_array(dependentsOfDependent));
1583
- dependentPaths.push(dependentPath);
1584
- }
1585
- } catch (err) {
1586
- _didIteratorError = true;
1587
- _iteratorError = err;
1588
- } finally{
1589
- try {
1590
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1591
- _iterator.return();
1592
- }
1593
- } finally{
1594
- if (_didIteratorError) {
1595
- throw _iteratorError;
1596
- }
1597
- }
1598
- }
1599
- }
1600
- return dependentPaths;
1601
- }
1602
- }
1603
- ]
1604
- ];
1605
- }
1606
- });
1607
- });
1608
- return function createDependencyGraph(directory) {
1609
- return _ref.apply(this, arguments);
1610
- };
1611
- }();
1612
- // src/cli/utils/preview/hot-reloading/setup-hot-reloading.ts
1613
- var setupHotreloading = function() {
1614
- var _ref = _async_to_generator(function(devServer2, emailDirRelativePath) {
1615
- var clients, io, changes, reload, absolutePathToEmailsDirectory, _ref, dependencyGraph, updateDependencyGraph, resolveDependentsOf, watcher, getFilesOutsideEmailsDirectory, filesOutsideEmailsDirectory, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, p, exit;
1616
- return _ts_generator(this, function(_state) {
1617
- switch(_state.label){
1618
- case 0:
1619
- clients = [];
1620
- io = new import_socket.Server(devServer2);
1621
- io.on("connection", function(client) {
1622
- clients.push(client);
1623
- client.on("disconnect", function() {
1624
- clients = clients.filter(function(item) {
1625
- return item !== client;
1626
- });
1627
- });
1628
- });
1629
- changes = [];
1630
- reload = (0, import_debounce.default)(function() {
1631
- clients.forEach(function(client) {
1632
- client.emit("reload", changes);
1633
- });
1634
- changes = [];
1635
- }, 150);
1636
- absolutePathToEmailsDirectory = import_node_path5.default.resolve(process.cwd(), emailDirRelativePath);
1637
- return [
1638
- 4,
1639
- createDependencyGraph(absolutePathToEmailsDirectory)
1640
- ];
1641
- case 1:
1642
- _ref = _sliced_to_array.apply(void 0, [
1643
- _state.sent(),
1644
- 3
1645
- ]), dependencyGraph = _ref[0], updateDependencyGraph = _ref[1], resolveDependentsOf = _ref[2].resolveDependentsOf;
1646
- watcher = (0, import_chokidar.watch)(emailDirRelativePath, {
1647
- ignoreInitial: true,
1648
- cwd: process.cwd(),
1649
- // eslint-disable-next-line prefer-named-capture-group
1650
- ignored: /(^|[/\\])\../
1651
- });
1652
- getFilesOutsideEmailsDirectory = function() {
1653
- return Object.keys(dependencyGraph).filter(function(p) {
1654
- return import_node_path5.default.relative(absolutePathToEmailsDirectory, p).startsWith("..");
1655
- });
1656
- };
1657
- filesOutsideEmailsDirectory = getFilesOutsideEmailsDirectory();
1658
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1659
- try {
1660
- for(_iterator = filesOutsideEmailsDirectory[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1661
- p = _step.value;
1662
- watcher.add(p);
1663
- }
1664
- } catch (err) {
1665
- _didIteratorError = true;
1666
- _iteratorError = err;
1667
- } finally{
1668
- try {
1669
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1670
- _iterator.return();
1671
- }
1672
- } finally{
1673
- if (_didIteratorError) {
1674
- throw _iteratorError;
1675
- }
1676
- }
1677
- }
1678
- exit = function() {
1679
- var _ref = _async_to_generator(function() {
1680
- return _ts_generator(this, function(_state) {
1681
- switch(_state.label){
1682
- case 0:
1683
- return [
1684
- 4,
1685
- watcher.close()
1686
- ];
1687
- case 1:
1688
- _state.sent();
1689
- return [
1690
- 2
1691
- ];
1692
- }
1693
- });
1694
- });
1695
- return function exit() {
1696
- return _ref.apply(this, arguments);
1697
- };
1698
- }();
1699
- process.on("SIGINT", exit);
1700
- process.on("uncaughtException", exit);
1701
- watcher.on("all", function() {
1702
- var _ref = _async_to_generator(function(event, relativePathToChangeTarget) {
1703
- var file, pathToChangeTarget, newFilesOutsideEmailsDirectory, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, p, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, p1, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, dependentPath;
1704
- return _ts_generator(this, function(_state) {
1705
- switch(_state.label){
1706
- case 0:
1707
- file = relativePathToChangeTarget.split(import_node_path5.default.sep);
1708
- if (file.length === 0) {
1709
- return [
1710
- 2
1711
- ];
1712
- }
1713
- pathToChangeTarget = import_node_path5.default.resolve(process.cwd(), relativePathToChangeTarget);
1714
- return [
1715
- 4,
1716
- updateDependencyGraph(event, pathToChangeTarget)
1717
- ];
1718
- case 1:
1719
- _state.sent();
1720
- newFilesOutsideEmailsDirectory = getFilesOutsideEmailsDirectory();
1721
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1722
- try {
1723
- for(_iterator = filesOutsideEmailsDirectory[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1724
- p = _step.value;
1725
- if (!newFilesOutsideEmailsDirectory.includes(p)) {
1726
- watcher.unwatch(p);
1727
- }
1728
- }
1729
- } catch (err) {
1730
- _didIteratorError = true;
1731
- _iteratorError = err;
1732
- } finally{
1733
- try {
1734
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1735
- _iterator.return();
1736
- }
1737
- } finally{
1738
- if (_didIteratorError) {
1739
- throw _iteratorError;
1740
- }
1741
- }
1742
- }
1743
- _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1744
- try {
1745
- for(_iterator1 = newFilesOutsideEmailsDirectory[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1746
- p1 = _step1.value;
1747
- if (!filesOutsideEmailsDirectory.includes(p1)) {
1748
- watcher.add(p1);
1749
- }
1750
- }
1751
- } catch (err) {
1752
- _didIteratorError1 = true;
1753
- _iteratorError1 = err;
1754
- } finally{
1755
- try {
1756
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1757
- _iterator1.return();
1758
- }
1759
- } finally{
1760
- if (_didIteratorError1) {
1761
- throw _iteratorError1;
1762
- }
1763
- }
1764
- }
1765
- filesOutsideEmailsDirectory = newFilesOutsideEmailsDirectory;
1766
- changes.push({
1767
- event: event,
1768
- filename: relativePathToChangeTarget
1769
- });
1770
- _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
1771
- try {
1772
- for(_iterator2 = resolveDependentsOf(pathToChangeTarget)[Symbol.iterator](); !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
1773
- dependentPath = _step2.value;
1774
- changes.push({
1775
- event: "change",
1776
- filename: import_node_path5.default.relative(absolutePathToEmailsDirectory, dependentPath)
1777
- });
1778
- }
1779
- } catch (err) {
1780
- _didIteratorError2 = true;
1781
- _iteratorError2 = err;
1782
- } finally{
1783
- try {
1784
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
1785
- _iterator2.return();
1786
- }
1787
- } finally{
1788
- if (_didIteratorError2) {
1789
- throw _iteratorError2;
1790
- }
1791
- }
1792
- }
1793
- reload();
1794
- return [
1795
- 2
1796
- ];
1797
- }
1798
- });
1799
- });
1800
- return function(event, relativePathToChangeTarget) {
1801
- return _ref.apply(this, arguments);
1802
- };
1803
- }());
1804
- return [
1805
- 2,
1806
- watcher
1807
- ];
1808
- }
1809
- });
1810
- });
1811
- return function setupHotreloading(devServer2, emailDirRelativePath) {
1812
- return _ref.apply(this, arguments);
1813
- };
1814
- }();
1815
- // src/cli/commands/dev.ts
1816
- var dev = function() {
1817
- var _ref = _async_to_generator(function(param) {
1818
- var emailsDirRelativePath, port, devServer2, error;
1819
- return _ts_generator(this, function(_state) {
1820
- switch(_state.label){
1821
- case 0:
1822
- emailsDirRelativePath = param.dir, port = param.port;
1823
- _state.label = 1;
1824
- case 1:
1825
- _state.trys.push([
1826
- 1,
1827
- 4,
1828
- ,
1829
- 5
1830
- ]);
1831
- if (!import_node_fs4.default.existsSync(emailsDirRelativePath)) {
1832
- throw new Error("Missing ".concat(emailsDirRelativePath, " folder"));
1833
- }
1834
- return [
1835
- 4,
1836
- startDevServer(emailsDirRelativePath, emailsDirRelativePath, // defaults to ./emails/static for the static files that are served to the preview
1837
- parseInt(port))
1838
- ];
1839
- case 2:
1840
- devServer2 = _state.sent();
1841
- return [
1842
- 4,
1843
- setupHotreloading(devServer2, emailsDirRelativePath)
1844
- ];
1845
- case 3:
1846
- _state.sent();
1847
- return [
1848
- 3,
1849
- 5
1850
- ];
1851
- case 4:
1852
- error = _state.sent();
1853
- console.log(error);
1854
- process.exit(1);
1855
- return [
1856
- 3,
1857
- 5
1858
- ];
1859
- case 5:
1860
- return [
1861
- 2
1862
- ];
1863
- }
1864
- });
1865
- });
1866
- return function dev(_) {
1867
- return _ref.apply(this, arguments);
1868
- };
1869
- }();
1870
- // src/cli/commands/export.ts
1871
- var import_node_fs7 = __toESM(require("fs"));
1872
- var import_node_path8 = __toESM(require("path"));
1873
- var import_glob = require("glob");
1874
- var import_esbuild = require("esbuild");
1875
- var import_ora2 = __toESM(require("ora"));
1876
- var import_log_symbols2 = __toESM(require("log-symbols"));
1877
- var import_normalize_path = __toESM(require("normalize-path"));
1878
- // src/actions/get-emails-directory-metadata.ts
1879
- var import_node_fs5 = __toESM(require("fs"));
1880
- var import_node_path6 = __toESM(require("path"));
1881
- var isFileAnEmail = function(fullPath) {
1882
- var stat = import_node_fs5.default.statSync(fullPath);
1883
- if (stat.isDirectory()) return false;
1884
- var ext = import_node_path6.default.parse(fullPath).ext;
1885
- if (![
1886
- ".js",
1887
- ".tsx",
1888
- ".jsx"
1889
- ].includes(ext)) return false;
1890
- if (!import_node_fs5.default.existsSync(fullPath)) {
1891
- return false;
1892
- }
1893
- var fileContents = import_node_fs5.default.readFileSync(fullPath, "utf8");
1894
- return /\bexport\s+default\b/gm.test(fileContents);
1895
- };
1896
- var mergeDirectoriesWithSubDirectories = function(emailsDirectoryMetadata) {
1897
- var currentResultingMergedDirectory = emailsDirectoryMetadata;
1898
- while(currentResultingMergedDirectory.emailFilenames.length === 0 && currentResultingMergedDirectory.subDirectories.length === 1){
1899
- var onlySubDirectory = currentResultingMergedDirectory.subDirectories[0];
1900
- currentResultingMergedDirectory = {
1901
- subDirectories: onlySubDirectory.subDirectories,
1902
- emailFilenames: onlySubDirectory.emailFilenames,
1903
- absolutePath: onlySubDirectory.absolutePath,
1904
- directoryName: import_node_path6.default.join(currentResultingMergedDirectory.directoryName, onlySubDirectory.directoryName)
1905
- };
1906
- }
1907
- return currentResultingMergedDirectory;
1908
- };
1909
- var getEmailsDirectoryMetadata = function() {
1910
- var _ref = _async_to_generator(function(absolutePathToEmailsDirectory) {
1911
- var keepFileExtensions, isSubDirectory, dirents, emailFilenames, subDirectories, emailsMetadata;
1912
- var _arguments = arguments;
1913
- return _ts_generator(this, function(_state) {
1914
- switch(_state.label){
1915
- case 0:
1916
- keepFileExtensions = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : false, isSubDirectory = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : false;
1917
- if (!import_node_fs5.default.existsSync(absolutePathToEmailsDirectory)) return [
1918
- 2
1919
- ];
1920
- return [
1921
- 4,
1922
- import_node_fs5.default.promises.readdir(absolutePathToEmailsDirectory, {
1923
- withFileTypes: true
1924
- })
1925
- ];
1926
- case 1:
1927
- dirents = _state.sent();
1928
- emailFilenames = dirents.filter(function(dirent) {
1929
- return isFileAnEmail(import_node_path6.default.join(absolutePathToEmailsDirectory, dirent.name));
1930
- }).map(function(dirent) {
1931
- return keepFileExtensions ? dirent.name : dirent.name.replace(import_node_path6.default.extname(dirent.name), "");
1932
- });
1933
- return [
1934
- 4,
1935
- Promise.all(dirents.filter(function(dirent) {
1936
- return dirent.isDirectory() && !dirent.name.startsWith("_") && dirent.name !== "static";
1937
- }).map(function(dirent) {
1938
- return getEmailsDirectoryMetadata(import_node_path6.default.join(absolutePathToEmailsDirectory, dirent.name), keepFileExtensions, true);
1939
- }))
1940
- ];
1941
- case 2:
1942
- subDirectories = _state.sent();
1943
- emailsMetadata = {
1944
- absolutePath: absolutePathToEmailsDirectory,
1945
- directoryName: absolutePathToEmailsDirectory.split(import_node_path6.default.sep).pop(),
1946
- emailFilenames: emailFilenames,
1947
- subDirectories: subDirectories
1948
- };
1949
- return [
1950
- 2,
1951
- isSubDirectory ? mergeDirectoriesWithSubDirectories(emailsMetadata) : emailsMetadata
1952
- ];
1953
- }
1954
- });
1955
- });
1956
- return function getEmailsDirectoryMetadata(absolutePathToEmailsDirectory) {
1957
- return _ref.apply(this, arguments);
1958
- };
1959
- }();
1960
- // src/utils/esbuild/renderring-utilities-exporter.ts
1961
- var import_node_path7 = __toESM(require("path"));
1962
- var import_node_fs6 = require("fs");
1963
- // src/utils/esbuild/escape-string-for-regex.ts
1964
- function escapeStringForRegex(string) {
1965
- return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
1966
- }
1967
- // src/utils/esbuild/renderring-utilities-exporter.ts
1968
- var renderingUtilitiesExporter = function(emailTemplates) {
1969
- return {
1970
- name: "rendering-utilities-exporter",
1971
- setup: function(b) {
1972
- b.onLoad({
1973
- filter: new RegExp(emailTemplates.map(function(emailPath) {
1974
- return escapeStringForRegex(emailPath);
1975
- }).join("|"))
1976
- }, function() {
1977
- var _ref = _async_to_generator(function(param) {
1978
- var pathToFile, _tmp, _, _1;
1979
- return _ts_generator(this, function(_state) {
1980
- switch(_state.label){
1981
- case 0:
1982
- pathToFile = param.path;
1983
- _tmp = {};
1984
- _1 = (_ = "").concat;
1985
- return [
1986
- 4,
1987
- import_node_fs6.promises.readFile(pathToFile, "utf8")
1988
- ];
1989
- case 1:
1990
- return [
1991
- 2,
1992
- (_tmp.contents = _1.apply(_, [
1993
- _state.sent(),
1994
- ";\n export { renderAsync } from 'react-email-module-that-will-export-render'\n export { createElement as reactEmailCreateReactElement } from 'react';\n "
1995
- ]), _tmp.loader = import_node_path7.default.extname(pathToFile).slice(1), _tmp)
1996
- ];
1997
- }
1998
- });
1999
- });
2000
- return function(_) {
2001
- return _ref.apply(this, arguments);
2002
- };
2003
- }());
2004
- b.onResolve({
2005
- filter: /^react-email-module-that-will-export-render$/
2006
- }, function() {
2007
- var _ref = _async_to_generator(function(args) {
2008
- var options, result;
2009
- return _ts_generator(this, function(_state) {
2010
- switch(_state.label){
2011
- case 0:
2012
- options = {
2013
- kind: "import-statement",
2014
- importer: args.importer,
2015
- resolveDir: args.resolveDir,
2016
- namespace: args.namespace
2017
- };
2018
- return [
2019
- 4,
2020
- b.resolve("@react-email/render", options)
2021
- ];
2022
- case 1:
2023
- result = _state.sent();
2024
- if (result.errors.length === 0) {
2025
- return [
2026
- 2,
2027
- result
2028
- ];
2029
- }
2030
- return [
2031
- 4,
2032
- b.resolve("@react-email/components", options)
2033
- ];
2034
- case 2:
2035
- result = _state.sent();
2036
- if (result.errors.length > 0 && result.errors[0]) {
2037
- result.errors[0].text = "Failed trying to import `renderAsync` from either `@react-email/render` or `@react-email/components` to be able to render your email template.\n Maybe you don't have either of them installed?";
2038
- }
2039
- return [
2040
- 2,
2041
- result
2042
- ];
2043
- }
2044
- });
2045
- });
2046
- return function(args) {
2047
- return _ref.apply(this, arguments);
2048
- };
2049
- }());
2050
- }
2051
- };
2052
- };
2053
- // src/cli/commands/export.ts
2054
- var getEmailTemplatesFromDirectory = function(emailDirectory) {
2055
- var templatePaths = [];
2056
- emailDirectory.emailFilenames.forEach(function(filename) {
2057
- return templatePaths.push(import_node_path8.default.join(emailDirectory.absolutePath, filename));
2058
- });
2059
- emailDirectory.subDirectories.forEach(function(directory) {
2060
- var _templatePaths;
2061
- (_templatePaths = templatePaths).push.apply(_templatePaths, _to_consumable_array(getEmailTemplatesFromDirectory(directory)));
2062
- });
2063
- return templatePaths;
2064
- };
2065
- var exportTemplates = function() {
2066
- var _ref = _async_to_generator(function(pathToWhereEmailMarkupShouldBeDumped, emailsDirectoryPath, options) {
2067
- var spinner, emailsDirectoryMetadata, allTemplates, exception, buildFailure, allBuiltTemplates, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, template, emailModule, rendered, htmlPath, exception1, err, staticDirectoryPath, pathToDumpStaticFilesInto, exception2, fileTree;
2068
- return _ts_generator(this, function(_state) {
2069
- switch(_state.label){
2070
- case 0:
2071
- if (import_node_fs7.default.existsSync(pathToWhereEmailMarkupShouldBeDumped)) {
2072
- import_node_fs7.default.rmSync(pathToWhereEmailMarkupShouldBeDumped, {
2073
- recursive: true
2074
- });
2075
- }
2076
- if (!options.silent) {
2077
- spinner = (0, import_ora2.default)("Preparing files...\n").start();
2078
- closeOraOnSIGNIT(spinner);
2079
- }
2080
- return [
2081
- 4,
2082
- getEmailsDirectoryMetadata(import_node_path8.default.resolve(process.cwd(), emailsDirectoryPath), true)
2083
- ];
2084
- case 1:
2085
- emailsDirectoryMetadata = _state.sent();
2086
- if (typeof emailsDirectoryMetadata === "undefined") {
2087
- if (spinner) {
2088
- spinner.stopAndPersist({
2089
- symbol: import_log_symbols2.default.error,
2090
- text: "Could not find the directory at ".concat(emailsDirectoryPath)
2091
- });
2092
- }
2093
- return [
2094
- 2
2095
- ];
2096
- }
2097
- allTemplates = getEmailTemplatesFromDirectory(emailsDirectoryMetadata);
2098
- _state.label = 2;
2099
- case 2:
2100
- _state.trys.push([
2101
- 2,
2102
- 4,
2103
- ,
2104
- 5
2105
- ]);
2106
- return [
2107
- 4,
2108
- (0, import_esbuild.build)({
2109
- bundle: true,
2110
- entryPoints: allTemplates,
2111
- plugins: [
2112
- renderingUtilitiesExporter(allTemplates)
2113
- ],
2114
- platform: "node",
2115
- format: "cjs",
2116
- loader: {
2117
- ".js": "jsx"
2118
- },
2119
- outExtension: {
2120
- ".js": ".cjs"
2121
- },
2122
- jsx: "transform",
2123
- write: true,
2124
- outdir: pathToWhereEmailMarkupShouldBeDumped
2125
- })
2126
- ];
2127
- case 3:
2128
- _state.sent();
2129
- return [
2130
- 3,
2131
- 5
2132
- ];
2133
- case 4:
2134
- exception = _state.sent();
2135
- buildFailure = exception;
2136
- if (spinner) {
2137
- spinner.stopAndPersist({
2138
- symbol: import_log_symbols2.default.error,
2139
- text: "Failed to build emails"
2140
- });
2141
- }
2142
- console.warn(buildFailure.warnings);
2143
- console.error(buildFailure.errors);
2144
- throw new Error("esbuild bundling process for email templates failed:\n".concat(allTemplates.map(function(p) {
2145
- return "- ".concat(p);
2146
- }).join("\n")));
2147
- case 5:
2148
- if (spinner) {
2149
- spinner.succeed();
2150
- }
2151
- allBuiltTemplates = import_glob.glob.sync((0, import_normalize_path.default)("".concat(pathToWhereEmailMarkupShouldBeDumped, "/**/*.cjs")), {
2152
- absolute: true
2153
- });
2154
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
2155
- _state.label = 6;
2156
- case 6:
2157
- _state.trys.push([
2158
- 6,
2159
- 13,
2160
- 14,
2161
- 15
2162
- ]);
2163
- _iterator = allBuiltTemplates[Symbol.iterator]();
2164
- _state.label = 7;
2165
- case 7:
2166
- if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
2167
- 3,
2168
- 12
2169
- ];
2170
- template = _step.value;
2171
- _state.label = 8;
2172
- case 8:
2173
- _state.trys.push([
2174
- 8,
2175
- 10,
2176
- ,
2177
- 11
2178
- ]);
2179
- if (spinner) {
2180
- spinner.text = "rendering ".concat(template.split("/").pop());
2181
- spinner.render();
2182
- }
2183
- delete require.cache[template];
2184
- emailModule = require(template);
2185
- return [
2186
- 4,
2187
- emailModule.renderAsync(emailModule.reactEmailCreateReactElement(emailModule.default, {}), options)
2188
- ];
2189
- case 9:
2190
- rendered = _state.sent();
2191
- htmlPath = template.replace(".cjs", options.plainText ? ".txt" : ".html");
2192
- (0, import_node_fs7.writeFileSync)(htmlPath, rendered);
2193
- (0, import_node_fs7.unlinkSync)(template);
2194
- return [
2195
- 3,
2196
- 11
2197
- ];
2198
- case 10:
2199
- exception1 = _state.sent();
2200
- if (spinner) {
2201
- spinner.stopAndPersist({
2202
- symbol: import_log_symbols2.default.error,
2203
- text: "failed when rendering ".concat(template.split("/").pop())
2204
- });
2205
- }
2206
- console.error(exception1);
2207
- throw exception1;
2208
- case 11:
2209
- _iteratorNormalCompletion = true;
2210
- return [
2211
- 3,
2212
- 7
2213
- ];
2214
- case 12:
2215
- return [
2216
- 3,
2217
- 15
2218
- ];
2219
- case 13:
2220
- err = _state.sent();
2221
- _didIteratorError = true;
2222
- _iteratorError = err;
2223
- return [
2224
- 3,
2225
- 15
2226
- ];
2227
- case 14:
2228
- try {
2229
- if (!_iteratorNormalCompletion && _iterator.return != null) {
2230
- _iterator.return();
2231
- }
2232
- } finally{
2233
- if (_didIteratorError) {
2234
- throw _iteratorError;
2235
- }
2236
- }
2237
- return [
2238
- 7
2239
- ];
2240
- case 15:
2241
- if (spinner) {
2242
- spinner.succeed("Rendered all files");
2243
- spinner.text = "Copying static files";
2244
- spinner.render();
2245
- }
2246
- staticDirectoryPath = import_node_path8.default.join(emailsDirectoryPath, "static");
2247
- if (!import_node_fs7.default.existsSync(staticDirectoryPath)) return [
2248
- 3,
2249
- 20
2250
- ];
2251
- pathToDumpStaticFilesInto = import_node_path8.default.join(pathToWhereEmailMarkupShouldBeDumped, "static");
2252
- if (!import_node_fs7.default.existsSync(pathToDumpStaticFilesInto)) return [
2253
- 3,
2254
- 17
2255
- ];
2256
- return [
2257
- 4,
2258
- import_node_fs7.default.promises.rm(pathToDumpStaticFilesInto, {
2259
- recursive: true
2260
- })
2261
- ];
2262
- case 16:
2263
- _state.sent();
2264
- _state.label = 17;
2265
- case 17:
2266
- _state.trys.push([
2267
- 17,
2268
- 19,
2269
- ,
2270
- 20
2271
- ]);
2272
- return [
2273
- 4,
2274
- import_node_fs7.default.promises.cp(staticDirectoryPath, pathToDumpStaticFilesInto, {
2275
- recursive: true
2276
- })
2277
- ];
2278
- case 18:
2279
- _state.sent();
2280
- return [
2281
- 3,
2282
- 20
2283
- ];
2284
- case 19:
2285
- exception2 = _state.sent();
2286
- console.error(exception2);
2287
- if (spinner) {
2288
- spinner.stopAndPersist({
2289
- symbol: import_log_symbols2.default.error,
2290
- text: "Failed to copy static files"
2291
- });
2292
- }
2293
- throw new Error("Something went wrong while copying the file to ".concat(pathToWhereEmailMarkupShouldBeDumped, "/static, ").concat(exception2));
2294
- case 20:
2295
- if (!(spinner && !options.silent)) return [
2296
- 3,
2297
- 22
2298
- ];
2299
- spinner.succeed();
2300
- return [
2301
- 4,
2302
- tree(pathToWhereEmailMarkupShouldBeDumped, 4)
2303
- ];
2304
- case 21:
2305
- fileTree = _state.sent();
2306
- console.log(fileTree);
2307
- spinner.stopAndPersist({
2308
- symbol: import_log_symbols2.default.success,
2309
- text: "Successfully exported emails"
2310
- });
2311
- _state.label = 22;
2312
- case 22:
2313
- return [
2314
- 2
2315
- ];
2316
- }
2317
- });
2318
- });
2319
- return function exportTemplates(pathToWhereEmailMarkupShouldBeDumped, emailsDirectoryPath, options) {
2320
- return _ref.apply(this, arguments);
2321
- };
2322
- }();
2323
- // src/cli/commands/build.ts
2324
- var import_node_fs8 = __toESM(require("fs"));
2325
- var import_node_path9 = __toESM(require("path"));
2326
- var import_ora3 = __toESM(require("ora"));
2327
- var import_node_child_process = require("child_process");
2328
- var import_log_symbols3 = __toESM(require("log-symbols"));
2329
- var buildPreviewApp = function(absoluteDirectory) {
2330
- return new Promise(function(resolve2, reject) {
2331
- var nextBuild = (0, import_node_child_process.spawn)("npm", [
2332
- "run",
2333
- "build"
2334
- ], {
2335
- cwd: absoluteDirectory,
2336
- shell: true
2337
- });
2338
- nextBuild.stdout.pipe(process.stdout);
2339
- nextBuild.stderr.pipe(process.stderr);
2340
- nextBuild.on("close", function(code) {
2341
- if (code === 0) {
2342
- resolve2();
2343
- } else {
2344
- reject(new Error("Unable to build the Next app and it exited with code: ".concat(code)));
2345
- }
2346
- });
2347
- });
2348
- };
2349
- var setNextEnvironmentVariablesForBuild = function() {
2350
- var _ref = _async_to_generator(function(emailsDirRelativePath, builtPreviewAppPath) {
2351
- var envVariables, nextConfigContents;
2352
- return _ts_generator(this, function(_state) {
2353
- switch(_state.label){
2354
- case 0:
2355
- envVariables = _object_spread_props(_object_spread({}, getEnvVariablesForPreviewApp(// If we don't do normalization here, stuff like https://github.com/resend/react-email/issues/1354 happens.
2356
- import_node_path9.default.normalize(emailsDirRelativePath), "PLACEHOLDER", "PLACEHOLDER")), {
2357
- NEXT_PUBLIC_IS_BUILDING: "true"
2358
- });
2359
- nextConfigContents = "\nconst path = require('path');\n/** @type {import('next').NextConfig} */\nmodule.exports = {\n env: {\n ...".concat(JSON.stringify(envVariables), ",\n NEXT_PUBLIC_USER_PROJECT_LOCATION: path.resolve(process.cwd(), '../'),\n NEXT_PUBLIC_CLI_PACKAGE_LOCATION: process.cwd(),\n },\n // this is needed so that the code for building emails works properly\n webpack: (\n /** @type {import('webpack').Configuration & { externals: string[] }} */\n config,\n { isServer }\n ) => {\n if (isServer) {\n config.externals.push('esbuild');\n }\n\n return config;\n },\n typescript: {\n ignoreBuildErrors: true\n },\n eslint: {\n ignoreDuringBuilds: true\n },\n experimental: {\n webpackBuildWorker: true\n },\n}");
2360
- return [
2361
- 4,
2362
- import_node_fs8.default.promises.writeFile(import_node_path9.default.resolve(builtPreviewAppPath, "./next.config.js"), nextConfigContents, "utf8")
2363
- ];
2364
- case 1:
2365
- _state.sent();
2366
- return [
2367
- 2
2368
- ];
2369
- }
2370
- });
2371
- });
2372
- return function setNextEnvironmentVariablesForBuild(emailsDirRelativePath, builtPreviewAppPath) {
2373
- return _ref.apply(this, arguments);
2374
- };
2375
- }();
2376
- var getEmailSlugsFromEmailDirectory = function(emailDirectory, emailsDirectoryAbsolutePath) {
2377
- var directoryPathRelativeToEmailsDirectory = emailDirectory.absolutePath.replace(emailsDirectoryAbsolutePath, "").trim();
2378
- var slugs = [];
2379
- emailDirectory.emailFilenames.forEach(function(filename) {
2380
- return slugs.push(import_node_path9.default.join(directoryPathRelativeToEmailsDirectory, filename).split(import_node_path9.default.sep).filter(function(segment) {
2381
- return segment.length > 0;
2382
- }));
2383
- });
2384
- emailDirectory.subDirectories.forEach(function(directory) {
2385
- var _slugs;
2386
- (_slugs = slugs).push.apply(_slugs, _to_consumable_array(getEmailSlugsFromEmailDirectory(directory, emailsDirectoryAbsolutePath)));
2387
- });
2388
- return slugs;
2389
- };
2390
- var forceSSGForEmailPreviews = function() {
2391
- var _ref = _async_to_generator(function(emailsDirPath, builtPreviewAppPath) {
2392
- var emailDirectoryMetadata, parameters;
2393
- return _ts_generator(this, function(_state) {
2394
- switch(_state.label){
2395
- case 0:
2396
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2397
- return [
2398
- 4,
2399
- getEmailsDirectoryMetadata(emailsDirPath)
2400
- ];
2401
- case 1:
2402
- emailDirectoryMetadata = _state.sent();
2403
- parameters = getEmailSlugsFromEmailDirectory(emailDirectoryMetadata, emailsDirPath).map(function(slug) {
2404
- return {
2405
- slug: slug
2406
- };
2407
- });
2408
- return [
2409
- 4,
2410
- import_node_fs8.default.promises.appendFile(import_node_path9.default.resolve(builtPreviewAppPath, "./src/app/preview/[...slug]/page.tsx"), "\n\nexport function generateStaticParams() { \n return Promise.resolve(\n ".concat(JSON.stringify(parameters), "\n );\n}"), "utf8")
2411
- ];
2412
- case 2:
2413
- _state.sent();
2414
- return [
2415
- 2
2416
- ];
2417
- }
2418
- });
2419
- });
2420
- return function forceSSGForEmailPreviews(emailsDirPath, builtPreviewAppPath) {
2421
- return _ref.apply(this, arguments);
2422
- };
2423
- }();
2424
- var updatePackageJson = function() {
2425
- var _ref = _async_to_generator(function(builtPreviewAppPath) {
2426
- var packageJsonPath, packageJson, _;
2427
- return _ts_generator(this, function(_state) {
2428
- switch(_state.label){
2429
- case 0:
2430
- packageJsonPath = import_node_path9.default.resolve(builtPreviewAppPath, "./package.json");
2431
- _ = JSON.parse;
2432
- return [
2433
- 4,
2434
- import_node_fs8.default.promises.readFile(packageJsonPath, "utf8")
2435
- ];
2436
- case 1:
2437
- packageJson = _.apply(JSON, [
2438
- _state.sent()
2439
- ]);
2440
- packageJson.scripts.build = "next build";
2441
- packageJson.scripts.start = "next start";
2442
- packageJson.name = "preview-server";
2443
- delete packageJson.devDependencies["@react-email/render"];
2444
- delete packageJson.devDependencies["@react-email/components"];
2445
- packageJson.dependencies.sharp = "0.33.2";
2446
- return [
2447
- 4,
2448
- import_node_fs8.default.promises.writeFile(packageJsonPath, JSON.stringify(packageJson), "utf8")
2449
- ];
2450
- case 2:
2451
- _state.sent();
2452
- return [
2453
- 2
2454
- ];
2455
- }
2456
- });
2457
- });
2458
- return function updatePackageJson(builtPreviewAppPath) {
2459
- return _ref.apply(this, arguments);
2460
- };
2461
- }();
2462
- var npmInstall = function() {
2463
- var _ref = _async_to_generator(function(builtPreviewAppPath, packageManager) {
2464
- return _ts_generator(this, function(_state) {
2465
- return [
2466
- 2,
2467
- new Promise(function() {
2468
- var _ref = _async_to_generator(function(resolve2, reject) {
2469
- var childProc;
2470
- return _ts_generator(this, function(_state) {
2471
- childProc = (0, import_node_child_process.spawn)(packageManager, [
2472
- "install",
2473
- "--silent",
2474
- "--force"
2475
- ], {
2476
- cwd: builtPreviewAppPath,
2477
- shell: true
2478
- });
2479
- childProc.stdout.pipe(process.stdout);
2480
- childProc.stderr.pipe(process.stderr);
2481
- childProc.on("close", function(code) {
2482
- if (code === 0) {
2483
- resolve2();
2484
- } else {
2485
- reject(new Error("Unable to install the dependencies and it exited with code: ".concat(code)));
2486
- }
2487
- });
2488
- return [
2489
- 2
2490
- ];
2491
- });
2492
- });
2493
- return function(resolve2, reject) {
2494
- return _ref.apply(this, arguments);
2495
- };
2496
- }())
2497
- ];
2498
- });
2499
- });
2500
- return function npmInstall(builtPreviewAppPath, packageManager) {
2501
- return _ref.apply(this, arguments);
2502
- };
2503
- }();
2504
- var build2 = function() {
2505
- var _ref = _async_to_generator(function(param) {
2506
- var emailsDirRelativePath, packageManager, spinner, emailsDirPath, staticPath, builtPreviewAppPath, builtStaticDirectory, error;
2507
- return _ts_generator(this, function(_state) {
2508
- switch(_state.label){
2509
- case 0:
2510
- emailsDirRelativePath = param.dir, packageManager = param.packageManager;
2511
- _state.label = 1;
2512
- case 1:
2513
- _state.trys.push([
2514
- 1,
2515
- 12,
2516
- ,
2517
- 13
2518
- ]);
2519
- spinner = (0, import_ora3.default)({
2520
- text: "Starting build process...",
2521
- prefixText: " "
2522
- }).start();
2523
- closeOraOnSIGNIT(spinner);
2524
- spinner.text = "Checking if emails folder exists";
2525
- if (!import_node_fs8.default.existsSync(emailsDirRelativePath)) {
2526
- throw new Error("Missing ".concat(emailsDirRelativePath, " folder"));
2527
- }
2528
- emailsDirPath = import_node_path9.default.join(process.cwd(), emailsDirRelativePath);
2529
- staticPath = import_node_path9.default.join(emailsDirPath, "static");
2530
- builtPreviewAppPath = import_node_path9.default.join(process.cwd(), ".react-email");
2531
- if (!import_node_fs8.default.existsSync(builtPreviewAppPath)) return [
2532
- 3,
2533
- 3
2534
- ];
2535
- spinner.text = "Deleting pre-existing `.react-email` folder";
2536
- return [
2537
- 4,
2538
- import_node_fs8.default.promises.rm(builtPreviewAppPath, {
2539
- recursive: true
2540
- })
2541
- ];
2542
- case 2:
2543
- _state.sent();
2544
- _state.label = 3;
2545
- case 3:
2546
- spinner.text = "Copying preview app from CLI to `.react-email`";
2547
- return [
2548
- 4,
2549
- import_node_fs8.default.promises.cp(cliPacakgeLocation, builtPreviewAppPath, {
2550
- recursive: true,
2551
- filter: function(source) {
2552
- return !/(\/|\\)cli(\/|\\)?/.test(source) && !/(\/|\\)\.next(\/|\\)?/.test(source) && !/(\/|\\)\.turbo(\/|\\)?/.test(source) && !/(\/|\\)node_modules(\/|\\)?$/.test(source);
2553
- }
2554
- })
2555
- ];
2556
- case 4:
2557
- _state.sent();
2558
- if (!import_node_fs8.default.existsSync(staticPath)) return [
2559
- 3,
2560
- 6
2561
- ];
2562
- spinner.text = "Copying `static` folder into `.react-email/public/static`";
2563
- builtStaticDirectory = import_node_path9.default.resolve(builtPreviewAppPath, "./public/static");
2564
- return [
2565
- 4,
2566
- import_node_fs8.default.promises.cp(staticPath, builtStaticDirectory, {
2567
- recursive: true
2568
- })
2569
- ];
2570
- case 5:
2571
- _state.sent();
2572
- _state.label = 6;
2573
- case 6:
2574
- spinner.text = "Setting Next environment variables for preview app to work properly";
2575
- return [
2576
- 4,
2577
- setNextEnvironmentVariablesForBuild(emailsDirRelativePath, builtPreviewAppPath)
2578
- ];
2579
- case 7:
2580
- _state.sent();
2581
- spinner.text = "Setting server side generation for the email preview pages";
2582
- return [
2583
- 4,
2584
- forceSSGForEmailPreviews(emailsDirPath, builtPreviewAppPath)
2585
- ];
2586
- case 8:
2587
- _state.sent();
2588
- spinner.text = "Updating package.json's build and start scripts";
2589
- return [
2590
- 4,
2591
- updatePackageJson(builtPreviewAppPath)
2592
- ];
2593
- case 9:
2594
- _state.sent();
2595
- spinner.text = "Installing dependencies on `.react-email`";
2596
- return [
2597
- 4,
2598
- npmInstall(builtPreviewAppPath, packageManager)
2599
- ];
2600
- case 10:
2601
- _state.sent();
2602
- spinner.stopAndPersist({
2603
- text: "Successfully prepared `.react-email` for `next build`",
2604
- symbol: import_log_symbols3.default.success
2605
- });
2606
- return [
2607
- 4,
2608
- buildPreviewApp(builtPreviewAppPath)
2609
- ];
2610
- case 11:
2611
- _state.sent();
2612
- return [
2613
- 3,
2614
- 13
2615
- ];
2616
- case 12:
2617
- error = _state.sent();
2618
- console.log(error);
2619
- process.exit(1);
2620
- return [
2621
- 3,
2622
- 13
2623
- ];
2624
- case 13:
2625
- return [
2626
- 2
2627
- ];
2628
- }
2629
- });
2630
- });
2631
- return function build2(_) {
2632
- return _ref.apply(this, arguments);
2633
- };
2634
- }();
2635
- // src/cli/commands/start.ts
2636
- var import_node_fs9 = __toESM(require("fs"));
2637
- var import_node_path10 = __toESM(require("path"));
2638
- var import_node_child_process2 = require("child_process");
2639
- var start = function() {
2640
- var _ref = _async_to_generator(function() {
2641
- var usersProjectLocation, builtPreviewPath, nextStart;
2642
- return _ts_generator(this, function(_state) {
2643
- try {
2644
- usersProjectLocation = process.cwd();
2645
- builtPreviewPath = import_node_path10.default.resolve(usersProjectLocation, "./.react-email");
2646
- if (!import_node_fs9.default.existsSync(builtPreviewPath)) {
2647
- throw new Error("Could not find `.react-email`, maybe you haven't ran `email build`?");
2648
- }
2649
- nextStart = (0, import_node_child_process2.spawn)("npm", [
2650
- "start"
2651
- ], {
2652
- cwd: builtPreviewPath,
2653
- shell: true
2654
- });
2655
- nextStart.stdout.pipe(process.stdout);
2656
- nextStart.stderr.pipe(process.stderr);
2657
- } catch (error) {
2658
- console.log(error);
2659
- process.exit(1);
2660
- }
2661
- return [
2662
- 2
2663
- ];
2664
- });
2665
- });
2666
- return function start() {
2667
- return _ref.apply(this, arguments);
2668
- };
2669
- }();
2670
- // src/cli/index.ts
2671
- var PACKAGE_NAME = "react-email";
2672
- import_commander.program.name(PACKAGE_NAME).description("A live preview of your emails right in your browser").version(package_default.version);
2673
- import_commander.program.command("dev").description("Starts the preview email development app").option("-d, --dir <path>", "Directory with your email templates", "./emails").option("-p --port <port>", "Port to run dev server on", "3000").action(dev);
2674
- import_commander.program.command("build").description("Copies the preview app for onto .react-email and builds it").option("-d, --dir <path>", "Directory with your email templates", "./emails").option("-p --packageManager <name>", "Package name to use on installation on `.react-email`", "npm").action(build2);
2675
- import_commander.program.command("start").description('Runs the built preview app that is inside of ".react-email"').action(start);
2676
- import_commander.program.command("export").description("Build the templates to the `out` directory").option("--outDir <path>", "Output directory", "out").option("-p, --pretty", "Pretty print the output", false).option("-t, --plainText", "Set output format as plain text", false).option("-d, --dir <path>", "Directory with your email templates", "./emails").option("-s, --silent", "To, or not to show a spinner with process information", false).action(function(param) {
2677
- var outDir = param.outDir, pretty = param.pretty, plainText = param.plainText, silent = param.silent, srcDir = param.dir;
2678
- return exportTemplates(outDir, srcDir, {
2679
- pretty: pretty,
2680
- silent: silent,
2681
- plainText: plainText
2682
- });
2683
- });
2684
- import_commander.program.parse();