eddev 0.2.0-beta.1 → 0.2.0-beta.13

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 (112) hide show
  1. package/build/build-favicon.d.ts +1 -0
  2. package/build/build-favicon.js +71 -0
  3. package/build/create-serverless-dev-worker.d.ts +3 -0
  4. package/build/create-serverless-dev-worker.js +99 -0
  5. package/build/get-webpack-config.js +19 -11
  6. package/build/reporter.js +0 -109
  7. package/build/serverless/create-next-app.d.ts +2 -0
  8. package/build/serverless/create-next-app.js +212 -76
  9. package/build/state/serverless-state.d.ts +26 -0
  10. package/build/state/serverless-state.js +2 -0
  11. package/build/workers/serverless-worker-dev-script.d.ts +1 -0
  12. package/build/workers/serverless-worker-dev-script.js +21 -0
  13. package/cli/build.dev.js +30 -7
  14. package/cli/build.prod.js +5 -0
  15. package/cli/cli.js +23 -15
  16. package/cli/display/components/DevCLIDisplay.d.ts +3 -0
  17. package/cli/display/components/DevCLIDisplay.js +20 -1
  18. package/cli/display/components/ServerlessDisplay.d.ts +9 -0
  19. package/cli/display/components/ServerlessDisplay.js +68 -0
  20. package/config/config-schema.d.ts +50 -0
  21. package/config/config-schema.js +18 -0
  22. package/config/create-schema-file.d.ts +1 -0
  23. package/config/create-schema-file.js +20 -0
  24. package/config/get-config.d.ts +36 -0
  25. package/config/get-config.js +32 -0
  26. package/config/index.d.ts +2 -0
  27. package/config/index.js +14 -0
  28. package/config/parse-config.d.ts +23 -0
  29. package/config/parse-config.js +8 -0
  30. package/config/print-zod-errors.d.ts +2 -0
  31. package/config/print-zod-errors.js +14 -0
  32. package/dev-ui/components/BreakpointColumnHeader.d.ts +11 -0
  33. package/dev-ui/components/BreakpointColumnHeader.js +47 -0
  34. package/dev-ui/components/BreakpointIndicator.d.ts +2 -0
  35. package/dev-ui/components/BreakpointIndicator.js +138 -0
  36. package/dev-ui/components/BreakpointList.d.ts +6 -0
  37. package/dev-ui/components/BreakpointList.js +38 -0
  38. package/dev-ui/components/DevUI.d.ts +2 -0
  39. package/dev-ui/components/DevUI.js +29 -0
  40. package/dev-ui/components/Launcher.d.ts +98 -0
  41. package/dev-ui/components/Launcher.js +94 -0
  42. package/dev-ui/components/PanelWrapper.d.ts +8 -0
  43. package/dev-ui/components/PanelWrapper.js +37 -0
  44. package/dev-ui/components/ResponsiveLerpControl.d.ts +8 -0
  45. package/dev-ui/components/ResponsiveLerpControl.js +177 -0
  46. package/dev-ui/components/ResponsiveScaleEditor.d.ts +26 -0
  47. package/dev-ui/components/ResponsiveScaleEditor.js +233 -0
  48. package/dev-ui/components/ResponsiveScaleHeader.d.ts +15 -0
  49. package/dev-ui/components/ResponsiveScaleHeader.js +51 -0
  50. package/dev-ui/components/atoms/Button.d.ts +47 -0
  51. package/dev-ui/components/atoms/Button.js +67 -0
  52. package/dev-ui/components/atoms/Dropdown.d.ts +13 -0
  53. package/dev-ui/components/atoms/Dropdown.js +50 -0
  54. package/dev-ui/components/atoms/NumberField.d.ts +12 -0
  55. package/dev-ui/components/atoms/NumberField.js +111 -0
  56. package/dev-ui/components/atoms/Spacer.d.ts +42 -0
  57. package/dev-ui/components/atoms/Spacer.js +8 -0
  58. package/dev-ui/components/atoms/Text.d.ts +45 -0
  59. package/dev-ui/components/atoms/Text.js +39 -0
  60. package/dev-ui/components/atoms/ToggleButton.d.ts +8 -0
  61. package/dev-ui/components/atoms/ToggleButton.js +41 -0
  62. package/dev-ui/components/atoms/Tooltip.d.ts +9 -0
  63. package/dev-ui/components/atoms/Tooltip.js +66 -0
  64. package/dev-ui/components/panels/PageDataDebugger.d.ts +2 -0
  65. package/dev-ui/components/panels/PageDataDebugger.js +30 -0
  66. package/dev-ui/components/panels/SpacingEditor.d.ts +2 -0
  67. package/dev-ui/components/panels/SpacingEditor.js +88 -0
  68. package/dev-ui/components/panels/TypographyEditor.d.ts +2 -0
  69. package/dev-ui/components/panels/TypographyEditor.js +88 -0
  70. package/dev-ui/hooks/useBreakpoint.d.ts +11 -0
  71. package/dev-ui/hooks/useBreakpoint.js +59 -0
  72. package/dev-ui/hooks/usePersistState.d.ts +1 -0
  73. package/dev-ui/hooks/usePersistState.js +33 -0
  74. package/dev-ui/hooks/useStylesheet.d.ts +4 -0
  75. package/dev-ui/hooks/useStylesheet.js +31 -0
  76. package/dev-ui/icons.d.ts +15 -0
  77. package/dev-ui/icons.js +29 -0
  78. package/dev-ui/index.d.ts +1 -0
  79. package/dev-ui/index.js +5 -0
  80. package/dev-ui/panels.d.ts +11 -0
  81. package/dev-ui/panels.js +33 -0
  82. package/dev-ui/theme.d.ts +150 -0
  83. package/dev-ui/theme.js +50 -0
  84. package/entry/Root.js +6 -5
  85. package/hooks/useAppData.js +0 -1
  86. package/package.json +8 -7
  87. package/serverless/create-rpc-client.d.ts +33 -0
  88. package/serverless/create-rpc-client.js +20 -0
  89. package/serverless/define-api.d.ts +2 -0
  90. package/serverless/define-api.js +66 -0
  91. package/serverless/define-rpc-router.d.ts +2 -0
  92. package/serverless/define-rpc-router.js +27 -0
  93. package/serverless/error-codes.d.ts +2 -0
  94. package/serverless/error-codes.js +14 -0
  95. package/serverless/index.d.ts +4 -0
  96. package/serverless/index.js +16 -0
  97. package/serverless/rpc-provider.d.ts +1 -0
  98. package/serverless/rpc-provider.js +5 -0
  99. package/serverless-template/_utils/ed-config.ts +5 -0
  100. package/serverless-template/_utils/fetch-wordpress-props.ts +30 -6
  101. package/serverless-template/next.config.js +63 -52
  102. package/serverless-template/pages/_app.tsx +0 -2
  103. package/serverless-template/pages/_document.tsx +19 -0
  104. package/style/createStitches.d.ts +75 -6
  105. package/style/createStitches.js +151 -45
  106. package/utils/getRepoName.d.ts +2 -2
  107. package/utils/getRepoName.js +14 -52
  108. package/cli/prepare-next.d.ts +0 -0
  109. package/cli/prepare-next.js +0 -1
  110. package/fields/ImageWell.d.ts +0 -8
  111. package/fields/ImageWell.js +0 -64
  112. package/serverless-template/package-lock.json +0 -641
