@toa.io/extensions.exposition 1.0.0-alpha.0 → 1.0.0-alpha.11

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 (547) hide show
  1. package/components/context.toa.yaml +12 -0
  2. package/components/identity.bans/manifest.toa.yaml +2 -1
  3. package/components/identity.basic/manifest.toa.yaml +6 -2
  4. package/components/identity.basic/operations/authenticate.d.ts +9 -0
  5. package/components/identity.basic/operations/authenticate.js +24 -0
  6. package/components/identity.basic/operations/authenticate.js.map +1 -0
  7. package/components/identity.basic/operations/create.d.ts +10 -0
  8. package/components/identity.basic/operations/create.js +10 -0
  9. package/components/identity.basic/operations/create.js.map +1 -0
  10. package/components/identity.basic/operations/transit.d.ts +12 -0
  11. package/components/identity.basic/operations/transit.js +53 -0
  12. package/components/identity.basic/operations/transit.js.map +1 -0
  13. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -0
  14. package/components/identity.basic/operations/types.d.ts +38 -0
  15. package/components/identity.basic/operations/types.js +3 -0
  16. package/components/identity.basic/operations/types.js.map +1 -0
  17. package/components/identity.basic/source/authenticate.ts +0 -1
  18. package/components/identity.federation/events/principal.js +22 -0
  19. package/components/identity.federation/manifest.toa.yaml +94 -0
  20. package/components/identity.federation/operations/authenticate.d.ts +3 -0
  21. package/components/identity.federation/operations/authenticate.js +20 -0
  22. package/components/identity.federation/operations/authenticate.js.map +1 -0
  23. package/components/identity.federation/operations/create.d.ts +10 -0
  24. package/components/identity.federation/operations/create.js +15 -0
  25. package/components/identity.federation/operations/create.js.map +1 -0
  26. package/components/identity.federation/operations/lib/assertions-as-values.d.ts +4 -0
  27. package/components/identity.federation/operations/lib/assertions-as-values.js +45 -0
  28. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
  29. package/components/identity.federation/operations/lib/jwt.d.ts +20 -0
  30. package/components/identity.federation/operations/lib/jwt.js +136 -0
  31. package/components/identity.federation/operations/lib/jwt.js.map +1 -0
  32. package/components/identity.federation/operations/schemas.d.ts +59 -0
  33. package/components/identity.federation/operations/schemas.js +9 -0
  34. package/components/identity.federation/operations/schemas.js.map +1 -0
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -0
  36. package/components/identity.federation/operations/types.d.ts +51 -0
  37. package/components/identity.federation/operations/types.js +3 -0
  38. package/components/identity.federation/operations/types.js.map +1 -0
  39. package/components/identity.federation/source/authenticate.ts +28 -0
  40. package/components/identity.federation/source/create.ts +26 -0
  41. package/components/identity.federation/source/lib/assertions-as-values.ts +19 -0
  42. package/components/identity.federation/source/lib/jwt.test.ts +56 -0
  43. package/components/identity.federation/source/lib/jwt.ts +171 -0
  44. package/components/identity.federation/source/schemas.ts +61 -0
  45. package/components/identity.federation/source/types.ts +56 -0
  46. package/components/identity.federation/tsconfig.json +9 -0
  47. package/components/identity.roles/manifest.toa.yaml +18 -5
  48. package/components/identity.roles/operations/grant.d.ts +10 -0
  49. package/components/identity.roles/operations/grant.js +20 -0
  50. package/components/identity.roles/operations/grant.js.map +1 -0
  51. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  52. package/components/identity.roles/operations/lib/Entity.js +3 -0
  53. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  54. package/components/identity.roles/operations/list.d.ts +2 -0
  55. package/components/identity.roles/operations/list.js +8 -0
  56. package/components/identity.roles/operations/list.js.map +1 -0
  57. package/components/identity.roles/operations/principal.d.ts +13 -0
  58. package/components/identity.roles/operations/principal.js +13 -0
  59. package/components/identity.roles/operations/principal.js.map +1 -0
  60. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
  61. package/components/identity.roles/source/grant.ts +31 -0
  62. package/components/identity.roles/source/lib/Entity.ts +5 -0
  63. package/components/identity.roles/source/list.ts +2 -4
  64. package/components/identity.roles/source/principal.ts +10 -8
  65. package/components/identity.tokens/manifest.toa.yaml +1 -1
  66. package/components/identity.tokens/operations/authenticate.d.ts +9 -0
  67. package/components/identity.tokens/operations/authenticate.js +32 -0
  68. package/components/identity.tokens/operations/authenticate.js.map +1 -0
  69. package/components/identity.tokens/operations/decrypt.d.ts +3 -0
  70. package/components/identity.tokens/operations/decrypt.js +32 -0
  71. package/components/identity.tokens/operations/decrypt.js.map +1 -0
  72. package/components/identity.tokens/operations/encrypt.d.ts +8 -0
  73. package/components/identity.tokens/operations/encrypt.js +22 -0
  74. package/components/identity.tokens/operations/encrypt.js.map +1 -0
  75. package/components/identity.tokens/operations/revoke.d.ts +2 -0
  76. package/components/identity.tokens/operations/revoke.js +8 -0
  77. package/components/identity.tokens/operations/revoke.js.map +1 -0
  78. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
  79. package/components/identity.tokens/operations/types.d.ts +40 -0
  80. package/components/identity.tokens/operations/types.js +3 -0
  81. package/components/identity.tokens/operations/types.js.map +1 -0
  82. package/components/octets.storage/manifest.toa.yaml +1 -0
  83. package/components/octets.storage/operations/store.js +3 -3
  84. package/cucumber.js +0 -1
  85. package/documentation/access.md +11 -11
  86. package/documentation/components.md +49 -13
  87. package/documentation/identity.md +14 -7
  88. package/documentation/io.md +56 -0
  89. package/documentation/octets.md +105 -40
  90. package/documentation/protocol.md +21 -1
  91. package/documentation/query.md +51 -6
  92. package/documentation/tree.md +22 -4
  93. package/documentation/vary.md +69 -0
  94. package/features/access.feature +13 -2
  95. package/features/annotation.feature +1 -0
  96. package/features/body.feature +3 -1
  97. package/features/cache.feature +3 -0
  98. package/features/cors.feature +72 -0
  99. package/features/directives.feature +2 -0
  100. package/features/dynamic.feature +14 -7
  101. package/features/errors.feature +4 -3
  102. package/features/etag.feature +97 -0
  103. package/features/identity.basic.feature +68 -0
  104. package/features/identity.feature +19 -3
  105. package/features/identity.federation.feature +197 -0
  106. package/features/identity.roles.feature +151 -0
  107. package/features/identity.tokens.feature +3 -0
  108. package/features/io.feature +167 -0
  109. package/features/octets.entries.feature +123 -0
  110. package/features/octets.feature +4 -28
  111. package/features/octets.meta.feature +66 -0
  112. package/features/octets.workflows.feature +177 -4
  113. package/features/queries.feature +9 -1
  114. package/features/response.feature +68 -0
  115. package/features/routes.feature +54 -10
  116. package/features/steps/Captures.ts +6 -0
  117. package/features/steps/Components.ts +18 -6
  118. package/features/steps/Database.ts +1 -1
  119. package/features/steps/Gateway.ts +4 -2
  120. package/features/steps/HTTP.ts +40 -87
  121. package/features/steps/IdP.ts +149 -0
  122. package/features/steps/Parameters.ts +8 -2
  123. package/features/steps/Workspace.ts +5 -7
  124. package/features/steps/components/echo/manifest.toa.yaml +1 -0
  125. package/features/steps/components/echo/operations/error.js +11 -0
  126. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  127. package/features/steps/components/octets.tester/manifest.toa.yaml +4 -0
  128. package/features/steps/components/octets.tester/operations/concat.js +7 -0
  129. package/features/steps/components/octets.tester/operations/echo.js +7 -0
  130. package/features/steps/components/pots/manifest.toa.yaml +12 -3
  131. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  132. package/features/steps/components/users/manifest.toa.yaml +4 -0
  133. package/features/steps/components/users.properties/manifest.toa.yaml +14 -0
  134. package/features/steps/tsconfig.json +1 -1
  135. package/features/timing.feature +66 -0
  136. package/features/vary.feature +180 -0
  137. package/package.json +16 -20
  138. package/readme.md +7 -6
  139. package/schemas/annotation.cos.yaml +1 -0
  140. package/schemas/io/input.cos.yaml +3 -0
  141. package/schemas/io/message.cos.yaml +5 -0
  142. package/schemas/io/output.cos.yaml +5 -0
  143. package/schemas/octets/delete.cos.yaml +2 -1
  144. package/schemas/octets/list.cos.yaml +2 -1
  145. package/schemas/octets/workflow.cos.yaml +12 -0
  146. package/schemas/querystring.cos.yaml +1 -0
  147. package/source/Annotation.ts +1 -0
  148. package/source/Context.ts +6 -4
  149. package/source/Directive.test.ts +14 -8
  150. package/source/Directive.ts +26 -49
  151. package/source/Endpoint.ts +53 -6
  152. package/source/Factory.ts +23 -12
  153. package/source/Gateway.ts +45 -42
  154. package/source/HTTP/Context.ts +67 -0
  155. package/source/HTTP/Server.test.ts +61 -134
  156. package/source/HTTP/Server.ts +96 -87
  157. package/source/HTTP/Timing.ts +40 -0
  158. package/source/HTTP/formats/msgpack.ts +9 -6
  159. package/source/HTTP/formats/text.ts +1 -1
  160. package/source/HTTP/formats/yaml.ts +1 -1
  161. package/source/HTTP/index.ts +1 -0
  162. package/source/HTTP/messages.test.ts +27 -8
  163. package/source/HTTP/messages.ts +38 -42
  164. package/source/Interception.ts +24 -0
  165. package/source/Mapping.ts +7 -8
  166. package/source/RTD/Context.ts +7 -10
  167. package/source/RTD/Directives.ts +28 -4
  168. package/source/RTD/Endpoint.ts +6 -4
  169. package/source/RTD/Match.ts +2 -7
  170. package/source/RTD/Method.ts +7 -13
  171. package/source/RTD/Node.ts +13 -14
  172. package/source/RTD/Tree.ts +19 -15
  173. package/source/RTD/factory.ts +2 -5
  174. package/source/RTD/syntax/parse.ts +6 -6
  175. package/source/RTD/syntax/types.ts +1 -1
  176. package/source/deployment.ts +7 -2
  177. package/source/directives/auth/Anonymous.ts +3 -2
  178. package/source/directives/auth/{Family.ts → Authorization.ts} +39 -40
  179. package/source/directives/auth/Delegate.ts +32 -0
  180. package/source/directives/auth/Incept.ts +11 -6
  181. package/source/directives/auth/Role.ts +5 -3
  182. package/source/directives/auth/Rule.ts +2 -2
  183. package/source/directives/auth/Scheme.ts +2 -2
  184. package/source/directives/auth/index.ts +2 -2
  185. package/source/directives/auth/schemes.ts +2 -1
  186. package/source/directives/auth/types.ts +9 -6
  187. package/source/directives/cache/{Family.ts → Cache.ts} +6 -7
  188. package/source/directives/cache/Control.ts +5 -5
  189. package/source/directives/cache/index.ts +2 -2
  190. package/source/directives/cache/types.ts +2 -2
  191. package/source/directives/cors/CORS.ts +62 -0
  192. package/source/directives/cors/index.ts +3 -0
  193. package/source/directives/dev/{Family.ts → Development.ts} +4 -5
  194. package/source/directives/dev/Stub.ts +4 -4
  195. package/source/directives/dev/Throw.ts +4 -4
  196. package/source/directives/dev/index.ts +2 -2
  197. package/source/directives/dev/types.ts +1 -1
  198. package/source/directives/index.ts +11 -6
  199. package/source/directives/io/Directive.ts +11 -0
  200. package/source/directives/io/IO.ts +43 -0
  201. package/source/directives/io/Input.ts +50 -0
  202. package/source/directives/io/Message.ts +1 -0
  203. package/source/directives/io/Output.ts +69 -0
  204. package/source/directives/io/index.ts +3 -0
  205. package/source/directives/io/schemas.ts +12 -0
  206. package/source/directives/octets/Context.ts +6 -5
  207. package/source/directives/octets/Delete.ts +64 -11
  208. package/source/directives/octets/Directive.ts +10 -0
  209. package/source/directives/octets/Fetch.ts +44 -29
  210. package/source/directives/octets/List.ts +50 -10
  211. package/source/directives/octets/{Family.ts → Octets.ts} +14 -9
  212. package/source/directives/octets/Permute.ts +18 -11
  213. package/source/directives/octets/Store.ts +70 -102
  214. package/source/directives/octets/Workflow.ts +48 -0
  215. package/source/directives/octets/index.ts +2 -2
  216. package/source/directives/octets/schemas.test.ts +21 -0
  217. package/source/directives/octets/schemas.ts +13 -6
  218. package/source/directives/octets/types.ts +2 -8
  219. package/source/directives/octets/workflows/Execution.ts +76 -0
  220. package/source/directives/octets/workflows/Workflow.ts +37 -0
  221. package/source/directives/octets/workflows/index.ts +1 -0
  222. package/source/directives/vary/Directive.ts +6 -0
  223. package/source/directives/vary/Embed.ts +62 -0
  224. package/source/directives/vary/Properties.ts +17 -0
  225. package/source/directives/vary/Vary.ts +48 -0
  226. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  227. package/source/directives/vary/embeddings/Header.ts +32 -0
  228. package/source/directives/vary/embeddings/Language.ts +31 -0
  229. package/source/directives/vary/embeddings/index.ts +11 -0
  230. package/source/directives/vary/index.ts +3 -0
  231. package/source/exceptions.ts +13 -9
  232. package/source/io.ts +4 -0
  233. package/source/manifest.test.ts +6 -14
  234. package/source/manifest.ts +9 -6
  235. package/source/root.ts +5 -0
  236. package/source/schemas.ts +7 -3
  237. package/transpiled/Annotation.d.ts +8 -0
  238. package/transpiled/Annotation.js +3 -0
  239. package/transpiled/Annotation.js.map +1 -0
  240. package/transpiled/Branch.d.ts +7 -0
  241. package/transpiled/Branch.js +3 -0
  242. package/transpiled/Branch.js.map +1 -0
  243. package/transpiled/Composition.d.ts +14 -0
  244. package/transpiled/Composition.js +43 -0
  245. package/transpiled/Composition.js.map +1 -0
  246. package/transpiled/Context.d.ts +7 -0
  247. package/transpiled/Context.js +3 -0
  248. package/transpiled/Context.js.map +1 -0
  249. package/transpiled/Directive.d.ts +18 -0
  250. package/transpiled/Directive.js +75 -0
  251. package/transpiled/Directive.js.map +1 -0
  252. package/transpiled/Endpoint.d.ts +22 -0
  253. package/transpiled/Endpoint.js +101 -0
  254. package/transpiled/Endpoint.js.map +1 -0
  255. package/transpiled/Factory.d.ts +9 -0
  256. package/transpiled/Factory.js +73 -0
  257. package/transpiled/Factory.js.map +1 -0
  258. package/transpiled/Gateway.d.ts +18 -0
  259. package/transpiled/Gateway.js +92 -0
  260. package/transpiled/Gateway.js.map +1 -0
  261. package/transpiled/HTTP/Context.d.ts +24 -0
  262. package/transpiled/HTTP/Context.js +47 -0
  263. package/transpiled/HTTP/Context.js.map +1 -0
  264. package/transpiled/HTTP/Server.d.ts +25 -0
  265. package/transpiled/HTTP/Server.js +141 -0
  266. package/transpiled/HTTP/Server.js.map +1 -0
  267. package/transpiled/HTTP/Timing.d.ts +10 -0
  268. package/transpiled/HTTP/Timing.js +29 -0
  269. package/transpiled/HTTP/Timing.js.map +1 -0
  270. package/transpiled/HTTP/exceptions.d.ts +34 -0
  271. package/transpiled/HTTP/exceptions.js +71 -0
  272. package/transpiled/HTTP/exceptions.js.map +1 -0
  273. package/transpiled/HTTP/formats/index.d.ts +10 -0
  274. package/transpiled/HTTP/formats/index.js +38 -0
  275. package/transpiled/HTTP/formats/index.js.map +1 -0
  276. package/transpiled/HTTP/formats/json.d.ts +6 -0
  277. package/transpiled/HTTP/formats/json.js +17 -0
  278. package/transpiled/HTTP/formats/json.js.map +1 -0
  279. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  280. package/transpiled/HTTP/formats/msgpack.js +17 -0
  281. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  282. package/transpiled/HTTP/formats/text.d.ts +8 -0
  283. package/transpiled/HTTP/formats/text.js +15 -0
  284. package/transpiled/HTTP/formats/text.js.map +1 -0
  285. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  286. package/transpiled/HTTP/formats/yaml.js +41 -0
  287. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  288. package/transpiled/HTTP/index.d.ts +4 -0
  289. package/transpiled/HTTP/index.js +21 -0
  290. package/transpiled/HTTP/index.js.map +1 -0
  291. package/transpiled/HTTP/messages.d.ts +19 -0
  292. package/transpiled/HTTP/messages.js +73 -0
  293. package/transpiled/HTTP/messages.js.map +1 -0
  294. package/transpiled/Interception.d.ts +9 -0
  295. package/transpiled/Interception.js +19 -0
  296. package/transpiled/Interception.js.map +1 -0
  297. package/transpiled/Mapping.d.ts +8 -0
  298. package/transpiled/Mapping.js +38 -0
  299. package/transpiled/Mapping.js.map +1 -0
  300. package/transpiled/Query.d.ts +13 -0
  301. package/transpiled/Query.js +107 -0
  302. package/transpiled/Query.js.map +1 -0
  303. package/transpiled/RTD/Context.d.ts +12 -0
  304. package/transpiled/RTD/Context.js +3 -0
  305. package/transpiled/RTD/Context.js.map +1 -0
  306. package/transpiled/RTD/Directives.d.ts +22 -0
  307. package/transpiled/RTD/Directives.js +3 -0
  308. package/transpiled/RTD/Directives.js.map +1 -0
  309. package/transpiled/RTD/Endpoint.d.ts +11 -0
  310. package/transpiled/RTD/Endpoint.js +3 -0
  311. package/transpiled/RTD/Endpoint.js.map +1 -0
  312. package/transpiled/RTD/Match.d.ts +9 -0
  313. package/transpiled/RTD/Match.js +3 -0
  314. package/transpiled/RTD/Match.js.map +1 -0
  315. package/transpiled/RTD/Method.d.ts +9 -0
  316. package/transpiled/RTD/Method.js +16 -0
  317. package/transpiled/RTD/Method.js.map +1 -0
  318. package/transpiled/RTD/Node.d.ts +19 -0
  319. package/transpiled/RTD/Node.js +62 -0
  320. package/transpiled/RTD/Node.js.map +1 -0
  321. package/transpiled/RTD/Route.d.ts +14 -0
  322. package/transpiled/RTD/Route.js +49 -0
  323. package/transpiled/RTD/Route.js.map +1 -0
  324. package/transpiled/RTD/Tree.d.ts +14 -0
  325. package/transpiled/RTD/Tree.js +45 -0
  326. package/transpiled/RTD/Tree.js.map +1 -0
  327. package/transpiled/RTD/factory.d.ts +4 -0
  328. package/transpiled/RTD/factory.js +36 -0
  329. package/transpiled/RTD/factory.js.map +1 -0
  330. package/transpiled/RTD/index.d.ts +8 -0
  331. package/transpiled/RTD/index.js +38 -0
  332. package/transpiled/RTD/index.js.map +1 -0
  333. package/transpiled/RTD/segment.d.ts +8 -0
  334. package/transpiled/RTD/segment.js +25 -0
  335. package/transpiled/RTD/segment.js.map +1 -0
  336. package/transpiled/RTD/syntax/index.d.ts +2 -0
  337. package/transpiled/RTD/syntax/index.js +19 -0
  338. package/transpiled/RTD/syntax/index.js.map +1 -0
  339. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  340. package/transpiled/RTD/syntax/parse.js +128 -0
  341. package/transpiled/RTD/syntax/parse.js.map +1 -0
  342. package/transpiled/RTD/syntax/types.d.ts +41 -0
  343. package/transpiled/RTD/syntax/types.js +5 -0
  344. package/transpiled/RTD/syntax/types.js.map +1 -0
  345. package/transpiled/Remotes.d.ts +9 -0
  346. package/transpiled/Remotes.js +25 -0
  347. package/transpiled/Remotes.js.map +1 -0
  348. package/transpiled/Tenant.d.ts +13 -0
  349. package/transpiled/Tenant.js +34 -0
  350. package/transpiled/Tenant.js.map +1 -0
  351. package/transpiled/deployment.d.ts +3 -0
  352. package/transpiled/deployment.js +71 -0
  353. package/transpiled/deployment.js.map +1 -0
  354. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  355. package/transpiled/directives/auth/Anonymous.js +16 -0
  356. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  357. package/transpiled/directives/auth/Authorization.d.ts +19 -0
  358. package/transpiled/directives/auth/Authorization.js +127 -0
  359. package/transpiled/directives/auth/Authorization.js.map +1 -0
  360. package/transpiled/directives/auth/Delegate.d.ts +8 -0
  361. package/transpiled/directives/auth/Delegate.js +27 -0
  362. package/transpiled/directives/auth/Delegate.js.map +1 -0
  363. package/transpiled/directives/auth/Echo.d.ts +6 -0
  364. package/transpiled/directives/auth/Echo.js +13 -0
  365. package/transpiled/directives/auth/Echo.js.map +1 -0
  366. package/transpiled/directives/auth/Id.d.ts +7 -0
  367. package/transpiled/directives/auth/Id.js +17 -0
  368. package/transpiled/directives/auth/Id.js.map +1 -0
  369. package/transpiled/directives/auth/Incept.d.ts +10 -0
  370. package/transpiled/directives/auth/Incept.js +63 -0
  371. package/transpiled/directives/auth/Incept.js.map +1 -0
  372. package/transpiled/directives/auth/Role.d.ts +11 -0
  373. package/transpiled/directives/auth/Role.js +46 -0
  374. package/transpiled/directives/auth/Role.js.map +1 -0
  375. package/transpiled/directives/auth/Rule.d.ts +9 -0
  376. package/transpiled/directives/auth/Rule.js +22 -0
  377. package/transpiled/directives/auth/Rule.js.map +1 -0
  378. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  379. package/transpiled/directives/auth/Scheme.js +47 -0
  380. package/transpiled/directives/auth/Scheme.js.map +1 -0
  381. package/transpiled/directives/auth/index.d.ts +2 -0
  382. package/transpiled/directives/auth/index.js +6 -0
  383. package/transpiled/directives/auth/index.js.map +1 -0
  384. package/transpiled/directives/auth/schemes.d.ts +3 -0
  385. package/transpiled/directives/auth/schemes.js +10 -0
  386. package/transpiled/directives/auth/schemes.js.map +1 -0
  387. package/transpiled/directives/auth/split.d.ts +2 -0
  388. package/transpiled/directives/auth/split.js +38 -0
  389. package/transpiled/directives/auth/split.js.map +1 -0
  390. package/transpiled/directives/auth/types.d.ts +31 -0
  391. package/transpiled/directives/auth/types.js +3 -0
  392. package/transpiled/directives/auth/types.js.map +1 -0
  393. package/transpiled/directives/cache/Cache.d.ts +11 -0
  394. package/transpiled/directives/cache/Cache.js +28 -0
  395. package/transpiled/directives/cache/Cache.js.map +1 -0
  396. package/transpiled/directives/cache/Control.d.ts +9 -0
  397. package/transpiled/directives/cache/Control.js +42 -0
  398. package/transpiled/directives/cache/Control.js.map +1 -0
  399. package/transpiled/directives/cache/Exact.d.ts +4 -0
  400. package/transpiled/directives/cache/Exact.js +11 -0
  401. package/transpiled/directives/cache/Exact.js.map +1 -0
  402. package/transpiled/directives/cache/index.d.ts +2 -0
  403. package/transpiled/directives/cache/index.js +6 -0
  404. package/transpiled/directives/cache/index.js.map +1 -0
  405. package/transpiled/directives/cache/types.d.ts +7 -0
  406. package/transpiled/directives/cache/types.js +3 -0
  407. package/transpiled/directives/cache/types.js.map +1 -0
  408. package/transpiled/directives/cors/CORS.d.ts +10 -0
  409. package/transpiled/directives/cors/CORS.js +51 -0
  410. package/transpiled/directives/cors/CORS.js.map +1 -0
  411. package/transpiled/directives/cors/index.d.ts +2 -0
  412. package/transpiled/directives/cors/index.js +6 -0
  413. package/transpiled/directives/cors/index.js.map +1 -0
  414. package/transpiled/directives/dev/Development.d.ts +9 -0
  415. package/transpiled/directives/dev/Development.js +29 -0
  416. package/transpiled/directives/dev/Development.js.map +1 -0
  417. package/transpiled/directives/dev/Stub.d.ts +7 -0
  418. package/transpiled/directives/dev/Stub.js +14 -0
  419. package/transpiled/directives/dev/Stub.js.map +1 -0
  420. package/transpiled/directives/dev/Throw.d.ts +7 -0
  421. package/transpiled/directives/dev/Throw.js +14 -0
  422. package/transpiled/directives/dev/Throw.js.map +1 -0
  423. package/transpiled/directives/dev/index.d.ts +2 -0
  424. package/transpiled/directives/dev/index.js +6 -0
  425. package/transpiled/directives/dev/index.js.map +1 -0
  426. package/transpiled/directives/dev/types.d.ts +4 -0
  427. package/transpiled/directives/dev/types.js +3 -0
  428. package/transpiled/directives/dev/types.js.map +1 -0
  429. package/transpiled/directives/index.d.ts +4 -0
  430. package/transpiled/directives/index.js +13 -0
  431. package/transpiled/directives/index.js.map +1 -0
  432. package/transpiled/directives/io/Directive.d.ts +8 -0
  433. package/transpiled/directives/io/Directive.js +3 -0
  434. package/transpiled/directives/io/Directive.js.map +1 -0
  435. package/transpiled/directives/io/IO.d.ts +9 -0
  436. package/transpiled/directives/io/IO.js +33 -0
  437. package/transpiled/directives/io/IO.js.map +1 -0
  438. package/transpiled/directives/io/Input.d.ts +11 -0
  439. package/transpiled/directives/io/Input.js +63 -0
  440. package/transpiled/directives/io/Input.js.map +1 -0
  441. package/transpiled/directives/io/Message.d.ts +1 -0
  442. package/transpiled/directives/io/Message.js +3 -0
  443. package/transpiled/directives/io/Message.js.map +1 -0
  444. package/transpiled/directives/io/Output.d.ts +13 -0
  445. package/transpiled/directives/io/Output.js +76 -0
  446. package/transpiled/directives/io/Output.js.map +1 -0
  447. package/transpiled/directives/io/index.d.ts +2 -0
  448. package/transpiled/directives/io/index.js +6 -0
  449. package/transpiled/directives/io/index.js.map +1 -0
  450. package/transpiled/directives/io/schemas.d.ts +7 -0
  451. package/transpiled/directives/io/schemas.js +14 -0
  452. package/transpiled/directives/io/schemas.js.map +1 -0
  453. package/transpiled/directives/octets/Context.d.ts +8 -0
  454. package/transpiled/directives/octets/Context.js +42 -0
  455. package/transpiled/directives/octets/Context.js.map +1 -0
  456. package/transpiled/directives/octets/Delete.d.ts +20 -0
  457. package/transpiled/directives/octets/Delete.js +84 -0
  458. package/transpiled/directives/octets/Delete.js.map +1 -0
  459. package/transpiled/directives/octets/Directive.d.ts +8 -0
  460. package/transpiled/directives/octets/Directive.js +8 -0
  461. package/transpiled/directives/octets/Directive.js.map +1 -0
  462. package/transpiled/directives/octets/Fetch.d.ts +18 -0
  463. package/transpiled/directives/octets/Fetch.js +92 -0
  464. package/transpiled/directives/octets/Fetch.js.map +1 -0
  465. package/transpiled/directives/octets/List.d.ts +16 -0
  466. package/transpiled/directives/octets/List.js +74 -0
  467. package/transpiled/directives/octets/List.js.map +1 -0
  468. package/transpiled/directives/octets/Octets.d.ts +12 -0
  469. package/transpiled/directives/octets/Octets.js +55 -0
  470. package/transpiled/directives/octets/Octets.js.map +1 -0
  471. package/transpiled/directives/octets/Permute.d.ts +11 -0
  472. package/transpiled/directives/octets/Permute.js +58 -0
  473. package/transpiled/directives/octets/Permute.js.map +1 -0
  474. package/transpiled/directives/octets/Store.d.ts +24 -0
  475. package/transpiled/directives/octets/Store.js +95 -0
  476. package/transpiled/directives/octets/Store.js.map +1 -0
  477. package/transpiled/directives/octets/Workflow.d.ts +15 -0
  478. package/transpiled/directives/octets/Workflow.js +59 -0
  479. package/transpiled/directives/octets/Workflow.js.map +1 -0
  480. package/transpiled/directives/octets/index.d.ts +2 -0
  481. package/transpiled/directives/octets/index.js +6 -0
  482. package/transpiled/directives/octets/index.js.map +1 -0
  483. package/transpiled/directives/octets/schemas.d.ts +13 -0
  484. package/transpiled/directives/octets/schemas.js +18 -0
  485. package/transpiled/directives/octets/schemas.js.map +1 -0
  486. package/transpiled/directives/octets/types.d.ts +5 -0
  487. package/transpiled/directives/octets/types.js +3 -0
  488. package/transpiled/directives/octets/types.js.map +1 -0
  489. package/transpiled/directives/octets/workflows/Execution.d.ts +25 -0
  490. package/transpiled/directives/octets/workflows/Execution.js +54 -0
  491. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  492. package/transpiled/directives/octets/workflows/Workflow.d.ts +12 -0
  493. package/transpiled/directives/octets/workflows/Workflow.js +25 -0
  494. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  495. package/transpiled/directives/octets/workflows/index.d.ts +1 -0
  496. package/transpiled/directives/octets/workflows/index.js +6 -0
  497. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  498. package/transpiled/directives/vary/Directive.d.ts +5 -0
  499. package/transpiled/directives/vary/Directive.js +3 -0
  500. package/transpiled/directives/vary/Directive.js.map +1 -0
  501. package/transpiled/directives/vary/Embed.d.ts +10 -0
  502. package/transpiled/directives/vary/Embed.js +49 -0
  503. package/transpiled/directives/vary/Embed.js.map +1 -0
  504. package/transpiled/directives/vary/Properties.d.ts +9 -0
  505. package/transpiled/directives/vary/Properties.js +16 -0
  506. package/transpiled/directives/vary/Properties.js.map +1 -0
  507. package/transpiled/directives/vary/Vary.d.ts +10 -0
  508. package/transpiled/directives/vary/Vary.js +36 -0
  509. package/transpiled/directives/vary/Vary.js.map +1 -0
  510. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  511. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  512. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  513. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  514. package/transpiled/directives/vary/embeddings/Header.js +28 -0
  515. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  516. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  517. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  518. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  519. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  520. package/transpiled/directives/vary/embeddings/index.js +10 -0
  521. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  522. package/transpiled/directives/vary/index.d.ts +2 -0
  523. package/transpiled/directives/vary/index.js +6 -0
  524. package/transpiled/directives/vary/index.js.map +1 -0
  525. package/transpiled/discovery.d.ts +1 -0
  526. package/transpiled/discovery.js +3 -0
  527. package/transpiled/discovery.js.map +1 -0
  528. package/transpiled/exceptions.d.ts +2 -0
  529. package/transpiled/exceptions.js +39 -0
  530. package/transpiled/exceptions.js.map +1 -0
  531. package/transpiled/index.d.ts +5 -0
  532. package/transpiled/index.js +12 -0
  533. package/transpiled/index.js.map +1 -0
  534. package/transpiled/io.d.ts +3 -0
  535. package/transpiled/io.js +3 -0
  536. package/transpiled/io.js.map +1 -0
  537. package/transpiled/manifest.d.ts +3 -0
  538. package/transpiled/manifest.js +66 -0
  539. package/transpiled/manifest.js.map +1 -0
  540. package/transpiled/root.d.ts +2 -0
  541. package/transpiled/root.js +44 -0
  542. package/transpiled/root.js.map +1 -0
  543. package/transpiled/schemas.d.ts +7 -0
  544. package/transpiled/schemas.js +14 -0
  545. package/transpiled/schemas.js.map +1 -0
  546. package/transpiled/tsconfig.tsbuildinfo +1 -0
  547. package/source/HTTP/Server.fixtures.ts +0 -41
