lemon-model 1.2.0 → 1.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.
Files changed (49) hide show
  1. package/README.md +79 -0
  2. package/dist/esm/cores/index.js +11 -0
  3. package/dist/esm/cores/index.js.map +1 -0
  4. package/dist/esm/cores/transformer.js +91 -0
  5. package/dist/esm/cores/transformer.js.map +1 -0
  6. package/dist/esm/genai/dump-test.js +196 -0
  7. package/dist/esm/genai/dump-test.js.map +1 -0
  8. package/dist/esm/genai/index.js +15 -0
  9. package/dist/esm/genai/index.js.map +1 -0
  10. package/dist/esm/genai/mocks.js +121 -0
  11. package/dist/esm/genai/mocks.js.map +1 -0
  12. package/dist/esm/genai/proxy.js +161 -0
  13. package/dist/esm/genai/proxy.js.map +1 -0
  14. package/dist/esm/genai/testing.js +12 -0
  15. package/dist/esm/genai/testing.js.map +1 -0
  16. package/dist/esm/genai/transport.js +131 -0
  17. package/dist/esm/genai/transport.js.map +1 -0
  18. package/dist/esm/genai/types.js +9 -0
  19. package/dist/esm/genai/types.js.map +1 -0
  20. package/dist/esm/index.js +15 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/package.json +3 -0
  23. package/dist/esm/socket/index.js +13 -0
  24. package/dist/esm/socket/index.js.map +1 -0
  25. package/dist/esm/socket/socket.js +833 -0
  26. package/dist/esm/socket/socket.js.map +1 -0
  27. package/dist/esm/socket/testing.js +12 -0
  28. package/dist/esm/socket/testing.js.map +1 -0
  29. package/dist/esm/socket/transport.js +603 -0
  30. package/dist/esm/socket/transport.js.map +1 -0
  31. package/dist/esm/socket/types.js +8 -0
  32. package/dist/esm/socket/types.js.map +1 -0
  33. package/dist/esm/socket/websocket.js +267 -0
  34. package/dist/esm/socket/websocket.js.map +1 -0
  35. package/dist/esm/types/core-storage.js +30 -0
  36. package/dist/esm/types/core-storage.js.map +1 -0
  37. package/dist/esm/types/core-types.js +17 -0
  38. package/dist/esm/types/core-types.js.map +1 -0
  39. package/dist/esm/types/index.js +13 -0
  40. package/dist/esm/types/index.js.map +1 -0
  41. package/dist/genai/index.js +1 -1
  42. package/dist/genai/index.js.map +1 -1
  43. package/dist/genai/testing.d.ts +1 -1
  44. package/dist/genai/testing.js +1 -1
  45. package/dist/socket/index.js +1 -1
  46. package/dist/socket/index.js.map +1 -1
  47. package/dist/socket/testing.d.ts +1 -1
  48. package/dist/socket/testing.js +1 -1
  49. package/package.json +26 -2
