@tertiumorganum/typespec-amqp-ws 0.0.2
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/LICENSE +21 -0
- package/README.md +291 -0
- package/dist/src/amqp/builder.d.ts +4 -0
- package/dist/src/amqp/builder.d.ts.map +1 -0
- package/dist/src/amqp/builder.js +121 -0
- package/dist/src/amqp/builder.js.map +1 -0
- package/dist/src/amqp/decorators.d.ts +32 -0
- package/dist/src/amqp/decorators.d.ts.map +1 -0
- package/dist/src/amqp/decorators.js +38 -0
- package/dist/src/amqp/decorators.js.map +1 -0
- package/dist/src/amqp/index.d.ts +5 -0
- package/dist/src/amqp/index.d.ts.map +1 -0
- package/dist/src/amqp/index.js +7 -0
- package/dist/src/amqp/index.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/shared/asyncapi-emitter.d.ts +5 -0
- package/dist/src/shared/asyncapi-emitter.d.ts.map +1 -0
- package/dist/src/shared/asyncapi-emitter.js +70 -0
- package/dist/src/shared/asyncapi-emitter.js.map +1 -0
- package/dist/src/shared/decorators-service.d.ts +33 -0
- package/dist/src/shared/decorators-service.d.ts.map +1 -0
- package/dist/src/shared/decorators-service.js +13 -0
- package/dist/src/shared/decorators-service.js.map +1 -0
- package/dist/src/shared/document.d.ts +134 -0
- package/dist/src/shared/document.d.ts.map +1 -0
- package/dist/src/shared/document.js +4 -0
- package/dist/src/shared/document.js.map +1 -0
- package/dist/src/shared/lib.d.ts +250 -0
- package/dist/src/shared/lib.d.ts.map +1 -0
- package/dist/src/shared/lib.js +108 -0
- package/dist/src/shared/lib.js.map +1 -0
- package/dist/src/shared/options.d.ts +8 -0
- package/dist/src/shared/options.d.ts.map +1 -0
- package/dist/src/shared/options.js +25 -0
- package/dist/src/shared/options.js.map +1 -0
- package/dist/src/shared/schema-emitter.d.ts +34 -0
- package/dist/src/shared/schema-emitter.d.ts.map +1 -0
- package/dist/src/shared/schema-emitter.js +351 -0
- package/dist/src/shared/schema-emitter.js.map +1 -0
- package/dist/src/shared/state.d.ts +13 -0
- package/dist/src/shared/state.d.ts.map +1 -0
- package/dist/src/shared/state.js +14 -0
- package/dist/src/shared/state.js.map +1 -0
- package/dist/src/shared/yaml-writer.d.ts +7 -0
- package/dist/src/shared/yaml-writer.d.ts.map +1 -0
- package/dist/src/shared/yaml-writer.js +8 -0
- package/dist/src/shared/yaml-writer.js.map +1 -0
- package/dist/src/testing.d.ts +2 -0
- package/dist/src/testing.d.ts.map +1 -0
- package/dist/src/testing.js +6 -0
- package/dist/src/testing.js.map +1 -0
- package/dist/src/ws/builder.d.ts +4 -0
- package/dist/src/ws/builder.d.ts.map +1 -0
- package/dist/src/ws/builder.js +94 -0
- package/dist/src/ws/builder.js.map +1 -0
- package/dist/src/ws/decorators.d.ts +12 -0
- package/dist/src/ws/decorators.d.ts.map +1 -0
- package/dist/src/ws/decorators.js +18 -0
- package/dist/src/ws/decorators.js.map +1 -0
- package/dist/src/ws/index.d.ts +5 -0
- package/dist/src/ws/index.d.ts.map +1 -0
- package/dist/src/ws/index.js +7 -0
- package/dist/src/ws/index.js.map +1 -0
- package/lib/amqp.tsp +83 -0
- package/lib/main.tsp +65 -0
- package/lib/ws.tsp +42 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/ws/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,GACX,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,UAAU,OAAO,CAAC,OAAgB,EAAE,GAAgB;IACxD,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,eAAe,CAAC,OAAO,EAAE;QACvB,SAAS,CAAC,EAAE;YACV,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO;YAC7B,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;IAEH,6DAA6D;IAC7D,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI;YAC/D,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CACb,OAAgB,EAChB,GAAgB,EAChB,EAAa,EACb,MAA0B;IAE1B,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;IACzB,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACpC,gBAAgB,CAAC,OAAO,EAAE;YACxB,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAgC,CAAC;IACrF,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEvD,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IACtC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IACtC,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;IAExD,sBAAsB;IACtB,MAAM,OAAO,GAAoB;QAC/B,OAAO,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE;KACrD,CAAC;IACF,IAAI,QAAQ,EAAE,OAAO;QAAE,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC1D,IAAI,QAAQ;QAAE,OAAO,CAAC,WAAW,GAAG,0BAA0B,CAAC;IAC/D,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAE9C,4CAA4C;IAC5C,MAAM,OAAO,GACX,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC9E,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,yBAAyB,UAAU,EAAE,EAAE,CAAC;IAE/E,QAAQ;IACR,IAAI,UAAkD,CAAC;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAsB,CAAC;IAC5E,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG;YAClC,OAAO,EAAE,EAAE,IAAI,EAAE,wBAAwB,SAAS,CAAC,IAAI,EAAE,EAAE;SAC5D,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,yBAAyB,QAAQ,EAAE,EAAE,CAAC;QAC3E,UAAU,GAAG;YACX,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,aAAa,CAAC,eAAe,CAAC,EAAE,EAAE;YACjE,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,cAAc,aAAa,CAAC,eAAe,CAAC,aAAa,QAAQ,EAAE,EAAE;aAC9E;SACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;IAExC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,SAAS,GAAsB;QACnC,MAAM;QACN,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,aAAa,CAAC,eAAe,CAAC,EAAE,EAAE;QACjE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,aAAa,CAAC,eAAe,CAAC,aAAa,UAAU,EAAE,EAAE,CAAC;KAC5F,CAAC;IACF,IAAI,OAAO;QAAE,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IACzC,IAAI,WAAW;QAAE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACrD,IAAI,UAAU;QAAE,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;IAC7C,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DecoratorContext, Operation, Model } from "@typespec/compiler";
|
|
2
|
+
export declare const namespace = "TspAsyncApi.WebSocket";
|
|
3
|
+
export declare function $publish(context: DecoratorContext, target: Operation): void;
|
|
4
|
+
export declare function $consume(context: DecoratorContext, target: Operation): void;
|
|
5
|
+
export declare function $reply(context: DecoratorContext, target: Operation, replyType: Model): void;
|
|
6
|
+
export declare function $binary(context: DecoratorContext, target: Operation): void;
|
|
7
|
+
export interface MessageOverride {
|
|
8
|
+
name?: string;
|
|
9
|
+
summary?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function $message(context: DecoratorContext, target: Operation, config: MessageOverride): void;
|
|
12
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../../src/ws/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAS7E,eAAO,MAAM,SAAS,0BAA0B,CAAC;AAEjD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAE3E;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAE3E;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,CAE3F;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAE1E;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,QAAQ,CACtB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,eAAe,GACtB,IAAI,CAEN"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WsPublishKey, WsConsumeKey, WsReplyKey, WsBinaryKey, MessageKey, } from "../shared/state.js";
|
|
2
|
+
export const namespace = "TspAsyncApi.WebSocket";
|
|
3
|
+
export function $publish(context, target) {
|
|
4
|
+
context.program.stateMap(WsPublishKey).set(target, true);
|
|
5
|
+
}
|
|
6
|
+
export function $consume(context, target) {
|
|
7
|
+
context.program.stateMap(WsConsumeKey).set(target, true);
|
|
8
|
+
}
|
|
9
|
+
export function $reply(context, target, replyType) {
|
|
10
|
+
context.program.stateMap(WsReplyKey).set(target, replyType);
|
|
11
|
+
}
|
|
12
|
+
export function $binary(context, target) {
|
|
13
|
+
context.program.stateMap(WsBinaryKey).set(target, true);
|
|
14
|
+
}
|
|
15
|
+
export function $message(context, target, config) {
|
|
16
|
+
context.program.stateMap(MessageKey).set(target, config);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../src/ws/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAEjD,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAAiB;IACnE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAAiB;IACnE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAyB,EAAE,MAAiB,EAAE,SAAgB;IACnF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAyB,EAAE,MAAiB;IAClE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC;AAOD,MAAM,UAAU,QAAQ,CACtB,OAAyB,EACzB,MAAiB,EACjB,MAAuB;IAEvB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ws/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ws/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAuB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoC;IAChE,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
package/lib/amqp.tsp
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import "../dist/src/amqp/decorators.js";
|
|
2
|
+
|
|
3
|
+
using TypeSpec.Reflection;
|
|
4
|
+
|
|
5
|
+
namespace TspAsyncApi.Amqp;
|
|
6
|
+
|
|
7
|
+
@doc("Конфиг AMQP-обменника (exchange)")
|
|
8
|
+
model ExchangeConfig {
|
|
9
|
+
@doc("Имя exchange в RabbitMQ")
|
|
10
|
+
name: string;
|
|
11
|
+
|
|
12
|
+
@doc("Тип exchange: direct либо fanout")
|
|
13
|
+
type: string;
|
|
14
|
+
|
|
15
|
+
@doc("Переживает рестарт брокера")
|
|
16
|
+
durable?: boolean;
|
|
17
|
+
|
|
18
|
+
@doc("Удаляется когда последний биндинг отвалился")
|
|
19
|
+
autoDelete?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@doc("Конфиг AMQP-очереди (queue)")
|
|
23
|
+
model QueueConfig {
|
|
24
|
+
@doc("Имя очереди в RabbitMQ")
|
|
25
|
+
name: string;
|
|
26
|
+
|
|
27
|
+
@doc("Переживает рестарт брокера")
|
|
28
|
+
durable?: boolean;
|
|
29
|
+
|
|
30
|
+
@doc("Удаляется когда последний consumer отвалился")
|
|
31
|
+
autoDelete?: boolean;
|
|
32
|
+
|
|
33
|
+
@doc("Эксклюзивная — только один consumer")
|
|
34
|
+
exclusive?: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@doc("Конфиг операции-publisher (action: send)")
|
|
38
|
+
model PublishConfig {
|
|
39
|
+
@doc("Имя канала в YAML (override). Default — имя операции верзатим")
|
|
40
|
+
channelName?: string;
|
|
41
|
+
|
|
42
|
+
@doc("Routing key. Может быть опущен для fanout exchange")
|
|
43
|
+
routingKey?: string;
|
|
44
|
+
|
|
45
|
+
@doc("Exchange, в который публикуется сообщение")
|
|
46
|
+
exchange: ExchangeConfig;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@doc("Конфиг операции-consumer (action: receive)")
|
|
50
|
+
model ConsumeConfig {
|
|
51
|
+
@doc("Имя канала в YAML (override)")
|
|
52
|
+
channelName?: string;
|
|
53
|
+
|
|
54
|
+
@doc("Routing key (биндинг очереди к exchange)")
|
|
55
|
+
routingKey?: string;
|
|
56
|
+
|
|
57
|
+
@doc("Очередь, из которой читаются сообщения")
|
|
58
|
+
queue: QueueConfig;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@doc("Override параметров сообщения")
|
|
62
|
+
model MessageOverride {
|
|
63
|
+
@doc("Имя ключа сообщения в YAML")
|
|
64
|
+
name?: string;
|
|
65
|
+
|
|
66
|
+
@doc("Краткое описание сообщения")
|
|
67
|
+
summary?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Операция-publisher: сервис отправляет сообщение в exchange.
|
|
72
|
+
* → AsyncAPI action: send.
|
|
73
|
+
*/
|
|
74
|
+
extern dec publish(target: Operation, config: valueof PublishConfig);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Операция-consumer: сервис читает сообщения из очереди.
|
|
78
|
+
* → AsyncAPI action: receive.
|
|
79
|
+
*/
|
|
80
|
+
extern dec consume(target: Operation, config: valueof ConsumeConfig);
|
|
81
|
+
|
|
82
|
+
/** Override параметров сообщения, выводимого эмиттером */
|
|
83
|
+
extern dec message(target: Operation, config: valueof MessageOverride);
|
package/lib/main.tsp
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import "../dist/src/index.js";
|
|
2
|
+
import "../dist/src/shared/decorators-service.js";
|
|
3
|
+
|
|
4
|
+
import "./amqp.tsp";
|
|
5
|
+
import "./ws.tsp";
|
|
6
|
+
|
|
7
|
+
using TypeSpec.Reflection;
|
|
8
|
+
|
|
9
|
+
namespace TspAsyncApi;
|
|
10
|
+
|
|
11
|
+
@doc("Контактные данные владельца API")
|
|
12
|
+
model ContactInfo {
|
|
13
|
+
name?: string;
|
|
14
|
+
url?: string;
|
|
15
|
+
email?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@doc("Лицензия API")
|
|
19
|
+
model LicenseInfo {
|
|
20
|
+
name: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@doc("Ссылка на внешнюю документацию")
|
|
25
|
+
model ExternalDocs {
|
|
26
|
+
url: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@doc("Блок info AsyncAPI документа")
|
|
31
|
+
model InfoConfig {
|
|
32
|
+
version: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
contact?: ContactInfo;
|
|
35
|
+
license?: LicenseInfo;
|
|
36
|
+
externalDocs?: ExternalDocs;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@doc("Переменная в шаблоне URL сервера (например, {port})")
|
|
40
|
+
model ServerVariable {
|
|
41
|
+
`default`?: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
`enum`?: string[];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@doc("Описание сервера (брокера). Соответствует одному ключу в servers AsyncAPI")
|
|
47
|
+
model ServerConfig {
|
|
48
|
+
host: string;
|
|
49
|
+
protocol: string;
|
|
50
|
+
pathname?: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
variables?: Record<ServerVariable>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Заполняет блок info AsyncAPI документа.
|
|
57
|
+
* Применяется к корневому namespace сервиса (тому же, к которому @service).
|
|
58
|
+
*/
|
|
59
|
+
extern dec info(target: Namespace, options: valueof InfoConfig);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Добавляет одну запись в блок servers AsyncAPI документа.
|
|
63
|
+
* Можно вызывать многократно для нескольких серверов.
|
|
64
|
+
*/
|
|
65
|
+
extern dec server(target: Namespace, name: valueof string, options: valueof ServerConfig);
|
package/lib/ws.tsp
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import "../dist/src/ws/decorators.js";
|
|
2
|
+
|
|
3
|
+
using TypeSpec.Reflection;
|
|
4
|
+
|
|
5
|
+
namespace TspAsyncApi.WebSocket;
|
|
6
|
+
|
|
7
|
+
@doc("Override параметров сообщения")
|
|
8
|
+
model MessageOverride {
|
|
9
|
+
@doc("Имя ключа сообщения в YAML")
|
|
10
|
+
name?: string;
|
|
11
|
+
|
|
12
|
+
@doc("Краткое описание сообщения")
|
|
13
|
+
summary?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Операция-publisher: сервис отправляет сообщение.
|
|
18
|
+
* → AsyncAPI action: send.
|
|
19
|
+
* Все WS-операции по умолчанию на канале "/".
|
|
20
|
+
*/
|
|
21
|
+
extern dec publish(target: Operation);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Операция-consumer: сервис принимает сообщение.
|
|
25
|
+
* → AsyncAPI action: receive.
|
|
26
|
+
*/
|
|
27
|
+
extern dec consume(target: Operation);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Указывает модель ответного сообщения (request/reply pattern).
|
|
31
|
+
* Реплай-сообщение автоматически добавится в канал и components.messages.
|
|
32
|
+
*/
|
|
33
|
+
extern dec reply(target: Operation, replyType: Model);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Помечает сообщение операции как бинарное.
|
|
37
|
+
* → components.messages.X.contentType: application/octet-stream
|
|
38
|
+
*/
|
|
39
|
+
extern dec binary(target: Operation);
|
|
40
|
+
|
|
41
|
+
/** Override параметров сообщения */
|
|
42
|
+
extern dec message(target: Operation, config: valueof MessageOverride);
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tertiumorganum/typespec-amqp-ws",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "TypeSpec emitter for AsyncAPI 3.0 covering AMQP (RabbitMQ) and WebSocket transports",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22.0.0"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/src/index.js",
|
|
13
|
+
"types": "./dist/src/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./amqp": {
|
|
16
|
+
"import": "./dist/src/amqp/index.js",
|
|
17
|
+
"types": "./dist/src/amqp/index.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./ws": {
|
|
20
|
+
"import": "./dist/src/ws/index.js",
|
|
21
|
+
"types": "./dist/src/ws/index.d.ts"
|
|
22
|
+
},
|
|
23
|
+
"./testing": {
|
|
24
|
+
"import": "./dist/src/testing.js",
|
|
25
|
+
"types": "./dist/src/testing.d.ts"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"tspMain": "./lib/main.tsp",
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -b",
|
|
31
|
+
"watch": "tsc -b --watch",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"test:watch": "vitest",
|
|
34
|
+
"clean": "rm -rf dist coverage *.tsbuildinfo"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@typespec/compiler": "^1.12.0",
|
|
38
|
+
"@typespec/asset-emitter": "^0.79.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"js-yaml": "^4.1.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@typespec/compiler": "^1.12.0",
|
|
45
|
+
"@typespec/asset-emitter": "^0.79.0",
|
|
46
|
+
"@types/js-yaml": "^4.0.9",
|
|
47
|
+
"@types/node": "^20.0.0",
|
|
48
|
+
"typescript": "^5.4.0",
|
|
49
|
+
"vitest": "^1.6.0"
|
|
50
|
+
},
|
|
51
|
+
"files": [
|
|
52
|
+
"dist/src/**",
|
|
53
|
+
"lib/**",
|
|
54
|
+
"README.md",
|
|
55
|
+
"LICENSE"
|
|
56
|
+
]
|
|
57
|
+
}
|