eddev 0.2.0-beta.0 → 0.2.0-beta.12

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 (92) 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 +3 -0
  8. package/build/serverless/create-next-app.js +213 -70
  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/prepare-next.d.ts → build/workers/serverless-worker-script.d.ts} +0 -0
  14. package/{cli/prepare-next.js → build/workers/serverless-worker-script.js} +0 -0
  15. package/cli/build.dev.js +30 -7
  16. package/cli/build.prod.js +5 -0
  17. package/cli/cli.js +24 -5
  18. package/cli/display/components/DevCLIDisplay.d.ts +3 -0
  19. package/cli/display/components/DevCLIDisplay.js +20 -1
  20. package/cli/display/components/ServerlessDisplay.d.ts +9 -0
  21. package/cli/display/components/ServerlessDisplay.js +68 -0
  22. package/components/NextRouter.d.ts +9 -0
  23. package/components/NextRouter.js +36 -0
  24. package/config/config-schema.d.ts +50 -0
  25. package/config/config-schema.js +18 -0
  26. package/config/create-schema-file.d.ts +1 -0
  27. package/config/create-schema-file.js +20 -0
  28. package/config/get-config.d.ts +36 -0
  29. package/config/get-config.js +32 -0
  30. package/config/index.d.ts +2 -0
  31. package/config/index.js +14 -0
  32. package/config/parse-config.d.ts +23 -0
  33. package/config/parse-config.js +8 -0
  34. package/config/print-zod-errors.d.ts +2 -0
  35. package/config/print-zod-errors.js +14 -0
  36. package/dev-ui/components/BreakpointItemHeader.d.ts +11 -0
  37. package/dev-ui/components/BreakpointItemHeader.js +50 -0
  38. package/dev-ui/components/BreakpointList.d.ts +6 -0
  39. package/dev-ui/components/BreakpointList.js +38 -0
  40. package/dev-ui/components/DevUI.d.ts +2 -0
  41. package/dev-ui/components/DevUI.js +19 -0
  42. package/dev-ui/components/Launcher.d.ts +9 -0
  43. package/dev-ui/components/Launcher.js +118 -0
  44. package/dev-ui/components/PanelWrapper.d.ts +4 -0
  45. package/dev-ui/components/PanelWrapper.js +21 -0
  46. package/dev-ui/components/Pill.d.ts +0 -0
  47. package/dev-ui/components/Pill.js +1 -0
  48. package/dev-ui/components/SpacingEditor.d.ts +2 -0
  49. package/dev-ui/components/SpacingEditor.js +10 -0
  50. package/dev-ui/components/Text.d.ts +39 -0
  51. package/dev-ui/components/Text.js +13 -0
  52. package/dev-ui/components/panels/SpacingEditor.d.ts +2 -0
  53. package/dev-ui/components/panels/SpacingEditor.js +56 -0
  54. package/dev-ui/hooks/usePersistState.d.ts +1 -0
  55. package/dev-ui/hooks/usePersistState.js +28 -0
  56. package/dev-ui/icons.d.ts +11 -0
  57. package/dev-ui/icons.js +25 -0
  58. package/dev-ui/index.d.ts +1 -0
  59. package/dev-ui/index.js +5 -0
  60. package/dev-ui/panels.d.ts +11 -0
  61. package/dev-ui/panels.js +31 -0
  62. package/dev-ui/theme.d.ts +135 -0
  63. package/dev-ui/theme.js +45 -0
  64. package/entry/Root.js +6 -5
  65. package/hooks/useAppData.js +0 -1
  66. package/package.json +8 -7
  67. package/serverless/create-rpc-client.d.ts +32 -0
  68. package/serverless/create-rpc-client.js +20 -0
  69. package/serverless/define-api.d.ts +2 -0
  70. package/serverless/define-api.js +66 -0
  71. package/serverless/define-rpc-router.d.ts +2 -0
  72. package/serverless/define-rpc-router.js +27 -0
  73. package/serverless/error-codes.d.ts +2 -0
  74. package/serverless/error-codes.js +14 -0
  75. package/serverless/index.d.ts +4 -0
  76. package/serverless/index.js +16 -0
  77. package/serverless/rpc-provider.d.ts +1 -0
  78. package/serverless/rpc-provider.js +5 -0
  79. package/serverless-template/_utils/ed-config.ts +5 -0
  80. package/serverless-template/_utils/fetch-wordpress-props.ts +39 -0
  81. package/serverless-template/next.config.js +63 -42
  82. package/serverless-template/pages/[...slug].tsx +6 -7
  83. package/serverless-template/pages/_app.tsx +9 -5
  84. package/serverless-template/pages/_document.tsx +19 -0
  85. package/serverless-template/pages/index.tsx +3 -2
  86. package/style/createStitches.d.ts +63 -1
  87. package/style/createStitches.js +182 -40
  88. package/utils/getRepoName.d.ts +2 -2
  89. package/utils/getRepoName.js +14 -52
  90. package/build/prepare-next.d.ts +0 -1
  91. package/build/prepare-next.js +0 -5
  92. 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,59 +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();
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
+ ];
144
+ case 6:
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
+ ];
151
+ case 7:
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")), ["**/*"])];
156
+ case 8:
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" });
107
169
  // Create manifests
108
170
  initManifests(serverlessDirectory, opts.dev);
109
- // Start
110
- return [4 /*yield*/, runScript(serverlessDirectory, "dev")];
111
- case 6:
112
- // Start
113
- _a.sent();
114
- return [2 /*return*/];
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*/];
115
189
  }