@@ -0,0 +1,267 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ /** extract a connection id from known API Gateway/WebSocket handshake response shapes */
11
+ export const extractWebSocketConnectionId = (message) => {
12
+ var _a, _b, _c, _d, _e, _f, _g, _h;
13
+ if (!message || typeof message !== 'object')
14
+ return undefined;
15
+ const data = message;
16
+ const candidates = [
17
+ data.connectionId,
18
+ data.connId,
19
+ (_a = data.data) === null || _a === void 0 ? void 0 : _a.connectionId,
20
+ (_b = data.data) === null || _b === void 0 ? void 0 : _b.connId,
21
+ (_d = (_c = data.data) === null || _c === void 0 ? void 0 : _c.connId) === null || _d === void 0 ? void 0 : _d.id,
22
+ (_e = data.data) === null || _e === void 0 ? void 0 : _e.id,
23
+ (_f = data.body) === null || _f === void 0 ? void 0 : _f.connectionId,
24
+ (_g = data.body) === null || _g === void 0 ? void 0 : _g.connId,
25
+ (_h = data.body) === null || _h === void 0 ? void 0 : _h.id,
26
+ data.id,
27
+ ];
28
+ return candidates.find(value => typeof value === 'string' && value.length > 0);
29
+ };
30
+ /**
31
+ * Wait until a WebSocket is open, send the handshake message, and resolve the
32
+ * first connection id found in inbound messages.
33
+ */
34
+ export const waitWebSocketConnectionId = (ws, options = {}) => __awaiter(void 0, void 0, void 0, function* () {
35
+ var _a, _b;
36
+ const timeoutMs = (_a = options.timeoutMs) !== null && _a !== void 0 ? _a : 15000;
37
+ const extract = (_b = options.extract) !== null && _b !== void 0 ? _b : extractWebSocketConnectionId;
38
+ yield waitWebSocketOpen(ws, timeoutMs);
39
+ return new Promise((resolve, reject) => {
40
+ let settled = false;
41
+ const timer = timeoutMs > 0
42
+ ? setTimeout(() => {
43
+ rejectOnce(new Error(`timeout waiting for connectionId from WebSocket: ${timeoutMs}ms`));
44
+ }, timeoutMs)
45
+ : undefined;
46
+ const cleanup = () => {
47
+ if (timer)
48
+ clearTimeout(timer);
49
+ ws.removeEventListener('message', onMessage);
50
+ ws.removeEventListener('error', onError);
51
+ ws.removeEventListener('close', onClose);
52
+ };
53
+ const resolveOnce = (connectionId) => {
54
+ if (settled)
55
+ return;
56
+ settled = true;
57
+ cleanup();
58
+ resolve(connectionId);
59
+ };
60
+ const rejectOnce = (error) => {
61
+ if (settled)
62
+ return;
63
+ settled = true;
64
+ cleanup();
65
+ reject(error);
66
+ };
67
+ const onMessage = (event) => __awaiter(void 0, void 0, void 0, function* () {
68
+ try {
69
+ const raw = yield asWebSocketText(event.data);
70
+ const json = tryParseWebSocketJSON(raw);
71
+ const connectionId = extract(json !== null && json !== void 0 ? json : raw);
72
+ if (connectionId)
73
+ resolveOnce(connectionId);
74
+ }
75
+ catch (e) {
76
+ rejectOnce(e);
77
+ }
78
+ });
79
+ const onError = (event) => rejectOnce(event);
80
+ const onClose = () => rejectOnce(new Error(`WebSocket closed before connectionId was received`));
81
+ ws.addEventListener('message', onMessage);
82
+ ws.addEventListener('error', onError, { once: true });
83
+ ws.addEventListener('close', onClose, { once: true });
84
+ if (options.connectMessage)
85
+ ws.send(options.connectMessage);
86
+ });
87
+ });
88
+ /**
89
+ * Adapter from browser-like WebSocket objects to `NetworkSupportable`.
90
+ *
91
+ * The adapter does not own externally supplied WebSocket instances. `close()` is
92
+ * intentionally equivalent to `detach()`; callers that created the WebSocket should
93
+ * close it themselves when they want the underlying connection closed.
94
+ */
95
+ export class BrowserWebSocketNetwork {
96
+ constructor(ws) {
97
+ this.ws = ws;
98
+ this.messageHandlers = new Set();
99
+ this.errorHandlers = new Set();
100
+ this.detached = false;
101
+ this.handleOpen = () => undefined;
102
+ this.handleMessage = (event) => {
103
+ if (this.detached || typeof event.data !== 'string')
104
+ return;
105
+ for (const handler of [...this.messageHandlers])
106
+ handler(event.data);
107
+ };
108
+ this.handleError = (event) => {
109
+ if (this.detached)
110
+ return;
111
+ for (const handler of [...this.errorHandlers])
112
+ handler(event, { scope: 'browserWebSocket', network: this });
113
+ };
114
+ this.handleClose = (event) => {
115
+ if (this.detached)
116
+ return;
117
+ for (const handler of [...this.errorHandlers])
118
+ handler(event, { scope: 'browserWebSocket.close', network: this });
119
+ };
120
+ this.opened = this.isOpen()
121
+ ? Promise.resolve()
122
+ : new Promise((resolve, reject) => {
123
+ const onOpen = () => {
124
+ this.detachReadyListeners();
125
+ resolve();
126
+ };
127
+ const onError = (event) => {
128
+ this.detachReadyListeners();
129
+ reject(event);
130
+ };
131
+ this.readyOpenHandler = onOpen;
132
+ this.readyErrorHandler = onError;
133
+ ws.addEventListener('open', onOpen, { once: true });
134
+ ws.addEventListener('error', onError, { once: true });
135
+ });
136
+ ws.addEventListener('open', this.handleOpen);
137
+ ws.addEventListener('message', this.handleMessage);
138
+ ws.addEventListener('error', this.handleError);
139
+ ws.addEventListener('close', this.handleClose);
140
+ }
141
+ get readyState() {
142
+ if (this.detached)
143
+ return 'closed';
144
+ if (this.isOpen())
145
+ return 'open';
146
+ if (this.ws.readyState === this.stateValue('CLOSING', 2))
147
+ return 'closing';
148
+ if (this.ws.readyState === this.stateValue('CLOSED', 3))
149
+ return 'closed';
150
+ return 'connecting';
151
+ }
152
+ ready() {
153
+ if (this.detached)
154
+ return Promise.reject(new Error(`@network connection error: closed - browserWebSocket.ready`));
155
+ return this.opened;
156
+ }
157
+ send(data) {
158
+ if (this.detached || !this.isOpen()) {
159
+ throw new Error(`@network connection error: ${this.readyState} - browserWebSocket.send`);
160
+ }
161
+ this.ws.send(data);
162
+ }
163
+ onMessage(handler) {
164
+ if (this.detached)
165
+ throw new Error(`@network connection error: closed - browserWebSocket.onMessage`);
166
+ this.messageHandlers.add(handler);
167
+ return () => this.messageHandlers.delete(handler);
168
+ }
169
+ configure(_options) {
170
+ // Browser WebSocket transport options are controlled by the browser/runtime.
171
+ }
172
+ onError(handler) {
173
+ this.errorHandlers.add(handler);
174
+ return () => this.errorHandlers.delete(handler);
175
+ }
176
+ close() {
177
+ this.detach();
178
+ }
179
+ /** remove all listeners without closing the externally owned WebSocket */
180
+ detach() {
181
+ if (this.detached)
182
+ return;
183
+ this.detached = true;
184
+ this.messageHandlers.clear();
185
+ this.errorHandlers.clear();
186
+ this.ws.removeEventListener('open', this.handleOpen);
187
+ this.ws.removeEventListener('message', this.handleMessage);
188
+ this.ws.removeEventListener('error', this.handleError);
189
+ this.ws.removeEventListener('close', this.handleClose);
190
+ this.detachReadyListeners();
191
+ }
192
+ isOpen() {
193
+ return this.ws.readyState === this.stateValue('OPEN', 1);
194
+ }
195
+ stateValue(key, fallback) {
196
+ return typeof this.ws[key] === 'number' ? this.ws[key] : fallback;
197
+ }
198
+ detachReadyListeners() {
199
+ if (this.readyOpenHandler)
200
+ this.ws.removeEventListener('open', this.readyOpenHandler);
201
+ if (this.readyErrorHandler)
202
+ this.ws.removeEventListener('error', this.readyErrorHandler);
203
+ this.readyOpenHandler = undefined;
204
+ this.readyErrorHandler = undefined;
205
+ }
206
+ }
207
+ const waitWebSocketOpen = (ws, timeoutMs) => {
208
+ if (ws.readyState === stateValue(ws, 'OPEN', 1))
209
+ return Promise.resolve();
210
+ return new Promise((resolve, reject) => {
211
+ let settled = false;
212
+ const timer = timeoutMs > 0
213
+ ? setTimeout(() => rejectOnce(new Error(`timeout waiting for WebSocket open: ${timeoutMs}ms`)), timeoutMs)
214
+ : undefined;
215
+ const cleanup = () => {
216
+ if (timer)
217
+ clearTimeout(timer);
218
+ ws.removeEventListener('open', onOpen);
219
+ ws.removeEventListener('error', onError);
220
+ ws.removeEventListener('close', onClose);
221
+ };
222
+ const resolveOnce = () => {
223
+ if (settled)
224
+ return;
225
+ settled = true;
226
+ cleanup();
227
+ resolve();
228
+ };
229
+ const rejectOnce = (error) => {
230
+ if (settled)
231
+ return;
232
+ settled = true;
233
+ cleanup();
234
+ reject(error);
235
+ };
236
+ const onOpen = () => resolveOnce();
237
+ const onError = (event) => rejectOnce(event);
238
+ const onClose = () => rejectOnce(new Error(`WebSocket closed before open`));
239
+ ws.addEventListener('open', onOpen, { once: true });
240
+ ws.addEventListener('error', onError, { once: true });
241
+ ws.addEventListener('close', onClose, { once: true });
242
+ });
243
+ };
244
+ const stateValue = (ws, key, fallback) => (typeof ws[key] === 'number' ? ws[key] : fallback);
245
+ const asWebSocketText = (data) => __awaiter(void 0, void 0, void 0, function* () {
246
+ if (typeof data === 'string')
247
+ return data;
248
+ if (data instanceof ArrayBuffer)
249
+ return new TextDecoder().decode(data);
250
+ if (ArrayBuffer.isView(data))
251
+ return new TextDecoder().decode(data);
252
+ const readable = data;
253
+ if (typeof (readable === null || readable === void 0 ? void 0 : readable.text) === 'function')
254
+ return readable.text();
255
+ if (typeof (readable === null || readable === void 0 ? void 0 : readable.arrayBuffer) === 'function')
256
+ return new TextDecoder().decode(yield readable.arrayBuffer());
257
+ return String(data);
258
+ });
259
+ const tryParseWebSocketJSON = (text) => {
260
+ try {
261
+ return JSON.parse(text);
262
+ }
263
+ catch (_a) {
264
+ return undefined;
265
+ }
266
+ };
267
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/socket/websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `core-storage.ts`
3
+ * - common types for core storage
4
+ *
5
+ *
6
+ * @author Steve Jung <steve@lemoncloud.io>
7
+ * @date 2019-11-20 initial version
8
+ * @date 2020-01-03 support cognito-identity
9
+ * @date 2021-12-07 support SearchBody
10
+ *
11
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
12
+ */
13
+ //NOTE! - BE WARE TO USE `ts-transformer-keys` DUE TO MISSING `ttypescript`
14
+ export const CORE_FIELDS = [
15
+ '$',
16
+ 'ns',
17
+ 'type',
18
+ 'stereo',
19
+ 'sid',
20
+ 'uid',
21
+ 'gid',
22
+ 'lock',
23
+ 'next',
24
+ 'meta',
25
+ 'createdAt',
26
+ 'updatedAt',
27
+ 'deletedAt',
28
+ 'error',
29
+ ];
30
+ //# sourceMappingURL=core-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-storage.js","sourceRoot":"","sources":["../../../src/types/core-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwHH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAa;IACjC,GAAG;IACH,IAAI;IACJ,MAAM;IACN,QAAQ;IACR,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,WAAW;IACX,WAAW;IACX,OAAO;CACV,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `core-types.ts`
3
+ * - common types for core service
4
+ *
5
+ *
6
+ * @author Steve Jung <steve@lemoncloud.io>
7
+ * @date 2019-11-20 initial version
8
+ * @date 2020-01-03 support cognito-identity
9
+ * @date 2021-12-07 support SearchBody
10
+ * @date 2024-12-20 optimized `NextIdentityCognito`
11
+ * @date 2025-05-13 optimized `NextContext` with `Authorization` header
12
+ * @date 2025-06-12 optimized `SearchBody` with `knn` support
13
+ *
14
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=core-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-types.js","sourceRoot":"","sources":["../../../src/types/core-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `index.ts`
3
+ * - main index
4
+ *
5
+ * @author Steve Jung <steve@lemoncloud.io>
6
+ * @date 2019-08-09 initial commit
7
+ * @date 2019-11-26 cleanup and optimized for `lemon-core#v2`
8
+ *
9
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
10
+ */
11
+ export * from './core-types.js';
12
+ export * from './core-storage.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -26,6 +26,6 @@ __exportStar(require("./proxy"), exports);
26
26
  __exportStar(require("./transport"), exports);