@@ -1,22 +1,26 @@
1
- import { type IncomingHttpHeaders } from 'node:http'
2
1
  import { Readable } from 'node:stream'
3
- import { type Request, type Response } from 'express'
4
- import { buffer } from '@toa.io/streams'
2
+ import { buffer } from 'node:stream/consumers'
5
3
  import { formats } from './formats'
6
4
  import { BadRequest, NotAcceptable, UnsupportedMediaType } from './exceptions'
7
- import type { ParsedQs } from 'qs'
8
- import type { Format } from './formats'
5
+ import type { Context } from './Context'
6
+ import type * as http from 'node:http'
9
7
 
10
8
  export function write
11
- (request: IncomingMessage, response: Response, message: OutgoingMessage): void {
9
+ (context: Context, response: http.ServerResponse, message: OutgoingMessage): void {
10
+ for (const transform of context.pipelines.response)
11
+ transform(message)
12
+
13
+ message.headers?.forEach((value, key) => response.setHeader(key, value))
14
+ context.timing.append(response)
15
+
12
16
  if (message.body instanceof Readable)
13
- stream(message, request, response)
17
+ stream(message, context, response)
14
18
  else
15
- send(message, request, response)
19
+ send(message, context, response)
16
20
  }
17
21
 
18
- export async function read (request: Request): Promise<any> {
19
- const type = request.headers['content-type']
22
+ export async function read (context: Context): Promise<any> {
23
+ const type = context.request.headers['content-type']
20
24
 
21
25
  if (type === undefined)
22
26
  return undefined
@@ -25,8 +29,7 @@ export async function read (request: Request): Promise<any> {
25
29
  throw new UnsupportedMediaType()
26
30
 
27
31
  const format = formats[type]
28
-
29
- const buf = await buffer(request)
32
+ const buf = await context.timing.capture('buffer', buffer(context.request))
30
33
 
31
34
  try {
32
35
  return format.decode(buf)
@@ -35,30 +38,33 @@ export async function read (request: Request): Promise<any> {
35
38
  }
36
39
  }
37
40
 
38
- function send (message: OutgoingMessage, request: IncomingMessage, response: Response): void {
39
- if (message.body === undefined) {
41
+ function send
42
+ (message: OutgoingMessage, context: Context, response: http.ServerResponse): void {
43
+ if (message.body === undefined || message.body === null) {
40
44
  response.end()
41
45
 
42
46
  return
43
47
  }
44
48
 
45
- if (request.encoder === null)
49
+ if (context.encoder === null)
46
50
  throw new NotAcceptable()
47
51
 
48
- const buf = request.encoder.encode(message.body)
52
+ const buf = context.encoder.encode(message.body)
49
53
 
50
- response.set('content-type', request.encoder.type)
51
- response.end(buf)
54
+ response
55
+ .setHeader('content-type', context.encoder.type)
56
+ .appendHeader('vary', 'accept')
57
+ .end(buf)
52
58
  }
53
59
 
54
60
  function stream
55
- (message: OutgoingMessage, request: IncomingMessage, response: Response): void {
61
+ (message: OutgoingMessage, context: Context, response: http.ServerResponse): void {
56
62
  const encoded = message.headers !== undefined && message.headers.has('content-type')
57
63
 
58
64
  if (encoded)
59
- pipe(message, response)
65
+ message.body.pipe(response)
60
66
  else
61
- multipart(message, request, response)
67
+ multipart(message, context, response)
62
68
 
63
69
  message.body.on('error', (e: Error) => {
64
70
  console.error(e)
@@ -66,49 +72,39 @@ function stream
66
72
  })
67
73
  }
68
74
 
69
- function pipe (message: OutgoingMessage, response: Response): void {
70
- message.headers?.forEach((value, key) => response.set(key, value))
71
- message.body.pipe(response)
72
- }
73
-
74
- function multipart (message: OutgoingMessage, request: IncomingMessage, response: Response): void {
75
- if (request.encoder === null)
75
+ function multipart
76
+ (message: OutgoingMessage, context: Context, response: http.ServerResponse): void {
77
+ if (context.encoder === null)
76
78
  throw new NotAcceptable()
77
79
 
78
- const encoder = request.encoder
80
+ const encoder = context.encoder
79
81
 
80
- response.set('content-type', `${encoder.multipart}; boundary=${BOUNDARY}`)
82
+ response.setHeader('content-type', `${encoder.multipart}; boundary=${BOUNDARY}`)
81
83
 
82
84
  message.body
83
- .map((part: unknown) => Buffer.concat([CUT, encoder.encode(part)]))
85
+ .map((part: unknown) => Buffer.concat([CUT, encoder.encode(part), CRLF]))
84
86
  .on('end', () => response.end(FINALCUT))
85
87
  .pipe(response)
86
88
  }
87
89
 
88
90
  const BOUNDARY = 'cut'
89
91
  const CUT = Buffer.from(`--${BOUNDARY}\r\n`)
92
+ const CRLF = Buffer.from('\r\n')
90
93
  const FINALCUT = Buffer.from(`--${BOUNDARY}--`)
91
94
 
92
- export interface IncomingMessage extends Request {
93
- method: string
94
- path: string
95
- url: string
96
- headers: IncomingHttpHeaders
97
- query: Query
98
- parse: <T> () => Promise<T>
99
- encoder: Format | null
100
- }
101
-
102
95
  export interface OutgoingMessage {
103
96
  status?: number
104
97
  headers?: Headers
105
98
  body?: any
106
99
  }
107
100
 
108
- export interface Query extends ParsedQs {
101
+ export interface Query {
102
+ [key: string]: string | number | undefined
103
+
109
104
  id?: string
110
105
  criteria?: string
111
106
  sort?: string
112
107
  omit?: string
113
108
  limit?: string
109
+ version?: number
114
110
  }
@@ -0,0 +1,24 @@
1
+ import type { Input, Output } from './io'
2
+
3
+ export class Interception implements Interceptor {
4
+ private readonly interceptors: Interceptor[]
5
+
6
+ public constructor (interceptors: Interceptor[]) {
7
+ this.interceptors = interceptors
8
+ }
9
+
10
+ public async intercept (input: Input): Promise<Output> {
11
+ for (const interceptor of this.interceptors) {
12
+ const output = await interceptor.intercept(input)
13
+
14
+ if (output !== null)
15
+ return output
16
+ }
17
+
18
+ return null
19
+ }
20
+ }
21
+
22
+ export interface Interceptor {
23
+ intercept: (input: Input) => Output | Promise<Output>
24
+ }
package/source/Mapping.ts CHANGED
@@ -29,7 +29,10 @@ class QueryableMapping extends Mapping {
29
29
  public fit (input: any, qs: http.Query, parameters: Parameter[]): core.Request {
30
30
  const query = this.query.fit(qs, parameters)
31
31
 
32
- return { input, query }
32
+ return {
33
+ input,
34
+ query
35
+ }
33
36
  }
34
37
  }
35
38
 
@@ -38,14 +41,10 @@ class InputMapping extends Mapping {
38
41
  if (input === undefined && parameters.length > 0)
39
42
  input = {}
40
43
 
41
- if (typeof input === 'object')
42
- this.assign(input, parameters)
44
+ if (typeof input === 'object' && input !== null)
45
+ for (const parameter of parameters)
46
+ input[parameter.name] = parameter.value
43
47
 
44
48
  return { input }
45
49
  }
46
-
47
- private assign (input: Record<string, any>, parameters: Parameter[]): void {
48
- for (const parameter of parameters)
49
- input[parameter.name] = parameter.value
50
- }
51
50
  }
@@ -1,16 +1,13 @@
1
- import { type Directives, type DirectivesFactory } from './Directives'
2
- import { type Endpoint, type EndpointsFactory } from './Endpoint'
1
+ import { type DirectiveFactory } from './Directives'
2
+ import { type EndpointsFactory } from './Endpoint'
3
+ import type { Directive } from './syntax'
3
4
 
4
- export interface Context<
5
- TEndpoint extends Endpoint = any,
6
- TDirectives extends Directives<TDirectives> = any,
7
- TExtension = any
8
- > {
5
+ export interface Context<TExtension = any> {
9
6
  readonly protected: boolean
10
- readonly endpoints: EndpointsFactory<TEndpoint>
7
+ readonly endpoints: EndpointsFactory
11
8
  readonly directives: {
12
- readonly factory: DirectivesFactory
13
- stack: TDirectives[]
9
+ readonly factory: DirectiveFactory
10
+ stack: Directive[]
14
11
  }
15
12
  readonly extension?: TExtension
16
13
  }
@@ -1,9 +1,33 @@
1
+ import type { Parameter } from './Match'
1
2
  import type * as syntax from './syntax'
3
+ import type { Context, OutgoingMessage } from '../HTTP'
4
+ import type { Output } from '../io'
2
5
 
3
- export interface Directives<T = any> {
4
- merge: (directive: T) => void
6
+ export interface Directives {
7
+ preflight: (context: Context, parameters: Parameter[]) => Promise<Output>
8
+ settle: (context: Context, response: OutgoingMessage) => Promise<void>
5
9
  }
6
10
 
7
- export interface DirectivesFactory<T = any> {
8
- create: (directives: syntax.Directive[]) => T
11
+ export interface DirectiveFactory {
12
+ create: (directives: syntax.Directive[]) => Directives
13
+ }
14
+
15
+ export interface DirectiveSet {
16
+ family: DirectiveFamily
17
+ directives: any[]
18
+ }
19
+
20
+ export interface DirectiveFamily<TDirective = any, TExtension = any> {
21
+ readonly name: string
22
+ readonly mandatory: boolean
23
+
24
+ create: (name: string, ...rest: any[]) => TDirective
25
+
26
+ preflight?: (directives: TDirective[],
27
+ request: Context & TExtension,
28
+ parameters: Parameter[]) => Output | Promise<Output>
29
+
30
+ settle?: (directives: TDirective[],
31
+ request: Context & TExtension,
32
+ response: OutgoingMessage) => void | Promise<void>
9
33
  }
@@ -1,11 +1,13 @@
1
1
  import { type Context } from './Context'
2
+ import type * as http from '../HTTP'
2
3
  import type * as syntax from './syntax'
4
+ import type * as RTD from './index'
3
5
 
4
- export interface Endpoint<T extends Endpoint = any> {
5
- call: T['call']
6
+ export interface Endpoint {
7
+ call: (context: http.Context, parameters: RTD.Parameter[]) => Promise<http.OutgoingMessage>
6
8
  close: () => Promise<void>
7
9
  }
8
10
 
9
- export interface EndpointsFactory<T extends Endpoint<T> = any> {
10
- create: (method: syntax.Method, context: Context) => T
11
+ export interface EndpointsFactory {
12
+ create: (method: syntax.Method, context: Context) => Endpoint
11
13
  }
@@ -1,12 +1,7 @@
1
1
  import { type Node } from './Node'
2
- import { type Directives } from './Directives'
3
- import { type Endpoint } from './Endpoint'
4
2
 
5
- export interface Match<
6
- TEndpoint extends Endpoint<TEndpoint> = any,
7
- TDirectives extends Directives<TDirectives> = any
8
- > {
9
- node: Node<TEndpoint, TDirectives>
3
+ export interface Match {
4
+ node: Node
10
5
  parameters: Parameter[]
11
6
  }
12
7
 
@@ -1,14 +1,11 @@
1
- import { type Directives } from './Directives'
2
- import { type Endpoint } from './Endpoint'
1
+ import type { Endpoint } from './Endpoint'
2
+ import type { Directives } from './Directives'
3
3
 
4
- export class Method<
5
- TEndpoint extends Endpoint<TEndpoint> = any,
6
- TDirectives extends Directives<TDirectives> = any
7
- > {
8
- public readonly endpoint: TEndpoint | null
9
- public readonly directives: TDirectives
4
+ export class Method {
5
+ public readonly endpoint: Endpoint | null
6
+ public readonly directives: Directives
10
7
 
11
- public constructor (endpoint: TEndpoint | null, directives: TDirectives) {
8
+ public constructor (endpoint: Endpoint | null, directives: Directives) {
12
9
  this.endpoint = endpoint
13
10
  this.directives = directives
14
11
  }
@@ -18,7 +15,4 @@ export class Method<
18
15
  }
19
16
  }
20
17
 
21
- export type Methods<
22
- TEndpoint extends Endpoint<TEndpoint> = any,
23
- TDirectives extends Directives<TDirectives> = any
24
- > = Record<string, Method<TEndpoint, TDirectives>>
18
+ export type Methods = Record<string, Method>
@@ -1,20 +1,15 @@
1
1
  import { type Route } from './Route'
2
2
  import { type Methods } from './Method'
3
3
  import { type Match, type Parameter } from './Match'
4
- import { type Directives } from './Directives'
5
- import { type Endpoint } from './Endpoint'
6
4
 
7
- export class Node<
8
- TEndpoint extends Endpoint<TEndpoint> = any,
9
- TDirectives extends Directives<TDirectives> = any
10
- > {
5
+ export class Node {
11
6
  public intermediate: boolean
12
- public methods: Methods<TEndpoint, TDirectives>
7
+ public methods: Methods
13
8
  private readonly protected: boolean
14
9
  private routes: Route[]
15
10
 
16
11
  public constructor
17
- (routes: Route[], methods: Methods<TEndpoint, TDirectives>, properties: Properties) {
12
+ (routes: Route[], methods: Methods, properties: Properties) {
18
13
  this.routes = routes
19
14
  this.methods = methods
20
15
  this.protected = properties.protected
@@ -34,26 +29,30 @@ export class Node<
34
29
  return null
35
30
  }
36
31
 
37
- public merge (node: Node<TEndpoint, TDirectives>): void {
32
+ public merge (node: Node): void {
38
33
  this.intermediate = node.intermediate
39
34
 
40
- if (!this.protected) this.replace(node)
41
- else this.append(node)
35
+ if (!this.protected)
36
+ this.replace(node)
37
+ else
38
+ this.append(node)
42
39
 
43
40
  this.sort()
44
41
  }
45
42
 
46
- private replace (node: Node<TEndpoint, TDirectives>): void {
43
+ private replace (node: Node): void {
47
44
  const methods = Object.values(this.methods)
48
45
 
49
46
  this.routes = node.routes
50
47
  this.methods = node.methods
51
48
 
52
49
  for (const method of methods)
53
- void method.close() // race condition is really unlikely
50
+ void method.close()
51
+
52
+ // race condition is really unlikely
54
53
  }
55
54
 
56
- private append (node: Node<TEndpoint, TDirectives>): void {
55
+ private append (node: Node): void {
57
56
  for (const route of node.routes)
58
57
  this.mergeRoute(route)
59
58
 
@@ -1,30 +1,33 @@
1
- import { type Node } from './Node'
2
1
  import { createNode } from './factory'
3
2
  import { fragment } from './segment'
4
- import { type Match } from './Match'
5
- import { type Context } from './Context'
6
- import { type Directives, type DirectivesFactory } from './Directives'
7
- import { type Endpoint, type EndpointsFactory } from './Endpoint'
3
+ import type { Node } from './Node'
4
+ import type { Match } from './Match'
5
+ import type { Context } from './Context'
6
+ import type { DirectiveFactory } from './Directives'
7
+ import type { EndpointsFactory } from './Endpoint'
8
8
  import type * as syntax from './syntax'
9
9
 
10
- export class Tree<
11
- TEndpoint extends Endpoint<TEndpoint> = any,
12
- TDirectives extends Directives<TDirectives> = any
13
- > {
10
+ export class Tree {
14
11
  private readonly root: syntax.Node
15
- private readonly trunk: Node<TEndpoint, TDirectives>
16
- private readonly endpoints: EndpointsFactory<TEndpoint>
17
- private readonly directives: DirectivesFactory
12
+ private readonly trunk: Node
13
+ private readonly endpoints: EndpointsFactory
14
+ private readonly directives: DirectiveFactory
18
15
 
19
16
  public constructor
20
- (node: syntax.Node, endpoints: EndpointsFactory, directives: DirectivesFactory) {
17
+ (node: syntax.Node, endpoints: EndpointsFactory, directives: DirectiveFactory) {
21
18
  this.endpoints = endpoints
22
19
  this.directives = directives
23
20
  this.trunk = this.createNode(node, PROTECTED)
24
21
  this.root = node
25
22
  }
26
23
 
27
- public match (path: string): Match<TEndpoint, TDirectives> | null {
24
+ public match (path: string): Match | null {
25
+ if (path === '/')
26
+ return {
27
+ node: this.trunk,
28
+ parameters: []
29
+ }
30
+
28
31
  const fragments = fragment(path)
29
32
 
30
33
  return this.trunk.match(fragments)
@@ -36,7 +39,8 @@ export class Tree<
36
39
  this.trunk.merge(branch)
37
40
  }
38
41
 
39
- private createNode (node: syntax.Node, protect: boolean, extension?: any): Node {
42
+ private createNode
43
+ (node: syntax.Node, protect: boolean, extension?: any): Node {
40
44
  const context: Context = {
41
45
  protected: protect,
42
46
  endpoints: this.endpoints,
@@ -1,14 +1,11 @@
1
1
  import { Node, type Properties } from './Node'
2
2
  import { Route } from './Route'
3
- import { type Context } from './Context'
4
3
  import { segment } from './segment'
5
4
  import { Method, type Methods } from './Method'
6
- import { type Endpoint } from './Endpoint'
7
- import { type Directives } from './Directives'
5
+ import type { Context } from './Context'
8
6
  import type * as syntax from './syntax'
9
7
 
10
- export function createNode<TEndpoint extends Endpoint, TDirectives extends Directives>
11
- (node: syntax.Node, context: Context): Node<TEndpoint, TDirectives> {
8
+ export function createNode (node: syntax.Node, context: Context): Node {
12
9
  if (node.isolated === true)
13
10
  context.directives.stack = node.directives
14
11
  else
@@ -28,7 +28,7 @@ function parseNode (input: object, shortcuts?: Shortcuts): Node {
28
28
  }
29
29
 
30
30
  if (key[0] === '/') {
31
- const route = parseRoute(key, value, shortcuts)
31
+ const route = parseRoute(key, value as Node, shortcuts)
32
32
 
33
33
  node.routes.push(route)
34
34
 
@@ -36,7 +36,7 @@ function parseNode (input: object, shortcuts?: Shortcuts): Node {
36
36
  }
37
37
 
38
38
  if (verbs.has(key)) {
39
- const method = parseMethod(key, value, shortcuts)
39
+ const method = parseMethod(key, value as Mapping, shortcuts)
40
40
 
41
41
  node.methods.push(method)
42
42
 
@@ -65,7 +65,7 @@ export function createNode (): Node {
65
65
  }
66
66
  }
67
67
 
68
- function parseRoute (path: string, value: object, shortcuts?: Shortcuts): Route {
68
+ function parseRoute (path: string, value: Node, shortcuts?: Shortcuts): Route {
69
69
  const node = parse(value, shortcuts)
70
70
 
71
71
  return createRoute(path, node)
@@ -106,10 +106,10 @@ function parseQuery (mapping: any): void {
106
106
  return
107
107
 
108
108
  if (typeof query.limit === 'number')
109
- query.limit = expandRange(query.limit)
109
+ query.limit = expandRange(query.limit as number)
110
110
 
111
111
  if (typeof query.omit === 'number')
112
- query.omit = expandRange(query.omit)
112
+ query.omit = expandRange(query.omit as number)
113
113
  }
114
114
 
115
115
  function parseDirectives (mapping: Record<string, any>, shortcuts?: Shortcuts): Directive[] {
@@ -132,7 +132,7 @@ function parseDirectives (mapping: Record<string, any>, shortcuts?: Shortcuts):
132
132
 
133
133
  function parseDirective (key: string, value: any, shortcuts?: Shortcuts): Directive | null {
134
134
  if (shortcuts?.has(key) === true)
135
- key = shortcuts.get(key) as string
135
+ key = shortcuts.get(key)! // eslint-disable-line @typescript-eslint/no-non-null-assertion
136
136
 
137
137
  const match = key.match(DIRECTIVE_RX)
138
138
 
@@ -45,4 +45,4 @@ export interface Range {
45
45
  range: [number, number]
46
46
  }
47
47
 
48
- export const verbs = new Set<string>(['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
48
+ export const verbs = new Set<string>(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'])
@@ -27,8 +27,7 @@ export function deployment (_: unknown, annotation: Annotation | undefined): Dep
27
27
  }
28
28
 
29
29
  if (annotation?.['/'] !== undefined) {
30
- const node = { '/': annotation['/'] }
31
- const tree = parse(node, shortcuts)
30
+ const tree = parse(annotation['/'], shortcuts)
32
31
 
33
32
  service.variables.push({
34
33
  name: 'TOA_EXPOSITION',
@@ -42,6 +41,12 @@ export function deployment (_: unknown, annotation: Annotation | undefined): Dep
42
41
  value: '1'
43
42
  })
44
43
 
44
+ if (annotation?.trace === true)
45
+ service.variables.push({
46
+ name: 'TOA_EXPOSITION_TRACE',
47
+ value: '1'
48
+ })
49
+
45
50
  if (annotation !== undefined)
46
51
  schemas.annotaion.validate(annotation)
47
52
 
@@ -8,7 +8,8 @@ export class Anonymous implements Directive {
8
8
  }
9
9
 
10
10
  public authorize (_: any, input: Input): boolean {
11
- if ('authorization' in input.headers) return false
12
- else return this.allow
11
+ return 'authorization' in input.request.headers
12
+ ? false
13
+ : this.allow
13
14
  }
14
15
  }