@toa.io/extensions.exposition 0.22.1 → 0.24.0-alpha.0

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 (306) hide show
  1. package/components/identity.basic/source/authenticate.ts +3 -2
  2. package/components/identity.basic/source/transit.ts +4 -3
  3. package/components/octets.storage/manifest.toa.yaml +26 -0
  4. package/components/octets.storage/operations/delete.js +7 -0
  5. package/components/octets.storage/operations/fetch.js +46 -0
  6. package/components/octets.storage/operations/get.js +7 -0
  7. package/components/octets.storage/operations/list.js +7 -0
  8. package/components/octets.storage/operations/permute.js +7 -0
  9. package/components/octets.storage/operations/store.js +11 -0
  10. package/cucumber.js +0 -1
  11. package/documentation/access.md +2 -3
  12. package/documentation/cache.md +42 -0
  13. package/documentation/octets.md +196 -0
  14. package/documentation/protocol.md +49 -5
  15. package/documentation/tree.md +1 -5
  16. package/features/access.feature +1 -0
  17. package/features/cache.feature +160 -0
  18. package/features/errors.feature +18 -0
  19. package/features/identity.basic.feature +2 -0
  20. package/features/octets.feature +295 -0
  21. package/features/octets.workflows.feature +114 -0
  22. package/features/routes.feature +40 -0
  23. package/features/steps/HTTP.ts +54 -6
  24. package/features/steps/Parameters.ts +5 -2
  25. package/features/steps/Workspace.ts +8 -5
  26. package/features/steps/components/octets.tester/manifest.toa.yaml +15 -0
  27. package/features/steps/components/octets.tester/operations/bar.js +12 -0
  28. package/features/steps/components/octets.tester/operations/baz.js +11 -0
  29. package/features/steps/components/octets.tester/operations/diversify.js +14 -0
  30. package/features/steps/components/octets.tester/operations/err.js +16 -0
  31. package/features/steps/components/octets.tester/operations/foo.js +7 -0
  32. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  33. package/features/steps/components/pots/manifest.toa.yaml +1 -1
  34. package/features/streams.feature +5 -1
  35. package/package.json +16 -9
  36. package/readme.md +8 -5
  37. package/schemas/octets/context.cos.yaml +1 -0
  38. package/schemas/octets/delete.cos.yaml +1 -0
  39. package/schemas/octets/fetch.cos.yaml +3 -0
  40. package/schemas/octets/list.cos.yaml +1 -0
  41. package/schemas/octets/permute.cos.yaml +1 -0
  42. package/schemas/octets/store.cos.yaml +3 -0
  43. package/source/Gateway.ts +9 -4
  44. package/source/HTTP/Server.fixtures.ts +2 -6
  45. package/source/HTTP/Server.test.ts +9 -31
  46. package/source/HTTP/Server.ts +55 -28
  47. package/source/HTTP/exceptions.ts +2 -12
  48. package/source/HTTP/formats/index.ts +7 -4
  49. package/source/HTTP/formats/json.ts +3 -0
  50. package/source/HTTP/formats/msgpack.ts +3 -0
  51. package/source/HTTP/formats/text.ts +3 -0
  52. package/source/HTTP/formats/yaml.ts +3 -0
  53. package/source/HTTP/messages.test.ts +3 -49
  54. package/source/HTTP/messages.ts +60 -35
  55. package/source/RTD/Route.ts +1 -1
  56. package/source/RTD/segment.ts +2 -1
  57. package/source/RTD/syntax/parse.ts +2 -1
  58. package/source/Remotes.ts +8 -0
  59. package/source/Tenant.ts +5 -0
  60. package/source/directives/auth/Family.ts +26 -22
  61. package/source/directives/auth/Rule.ts +1 -1
  62. package/source/directives/cache/Control.ts +59 -0
  63. package/source/directives/cache/Exact.ts +7 -0
  64. package/source/directives/cache/Family.ts +36 -0
  65. package/source/directives/cache/index.ts +3 -0
  66. package/source/directives/cache/types.ts +9 -0
  67. package/source/directives/index.ts +3 -1
  68. package/source/directives/octets/Context.ts +18 -0
  69. package/source/directives/octets/Delete.ts +32 -0
  70. package/source/directives/octets/Family.ts +68 -0
  71. package/source/directives/octets/Fetch.ts +85 -0
  72. package/source/directives/octets/List.ts +32 -0
  73. package/source/directives/octets/Permute.ts +37 -0
  74. package/source/directives/octets/Store.ts +158 -0
  75. package/source/directives/octets/index.ts +3 -0
  76. package/source/directives/octets/schemas.ts +12 -0
  77. package/source/directives/octets/types.ts +13 -0
  78. package/transpiled/Annotation.d.ts +7 -0
  79. package/transpiled/Annotation.js +3 -0
  80. package/transpiled/Annotation.js.map +1 -0
  81. package/transpiled/Branch.d.ts +7 -0
  82. package/transpiled/Branch.js +3 -0
  83. package/transpiled/Branch.js.map +1 -0
  84. package/transpiled/Composition.d.ts +14 -0
  85. package/transpiled/Composition.js +43 -0
  86. package/transpiled/Composition.js.map +1 -0
  87. package/transpiled/Context.d.ts +5 -0
  88. package/transpiled/Context.js +3 -0
  89. package/transpiled/Context.js.map +1 -0
  90. package/transpiled/Directive.d.ts +32 -0
  91. package/transpiled/Directive.js +76 -0
  92. package/transpiled/Directive.js.map +1 -0
  93. package/transpiled/Endpoint.d.ts +20 -0
  94. package/transpiled/Endpoint.js +45 -0
  95. package/transpiled/Endpoint.js.map +1 -0
  96. package/transpiled/Factory.d.ts +10 -0
  97. package/transpiled/Factory.js +66 -0
  98. package/transpiled/Factory.js.map +1 -0
  99. package/transpiled/Gateway.d.ts +19 -0
  100. package/transpiled/Gateway.js +92 -0
  101. package/transpiled/Gateway.js.map +1 -0
  102. package/transpiled/HTTP/Server.d.ts +22 -0
  103. package/transpiled/HTTP/Server.fixtures.d.ts +11 -0
  104. package/transpiled/HTTP/Server.fixtures.js +32 -0
  105. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  106. package/transpiled/HTTP/Server.js +131 -0
  107. package/transpiled/HTTP/Server.js.map +1 -0
  108. package/transpiled/HTTP/exceptions.d.ts +34 -0
  109. package/transpiled/HTTP/exceptions.js +71 -0
  110. package/transpiled/HTTP/exceptions.js.map +1 -0
  111. package/transpiled/HTTP/formats/index.d.ts +10 -0
  112. package/transpiled/HTTP/formats/index.js +38 -0
  113. package/transpiled/HTTP/formats/index.js.map +1 -0
  114. package/transpiled/HTTP/formats/json.d.ts +6 -0
  115. package/transpiled/HTTP/formats/json.js +17 -0
  116. package/transpiled/HTTP/formats/json.js.map +1 -0
  117. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  118. package/transpiled/HTTP/formats/msgpack.js +38 -0
  119. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  120. package/transpiled/HTTP/formats/text.d.ts +6 -0
  121. package/transpiled/HTTP/formats/text.js +15 -0
  122. package/transpiled/HTTP/formats/text.js.map +1 -0
  123. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  124. package/transpiled/HTTP/formats/yaml.js +41 -0
  125. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  126. package/transpiled/HTTP/index.d.ts +3 -0
  127. package/transpiled/HTTP/index.js +20 -0
  128. package/transpiled/HTTP/index.js.map +1 -0
  129. package/transpiled/HTTP/messages.d.ts +28 -0
  130. package/transpiled/HTTP/messages.js +70 -0
  131. package/transpiled/HTTP/messages.js.map +1 -0
  132. package/transpiled/Mapping.d.ts +8 -0
  133. package/transpiled/Mapping.js +38 -0
  134. package/transpiled/Mapping.js.map +1 -0
  135. package/transpiled/Query.d.ts +13 -0
  136. package/transpiled/Query.js +107 -0
  137. package/transpiled/Query.js.map +1 -0
  138. package/transpiled/RTD/Context.d.ts +11 -0
  139. package/transpiled/RTD/Context.js +3 -0
  140. package/transpiled/RTD/Context.js.map +1 -0
  141. package/transpiled/RTD/Directives.d.ts +7 -0
  142. package/transpiled/RTD/Directives.js +3 -0
  143. package/transpiled/RTD/Directives.js.map +1 -0
  144. package/transpiled/RTD/Endpoint.d.ts +9 -0
  145. package/transpiled/RTD/Endpoint.js +3 -0
  146. package/transpiled/RTD/Endpoint.js.map +1 -0
  147. package/transpiled/RTD/Match.d.ts +11 -0
  148. package/transpiled/RTD/Match.js +3 -0
  149. package/transpiled/RTD/Match.js.map +1 -0
  150. package/transpiled/RTD/Method.d.ts +9 -0
  151. package/transpiled/RTD/Method.js +16 -0
  152. package/transpiled/RTD/Method.js.map +1 -0
  153. package/transpiled/RTD/Node.d.ts +21 -0
  154. package/transpiled/RTD/Node.js +61 -0
  155. package/transpiled/RTD/Node.js.map +1 -0
  156. package/transpiled/RTD/Route.d.ts +14 -0
  157. package/transpiled/RTD/Route.js +49 -0
  158. package/transpiled/RTD/Route.js.map +1 -0
  159. package/transpiled/RTD/Tree.d.ts +14 -0
  160. package/transpiled/RTD/Tree.js +40 -0
  161. package/transpiled/RTD/Tree.js.map +1 -0
  162. package/transpiled/RTD/factory.d.ts +6 -0
  163. package/transpiled/RTD/factory.js +36 -0
  164. package/transpiled/RTD/factory.js.map +1 -0
  165. package/transpiled/RTD/index.d.ts +8 -0
  166. package/transpiled/RTD/index.js +38 -0
  167. package/transpiled/RTD/index.js.map +1 -0
  168. package/transpiled/RTD/segment.d.ts +8 -0
  169. package/transpiled/RTD/segment.js +25 -0
  170. package/transpiled/RTD/segment.js.map +1 -0
  171. package/transpiled/RTD/syntax/index.d.ts +2 -0
  172. package/transpiled/RTD/syntax/index.js +19 -0
  173. package/transpiled/RTD/syntax/index.js.map +1 -0
  174. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  175. package/transpiled/RTD/syntax/parse.js +128 -0
  176. package/transpiled/RTD/syntax/parse.js.map +1 -0
  177. package/transpiled/RTD/syntax/types.d.ts +41 -0
  178. package/transpiled/RTD/syntax/types.js +5 -0
  179. package/transpiled/RTD/syntax/types.js.map +1 -0
  180. package/transpiled/Remotes.d.ts +9 -0
  181. package/transpiled/Remotes.js +25 -0
  182. package/transpiled/Remotes.js.map +1 -0
  183. package/transpiled/Tenant.d.ts +13 -0
  184. package/transpiled/Tenant.js +34 -0
  185. package/transpiled/Tenant.js.map +1 -0
  186. package/transpiled/deployment.d.ts +3 -0
  187. package/transpiled/deployment.js +67 -0
  188. package/transpiled/deployment.js.map +1 -0
  189. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  190. package/transpiled/directives/auth/Anonymous.js +17 -0
  191. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  192. package/transpiled/directives/auth/Echo.d.ts +6 -0
  193. package/transpiled/directives/auth/Echo.js +13 -0
  194. package/transpiled/directives/auth/Echo.js.map +1 -0
  195. package/transpiled/directives/auth/Family.d.ts +20 -0
  196. package/transpiled/directives/auth/Family.js +118 -0
  197. package/transpiled/directives/auth/Family.js.map +1 -0
  198. package/transpiled/directives/auth/Id.d.ts +7 -0
  199. package/transpiled/directives/auth/Id.js +17 -0
  200. package/transpiled/directives/auth/Id.js.map +1 -0
  201. package/transpiled/directives/auth/Incept.d.ts +10 -0
  202. package/transpiled/directives/auth/Incept.js +58 -0
  203. package/transpiled/directives/auth/Incept.js.map +1 -0
  204. package/transpiled/directives/auth/Role.d.ts +11 -0
  205. package/transpiled/directives/auth/Role.js +44 -0
  206. package/transpiled/directives/auth/Role.js.map +1 -0
  207. package/transpiled/directives/auth/Rule.d.ts +9 -0
  208. package/transpiled/directives/auth/Rule.js +22 -0
  209. package/transpiled/directives/auth/Rule.js.map +1 -0
  210. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  211. package/transpiled/directives/auth/Scheme.js +47 -0
  212. package/transpiled/directives/auth/Scheme.js.map +1 -0
  213. package/transpiled/directives/auth/index.d.ts +2 -0
  214. package/transpiled/directives/auth/index.js +7 -0
  215. package/transpiled/directives/auth/index.js.map +1 -0
  216. package/transpiled/directives/auth/schemes.d.ts +3 -0
  217. package/transpiled/directives/auth/schemes.js +9 -0
  218. package/transpiled/directives/auth/schemes.js.map +1 -0
  219. package/transpiled/directives/auth/split.d.ts +2 -0
  220. package/transpiled/directives/auth/split.js +38 -0
  221. package/transpiled/directives/auth/split.js.map +1 -0
  222. package/transpiled/directives/auth/types.d.ts +31 -0
  223. package/transpiled/directives/auth/types.js +3 -0
  224. package/transpiled/directives/auth/types.js.map +1 -0
  225. package/transpiled/directives/cache/Control.d.ts +9 -0
  226. package/transpiled/directives/cache/Control.js +42 -0
  227. package/transpiled/directives/cache/Control.js.map +1 -0
  228. package/transpiled/directives/cache/Exact.d.ts +4 -0
  229. package/transpiled/directives/cache/Exact.js +11 -0
  230. package/transpiled/directives/cache/Exact.js.map +1 -0
  231. package/transpiled/directives/cache/Family.d.ts +12 -0
  232. package/transpiled/directives/cache/Family.js +26 -0
  233. package/transpiled/directives/cache/Family.js.map +1 -0
  234. package/transpiled/directives/cache/index.d.ts +2 -0
  235. package/transpiled/directives/cache/index.js +7 -0
  236. package/transpiled/directives/cache/index.js.map +1 -0
  237. package/transpiled/directives/cache/types.d.ts +7 -0
  238. package/transpiled/directives/cache/types.js +3 -0
  239. package/transpiled/directives/cache/types.js.map +1 -0
  240. package/transpiled/directives/dev/Family.d.ts +10 -0
  241. package/transpiled/directives/dev/Family.js +27 -0
  242. package/transpiled/directives/dev/Family.js.map +1 -0
  243. package/transpiled/directives/dev/Stub.d.ts +7 -0
  244. package/transpiled/directives/dev/Stub.js +14 -0
  245. package/transpiled/directives/dev/Stub.js.map +1 -0
  246. package/transpiled/directives/dev/Throw.d.ts +7 -0
  247. package/transpiled/directives/dev/Throw.js +14 -0
  248. package/transpiled/directives/dev/Throw.js.map +1 -0
  249. package/transpiled/directives/dev/index.d.ts +2 -0
  250. package/transpiled/directives/dev/index.js +7 -0
  251. package/transpiled/directives/dev/index.js.map +1 -0
  252. package/transpiled/directives/dev/types.d.ts +4 -0
  253. package/transpiled/directives/dev/types.js +3 -0
  254. package/transpiled/directives/dev/types.js.map +1 -0
  255. package/transpiled/directives/index.d.ts +2 -0
  256. package/transpiled/directives/index.js +12 -0
  257. package/transpiled/directives/index.js.map +1 -0
  258. package/transpiled/directives/octets/Context.d.ts +8 -0
  259. package/transpiled/directives/octets/Context.js +40 -0
  260. package/transpiled/directives/octets/Context.js.map +1 -0
  261. package/transpiled/directives/octets/Delete.d.ts +10 -0
  262. package/transpiled/directives/octets/Delete.js +47 -0
  263. package/transpiled/directives/octets/Delete.js.map +1 -0
  264. package/transpiled/directives/octets/Family.d.ts +12 -0
  265. package/transpiled/directives/octets/Family.js +49 -0
  266. package/transpiled/directives/octets/Family.js.map +1 -0
  267. package/transpiled/directives/octets/Fetch.d.ts +18 -0
  268. package/transpiled/directives/octets/Fetch.js +77 -0
  269. package/transpiled/directives/octets/Fetch.js.map +1 -0
  270. package/transpiled/directives/octets/List.d.ts +10 -0
  271. package/transpiled/directives/octets/List.js +47 -0
  272. package/transpiled/directives/octets/List.js.map +1 -0
  273. package/transpiled/directives/octets/Permute.d.ts +10 -0
  274. package/transpiled/directives/octets/Permute.js +51 -0
  275. package/transpiled/directives/octets/Permute.js.map +1 -0
  276. package/transpiled/directives/octets/Store.d.ts +33 -0
  277. package/transpiled/directives/octets/Store.js +124 -0
  278. package/transpiled/directives/octets/Store.js.map +1 -0
  279. package/transpiled/directives/octets/index.d.ts +2 -0
  280. package/transpiled/directives/octets/index.js +7 -0
  281. package/transpiled/directives/octets/index.js.map +1 -0
  282. package/transpiled/directives/octets/schemas.d.ts +6 -0
  283. package/transpiled/directives/octets/schemas.js +17 -0
  284. package/transpiled/directives/octets/schemas.js.map +1 -0
  285. package/transpiled/directives/octets/types.d.ts +9 -0
  286. package/transpiled/directives/octets/types.js +3 -0
  287. package/transpiled/directives/octets/types.js.map +1 -0
  288. package/transpiled/discovery.d.ts +1 -0
  289. package/transpiled/discovery.js +3 -0
  290. package/transpiled/discovery.js.map +1 -0
  291. package/transpiled/exceptions.d.ts +2 -0
  292. package/transpiled/exceptions.js +39 -0
  293. package/transpiled/exceptions.js.map +1 -0
  294. package/transpiled/index.d.ts +5 -0
  295. package/transpiled/index.js +12 -0
  296. package/transpiled/index.js.map +1 -0
  297. package/transpiled/manifest.d.ts +3 -0
  298. package/transpiled/manifest.js +61 -0
  299. package/transpiled/manifest.js.map +1 -0
  300. package/transpiled/root.d.ts +2 -0
  301. package/transpiled/root.js +39 -0
  302. package/transpiled/root.js.map +1 -0
  303. package/transpiled/schemas.d.ts +3 -0
  304. package/transpiled/schemas.js +14 -0
  305. package/transpiled/schemas.js.map +1 -0
  306. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Gateway = void 0;