27
27
  __exportStar(require("./dump-test"), exports);
28
28
  //! NOTE: test helpers (`./mocks`) are intentionally NOT re-exported here.
29
- //! Import them via the isolated `lemon-model/dist/genai/testing` entry so
29
+ //! Import them via the isolated `lemon-model/genai/testing` entry so
30
30
  //! production (esp. frontend) bundles do not pull in test-only helpers.
31
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/genai/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,0CAAwB;AACxB,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAE5B,0EAA0E;AAC1E,0EAA0E;AAC1E,wEAAwE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/genai/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,0CAAwB;AACxB,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAE5B,0EAA0E;AAC1E,qEAAqE;AACrE,wEAAwE"}
@@ -4,7 +4,7 @@
4
4
  * - kept OUT of the package root barrel so production bundles do not include test helpers.
5
5
  *
6
6
  * Usage (tests / dev only):
7
- * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/dist/genai/testing';
7
+ * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/genai/testing';
8
8
  *
9
9
  * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
10
10
  */
@@ -20,7 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  * - kept OUT of the package root barrel so production bundles do not include test helpers.
21
21
  *
22
22
  * Usage (tests / dev only):
23
- * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/dist/genai/testing';
23
+ * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/genai/testing';
24
24
  *
25
25
  * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
26
26
  */
