echogarden 0.2.5 → 0.2.6
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/server/Server.js +5 -5
- package/dist/server/Server.js.map +1 -1
- package/dist/server/ServerStarter.js +1 -2
- package/dist/server/ServerStarter.js.map +1 -1
- package/dist/server/Worker.d.ts +4 -2
- package/dist/server/Worker.js +71 -54
- package/dist/server/Worker.js.map +1 -1
- package/dist/server/WorkerStarter.d.ts +1 -0
- package/dist/server/WorkerStarter.js +16 -0
- package/dist/server/WorkerStarter.js.map +1 -0
- package/package.json +11 -11
package/dist/server/Server.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { WebSocketServer, WebSocket } from 'ws';
|
|
2
2
|
import { encode as encodeMsgPack, decode as decodeMsgPack } from 'msgpack-lite';
|
|
3
|
-
import { Worker } from 'node:worker_threads';
|
|
4
3
|
import { logToStderr } from '../utilities/Utilities.js';
|
|
5
4
|
import { OpenPromise } from '../utilities/OpenPromise.js';
|
|
6
|
-
import {
|
|
5
|
+
import { readFile, existsSync } from '../utilities/FileSystem.js';
|
|
7
6
|
import { extendDeep } from '../utilities/ObjectUtilities.js';
|
|
7
|
+
import { sendMessageToWorker, addListenerToWorkerMessages } from './Worker.js';
|
|
8
8
|
const log = logToStderr;
|
|
9
9
|
export async function startWebSocketServer(serverOptions, onStarted) {
|
|
10
10
|
serverOptions = extendDeep(defaultServerOptions, serverOptions);
|
|
@@ -32,8 +32,8 @@ export async function startWebSocketServer(serverOptions, onStarted) {
|
|
|
32
32
|
}
|
|
33
33
|
const wss = new WebSocketServer(wsServerOptions);
|
|
34
34
|
const requestIdToWebSocket = new Map();
|
|
35
|
-
const worker = new Worker(resolveToModuleRootDir("dist/server/
|
|
36
|
-
|
|
35
|
+
//const worker = new Worker(resolveToModuleRootDir("dist/server/WorkerStarter.js"))
|
|
36
|
+
addListenerToWorkerMessages((message) => {
|
|
37
37
|
if (!message.requestId) {
|
|
38
38
|
throw new Error("Worker message doesn't have a request ID");
|
|
39
39
|
}
|
|
@@ -73,7 +73,7 @@ export async function startWebSocketServer(serverOptions, onStarted) {
|
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
75
|
requestIdToWebSocket.set(requestId, ws);
|
|
76
|
-
|
|
76
|
+
sendMessageToWorker(incomingMessage);
|
|
77
77
|
});
|
|
78
78
|
ws.on('error', (e) => {
|
|
79
79
|
log(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAoC,MAAM,IAAI,CAAA;AACjF,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerStarter.js","sourceRoot":"","sources":["../../src/server/ServerStarter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gCAAgC,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAC3H,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,GAAG,GAAG,WAAW,CAAA;AAEvB,gCAAgC,EAAE,CAAA;AAElC,gCAAgC,CAAC,GAAG,EAAE;IACrC,GAAG,CAAC,EAAE,CAAC,CAAA;AACR,CAAC,CAAC,CAAA;AAEF,MAAM,oBAAoB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"ServerStarter.js","sourceRoot":"","sources":["../../src/server/ServerStarter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gCAAgC,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAC3H,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,GAAG,GAAG,WAAW,CAAA;AAEvB,gCAAgC,EAAE,CAAA;AAElC,gCAAgC,CAAC,GAAG,EAAE;IACrC,GAAG,CAAC,EAAE,CAAC,CAAA;AACR,CAAC,CAAC,CAAA;AAEF,MAAM,oBAAoB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA"}
|
package/dist/server/Worker.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { RawAudio } from "../audio/AudioUtilities.js";
|
|
|
3
3
|
import { RecognitionOptions, RecognitionResult } from "../api/Recognition.js";
|
|
4
4
|
import { AlignmentOptions, AlignmentResult } from "../api/Alignment.js";
|
|
5
5
|
import { SpeechTranslationOptions, SpeechTranslationResult } from "../api/Translation.js";
|
|
6
|
-
export declare function processMessage(message: WorkerRequestMessage,
|
|
6
|
+
export declare function processMessage(message: WorkerRequestMessage, sendMessage: MessageFunc): Promise<void>;
|
|
7
7
|
export interface SynthesizeSegmentsRequestMessage extends WorkerMessageBase {
|
|
8
8
|
messageType: "SynthesizeSegmentsRequest";
|
|
9
9
|
segments: string[];
|
|
@@ -50,8 +50,10 @@ export interface SpeechTranslationRequestMessage extends WorkerMessageBase {
|
|
|
50
50
|
export interface SpeechTranslationResponseMessage extends WorkerMessageBase, SpeechTranslationResult {
|
|
51
51
|
messageType: "SpeechTranslationResponse";
|
|
52
52
|
}
|
|
53
|
+
export declare function sendMessageToWorker(message: any): void;
|
|
54
|
+
export declare function addListenerToWorkerMessages(handler: MessageFunc): void;
|
|
53
55
|
export type WorkerRequestMessage = SynthesizeSegmentsRequestMessage | VoiceListRequestMessage | RecognitionRequestMessage | AlignmentRequestMessage | SpeechTranslationRequestMessage;
|
|
54
56
|
export interface WorkerMessageBase {
|
|
55
57
|
messageType: string;
|
|
56
58
|
}
|
|
57
|
-
export type
|
|
59
|
+
export type MessageFunc = (message: any) => void;
|
package/dist/server/Worker.js
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
1
|
import { requestVoiceList, synthesizeSegments } from "../api/Synthesis.js";
|
|
2
2
|
import { Queue } from "../utilities/Queue.js";
|
|
3
|
-
import { isMainThread, parentPort } from 'node:worker_threads';
|
|
4
3
|
import { logToStderr } from "../utilities/Utilities.js";
|
|
5
4
|
import { recognize } from "../api/Recognition.js";
|
|
6
5
|
import { align } from "../api/Alignment.js";
|
|
7
6
|
import { translateSpeech } from "../api/Translation.js";
|
|
8
7
|
const log = logToStderr;
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const messageChannel = new MessageChannel();
|
|
9
|
+
messageChannel.port1.start();
|
|
10
|
+
messageChannel.port2.start();
|
|
11
|
+
addListenerToClientMessages((message) => {
|
|
12
|
+
enqueueAndProcessIfIdle(message);
|
|
13
|
+
});
|
|
14
|
+
const messageQueue = new Queue();
|
|
15
|
+
let isProcessing = false;
|
|
16
|
+
function enqueueAndProcessIfIdle(message) {
|
|
17
|
+
messageQueue.enqueue(message);
|
|
18
|
+
processQueueIfIdle();
|
|
19
|
+
}
|
|
20
|
+
async function processQueueIfIdle() {
|
|
21
|
+
if (isProcessing) {
|
|
11
22
|
return;
|
|
12
23
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
24
|
+
isProcessing = true;
|
|
25
|
+
while (!messageQueue.isEmpty) {
|
|
26
|
+
const incomingMessage = messageQueue.dequeue();
|
|
27
|
+
const requestId = incomingMessage.requestId;
|
|
28
|
+
function sendMessage(outgoingMessage) {
|
|
29
|
+
sendMessageToClient({
|
|
30
|
+
requestId,
|
|
31
|
+
...outgoingMessage,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
await processMessage(incomingMessage, sendMessage);
|
|
18
36
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
...outgoingMessage,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
await processMessage(incomingMessage, postMessage);
|
|
31
|
-
}
|
|
32
|
-
catch (e) {
|
|
33
|
-
log(`${e}`);
|
|
34
|
-
parentPort?.postMessage({
|
|
35
|
-
requestId,
|
|
36
|
-
messageType: "Error",
|
|
37
|
-
error: e
|
|
38
|
-
});
|
|
39
|
-
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
log(`${e}`);
|
|
39
|
+
sendMessageToClient({
|
|
40
|
+
requestId,
|
|
41
|
+
messageType: "Error",
|
|
42
|
+
error: e
|
|
43
|
+
});
|
|
40
44
|
}
|
|
41
|
-
isProcessing = false;
|
|
42
45
|
}
|
|
43
|
-
|
|
44
|
-
messageQueue.enqueue(message);
|
|
45
|
-
processQueueIfIdle();
|
|
46
|
-
});
|
|
46
|
+
isProcessing = false;
|
|
47
47
|
}
|
|
48
|
-
export async function processMessage(message,
|
|
48
|
+
export async function processMessage(message, sendMessage) {
|
|
49
49
|
switch (message.messageType) {
|
|
50
50
|
case "SynthesizeSegmentsRequest": {
|
|
51
|
-
await processSynthesizeSegmentsRequest(message,
|
|
51
|
+
await processSynthesizeSegmentsRequest(message, sendMessage);
|
|
52
52
|
break;
|
|
53
53
|
}
|
|
54
54
|
case "VoiceListRequest": {
|
|
55
|
-
await processVoiceListRequest(message,
|
|
55
|
+
await processVoiceListRequest(message, sendMessage);
|
|
56
56
|
break;
|
|
57
57
|
}
|
|
58
58
|
case "RecognitionRequest": {
|
|
59
|
-
await processRecognitionRequest(message,
|
|
59
|
+
await processRecognitionRequest(message, sendMessage);
|
|
60
60
|
break;
|
|
61
61
|
}
|
|
62
62
|
case "AlignmentRequest": {
|
|
63
|
-
await processAlignmentRequest(message,
|
|
63
|
+
await processAlignmentRequest(message, sendMessage);
|
|
64
64
|
break;
|
|
65
65
|
}
|
|
66
66
|
case "SpeechTranslationRequest": {
|
|
67
|
-
await processSpeechTranslationRequest(message,
|
|
67
|
+
await processSpeechTranslationRequest(message, sendMessage);
|
|
68
68
|
break;
|
|
69
69
|
}
|
|
70
70
|
default: {
|
|
@@ -75,69 +75,86 @@ export async function processMessage(message, postMessage) {
|
|
|
75
75
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
76
76
|
// Synthesis operations
|
|
77
77
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
78
|
-
async function processSynthesizeSegmentsRequest(message,
|
|
78
|
+
async function processSynthesizeSegmentsRequest(message, sendMessage) {
|
|
79
79
|
async function onSegment(eventData) {
|
|
80
80
|
const responseMessage = {
|
|
81
81
|
messageType: "SynthesisSegmentEvent",
|
|
82
82
|
...eventData
|
|
83
83
|
};
|
|
84
|
-
|
|
84
|
+
sendMessage(responseMessage);
|
|
85
85
|
}
|
|
86
86
|
async function onSentence(eventData) {
|
|
87
87
|
const responseMessage = {
|
|
88
88
|
messageType: "SynthesisSentenceEvent",
|
|
89
89
|
...eventData
|
|
90
90
|
};
|
|
91
|
-
|
|
91
|
+
sendMessage(responseMessage);
|
|
92
92
|
}
|
|
93
93
|
const result = await synthesizeSegments(message.segments, message.options, onSegment, onSentence);
|
|
94
94
|
const responseMessage = {
|
|
95
95
|
messageType: "SynthesizeSegmentsResponse",
|
|
96
96
|
...result
|
|
97
97
|
};
|
|
98
|
-
|
|
98
|
+
sendMessage(responseMessage);
|
|
99
99
|
}
|
|
100
|
-
async function processVoiceListRequest(message,
|
|
100
|
+
async function processVoiceListRequest(message, sendMessage) {
|
|
101
101
|
const result = await requestVoiceList(message.options);
|
|
102
102
|
const responseMessage = {
|
|
103
103
|
messageType: "VoiceListResponse",
|
|
104
104
|
...result
|
|
105
105
|
};
|
|
106
|
-
|
|
106
|
+
sendMessage(responseMessage);
|
|
107
107
|
}
|
|
108
108
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
109
109
|
// Recognition operations
|
|
110
110
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
111
|
-
async function processRecognitionRequest(message,
|
|
111
|
+
async function processRecognitionRequest(message, sendMessage) {
|
|
112
112
|
const result = await recognize(message.inputRawAudio, message.options);
|
|
113
113
|
const responseMessage = {
|
|
114
114
|
messageType: "RecognitionResponse",
|
|
115
115
|
...result
|
|
116
116
|
};
|
|
117
|
-
|
|
117
|
+
sendMessage(responseMessage);
|
|
118
118
|
}
|
|
119
119
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
120
120
|
// Alignment operations
|
|
121
121
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
122
|
-
async function processAlignmentRequest(message,
|
|
122
|
+
async function processAlignmentRequest(message, sendMessage) {
|
|
123
123
|
const result = await align(message.inputRawAudio, message.transcript, message.options);
|
|
124
124
|
const responseMessage = {
|
|
125
125
|
messageType: "AlignmentResponse",
|
|
126
126
|
...result
|
|
127
127
|
};
|
|
128
|
-
|
|
128
|
+
sendMessage(responseMessage);
|
|
129
129
|
}
|
|
130
130
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
131
131
|
// Speech translation operations
|
|
132
132
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
133
|
-
async function processSpeechTranslationRequest(message,
|
|
133
|
+
async function processSpeechTranslationRequest(message, sendMessage) {
|
|
134
134
|
const result = await translateSpeech(message.inputRawAudio, message.options);
|
|
135
135
|
const responseMessage = {
|
|
136
136
|
messageType: "SpeechTranslationResponse",
|
|
137
137
|
...result
|
|
138
138
|
};
|
|
139
|
-
|
|
139
|
+
sendMessage(responseMessage);
|
|
140
|
+
}
|
|
141
|
+
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
142
|
+
// Messaging methods
|
|
143
|
+
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
144
|
+
export function sendMessageToWorker(message) {
|
|
145
|
+
messageChannel.port1.postMessage(message);
|
|
146
|
+
}
|
|
147
|
+
export function addListenerToWorkerMessages(handler) {
|
|
148
|
+
messageChannel.port1.addEventListener('message', (event) => {
|
|
149
|
+
handler(event.data);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function sendMessageToClient(message) {
|
|
153
|
+
messageChannel.port2.postMessage(message);
|
|
154
|
+
}
|
|
155
|
+
function addListenerToClientMessages(handler) {
|
|
156
|
+
messageChannel.port2.addEventListener('message', (event) => {
|
|
157
|
+
handler(event.data);
|
|
158
|
+
});
|
|
140
159
|
}
|
|
141
|
-
// Start worker if running in worker thread
|
|
142
|
-
startIfInWorkerThread();
|
|
143
160
|
//# sourceMappingURL=Worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/server/Worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0H,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAClM,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/server/Worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { isMainThread, parentPort } from 'node:worker_threads';
|
|
2
|
+
import { sendMessageToWorker, addListenerToWorkerMessages } from './Worker.js';
|
|
3
|
+
function startIfInWorkerThread() {
|
|
4
|
+
if (isMainThread || !parentPort) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
addListenerToWorkerMessages((message) => {
|
|
8
|
+
parentPort?.postMessage(message);
|
|
9
|
+
});
|
|
10
|
+
parentPort.on("message", (message) => {
|
|
11
|
+
sendMessageToWorker(message);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
// Start worker if running in worker thread
|
|
15
|
+
startIfInWorkerThread();
|
|
16
|
+
//# sourceMappingURL=WorkerStarter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerStarter.js","sourceRoot":"","sources":["../../src/server/WorkerStarter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAE9E,SAAS,qBAAqB;IAC7B,IAAI,YAAY,IAAI,CAAC,UAAU,EAAE;QAChC,OAAM;KACN;IAED,2BAA2B,CAAC,CAAC,OAAO,EAAE,EAAE;QACvC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAY,EAAE,EAAE;QACzC,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACH,CAAC;AAED,2CAA2C;AAC3C,qBAAqB,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "echogarden",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "An integrated speech toolbox designed with end-users in mind.",
|
|
5
5
|
"author": "Rotem Dan",
|
|
6
6
|
"license": "GPL-3.0-only",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"echogarden": "./dist/cli/CLILauncher.js"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@aws-sdk/client-polly": "^3.
|
|
59
|
-
"@aws-sdk/client-transcribe-streaming": "^3.
|
|
58
|
+
"@aws-sdk/client-polly": "^3.341.0",
|
|
59
|
+
"@aws-sdk/client-transcribe-streaming": "^3.341.0",
|
|
60
60
|
"@echogarden/espeak-ng-emscripten": "^0.1.2",
|
|
61
61
|
"@echogarden/fasttext-wasm": "^0.1.0",
|
|
62
62
|
"@echogarden/flite-wasi": "^0.1.1",
|
|
@@ -85,17 +85,17 @@
|
|
|
85
85
|
"html-to-text": "^9.0.5",
|
|
86
86
|
"import-meta-resolve": "^3.0.0",
|
|
87
87
|
"jieba-wasm": "^0.0.2",
|
|
88
|
-
"jsdom": "^22.
|
|
88
|
+
"jsdom": "^22.1.0",
|
|
89
89
|
"kuromoji": "^0.1.2",
|
|
90
90
|
"microsoft-cognitiveservices-speech-sdk": "^1.28.0",
|
|
91
91
|
"moving-median": "^1.0.0",
|
|
92
92
|
"msgpack-lite": "^0.1.26",
|
|
93
93
|
"ndarray": "^1.0.19",
|
|
94
94
|
"ndarray-ops": "^1.2.2",
|
|
95
|
-
"onnxruntime-node": "^1.
|
|
95
|
+
"onnxruntime-node": "^1.15.0",
|
|
96
96
|
"sam-js": "^0.2.1",
|
|
97
|
-
"tar": "^6.1.
|
|
98
|
-
"tinyld": "^1.3.
|
|
97
|
+
"tar": "^6.1.15",
|
|
98
|
+
"tinyld": "^1.3.4",
|
|
99
99
|
"ws": "^8.13.0",
|
|
100
100
|
"wtf_wikipedia": "^10.1.5",
|
|
101
101
|
"xregexp": "^5.1.1"
|
|
@@ -123,13 +123,13 @@
|
|
|
123
123
|
"@types/msgpack-lite": "^0.1.8",
|
|
124
124
|
"@types/ndarray": "^1.0.11",
|
|
125
125
|
"@types/ndarray-ops": "^1.2.4",
|
|
126
|
-
"@types/node": "^20.
|
|
126
|
+
"@types/node": "^20.2.5",
|
|
127
127
|
"@types/recursive-readdir": "^2.2.1",
|
|
128
128
|
"@types/tar": "^6.1.5",
|
|
129
129
|
"@types/ws": "^8.5.4",
|
|
130
|
-
"@typescript-eslint/eslint-plugin": "^5.59.
|
|
131
|
-
"@typescript-eslint/parser": "^5.59.
|
|
132
|
-
"eslint": "^8.
|
|
130
|
+
"@typescript-eslint/eslint-plugin": "^5.59.7",
|
|
131
|
+
"@typescript-eslint/parser": "^5.59.7",
|
|
132
|
+
"eslint": "^8.41.0",
|
|
133
133
|
"ts-json-schema-generator": "^1.2.0",
|
|
134
134
|
"typescript": "^5.0.4"
|
|
135
135
|
}
|