chemicaljs 2.3.1 → 2.4.0

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.
@@ -1,4 +1,12 @@
1
- import { resolve, dirname } from "node:path";
1
+ // node_modules/tsup/assets/esm_shims.js
2
+ import { fileURLToPath } from "url";
3
+ import path from "path";
4
+ var getFilename = () => fileURLToPath(import.meta.url);
5
+ var getDirname = () => path.dirname(getFilename());
6
+ var __dirname = /* @__PURE__ */ getDirname();
7
+
8
+ // src/index.ts
9
+ import { resolve } from "node:path";
2
10
  import {
3
11
  readFileSync,
4
12
  cpSync,
@@ -7,23 +15,19 @@ import {
7
15
  existsSync,
8
16
  mkdirSync,
9
17
  rmSync,
10
- readdirSync,
18
+ readdirSync
11
19
  } from "node:fs";
12
20
  import { createServer } from "node:http";
13
- import { fileURLToPath } from "node:url";
14
21
  import express from "express";
15
22
  import { server as wisp, logging } from "@mercuryworkshop/wisp-js/server";
16
23
  import { baremuxPath } from "@mercuryworkshop/bare-mux/node";
17
24
  import { libcurlPath } from "@mercuryworkshop/libcurl-transport";
18
25
  import { epoxyPath } from "@mercuryworkshop/epoxy-transport";
19
26
  import { uvPath } from "@titaniumnetwork-dev/ultraviolet";
20
- import { scramjetPath } from "./scramjet/index.js";
27
+ import { scramjetPath } from "@mercuryworkshop/scramjet";
21
28
  import createRammerhead from "rammerhead/src/server/index.js";
22
- const __dirname = dirname(fileURLToPath(import.meta.url));
23
-
24
29
  logging.set_level(logging.ERROR);
25
-
26
- class ChemicalServer {
30
+ var ChemicalServer = class {
27
31
  constructor(options) {
28
32
  if (options) {
29
33
  if (typeof options !== "object" || Array.isArray(options)) {
@@ -33,28 +37,22 @@ class ChemicalServer {
33
37
  } else {
34
38
  options = {};
35
39
  }
36
-
37
- if (options.uv === undefined) {
40
+ if (options.uv === void 0) {
38
41
  options.uv = true;
39
42
  }
40
-
41
- if (options.scramjet === undefined) {
43
+ if (options.scramjet === void 0) {
42
44
  options.scramjet = true;
43
45
  }
44
-
45
- if (options.rammerhead === undefined) {
46
+ if (options.rammerhead === void 0) {
46
47
  options.rammerhead = true;
47
48
  }
48
-
49
- if (options.demoMode === undefined) {
49
+ if (options.demoMode === void 0) {
50
50
  options.demoMode = false;
51
51
  }
52
-
53
52
  this.options = options;
54
53
  this.server = createServer();
55
54
  this.app = express();
56
55
  this.app.serveChemical = this.serveChemical;
57
-
58
56
  return [this.app, this.listen];
59
57
  }
60
58
  serveChemical = () => {
@@ -73,15 +71,12 @@ class ChemicalServer {
73
71
  "/editsession",
74
72
  "/needpassword",
75
73
  "/syncLocalStorage",
76
- "/api/shuffleDict",
74
+ "/api/shuffleDict"
77
75
  ];
78
76
  const rammerheadSession = /^\/[a-z0-9]{32}/;
79
77
  const shouldRouteRh = (req) => {
80
78
  const url = new URL(req.url, "http://0.0.0.0");
81
- return (
82
- rammerheadScopes.includes(url.pathname) ||
83
- rammerheadSession.test(url.pathname)
84
- );
79
+ return rammerheadScopes.includes(url.pathname) || rammerheadSession.test(url.pathname);
85
80
  };
86
81
  const routeRhRequest = (req, res) => {
87
82
  rh.emit("request", req, res);
@@ -89,72 +84,47 @@ class ChemicalServer {
89
84
  const routeRhUpgrade = (req, socket, head) => {
90
85
  rh.emit("upgrade", req, socket, head);
91
86
  };
92
-
93
87
  this.app.get("/chemical.js", async (req, res) => {
94
88
  let chemicalMain = await readFileSync(
95
- resolve(__dirname, "client/chemical.js"),
89
+ resolve(__dirname, "../client/chemical.js"),
96
90
  "utf8"
97
91
  );
98
-
99
92
  if (this.options.default) {
100
93
  if (["uv", "rammerhead", "scramjet"].includes(this.options.default)) {
101
- chemicalMain =
102
- `const defaultService = "${this.options.default}";\n\n` +
103
- chemicalMain;
94
+ chemicalMain = `const defaultService = "${this.options.default}";
95
+
96
+ ` + chemicalMain;
104
97
  } else {
105
- chemicalMain = `const defaultService = "uv";\n\n` + chemicalMain;
98
+ chemicalMain = `const defaultService = "uv";
99
+
100
+ ` + chemicalMain;
106
101
  console.error("Error: Chemical default option invalid.");
107
102
  }
108
103
  } else {
109
- chemicalMain = `const defaultService = "uv";\n\n` + chemicalMain;
110
- }
111
-
112
- chemicalMain =
113
- "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
114
- chemicalMain =
115
- "const scramjetEnabled = " +
116
- String(this.options.scramjet) +
117
- ";\n" +
118
- chemicalMain;
119
- chemicalMain =
120
- "const rammerheadEnabled = " +
121
- String(this.options.rammerhead) +
122
- ";\n" +
123
- chemicalMain;
124
- chemicalMain =
125
- "const demoMode = " +
126
- String(this.options.demoMode) +
127
- ";\n" +
128
- chemicalMain;
104
+ chemicalMain = `const defaultService = "uv";
129
105
 
106
+ ` + chemicalMain;
107
+ }
108
+ chemicalMain = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
109
+ chemicalMain = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalMain;
110
+ chemicalMain = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalMain;
111
+ chemicalMain = "const demoMode = " + String(this.options.demoMode) + ";\n" + chemicalMain;
130
112
  chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
131
-
132
113
  res.type("application/javascript");
133
114
  return res.send(chemicalMain);
134
115
  });
135
116
  this.app.get("/chemical.sw.js", async (req, res) => {
136
117
  let chemicalSW = await readFileSync(
137
- resolve(__dirname, "client/chemical.sw.js"),
118
+ resolve(__dirname, "../client/chemical.sw.js"),
138
119
  "utf8"
139
120
  );
140
-
141
- chemicalSW =
142
- "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
143
- chemicalSW =
144
- "const scramjetEnabled = " +
145
- String(this.options.scramjet) +
146
- ";\n" +
147
- chemicalSW;
148
- chemicalSW =
149
- "const rammerheadEnabled = " +
150
- String(this.options.rammerhead) +
151
- ";\n" +
152
- chemicalSW;
153
-
121
+ chemicalSW = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
122
+ chemicalSW = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalSW;
123
+ chemicalSW = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalSW;
154
124
  res.type("application/javascript");
155
125
  return res.send(chemicalSW);
156
126
  });
157
- this.app.use(express.static(resolve(__dirname, "client")));
127
+ this.app.use(express.static(resolve(__dirname, "../client")));
158
128
  this.app.use("/baremux/", express.static(baremuxPath));
159
129
  this.app.use("/libcurl/", express.static(libcurlPath));
160
130
  this.app.use("/epoxy/", express.static(epoxyPath));
@@ -190,9 +160,8 @@ class ChemicalServer {
190
160
  listen = (port, callback) => {
191
161
  this.server.listen(port, callback);
192
162
  };
193
- }
194
-
195
- const ChemicalVitePlugin = (options) => ({
163
+ };
164
+ var ChemicalVitePlugin = (options) => ({
196
165
  name: "chemical-vite-plugin",
197
166
  configureServer(server) {
198
167
  if (options) {
@@ -203,23 +172,18 @@ const ChemicalVitePlugin = (options) => ({
203
172
  } else {
204
173
  options = {};
205
174
  }
206
-
207
- if (options.uv === undefined) {
175
+ if (options.uv === void 0) {
208
176
  options.uv = true;
209
177
  }
210
-
211
- if (options.scramjet === undefined) {
178
+ if (options.scramjet === void 0) {
212
179
  options.scramjet = true;
213
180
  }
214
-
215
- if (options.rammerhead === undefined) {
181
+ if (options.rammerhead === void 0) {
216
182
  options.rammerhead = true;
217
183
  }
218
-
219
- if (options.demoMode === undefined) {
184
+ if (options.demoMode === void 0) {
220
185
  options.demoMode = false;
221
186
  }
222
-
223
187
  const rh = createRammerhead();
224
188
  const rammerheadScopes = [
225
189
  "/rammerhead.js",
@@ -235,15 +199,12 @@ const ChemicalVitePlugin = (options) => ({
235
199
  "/editsession",
236
200
  "/needpassword",
237
201
  "/syncLocalStorage",
238
- "/api/shuffleDict",
202
+ "/api/shuffleDict"
239
203
  ];
240
204
  const rammerheadSession = /^\/[a-z0-9]{32}/;
241
205
  const shouldRouteRh = (req) => {
242
206
  const url = new URL(req.url, "http://0.0.0.0");
243
- return (
244
- rammerheadScopes.includes(url.pathname) ||
245
- rammerheadSession.test(url.pathname)
246
- );
207
+ return rammerheadScopes.includes(url.pathname) || rammerheadSession.test(url.pathname);
247
208
  };
248
209
  const routeRhRequest = (req, res) => {
249
210
  rh.emit("request", req, res);
@@ -251,69 +212,48 @@ const ChemicalVitePlugin = (options) => ({
251
212
  const routeRhUpgrade = (req, socket, head) => {
252
213
  rh.emit("upgrade", req, socket, head);
253
214
  };
254
-
255
215
  const app = express();
256
- app.get("/chemical.js", async function (req, res) {
216
+ app.get("/chemical.js", async function(req, res) {
257
217
  let chemicalMain = await readFileSync(
258
- resolve(__dirname, "client/chemical.js"),
218
+ resolve(__dirname, "../client/chemical.js"),
259
219
  "utf8"
260
220
  );
261
-
262
221
  if (options.default) {
263
222
  if (["uv", "rammerhead", "scramjet"].includes(options.default)) {
264
- chemicalMain =
265
- `const defaultService = "${options.default}";\n\n` + chemicalMain;
223
+ chemicalMain = `const defaultService = "${options.default}";
224
+
225
+ ` + chemicalMain;
266
226
  } else {
267
- chemicalMain = `const defaultService = "uv";\n\n` + chemicalMain;
227
+ chemicalMain = `const defaultService = "uv";
228
+
229
+ ` + chemicalMain;
268
230
  console.error("Error: Chemical default option invalid.");
269
231
  }
270
232
  } else {
271
- chemicalMain = `const defaultService = "uv";\n\n` + chemicalMain;
272
- }
273
-
274
- chemicalMain =
275
- "const uvEnabled = " + String(options.uv) + ";\n" + chemicalMain;
276
- chemicalMain =
277
- "const scramjetEnabled = " +
278
- String(options.scramjet) +
279
- ";\n" +
280
- chemicalMain;
281
- chemicalMain =
282
- "const rammerheadEnabled = " +
283
- String(options.rammerhead) +
284
- ";\n" +
285
- chemicalMain;
286
- chemicalMain =
287
- "const demoMode = " + String(options.demoMode) + ";\n" + chemicalMain;
233
+ chemicalMain = `const defaultService = "uv";
288
234
 
235
+ ` + chemicalMain;
236
+ }
237
+ chemicalMain = "const uvEnabled = " + String(options.uv) + ";\n" + chemicalMain;
238
+ chemicalMain = "const scramjetEnabled = " + String(options.scramjet) + ";\n" + chemicalMain;
239
+ chemicalMain = "const rammerheadEnabled = " + String(options.rammerhead) + ";\n" + chemicalMain;
240
+ chemicalMain = "const demoMode = " + String(options.demoMode) + ";\n" + chemicalMain;
289
241
  chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
290
-
291
242
  res.type("application/javascript");
292
243
  return res.send(chemicalMain);
293
244
  });
294
- app.get("/chemical.sw.js", async function (req, res) {
245
+ app.get("/chemical.sw.js", async function(req, res) {
295
246
  let chemicalSW = await readFileSync(
296
- resolve(__dirname, "client/chemical.sw.js"),
247
+ resolve(__dirname, "../client/chemical.sw.js"),
297
248
  "utf8"
298
249
  );
299
-
300
- chemicalSW =
301
- "const uvEnabled = " + String(options.uv) + ";\n" + chemicalSW;
302
- chemicalSW =
303
- "const scramjetEnabled = " +
304
- String(options.scramjet) +
305
- ";\n" +
306
- chemicalSW;
307
- chemicalSW =
308
- "const rammerheadEnabled = " +
309
- String(options.rammerhead) +
310
- ";\n" +
311
- chemicalSW;
312
-
250
+ chemicalSW = "const uvEnabled = " + String(options.uv) + ";\n" + chemicalSW;
251
+ chemicalSW = "const scramjetEnabled = " + String(options.scramjet) + ";\n" + chemicalSW;
252
+ chemicalSW = "const rammerheadEnabled = " + String(options.rammerhead) + ";\n" + chemicalSW;
313
253
  res.type("application/javascript");
314
254
  return res.send(chemicalSW);
315
255
  });
316
- app.use(express.static(resolve(__dirname, "client")));
256
+ app.use(express.static(resolve(__dirname, "../client")));
317
257
  app.use("/baremux/", express.static(baremuxPath));
318
258
  app.use("/libcurl/", express.static(libcurlPath));
319
259
  app.use("/epoxy/", express.static(epoxyPath));
@@ -325,7 +265,6 @@ const ChemicalVitePlugin = (options) => ({
325
265
  app.use("/scramjet/", express.static(scramjetPath));
326
266
  }
327
267
  server.middlewares.use(app);
328
-
329
268
  server.middlewares.use((req, res, next) => {
330
269
  if (options.rammerhead && shouldRouteRh(req)) {
331
270
  routeRhRequest(req, res);
@@ -333,33 +272,32 @@ const ChemicalVitePlugin = (options) => ({
333
272
  next();
334
273
  }
335
274
  });
336
-
337
- const upgraders = server.httpServer.listeners("upgrade");
338
-
275
+ const upgraders = server.httpServer?.listeners("upgrade");
339
276
  for (const upgrader of upgraders) {
340
- server.httpServer.off("upgrade", upgrader);
277
+ server?.httpServer?.off("upgrade", upgrader);
341
278
  }
342
-
343
- server.httpServer.on("upgrade", (req, socket, head) => {
344
- if (req.url && req.url.endsWith("/wisp/")) {
345
- if (options.wispOptions) {
346
- for (let option in options.wispOptions) {
347
- wisp.options[option] = options.wispOptions[option];
279
+ server?.httpServer?.on(
280
+ "upgrade",
281
+ (req, socket, head) => {
282
+ if (req.url && req.url.endsWith("/wisp/")) {
283
+ if (options.wispOptions) {
284
+ for (let option in options.wispOptions) {
285
+ wisp.options[option] = options.wispOptions[option];
286
+ }
287
+ }
288
+ wisp.routeRequest(req, socket, head);
289
+ } else if (options.rammerhead && shouldRouteRh(req)) {
290
+ routeRhUpgrade(req, socket, head);
291
+ } else {
292
+ for (const upgrader of upgraders) {
293
+ upgrader(req, socket, head);
348
294
  }
349
- }
350
- wisp.routeRequest(req, socket, head);
351
- } else if (options.rammerhead && shouldRouteRh(req)) {
352
- routeRhUpgrade(req, socket, head);
353
- } else {
354
- for (const upgrader of upgraders) {
355
- upgrader(req, socket, head);
356
295
  }
357
296
  }
358
- });
359
- },
297
+ );
298
+ }
360
299
  });
361
-
362
- class ChemicalBuild {
300
+ var ChemicalBuild = class {
363
301
  constructor(options) {
364
302
  if (options) {
365
303
  if (typeof options !== "object" || Array.isArray(options)) {
@@ -369,133 +307,101 @@ class ChemicalBuild {
369
307
  } else {
370
308
  options = {};
371
309
  }
372
-
373
- if (options.path === undefined) {
310
+ if (options.path === void 0) {
374
311
  options.path = "dist";
375
312
  }
376
-
377
313
  if (options.path.startsWith("/")) {
378
314
  options.path = options.path.substring(1);
379
315
  }
380
-
381
316
  if (options.path.endsWith("/")) {
382
317
  options.path = options.path.slice(0, -1);
383
318
  }
384
-
385
- if (options.uv === undefined) {
319
+ if (options.uv === void 0) {
386
320
  options.uv = true;
387
321
  }
388
-
389
- if (options.scramjet === undefined) {
322
+ if (options.scramjet === void 0) {
390
323
  options.scramjet = true;
391
324
  }
392
-
393
- if (options.rammerhead === undefined) {
325
+ if (options.rammerhead === void 0) {
394
326
  options.rammerhead = true;
395
327
  }
396
-
397
- if (options.demoMode === undefined) {
328
+ if (options.demoMode === void 0) {
398
329
  options.demoMode = false;
399
330
  }
400
-
401
331
  this.options = options;
402
332
  }
403
333
  async write(deletePath = false) {
404
- if (!existsSync(resolve(this.options.path))) {
405
- mkdirSync(resolve(this.options.path), { recursive: true });
334
+ if (!existsSync(resolve(this.options.path || ""))) {
335
+ mkdirSync(resolve(this.options.path || ""), { recursive: true });
406
336
  } else {
407
337
  if (deletePath) {
408
- readdirSync(resolve(this.options.path)).forEach((file) =>
409
- rmSync(resolve(this.options.path, file), { recursive: true })
338
+ readdirSync(resolve(this.options.path || "")).forEach(
339
+ (file) => rmSync(resolve(this.options.path || "", file), { recursive: true })
410
340
  );
411
341
  }
412
342
  }
413
-
414
343
  let chemicalMain = await readFileSync(
415
- resolve(__dirname, "client/chemical.js"),
344
+ resolve(__dirname, "../client/chemical.js"),
416
345
  "utf8"
417
346
  );
418
-
419
347
  if (this.options.default) {
420
348
  if (["uv", "rammerhead", "scramjet"].includes(this.options.default)) {
421
- chemicalMain =
422
- `const defaultService = "${this.options.default}";\n\n` +
423
- chemicalMain;
349
+ chemicalMain = `const defaultService = "${this.options.default}";
350
+
351
+ ` + chemicalMain;
424
352
  } else {
425
- chemicalMain = `const defaultService = "uv";\n\n` + chemicalMain;
353
+ chemicalMain = `const defaultService = "uv";
354
+
355
+ ` + chemicalMain;
426
356
  console.error("Error: Chemical default option invalid.");
427
357
  }
428
358
  } else {
429
- chemicalMain = `const defaultService = "uv";\n\n` + chemicalMain;
430
- }
431
-
432
- chemicalMain =
433
- "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
434
- chemicalMain =
435
- "const scramjetEnabled = " +
436
- String(this.options.scramjet) +
437
- ";\n" +
438
- chemicalMain;
439
- chemicalMain =
440
- "const rammerheadEnabled = " +
441
- String(this.options.rammerhead) +
442
- ";\n" +
443
- chemicalMain;
444
- chemicalMain =
445
- "const demoMode = " +
446
- String(this.options.demoMode) +
447
- ";\n" +
448
- chemicalMain;
359
+ chemicalMain = `const defaultService = "uv";
449
360
 
361
+ ` + chemicalMain;
362
+ }
363
+ chemicalMain = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
364
+ chemicalMain = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalMain;
365
+ chemicalMain = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalMain;
366
+ chemicalMain = "const demoMode = " + String(this.options.demoMode) + ";\n" + chemicalMain;
450
367
  chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
451
-
452
- writeFileSync(resolve(this.options.path, "chemical.js"), chemicalMain);
453
-
368
+ writeFileSync(resolve(this.options.path || "", "chemical.js"), chemicalMain);
454
369
  let chemicalSW = await readFileSync(
455
- resolve(__dirname, "client/chemical.sw.js"),
370
+ resolve(__dirname, "../client/chemical.sw.js"),
456
371
  "utf8"
457
372
  );
458
-
459
- chemicalSW =
460
- "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
461
- chemicalSW =
462
- "const scramjetEnabled = " +
463
- String(this.options.scramjet) +
464
- ";\n" +
465
- chemicalSW;
466
- chemicalSW =
467
- "const rammerheadEnabled = " +
468
- String(this.options.rammerhead) +
469
- ";\n" +
470
- chemicalSW;
471
-
472
- writeFileSync(resolve(this.options.path, "chemical.sw.js"), chemicalSW);
473
-
373
+ chemicalSW = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
374
+ chemicalSW = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalSW;
375
+ chemicalSW = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalSW;
376
+ writeFileSync(resolve(this.options.path || "", "chemical.sw.js"), chemicalSW);
474
377
  if (this.options.demoMode) {
475
378
  copyFileSync(
476
379
  resolve(__dirname, "client/chemical.demo.html"),
477
- resolve(this.options.path, "chemical.demo.html")
380
+ resolve(this.options.path || "", "chemical.demo.html")
478
381
  );
479
382
  }
480
-
481
- cpSync(baremuxPath, resolve(this.options.path, "baremux"), {
482
- recursive: true,
383
+ cpSync(baremuxPath, resolve(this.options.path || "", "baremux"), {
384
+ recursive: true
483
385
  });
484
- cpSync(libcurlPath, resolve(this.options.path, "libcurl"), {
485
- recursive: true,
386
+ cpSync(libcurlPath, resolve(this.options.path || "", "libcurl"), {
387
+ recursive: true
486
388
  });
487
- cpSync(epoxyPath, resolve(this.options.path, "epoxy"), { recursive: true });
488
- cpSync(libcurlPath, resolve(this.options.path, "libcurl"), {
489
- recursive: true,
389
+ cpSync(epoxyPath, resolve(this.options.path || "", "epoxy"), { recursive: true });
390
+ cpSync(libcurlPath, resolve(this.options.path || "", "libcurl"), {
391
+ recursive: true
490
392
  });
491
393
  if (this.options.uv) {
492
- cpSync(uvPath, resolve(this.options.path, "uv"), { recursive: true });
394
+ cpSync(uvPath, resolve(this.options.path || "", "uv"), { recursive: true });
493
395
  copyFileSync(
494
396
  resolve(__dirname, "config/uv/uv.config.js"),
495
- resolve(this.options.path, "uv/uv.config.js")
397
+ resolve(this.options.path || "", "uv/uv.config.js")
496
398
  );
497
399
  }
498
400
  }
499
- }
500
-
501
- export { ChemicalServer, ChemicalBuild, ChemicalVitePlugin };
401
+ };
402
+ export {
403
+ ChemicalBuild,
404
+ ChemicalServer,
405
+ ChemicalVitePlugin
406
+ };
407
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { resolve } from \"node:path\";\nimport {\n readFileSync,\n cpSync,\n writeFileSync,\n copyFileSync,\n existsSync,\n mkdirSync,\n rmSync,\n readdirSync,\n} from \"node:fs\";\nimport { createServer, Server } from \"node:http\";\nimport { Socket } from \"node:net\";\nimport express, { Request, Response, application, Next } from \"express\";\n//@ts-ignore\nimport { server as wisp, logging } from \"@mercuryworkshop/wisp-js/server\";\n//@ts-ignore\nimport { baremuxPath } from \"@mercuryworkshop/bare-mux/node\";\nimport { libcurlPath } from \"@mercuryworkshop/libcurl-transport\";\nimport { epoxyPath } from \"@mercuryworkshop/epoxy-transport\";\nimport { uvPath } from \"@titaniumnetwork-dev/ultraviolet\";\nimport { scramjetPath } from \"@mercuryworkshop/scramjet\";\nimport createRammerhead, { RammerheadProxy } from \"rammerhead/src/server/index.js\";\nimport { ViteDevServer } from \"vite\";\n\nlogging.set_level(logging.ERROR);\n\ninterface WispOptions {\n hostname_blacklist?: Array<RegExp>;\n hostname_whitelist?: Array<RegExp>;\n port_blacklist?: (number | Array<number>)[];\n port_whitelist?: (number | Array<number>)[];\n allow_direct_ip?: boolean;\n allow_private_ips?: boolean;\n allow_loopback_ips?: boolean;\n stream_limit_per_host?: number;\n stream_limit_total?: number;\n allow_udp_streams?: boolean;\n allow_tcp_streams?: boolean;\n dns_ttl?: number;\n dns_method?: \"lookup\" | \"resolve\";\n dns_servers?: Array<string>;\n dns_result_order?: \"ipv4first\" | \"ipv6first\" | \"verbatim\";\n parse_real_ip?: boolean;\n parse_real_ip_from?: Array<string>;\n}\n\ninterface Options {\n uv?: boolean;\n scramjet?: boolean;\n rammerhead?: boolean;\n demoMode?: boolean;\n default?: string;\n wispOptions?: WispOptions;\n}\n\ninterface BuildOptions extends Options {\n path?: string;\n}\n\ninterface ChemicalServer {\n options: Options;\n server: Server;\n app: application;\n}\n\ninterface ChemicalBuild {\n options: BuildOptions;\n}\n\nclass ChemicalServer {\n constructor(options: Options) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalServer options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rammerhead === undefined) {\n options.rammerhead = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n this.options = options;\n this.server = createServer();\n this.app = express();\n this.app.serveChemical = this.serveChemical;\n\n return [this.app, this.listen] as any;\n }\n serveChemical = () => {\n const rh: RammerheadProxy = createRammerhead();\n const rammerheadScopes: Array<string> = [\n \"/rammerhead.js\",\n \"/hammerhead.js\",\n \"/transport-worker.js\",\n \"/task.js\",\n \"/iframe-task.js\",\n \"/worker-hammerhead.js\",\n \"/messaging\",\n \"/sessionexists\",\n \"/deletesession\",\n \"/newsession\",\n \"/editsession\",\n \"/needpassword\",\n \"/syncLocalStorage\",\n \"/api/shuffleDict\",\n ];\n const rammerheadSession: RegExp = /^\\/[a-z0-9]{32}/;\n const shouldRouteRh = (req: Request): boolean => {\n const url = new URL(req.url, \"http://0.0.0.0\");\n return (\n rammerheadScopes.includes(url.pathname) ||\n rammerheadSession.test(url.pathname)\n );\n };\n const routeRhRequest = (req: Request, res: Response) => {\n rh.emit(\"request\", req, res);\n };\n const routeRhUpgrade = (req: Request, socket: Socket, head: Buffer) => {\n rh.emit(\"upgrade\", req, socket, head);\n };\n\n this.app.get(\"/chemical.js\", async (req: Request, res: Response) => {\n let chemicalMain = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (this.options.default) {\n if ([\"uv\", \"rammerhead\", \"scramjet\"].includes(this.options.default)) {\n chemicalMain =\n `const defaultService = \"${this.options.default}\";\\n\\n` +\n chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" +\n String(this.options.demoMode) +\n \";\\n\" +\n chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n res.type(\"application/javascript\");\n return res.send(chemicalMain);\n });\n this.app.get(\"/chemical.sw.js\", async (req: Request, res: Response) => {\n let chemicalSW = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalSW;\n\n res.type(\"application/javascript\");\n return res.send(chemicalSW);\n });\n this.app.use(express.static(resolve(__dirname, \"../client\")));\n this.app.use(\"/baremux/\", express.static(baremuxPath));\n this.app.use(\"/libcurl/\", express.static(libcurlPath));\n this.app.use(\"/epoxy/\", express.static(epoxyPath));\n if (this.options.uv) {\n this.app.use(\"/uv/\", express.static(resolve(__dirname, \"config/uv\")));\n this.app.use(\"/uv/\", express.static(uvPath));\n }\n if (this.options.scramjet) {\n this.app.use(\"/scramjet/\", express.static(scramjetPath));\n }\n this.server.on(\"request\", (req: Request, res: Response) => {\n if (this.options.rammerhead && shouldRouteRh(req)) {\n routeRhRequest(req, res);\n } else {\n this.app(req, res);\n }\n });\n this.server.on(\"upgrade\", (req: Request, socket: Socket, head: Buffer) => {\n if (req.url && req.url.endsWith(\"/wisp/\")) {\n if (this.options.wispOptions) {\n for (let option in this.options.wispOptions) {\n //@ts-ignore\n wisp.options[option] = this.options.wispOptions[option];\n }\n }\n wisp.routeRequest(req, socket, head);\n } else if (this.options.rammerhead && shouldRouteRh(req)) {\n routeRhUpgrade(req, socket, head);\n } else {\n socket.end();\n }\n });\n };\n listen = (port: number, callback: () => void) => {\n this.server.listen(port, callback);\n };\n}\n\nconst ChemicalVitePlugin = (options: Options) => ({\n name: \"chemical-vite-plugin\",\n configureServer(server: ViteDevServer) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalServer options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rammerhead === undefined) {\n options.rammerhead = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n const rh: RammerheadProxy = createRammerhead();\n const rammerheadScopes: Array<string> = [\n \"/rammerhead.js\",\n \"/hammerhead.js\",\n \"/transport-worker.js\",\n \"/task.js\",\n \"/iframe-task.js\",\n \"/worker-hammerhead.js\",\n \"/messaging\",\n \"/sessionexists\",\n \"/deletesession\",\n \"/newsession\",\n \"/editsession\",\n \"/needpassword\",\n \"/syncLocalStorage\",\n \"/api/shuffleDict\",\n ];\n const rammerheadSession: RegExp = /^\\/[a-z0-9]{32}/;\n const shouldRouteRh = (req: Request): boolean => {\n const url: URL = new URL(req.url, \"http://0.0.0.0\");\n return (\n rammerheadScopes.includes(url.pathname) ||\n rammerheadSession.test(url.pathname)\n );\n };\n const routeRhRequest = (req: Request, res: Response) => {\n rh.emit(\"request\", req, res);\n };\n const routeRhUpgrade = (req: Request, socket: Socket, head: Buffer) => {\n rh.emit(\"upgrade\", req, socket, head);\n };\n\n const app: application = express();\n app.get(\"/chemical.js\", async function (req: Request, res: Response) {\n let chemicalMain: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (options.default) {\n if ([\"uv\", \"rammerhead\", \"scramjet\"].includes(options.default)) {\n chemicalMain =\n `const defaultService = \"${options.default}\";\\n\\n` + chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(options.rammerhead) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" + String(options.demoMode) + \";\\n\" + chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n res.type(\"application/javascript\");\n return res.send(chemicalMain);\n });\n app.get(\"/chemical.sw.js\", async function (req: Request, res: Response) {\n let chemicalSW: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(options.rammerhead) +\n \";\\n\" +\n chemicalSW;\n\n res.type(\"application/javascript\");\n return res.send(chemicalSW);\n });\n app.use(express.static(resolve(__dirname, \"../client\")));\n app.use(\"/baremux/\", express.static(baremuxPath));\n app.use(\"/libcurl/\", express.static(libcurlPath));\n app.use(\"/epoxy/\", express.static(epoxyPath));\n if (options.uv) {\n app.use(\"/uv/\", express.static(resolve(__dirname, \"config/uv\")));\n app.use(\"/uv/\", express.static(uvPath));\n }\n if (options.scramjet) {\n app.use(\"/scramjet/\", express.static(scramjetPath));\n }\n server.middlewares.use(app);\n\n server.middlewares.use((req: Request, res: Request, next: Next) => {\n if (options.rammerhead && shouldRouteRh(req)) {\n routeRhRequest(req, res);\n } else {\n next();\n }\n });\n\n const upgraders = server.httpServer?.listeners(\"upgrade\") as ((...args: any[]) => void)[];\n\n for (const upgrader of upgraders) {\n server?.httpServer?.off(\"upgrade\", upgrader);\n }\n\n server?.httpServer?.on(\n \"upgrade\",\n (req: Request, socket: Socket, head: Buffer) => {\n if (req.url && req.url.endsWith(\"/wisp/\")) {\n if (options.wispOptions) {\n for (let option in options.wispOptions) {\n //@ts-ignore\n wisp.options[option] = options.wispOptions[option];\n }\n }\n wisp.routeRequest(req, socket, head);\n } else if (options.rammerhead && shouldRouteRh(req)) {\n routeRhUpgrade(req, socket, head);\n } else {\n for (const upgrader of upgraders) {\n upgrader(req, socket, head);\n }\n }\n }\n );\n },\n});\n\nclass ChemicalBuild {\n constructor(options: BuildOptions) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalBuild options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.path === undefined) {\n options.path = \"dist\";\n }\n\n if (options.path.startsWith(\"/\")) {\n options.path = options.path.substring(1);\n }\n\n if (options.path.endsWith(\"/\")) {\n options.path = options.path.slice(0, -1);\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rammerhead === undefined) {\n options.rammerhead = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n this.options = options;\n }\n async write(deletePath: boolean = false) {\n if (!existsSync(resolve(this.options.path || \"\"))) {\n mkdirSync(resolve(this.options.path || \"\"), { recursive: true });\n } else {\n if (deletePath) {\n readdirSync(resolve(this.options.path || \"\")).forEach((file) =>\n rmSync(resolve(this.options.path || \"\", file), { recursive: true })\n );\n }\n }\n\n let chemicalMain: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (this.options.default) {\n if ([\"uv\", \"rammerhead\", \"scramjet\"].includes(this.options.default)) {\n chemicalMain =\n `const defaultService = \"${this.options.default}\";\\n\\n` +\n chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" +\n String(this.options.demoMode) +\n \";\\n\" +\n chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n writeFileSync(resolve(this.options.path || \"\", \"chemical.js\"), chemicalMain);\n\n let chemicalSW: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalSW;\n\n writeFileSync(resolve(this.options.path || \"\", \"chemical.sw.js\"), chemicalSW);\n\n if (this.options.demoMode) {\n copyFileSync(\n resolve(__dirname, \"client/chemical.demo.html\"),\n resolve(this.options.path || \"\", \"chemical.demo.html\")\n );\n }\n\n cpSync(baremuxPath, resolve(this.options.path || \"\", \"baremux\"), {\n recursive: true,\n });\n cpSync(libcurlPath, resolve(this.options.path || \"\", \"libcurl\"), {\n recursive: true,\n });\n cpSync(epoxyPath, resolve(this.options.path || \"\", \"epoxy\"), { recursive: true });\n cpSync(libcurlPath, resolve(this.options.path || \"\", \"libcurl\"), {\n recursive: true,\n });\n if (this.options.uv) {\n cpSync(uvPath, resolve(this.options.path || \"\", \"uv\"), { recursive: true });\n copyFileSync(\n resolve(__dirname, \"config/uv/uv.config.js\"),\n resolve(this.options.path || \"\", \"uv/uv.config.js\")\n );\n }\n }\n}\n\nexport { ChemicalServer, ChemicalBuild, ChemicalVitePlugin };\n"],"mappings":"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","names":[]}