116
190
  });
117
191
  });
@@ -146,7 +220,6 @@ function copyTemplate(targetFolder) {
146
220
  switch (_a.label) {
147
221
  case 0:
148
222
  sourceFolder = (0, path_1.resolve)(__dirname, "../../serverless-template");
149
- console.log("Copying from", sourceFolder, "to", targetFolder);
150
223
  (0, fs_extra_1.mkdirp)(targetFolder);
151
224
  return [4 /*yield*/, (0, glob_promise_1.default)((0, path_1.resolve)(sourceFolder, "**/*.*"))];
152
225
  case 1:
@@ -154,9 +227,6 @@ function copyTemplate(targetFolder) {
154
227
  return [4 /*yield*/, Promise.all(files.map(function (src) {
155
228
  var dest = src.replace(sourceFolder, targetFolder);
156
229
  return (0, fs_extra_1.copy)(src, dest);
157
- // return new Promise((resolve) => {
158
- // console.log("Copy", src, "to", dest)
159
- // })
160
230
  }))];
161
231
  case 2:
162
232
  _a.sent();
@@ -199,33 +269,68 @@ function updatePackagesFile(sourceFolder, targetFolder) {
199
269
  });
200
270
  });
201
271
  }
202
- function syncFiles(sourceFolder, targetFolder) {
272
+ function syncFiles(sourceFolder, targetFolder, patterns) {
273
+ return __awaiter(this, void 0, void 0, function () {
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) {
203
307
  return __awaiter(this, void 0, void 0, function () {
204
- var links;
308
+ var createServer, parse, next, app, handle;
205
309
  return __generator(this, function (_a) {
206
310
  switch (_a.label) {
207
- case 0:
208
- links = [
209
- "blocks",
210
- "components",
211
- "hooks",
212
- "queries",
213
- ".env",
214
- "views",
215
- "theme.css.tsx",
216
- "types.graphql.ts",
217
- "types.views.ts",
218
- "types.blocks.ts",
219
- ];
220
- return [4 /*yield*/, Promise.all(links.map(function (file) {
221
- var src = (0, path_1.resolve)(sourceFolder, file);
222
- var dest = (0, path_1.resolve)(targetFolder, file);
223
- if ((0, fs_1.existsSync)(src)) {
224
- return (0, fs_extra_1.copy)(src, dest);
225
- }
226
- }))];
311
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("http")); })];
227
312
  case 1:
228
- _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
+ });
229
334
  return [2 /*return*/];
230
335
  }
231
336
  });
@@ -289,3 +394,41 @@ function initManifests(dir, dev) {
289
394
  });
290
395
  });
291
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,19 +60,38 @@ 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
- });
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
+ }
68
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
+ // })
69
87
  program
70
88
  .command("next")
71
- .description("Create a Next.js project in .serverless")
89
+ .description("Run the serverless app in standalone mode")
72
90
  .action(function (options) {
73
91
  (0, create_next_app_1.createNextApp)({
74
92
  baseDirectory: process.cwd(),
75
93
  dev: true,
94
+ build: false,
76
95
  });
77
96
  });
78
97
  program
@@ -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;