@@ -24,6 +24,6 @@ __exportStar(require("./types"), exports);
24
24
  __exportStar(require("./transport"), exports);
25
25
  __exportStar(require("./websocket"), exports);
26
26
  //! NOTE: the in-memory peer simulator (`./socket`) is intentionally NOT re-exported here.
27
- //! It is a test/dev utility — import it via the isolated `lemon-model/dist/socket/testing` entry
27
+ //! It is a test/dev utility — import it via the isolated `lemon-model/socket/testing` entry
28
28
  //! so production (esp. frontend) bundles do not pull in the simulator runtime.
29
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAE5B,0FAA0F;AAC1F,iGAAiG;AACjG,+EAA+E"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAE5B,0FAA0F;AAC1F,4FAA4F;AAC5F,+EAA+E"}
@@ -4,7 +4,7 @@
4
4
  * - kept OUT of the package root barrel so production bundles do not include the simulator runtime.
5
5
  *
6
6
  * Usage (tests / dev only):
7
- * import { createNetwork, createPeer, createSocketFactory } from 'lemon-model/dist/socket/testing';
7
+ * import { createNetwork, createPeer, createSocketFactory } from 'lemon-model/socket/testing';
8
8
  *
9
9
  * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
10
10
  */
@@ -20,7 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  * - kept OUT of the package root barrel so production bundles do not include the simulator runtime.
21
21
  *
