@geometra/server 0.2.0 → 0.2.1
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/README.md +38 -0
- package/dist/protocol.d.ts +26 -7
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +80 -25
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @geometra/server
|
|
2
|
+
|
|
3
|
+
Server-side layout engine with WebSocket streaming for Geometra. Computes layouts on the server and streams them to thin clients.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @geometra/server
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Key Export
|
|
12
|
+
|
|
13
|
+
- `createServer` -- creates a Geometra layout server with WebSocket support
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { signal, box, text } from '@geometra/core/node'
|
|
19
|
+
import { createServer } from '@geometra/server'
|
|
20
|
+
|
|
21
|
+
const messages = signal(['Hello from server'])
|
|
22
|
+
|
|
23
|
+
function view() {
|
|
24
|
+
return box({ flexDirection: 'column', padding: 16, gap: 8 },
|
|
25
|
+
messages.value.map((m) =>
|
|
26
|
+
box({ backgroundColor: '#16213e', padding: 10, borderRadius: 8 }, [
|
|
27
|
+
text({ text: m, font: '14px Inter', lineHeight: 20, color: '#fff' }),
|
|
28
|
+
]),
|
|
29
|
+
),
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const server = await createServer(view, { port: 3100, width: 800, height: 500 })
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Links
|
|
37
|
+
|
|
38
|
+
- [Main repo](https://github.com/AiGeekz/geometra)
|
package/dist/protocol.d.ts
CHANGED
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
import type { ComputedLayout } from 'textura';
|
|
2
2
|
import type { UIElement } from '@geometra/core';
|
|
3
|
+
/** Increment when the wire message shape changes in a non-backward-compatible way. */
|
|
4
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
5
|
+
interface VersionedMessage {
|
|
6
|
+
protocolVersion?: number;
|
|
7
|
+
}
|
|
3
8
|
/** Messages sent from server to client. */
|
|
4
|
-
export type ServerMessage = {
|
|
9
|
+
export type ServerMessage = (VersionedMessage & {
|
|
5
10
|
type: 'frame';
|
|
6
11
|
layout: ComputedLayout;
|
|
7
12
|
tree: UIElement;
|
|
8
|
-
} | {
|
|
13
|
+
}) | (VersionedMessage & {
|
|
9
14
|
type: 'patch';
|
|
10
15
|
patches: LayoutPatch[];
|
|
11
|
-
} | {
|
|
16
|
+
}) | (VersionedMessage & {
|
|
12
17
|
type: 'error';
|
|
13
18
|
message: string;
|
|
14
|
-
};
|
|
19
|
+
});
|
|
15
20
|
/** Messages sent from client to server. */
|
|
16
|
-
export type ClientMessage = {
|
|
21
|
+
export type ClientMessage = (VersionedMessage & {
|
|
17
22
|
type: 'event';
|
|
18
23
|
eventType: string;
|
|
19
24
|
x: number;
|
|
20
25
|
y: number;
|
|
21
|
-
} | {
|
|
26
|
+
}) | (VersionedMessage & {
|
|
27
|
+
type: 'key';
|
|
28
|
+
eventType: 'onKeyDown' | 'onKeyUp';
|
|
29
|
+
key: string;
|
|
30
|
+
code: string;
|
|
31
|
+
shiftKey: boolean;
|
|
32
|
+
ctrlKey: boolean;
|
|
33
|
+
metaKey: boolean;
|
|
34
|
+
altKey: boolean;
|
|
35
|
+
}) | (VersionedMessage & {
|
|
36
|
+
type: 'composition';
|
|
37
|
+
eventType: 'onCompositionStart' | 'onCompositionUpdate' | 'onCompositionEnd';
|
|
38
|
+
data: string;
|
|
39
|
+
}) | (VersionedMessage & {
|
|
22
40
|
type: 'resize';
|
|
23
41
|
width: number;
|
|
24
42
|
height: number;
|
|
25
|
-
};
|
|
43
|
+
});
|
|
26
44
|
/** A patch describing a change to a single node's geometry. */
|
|
27
45
|
export interface LayoutPatch {
|
|
28
46
|
path: number[];
|
|
@@ -33,4 +51,5 @@ export interface LayoutPatch {
|
|
|
33
51
|
}
|
|
34
52
|
/** Diff two computed layouts and return patches for changed nodes. */
|
|
35
53
|
export declare function diffLayout(prev: ComputedLayout, next: ComputedLayout, path?: number[]): LayoutPatch[];
|
|
54
|
+
export {};
|
|
36
55
|
//# sourceMappingURL=protocol.d.ts.map
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,UAAU,gBAAgB;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GACrB,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,GAC/E,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,GAC9D,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE3D,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GACrB,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/E,CAAC,gBAAgB,GAAG;IAClB,IAAI,EAAE,KAAK,CAAA;IACX,SAAS,EAAE,WAAW,GAAG,SAAS,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAC,GACF,CAAC,gBAAgB,GAAG;IAClB,IAAI,EAAE,aAAa,CAAA;IACnB,SAAS,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,CAAA;IAC5E,IAAI,EAAE,MAAM,CAAA;CACb,CAAC,GACF,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE1E,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CACxB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,cAAc,EACpB,IAAI,GAAE,MAAM,EAAO,GAClB,WAAW,EAAE,CAuBf"}
|
package/dist/protocol.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** Increment when the wire message shape changes in a non-backward-compatible way. */
|
|
2
|
+
export const PROTOCOL_VERSION = 1;
|
|
1
3
|
/** Diff two computed layouts and return patches for changed nodes. */
|
|
2
4
|
export function diffLayout(prev, next, path = []) {
|
|
3
5
|
const patches = [];
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAyCjC,sEAAsE;AACtE,MAAM,UAAU,UAAU,CACxB,IAAoB,EACpB,IAAoB,EACpB,OAAiB,EAAE;IAEnB,MAAM,OAAO,GAAkB,EAAE,CAAA;IAEjC,MAAM,KAAK,GAAgB,EAAE,IAAI,EAAE,CAAA;IACnC,IAAI,OAAO,GAAG,KAAK,CAAA;IAEnB,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,OAAO,GAAG,IAAI,CAAA;IAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,OAAO,GAAG,IAAI,CAAA;IAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAAC,OAAO,GAAG,IAAI,CAAA;IAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAAC,OAAO,GAAG,IAAI,CAAA;IAAC,CAAC;IAE/E,IAAI,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAClC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface TexturaServerOptions {
|
|
|
6
6
|
width?: number;
|
|
7
7
|
/** Root height. Default: 600. */
|
|
8
8
|
height?: number;
|
|
9
|
+
/** Called on errors during layout computation or broadcasting. */
|
|
10
|
+
onError?: (error: unknown) => void;
|
|
9
11
|
}
|
|
10
12
|
export interface TexturaServer {
|
|
11
13
|
/** Trigger a re-render for all connected clients. */
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,gBAAgB,CAAA;AAI9D,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,gBAAgB,CAAA;AAI9D,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,MAAM,IAAI,IAAI,CAAA;IACd,4BAA4B;IAC5B,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,SAAS,EACrB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CA0IxB"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WebSocketServer } from 'ws';
|
|
2
2
|
import { init, computeLayout } from 'textura';
|
|
3
|
-
import { toLayoutTree, dispatchHit } from '@geometra/core';
|
|
4
|
-
import { diffLayout } from './protocol.js';
|
|
3
|
+
import { toLayoutTree, dispatchHit, dispatchKeyboardEvent, dispatchCompositionEvent } from '@geometra/core';
|
|
4
|
+
import { diffLayout, PROTOCOL_VERSION } from './protocol.js';
|
|
5
5
|
/**
|
|
6
6
|
* Create a Textura server that computes layout and streams geometry to clients.
|
|
7
7
|
*
|
|
@@ -11,36 +11,54 @@ import { diffLayout } from './protocol.js';
|
|
|
11
11
|
export async function createServer(view, options = {}) {
|
|
12
12
|
await init();
|
|
13
13
|
const port = options.port ?? 3100;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
let width = options.width ?? 800;
|
|
15
|
+
let height = options.height ?? 600;
|
|
16
16
|
const clients = new Set();
|
|
17
17
|
let prevLayout = null;
|
|
18
18
|
let currentTree = null;
|
|
19
19
|
function computeAndBroadcast() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
try {
|
|
21
|
+
currentTree = view();
|
|
22
|
+
const layoutTree = toLayoutTree(currentTree);
|
|
23
|
+
const layout = computeLayout(layoutTree, { width, height });
|
|
24
|
+
let msg;
|
|
25
|
+
if (prevLayout) {
|
|
26
|
+
const patches = diffLayout(prevLayout, layout);
|
|
27
|
+
if (patches.length === 0)
|
|
28
|
+
return;
|
|
29
|
+
// If patches are more than half the tree, just send full frame
|
|
30
|
+
if (patches.length > 20) {
|
|
31
|
+
msg = { type: 'frame', layout, tree: currentTree, protocolVersion: PROTOCOL_VERSION };
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
msg = { type: 'patch', patches, protocolVersion: PROTOCOL_VERSION };
|
|
35
|
+
}
|
|
31
36
|
}
|
|
32
37
|
else {
|
|
33
|
-
msg = { type: '
|
|
38
|
+
msg = { type: 'frame', layout, tree: currentTree, protocolVersion: PROTOCOL_VERSION };
|
|
39
|
+
}
|
|
40
|
+
prevLayout = layout;
|
|
41
|
+
const data = JSON.stringify(msg);
|
|
42
|
+
for (const client of clients) {
|
|
43
|
+
if (client.readyState === client.OPEN) {
|
|
44
|
+
client.send(data);
|
|
45
|
+
}
|
|
34
46
|
}
|
|
35
47
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (options.onError) {
|
|
50
|
+
options.onError(err);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.error('Geometra server error:', err);
|
|
54
|
+
}
|
|
55
|
+
// Send error to clients
|
|
56
|
+
const errorMsg = { type: 'error', message: String(err), protocolVersion: PROTOCOL_VERSION };
|
|
57
|
+
const data = JSON.stringify(errorMsg);
|
|
58
|
+
for (const client of clients) {
|
|
59
|
+
if (client.readyState === client.OPEN) {
|
|
60
|
+
client.send(data);
|
|
61
|
+
}
|
|
44
62
|
}
|
|
45
63
|
}
|
|
46
64
|
}
|
|
@@ -49,7 +67,12 @@ export async function createServer(view, options = {}) {
|
|
|
49
67
|
clients.add(ws);
|
|
50
68
|
// Send current state immediately
|
|
51
69
|
if (prevLayout && currentTree) {
|
|
52
|
-
const msg = {
|
|
70
|
+
const msg = {
|
|
71
|
+
type: 'frame',
|
|
72
|
+
layout: prevLayout,
|
|
73
|
+
tree: currentTree,
|
|
74
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
75
|
+
};
|
|
53
76
|
ws.send(JSON.stringify(msg));
|
|
54
77
|
}
|
|
55
78
|
else {
|
|
@@ -58,11 +81,43 @@ export async function createServer(view, options = {}) {
|
|
|
58
81
|
ws.on('message', (raw) => {
|
|
59
82
|
try {
|
|
60
83
|
const msg = JSON.parse(String(raw));
|
|
84
|
+
if (msg.protocolVersion && msg.protocolVersion > PROTOCOL_VERSION) {
|
|
85
|
+
const errorMsg = {
|
|
86
|
+
type: 'error',
|
|
87
|
+
message: `Client protocol ${msg.protocolVersion} is newer than server protocol ${PROTOCOL_VERSION}`,
|
|
88
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
89
|
+
};
|
|
90
|
+
ws.send(JSON.stringify(errorMsg));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
61
93
|
if (msg.type === 'event' && currentTree && prevLayout) {
|
|
62
94
|
dispatchHit(currentTree, prevLayout, msg.eventType, msg.x, msg.y);
|
|
63
95
|
// After event handling, signals may have changed — re-render
|
|
64
96
|
computeAndBroadcast();
|
|
65
97
|
}
|
|
98
|
+
else if (msg.type === 'key' && currentTree && prevLayout) {
|
|
99
|
+
dispatchKeyboardEvent(currentTree, prevLayout, msg.eventType, {
|
|
100
|
+
key: msg.key,
|
|
101
|
+
code: msg.code,
|
|
102
|
+
shiftKey: msg.shiftKey,
|
|
103
|
+
ctrlKey: msg.ctrlKey,
|
|
104
|
+
metaKey: msg.metaKey,
|
|
105
|
+
altKey: msg.altKey,
|
|
106
|
+
});
|
|
107
|
+
computeAndBroadcast();
|
|
108
|
+
}
|
|
109
|
+
else if (msg.type === 'composition' && currentTree && prevLayout) {
|
|
110
|
+
dispatchCompositionEvent(currentTree, prevLayout, msg.eventType, {
|
|
111
|
+
data: msg.data,
|
|
112
|
+
});
|
|
113
|
+
computeAndBroadcast();
|
|
114
|
+
}
|
|
115
|
+
else if (msg.type === 'resize') {
|
|
116
|
+
width = Math.max(1, msg.width);
|
|
117
|
+
height = Math.max(1, msg.height);
|
|
118
|
+
prevLayout = null;
|
|
119
|
+
computeAndBroadcast();
|
|
120
|
+
}
|
|
66
121
|
}
|
|
67
122
|
catch {
|
|
68
123
|
// Ignore malformed messages
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAEpC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geometra/server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Server-side layout engine with WebSocket geometry streaming",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"check": "tsc --noEmit"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@geometra/core": "^0.2.
|
|
36
|
+
"@geometra/core": "^0.2.1",
|
|
37
37
|
"ws": "^8.18.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|