@@ -10,6 +10,25 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
13
32
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
33
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
34
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -46,6 +65,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
65
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
66
  }
48
67
  };
68
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
69
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
70
+ if (ar || !(i in from)) {
71
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
72
+ ar[i] = from[i];
73
+ }
74
+ }
75
+ return to.concat(ar || Array.prototype.slice.call(from));
76
+ };
49
77
  var __importDefault = (this && this.__importDefault) || function (mod) {
50
78
  return (mod && mod.__esModule) ? mod : { "default": mod };
51
79
  };
@@ -59,65 +87,105 @@ var fs_1 = require("fs");
59
87
  var manifest_blocks_1 = require("../manifests/manifest-blocks");
60
88
  var promises_1 = require("fs/promises");
61
89
  var manifest_views_1 = require("../manifests/manifest-views");
90
+ var getRepoName_1 = require("../../utils/getRepoName");
91
+ function requireConfig(dir) {
92
+ var configPath = (0, path_1.resolve)(dir, "ed.config.json");
93
+ return require(configPath);
94
+ }
62
95
  function createNextApp(opts) {
96
+ var _a;
63
97
  return __awaiter(this, void 0, void 0, function () {
64
- var serverlessDirectory;
65
- return __generator(this, function (_a) {
66
- switch (_a.label) {
98
+ var isVercel, serverlessDirectory, sendSignal, repoName, port;
99
+ return __generator(this, function (_b) {
100
+ switch (_b.label) {
67
101
  case 0:
68
- serverlessDirectory = (0, path_1.resolve)(opts.baseDirectory, ".serverless");
69
- // Clean first
70
- return [4 /*yield*/, clean(serverlessDirectory)
71
- // Copy the template folder
72
- ];
102
+ isVercel = process.env.VERCEL;
103
+ serverlessDirectory = isVercel ? opts.baseDirectory : (0, path_1.resolve)(opts.baseDirectory, ".serverless");
104
+ sendSignal = opts.sendSignal || (function () { });
105
+ sendSignal({ code: "preparing" });
106
+ repoName = (0, getRepoName_1.getRepoName)(opts.baseDirectory);
107
+ if (!!isVercel) return [3 /*break*/, 2];
108
+ return [4 /*yield*/, clean(serverlessDirectory)];
73
109
  case 1:
74
- // Clean first
75
- _a.sent();
76
- // Copy the template folder
77
- return [4 /*yield*/, copyTemplate(serverlessDirectory)
78
- // Update package.json
79
- ];
80
- case 2:
81
- // Copy the template folder
82
- _a.sent();
110
+ _b.sent();
111
+ _b.label = 2;
112
+ case 2:
113
+ // Copy the template folder
114
+ return [4 /*yield*/, copyTemplate(serverlessDirectory)
83
115
  // Update package.json
84
- return [4 /*yield*/, updatePackagesFile(opts.baseDirectory, serverlessDirectory)
85
- // Update packages
86
- // TODO: On vercel, can we maybe just symlink or copy node_modules?
87
- ];
116
+ ];
88
117
  case 3:
89
- // Update package.json
90
- _a.sent();
91
- // Update packages
92
- // TODO: On vercel, can we maybe just symlink or copy node_modules?
93
- return [4 /*yield*/, updatePackages(serverlessDirectory)
94
- // Symlink important files and directories
95
- ];
118
+ // Copy the template folder
119
+ _b.sent();
120
+ if (!!isVercel) return [3 /*break*/, 5];
121
+ return [4 /*yield*/, updatePackagesFile(opts.baseDirectory, serverlessDirectory)];
96
122
  case 4:
97
- // Update packages
98
- // TODO: On vercel, can we maybe just symlink or copy node_modules?
99
- _a.sent();
100
- // Symlink important files and directories
101
- return [4 /*yield*/, syncFiles(opts.baseDirectory, serverlessDirectory)
102
- // Create manifests
103
- ];
123
+ _b.sent();
124
+ _b.label = 5;
104
125
  case 5:
105
- // Symlink important files and directories
106
- _a.sent();
107
- // Create manifests
108
- initManifests(serverlessDirectory, opts.dev);
109
- if (!opts.dev) return [3 /*break*/, 7];
110
- return [4 /*yield*/, runScript(serverlessDirectory, "dev")];
126
+ if (!!isVercel) return [3 /*break*/, 9];
127
+ // Sync important files during development, as they change
128
+ return [4 /*yield*/, syncFiles(opts.baseDirectory, serverlessDirectory, __spreadArray([
129
+ "blocks/**/*",
130
+ "components/**/*",
131
+ "hooks/**/*",
132
+ "queries/**/*",
133
+ ".env",
134
+ "views/**/*",
135
+ "theme.css.tsx",
136
+ "types.graphql.ts",
137
+ "types.views.ts",
138
+ "types.blocks.ts",
139
+ "utils/**/*",
140
+ "ed.config.json"
141
+ ], (((_a = requireConfig(opts.baseDirectory).serverless) === null || _a === void 0 ? void 0 : _a.devAssets) || []), true))
142
+ // Also sync APIs into the APIs folder
143
+ ];
111
144
  case 6:
112
- _a.sent();
113
- return [3 /*break*/, 9];
145
+ // Sync important files during development, as they change
146
+ _b.sent();
147
+ // Also sync APIs into the APIs folder
148
+ return [4 /*yield*/, syncFiles(opts.baseDirectory, (0, path_1.join)(serverlessDirectory, "pages/"), ["api/**/*"])
149
+ // And public folder
150
+ ];
114
151
  case 7:
115
- if (!opts.build) return [3 /*break*/, 9];
116
- return [4 /*yield*/, runScript(serverlessDirectory, "build")];
152
+ // Also sync APIs into the APIs folder
153
+ _b.sent();
154
+ // And public folder
155
+ return [4 /*yield*/, syncFiles((0, path_1.join)(opts.baseDirectory, "assets"), (0, path_1.join)(serverlessDirectory, "public/wp-content/themes/".concat(repoName.repoName, "/assets")), ["**/*"])];
117
156
  case 8:
118
- _a.sent();
119
- _a.label = 9;
120
- case 9: return [2 /*return*/];
157
+ // And public folder
158
+ _b.sent();
159
+ _b.label = 9;
160
+ case 9:
161
+ if (!!isVercel) return [3 /*break*/, 11];
162
+ sendSignal({ code: "packaging" });
163
+ return [4 /*yield*/, updatePackages(serverlessDirectory)];
164
+ case 10:
165
+ _b.sent();
166
+ _b.label = 11;
167
+ case 11:
168
+ sendSignal({ code: "compiling" });
169
+ // Create manifests
170
+ initManifests(serverlessDirectory, opts.dev);
171
+ if (!opts.dev) return [3 /*break*/, 14];
172
+ return [4 /*yield*/, getPort(3000)];
173
+ case 12:
174
+ port = _b.sent();
175
+ sendSignal({ code: "url", url: "http://127.0.0.1:".concat(port) });
176
+ return [4 /*yield*/, devNext(serverlessDirectory, port)
177
+ // await runScript(serverlessDirectory, "dev")
178
+ ];
179
+ case 13:
180
+ _b.sent();
181
+ return [3 /*break*/, 16];
182
+ case 14:
183
+ if (!opts.build) return [3 /*break*/, 16];
184
+ return [4 /*yield*/, runScript(serverlessDirectory, "build")];
185
+ case 15:
186
+ _b.sent();
187
+ _b.label = 16;
188
+ case 16: return [2 /*return*/];
121
189
  }
122
190
  });
123
191
  });
@@ -152,7 +220,6 @@ function copyTemplate(targetFolder) {
152
220
  switch (_a.label) {
153
221
  case 0:
154
222
  sourceFolder = (0, path_1.resolve)(__dirname, "../../serverless-template");
155
- console.log("Copying from", sourceFolder, "to", targetFolder);
156
223
  (0, fs_extra_1.mkdirp)(targetFolder);
157
224
  return [4 /*yield*/, (0, glob_promise_1.default)((0, path_1.resolve)(sourceFolder, "**/*.*"))];
158
225
  case 1:
@@ -160,9 +227,6 @@ function copyTemplate(targetFolder) {
160
227
  return [4 /*yield*/, Promise.all(files.map(function (src) {
161
228
  var dest = src.replace(sourceFolder, targetFolder);
162
229
  return (0, fs_extra_1.copy)(src, dest);
163
- // return new Promise((resolve) => {
164
- // console.log("Copy", src, "to", dest)
165
- // })
166
230
  }))];
167
231
  case 2:
168
232
  _a.sent();
@@ -205,34 +269,68 @@ function updatePackagesFile(sourceFolder, targetFolder) {
205
269
  });
206
270
  });
207
271
  }
208
- function syncFiles(sourceFolder, targetFolder) {
272
+ function syncFiles(sourceFolder, targetFolder, patterns) {
209
273
  return __awaiter(this, void 0, void 0, function () {
210
- var links;
274
+ var _this = this;
275
+ return __generator(this, function (_a) {
276
+ return [2 /*return*/, new Promise(function (ready) { return __awaiter(_this, void 0, void 0, function () {
277
+ var chokidar;
278
+ return __generator(this, function (_a) {
279
+ switch (_a.label) {
280
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("chokidar")); })];
281
+ case 1:
282
+ chokidar = (_a.sent()).default;
283
+ chokidar
284
+ .watch(patterns, {
285
+ cwd: sourceFolder,
286
+ })
287
+ .on("add", function (path) {
288
+ (0, fs_extra_1.copy)((0, path_1.join)(sourceFolder, path), (0, path_1.join)(targetFolder, path));
289
+ })
290
+ .on("unlink", function (path) {
291
+ (0, fs_extra_1.remove)((0, path_1.join)(targetFolder, path));
292
+ })
293
+ .on("change", function (path) {
294
+ (0, fs_extra_1.copy)((0, path_1.join)(sourceFolder, path), (0, path_1.join)(targetFolder, path));
295
+ })
296
+ .on("ready", function () {
297
+ ready(undefined);
298
+ });
299
+ return [2 /*return*/];
300
+ }
301
+ });
302
+ }); })];
303
+ });
304
+ });
305
+ }
306
+ function devNext(dir, port) {
307
+ return __awaiter(this, void 0, void 0, function () {
308
+ var createServer, parse, next, app, handle;
211
309
  return __generator(this, function (_a) {
212
310
  switch (_a.label) {
213
- case 0:
214
- links = [
215
- "blocks",
216
- "components",
217
- "hooks",
218
- "queries",
219
- ".env",
220
- "views",
221
- "theme.css.tsx",
222
- "types.graphql.ts",
223
- "types.views.ts",
224
- "types.blocks.ts",
225
- "utils",
226
- ];
227
- return [4 /*yield*/, Promise.all(links.map(function (file) {
228
- var src = (0, path_1.resolve)(sourceFolder, file);
229
- var dest = (0, path_1.resolve)(targetFolder, file);
230
- if ((0, fs_1.existsSync)(src)) {
231
- return (0, fs_extra_1.copy)(src, dest);
232
- }
233
- }))];
311
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("http")); })];
234
312
  case 1:
235
- _a.sent();
313
+ createServer = (_a.sent()).createServer;
314
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("url")); })];
315
+ case 2:
316
+ parse = (_a.sent()).parse;
317
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("next")); })];
318
+ case 3:
319
+ next = (_a.sent()).default;
320
+ app = next({
321
+ dev: true,
322
+ dir: dir,
323
+ minimalMode: true,
324
+ customServer: true,
325
+ port: port,
326
+ });
327
+ handle = app.getRequestHandler();
328
+ app.prepare().then(function () {
329
+ console.log("http://127.0.0.1:".concat(port));
330
+ createServer(function (req, res) {
331
+ handle(req, res, parse(req.url || "", true));
332
+ }).listen(app.port);
333
+ });
236
334
  return [2 /*return*/];