22
22
  * Usage (tests / dev only):
23
- * import { createNetwork, createPeer, createSocketFactory } from 'lemon-model/dist/socket/testing';
23
+ * import { createNetwork, createPeer, createSocketFactory } from 'lemon-model/socket/testing';
24
24
  *
25
25
  * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
26
26
  */
package/package.json CHANGED
@@ -1,12 +1,35 @@
1
1
  {
2
2
  "name": "lemon-model",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Common shared model definitions for Lemon Micro-Service Platform",
5
5
  "main": "dist/index.js",
6
+ "module": "dist/esm/index.js",
6
7
  "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/esm/index.js",
12
+ "require": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./genai/testing": {
16
+ "types": "./dist/genai/testing.d.ts",
17
+ "import": "./dist/esm/genai/testing.js",
18
+ "require": "./dist/genai/testing.js",
19
+ "default": "./dist/genai/testing.js"
20
+ },
21
+ "./socket/testing": {
22
+ "types": "./dist/socket/testing.d.ts",
23
+ "import": "./dist/esm/socket/testing.js",
24
+ "require": "./dist/socket/testing.js",
25
+ "default": "./dist/socket/testing.js"
26
+ },
27
+ "./package.json": "./package.json"
28
+ },
7
29
  "scripts": {
8
- "build": "npm run build-ts",
30
+ "build": "npm run build-ts && npm run build-esm",
9
31
  "build-ts": "tsc -v && tsc",
32
+ "build-esm": "tsc -p tsconfig.esm.json && node scripts/fix-esm-build.cjs",
10
33
  "watch-ts": "tsc -w",
11
34
  "doc": "npm run doc:html && open dist/docs/index.html",
12
35
  "doc:html": "typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out dist/docs",
@@ -15,6 +38,7 @@
15
38
  "format": "prettier --write \"src/**/*.ts\"",
16
39
  "!test": "------- run self-test with jest -----",
17
40
  "test": "jest --config=jest.config.json",
41
+ "test:package-exports": "npm run build && node scripts/check-package-exports.cjs",
18
42
  "test:watch": "jest --config=jest.config.json --watchAll",
19
43
  "!publish": "------- publish into repository -----",
20
44
  "prepare": "npm run build",