@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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +291 -0
  3. package/dist/src/amqp/builder.d.ts +4 -0
  4. package/dist/src/amqp/builder.d.ts.map +1 -0
  5. package/dist/src/amqp/builder.js +121 -0
  6. package/dist/src/amqp/builder.js.map +1 -0
  7. package/dist/src/amqp/decorators.d.ts +32 -0
  8. package/dist/src/amqp/decorators.d.ts.map +1 -0
  9. package/dist/src/amqp/decorators.js +38 -0
  10. package/dist/src/amqp/decorators.js.map +1 -0
  11. package/dist/src/amqp/index.d.ts +5 -0
  12. package/dist/src/amqp/index.d.ts.map +1 -0
  13. package/dist/src/amqp/index.js +7 -0
  14. package/dist/src/amqp/index.js.map +1 -0
  15. package/dist/src/index.d.ts +3 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +5 -0
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/shared/asyncapi-emitter.d.ts +5 -0
  20. package/dist/src/shared/asyncapi-emitter.d.ts.map +1 -0
  21. package/dist/src/shared/asyncapi-emitter.js +70 -0
  22. package/dist/src/shared/asyncapi-emitter.js.map +1 -0
  23. package/dist/src/shared/decorators-service.d.ts +33 -0
  24. package/dist/src/shared/decorators-service.d.ts.map +1 -0
  25. package/dist/src/shared/decorators-service.js +13 -0
  26. package/dist/src/shared/decorators-service.js.map +1 -0
  27. package/dist/src/shared/document.d.ts +134 -0
  28. package/dist/src/shared/document.d.ts.map +1 -0
  29. package/dist/src/shared/document.js +4 -0
  30. package/dist/src/shared/document.js.map +1 -0
  31. package/dist/src/shared/lib.d.ts +250 -0
  32. package/dist/src/shared/lib.d.ts.map +1 -0
  33. package/dist/src/shared/lib.js +108 -0
  34. package/dist/src/shared/lib.js.map +1 -0
  35. package/dist/src/shared/options.d.ts +8 -0
  36. package/dist/src/shared/options.d.ts.map +1 -0
  37. package/dist/src/shared/options.js +25 -0
  38. package/dist/src/shared/options.js.map +1 -0
  39. package/dist/src/shared/schema-emitter.d.ts +34 -0
  40. package/dist/src/shared/schema-emitter.d.ts.map +1 -0
  41. package/dist/src/shared/schema-emitter.js +351 -0
  42. package/dist/src/shared/schema-emitter.js.map +1 -0
  43. package/dist/src/shared/state.d.ts +13 -0
  44. package/dist/src/shared/state.d.ts.map +1 -0
  45. package/dist/src/shared/state.js +14 -0
  46. package/dist/src/shared/state.js.map +1 -0
  47. package/dist/src/shared/yaml-writer.d.ts +7 -0
  48. package/dist/src/shared/yaml-writer.d.ts.map +1 -0
  49. package/dist/src/shared/yaml-writer.js +8 -0
  50. package/dist/src/shared/yaml-writer.js.map +1 -0
  51. package/dist/src/testing.d.ts +2 -0
  52. package/dist/src/testing.d.ts.map +1 -0
  53. package/dist/src/testing.js +6 -0
  54. package/dist/src/testing.js.map +1 -0
  55. package/dist/src/ws/builder.d.ts +4 -0
  56. package/dist/src/ws/builder.d.ts.map +1 -0
  57. package/dist/src/ws/builder.js +94 -0
  58. package/dist/src/ws/builder.js.map +1 -0
  59. package/dist/src/ws/decorators.d.ts +12 -0
  60. package/dist/src/ws/decorators.d.ts.map +1 -0
  61. package/dist/src/ws/decorators.js +18 -0
  62. package/dist/src/ws/decorators.js.map +1 -0
  63. package/dist/src/ws/index.d.ts +5 -0
  64. package/dist/src/ws/index.d.ts.map +1 -0
  65. package/dist/src/ws/index.js +7 -0
  66. package/dist/src/ws/index.js.map +1 -0
  67. package/lib/amqp.tsp +83 -0
  68. package/lib/main.tsp +65 -0
  69. package/lib/ws.tsp +42 -0
  70. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/ws/builder.ts"],"names":[],"mappings":"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"}
@@ -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,5 @@
1
+ import type { EmitContext } from "@typespec/compiler";
2
+ import { $lib, type EmitterOptions } from "../shared/lib.js";
3
+ export { $lib };
4
+ export declare function $onEmit(context: EmitContext<EmitterOptions>): Promise<void>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ import { $lib } from "../shared/lib.js";
2
+ import { emitAsyncApi } from "../shared/asyncapi-emitter.js";
3
+ export { $lib };
4
+ export async function $onEmit(context) {
5
+ await emitAsyncApi(context, "ws");
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -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
+ }