topsyde-utils 1.0.22 → 1.0.25

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.d.ts CHANGED
@@ -1,14 +1,32 @@
1
- export { default as Application } from "./application";
2
- export { default as Guards } from "./guards";
1
+ export * from "./errors";
2
+ export * from "./singleton";
3
+ export * from "./initializable";
4
+ export * from "./application";
5
+ export * from "./consts";
6
+ export * from "./types";
7
+ export * from "./lib";
8
+ export * from "./guards";
9
+ export * from "./throwable";
10
+ export * from "./enums";
11
+ export { default as DatabaseExample } from "./singleton";
3
12
  export { default as Initializable } from "./initializable";
13
+ export { default as Application } from "./application";
4
14
  export { default as Lib } from "./lib";
5
- export { default as Router_internal } from "./router/router.internal";
15
+ export { default as Guards } from "./guards";
16
+ export { default as Throwable } from "./throwable";
6
17
  export { default as Router } from "./router/router";
18
+ export { default as Router_Internal } from "./router/router.internal";
7
19
  export { default as Controller } from "./server/controller";
8
- export { default as Websocket } from "./server/websocket";
9
- export { default as Singleton } from "./singleton";
10
- export { default as Throwable } from "./throwable";
20
+ export { default as Websocket } from "./server/bun/websocket/Websocket";
21
+ export { default as WebsocketClient } from "./server/bun/websocket/WebsocketClient";
22
+ export { default as Channel } from "./server/bun/websocket/Channel";
23
+ export { ERROR_CODE, HTTP_ERROR_CODE, WS_ERROR_CODE } from "./errors";
24
+ export { Constructor } from "./singleton";
25
+ export { InitializableOptions, InitializableEvent } from "./initializable";
11
26
  export { RESPONSE_INIT, RESPONSE_METHOD_OPTIONS } from "./application";
12
27
  export { DEFAULT_FALSE_RESPONSE, LOG_COLORS } from "./consts";
28
+ export { ClassConstructor, NonNullableType, ObjectKeys, KVObj, I_ApplicationResponse } from "./types";
13
29
  export { E_IS, E_ENVIRONMENTS } from "./enums";
14
- export { ERROR_CODE, HTTP_ERROR_CODE, WS_ERROR_CODE } from "./errors";
30
+ export { Routes } from "./router/routes";
31
+ export { ControllerResponse, ControllerAction, ControllerMap, ControllerOptions } from "./server/controller";
32
+ export { I_WebsocketClient, WebsocketClientData, WebsocketMessage, WebsocketStructuredMessage, WebsocketChannel } from "./server/bun/websocket/websocket.types";
package/dist/index.js CHANGED
@@ -1,34 +1,66 @@
1
1
  "use strict";
2
- // This file is auto-generated by scripts/generate-indexes.sh
2
+ // This file is auto-generated by scripts/generate-indexes.ts
3
3
  // Do not edit this file directly
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
4
18
  var __importDefault = (this && this.__importDefault) || function (mod) {
5
19
  return (mod && mod.__esModule) ? mod : { "default": mod };
6
20
  };
7
21
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.WS_ERROR_CODE = exports.HTTP_ERROR_CODE = exports.ERROR_CODE = exports.E_ENVIRONMENTS = exports.E_IS = exports.LOG_COLORS = exports.DEFAULT_FALSE_RESPONSE = exports.RESPONSE_METHOD_OPTIONS = exports.RESPONSE_INIT = exports.Throwable = exports.Singleton = exports.Websocket = exports.Controller = exports.Router = exports.Router_internal = exports.Lib = exports.Initializable = exports.Guards = exports.Application = void 0;
22
+ exports.E_ENVIRONMENTS = exports.E_IS = exports.LOG_COLORS = exports.DEFAULT_FALSE_RESPONSE = exports.RESPONSE_METHOD_OPTIONS = exports.RESPONSE_INIT = exports.WS_ERROR_CODE = exports.HTTP_ERROR_CODE = exports.ERROR_CODE = exports.Channel = exports.WebsocketClient = exports.Websocket = exports.Controller = exports.Router_Internal = exports.Router = exports.Throwable = exports.Guards = exports.Lib = exports.Application = exports.Initializable = exports.DatabaseExample = void 0;
9
23
  // Export all modules