27
+ const core_1 = require("@toa.io/core");
28
+ const http = __importStar(require("./HTTP"));
29
+ const exceptions_1 = require("./exceptions");
30
+ class Gateway extends core_1.Connector {
31
+ broadcast;
32
+ tree;
33
+ constructor(broadcast, server, tree) {
34
+ super();
35
+ this.broadcast = broadcast;
36
+ this.tree = tree;
37
+ this.depends(broadcast);
38
+ this.depends(server);
39
+ server.attach(this.process.bind(this));
40
+ }
41
+ async open() {
42
+ await this.discover();
43
+ console.info('Gateway has started and is awaiting resource branches.');
44
+ }
45
+ dispose() {
46
+ console.info('Gateway is closed.');
47
+ }
48
+ async process(request) {
49
+ const match = this.tree.match(request.path);
50
+ if (match === null)
51
+ throw new http.NotFound();
52
+ const { node, parameters } = match;
53
+ if (!(request.method in node.methods))
54
+ throw new http.MethodNotAllowed();
55
+ const method = node.methods[request.method];
56
+ const interruption = await method.directives.preflight(request, parameters);
57
+ const response = interruption ?? await this.call(method, request, parameters);
58
+ await method.directives.settle(request, response);
59
+ return response;
60
+ }
61
+ async call(method, request, parameters) {
62
+ if (request.path[request.path.length - 1] !== '/')
63
+ throw new http.NotFound('Trailing slash is required.');
64
+ if (request.encoder === null)
65
+ throw new http.NotAcceptable();
66
+ if (method.endpoint === null)
67
+ throw new http.MethodNotAllowed();
68
+ const body = await request.parse();
69
+ const reply = await method.endpoint
70
+ .call(body, request.query, parameters)
71
+ .catch(exceptions_1.rethrow);
72
+ if (reply instanceof Error)
73
+ throw new http.Conflict(reply);
74
+ return { body: reply };
75
+ }
76
+ async discover() {
77
+ await this.broadcast.receive('expose', this.merge.bind(this));
78
+ await this.broadcast.transmit('ping', null);
79
+ }
80
+ merge(branch) {
81
+ try {
82
+ this.tree.merge(branch.node, branch);
83
+ console.info('Resource branch of ' +
84
+ `'${branch.namespace}.${branch.component}' has been merged.`);
85
+ }
86
+ catch (exception) {
87
+ console.error(exception);
88
+ }
89
+ }
90
+ }
91
+ exports.Gateway = Gateway;
92
+ //# sourceMappingURL=Gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gateway.js","sourceRoot":"","sources":["../source/Gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuD;AAEvD,6CAA8B;AAC9B,6CAAsC;AAOtC,MAAa,OAAQ,SAAQ,gBAAS;IACnB,SAAS,CAAW;IACpB,IAAI,CAA4B;IAEjD,YAAoB,SAAoB,EAAE,MAAmB,EAAE,IAAgC;QAC7F,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACxC,CAAC;IAEkB,KAAK,CAAC,IAAI;QAC3B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAErB,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACxE,CAAC;IAEkB,OAAO;QACxB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACpC,CAAC;IAEO,KAAK,CAAC,OAAO,CAAE,OAA6B;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAE3C,IAAI,KAAK,KAAK,IAAI;YAChB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAA;QAE3B,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;QAElC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;YACnC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC3E,MAAM,QAAQ,GAAG,YAAY,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;QAE7E,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAEjD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,IAAI,CACjB,MAAoC,EAAE,OAA6B,EAAE,UAAuB;QAE3F,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;YAC/C,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAA;QAExD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;YAC1B,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAA;QAEhC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;YAC1B,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEnC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QAElC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ;aAChC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;aACrC,KAAK,CAAC,oBAAO,CAAmB,CAAA;QAEnC,IAAI,KAAK,YAAY,KAAK;YACxB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEhC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACxB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAS,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACrE,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAO,MAAM,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC;IAEO,KAAK,CAAE,MAAc;QAC3B,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAEpC,OAAO,CAAC,IAAI,CAAC,qBAAqB;gBAChC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,oBAAoB,CAAC,CAAA;SAChE;QAAC,OAAO,SAAS,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;SACzB;IACH,CAAC;CACF;AArFD,0BAqFC"}
@@ -0,0 +1,22 @@
1
+ import { Connector } from '@toa.io/core';
2
+ import { type IncomingMessage, type OutgoingMessage } from './messages';
3
+ export declare class Server extends Connector {
4
+ private readonly debug;
5
+ private readonly app;
6
+ private server?;
7
+ private constructor();
8
+ static create(options?: Partial<Properties>): Server;
9
+ attach(process: Processing): void;
10
+ protected open(): Promise<void>;
11
+ protected close(): Promise<void>;
12
+ protected dispose(): void;
13
+ private extend;
14
+ private success;
15
+ private fail;
16
+ }
17
+ interface Properties {
18
+ methods: Set<string>;
19
+ debug: boolean;
20
+ }
21
+ export type Processing = (input: IncomingMessage) => Promise<OutgoingMessage>;
22
+ export {};
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="jest" />
3
+ import { Buffer } from 'buffer';
4
+ import type { IncomingMessage } from './messages';
5
+ import type { NextFunction, Response, Express, Request } from 'express';
6
+ import type { CorsOptions } from 'cors';
7
+ export declare function createRequest(req?: Partial<Request>, content?: string | Buffer): jest.MockedObject<IncomingMessage>;
8
+ export declare const res: jest.MockedObject<Response<any, Record<string, any>>>;
9
+ export declare const next: NextFunction;
10
+ export declare const express: jest.Mock<jest.Mock<Express, any, any>, [], any>;
11
+ export declare const cors: jest.Mock<() => undefined, [_: CorsOptions], any>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cors = exports.express = exports.next = exports.res = exports.createRequest = void 0;
4
+ const buffer_1 = require("buffer");
5
+ const stream_1 = require("stream");
6
+ const server = {
7
+ close: jest.fn()
8
+ };
9
+ const app = {
10
+ enable: jest.fn(),
11
+ disable: jest.fn(),
12
+ use: jest.fn(),
13
+ listen: jest.fn(() => server)
14
+ };
15
+ function createRequest(req = {}, content = '') {
16
+ const buffer = buffer_1.Buffer.isBuffer(content) ? content : buffer_1.Buffer.from(content);
17
+ const stream = stream_1.Readable.from(buffer);
18
+ Object.assign(stream, { headers: {} }, req);
19
+ return stream;
20
+ }
21
+ exports.createRequest = createRequest;
22
+ exports.res = {
23
+ status: jest.fn(() => exports.res),
24
+ sendStatus: jest.fn(() => exports.res),
25
+ set: jest.fn(() => exports.res),
26
+ send: jest.fn(() => exports.res),
27
+ end: jest.fn(() => exports.res)
28
+ };
29
+ exports.next = jest.fn();
30
+ exports.express = jest.fn(() => app);
31
+ exports.cors = jest.fn((_) => () => undefined);
32
+ //# sourceMappingURL=Server.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.fixtures.js","sourceRoot":"","sources":["../../source/HTTP/Server.fixtures.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,mCAAiC;AAMjC,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;CACoB,CAAA;AAEtC,MAAM,GAAG,GAAG;IACV,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;IAClB,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IACd,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;CACG,CAAA;AAElC,SAAgB,aAAa,CAAE,MAAwB,EAAE,EAAE,UAA2B,EAAE;IAEtF,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxE,MAAM,MAAM,GAAG,iBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAEpC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAE3C,OAAO,MAAuD,CAAA;AAChE,CAAC;AARD,sCAQC;AAEY,QAAA,GAAG,GAAG;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAG,CAAC;IAC1B,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAG,CAAC;IAC9B,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAG,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAG,CAAC;IACxB,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAG,CAAC;CACkB,CAAA;AAE9B,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE,EAA6B,CAAA;AAE3C,QAAA,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAE5B,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Server = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const express_1 = __importDefault(require("express"));
10
+ const cors_1 = __importDefault(require("cors"));
11
+ const core_1 = require("@toa.io/core");
12
+ const generic_1 = require("@toa.io/generic");
13
+ const negotiator_1 = __importDefault(require("negotiator"));
14
+ const messages_1 = require("./messages");
15
+ const exceptions_1 = require("./exceptions");
16
+ const formats_1 = require("./formats");
17
+ class Server extends core_1.Connector {
18
+ debug;
19
+ app;
20
+ server;
21
+ constructor(app, debug) {
22
+ super();
23
+ this.app = app;
24
+ this.debug = debug;
25
+ }
26
+ static create(options) {
27
+ const properties = options === undefined
28
+ ? DEFAULTS
29
+ : { ...DEFAULTS, ...options };
30
+ const app = (0, express_1.default)();
31
+ app.disable('x-powered-by');
32
+ app.use((0, cors_1.default)({ allowedHeaders: ['content-type'] }));
33
+ app.use(supportedMethods(properties.methods));
34
+ return new Server(app, properties.debug);
35
+ }
36
+ attach(process) {
37
+ this.app.use((request, response) => {
38
+ this.extend(request)
39
+ .then(process)
40
+ .then(this.success(request, response))
41
+ .catch(this.fail(request, response));
42
+ });
43
+ }
44
+ async open() {
45
+ const listening = (0, generic_1.promex)();
46
+ this.server = this.app.listen(8000, listening.callback);
47
+ await listening;
48
+ console.info('HTTP Server is listening.');
49
+ }
50
+ async close() {
51
+ const stopped = (0, generic_1.promex)();
52
+ this.server?.close(stopped.callback);
53
+ await stopped;
54
+ }
55
+ dispose() {
56
+ console.info('HTTP Server has been stopped.');
57
+ }
58
+ async extend(request) {
59
+ const message = request;
60
+ message.encoder = negotiate(request);
61
+ message.parse = async () => await (0, messages_1.read)(request);
62
+ return message;
63
+ }
64
+ success(request, response) {
65
+ return (message) => {
66
+ let status = message.status;
67
+ if (status === undefined)
68
+ if (message.body === null)
69
+ status = 404;
70
+ else if (request.method === 'POST')
71
+ status = 201;
72
+ else if (message.body === undefined)
73
+ status = 204;
74
+ else
75
+ status = 200;
76
+ response.status(status);
77
+ message.headers?.forEach((value, key) => response.set(key, value));
78
+ if (message.body !== undefined && message.body !== null)
79
+ (0, messages_1.write)(request, response, message);
80
+ else
81
+ response.end();
82
+ };
83
+ }
84
+ fail(request, response) {
85
+ return async (exception) => {
86
+ if (!request.complete)
87
+ await adam(request);
88
+ const status = exception instanceof exceptions_1.Exception
89
+ ? exception.status
90
+ : 500;
91
+ response.status(status);
92
+ const outputAllowed = exception instanceof exceptions_1.ClientError || this.debug;
93
+ if (outputAllowed) {
94
+ const body = exception instanceof exceptions_1.Exception
95
+ ? exception.body
96
+ : (exception.stack ?? exception.message);
97
+ (0, messages_1.write)(request, response, { body });
98
+ }
99
+ else
100
+ response.end();
101
+ };
102
+ }
103
+ }
104
+ exports.Server = Server;
105
+ function supportedMethods(methods) {
106
+ return (req, res, next) => {
107
+ if (methods.has(req.method))
108
+ next();
109
+ else
110
+ res.sendStatus(501);
111
+ };
112
+ }
113
+ function negotiate(request) {
114
+ const negotiator = new negotiator_1.default(request);
115
+ const mediaType = negotiator.mediaType(formats_1.types);
116
+ return mediaType === undefined ? null : formats_1.formats[mediaType];
117
+ }
118
+ // https://github.com/whatwg/fetch/issues/1254
119
+ async function adam(request) {
120
+ const completed = (0, generic_1.promex)();
121
+ const devnull = node_fs_1.default.createWriteStream(node_os_1.default.devNull);
122
+ request
123
+ .on('end', completed.callback)
124
+ .pipe(devnull);
125
+ return await completed;
126
+ }
127
+ const DEFAULTS = {
128
+ methods: new Set(['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']),
129
+ debug: false
130
+ };
131
+ //# sourceMappingURL=Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export declare class Exception extends Error {
2
+ readonly status: number;
3
+ readonly body?: any;
4
+ protected constructor(status: number, body?: any);
5
+ }
6
+ export declare class ClientError extends Exception {
7
+ }
8
+ export declare class BadRequest extends ClientError {
9
+ constructor(body?: any);
10
+ }
11
+ export declare class Unauthorized extends ClientError {
12
+ constructor(body?: any);
13
+ }
14
+ export declare class Forbidden extends ClientError {
15
+ constructor(body?: any);
16
+ }
17
+ export declare class NotFound extends ClientError {
18
+ constructor(body?: any);
19
+ }
20
+ export declare class Conflict extends ClientError {
21
+ constructor(body: any);
22
+ }
23
+ export declare class MethodNotAllowed extends ClientError {
24
+ constructor();
25
+ }
26
+ export declare class NotAcceptable extends ClientError {
27
+ constructor();
28
+ }
29
+ export declare class UnsupportedMediaType extends ClientError {
30
+ constructor();
31
+ }
32
+ export declare class PreconditionFailed extends ClientError {
33
+ constructor();
34
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PreconditionFailed = exports.UnsupportedMediaType = exports.NotAcceptable = exports.MethodNotAllowed = exports.Conflict = exports.NotFound = exports.Forbidden = exports.Unauthorized = exports.BadRequest = exports.ClientError = exports.Exception = void 0;
4
+ class Exception extends Error {
5
+ status;
6
+ body;
7
+ constructor(status, body) {
8
+ super();
9
+ this.status = status;
10
+ this.body = body;
11
+ }
12
+ }
13
+ exports.Exception = Exception;
14
+ class ClientError extends Exception {
15
+ }
16
+ exports.ClientError = ClientError;
17
+ class BadRequest extends ClientError {
18
+ constructor(body) {
19
+ super(400, body);
20
+ }
21
+ }
22
+ exports.BadRequest = BadRequest;
23
+ class Unauthorized extends ClientError {
24
+ constructor(body) {
25
+ super(401, body);
26
+ }
27
+ }
28
+ exports.Unauthorized = Unauthorized;
29
+ class Forbidden extends ClientError {
30
+ constructor(body) {
31
+ super(403, body);
32
+ }
33
+ }
34
+ exports.Forbidden = Forbidden;
35
+ class NotFound extends ClientError {
36
+ constructor(body) {
37
+ super(404, body);
38
+ }
39
+ }
40
+ exports.NotFound = NotFound;
41
+ class Conflict extends ClientError {
42
+ constructor(body) {
43
+ super(409, body);
44
+ }
45
+ }
46
+ exports.Conflict = Conflict;
47
+ class MethodNotAllowed extends ClientError {
48
+ constructor() {
49
+ super(405);
50
+ }
51
+ }
52
+ exports.MethodNotAllowed = MethodNotAllowed;
53
+ class NotAcceptable extends ClientError {
54
+ constructor() {
55
+ super(406);
56
+ }
57
+ }
58
+ exports.NotAcceptable = NotAcceptable;
59
+ class UnsupportedMediaType extends ClientError {
60
+ constructor() {
61
+ super(415);
62
+ }
63
+ }
64
+ exports.UnsupportedMediaType = UnsupportedMediaType;
65
+ class PreconditionFailed extends ClientError {
66
+ constructor() {
67
+ super(412);
68
+ }
69
+ }
70
+ exports.PreconditionFailed = PreconditionFailed;
71
+ //# sourceMappingURL=exceptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../source/HTTP/exceptions.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAU,SAAQ,KAAK;IAClB,MAAM,CAAQ;IACd,IAAI,CAAM;IAE1B,YAAuB,MAAc,EAAE,IAAU;QAC/C,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AATD,8BASC;AAED,MAAa,WAAY,SAAQ,SAAS;CACzC;AADD,kCACC;AAED,MAAa,UAAW,SAAQ,WAAW;IACzC,YAAoB,IAAU;QAC5B,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClB,CAAC;CACF;AAJD,gCAIC;AAED,MAAa,YAAa,SAAQ,WAAW;IAC3C,YAAoB,IAAU;QAC5B,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClB,CAAC;CACF;AAJD,oCAIC;AAED,MAAa,SAAU,SAAQ,WAAW;IACxC,YAAoB,IAAU;QAC5B,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClB,CAAC;CACF;AAJD,8BAIC;AAED,MAAa,QAAS,SAAQ,WAAW;IACvC,YAAoB,IAAU;QAC5B,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClB,CAAC;CACF;AAJD,4BAIC;AAED,MAAa,QAAS,SAAQ,WAAW;IACvC,YAAoB,IAAS;QAC3B,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClB,CAAC;CACF;AAJD,4BAIC;AAED,MAAa,gBAAiB,SAAQ,WAAW;IAC/C;QACE,KAAK,CAAC,GAAG,CAAC,CAAA;IACZ,CAAC;CACF;AAJD,4CAIC;AAED,MAAa,aAAc,SAAQ,WAAW;IAC5C;QACE,KAAK,CAAC,GAAG,CAAC,CAAA;IACZ,CAAC;CACF;AAJD,sCAIC;AAED,MAAa,oBAAqB,SAAQ,WAAW;IACnD;QACE,KAAK,CAAC,GAAG,CAAC,CAAA;IACZ,CAAC;CACF;AAJD,oDAIC;AAED,MAAa,kBAAmB,SAAQ,WAAW;IACjD;QACE,KAAK,CAAC,GAAG,CAAC,CAAA;IACZ,CAAC;CACF;AAJD,gDAIC"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="node" />
2
+ import { type Buffer } from 'node:buffer';
3
+ export declare const formats: Record<string, Format>;
4
+ export declare const types: string[];
5
+ export interface Format {
6
+ readonly type: string;
7
+ readonly multipart: string;
8
+ encode: (value: any) => Buffer;
9
+ decode: (buffer: Buffer) => any;
10
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.types = exports.formats = void 0;
27
+ const json = __importStar(require("./json"));
28
+ const yaml = __importStar(require("./yaml"));
29
+ const msgpack = __importStar(require("./msgpack"));
30
+ const text = __importStar(require("./text"));
31
+ exports.formats = {
32
+ [msgpack.type]: msgpack,
33
+ [yaml.type]: yaml,
34
+ [json.type]: json,
35
+ [text.type]: text
36
+ };
37
+ exports.types = Object.keys(exports.formats);
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/HTTP/formats/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAA8B;AAC9B,6CAA8B;AAC9B,mDAAoC;AACpC,6CAA8B;AAEjB,QAAA,OAAO,GAA2B;IAC7C,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO;IACvB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI;IACjB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI;IACjB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI;CAClB,CAAA;AAEY,QAAA,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAO,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { Buffer } from 'node:buffer';
3
+ export declare const type = "application/json";
4
+ export declare const multipart = "multipart/json";
5
+ export declare function decode(buffer: Buffer): any;
6
+ export declare function encode(value: any): Buffer;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encode = exports.decode = exports.multipart = exports.type = void 0;
4
+ const node_buffer_1 = require("node:buffer");
5
+ exports.type = 'application/json';
6
+ exports.multipart = 'multipart/json';
7
+ function decode(buffer) {
8
+ const text = buffer.toString();
9
+ return JSON.parse(text);
10
+ }
11
+ exports.decode = decode;
12
+ function encode(value) {
13
+ const text = JSON.stringify(value);
14
+ return node_buffer_1.Buffer.from(text);
15
+ }
16
+ exports.encode = encode;
17
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../source/HTTP/formats/json.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AAEvB,QAAA,IAAI,GAAG,kBAAkB,CAAA;AACzB,QAAA,SAAS,GAAG,gBAAgB,CAAA;AAEzC,SAAgB,MAAM,CAAE,MAAc;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAE9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAJD,wBAIC;AAED,SAAgB,MAAM,CAAE,KAAU;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAElC,OAAO,oBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAJD,wBAIC"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { type Buffer } from 'node:buffer';
3
+ export declare const type = "application/msgpack";
4
+ export declare const multipart = "multipart/msgpack";
5
+ export declare function decode(buffer: Buffer): any;
6
+ export declare function encode(value: any): Buffer;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.encode = exports.decode = exports.multipart = exports.type = void 0;
27
+ const msgpack = __importStar(require("msgpackr"));
28
+ exports.type = 'application/msgpack';
29
+ exports.multipart = 'multipart/msgpack';
30
+ function decode(buffer) {
31
+ return msgpack.decode(buffer);
32
+ }
33
+ exports.decode = decode;
34
+ function encode(value) {
35
+ return msgpack.encode(value);
36
+ }
37
+ exports.encode = encode;
38
+ //# sourceMappingURL=msgpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msgpack.js","sourceRoot":"","sources":["../../../source/HTTP/formats/msgpack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAmC;AAEtB,QAAA,IAAI,GAAG,qBAAqB,CAAA;AAC5B,QAAA,SAAS,GAAG,mBAAmB,CAAA;AAE5C,SAAgB,MAAM,CAAE,MAAc;IACpC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAFD,wBAEC;AAED,SAAgB,MAAM,CAAE,KAAU;IAChC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAFD,wBAEC"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { Buffer } from 'node:buffer';
3
+ export declare const type = "text/plain";
4
+ export declare const multipart = "multipart/text";
5
+ export declare function decode(buffer: Buffer): any;
6
+ export declare function encode(value: any): Buffer;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encode = exports.decode = exports.multipart = exports.type = void 0;
4
+ const node_buffer_1 = require("node:buffer");
5
+ exports.type = 'text/plain';
6
+ exports.multipart = 'multipart/text';
7
+ function decode(buffer) {
8
+ return buffer.toString();
9
+ }
10
+ exports.decode = decode;
11
+ function encode(value) {
12
+ return node_buffer_1.Buffer.from(value.toString());
13
+ }
14
+ exports.encode = encode;
15
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../source/HTTP/formats/text.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AAEvB,QAAA,IAAI,GAAG,YAAY,CAAA;AACnB,QAAA,SAAS,GAAG,gBAAgB,CAAA;AAEzC,SAAgB,MAAM,CAAE,MAAc;IACpC,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAA;AAC1B,CAAC;AAFD,wBAEC;AAED,SAAgB,MAAM,CAAE,KAAU;IAChC,OAAO,oBAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;AACtC,CAAC;AAFD,wBAEC"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { Buffer } from 'node:buffer';
3
+ export declare const type = "application/yaml";
4
+ export declare const multipart = "multipart/yaml";
5
+ export declare function decode(buffer: Buffer): any;
6
+ export declare function encode(value: any): Buffer;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.encode = exports.decode = exports.multipart = exports.type = void 0;
27
+ const node_buffer_1 = require("node:buffer");
28
+ const yaml = __importStar(require("js-yaml"));
29
+ exports.type = 'application/yaml';
30
+ exports.multipart = 'multipart/yaml';
31
+ function decode(buffer) {
32
+ const text = buffer.toString();
33
+ return yaml.load(text);
34
+ }
35
+ exports.decode = decode;
36
+ function encode(value) {
37
+ const text = yaml.dump(value);
38
+ return node_buffer_1.Buffer.from(text);
39
+ }
40
+ exports.encode = encode;
41
+ //# sourceMappingURL=yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../../source/HTTP/formats/yaml.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAoC;AACpC,8CAA+B;AAElB,QAAA,IAAI,GAAG,kBAAkB,CAAA;AACzB,QAAA,SAAS,GAAG,gBAAgB,CAAA;AAEzC,SAAgB,MAAM,CAAE,MAAc;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAE9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAJD,wBAIC;AAED,SAAgB,MAAM,CAAE,KAAU;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAE7B,OAAO,oBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAJD,wBAIC"}
@@ -0,0 +1,3 @@
1
+ export * from './Server';
2
+ export * from './messages';
3
+ export * from './exceptions';