237
335
  }
238
336
  });
@@ -296,3 +394,41 @@ function initManifests(dir, dev) {
296
394
  });
297
395
  });
298
396
  }
397
+ function getPort(port) {
398
+ if (port === void 0) { port = 3000; }
399
+ return __awaiter(this, void 0, void 0, function () {
400
+ var createServer, p;
401
+ var _this = this;
402
+ return __generator(this, function (_a) {
403
+ switch (_a.label) {
404
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("http")); })];
405
+ case 1:
406
+ createServer = (_a.sent()).createServer;
407
+ for (p = port; p < port + 100; p++) { }
408
+ return [4 /*yield*/, new Promise(function (resolve) {
409
+ var server = createServer();
410
+ server.listen(port, function () {
411
+ server.once("close", function () {
412
+ resolve(port);
413
+ });
414
+ server.close();
415
+ });
416
+ server.on("error", function () { return __awaiter(_this, void 0, void 0, function () {
417
+ var _a;
418
+ return __generator(this, function (_b) {
419
+ switch (_b.label) {
420
+ case 0:
421
+ _a = resolve;
422
+ return [4 /*yield*/, getPort(port + 1)];
423
+ case 1:
424
+ _a.apply(void 0, [_b.sent()]);
425
+ return [2 /*return*/];
426
+ }
427
+ });
428
+ }); });
429
+ })];
430
+ case 2: return [2 /*return*/, _a.sent()];
431
+ }
432
+ });
433
+ });
434
+ }
@@ -0,0 +1,26 @@
1
+ export declare type ServerlessStatus = "starting" | "packaging" | "preparing" | "compiling" | "success" | "waiting" | "error";
2
+ export declare type ServerlessState = {
3
+ title: string;
4
+ status: ServerlessStatus;
5
+ statusLabel?: string;
6
+ duration?: number;
7
+ log?: string;
8
+ url?: string;
9
+ };
10
+ export declare type ServerlessSignal = {
11
+ code: "packaging";
12
+ } | {
13
+ code: "preparing";
14
+ } | {
15
+ code: "compiling";
16
+ } | {
17
+ code: "finished";
18
+ duration: number;
19
+ } | {
20
+ code: "error";
21
+ } | {
22
+ code: "log";
23
+ } | {
24
+ code: "url";
25
+ url: string;
26
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var worker_threads_1 = require("worker_threads");
4
+ var create_next_app_1 = require("../serverless/create-next-app");
5
+ var sendSignal = function (sig) {
6
+ if (worker_threads_1.parentPort) {
7
+ worker_threads_1.parentPort.postMessage(sig);
8
+ }
9
+ };
10
+ function beginWork() {
11
+ process.on("uncaughtException", function (err) {
12
+ sendSignal({ code: "error" });
13
+ });
14
+ (0, create_next_app_1.createNextApp)({
15
+ baseDirectory: process.cwd(),
16
+ build: false,
17
+ dev: true,
18
+ sendSignal: sendSignal,
19
+ });
20
+ }
21
+ beginWork();
package/cli/build.dev.js CHANGED
@@ -48,18 +48,37 @@ var ink_1 = require("ink");
48
48
  var DevCLIDisplay_1 = require("./display/components/DevCLIDisplay");
49
49
  var create_webpack_worker_1 = require("../build/create-webpack-worker");
50
50
  var create_codegen_worker_1 = require("../build/create-codegen-worker");
51
+ var create_schema_file_1 = require("../config/create-schema-file");
52
+ var get_config_1 = require("../config/get-config");
53
+ var print_zod_errors_1 = require("../config/print-zod-errors");
54
+ var Observable_1 = require("../utils/Observable");
55
+ var fs_extra_1 = require("fs-extra");
56
+ var create_serverless_dev_worker_1 = require("../build/create-serverless-dev-worker");
57
+ var build_favicon_1 = require("../build/build-favicon");
51
58
  function devCommand(opts) {
59
+ var _a;
52
60
  return __awaiter(this, void 0, void 0, function () {
53
- var themeName, enableFrontend, enableAdmin, enableCodegen, frontendObservable, adminObservable, codegenObservable;
54
- return __generator(this, function (_a) {
55
- switch (_a.label) {
56
- case 0: return [4 /*yield*/, (0, promptIfRepoNameIncorrect_1.promptIfRepoThemeMismatch)()];
61
+ var configResult, config, themeName, enableFrontend, enableAdmin, enableCodegen, enableServerless, frontendObservable, adminObservable, codegenObservable, configChanged, serverlessObservable;
62
+ return __generator(this, function (_b) {
63
+ switch (_b.label) {
64
+ case 0:
65
+ (0, create_schema_file_1.createConfigSchemaFile)(path_1.default.resolve(process.cwd(), ".ed.config.schema.json"));
66
+ (0, build_favicon_1.buildFavicon)().catch(function () { });
67
+ return [4 /*yield*/, (0, promptIfRepoNameIncorrect_1.promptIfRepoThemeMismatch)()];
57
68
  case 1:
58
- _a.sent();
69
+ _b.sent();
70
+ configResult = (0, get_config_1.getEDConfig)();
71
+ if (!configResult.success) {
72
+ (0, print_zod_errors_1.printZodErrors)(configResult.error);
73
+ console.log("\nPlease fix the above config errors, and restart the dev command.");
74
+ return [2 /*return*/];
75
+ }
76
+ config = configResult.data;
59
77
  themeName = path_1.default.basename(process.cwd());
60
78
  enableFrontend = !opts.mode || opts.mode === "frontend";
61
79
  enableAdmin = !opts.mode || opts.mode === "admin";
62
80
  enableCodegen = !opts.mode || opts.mode === "codegen";
81
+ enableServerless = (_a = config.serverless) === null || _a === void 0 ? void 0 : _a.enabled;
63
82
  frontendObservable = enableFrontend
64
83
  ? (0, create_webpack_worker_1.createWebpackWorker)({
65
84
  title: "Frontend Bundle",
@@ -93,9 +112,13 @@ function devCommand(opts) {
93
112
  retainLog: opts.retainLog,
94
113
  })
95
114
  : undefined;
96
- // Set up a process which will regenerate schemas, and watch for changes
115
+ configChanged = new Observable_1.Observable(false);
116
+ (0, fs_extra_1.watchFile)((0, get_config_1.getEDConfigFile)(), {}, function () {
117
+ configChanged.update(true);
118
+ });
119
+ serverlessObservable = enableServerless ? (0, create_serverless_dev_worker_1.createServerlessWorker)() : undefined;
97
120
  // Render output to screen
98
- (0, ink_1.render)((0, jsx_runtime_1.jsx)(DevCLIDisplay_1.DevCLIDisplay, { bundles: [frontendObservable, adminObservable].filter(Boolean), codegen: codegenObservable }, void 0));
121
+ (0, ink_1.render)((0, jsx_runtime_1.jsx)(DevCLIDisplay_1.DevCLIDisplay, { bundles: [frontendObservable, adminObservable].filter(Boolean), serverless: serverlessObservable, codegen: codegenObservable, configChanged: configChanged }, void 0));
99
122
  return [2 /*return*/];
100
123
  }
101
124
  });
package/cli/build.prod.js CHANGED
@@ -45,6 +45,7 @@ var webpack_1 = require("webpack");
45
45
  var promptIfRepoNameIncorrect_1 = require("../utils/promptIfRepoNameIncorrect");
46
46
  var path_1 = __importDefault(require("path"));
47
47
  var clean_1 = require("../build/clean");
48
+ var build_favicon_1 = require("../build/build-favicon");
48
49
  function prodCommand(opts) {
49
50
  return __awaiter(this, void 0, void 0, function () {
50
51
  var contentBase, themeName, compiler, _a, _b;
@@ -52,6 +53,10 @@ function prodCommand(opts) {
52
53
  switch (_c.label) {
53
54
  case 0:
54
55
  contentBase = process.cwd() + "/dist/";
56
+ (0, build_favicon_1.buildFavicon)().catch(function (err) {
57
+ console.log("Error building favicon:");
58
+ console.error(err);
59
+ });
55
60
  return [4 /*yield*/, (0, promptIfRepoNameIncorrect_1.promptIfRepoThemeMismatch)()];
56
61
  case 1:
57
62
  _c.sent();
package/cli/cli.js CHANGED
@@ -60,25 +60,33 @@ program
60
60
  program
61
61
  .command("build")
62
62
  .description("Build in production mode")
63
- .option("-s, --serverless", 'Build in "serverless" mode')
64
63
  .action(function (options) {
65
- (0, build_prod_1.prodCommand)({
66
- serverless: options.serverless,
67
- });
68
- });
69
- program
70
- .command("vercel-build")
71
- .description("Create and build a Next.js project in .serverless")
72
- .action(function (options) {
73
- (0, create_next_app_1.createNextApp)({
74
- baseDirectory: process.cwd(),
75
- dev: false,
76
- build: true,
77
- });
64
+ if (process.env.VERCEL) {
65
+ (0, create_next_app_1.createNextApp)({
66
+ baseDirectory: process.cwd(),
67
+ dev: false,
68
+ build: true,
69
+ });
70
+ }
71
+ else {
72
+ (0, build_prod_1.prodCommand)({
73
+ serverless: options.serverless,
74
+ });
75
+ }
78
76
  });
77
+ // program
78
+ // .command("vercel-build")
79
+ // .description("Create and build a Next.js project in .serverless")
80
+ // .action((options) => {
81
+ // createNextApp({
82
+ // baseDirectory: process.cwd(),
83
+ // dev: false,
84
+ // build: true,
85
+ // })
86
+ // })
79
87
  program
80
88
  .command("next")
81
- .description("Create a Next.js project in .serverless")
89
+ .description("Run the serverless app in standalone mode")
82
90
  .action(function (options) {
83
91
  (0, create_next_app_1.createNextApp)({
84
92
  baseDirectory: process.cwd(),
@@ -1,10 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  import { CodegenState } from "../../../build/state/codegen-state";
3
3
  import { CompilerState } from "../../../build/state/compiler-state";
4
+ import { ServerlessState } from "../../../build/state/serverless-state";
4
5
  import { Observable } from "../../../utils/Observable";
5
6
  declare type Props = {
6
7
  bundles: Observable<CompilerState>[];
8
+ serverless?: Observable<ServerlessState>;
7
9
  codegen?: Observable<CodegenState>;
10
+ configChanged: Observable<boolean>;
8
11
  };
9
12
  export declare function DevCLIDisplay(props: Props): JSX.Element;
10
13
  export {};
@@ -14,10 +14,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.DevCLIDisplay = void 0;
15
15
  var jsx_runtime_1 = require("react/jsx-runtime");
16
16
  var ink_1 = require("ink");
17
+ var react_1 = require("react");
18
+ var useObservable_1 = require("../../../utils/useObservable");
17
19
  var BundleDisplay_1 = require("./BundleDisplay");
18
20
  var CodegenDisplay_1 = require("./CodegenDisplay");
19
21
  var Fullscreen_1 = require("./Fullscreen");
22
+ var ServerlessDisplay_1 = require("./ServerlessDisplay");
23
+ var MODE_LABELS = {
24
+ serverless: "Serverless Log",
25
+ bundles: "Build Log",
26
+ };
20
27
  function DevCLIDisplay(props) {
21
- return ((0, jsx_runtime_1.jsx)(Fullscreen_1.Fullscreen, { children: (0, jsx_runtime_1.jsxs)(ink_1.Box, __assign({ width: "100%", height: "100%", flexDirection: "column", minHeight: "100%" }, { children: [props.bundles.map(function (bundle, i) { return ((0, jsx_runtime_1.jsx)(BundleDisplay_1.BundleDisplay, { bundle: bundle }, i)); }), props.codegen && (0, jsx_runtime_1.jsx)(CodegenDisplay_1.CodegenDisplay, { codegen: props.codegen }, void 0)] }), void 0) }, void 0));
28
+ var _a = (0, react_1.useState)("bundles"), mode = _a[0], setMode = _a[1];
29
+ (0, ink_1.useInput)(function (ev, key) {
30
+ if (ev.charAt(0) === "z") {
31
+ if (props.serverless) {
32
+ setMode(function (mode) { return (mode === "bundles" ? "serverless" : "bundles"); });
33
+ }
34
+ }
35
+ else if (ev.charAt(0) === "c" || ev.charAt(0) === "q" || key.escape) {
36
+ process.exit(0);
37
+ }
38
+ });
39
+ var configChanged = (0, useObservable_1.useObservable)(props.configChanged);
40
+ return ((0, jsx_runtime_1.jsx)(Fullscreen_1.Fullscreen, { children: (0, jsx_runtime_1.jsxs)(ink_1.Box, __assign({ width: "100%", height: "100%", flexDirection: "column", minHeight: "100%" }, { children: [mode === "bundles" ? ((0, jsx_runtime_1.jsxs)(ink_1.Box, __assign({ width: "100%", flexGrow: 1, flexDirection: "column" }, { children: [props.bundles.map(function (bundle, i) { return ((0, jsx_runtime_1.jsx)(BundleDisplay_1.BundleDisplay, { bundle: bundle }, i)); }), props.codegen && (0, jsx_runtime_1.jsx)(CodegenDisplay_1.CodegenDisplay, { codegen: props.codegen }, void 0), props.serverless && (0, jsx_runtime_1.jsx)(ServerlessDisplay_1.ServerlessDisplay, { serverless: props.serverless }, void 0)] }), void 0)) : mode === "serverless" ? ((0, jsx_runtime_1.jsx)(ink_1.Box, __assign({ width: "100%", flexGrow: 1, flexDirection: "column" }, { children: (0, jsx_runtime_1.jsx)(ServerlessDisplay_1.ServerlessLog, { serverless: props.serverless }, void 0) }), void 0)) : null, configChanged && ((0, jsx_runtime_1.jsx)(ink_1.Box, __assign({ paddingX: 1, borderColor: "yellow", borderStyle: "round" }, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, __assign({ color: "yellow" }, { children: ["\uD83D\uDEA8 Change detected in ", (0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ color: "yellowBright" }, { children: "ed.config.json" }), void 0), " \u2014 Please restart", " ", (0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ color: "yellowBright" }, { children: "yarn dev" }), void 0)] }), void 0) }), void 0)), (0, jsx_runtime_1.jsxs)(ink_1.Box, __assign({ paddingX: 1, borderColor: "cyan", borderStyle: "round", flexDirection: "row", justifyContent: "space-between" }, { children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ bold: true, color: "cyanBright" }, { children: MODE_LABELS[mode] }), void 0) }, void 0), (0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [props.serverless && ((0, jsx_runtime_1.jsxs)(ink_1.Text, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ bold: true, color: "white" }, { children: "z" }), void 0), ": Toggle Serverless Log", " "] }, void 0)), (0, jsx_runtime_1.jsxs)(ink_1.Text, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, __assign({ bold: true, color: "white" }, { children: "q" }), void 0), ": Quit"] }, void 0)] }, void 0)] }), void 0)] }), void 0) }, void 0));
22
41
  }
23
42
  exports.DevCLIDisplay = DevCLIDisplay;
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { ServerlessState } from "../../../build/state/serverless-state";
3
+ import { Observable } from "../../../utils/Observable";
4
+ export declare function ServerlessDisplay(props: {
5
+ serverless: Observable<ServerlessState>;
6
+ }): JSX.Element;
7
+ export declare function ServerlessLog(props: {
8
+ serverless: Observable<ServerlessState>;
9
+ }): JSX.Element;