24
+ __exportStar(require("./errors"), exports);
25
+ __exportStar(require("./singleton"), exports);
26
+ __exportStar(require("./initializable"), exports);
27
+ __exportStar(require("./application"), exports);
28
+ __exportStar(require("./consts"), exports);
29
+ __exportStar(require("./types"), exports);
30
+ __exportStar(require("./lib"), exports);
31
+ __exportStar(require("./guards"), exports);
32
+ __exportStar(require("./throwable"), exports);
33
+ __exportStar(require("./enums"), exports);
10
34
  // Export default classes
11
- var application_1 = require("./application");
12
- Object.defineProperty(exports, "Application", { enumerable: true, get: function () { return __importDefault(application_1).default; } });
13
- var guards_1 = require("./guards");
14
- Object.defineProperty(exports, "Guards", { enumerable: true, get: function () { return __importDefault(guards_1).default; } });
35
+ var singleton_1 = require("./singleton");
36
+ Object.defineProperty(exports, "DatabaseExample", { enumerable: true, get: function () { return __importDefault(singleton_1).default; } });
15
37
  var initializable_1 = require("./initializable");
16
38
  Object.defineProperty(exports, "Initializable", { enumerable: true, get: function () { return __importDefault(initializable_1).default; } });
39
+ var application_1 = require("./application");
40
+ Object.defineProperty(exports, "Application", { enumerable: true, get: function () { return __importDefault(application_1).default; } });
17
41
  var lib_1 = require("./lib");
18
42
  Object.defineProperty(exports, "Lib", { enumerable: true, get: function () { return __importDefault(lib_1).default; } });
19
- var router_internal_1 = require("./router/router.internal");
20
- Object.defineProperty(exports, "Router_internal", { enumerable: true, get: function () { return __importDefault(router_internal_1).default; } });
43
+ var guards_1 = require("./guards");
44
+ Object.defineProperty(exports, "Guards", { enumerable: true, get: function () { return __importDefault(guards_1).default; } });
45
+ var throwable_1 = require("./throwable");
46
+ Object.defineProperty(exports, "Throwable", { enumerable: true, get: function () { return __importDefault(throwable_1).default; } });
21
47
  var router_1 = require("./router/router");
22
48
  Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return __importDefault(router_1).default; } });
49
+ var router_internal_1 = require("./router/router.internal");
50
+ Object.defineProperty(exports, "Router_Internal", { enumerable: true, get: function () { return __importDefault(router_internal_1).default; } });
23
51
  var controller_1 = require("./server/controller");
24
52
  Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return __importDefault(controller_1).default; } });
25
- var websocket_1 = require("./server/websocket");
26
- Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(websocket_1).default; } });
27
- var singleton_1 = require("./singleton");
28
- Object.defineProperty(exports, "Singleton", { enumerable: true, get: function () { return __importDefault(singleton_1).default; } });
29
- var throwable_1 = require("./throwable");
30
- Object.defineProperty(exports, "Throwable", { enumerable: true, get: function () { return __importDefault(throwable_1).default; } });
53
+ var Websocket_1 = require("./server/bun/websocket/Websocket");
54
+ Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(Websocket_1).default; } });
55
+ var WebsocketClient_1 = require("./server/bun/websocket/WebsocketClient");
56
+ Object.defineProperty(exports, "WebsocketClient", { enumerable: true, get: function () { return __importDefault(WebsocketClient_1).default; } });
57
+ var Channel_1 = require("./server/bun/websocket/Channel");
58
+ Object.defineProperty(exports, "Channel", { enumerable: true, get: function () { return __importDefault(Channel_1).default; } });
31
59
  // Re-export specific items for backward compatibility
60
+ var errors_1 = require("./errors");
61
+ Object.defineProperty(exports, "ERROR_CODE", { enumerable: true, get: function () { return errors_1.ERROR_CODE; } });
62
+ Object.defineProperty(exports, "HTTP_ERROR_CODE", { enumerable: true, get: function () { return errors_1.HTTP_ERROR_CODE; } });
63
+ Object.defineProperty(exports, "WS_ERROR_CODE", { enumerable: true, get: function () { return errors_1.WS_ERROR_CODE; } });
32
64
  var application_2 = require("./application");
33
65
  Object.defineProperty(exports, "RESPONSE_INIT", { enumerable: true, get: function () { return application_2.RESPONSE_INIT; } });
