@mobtakronio/capskit 0.1.2 → 0.1.3

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/dist/index.cjs CHANGED
@@ -5362,6 +5362,7 @@ module.exports = __toCommonJS(index_exports);
5362
5362
 
5363
5363
  // src/kernel/platform.ts
5364
5364
  var path2 = __toESM(require("path"), 1);
5365
+ var import_url = require("url");
5365
5366
 
5366
5367
  // src/kernel/loader.ts
5367
5368
  var fs = __toESM(require("fs"), 1);
@@ -21375,49 +21376,45 @@ function createElysiaRouter(capskit, traitHandlers = {}) {
21375
21376
  manifests.forEach((manifest) => {
21376
21377
  if (manifest.routes) {
21377
21378
  manifest.routes.forEach((route) => {
21379
+ const path3 = route.path;
21380
+ let hooks = {};
21381
+ if (route.traits) {
21382
+ hooks.beforeHandle = [];
21383
+ for (const [traitName, traitValue] of Object.entries(route.traits)) {
21384
+ if (traitHandlers[traitName]) {
21385
+ hooks.beforeHandle.push((c) => traitHandlers[traitName](traitValue, c));
21386
+ } else {
21387
+ console.warn(`[HTTP Elysia] No handler provided for trait "${traitName}" on route ${route.method} ${path3}`);
21388
+ }
21389
+ }
21390
+ }
21378
21391
  const handler = async ({ body, params, query, set }) => {
21379
21392
  try {
21380
- const result = await capskit.call(`${manifest.name}.${route.action}`, {
21393
+ return await capskit.call(`${manifest.name}.${route.action}`, {
21381
21394
  body,
21382
21395
  params,
21383
21396
  query
21384
21397
  });
21385
- return result;
21386
21398
  } catch (error) {
21387
21399
  set.status = 500;
21388
21400
  return { error: error.message };
21389
21401
  }
21390
21402
  };
21391
- const path3 = route.path;
21392
- let config = {};
21393
- if (route.traits) {
21394
- const beforeHandle = [];
21395
- for (const [traitName, traitValue] of Object.entries(route.traits)) {
21396
- if (traitHandlers[traitName]) {
21397
- beforeHandle.push(async (c) => traitHandlers[traitName](traitValue, c));
21398
- } else {
21399
- console.warn(`[HTTP Elysia] No handler provided for trait "${traitName}" on route ${route.method} ${path3}`);
21400
- }
21401
- }
21402
- if (beforeHandle.length > 0) {
21403
- config.beforeHandle = beforeHandle;
21404
- }
21405
- }
21406
21403
  switch (route.method) {
21407
21404
  case "GET":
21408
- app.get(path3, handler, config);
21405
+ app.get(path3, handler, hooks);
21409
21406
  break;
21410
21407
  case "POST":
21411
- app.post(path3, handler, config);
21408
+ app.post(path3, handler, hooks);
21412
21409
  break;
21413
21410
  case "PUT":
21414
- app.put(path3, handler, config);
21411
+ app.put(path3, handler, hooks);
21415
21412
  break;
21416
21413
  case "DELETE":
21417
- app.delete(path3, handler, config);
21414
+ app.delete(path3, handler, hooks);
21418
21415
  break;
21419
21416
  case "PATCH":
21420
- app.patch(path3, handler, config);
21417
+ app.patch(path3, handler, hooks);
21421
21418
  break;
21422
21419
  }
21423
21420
  });
@@ -21494,7 +21491,59 @@ var service3 = {
21494
21491
  }
21495
21492
  };
21496
21493
 
21494
+ // src/capsules/websocket/src/adapters/elysia.ts
21495
+ function createElysiaSocket(capskit) {
21496
+ const manifests = capskit.getManifests();
21497
+ const sockets = {};
21498
+ manifests.forEach((manifest) => {
21499
+ if (manifest.sockets) {
21500
+ manifest.sockets.forEach((socket) => {
21501
+ sockets[socket.path] = {
21502
+ open: socket.open ? async (ws) => {
21503
+ await capskit.call(`${manifest.name}.${socket.open}`, { ws, body: ws.data });
21504
+ } : void 0,
21505
+ message: async (ws, message) => {
21506
+ const result = await capskit.call(`${manifest.name}.${socket.message}`, { ws, body: message });
21507
+ if (result) ws.send(result);
21508
+ },
21509
+ close: socket.close ? async (ws, code, message) => {
21510
+ await capskit.call(`${manifest.name}.${socket.close}`, { ws, code, message });
21511
+ } : void 0,
21512
+ drain: socket.drain ? async (ws) => {
21513
+ await capskit.call(`${manifest.name}.${socket.drain}`, { ws });
21514
+ } : void 0
21515
+ };
21516
+ });
21517
+ }
21518
+ });
21519
+ return sockets;
21520
+ }
21521
+
21522
+ // src/capsules/websocket/src/actions/buildSocket.ts
21523
+ var buildSocket = async (payload, context) => {
21524
+ const { adapter = "elysia" } = payload?.body || payload || {};
21525
+ const capskit = context.deps.capskit;
21526
+ if (adapter === "elysia") {
21527
+ const sockets = createElysiaSocket(capskit);
21528
+ return { sockets };
21529
+ }
21530
+ throw new Error(`Unsupported WebSocket adapter: ${adapter}`);
21531
+ };
21532
+
21533
+ // src/capsules/websocket/manifest.ts
21534
+ var service4 = {
21535
+ name: "websocket",
21536
+ requires: ["capskit"],
21537
+ actions: {
21538
+ buildSocket: {
21539
+ handler: buildSocket,
21540
+ description: "Returns a WebSocket configuration containing all platform capabilities mapped to WebSockets"
21541
+ }
21542
+ }
21543
+ };
21544
+
21497
21545
  // src/kernel/platform.ts
21546
+ var import_meta = {};
21498
21547
  var CapsKit = class {
21499
21548
  constructor(config) {
21500
21549
  this.config = config;
@@ -21512,6 +21561,19 @@ var CapsKit = class {
21512
21561
  this.registerCapsule(service);
21513
21562
  this.registerCapsule(service2);
21514
21563
  this.registerCapsule(service3);
21564
+ this.registerCapsule(service4);
21565
+ try {
21566
+ const currentDir = path2.dirname((0, import_url.fileURLToPath)(import_meta.url));
21567
+ const builtinDir = path2.resolve(currentDir, "../capsules");
21568
+ const builtinManifests = await loadCapsules(builtinDir);
21569
+ for (const manifest of builtinManifests) {
21570
+ if (!this.manifests.has(manifest.name)) {
21571
+ this.registerCapsule(manifest);
21572
+ }
21573
+ }
21574
+ } catch (error) {
21575
+ console.warn("[CapsKit] Could not auto-load built-in capsules directory:", error);
21576
+ }
21515
21577
  if (this.config.capsuleDirs) {
21516
21578
  for (const dir of this.config.capsuleDirs) {
21517
21579
  const absoluteDir = path2.resolve(dir);