diff --git a/apps/back/package.json b/apps/back/package.json index ef92764..bd58dae 100644 --- a/apps/back/package.json +++ b/apps/back/package.json @@ -2,11 +2,15 @@ "name": "@roomruler/back", "version": "0.0.0", "scripts": { - "build": "tsc --build", + "build": "rollup --config rollup.config.js", "start": "node dist/index.js" }, "devDependencies": { + "@rollup/plugin-node-resolve": "^13.0.4", + "@rollup/plugin-typescript": "^8.2.5", "@types/ws": "^7.4.7", + "rollup": "^2.56.3", + "tslib": "^2.3.1", "typescript": "^4.4.2" }, "dependencies": { diff --git a/apps/back/rollup.config.js b/apps/back/rollup.config.js new file mode 100644 index 0000000..f43f516 --- /dev/null +++ b/apps/back/rollup.config.js @@ -0,0 +1,11 @@ +const typescript = require("@rollup/plugin-typescript"); +const { nodeResolve } = require("@rollup/plugin-node-resolve"); + +export default { + input: "src/index.ts", + output: { + dir: "dist", + format: "cjs", + }, + plugins: [typescript(), nodeResolve({ resolveOnly: [/^@roomruler\/.*$/] })], +}; diff --git a/apps/back/src/index.ts b/apps/back/src/index.ts index 6e8bc51..8c2a14d 100644 --- a/apps/back/src/index.ts +++ b/apps/back/src/index.ts @@ -1,7 +1,12 @@ import "reflect-metadata"; import { Server, OPEN } from "ws"; import { connect, getRoomList, updateFree } from "./db"; -import { isMessage, isUpdateMessage } from "@roomruler/messages"; +import { + composeMessage, + isMessage, + isUpdateMessage, + ListMessage, +} from "@roomruler/messages"; const main = async () => { const connection = await connect(); @@ -15,7 +20,11 @@ const main = async () => { wss.on("connection", async (wsc, req) => { console.log("New user connected from " + req.socket.remoteAddress); - wsc.send(JSON.stringify(await getRoomList(connection))); + wsc.send( + JSON.stringify( + composeMessage("list", await getRoomList(connection)) + ) + ); wsc.on("message", async (data) => { console.log("Got message from " + req.socket.remoteAddress); diff --git a/apps/back/tsconfig.json b/apps/back/tsconfig.json index ffce736..93205f0 100644 --- a/apps/back/tsconfig.json +++ b/apps/back/tsconfig.json @@ -5,5 +5,6 @@ "module": "commonjs", "outDir": "dist" }, + "include": ["src"], "references": [{ "path": "../../packages/messages/tsconfig.json" }] } diff --git a/packages/messages/package.json b/packages/messages/package.json index 5acb0d1..35f4d64 100644 --- a/packages/messages/package.json +++ b/packages/messages/package.json @@ -3,6 +3,7 @@ "main": "dist/src/index.js", "version": "0.0.0", "types": "dist/src/index.d.ts", + "type": "module", "scripts": { "build": "tsc --build" }, diff --git a/packages/messages/src/index.ts b/packages/messages/src/index.ts index 3c76f1c..0f4027f 100644 --- a/packages/messages/src/index.ts +++ b/packages/messages/src/index.ts @@ -11,6 +11,21 @@ export type UpdateMessage = Message & { }; }; +export type Room = { + id: number; + title: string; + free: boolean; + x: number; + y: number; + width: number; + height: number; +}; + +export type ListMessage = Message & { + type: "list"; + args: Room[]; +}; + const isObjLike = (obj: unknown): obj is object => Boolean(obj) && typeof obj === "object"; @@ -31,3 +46,40 @@ export const isUpdateMessage = (message: Message): message is UpdateMessage => typeof message.args.id === "number" && hasProperty(message.args, "value") && typeof message.args.value === "boolean"; + +export const isRoom = (obj: unknown): obj is Room => { + if (!(typeof obj === "object") || !obj) return false; + + const ns = ["id", "x", "y", "width", "height"] as const; + for (const key of ns) { + if (!hasProperty(obj, key) || typeof obj[key] !== "number") return false; + } + + if ( + !hasProperty(obj, "title") || + typeof obj.title !== "string" || + !hasProperty(obj, "free") || + typeof obj.free !== "boolean" + ) + return false; + + return true; +}; + +export const isArrayOf = ( + obj: T, + itemCheck: (arg: T) => boolean +) => { + if (Array.isArray(obj)) { + for (const el of obj) if (!itemCheck(el)) return false; + return true; + } else return false; +}; + +export const composeMessage = ( + type: T["type"], + args: T["args"] +): Message => ({ + type, + args, +}); diff --git a/packages/messages/tsconfig.json b/packages/messages/tsconfig.json index 74d847c..3d87a68 100644 --- a/packages/messages/tsconfig.json +++ b/packages/messages/tsconfig.json @@ -1,10 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "module": "commonjs", + "module": "es6", "target": "es6", "outDir": "dist", "composite": true }, - "include": ["src"] + "include": ["src"], }