34
66
  Object.defineProperty(exports, "RESPONSE_METHOD_OPTIONS", { enumerable: true, get: function () { return application_2.RESPONSE_METHOD_OPTIONS; } });
@@ -38,8 +70,4 @@ Object.defineProperty(exports, "LOG_COLORS", { enumerable: true, get: function (
38
70
  var enums_1 = require("./enums");
39
71
  Object.defineProperty(exports, "E_IS", { enumerable: true, get: function () { return enums_1.E_IS; } });
40
72
  Object.defineProperty(exports, "E_ENVIRONMENTS", { enumerable: true, get: function () { return enums_1.E_ENVIRONMENTS; } });
41
- var errors_1 = require("./errors");
42
- Object.defineProperty(exports, "ERROR_CODE", { enumerable: true, get: function () { return errors_1.ERROR_CODE; } });
43
- Object.defineProperty(exports, "HTTP_ERROR_CODE", { enumerable: true, get: function () { return errors_1.HTTP_ERROR_CODE; } });
44
- Object.defineProperty(exports, "WS_ERROR_CODE", { enumerable: true, get: function () { return errors_1.WS_ERROR_CODE; } });
45
73
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;AAEjC,qBAAqB;AAErB,yBAAyB;AACzB,6CAAuD;AAA9C,2HAAA,OAAO,OAAe;AAC/B,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AACjC,6BAAuC;AAA9B,2GAAA,OAAO,OAAO;AACvB,4DAAsE;AAA7D,mIAAA,OAAO,OAAmB;AACnC,0CAAoD;AAA3C,iHAAA,OAAO,OAAU;AAC1B,kDAA4D;AAAnD,yHAAA,OAAO,OAAc;AAC9B,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAE7B,sDAAsD;AACtD,6CAAuE;AAA9D,4GAAA,aAAa,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAC/C,mCAA8D;AAArD,gHAAA,sBAAsB,OAAA;AAAE,oGAAA,UAAU,OAAA;AAC3C,iCAA+C;AAAtC,6FAAA,IAAI,OAAA;AAAE,uGAAA,cAAc,OAAA;AAC7B,mCAAsE;AAA7D,oGAAA,UAAU,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,uGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,qBAAqB;AACrB,2CAAyB;AACzB,8CAA4B;AAC5B,kDAAgC;AAChC,gDAA8B;AAC9B,2CAAyB;AACzB,0CAAwB;AACxB,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,0CAAwB;AAExB,yBAAyB;AACzB,yCAAyD;AAAhD,6HAAA,OAAO,OAAmB;AACnC,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AACjC,6CAAuD;AAA9C,2HAAA,OAAO,OAAe;AAC/B,6BAAuC;AAA9B,2GAAA,OAAO,OAAO;AACvB,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,0CAAoD;AAA3C,iHAAA,OAAO,OAAU;AAC1B,4DAAsE;AAA7D,mIAAA,OAAO,OAAmB;AACnC,kDAA4D;AAAnD,yHAAA,OAAO,OAAc;AAC9B,8DAAwE;AAA/D,uHAAA,OAAO,OAAa;AAC7B,0EAAoF;AAA3E,mIAAA,OAAO,OAAmB;AACnC,0DAAoE;AAA3D,mHAAA,OAAO,OAAW;AAE3B,sDAAsD;AACtD,mCAAsE;AAA7D,oGAAA,UAAU,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,uGAAA,aAAa,OAAA;AAGnD,6CAAuE;AAA9D,4GAAA,aAAa,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAC/C,mCAA8D;AAArD,gHAAA,sBAAsB,OAAA;AAAE,oGAAA,UAAU,OAAA;AAE3C,iCAA+C;AAAtC,6FAAA,IAAI,OAAA;AAAE,uGAAA,cAAc,OAAA"}
@@ -1,5 +1,5 @@
1
1
  export * from './routes';
2
2
  export * from './router';
3
- export { default as Router } from './router';
4
3
  export * from './router.internal';
5
- export { default as Router_internal } from './router.internal';
4
+ export { default as Router } from './router';
5
+ export { default as Router_Internal } from './router.internal';
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // This file is auto-generated by scripts/generate-indexes.sh
2
+ // This file is auto-generated by scripts/generate-indexes.ts
3
3
  // Do not edit this file directly
4
4
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
5
  if (k2 === undefined) k2 = k;
@@ -19,12 +19,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
19
19
  return (mod && mod.__esModule) ? mod : { "default": mod };
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.Router_internal = exports.Router = void 0;
22
+ exports.Router_Internal = exports.Router = void 0;
23
23
  __exportStar(require("./routes"), exports);
24
24
  __exportStar(require("./router"), exports);
25
+ __exportStar(require("./router.internal"), exports);
25
26
  var router_1 = require("./router");
26
27
  Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return __importDefault(router_1).default; } });
