@absolutejs/absolute 0.19.0-beta.110 → 0.19.0-beta.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.absolutejs/tsconfig.tsbuildinfo +1 -1
- package/dist/build.js +1 -3
- package/dist/build.js.map +2 -2
- package/dist/cli/index.js +119 -132
- package/dist/index.js +51 -11
- package/dist/index.js.map +3 -3
- package/dist/src/dev/devCert.d.ts +2 -0
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -17,61 +17,6 @@ var __export = (target, all) => {
|
|
|
17
17
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
18
18
|
var __require = import.meta.require;
|
|
19
19
|
|
|
20
|
-
// src/constants.ts
|
|
21
|
-
var ANSI_ESCAPE_LENGTH = 3, ASCII_SPACE = 32, BASE_36_RADIX = 36, BYTES_PER_KILOBYTE = 1024, CLI_ARGS_OFFSET = 3, DEFAULT_PORT = 3000, HOURS_IN_DAY = 24, HOURS_IN_HALF_DAY = 12, MAX_ERROR_LENGTH = 200, MILLISECONDS_IN_A_SECOND = 1000, MINUTES_IN_AN_HOUR = 60, SECONDS_IN_A_MINUTE = 60, MILLISECONDS_IN_A_MINUTE, MILLISECONDS_IN_A_DAY, SIGINT_EXIT_CODE = 130, SIGTERM_EXIT_CODE = 143, TIME_PRECISION = 2, TWO_THIRDS, UNFOUND_INDEX = -1;
|
|
22
|
-
var init_constants = __esm(() => {
|
|
23
|
-
MILLISECONDS_IN_A_MINUTE = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;
|
|
24
|
-
MILLISECONDS_IN_A_DAY = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE * MINUTES_IN_AN_HOUR * HOURS_IN_DAY;
|
|
25
|
-
TWO_THIRDS = 2 / 3;
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// src/utils/getDurationString.ts
|
|
29
|
-
var getDurationString = (duration) => {
|
|
30
|
-
let durationString;
|
|
31
|
-
if (duration < MILLISECONDS_IN_A_SECOND) {
|
|
32
|
-
durationString = `${duration.toFixed(TIME_PRECISION)}ms`;
|
|
33
|
-
} else if (duration < MILLISECONDS_IN_A_MINUTE) {
|
|
34
|
-
durationString = `${(duration / MILLISECONDS_IN_A_SECOND).toFixed(TIME_PRECISION)}s`;
|
|
35
|
-
} else {
|
|
36
|
-
durationString = `${(duration / MILLISECONDS_IN_A_MINUTE).toFixed(TIME_PRECISION)}m`;
|
|
37
|
-
}
|
|
38
|
-
return durationString;
|
|
39
|
-
};
|
|
40
|
-
var init_getDurationString = __esm(() => {
|
|
41
|
-
init_constants();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// src/utils/startupBanner.ts
|
|
45
|
-
var MONTHS, formatTimestamp = () => {
|
|
46
|
-
const now = new Date;
|
|
47
|
-
const month = MONTHS[now.getMonth()];
|
|
48
|
-
const day = now.getDate().toString().padStart(2, "0");
|
|
49
|
-
let hours = now.getHours();
|
|
50
|
-
const minutes = now.getMinutes().toString().padStart(2, "0");
|
|
51
|
-
const seconds = now.getSeconds().toString().padStart(2, "0");
|
|
52
|
-
const ampm = hours >= HOURS_IN_HALF_DAY ? "PM" : "AM";
|
|
53
|
-
hours = hours % HOURS_IN_HALF_DAY || HOURS_IN_HALF_DAY;
|
|
54
|
-
return `${month} ${day} ${hours}:${minutes}:${seconds} ${ampm}`;
|
|
55
|
-
};
|
|
56
|
-
var init_startupBanner = __esm(() => {
|
|
57
|
-
init_constants();
|
|
58
|
-
init_getDurationString();
|
|
59
|
-
MONTHS = [
|
|
60
|
-
"Jan",
|
|
61
|
-
"Feb",
|
|
62
|
-
"Mar",
|
|
63
|
-
"Apr",
|
|
64
|
-
"May",
|
|
65
|
-
"Jun",
|
|
66
|
-
"Jul",
|
|
67
|
-
"Aug",
|
|
68
|
-
"Sep",
|
|
69
|
-
"Oct",
|
|
70
|
-
"Nov",
|
|
71
|
-
"Dec"
|
|
72
|
-
];
|
|
73
|
-
});
|
|
74
|
-
|
|
75
20
|
// src/utils/loadConfig.ts
|
|
76
21
|
var exports_loadConfig = {};
|
|
77
22
|
__export(exports_loadConfig, {
|
|
@@ -90,69 +35,17 @@ Expected: export default defineConfig({ ... })`);
|
|
|
90
35
|
};
|
|
91
36
|
var init_loadConfig = () => {};
|
|
92
37
|
|
|
93
|
-
// src/utils/logger.ts
|
|
94
|
-
var colors, frameworkColors, formatPath = (filePath) => {
|
|
95
|
-
const cwd = process.cwd();
|
|
96
|
-
let relative = filePath.startsWith(cwd) ? filePath.slice(cwd.length + 1) : filePath;
|
|
97
|
-
relative = relative.replace(/\\/g, "/");
|
|
98
|
-
if (!relative.startsWith("/")) {
|
|
99
|
-
relative = `/${relative}`;
|
|
100
|
-
}
|
|
101
|
-
return relative;
|
|
102
|
-
}, getFrameworkColor = (framework) => frameworkColors[framework] || colors.white, log = (action, options) => {
|
|
103
|
-
const timestamp = `${colors.dim}${formatTimestamp()}${colors.reset}`;
|
|
104
|
-
const tag = `${colors.cyan}[hmr]${colors.reset}`;
|
|
105
|
-
let message = action;
|
|
106
|
-
if (options?.path) {
|
|
107
|
-
const pathColor = options.framework ? getFrameworkColor(options.framework) : colors.white;
|
|
108
|
-
message += ` ${pathColor}${formatPath(options.path)}${colors.reset}`;
|
|
109
|
-
}
|
|
110
|
-
if (options?.duration !== undefined) {
|
|
111
|
-
message += ` ${colors.dim}(${options.duration}ms)${colors.reset}`;
|
|
112
|
-
}
|
|
113
|
-
console.log(`${timestamp} ${tag} ${message}`);
|
|
114
|
-
}, logInfo = (message) => {
|
|
115
|
-
log(message);
|
|
116
|
-
}, logWarn = (message) => {
|
|
117
|
-
const timestamp = `${colors.dim}${formatTimestamp()}${colors.reset}`;
|
|
118
|
-
const tag = `${colors.yellow}[hmr]${colors.reset}`;
|
|
119
|
-
console.warn(`${timestamp} ${tag} ${colors.yellow}warning${colors.reset} ${message}`);
|
|
120
|
-
};
|
|
121
|
-
var init_logger = __esm(() => {
|
|
122
|
-
init_startupBanner();
|
|
123
|
-
colors = {
|
|
124
|
-
blue: "\x1B[34m",
|
|
125
|
-
bold: "\x1B[1m",
|
|
126
|
-
cyan: "\x1B[36m",
|
|
127
|
-
dim: "\x1B[2m",
|
|
128
|
-
green: "\x1B[32m",
|
|
129
|
-
magenta: "\x1B[35m",
|
|
130
|
-
red: "\x1B[31m",
|
|
131
|
-
reset: "\x1B[0m",
|
|
132
|
-
white: "\x1B[37m",
|
|
133
|
-
yellow: "\x1B[33m"
|
|
134
|
-
};
|
|
135
|
-
frameworkColors = {
|
|
136
|
-
angular: colors.magenta,
|
|
137
|
-
assets: colors.dim,
|
|
138
|
-
css: colors.cyan,
|
|
139
|
-
html: colors.white,
|
|
140
|
-
htmx: colors.white,
|
|
141
|
-
react: colors.blue,
|
|
142
|
-
svelte: colors.yellow,
|
|
143
|
-
vue: colors.green
|
|
144
|
-
};
|
|
145
|
-
});
|
|
146
|
-
|
|
147
38
|
// src/dev/devCert.ts
|
|
148
39
|
var exports_devCert = {};
|
|
149
40
|
__export(exports_devCert, {
|
|
41
|
+
setupMkcert: () => setupMkcert,
|
|
150
42
|
loadDevCert: () => loadDevCert,
|
|
43
|
+
hasMkcert: () => hasMkcert,
|
|
151
44
|
ensureDevCert: () => ensureDevCert
|
|
152
45
|
});
|
|
153
46
|
import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync4 } from "fs";
|
|
154
47
|
import { join as join3 } from "path";
|
|
155
|
-
var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = () => existsSync4(CERT_PATH) && existsSync4(KEY_PATH), isCertExpired = () => {
|
|
48
|
+
var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, devLog = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1B[0m \x1B[36m[dev]\x1B[0m ${msg}`), devWarn = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1B[0m \x1B[33m[dev]\x1B[0m \x1B[33m${msg}\x1B[0m`), certFilesExist = () => existsSync4(CERT_PATH) && existsSync4(KEY_PATH), isCertExpired = () => {
|
|
156
49
|
try {
|
|
157
50
|
const certPem = readFileSync4(CERT_PATH, "utf-8");
|
|
158
51
|
const proc = Bun.spawnSync(["openssl", "x509", "-enddate", "-noout"], {
|
|
@@ -176,7 +69,7 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
176
69
|
return false;
|
|
177
70
|
}
|
|
178
71
|
}, generateWithMkcert = () => {
|
|
179
|
-
|
|
72
|
+
devLog("Generating locally-trusted certificate with mkcert...");
|
|
180
73
|
const result = Bun.spawnSync([
|
|
181
74
|
"mkcert",
|
|
182
75
|
"-cert-file",
|
|
@@ -191,9 +84,9 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
191
84
|
const err = new TextDecoder().decode(result.stderr);
|
|
192
85
|
throw new Error(`mkcert failed: ${err}`);
|
|
193
86
|
}
|
|
194
|
-
|
|
87
|
+
devLog("HTTPS enabled with locally-trusted certificate (mkcert)");
|
|
195
88
|
}, generateSelfSigned = () => {
|
|
196
|
-
|
|
89
|
+
devLog("Generating self-signed certificate...");
|
|
197
90
|
const proc = Bun.spawnSync([
|
|
198
91
|
"openssl",
|
|
199
92
|
"req",
|
|
@@ -218,14 +111,23 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
218
111
|
const err = new TextDecoder().decode(proc.stderr);
|
|
219
112
|
throw new Error(`openssl failed: ${err}`);
|
|
220
113
|
}
|
|
221
|
-
|
|
114
|
+
devLog("HTTPS enabled with self-signed certificate");
|
|
115
|
+
devLog("For a trusted certificate (no browser warning), install mkcert:");
|
|
116
|
+
devLog(" brew install mkcert && mkcert -install (macOS)");
|
|
117
|
+
devLog(" sudo apt install mkcert && mkcert -install (Linux)");
|
|
118
|
+
devLog("Then restart the dev server.");
|
|
222
119
|
}, ensureDevCert = () => {
|
|
223
120
|
mkdirSync2(CERT_DIR, { recursive: true });
|
|
224
121
|
if (certFilesExist() && !isCertExpired()) {
|
|
122
|
+
if (hasMkcert()) {
|
|
123
|
+
devLog("HTTPS enabled with locally-trusted certificate (mkcert)");
|
|
124
|
+
} else {
|
|
125
|
+
devLog("HTTPS enabled with self-signed certificate");
|
|
126
|
+
}
|
|
225
127
|
return { cert: CERT_PATH, key: KEY_PATH };
|
|
226
128
|
}
|
|
227
129
|
if (certFilesExist()) {
|
|
228
|
-
|
|
130
|
+
devWarn("Dev certificate expired, regenerating...");
|
|
229
131
|
}
|
|
230
132
|
try {
|
|
231
133
|
if (hasMkcert()) {
|
|
@@ -234,7 +136,7 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
234
136
|
generateSelfSigned();
|
|
235
137
|
}
|
|
236
138
|
} catch (err) {
|
|
237
|
-
|
|
139
|
+
devWarn(`Failed to generate certificate: ${err instanceof Error ? err.message : err}`);
|
|
238
140
|
return null;
|
|
239
141
|
}
|
|
240
142
|
return { cert: CERT_PATH, key: KEY_PATH };
|
|
@@ -250,23 +152,112 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
250
152
|
} catch {
|
|
251
153
|
return null;
|
|
252
154
|
}
|
|
155
|
+
}, setupMkcert = () => {
|
|
156
|
+
devLog("Setting up mkcert for locally-trusted HTTPS...");
|
|
157
|
+
if (!hasMkcert()) {
|
|
158
|
+
devWarn("mkcert is not installed.");
|
|
159
|
+
console.log("");
|
|
160
|
+
console.log(" Install it first:");
|
|
161
|
+
console.log(" macOS: brew install mkcert");
|
|
162
|
+
console.log(" Linux: sudo apt install mkcert");
|
|
163
|
+
console.log(" Windows: choco install mkcert");
|
|
164
|
+
console.log("");
|
|
165
|
+
console.log(" Then run: absolute mkcert");
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
devLog("Installing local certificate authority...");
|
|
169
|
+
const installResult = Bun.spawnSync(["mkcert", "-install"], {
|
|
170
|
+
stderr: "pipe",
|
|
171
|
+
stdout: "pipe"
|
|
172
|
+
});
|
|
173
|
+
if (installResult.exitCode !== 0) {
|
|
174
|
+
devWarn("Failed to install CA: " + new TextDecoder().decode(installResult.stderr));
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
const { rmSync } = __require("fs");
|
|
179
|
+
rmSync(CERT_PATH, { force: true });
|
|
180
|
+
rmSync(KEY_PATH, { force: true });
|
|
181
|
+
} catch {}
|
|
182
|
+
mkdirSync2(CERT_DIR, { recursive: true });
|
|
183
|
+
generateWithMkcert();
|
|
184
|
+
console.log("");
|
|
185
|
+
devLog("Done! Restart your dev server \u2014 no more browser warnings.");
|
|
186
|
+
return true;
|
|
253
187
|
};
|
|
254
188
|
var init_devCert = __esm(() => {
|
|
255
|
-
init_logger();
|
|
256
189
|
CERT_DIR = join3(process.cwd(), ".absolutejs");
|
|
257
190
|
CERT_PATH = join3(CERT_DIR, "cert.pem");
|
|
258
191
|
KEY_PATH = join3(CERT_DIR, "key.pem");
|
|
259
192
|
});
|
|
260
193
|
|
|
261
194
|
// src/cli/scripts/dev.ts
|
|
262
|
-
init_constants();
|
|
263
|
-
init_startupBanner();
|
|
264
195
|
var {$: $2, env } = globalThis.Bun;
|
|
265
196
|
import { existsSync as existsSync5 } from "fs";
|
|
266
197
|
import { resolve as resolve3 } from "path";
|
|
267
198
|
|
|
199
|
+
// src/constants.ts
|
|
200
|
+
var ANSI_ESCAPE_LENGTH = 3;
|
|
201
|
+
var ASCII_SPACE = 32;
|
|
202
|
+
var BASE_36_RADIX = 36;
|
|
203
|
+
var BYTES_PER_KILOBYTE = 1024;
|
|
204
|
+
var CLI_ARGS_OFFSET = 3;
|
|
205
|
+
var DEFAULT_PORT = 3000;
|
|
206
|
+
var HOURS_IN_DAY = 24;
|
|
207
|
+
var HOURS_IN_HALF_DAY = 12;
|
|
208
|
+
var MAX_ERROR_LENGTH = 200;
|
|
209
|
+
var MILLISECONDS_IN_A_SECOND = 1000;
|
|
210
|
+
var MINUTES_IN_AN_HOUR = 60;
|
|
211
|
+
var SECONDS_IN_A_MINUTE = 60;
|
|
212
|
+
var MILLISECONDS_IN_A_MINUTE = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;
|
|
213
|
+
var MILLISECONDS_IN_A_DAY = MILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE * MINUTES_IN_AN_HOUR * HOURS_IN_DAY;
|
|
214
|
+
var SIGINT_EXIT_CODE = 130;
|
|
215
|
+
var SIGTERM_EXIT_CODE = 143;
|
|
216
|
+
var TIME_PRECISION = 2;
|
|
217
|
+
var TWO_THIRDS = 2 / 3;
|
|
218
|
+
var UNFOUND_INDEX = -1;
|
|
219
|
+
|
|
220
|
+
// src/utils/getDurationString.ts
|
|
221
|
+
var getDurationString = (duration) => {
|
|
222
|
+
let durationString;
|
|
223
|
+
if (duration < MILLISECONDS_IN_A_SECOND) {
|
|
224
|
+
durationString = `${duration.toFixed(TIME_PRECISION)}ms`;
|
|
225
|
+
} else if (duration < MILLISECONDS_IN_A_MINUTE) {
|
|
226
|
+
durationString = `${(duration / MILLISECONDS_IN_A_SECOND).toFixed(TIME_PRECISION)}s`;
|
|
227
|
+
} else {
|
|
228
|
+
durationString = `${(duration / MILLISECONDS_IN_A_MINUTE).toFixed(TIME_PRECISION)}m`;
|
|
229
|
+
}
|
|
230
|
+
return durationString;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// src/utils/startupBanner.ts
|
|
234
|
+
var MONTHS = [
|
|
235
|
+
"Jan",
|
|
236
|
+
"Feb",
|
|
237
|
+
"Mar",
|
|
238
|
+
"Apr",
|
|
239
|
+
"May",
|
|
240
|
+
"Jun",
|
|
241
|
+
"Jul",
|
|
242
|
+
"Aug",
|
|
243
|
+
"Sep",
|
|
244
|
+
"Oct",
|
|
245
|
+
"Nov",
|
|
246
|
+
"Dec"
|
|
247
|
+
];
|
|
248
|
+
var formatTimestamp = () => {
|
|
249
|
+
const now = new Date;
|
|
250
|
+
const month = MONTHS[now.getMonth()];
|
|
251
|
+
const day = now.getDate().toString().padStart(2, "0");
|
|
252
|
+
let hours = now.getHours();
|
|
253
|
+
const minutes = now.getMinutes().toString().padStart(2, "0");
|
|
254
|
+
const seconds = now.getSeconds().toString().padStart(2, "0");
|
|
255
|
+
const ampm = hours >= HOURS_IN_HALF_DAY ? "PM" : "AM";
|
|
256
|
+
hours = hours % HOURS_IN_HALF_DAY || HOURS_IN_HALF_DAY;
|
|
257
|
+
return `${month} ${day} ${hours}:${minutes}:${seconds} ${ampm}`;
|
|
258
|
+
};
|
|
259
|
+
|
|
268
260
|
// src/cli/interactive.ts
|
|
269
|
-
init_constants();
|
|
270
261
|
import { openSync } from "fs";
|
|
271
262
|
import { ReadStream } from "tty";
|
|
272
263
|
var SHORTCUTS = {
|
|
@@ -671,8 +662,6 @@ var sendTelemetryEvent = (event, payload) => {
|
|
|
671
662
|
init_loadConfig();
|
|
672
663
|
|
|
673
664
|
// src/cli/utils.ts
|
|
674
|
-
init_constants();
|
|
675
|
-
init_startupBanner();
|
|
676
665
|
var {$ } = globalThis.Bun;
|
|
677
666
|
import { execSync } from "child_process";
|
|
678
667
|
import { existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
|
|
@@ -1043,7 +1032,6 @@ var eslint = async (args) => {
|
|
|
1043
1032
|
};
|
|
1044
1033
|
|
|
1045
1034
|
// src/cli/scripts/info.ts
|
|
1046
|
-
init_constants();
|
|
1047
1035
|
import { execSync as execSync2 } from "child_process";
|
|
1048
1036
|
import { existsSync as existsSync6, readFileSync as readFileSync5 } from "fs";
|
|
1049
1037
|
import { arch as arch2, cpus, platform as platform2, totalmem, version } from "os";
|
|
@@ -1182,7 +1170,6 @@ var info = () => {
|
|
|
1182
1170
|
};
|
|
1183
1171
|
|
|
1184
1172
|
// src/cli/cache.ts
|
|
1185
|
-
init_constants();
|
|
1186
1173
|
import { mkdir } from "fs/promises";
|
|
1187
1174
|
import { join as join4 } from "path";
|
|
1188
1175
|
var {Glob } = globalThis.Bun;
|
|
@@ -1318,13 +1305,10 @@ var prettier = async (args) => {
|
|
|
1318
1305
|
};
|
|
1319
1306
|
|
|
1320
1307
|
// src/cli/scripts/start.ts
|
|
1321
|
-
init_constants();
|
|
1322
|
-
init_getDurationString();
|
|
1323
|
-
init_loadConfig();
|
|
1324
|
-
init_startupBanner();
|
|
1325
1308
|
var {env: env2 } = globalThis.Bun;
|
|
1326
1309
|
import { existsSync as existsSync7, readFileSync as readFileSync6 } from "fs";
|
|
1327
1310
|
import { basename, resolve as resolve5 } from "path";
|
|
1311
|
+
init_loadConfig();
|
|
1328
1312
|
var cliTag2 = (color, message) => `\x1B[2m${formatTimestamp()}\x1B[0m ${color}[cli]\x1B[0m ${color}${message}\x1B[0m`;
|
|
1329
1313
|
var resolvePackageVersion = (candidates) => {
|
|
1330
1314
|
for (const candidate of candidates) {
|
|
@@ -1364,13 +1348,13 @@ var tryImportBuild = async (candidate) => {
|
|
|
1364
1348
|
}
|
|
1365
1349
|
};
|
|
1366
1350
|
var handleBundleFailure = (serverBundle, bundleStart, serverEntry) => {
|
|
1367
|
-
serverBundle.logs.forEach((
|
|
1368
|
-
console.error(
|
|
1351
|
+
serverBundle.logs.forEach((log) => {
|
|
1352
|
+
console.error(log);
|
|
1369
1353
|
});
|
|
1370
1354
|
sendTelemetryEvent("start:bundle-error", {
|
|
1371
1355
|
durationMs: Math.round(performance.now() - bundleStart),
|
|
1372
1356
|
entry: serverEntry,
|
|
1373
|
-
message: serverBundle.logs.find((
|
|
1357
|
+
message: serverBundle.logs.find((log) => log.level === "error")?.message?.toString().slice(0, MAX_ERROR_LENGTH) ?? "Unknown error"
|
|
1374
1358
|
});
|
|
1375
1359
|
console.error(cliTag2("\x1B[31m", "Server bundle failed."));
|
|
1376
1360
|
process.exit(1);
|
|
@@ -1570,7 +1554,6 @@ var start = async (serverEntry, outdir, configPath2) => {
|
|
|
1570
1554
|
};
|
|
1571
1555
|
|
|
1572
1556
|
// src/cli/index.ts
|
|
1573
|
-
init_constants();
|
|
1574
1557
|
var [command] = process.argv.slice(2);
|
|
1575
1558
|
var args = process.argv.slice(CLI_ARGS_OFFSET);
|
|
1576
1559
|
var parseNamedArg = (flag) => {
|
|
@@ -1610,6 +1593,10 @@ if (command === "dev") {
|
|
|
1610
1593
|
} else if (command === "telemetry") {
|
|
1611
1594
|
sendTelemetryEvent("cli:command", { command });
|
|
1612
1595
|
telemetry(args);
|
|
1596
|
+
} else if (command === "mkcert") {
|
|
1597
|
+
sendTelemetryEvent("cli:command", { command });
|
|
1598
|
+
const { setupMkcert: setupMkcert2 } = await Promise.resolve().then(() => (init_devCert(), exports_devCert));
|
|
1599
|
+
setupMkcert2();
|
|
1613
1600
|
} else {
|
|
1614
1601
|
const message = command ? `Unknown command: ${command}` : "No command specified";
|
|
1615
1602
|
console.error(message);
|
package/dist/index.js
CHANGED
|
@@ -1239,8 +1239,6 @@ var colors2, frameworkColors, formatPath = (filePath) => {
|
|
|
1239
1239
|
console.error(`${timestamp} ${tag} ${fullMessage}`);
|
|
1240
1240
|
}, logHmrUpdate = (path, framework, duration) => {
|
|
1241
1241
|
log("hmr update", { duration, framework, path });
|
|
1242
|
-
}, logInfo = (message) => {
|
|
1243
|
-
log(message);
|
|
1244
1242
|
}, logScriptUpdate = (path, framework, duration) => {
|
|
1245
1243
|
log("script update", { duration, framework, path });
|
|
1246
1244
|
}, logServerReload = () => {
|
|
@@ -205040,12 +205038,14 @@ var init_hmr = __esm(() => {
|
|
|
205040
205038
|
// src/dev/devCert.ts
|
|
205041
205039
|
var exports_devCert = {};
|
|
205042
205040
|
__export(exports_devCert, {
|
|
205041
|
+
setupMkcert: () => setupMkcert,
|
|
205043
205042
|
loadDevCert: () => loadDevCert,
|
|
205043
|
+
hasMkcert: () => hasMkcert,
|
|
205044
205044
|
ensureDevCert: () => ensureDevCert
|
|
205045
205045
|
});
|
|
205046
205046
|
import { existsSync as existsSync15, mkdirSync as mkdirSync10, readFileSync as readFileSync11 } from "fs";
|
|
205047
205047
|
import { join as join17 } from "path";
|
|
205048
|
-
var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = () => existsSync15(CERT_PATH) && existsSync15(KEY_PATH), isCertExpired = () => {
|
|
205048
|
+
var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, devLog = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1B[0m \x1B[36m[dev]\x1B[0m ${msg}`), devWarn = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1B[0m \x1B[33m[dev]\x1B[0m \x1B[33m${msg}\x1B[0m`), certFilesExist = () => existsSync15(CERT_PATH) && existsSync15(KEY_PATH), isCertExpired = () => {
|
|
205049
205049
|
try {
|
|
205050
205050
|
const certPem = readFileSync11(CERT_PATH, "utf-8");
|
|
205051
205051
|
const proc = Bun.spawnSync(["openssl", "x509", "-enddate", "-noout"], {
|
|
@@ -205069,7 +205069,7 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
205069
205069
|
return false;
|
|
205070
205070
|
}
|
|
205071
205071
|
}, generateWithMkcert = () => {
|
|
205072
|
-
|
|
205072
|
+
devLog("Generating locally-trusted certificate with mkcert...");
|
|
205073
205073
|
const result = Bun.spawnSync([
|
|
205074
205074
|
"mkcert",
|
|
205075
205075
|
"-cert-file",
|
|
@@ -205084,9 +205084,9 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
205084
205084
|
const err = new TextDecoder().decode(result.stderr);
|
|
205085
205085
|
throw new Error(`mkcert failed: ${err}`);
|
|
205086
205086
|
}
|
|
205087
|
-
|
|
205087
|
+
devLog("HTTPS enabled with locally-trusted certificate (mkcert)");
|
|
205088
205088
|
}, generateSelfSigned = () => {
|
|
205089
|
-
|
|
205089
|
+
devLog("Generating self-signed certificate...");
|
|
205090
205090
|
const proc = Bun.spawnSync([
|
|
205091
205091
|
"openssl",
|
|
205092
205092
|
"req",
|
|
@@ -205111,14 +205111,23 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
205111
205111
|
const err = new TextDecoder().decode(proc.stderr);
|
|
205112
205112
|
throw new Error(`openssl failed: ${err}`);
|
|
205113
205113
|
}
|
|
205114
|
-
|
|
205114
|
+
devLog("HTTPS enabled with self-signed certificate");
|
|
205115
|
+
devLog("For a trusted certificate (no browser warning), install mkcert:");
|
|
205116
|
+
devLog(" brew install mkcert && mkcert -install (macOS)");
|
|
205117
|
+
devLog(" sudo apt install mkcert && mkcert -install (Linux)");
|
|
205118
|
+
devLog("Then restart the dev server.");
|
|
205115
205119
|
}, ensureDevCert = () => {
|
|
205116
205120
|
mkdirSync10(CERT_DIR, { recursive: true });
|
|
205117
205121
|
if (certFilesExist() && !isCertExpired()) {
|
|
205122
|
+
if (hasMkcert()) {
|
|
205123
|
+
devLog("HTTPS enabled with locally-trusted certificate (mkcert)");
|
|
205124
|
+
} else {
|
|
205125
|
+
devLog("HTTPS enabled with self-signed certificate");
|
|
205126
|
+
}
|
|
205118
205127
|
return { cert: CERT_PATH, key: KEY_PATH };
|
|
205119
205128
|
}
|
|
205120
205129
|
if (certFilesExist()) {
|
|
205121
|
-
|
|
205130
|
+
devWarn("Dev certificate expired, regenerating...");
|
|
205122
205131
|
}
|
|
205123
205132
|
try {
|
|
205124
205133
|
if (hasMkcert()) {
|
|
@@ -205127,7 +205136,7 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
205127
205136
|
generateSelfSigned();
|
|
205128
205137
|
}
|
|
205129
205138
|
} catch (err) {
|
|
205130
|
-
|
|
205139
|
+
devWarn(`Failed to generate certificate: ${err instanceof Error ? err.message : err}`);
|
|
205131
205140
|
return null;
|
|
205132
205141
|
}
|
|
205133
205142
|
return { cert: CERT_PATH, key: KEY_PATH };
|
|
@@ -205143,9 +205152,40 @@ var CERT_DIR, CERT_PATH, KEY_PATH, CERT_VALIDITY_DAYS = 365, certFilesExist = ()
|
|
|
205143
205152
|
} catch {
|
|
205144
205153
|
return null;
|
|
205145
205154
|
}
|
|
205155
|
+
}, setupMkcert = () => {
|
|
205156
|
+
devLog("Setting up mkcert for locally-trusted HTTPS...");
|
|
205157
|
+
if (!hasMkcert()) {
|
|
205158
|
+
devWarn("mkcert is not installed.");
|
|
205159
|
+
console.log("");
|
|
205160
|
+
console.log(" Install it first:");
|
|
205161
|
+
console.log(" macOS: brew install mkcert");
|
|
205162
|
+
console.log(" Linux: sudo apt install mkcert");
|
|
205163
|
+
console.log(" Windows: choco install mkcert");
|
|
205164
|
+
console.log("");
|
|
205165
|
+
console.log(" Then run: absolute mkcert");
|
|
205166
|
+
return false;
|
|
205167
|
+
}
|
|
205168
|
+
devLog("Installing local certificate authority...");
|
|
205169
|
+
const installResult = Bun.spawnSync(["mkcert", "-install"], {
|
|
205170
|
+
stderr: "pipe",
|
|
205171
|
+
stdout: "pipe"
|
|
205172
|
+
});
|
|
205173
|
+
if (installResult.exitCode !== 0) {
|
|
205174
|
+
devWarn("Failed to install CA: " + new TextDecoder().decode(installResult.stderr));
|
|
205175
|
+
return false;
|
|
205176
|
+
}
|
|
205177
|
+
try {
|
|
205178
|
+
const { rmSync: rmSync2 } = __require("fs");
|
|
205179
|
+
rmSync2(CERT_PATH, { force: true });
|
|
205180
|
+
rmSync2(KEY_PATH, { force: true });
|
|
205181
|
+
} catch {}
|
|
205182
|
+
mkdirSync10(CERT_DIR, { recursive: true });
|
|
205183
|
+
generateWithMkcert();
|
|
205184
|
+
console.log("");
|
|
205185
|
+
devLog("Done! Restart your dev server \u2014 no more browser warnings.");
|
|
205186
|
+
return true;
|
|
205146
205187
|
};
|
|
205147
205188
|
var init_devCert = __esm(() => {
|
|
205148
|
-
init_logger();
|
|
205149
205189
|
CERT_DIR = join17(process.cwd(), ".absolutejs");
|
|
205150
205190
|
CERT_PATH = join17(CERT_DIR, "cert.pem");
|
|
205151
205191
|
KEY_PATH = join17(CERT_DIR, "key.pem");
|
|
@@ -205484,5 +205524,5 @@ export {
|
|
|
205484
205524
|
ANGULAR_INIT_TIMEOUT_MS
|
|
205485
205525
|
};
|
|
205486
205526
|
|
|
205487
|
-
//# debugId=
|
|
205527
|
+
//# debugId=97674176A38B7A0F64756E2164756E21
|
|
205488
205528
|
//# sourceMappingURL=index.js.map
|