react-email 2.0.0-canary.2 → 2.0.0-canary.4

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/cli/index.js +1 -1
  2. package/cli/index.mjs +1 -1
  3. package/dist/package.json +53 -0
  4. package/dist/source/commands/dev.d.ts +8 -0
  5. package/dist/source/commands/dev.d.ts.map +1 -0
  6. package/dist/source/commands/dev.js +80 -0
  7. package/dist/source/commands/export.d.ts +3 -0
  8. package/dist/source/commands/export.d.ts.map +1 -0
  9. package/dist/source/commands/export.js +174 -0
  10. package/dist/source/commands/preview.d.ts +10 -0
  11. package/dist/source/commands/preview.d.ts.map +1 -0
  12. package/dist/source/commands/preview.js +108 -0
  13. package/dist/source/index.d.ts +3 -0
  14. package/dist/source/index.d.ts.map +1 -0
  15. package/dist/source/index.js +46 -0
  16. package/dist/source/utils/close-ora-on-sigint.d.ts +3 -0
  17. package/dist/source/utils/close-ora-on-sigint.d.ts.map +1 -0
  18. package/dist/source/utils/close-ora-on-sigint.js +9 -0
  19. package/dist/source/utils/constants.d.ts +10 -0
  20. package/dist/source/utils/constants.d.ts.map +1 -0
  21. package/dist/source/utils/constants.js +21 -0
  22. package/dist/source/utils/convert-to-absolute-path.d.ts +2 -0
  23. package/dist/source/utils/convert-to-absolute-path.d.ts.map +1 -0
  24. package/dist/source/utils/convert-to-absolute-path.js +11 -0
  25. package/dist/source/utils/download-client.d.ts +2 -0
  26. package/dist/source/utils/download-client.d.ts.map +1 -0
  27. package/dist/source/utils/download-client.js +71 -0
  28. package/dist/source/utils/generate-email-preview.d.ts +2 -0
  29. package/dist/source/utils/generate-email-preview.d.ts.map +1 -0
  30. package/dist/source/utils/generate-email-preview.js +150 -0
  31. package/dist/source/utils/index.d.ts +9 -0
  32. package/dist/source/utils/index.d.ts.map +1 -0
  33. package/dist/source/utils/index.js +24 -0
  34. package/dist/source/utils/install-dependencies.d.ts +3 -0
  35. package/dist/source/utils/install-dependencies.d.ts.map +1 -0
  36. package/dist/source/utils/install-dependencies.js +23 -0
  37. package/dist/source/utils/run-server.d.ts +9 -0
  38. package/dist/source/utils/run-server.d.ts.map +1 -0
  39. package/dist/source/utils/run-server.js +102 -0
  40. package/dist/source/utils/start-server-command.d.ts +4 -0
  41. package/dist/source/utils/start-server-command.d.ts.map +1 -0
  42. package/dist/source/utils/start-server-command.js +54 -0
  43. package/dist/source/utils/sync-package.d.ts +2 -0
  44. package/dist/source/utils/sync-package.d.ts.map +1 -0
  45. package/dist/source/utils/sync-package.js +76 -0
  46. package/dist/source/utils/tree.d.ts +2 -0
  47. package/dist/source/utils/tree.d.ts.map +1 -0
  48. package/dist/source/utils/tree.js +58 -0
  49. package/dist/source/utils/watcher.d.ts +4 -0
  50. package/dist/source/utils/watcher.d.ts.map +1 -0
  51. package/dist/source/utils/watcher.js +53 -0
  52. package/package.json +1 -1
  53. package/src/app/preview/[slug]/rendering-error.tsx +19 -3
  54. package/src/components/sidebar/sidebar-directory-children.tsx +7 -3
  55. package/src/components/sidebar/sidebar.tsx +8 -3
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.downloadClient = void 0;
43
+ var node_fs_1 = __importDefault(require("node:fs"));
44
+ var node_path_1 = __importDefault(require("node:path"));
45
+ var rest_1 = require("@octokit/rest");
46
+ var fs_extra_1 = __importDefault(require("fs-extra"));
47
+ var shelljs_1 = __importDefault(require("shelljs"));
48
+ var downloadClient = function () { return __awaiter(void 0, void 0, void 0, function () {
49
+ var octokit, downloadRes, TAR_PATH;
50
+ return __generator(this, function (_a) {
51
+ switch (_a.label) {
52
+ case 0:
53
+ octokit = new rest_1.Octokit();
54
+ return [4 /*yield*/, octokit.repos.downloadTarballArchive({
55
+ owner: 'resendlabs',
56
+ repo: 'react-email',
57
+ ref: 'v0.0.15',
58
+ })];
59
+ case 1:
60
+ downloadRes = _a.sent();
61
+ node_fs_1.default.mkdirSync('.react-email-temp');
62
+ TAR_PATH = node_path_1.default.join('.react-email-temp', 'react-email.tar.gz');
63
+ node_fs_1.default.writeFileSync(TAR_PATH, Buffer.from(downloadRes.data));
64
+ shelljs_1.default.exec("tar -xzvf .react-email-temp/react-email.tar.gz -C .react-email-temp --strip-components 1", { silent: true });
65
+ fs_extra_1.default.moveSync(node_path_1.default.join('.react-email-temp', 'client'), node_path_1.default.join('.react-email'));
66
+ fs_extra_1.default.removeSync('.react-email-temp');
67
+ return [2 /*return*/];
68
+ }
69
+ });
70
+ }); };
71
+ exports.downloadClient = downloadClient;
@@ -0,0 +1,2 @@
1
+ export declare const generateEmailsPreview: (emailDir: string, type?: 'all' | 'static' | 'templates') => Promise<void>;
2
+ //# sourceMappingURL=generate-email-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-email-preview.d.ts","sourceRoot":"","sources":["../../../source/utils/generate-email-preview.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,qBAAqB,aACtB,MAAM,SACV,KAAK,GAAG,QAAQ,GAAG,WAAW,kBAoBrC,CAAC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.generateEmailsPreview = void 0;
43
+ var node_fs_1 = __importDefault(require("node:fs"));
44
+ var node_path_1 = __importDefault(require("node:path"));
45
+ var ora_1 = __importDefault(require("ora"));
46
+ var shelljs_1 = __importDefault(require("shelljs"));
47
+ var log_symbols_1 = __importDefault(require("log-symbols"));
48
+ var fs_extra_1 = __importDefault(require("fs-extra"));
49
+ var glob_1 = require("glob");
50
+ var constants_1 = require("./constants");
51
+ var close_ora_on_sigint_1 = require("./close-ora-on-sigint");
52
+ /**
53
+ * Node.js and imports are requiring all imports to be /, while some functions (like glob) return paths with \\ for path separation on windows
54
+ */
55
+ function osIndependentPath(p) {
56
+ return p.split(node_path_1.default.sep).join('/');
57
+ }
58
+ var generateEmailsPreview = function (emailDir, type) {
59
+ if (type === void 0) { type = 'all'; }
60
+ return __awaiter(void 0, void 0, void 0, function () {
61
+ var spinner, error_1;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ _a.trys.push([0, 3, , 4]);
66
+ spinner = (0, ora_1.default)('Generating emails preview').start();
67
+ (0, close_ora_on_sigint_1.closeOraOnSIGNIT)(spinner);
68
+ if (type === 'all' || type === 'templates') {
69
+ createEmailPreviews(emailDir);
70
+ }
71
+ if (!(type === 'all' || type === 'static')) return [3 /*break*/, 2];
72
+ return [4 /*yield*/, createStaticFiles()];
73
+ case 1:
74
+ _a.sent();
75
+ _a.label = 2;
76
+ case 2:
77
+ spinner.stopAndPersist({
78
+ symbol: log_symbols_1.default.success,
79
+ text: 'Emails preview generated',
80
+ });
81
+ return [3 /*break*/, 4];
82
+ case 3:
83
+ error_1 = _a.sent();
84
+ console.log({ error: error_1 });
85
+ return [3 /*break*/, 4];
86
+ case 4: return [2 /*return*/];
87
+ }
88
+ });
89
+ });
90
+ };
91
+ exports.generateEmailsPreview = generateEmailsPreview;
92
+ var packageEmailsPath = osIndependentPath(constants_1.PACKAGE_EMAILS_PATH);
93
+ var createEmailPreviews = function (emailDir) {
94
+ if (node_fs_1.default.existsSync(constants_1.PACKAGE_EMAILS_PATH)) {
95
+ node_fs_1.default.rmSync(constants_1.PACKAGE_EMAILS_PATH, { recursive: true });
96
+ }
97
+ node_fs_1.default.mkdirSync(packageEmailsPath);
98
+ var list = (0, glob_1.sync)(osIndependentPath(node_path_1.default.join(emailDir, '/*.{jsx,tsx}')), {
99
+ absolute: true,
100
+ // ignore any spec or test file within the email directory
101
+ ignore: [node_path_1.default.join(emailDir, '*.?(spec|test).{jsx,tsx}')],
102
+ });
103
+ /**
104
+ * instead of copying all files, which would break and js/ts imports,
105
+ * we create placeholder files which just contain the following code:
106
+ *
107
+ * import Mail from `../../path/to/emails/my-template.tsx`
108
+ * export default Mail
109
+ */
110
+ for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
111
+ var _absoluteSrcFilePath = list_1[_i];
112
+ var absoluteSrcFilePath = osIndependentPath(_absoluteSrcFilePath);
113
+ var fileName = absoluteSrcFilePath.split('/').pop();
114
+ if (fileName === undefined) {
115
+ throw new Error("Could not get file name from ".concat(absoluteSrcFilePath));
116
+ }
117
+ var targetFile = node_path_1.default.join(packageEmailsPath, absoluteSrcFilePath.replace(osIndependentPath(emailDir), ''));
118
+ var dirWithTargetFile = node_path_1.default.dirname(targetFile);
119
+ var importPath = node_path_1.default.relative(dirWithTargetFile, node_path_1.default.dirname(absoluteSrcFilePath));
120
+ var importFile = osIndependentPath(node_path_1.default.join(importPath, fileName));
121
+ // if this import is changed, you also need to update `client/src/app/preview/[slug]/page.tsx`
122
+ var sourceCode = "import Mail from '".concat(importFile, "';\nexport default Mail;\n");
123
+ node_fs_1.default.writeFileSync(targetFile, sourceCode);
124
+ }
125
+ };
126
+ var createStaticFiles = function () { return __awaiter(void 0, void 0, void 0, function () {
127
+ var hasPublicDirectory, userHasStaticDirectory, result;
128
+ return __generator(this, function (_a) {
129
+ switch (_a.label) {
130
+ case 0:
131
+ hasPublicDirectory = node_fs_1.default.existsSync(constants_1.PACKAGE_PUBLIC_PATH);
132
+ if (!hasPublicDirectory) return [3 /*break*/, 2];
133
+ return [4 /*yield*/, node_fs_1.default.promises.rm(constants_1.PACKAGE_PUBLIC_PATH, { recursive: true })];
134
+ case 1:
135
+ _a.sent();
136
+ _a.label = 2;
137
+ case 2: return [4 /*yield*/, fs_extra_1.default.ensureDir(node_path_1.default.join(constants_1.PACKAGE_PUBLIC_PATH, 'static'))];
138
+ case 3:
139
+ _a.sent();
140
+ userHasStaticDirectory = node_fs_1.default.existsSync(node_path_1.default.join(constants_1.CURRENT_PATH, 'static'));
141
+ if (userHasStaticDirectory) {
142
+ result = shelljs_1.default.cp('-r', node_path_1.default.join(constants_1.CURRENT_PATH, 'static'), node_path_1.default.join(constants_1.PACKAGE_PUBLIC_PATH));
143
+ if (result.code > 0) {
144
+ throw new Error("Something went wrong while copying the file to ".concat(node_path_1.default.join(constants_1.CURRENT_PATH, 'static'), ", ").concat(result.cat()));
145
+ }
146
+ }
147
+ return [2 /*return*/];
148
+ }
149
+ });
150
+ }); };
@@ -0,0 +1,9 @@
1
+ export * from './constants';
2
+ export * from './convert-to-absolute-path';
3
+ export * from './download-client';
4
+ export * from './generate-email-preview';
5
+ export * from './install-dependencies';
6
+ export * from './start-server-command';
7
+ export * from './sync-package';
8
+ export * from './watcher';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
18
+ __exportStar(require("./convert-to-absolute-path"), exports);
19
+ __exportStar(require("./download-client"), exports);
20
+ __exportStar(require("./generate-email-preview"), exports);
21
+ __exportStar(require("./install-dependencies"), exports);
22
+ __exportStar(require("./start-server-command"), exports);
23
+ __exportStar(require("./sync-package"), exports);
24
+ __exportStar(require("./watcher"), exports);
@@ -0,0 +1,3 @@
1
+ export type PackageManager = 'yarn' | 'npm' | 'pnpm';
2
+ export declare const installDependencies: (packageManager: PackageManager) => void;
3
+ //# sourceMappingURL=install-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-dependencies.d.ts","sourceRoot":"","sources":["../../../source/utils/install-dependencies.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAErD,eAAO,MAAM,mBAAmB,mBAAoB,cAAc,SAUjE,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.installDependencies = void 0;
7
+ var node_path_1 = __importDefault(require("node:path"));
8
+ var shelljs_1 = __importDefault(require("shelljs"));
9
+ var ora_1 = __importDefault(require("ora"));
10
+ var log_symbols_1 = __importDefault(require("log-symbols"));
11
+ var constants_1 = require("./constants");
12
+ var close_ora_on_sigint_1 = require("./close-ora-on-sigint");
13
+ var installDependencies = function (packageManager) {
14
+ var spinner = (0, ora_1.default)('Installing dependencies...\n').start();
15
+ (0, close_ora_on_sigint_1.closeOraOnSIGNIT)(spinner);
16
+ shelljs_1.default.cd(node_path_1.default.join(constants_1.REACT_EMAIL_ROOT));
17
+ shelljs_1.default.exec("".concat(packageManager, " install"));
18
+ spinner.stopAndPersist({
19
+ symbol: log_symbols_1.default.success,
20
+ text: 'Dependencies installed',
21
+ });
22
+ };
23
+ exports.installDependencies = installDependencies;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility function to run init/sync for the server in dev, build or start mode.
3
+ *
4
+ * @param type - dev | build | start
5
+ * @param dir - Directory in which the emails are located, only for dev and build, unused for start.
6
+ * @param port - The port on which the server will run, only for dev and start, unused for build.
7
+ */
8
+ export declare const setupServer: (type: 'dev' | 'build' | 'start', dir: string, port: string, skipInstall?: boolean) => Promise<void>;
9
+ //# sourceMappingURL=run-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-server.d.ts","sourceRoot":"","sources":["../../../source/utils/run-server.ts"],"names":[],"mappings":"AAkBA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,SAChB,KAAK,GAAG,OAAO,GAAG,OAAO,OAC1B,MAAM,QACL,MAAM,yCAgCb,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.setupServer = void 0;
43
+ var node_path_1 = __importDefault(require("node:path"));
44
+ var detect_package_manager_1 = require("detect-package-manager");
45
+ var find_root_1 = require("@manypkg/find-root");
46
+ var shelljs_1 = __importDefault(require("shelljs"));
47
+ var watcher_1 = require("./watcher");
48
+ var _1 = require(".");
49
+ /**
50
+ * Utility function to run init/sync for the server in dev, build or start mode.
51
+ *
52
+ * @param type - dev | build | start
53
+ * @param dir - Directory in which the emails are located, only for dev and build, unused for start.
54
+ * @param port - The port on which the server will run, only for dev and start, unused for build.
55
+ */
56
+ var setupServer = function (type, dir, port, skipInstall) {
57
+ if (skipInstall === void 0) { skipInstall = false; }
58
+ return __awaiter(void 0, void 0, void 0, function () {
59
+ var cwd, emailDir, packageManager, watcherInstance;
60
+ return __generator(this, function (_a) {
61
+ switch (_a.label) {
62
+ case 0: return [4 /*yield*/, (0, find_root_1.findRoot)(_1.CURRENT_PATH).catch(function () { return ({
63
+ rootDir: _1.CURRENT_PATH,
64
+ }); })];
65
+ case 1:
66
+ cwd = _a.sent();
67
+ emailDir = (0, _1.convertToAbsolutePath)(dir);
68
+ return [4 /*yield*/, (0, detect_package_manager_1.detect)({
69
+ cwd: cwd.rootDir,
70
+ }).catch(function () { return 'npm'; })];
71
+ case 2:
72
+ packageManager = _a.sent();
73
+ if (!(type !== 'start')) return [3 /*break*/, 5];
74
+ return [4 /*yield*/, (0, _1.generateEmailsPreview)(emailDir)];
75
+ case 3:
76
+ _a.sent();
77
+ return [4 /*yield*/, (0, _1.syncPkg)()];
78
+ case 4:
79
+ _a.sent();
80
+ if (!skipInstall) {
81
+ (0, _1.installDependencies)(packageManager);
82
+ }
83
+ _a.label = 5;
84
+ case 5:
85
+ if (type === 'dev') {
86
+ watcherInstance = (0, watcher_1.createWatcherInstance)(emailDir);
87
+ (0, _1.startDevServer)(packageManager, port);
88
+ (0, watcher_1.watcher)(watcherInstance, emailDir);
89
+ }
90
+ else if (type === 'build') {
91
+ (0, _1.buildProdServer)(packageManager);
92
+ }
93
+ else {
94
+ shelljs_1.default.cd(node_path_1.default.join(_1.REACT_EMAIL_ROOT));
95
+ (0, _1.startProdServer)(packageManager, port);
96
+ }
97
+ return [2 /*return*/];
98
+ }
99
+ });
100
+ });
101
+ };
102
+ exports.setupServer = setupServer;
@@ -0,0 +1,4 @@
1
+ export declare const startDevServer: (packageManager: string, port: string) => void;
2
+ export declare const startProdServer: (packageManager: string, port: string) => void;
3
+ export declare const buildProdServer: (packageManager: string) => void;
4
+ //# sourceMappingURL=start-server-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-server-command.d.ts","sourceRoot":"","sources":["../../../source/utils/start-server-command.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,cAAc,mBAAoB,MAAM,QAAQ,MAAM,SAElE,CAAC;AAEF,eAAO,MAAM,eAAe,mBAAoB,MAAM,QAAQ,MAAM,SAEnE,CAAC;AAEF,eAAO,MAAM,eAAe,mBAAoB,MAAM,SAOrD,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildProdServer = exports.startProdServer = exports.startDevServer = void 0;
7
+ var shelljs_1 = __importDefault(require("shelljs"));
8
+ var processesToKill = [];
9
+ function execAsync(command) {
10
+ var process = shelljs_1.default.exec(command, { async: true });
11
+ processesToKill.push(process);
12
+ process.on('close', function () {
13
+ processesToKill = processesToKill.filter(function (p) { return p !== process; });
14
+ });
15
+ }
16
+ var startDevServer = function (packageManager, port) {
17
+ execAsync("".concat(packageManager, " run dev -- -p ").concat(port));
18
+ };
19
+ exports.startDevServer = startDevServer;
20
+ var startProdServer = function (packageManager, port) {
21
+ execAsync("".concat(packageManager, " run start -- -p ").concat(port));
22
+ };
23
+ exports.startProdServer = startProdServer;
24
+ var buildProdServer = function (packageManager) {
25
+ execAsync("".concat(packageManager, " run build"));
26
+ // if build fails for whatever reason, make sure the shell actually exits
27
+ process.on('close', function (code) {
28
+ shelljs_1.default.exit(code !== null && code !== void 0 ? code : undefined);
29
+ });
30
+ };
31
+ exports.buildProdServer = buildProdServer;
32
+ // based on https://stackoverflow.com/a/14032965
33
+ var exitHandler = function (options) { return function (code) {
34
+ if (processesToKill.length > 0) {
35
+ console.log('shutting down %d subprocesses', processesToKill.length);
36
+ }
37
+ processesToKill.forEach(function (p) {
38
+ if (p.connected) {
39
+ p.kill();
40
+ }
41
+ });
42
+ if (options === null || options === void 0 ? void 0 : options.exit) {
43
+ shelljs_1.default.exit(code);
44
+ }
45
+ }; };
46
+ // do something when app is closing
47
+ process.on('exit', exitHandler());
48
+ // catches ctrl+c event
49
+ process.on('SIGINT', exitHandler({ exit: true }));
50
+ // catches "kill pid" (for example: nodemon restart)
51
+ process.on('SIGUSR1', exitHandler({ exit: true }));
52
+ process.on('SIGUSR2', exitHandler({ exit: true }));
53
+ // catches uncaught exceptions
54
+ process.on('uncaughtException', exitHandler({ exit: true }));
@@ -0,0 +1,2 @@
1
+ export declare const syncPkg: () => Promise<void>;
2
+ //# sourceMappingURL=sync-package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-package.d.ts","sourceRoot":"","sources":["../../../source/utils/sync-package.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,qBAcnB,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.syncPkg = void 0;
54
+ var node_fs_1 = __importDefault(require("node:fs"));
55
+ var node_path_1 = __importDefault(require("node:path"));
56
+ var read_pkg_1 = __importDefault(require("read-pkg"));
57
+ var constants_1 = require("./constants");
58
+ var syncPkg = function () { return __awaiter(void 0, void 0, void 0, function () {
59
+ var clientPkg, userPkg, pkg;
60
+ return __generator(this, function (_a) {
61
+ switch (_a.label) {
62
+ case 0: return [4 /*yield*/, (0, read_pkg_1.default)({ cwd: constants_1.REACT_EMAIL_ROOT })];
63
+ case 1:
64
+ clientPkg = _a.sent();
65
+ return [4 /*yield*/, (0, read_pkg_1.default)()];
66
+ case 2:
67
+ userPkg = _a.sent();
68
+ pkg = __assign(__assign({}, clientPkg), { dependencies: __assign(__assign({}, clientPkg.dependencies), userPkg.dependencies) });
69
+ return [4 /*yield*/, node_fs_1.default.promises.writeFile(node_path_1.default.join(constants_1.REACT_EMAIL_ROOT, 'package.json'), JSON.stringify(pkg))];
70
+ case 3:
71
+ _a.sent();
72
+ return [2 /*return*/];
73
+ }
74
+ });
75
+ }); };
76
+ exports.syncPkg = syncPkg;
@@ -0,0 +1,2 @@
1
+ export declare const tree: (dir: string, depth: number) => Promise<string>;
2
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../source/utils/tree.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAAe,MAAM,SAAS,MAAM,oBAOpD,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.tree = void 0;
43
+ var tree_cli_1 = __importDefault(require("tree-cli"));
44
+ var tree = function (dir, depth) { return __awaiter(void 0, void 0, void 0, function () {
45
+ var report;
46
+ return __generator(this, function (_a) {
47
+ switch (_a.label) {
48
+ case 0: return [4 /*yield*/, (0, tree_cli_1.default)({
49
+ l: depth,
50
+ base: dir,
51
+ })];
52
+ case 1:
53
+ report = (_a.sent()).report;
54
+ return [2 /*return*/, report];
55
+ }
56
+ });
57
+ }); };
58
+ exports.tree = tree;
@@ -0,0 +1,4 @@
1
+ import type { FSWatcher } from 'chokidar';
2
+ export declare const createWatcherInstance: (watchDir: string) => FSWatcher;
3
+ export declare const watcher: (watcherInstance: FSWatcher, watchDir: string) => void;
4
+ //# sourceMappingURL=watcher.d.ts.map