27
- __exportStar(require("./router.internal"), exports);
28
28
  var router_internal_1 = require("./router.internal");
29
- Object.defineProperty(exports, "Router_internal", { enumerable: true, get: function () { return __importDefault(router_internal_1).default; } });
29
+ Object.defineProperty(exports, "Router_Internal", { enumerable: true, get: function () { return __importDefault(router_internal_1).default; } });
30
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,2CAAyB;AACzB,2CAAyB;AACzB,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,oDAAkC;AAClC,qDAA+D;AAAtD,mIAAA,OAAO,OAAmB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,2CAAyB;AACzB,2CAAyB;AACzB,oDAAkC;AAClC,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,qDAA+D;AAAtD,mIAAA,OAAO,OAAmB"}
@@ -0,0 +1,3 @@
1
+ export * from './websocket/Websocket';
2
+ export { default as Websocket } from './websocket/Websocket';
3
+ export * from './websocket';
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // This file is auto-generated by scripts/generate-indexes.sh
3
+ // Do not edit this file directly
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ var __importDefault = (this && this.__importDefault) || function (mod) {
19
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.Websocket = void 0;
23
+ __exportStar(require("./websocket/Websocket"), exports);
24
+ var Websocket_1 = require("./websocket/Websocket");
25
+ Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(Websocket_1).default; } });
26
+ __exportStar(require("./websocket"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/bun/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,wDAAsC;AACtC,mDAA6D;AAApD,uHAAA,OAAO,OAAa;AAC7B,8CAA4B"}
@@ -0,0 +1,24 @@
1
+ import type { WebsocketStructuredMessage, I_WebsocketClient } from "./websocket.types";
2
+ import WebsocketClient from "./WebsocketClient";
3
+ export default class Channel {
4
+ private createdAt?;
5
+ private id;
6
+ private name;
7
+ private limit;
8
+ private members;
9
+ private metadata;
10
+ constructor(id: string, name: string, limit?: number, members?: Map<string, WebsocketClient>, metadata?: Record<string, string>);
11
+ addMember(client: WebsocketClient): void;
12
+ removeMember(client: WebsocketClient): void;
13
+ broadcast(message: WebsocketStructuredMessage, exclude?: string[] | I_WebsocketClient[]): void;
14
+ hasMember(client: I_WebsocketClient | string): void;
15
+ getMember(client: I_WebsocketClient | string): void;
16
+ getMembers(): WebsocketClient[];
17
+ getMetadata(): Record<string, string>;
18
+ getCreatedAt(): Date | undefined;
19
+ getId(): string;
20
+ getName(): string;
21
+ getLimit(): number;
22
+ getSize(): number;
23
+ private canAddMember;
24
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Websocket_1 = __importDefault(require("./Websocket"));
7
+ class Channel {
8
+ constructor(id, name, limit, members, metadata) {
9
+ this.createdAt = new Date();
10
+ this.id = id;
11
+ this.name = name;
12
+ this.limit = limit ?? 5;
13
+ this.members = members ?? new Map();
14
+ this.metadata = metadata ?? {};
15
+ }
16
+ addMember(client) {
17
+ if (this.canAddMember()) {
18
+ this.members.set(client.getId(), client);
19
+ client.joinChannel(this);
20
+ }
21
+ this.broadcast({
22
+ type: "channel.member.added",
23
+ data: {
24
+ channelId: this.id,
25
+ clientId: client.getId(),
26
+ },
27
+ });
28
+ }
29
+ removeMember(client) {
30
+ this.members.delete(client.getId());
31
+ client.leaveChannel(this);
32
+ }
33
+ broadcast(message, exclude) {
34
+ Websocket_1.default.Server().publish(this.id, JSON.stringify(message));
35
+ }
36
+ hasMember(client) { }
37
+ getMember(client) { }
38
+ getMembers() {
39
+ return Array.from(this.members.values());
40
+ }
41
+ getMetadata() {
42
+ return this.metadata;
43
+ }
44
+ getCreatedAt() {
45
+ return this.createdAt;
46
+ }
47
+ getId() {
48
+ return this.id;
49
+ }
50
+ getName() {
51
+ return this.name;
52
+ }
53
+ getLimit() {
54
+ return this.limit;
55
+ }
56
+ getSize() {
57
+ return this.members.size;
58
+ }
59
+ canAddMember() {
60
+ const size = this.getSize();
61
+ return size < this.limit;
62
+ }
63
+ }
64
+ exports.default = Channel;
65
+ //# sourceMappingURL=Channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAIpC,MAAqB,OAAO;IAQ3B,YAAY,EAAU,EAAE,IAAY,EAAE,KAAc,EAAE,OAAsC,EAAE,QAAiC;QAPvH,cAAS,GAAU,IAAI,IAAI,EAAE,CAAC;QAQrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IAChC,CAAC;IAEM,SAAS,CAAC,MAAuB;QACvC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC;YACd,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClB,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE;aACxB;SACD,CAAC,CAAC;IACJ,CAAC;IAEM,YAAY,CAAC,MAAuB;QAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,SAAS,CAAC,OAAmC,EAAE,OAAwC;QAC7F,mBAAS,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,SAAS,CAAC,MAAkC,IAAG,CAAC;IAChD,SAAS,CAAC,MAAkC,IAAG,CAAC;IAChD,UAAU;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IACM,WAAW;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAEM,QAAQ;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC;IACO,YAAY;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;CACD;AAxED,0BAwEC"}
@@ -0,0 +1,14 @@
1
+ import { Server, WebSocketHandler } from "bun";
2
+ import Singleton from "../../../singleton";
3
+ import type { WebsocketClientData } from "./websocket.types";
4
+ export default class Websocket extends Singleton {
5
+ private channels;
6
+ private server;
7
+ private constructor();
8
+ set(server: Server): void;
9
+ static Server(): Server;
10
+ setup(): WebSocketHandler<WebsocketClientData>;
11
+ private messageReceived;
12
+ private clientConnected;
13
+ private clientDisconnected;
14
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /* Hey, we're working on a game, today we're going to implement the first few steps
3
+
4
+ we will start with a websocket implementation - an abstraction of bun's websocket functioanlity, here are the docs@https://bun.sh/docs/api/websockets
5
+
6
+ lets start simple, I want an abstraction interface for the handlers, suggest a strategy */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const Channel_1 = __importDefault(require("./Channel"));
12
+ const WebsocketClient_1 = __importDefault(require("./WebsocketClient"));
13
+ const singleton_1 = __importDefault(require("../../../singleton"));
14
+ class Websocket extends singleton_1.default {
15
+ constructor() {
16
+ super();
17
+ this.channels = new Map();
18
+ this.messageReceived = (ws, message) => {
19
+ console.log("Received message:", message);
20
+ if (message === "ping")
21
+ ws.send("pong");
22
+ else
23
+ ws.send(message);
24
+ };
25
+ this.clientConnected = (ws) => {
26
+ console.log("WebSocket connection opened");
27
+ const global = this.channels.get("global");
28
+ const client = new WebsocketClient_1.default(ws.data.id, ws);
29
+ if (global)
30
+ global.addMember(client);
31
+ };
32
+ this.clientDisconnected = (ws) => {
33
+ console.log("WebSocket connection closed");
34
+ };
35
+ const global = new Channel_1.default("global", "Global Channel", 1000);
36
+ this.channels.set("global", global);
37
+ }
38
+ set(server) {
39
+ this.server = server;
40
+ }
41
+ static Server() {
42
+ return Websocket.GetInstance().server;
43
+ }
44
+ setup() {
45
+ return {
46
+ message: this.messageReceived,
47
+ open: this.clientConnected,
48
+ close: this.clientDisconnected,
49
+ };
50
+ }
51
+ }
52
+ exports.default = Websocket;
53
+ //# sourceMappingURL=Websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":";AAAA;;;;0FAI0F;;;;;AAG1F,wDAAgC;AAChC,wEAAgD;AAChD,mEAA2C;AAI3C,MAAqB,SAAU,SAAQ,mBAAS;IAG/C;QACC,KAAK,EAAE,CAAC;QAHD,aAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;QAwBvC,oBAAe,GAAG,CAAC,EAAwC,EAAE,OAAyB,EAAE,EAAE;YACjG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,MAAM;gBAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;gBACnC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC;QAEM,oBAAe,GAAG,CAAC,EAAwC,EAAE,EAAE;YACtE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,yBAAe,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,MAAM;gBAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,EAAwC,EAAE,EAAE;YACzE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC5C,CAAC,CAAC;QAnCD,MAAM,MAAM,GAAG,IAAI,iBAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAEM,GAAG,CAAC,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAEM,MAAM,CAAC,MAAM;QACnB,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;IACvC,CAAC;IAEM,KAAK;QACX,OAAO;YACN,OAAO,EAAE,IAAI,CAAC,eAAe;YAC7B,IAAI,EAAE,IAAI,CAAC,eAAe;YAC1B,KAAK,EAAE,IAAI,CAAC,kBAAkB;SAC9B,CAAC;IACH,CAAC;CAkBD;AAzCD,4BAyCC"}
@@ -0,0 +1,13 @@
1
+ import { ServerWebSocket } from "bun";
2
+ import Channel from "./Channel";
3
+ import type { I_WebsocketClient, WebsocketClientData, WebsocketChannel } from "./websocket.types";
4
+ export default class WebsocketClient implements I_WebsocketClient {
5
+ id: string;
6
+ ws: ServerWebSocket<WebsocketClientData>;
7
+ private channels;
8
+ constructor(id: string, ws: ServerWebSocket<WebsocketClientData>);
9
+ joinChannel(channel: Channel): void;
10
+ leaveChannel(channel: Channel): void;
11
+ getChannels(): WebsocketChannel;
12
+ getId(): string;
13
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class WebsocketClient {
4
+ constructor(id, ws) {
5
+ this.channels = new Map();
6
+ this.id = id;
7
+ this.ws = ws;
8
+ }
9
+ joinChannel(channel) {
10
+ this.channels.set(channel.getId(), channel);
11
+ this.ws.subscribe(channel.getId());
12
+ }
13
+ leaveChannel(channel) {
14
+ this.channels.delete(channel.getId());
15
+ this.ws.unsubscribe(channel.getId());
16
+ }
17
+ getChannels() {
18
+ return this.channels;
19
+ }
20
+ getId() {
21
+ return this.id;
22
+ }
23
+ }
24
+ exports.default = WebsocketClient;
25
+ //# sourceMappingURL=WebsocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebsocketClient.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/WebsocketClient.ts"],"names":[],"mappings":";;AAIA,MAAqB,eAAe;IAKnC,YAAY,EAAU,EAAE,EAAwC;QAFxD,aAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;QAG9C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC;IAEM,WAAW,CAAC,OAAgB;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,YAAY,CAAC,OAAgB;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,WAAW;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;CACD;AA3BD,kCA2BC"}
@@ -0,0 +1,7 @@
1
+ export * from './Websocket';
2
+ export * from './WebsocketClient';
3
+ export * from './websocket.types';
4
+ export * from './Channel';
5
+ export { default as Websocket } from './Websocket';
6
+ export { default as WebsocketClient } from './WebsocketClient';
7
+ export { default as Channel } from './Channel';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // This file is auto-generated by scripts/generate-indexes.ts
3
+ // Do not edit this file directly
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ var __importDefault = (this && this.__importDefault) || function (mod) {
19
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.Channel = exports.WebsocketClient = exports.Websocket = void 0;
23
+ __exportStar(require("./Websocket"), exports);
24
+ __exportStar(require("./WebsocketClient"), exports);
25
+ __exportStar(require("./websocket.types"), exports);
26
+ __exportStar(require("./Channel"), exports);
27
+ var Websocket_1 = require("./Websocket");
28
+ Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(Websocket_1).default; } });
29
+ var WebsocketClient_1 = require("./WebsocketClient");
30
+ Object.defineProperty(exports, "WebsocketClient", { enumerable: true, get: function () { return __importDefault(WebsocketClient_1).default; } });
31
+ var Channel_1 = require("./Channel");
32
+ Object.defineProperty(exports, "Channel", { enumerable: true, get: function () { return __importDefault(Channel_1).default; } });
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,8CAA4B;AAC5B,oDAAkC;AAClC,oDAAkC;AAClC,4CAA0B;AAC1B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,qDAA+D;AAAtD,mIAAA,OAAO,OAAmB;AACnC,qCAA+C;AAAtC,mHAAA,OAAO,OAAW"}
@@ -0,0 +1,15 @@
1
+ import { ServerWebSocket } from "bun";
2
+ import Channel from "./Channel";
3
+ export interface I_WebsocketClient {
4
+ ws: ServerWebSocket<WebsocketClientData>;
5
+ id: string;
6
+ }
7
+ export type WebsocketClientData = {
8
+ id: string;
9
+ };
10
+ export type WebsocketMessage = string | Buffer<ArrayBufferLike>;
11
+ export type WebsocketStructuredMessage = {
12
+ type: string;
13
+ data: any;
14
+ };
15
+ export type WebsocketChannel<T extends Channel = Channel> = Map<string, T>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=websocket.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.types.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/websocket.types.ts"],"names":[],"mappings":""}
@@ -1,4 +1,3 @@
1
- export * from './websocket';
2
- export { default as Websocket } from './websocket';
3
1
  export * from './controller';
4
2
  export { default as Controller } from './controller';
3
+ export * from './bun';
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // This file is auto-generated by scripts/generate-indexes.sh
2
+ // This file is auto-generated by scripts/generate-indexes.ts
3
3
  // Do not edit this file directly
4
4
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
5
  if (k2 === undefined) k2 = k;
@@ -19,11 +19,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
19
19
  return (mod && mod.__esModule) ? mod : { "default": mod };
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.Controller = exports.Websocket = void 0;
23
- __exportStar(require("./websocket"), exports);
24
- var websocket_1 = require("./websocket");
25
- Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(websocket_1).default; } });
22
+ exports.Controller = void 0;
26
23
  __exportStar(require("./controller"), exports);
27
24
  var controller_1 = require("./controller");
28
25
  Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return __importDefault(controller_1).default; } });
26
+ __exportStar(require("./bun"), exports);
29
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,8CAA4B;AAC5B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,+CAA6B;AAC7B,2CAAqD;AAA5C,yHAAA,OAAO,OAAc"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,+CAA6B;AAC7B,2CAAqD;AAA5C,yHAAA,OAAO,OAAc;AAE9B,wCAAsB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "topsyde-utils",
3
- "version": "1.0.22",
3
+ "version": "1.0.25",
4
4
  "description": "A bundle of TypeScript utility classes and functions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,6 +20,14 @@
20
20
  "./server": {
21
21
  "types": "./dist/server/index.d.ts",
22
22
  "default": "./dist/server/index.js"
23
+ },
24
+ "./server/bun": {
25
+ "types": "./dist/server/bun/index.d.ts",
26
+ "default": "./dist/server/bun/index.js"
27
+ },
28
+ "./server/bun/websocket": {
29
+ "types": "./dist/server/bun/websocket/index.d.ts",
30
+ "default": "./dist/server/bun/websocket/index.js"
23
31
  }
24
32
  },
25
33
  "typesVersions": {
@@ -29,6 +37,12 @@
29
37
  ],
30
38
  "server": [
31
39
  "./dist/server/index.d.ts"
40
+ ],
41
+ "server/bun": [
42
+ "./dist/server/bun/index.d.ts"
43
+ ],
44
+ "server/bun/websocket": [
45
+ "./dist/server/bun/websocket/index.d.ts"
32
46
  ]
33
47
  }
34
48
  },
@@ -36,7 +50,7 @@
36
50
  "clean": "rimraf dist",
37
51
  "format": "prettier --cache --write \"**/*.ts\"",
38
52
  "format:generated": "prettier --cache --write \"src/index.ts\"",
39
- "generate-indexes": "./scripts/generate-indexes.sh",
53
+ "generate-indexes": "bash ./scripts/generate-indexes.sh",
40
54
  "build:ts": "tsc",
41
55
  "build:types": "tsc --emitDeclarationOnly --declaration --outDir ./dist",
42
56
  "build:prepare": "bun run clean && bun run generate-indexes && bun run format:generated",
@@ -1,2 +0,0 @@
1
- export default class Websocket {
2
- }
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class Websocket {
4
- }
5
- exports.default = Websocket;
6
- //# sourceMappingURL=websocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":";;AAAA,MAAqB,SAAS;CAAG;AAAjC,4BAAiC"}