@snail-js/api 0.1.27 → 1.0.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 (313) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -605
  3. package/dist/adapter/plain.d.ts +12 -0
  4. package/dist/adapter/plain.d.ts.map +1 -0
  5. package/dist/adapter/react.d.ts +14 -0
  6. package/dist/adapter/react.d.ts.map +1 -0
  7. package/dist/adapter/registry.d.ts +16 -0
  8. package/dist/adapter/registry.d.ts.map +1 -0
  9. package/dist/adapter/vue.d.ts +15 -0
  10. package/dist/adapter/vue.d.ts.map +1 -0
  11. package/dist/chunks/custom-UchOSg_s.js +466 -0
  12. package/dist/chunks/custom-UchOSg_s.js.map +1 -0
  13. package/dist/chunks/download-lBC7oOTT.js +160 -0
  14. package/dist/chunks/download-lBC7oOTT.js.map +1 -0
  15. package/dist/chunks/object-Ct0w-h4i.js +74 -0
  16. package/dist/chunks/object-Ct0w-h4i.js.map +1 -0
  17. package/dist/chunks/plugin-D3RDffDG.js +742 -0
  18. package/dist/chunks/plugin-D3RDffDG.js.map +1 -0
  19. package/dist/chunks/react-C1em-gxy.js +62 -0
  20. package/dist/chunks/react-C1em-gxy.js.map +1 -0
  21. package/dist/chunks/request-qeRhihEF.js +40 -0
  22. package/dist/chunks/request-qeRhihEF.js.map +1 -0
  23. package/dist/chunks/response-D-ubkAFl.js +127 -0
  24. package/dist/chunks/response-D-ubkAFl.js.map +1 -0
  25. package/dist/chunks/use-download-FAjtdJ58.js +1816 -0
  26. package/dist/chunks/use-download-FAjtdJ58.js.map +1 -0
  27. package/dist/chunks/vue-Dd9EhkQ3.js +34 -0
  28. package/dist/chunks/vue-Dd9EhkQ3.js.map +1 -0
  29. package/dist/core/args.d.ts +54 -0
  30. package/dist/core/args.d.ts.map +1 -0
  31. package/dist/core/connection.d.ts +15 -0
  32. package/dist/core/connection.d.ts.map +1 -0
  33. package/dist/core/context.d.ts +124 -0
  34. package/dist/core/context.d.ts.map +1 -0
  35. package/dist/core/http-stream.d.ts +28 -0
  36. package/dist/core/http-stream.d.ts.map +1 -0
  37. package/dist/core/logger.d.ts +22 -0
  38. package/dist/core/logger.d.ts.map +1 -0
  39. package/dist/core/metadata.d.ts +92 -0
  40. package/dist/core/metadata.d.ts.map +1 -0
  41. package/dist/core/metadata.keys.d.ts +41 -0
  42. package/dist/core/metadata.keys.d.ts.map +1 -0
  43. package/dist/core/method.d.ts +177 -0
  44. package/dist/core/method.d.ts.map +1 -0
  45. package/dist/core/plugin-manager.d.ts +106 -0
  46. package/dist/core/plugin-manager.d.ts.map +1 -0
  47. package/dist/core/plugin.d.ts +113 -0
  48. package/dist/core/plugin.d.ts.map +1 -0
  49. package/dist/core/reconnect.d.ts +22 -0
  50. package/dist/core/reconnect.d.ts.map +1 -0
  51. package/dist/core/resolve-stream.d.ts +45 -0
  52. package/dist/core/resolve-stream.d.ts.map +1 -0
  53. package/dist/core/resolve.d.ts +50 -0
  54. package/dist/core/resolve.d.ts.map +1 -0
  55. package/dist/core/response.d.ts +60 -0
  56. package/dist/core/response.d.ts.map +1 -0
  57. package/dist/core/server.d.ts +132 -0
  58. package/dist/core/server.d.ts.map +1 -0
  59. package/dist/core/sse.d.ts +27 -0
  60. package/dist/core/sse.d.ts.map +1 -0
  61. package/dist/core/state-bag.d.ts +36 -0
  62. package/dist/core/state-bag.d.ts.map +1 -0
  63. package/dist/core/websocket.d.ts +29 -0
  64. package/dist/core/websocket.d.ts.map +1 -0
  65. package/dist/decorators/api.d.ts +24 -4
  66. package/dist/decorators/api.d.ts.map +1 -0
  67. package/dist/decorators/args.d.ts +77 -14
  68. package/dist/decorators/args.d.ts.map +1 -0
  69. package/dist/decorators/custom.d.ts +81 -0
  70. package/dist/decorators/custom.d.ts.map +1 -0
  71. package/dist/decorators/header.d.ts +22 -0
  72. package/dist/decorators/header.d.ts.map +1 -0
  73. package/dist/decorators/index.d.ts +17 -0
  74. package/dist/decorators/index.d.ts.map +1 -0
  75. package/dist/decorators/methods.d.ts +33 -0
  76. package/dist/decorators/methods.d.ts.map +1 -0
  77. package/dist/decorators/progress.d.ts +24 -6
  78. package/dist/decorators/progress.d.ts.map +1 -0
  79. package/dist/decorators/server.d.ts +28 -7
  80. package/dist/decorators/server.d.ts.map +1 -0
  81. package/dist/decorators/stream.d.ts +113 -0
  82. package/dist/decorators/stream.d.ts.map +1 -0
  83. package/dist/default/options.d.ts +19 -0
  84. package/dist/default/options.d.ts.map +1 -0
  85. package/dist/error/base.d.ts +20 -0
  86. package/dist/error/base.d.ts.map +1 -0
  87. package/dist/error/decorator.d.ts +14 -0
  88. package/dist/error/decorator.d.ts.map +1 -0
  89. package/dist/error/hook.d.ts +14 -0
  90. package/dist/error/hook.d.ts.map +1 -0
  91. package/dist/error/index.d.ts +8 -0
  92. package/dist/error/index.d.ts.map +1 -0
  93. package/dist/error/options.d.ts +12 -0
  94. package/dist/error/options.d.ts.map +1 -0
  95. package/dist/error/plugin.d.ts +11 -0
  96. package/dist/error/plugin.d.ts.map +1 -0
  97. package/dist/error/request.d.ts +29 -0
  98. package/dist/error/request.d.ts.map +1 -0
  99. package/dist/error/response.d.ts +36 -0
  100. package/dist/error/response.d.ts.map +1 -0
  101. package/dist/index.d.ts +56 -11
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +2034 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/locale/en.d.ts +5 -0
  106. package/dist/locale/en.d.ts.map +1 -0
  107. package/dist/locale/index.d.ts +57 -0
  108. package/dist/locale/index.d.ts.map +1 -0
  109. package/dist/locale/types.d.ts +11 -0
  110. package/dist/locale/types.d.ts.map +1 -0
  111. package/dist/locale/zh.d.ts +5 -0
  112. package/dist/locale/zh.d.ts.map +1 -0
  113. package/dist/plugins/cache/adapters/indexeddb.d.ts +52 -0
  114. package/dist/plugins/cache/adapters/indexeddb.d.ts.map +1 -0
  115. package/dist/plugins/cache/adapters/memory.d.ts +60 -0
  116. package/dist/plugins/cache/adapters/memory.d.ts.map +1 -0
  117. package/dist/plugins/cache/adapters/web-storage.d.ts +43 -0
  118. package/dist/plugins/cache/adapters/web-storage.d.ts.map +1 -0
  119. package/dist/plugins/cache/decorators.d.ts +62 -0
  120. package/dist/plugins/cache/decorators.d.ts.map +1 -0
  121. package/dist/plugins/cache/index.d.ts +41 -0
  122. package/dist/plugins/cache/index.d.ts.map +1 -0
  123. package/dist/plugins/cache/key.d.ts +48 -0
  124. package/dist/plugins/cache/key.d.ts.map +1 -0
  125. package/dist/plugins/cache/manager.d.ts +124 -0
  126. package/dist/plugins/cache/manager.d.ts.map +1 -0
  127. package/dist/plugins/cache/plugin.d.ts +64 -0
  128. package/dist/plugins/cache/plugin.d.ts.map +1 -0
  129. package/dist/plugins/cache/type.d.ts +116 -0
  130. package/dist/plugins/cache/type.d.ts.map +1 -0
  131. package/dist/plugins/index.d.ts +75 -0
  132. package/dist/plugins/index.d.ts.map +1 -0
  133. package/dist/plugins/index.js +2265 -0
  134. package/dist/plugins/index.js.map +1 -0
  135. package/dist/plugins/interceptor/decorators.d.ts +44 -0
  136. package/dist/plugins/interceptor/decorators.d.ts.map +1 -0
  137. package/dist/plugins/interceptor/index.d.ts +31 -0
  138. package/dist/plugins/interceptor/index.d.ts.map +1 -0
  139. package/dist/plugins/interceptor/manager.d.ts +27 -0
  140. package/dist/plugins/interceptor/manager.d.ts.map +1 -0
  141. package/dist/plugins/interceptor/plugin.d.ts +65 -0
  142. package/dist/plugins/interceptor/plugin.d.ts.map +1 -0
  143. package/dist/plugins/interceptor/type.d.ts +45 -0
  144. package/dist/plugins/interceptor/type.d.ts.map +1 -0
  145. package/dist/plugins/pool/index.d.ts +26 -0
  146. package/dist/plugins/pool/index.d.ts.map +1 -0
  147. package/dist/plugins/pool/plugin.d.ts +83 -0
  148. package/dist/plugins/pool/plugin.d.ts.map +1 -0
  149. package/dist/plugins/pool/scheduler.d.ts +153 -0
  150. package/dist/plugins/pool/scheduler.d.ts.map +1 -0
  151. package/dist/plugins/pool/type.d.ts +38 -0
  152. package/dist/plugins/pool/type.d.ts.map +1 -0
  153. package/dist/plugins/react/index.d.ts +20 -0
  154. package/dist/plugins/react/index.d.ts.map +1 -0
  155. package/dist/plugins/react/index.js +145 -0
  156. package/dist/plugins/react/index.js.map +1 -0
  157. package/dist/plugins/react/plugin.d.ts +33 -0
  158. package/dist/plugins/react/plugin.d.ts.map +1 -0
  159. package/dist/plugins/react/type.d.ts +32 -0
  160. package/dist/plugins/react/type.d.ts.map +1 -0
  161. package/dist/plugins/transform/decorators.d.ts +54 -0
  162. package/dist/plugins/transform/decorators.d.ts.map +1 -0
  163. package/dist/plugins/transform/hydrate.d.ts +47 -0
  164. package/dist/plugins/transform/hydrate.d.ts.map +1 -0
  165. package/dist/plugins/transform/index.d.ts +41 -0
  166. package/dist/plugins/transform/index.d.ts.map +1 -0
  167. package/dist/plugins/transform/plugin.d.ts +20 -0
  168. package/dist/plugins/transform/plugin.d.ts.map +1 -0
  169. package/dist/plugins/transform/type.d.ts +67 -0
  170. package/dist/plugins/transform/type.d.ts.map +1 -0
  171. package/dist/plugins/validate/decorators.d.ts +24 -0
  172. package/dist/plugins/validate/decorators.d.ts.map +1 -0
  173. package/dist/plugins/validate/index.d.ts +40 -0
  174. package/dist/plugins/validate/index.d.ts.map +1 -0
  175. package/dist/plugins/validate/plugin.d.ts +13 -0
  176. package/dist/plugins/validate/plugin.d.ts.map +1 -0
  177. package/dist/plugins/validate/type.d.ts +54 -0
  178. package/dist/plugins/validate/type.d.ts.map +1 -0
  179. package/dist/plugins/version/decorators.d.ts +22 -0
  180. package/dist/plugins/version/decorators.d.ts.map +1 -0
  181. package/dist/plugins/version/index.d.ts +23 -0
  182. package/dist/plugins/version/index.d.ts.map +1 -0
  183. package/dist/plugins/version/plugin.d.ts +13 -0
  184. package/dist/plugins/version/plugin.d.ts.map +1 -0
  185. package/dist/plugins/version/type.d.ts +47 -0
  186. package/dist/plugins/version/type.d.ts.map +1 -0
  187. package/dist/plugins/vue/index.d.ts +21 -0
  188. package/dist/plugins/vue/index.d.ts.map +1 -0
  189. package/dist/plugins/vue/index.js +114 -0
  190. package/dist/plugins/vue/index.js.map +1 -0
  191. package/dist/plugins/vue/plugin.d.ts +15 -0
  192. package/dist/plugins/vue/plugin.d.ts.map +1 -0
  193. package/dist/plugins/vue/type.d.ts +34 -0
  194. package/dist/plugins/vue/type.d.ts.map +1 -0
  195. package/dist/strategies/index.d.ts +2 -0
  196. package/dist/strategies/index.d.ts.map +1 -0
  197. package/dist/strategies/index.js +29 -0
  198. package/dist/strategies/index.js.map +1 -0
  199. package/dist/strategies/plain.d.ts +2 -0
  200. package/dist/strategies/plain.d.ts.map +1 -0
  201. package/dist/strategies/plain.js +23 -0
  202. package/dist/strategies/plain.js.map +1 -0
  203. package/dist/strategies/react.d.ts +2 -0
  204. package/dist/strategies/react.d.ts.map +1 -0
  205. package/dist/strategies/react.js +30 -0
  206. package/dist/strategies/react.js.map +1 -0
  207. package/dist/strategies/shared/adapter.d.ts +23 -0
  208. package/dist/strategies/shared/adapter.d.ts.map +1 -0
  209. package/dist/strategies/shared/dom.d.ts +53 -0
  210. package/dist/strategies/shared/dom.d.ts.map +1 -0
  211. package/dist/strategies/shared/error.d.ts +30 -0
  212. package/dist/strategies/shared/error.d.ts.map +1 -0
  213. package/dist/strategies/shared/method.d.ts +51 -0
  214. package/dist/strategies/shared/method.d.ts.map +1 -0
  215. package/dist/strategies/shared/public.d.ts +33 -0
  216. package/dist/strategies/shared/public.d.ts.map +1 -0
  217. package/dist/strategies/shared/queue.d.ts +30 -0
  218. package/dist/strategies/shared/queue.d.ts.map +1 -0
  219. package/dist/strategies/shared/retry.d.ts +51 -0
  220. package/dist/strategies/shared/retry.d.ts.map +1 -0
  221. package/dist/strategies/shared/state.d.ts +117 -0
  222. package/dist/strategies/shared/state.d.ts.map +1 -0
  223. package/dist/strategies/shared/timing.d.ts +53 -0
  224. package/dist/strategies/shared/timing.d.ts.map +1 -0
  225. package/dist/strategies/shared/watcher.d.ts +37 -0
  226. package/dist/strategies/shared/watcher.d.ts.map +1 -0
  227. package/dist/strategies/use-auto-request.d.ts +77 -0
  228. package/dist/strategies/use-auto-request.d.ts.map +1 -0
  229. package/dist/strategies/use-download.d.ts +103 -0
  230. package/dist/strategies/use-download.d.ts.map +1 -0
  231. package/dist/strategies/use-fetcher.d.ts +52 -0
  232. package/dist/strategies/use-fetcher.d.ts.map +1 -0
  233. package/dist/strategies/use-pagination.d.ts +101 -0
  234. package/dist/strategies/use-pagination.d.ts.map +1 -0
  235. package/dist/strategies/use-request.d.ts +50 -0
  236. package/dist/strategies/use-request.d.ts.map +1 -0
  237. package/dist/strategies/use-retriable-request.d.ts +46 -0
  238. package/dist/strategies/use-retriable-request.d.ts.map +1 -0
  239. package/dist/strategies/use-sse.d.ts +103 -0
  240. package/dist/strategies/use-sse.d.ts.map +1 -0
  241. package/dist/strategies/use-token-auth.d.ts +88 -0
  242. package/dist/strategies/use-token-auth.d.ts.map +1 -0
  243. package/dist/strategies/use-uploader.d.ts +88 -0
  244. package/dist/strategies/use-uploader.d.ts.map +1 -0
  245. package/dist/strategies/use-watcher.d.ts +69 -0
  246. package/dist/strategies/use-watcher.d.ts.map +1 -0
  247. package/dist/typings/adapter.d.ts +61 -0
  248. package/dist/typings/adapter.d.ts.map +1 -0
  249. package/dist/typings/api.d.ts +122 -0
  250. package/dist/typings/api.d.ts.map +1 -0
  251. package/dist/typings/args.d.ts +51 -0
  252. package/dist/typings/args.d.ts.map +1 -0
  253. package/dist/typings/index.d.ts +8 -12
  254. package/dist/typings/index.d.ts.map +1 -0
  255. package/dist/typings/meta.d.ts +44 -0
  256. package/dist/typings/meta.d.ts.map +1 -0
  257. package/dist/typings/plugin.d.ts +114 -0
  258. package/dist/typings/plugin.d.ts.map +1 -0
  259. package/dist/typings/response.d.ts +118 -0
  260. package/dist/typings/response.d.ts.map +1 -0
  261. package/dist/typings/server.d.ts +83 -0
  262. package/dist/typings/server.d.ts.map +1 -0
  263. package/dist/typings/stream.d.ts +150 -0
  264. package/dist/typings/stream.d.ts.map +1 -0
  265. package/dist/utils/download.d.ts +97 -0
  266. package/dist/utils/download.d.ts.map +1 -0
  267. package/dist/utils/emitter.d.ts +36 -0
  268. package/dist/utils/emitter.d.ts.map +1 -0
  269. package/dist/utils/index.d.ts +6 -1
  270. package/dist/utils/index.d.ts.map +1 -0
  271. package/dist/utils/is.d.ts +22 -0
  272. package/dist/utils/is.d.ts.map +1 -0
  273. package/dist/utils/object.d.ts +44 -0
  274. package/dist/utils/object.d.ts.map +1 -0
  275. package/dist/utils/url.d.ts +44 -0
  276. package/dist/utils/url.d.ts.map +1 -0
  277. package/package.json +90 -27
  278. package/README_EN.md +0 -607
  279. package/dist/cache/index.d.ts +0 -9
  280. package/dist/cache/indexDBCache.d.ts +0 -13
  281. package/dist/cache/localstorageCache.d.ts +0 -10
  282. package/dist/cache/memoryCache.d.ts +0 -11
  283. package/dist/core/index.d.ts +0 -4
  284. package/dist/core/snailApi.d.ts +0 -22
  285. package/dist/core/snailMethod.d.ts +0 -49
  286. package/dist/core/snailServer.d.ts +0 -35
  287. package/dist/core/snailSse.d.ts +0 -20
  288. package/dist/decorators/cache.d.ts +0 -15
  289. package/dist/decorators/method.d.ts +0 -38
  290. package/dist/decorators/sse.d.ts +0 -30
  291. package/dist/decorators/strategy.d.ts +0 -10
  292. package/dist/decorators/versioning.d.ts +0 -16
  293. package/dist/eventEmmit/index.d.ts +0 -1
  294. package/dist/eventEmmit/snail.event.d.ts +0 -10
  295. package/dist/snail-api.js +0 -4868
  296. package/dist/snail-api.umd.cjs +0 -4872
  297. package/dist/strategies/jwtStrategy.d.ts +0 -4
  298. package/dist/typings/api.option.d.ts +0 -10
  299. package/dist/typings/apiProxy.d.ts +0 -8
  300. package/dist/typings/cache.management.option.d.ts +0 -25
  301. package/dist/typings/cache.type.d.ts +0 -23
  302. package/dist/typings/content.type.d.ts +0 -5
  303. package/dist/typings/request.body.d.ts +0 -3
  304. package/dist/typings/response.data.d.ts +0 -13
  305. package/dist/typings/snail.event.d.ts +0 -6
  306. package/dist/typings/snail.method.d.ts +0 -14
  307. package/dist/typings/snail.option.d.ts +0 -16
  308. package/dist/typings/sse.d.ts +0 -15
  309. package/dist/typings/strategy.d.ts +0 -5
  310. package/dist/typings/versioning.option.d.ts +0 -30
  311. package/dist/utils/function.d.ts +0 -31
  312. package/dist/versioning/index.d.ts +0 -1
  313. package/dist/versioning/versioning.d.ts +0 -12
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Static request headers.
3
+ *
4
+ * Works on an api class and on a single method; the two levels merge, with the
5
+ * method winning:
6
+ *
7
+ * ```ts
8
+ * @Api("/user")
9
+ * @Header({ "x-client": "web" })
10
+ * class UserApi {
11
+ * @Get("/secret")
12
+ * @Header({ "x-scope": "admin" })
13
+ * secret() {}
14
+ * }
15
+ * // → x-client: web, x-scope: admin
16
+ * ```
17
+ *
18
+ * For a header whose value comes from an argument, use the `@HeaderValue()`
19
+ * parameter decorator.
20
+ */
21
+ export declare function Header(record: Record<string, unknown>): ClassDecorator & MethodDecorator;
22
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/decorators/header.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,GAAG,eAAe,CAIxF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Built-in decorators.
3
+ *
4
+ * Everything the request layer exposes as a decorator is re-exported from here,
5
+ * so `import { Get, Post, Query } from "@snail-js/api"` and
6
+ * `import { Get, Post, Query } from "@snail-js/api/decorators"` are the same
7
+ * thing.
8
+ */
9
+ export { Api } from "./api.js";
10
+ export { Server } from "./server.js";
11
+ export { Delete, Get, Head, Options, Patch, Post, Put, Request, type RequestMethodOptions } from "./methods.js";
12
+ export { Data, HeaderParam, HeaderValue, Params, Query, createParamDecoratorFor, defineParamDescriptor, normalizeParamInput, type ParamDecoratorInput } from "./args.js";
13
+ export { Header } from "./header.js";
14
+ export { DownloadProgress, UploadProgress, type SnailProgressCallback } from "./progress.js";
15
+ export { HttpStream, OnSseError, OnSseOpen, OnWsClose, OnWsError, OnWsMessage, OnWsOpen, Sse, SseEvent, WebSocket, Ws, type SnailSseHandlers, type SnailWsHandlers } from "./stream.js";
16
+ export { createClassDecorator, createMethodDecorator, createParamDecorator, createPropertyDecorator, customMetadataKey, getClassMetadata, getMethodMetadata, getOwnMethodMetadata } from "./custom.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,IAAI,EACJ,OAAO,EACP,KAAK,EACL,IAAI,EACJ,GAAG,EACH,OAAO,EACP,KAAK,oBAAoB,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,IAAI,EACJ,WAAW,EACX,WAAW,EACX,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,mBAAmB,EACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,GAAG,EACH,QAAQ,EACR,SAAS,EACT,EAAE,EACF,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { SnailMethodDecoratorOptions, SnailMethodType } from "../typings/api.js";
2
+ /** Options accepted by every request-method decorator. */
3
+ export interface RequestMethodOptions extends SnailMethodDecoratorOptions {
4
+ }
5
+ /**
6
+ * Build one request-method decorator.
7
+ *
8
+ * Decorated methods are never executed: `createApi` replaces them with a factory
9
+ * that returns a request object. Their body exists purely to declare the argument
10
+ * and return types, so `return null!` (or nothing at all) is the convention.
11
+ *
12
+ * Applying two request-method decorators to one method is an error and throws
13
+ * while the class is being defined, which is the earliest possible moment.
14
+ */
15
+ declare function createRequestMethod(method: SnailMethodType): (path?: string, options?: RequestMethodOptions) => MethodDecorator;
16
+ /** `GET` request. */
17
+ export declare const Get: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
18
+ /** `POST` request. */
19
+ export declare const Post: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
20
+ /** `PUT` request. */
21
+ export declare const Put: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
22
+ /** `DELETE` request. */
23
+ export declare const Delete: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
24
+ /** `PATCH` request. */
25
+ export declare const Patch: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
26
+ /** `HEAD` request. */
27
+ export declare const Head: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
28
+ /** `OPTIONS` request. */
29
+ export declare const Options: (path?: string, options?: RequestMethodOptions) => MethodDecorator;
30
+ /** Alias kept for symmetry with `axios.request` style naming. */
31
+ export declare const Request: typeof createRequestMethod;
32
+ export {};
33
+ //# sourceMappingURL=methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../src/decorators/methods.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAC3B,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAIxB,0DAA0D;AAC1D,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B;CAAG;AAE5E;;;;;;;;;GASG;AACH,iBAAS,mBAAmB,CAAC,MAAM,EAAE,eAAe,6BAGvC,oBAAoB,KAC5B,eAAe,CAkCnB;AAED,qBAAqB;AACrB,eAAO,MAAM,GAAG,4BAtCH,oBAAoB,KAC5B,eAqCwC,CAAC;AAC9C,sBAAsB;AACtB,eAAO,MAAM,IAAI,4BAxCJ,oBAAoB,KAC5B,eAuC0C,CAAC;AAChD,qBAAqB;AACrB,eAAO,MAAM,GAAG,4BA1CH,oBAAoB,KAC5B,eAyCwC,CAAC;AAC9C,wBAAwB;AACxB,eAAO,MAAM,MAAM,4BA5CN,oBAAoB,KAC5B,eA2C8C,CAAC;AACpD,uBAAuB;AACvB,eAAO,MAAM,KAAK,4BA9CL,oBAAoB,KAC5B,eA6C4C,CAAC;AAClD,sBAAsB;AACtB,eAAO,MAAM,IAAI,4BAhDJ,oBAAoB,KAC5B,eA+C0C,CAAC;AAChD,yBAAyB;AACzB,eAAO,MAAM,OAAO,4BAlDP,oBAAoB,KAC5B,eAiDgD,CAAC;AAEtD,iEAAiE;AACjE,eAAO,MAAM,OAAO,4BAAsB,CAAC"}
@@ -1,6 +1,24 @@
1
- import "reflect-metadata";
2
- import { AxiosProgressEvent } from "axios";
3
- export declare const UPLOAD_PROGRESS_KEY: unique symbol;
4
- export declare const UploadProgress: (handler: (progressEvent: AxiosProgressEvent) => void) => (target: any, propertyKey: string) => void;
5
- export declare const DOWNLOAD_PROGRESS_KEY: unique symbol;
6
- export declare const DownloadProgress: (handler: (progressEvent: AxiosProgressEvent) => void) => (target: any, propertyKey: string) => void;
1
+ import type { AxiosProgressEvent } from "axios";
2
+ /** Signature of an upload/download progress callback. */
3
+ export type SnailProgressCallback = (event: AxiosProgressEvent) => void;
4
+ /**
5
+ * Report upload progress for the decorated method.
6
+ *
7
+ * ```ts
8
+ * @Post("/upload")
9
+ * @UploadProgress((e) => { if (e.total) bar.value = e.loaded / e.total; })
10
+ * upload(@Data() file: FormData) {}
11
+ * ```
12
+ *
13
+ * Progress events require the `xhr` adapter; axios' `fetch` adapter cannot
14
+ * report them. Set `adapter: "xhr"` on the method or the server when using this
15
+ * decorator in a browser.
16
+ */
17
+ export declare function UploadProgress(callback: SnailProgressCallback): MethodDecorator;
18
+ /**
19
+ * Report download progress for the decorated method.
20
+ *
21
+ * @see {@link UploadProgress} for the adapter caveat.
22
+ */
23
+ export declare function DownloadProgress(callback: SnailProgressCallback): MethodDecorator;
24
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/decorators/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAOhD,yDAAyD;AACzD,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,qBAAqB,GAAG,eAAe,CAI/E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,eAAe,CAIjF"}
@@ -1,9 +1,30 @@
1
- import "reflect-metadata";
2
- import { SnailOption } from "../typings";
3
- export declare const SERVER_CONFIG_KEY: unique symbol;
1
+ import type { SnailServerOptions } from "../typings/server.js";
4
2
  /**
5
- * 装饰一个继承Snail class,创建后端交互基本实例
6
- * @param config @type SnailOption
7
- * @returns
3
+ * Declare the options of a server class.
4
+ *
5
+ * ```ts
6
+ * @Server({ baseURL: "/api", timeout: 5000 })
7
+ * class BackEnd extends SnailServer {}
8
+ * ```
9
+ *
10
+ * The shorthand form is equivalent to `{ baseURL }`:
11
+ *
12
+ * ```ts
13
+ * @Server("/api")
14
+ * class BackEnd extends SnailServer {}
15
+ * ```
16
+ *
17
+ * Applying `@Server` twice merges the options, and the **outermost decorator
18
+ * wins** — decorators are evaluated bottom-up, so the one written furthest from
19
+ * the class is applied last:
20
+ *
21
+ * ```ts
22
+ * @Server({ timeout: 30000 }) // applied last → this timeout wins
23
+ * @Server({ baseURL: "/api" })
24
+ * class BackEnd extends SnailServer {}
25
+ * // → { baseURL: "/api", timeout: 30000 }
26
+ * ```
8
27
  */
9
- export declare const Server: (config: SnailOption) => (target: any) => void;
28
+ export declare function Server(baseURL: string): ClassDecorator;
29
+ export declare function Server(options: SnailServerOptions): ClassDecorator;
30
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/decorators/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAI5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;AACxD,wBAAgB,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,CAAC"}
@@ -0,0 +1,113 @@
1
+ import type { SnailHttpStreamOptions, SnailSseOptions, SnailWsOptions } from "../typings/stream.js";
2
+ /**
3
+ * Streaming / realtime decorators.
4
+ *
5
+ * Three transports, one idea: the decorated members only *describe* handlers,
6
+ * and `Service.createSse(...)` / `createWebSocket(...)` / a `@HttpStream` method
7
+ * turn them into a live connection.
8
+ */
9
+ /** Handler names recorded for an SSE class. */
10
+ export interface SnailSseHandlers {
11
+ open: Array<(event: Event) => void>;
12
+ error: Array<(event: Event) => void>;
13
+ events: Array<{
14
+ event: string;
15
+ handler: (message: unknown) => void;
16
+ }>;
17
+ }
18
+ /**
19
+ * Declare a Server-Sent Events endpoint.
20
+ *
21
+ * ```ts
22
+ * @Sse("/events")
23
+ * class Ticker {
24
+ * @OnSseOpen()
25
+ * open() { console.log("connected"); }
26
+ *
27
+ * @OnSseError()
28
+ * failed(event: Event) { console.warn("lost", event); }
29
+ *
30
+ * @SseEvent() // the default `message` event
31
+ * message(message: SnailSseMessage) {}
32
+ *
33
+ * @SseEvent("tick")
34
+ * tick(message: SnailSseMessage) {}
35
+ * }
36
+ *
37
+ * const ticker = Service.createSse(Ticker);
38
+ * const connection = ticker.open();
39
+ *
40
+ * // Decorate with @SseEvent, or subscribe on the connection itself:
41
+ * const off = connection.on("tick", (message) => console.log(message.data));
42
+ * connection.close();
43
+ * ```
44
+ *
45
+ * The transport is `fetch` + a stream reader rather than `EventSource`: that is
46
+ * what makes request headers, `POST` and `withCredentials` possible, none of which
47
+ * `EventSource` supports.
48
+ */
49
+ export declare function Sse(path: string, options?: SnailSseOptions): ClassDecorator;
50
+ /** Register a handler for the SSE `open` event. */
51
+ export declare function OnSseOpen(): MethodDecorator;
52
+ /** Register a handler for the SSE `error` event. */
53
+ export declare function OnSseError(): MethodDecorator;
54
+ /**
55
+ * Register a handler for a named SSE event.
56
+ *
57
+ * @param event event name; omit for the default `message` event
58
+ */
59
+ export declare function SseEvent(event?: string): MethodDecorator;
60
+ /** Handler names recorded for a WebSocket class. */
61
+ export interface SnailWsHandlers {
62
+ open: Array<(event: Event) => void>;
63
+ message: Array<(event: MessageEvent) => void>;
64
+ close: Array<(event: CloseEvent) => void>;
65
+ error: Array<(event: Event) => void>;
66
+ }
67
+ /**
68
+ * Declare a WebSocket endpoint.
69
+ *
70
+ * ```ts
71
+ * @WebSocket("/ws")
72
+ * class ChatSocket {
73
+ * @OnWsOpen() connected() {}
74
+ * @OnWsMessage() incoming(event: MessageEvent) {}
75
+ * @OnWsClose() gone(event: CloseEvent) {}
76
+ * @OnWsError() failed(event: Event) {}
77
+ * }
78
+ *
79
+ * const chat = Service.createWebSocket(ChatSocket);
80
+ * const socket = chat.open();
81
+ * socket.send({ hello: "world" });
82
+ * ```
83
+ */
84
+ export declare function WebSocket(path: string, options?: SnailWsOptions): ClassDecorator;
85
+ /** Register a handler for the socket `open` event. */
86
+ export declare function OnWsOpen(): MethodDecorator;
87
+ /** Register a handler for incoming messages. */
88
+ export declare function OnWsMessage(): MethodDecorator;
89
+ /** Register a handler for the socket `close` event. */
90
+ export declare function OnWsClose(): MethodDecorator;
91
+ /** Register a handler for the socket `error` event. */
92
+ export declare function OnWsError(): MethodDecorator;
93
+ /** Short alias for {@link WebSocket}. */
94
+ export declare const Ws: typeof WebSocket;
95
+ /**
96
+ * Declare a streaming HTTP endpoint.
97
+ *
98
+ * ```ts
99
+ * @Api("/ai")
100
+ * class AiApi {
101
+ * @HttpStream("/chat", { method: "POST" })
102
+ * chat(@Data() prompt: { text: string }) {}
103
+ * }
104
+ *
105
+ * const stream = aiApi.chat({ text: "hi" });
106
+ * for await (const chunk of stream.stream()) { render(chunk); }
107
+ * ```
108
+ *
109
+ * Unlike `@Get`/`@Post`, the proxied method returns a stream controller instead
110
+ * of a `SnailMethod`, so no envelope validation happens.
111
+ */
112
+ export declare function HttpStream(path?: string, options?: SnailHttpStreamOptions): MethodDecorator;
113
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/decorators/stream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,cAAc,EACf,MAAM,mBAAmB,CAAC;AAW3B;;;;;;GAMG;AAIH,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;IACpC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,cAAc,CAY/E;AAED,mDAAmD;AACnD,wBAAgB,SAAS,IAAI,eAAe,CAI3C;AAED,oDAAoD;AACpD,wBAAgB,UAAU,IAAI,eAAe,CAI5C;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,SAAY,GAAG,eAAe,CAM3D;AAiCD,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC;IAC9C,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,cAAc,CAYpF;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,IAAI,eAAe,CAE1C;AAED,gDAAgD;AAChD,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED,uDAAuD;AACvD,wBAAgB,SAAS,IAAI,eAAe,CAE3C;AAED,uDAAuD;AACvD,wBAAgB,SAAS,IAAI,eAAe,CAE3C;AA8BD,yCAAyC;AACzC,eAAO,MAAM,EAAE,kBAAY,CAAC;AAI5B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CACxB,IAAI,SAAK,EACT,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAYjB"}
@@ -0,0 +1,19 @@
1
+ import type { SnailLogLevel, SnailServerOptions } from "../typings/server.js";
2
+ /** Default key names of the assumed backend envelope. */
3
+ export declare const DEFAULT_RESPONSE_KEYS: {
4
+ readonly code: "code";
5
+ readonly message: "message";
6
+ readonly data: "data";
7
+ };
8
+ /** Business codes accepted when no `validateCode` is configured. */
9
+ export declare const DEFAULT_ACCEPTED_CODES: readonly number[];
10
+ /** Fully resolved defaults for `@Server(...)`. */
11
+ export declare const DEFAULT_SERVER_OPTIONS: Required<Pick<SnailServerOptions, "name" | "baseURL" | "timeout" | "codeKey" | "messageKey" | "dataKey" | "logLevel" | "coerceJSONString">>;
12
+ /** Numeric ordering of log levels, so `logLevel` can be compared. */
13
+ export declare const LOG_LEVEL_WEIGHT: Record<SnailLogLevel, number>;
14
+ /** Default options for `@Api(...)`. */
15
+ export declare const DEFAULT_API_OPTIONS: {
16
+ readonly url: "";
17
+ readonly name: "";
18
+ };
19
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/default/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,yDAAyD;AACzD,eAAO,MAAM,qBAAqB;aAChC,IAAI,EAAE,MAAM;aACZ,OAAO,EAAE,SAAS;aAClB,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,oEAAoE;AACpE,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAa,CAAC;AAElE,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,IAAI,CACF,kBAAkB,EAChB,MAAM,GACN,SAAS,GACT,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,GACV,kBAAkB,CACrB,CAUO,CAAC;AAEX,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAM1D,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,mBAAmB;aAC9B,GAAG,EAAE,EAAE;aACP,IAAI,EAAE,EAAE;CACA,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Base class of every error `@snail-js/api` throws.
3
+ *
4
+ * A stable `code` is attached to each subclass so application code can branch
5
+ * on `error.code` without importing the class, and so the localization layer can
6
+ * render a translated message.
7
+ */
8
+ export declare class SnailError extends Error {
9
+ /** Machine-readable, stable identifier of this error kind. */
10
+ readonly code: string;
11
+ /** The underlying cause, when one exists (usually an `AxiosError`). */
12
+ readonly cause: unknown;
13
+ constructor(message: string, options?: {
14
+ code?: string;
15
+ cause?: unknown;
16
+ });
17
+ /** `true` for every error originating from this library. */
18
+ static isSnailError(value: unknown): value is SnailError;
19
+ }
20
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/error/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,SAAkB,KAAK,EAAE,OAAO,CAAC;IAEjC,YACE,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAUjD;IAED,4DAA4D;IAC5D,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEvD;CACF"}
@@ -0,0 +1,14 @@
1
+ import { SnailError } from "./base.js";
2
+ /**
3
+ * Thrown when a decorator is applied incorrectly — two request-method decorators
4
+ * on one method, a parameter decorator on a constructor, and so on.
5
+ *
6
+ * These are programmer errors and always surface eagerly, as early as the
7
+ * decorated class is evaluated.
8
+ */
9
+ export declare class SnailDecoratorError extends SnailError {
10
+ constructor(message: string, options?: {
11
+ cause?: unknown;
12
+ });
13
+ }
14
+ //# sourceMappingURL=decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/error/decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAE7D;CACF"}
@@ -0,0 +1,14 @@
1
+ import { SnailError } from "./base.js";
2
+ /**
3
+ * Thrown when a plugin lifecycle chain is driven illegally — calling `next()`
4
+ * twice from one hook, or calling `next()` after the chain already settled.
5
+ *
6
+ * This is the Koa `compose` invariant, and it catches a very common plugin bug:
7
+ * a hook that both `await next()` *and* falls through into a second `next()`.
8
+ */
9
+ export declare class SnailHookError extends SnailError {
10
+ /** Lifecycle hook that misbehaved, e.g. `"beforeRequest"`. */
11
+ readonly hook: string;
12
+ constructor(hook: string, message: string);
13
+ }
14
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/error/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAGxC;CACF"}
@@ -0,0 +1,8 @@
1
+ export { SnailError } from "./base.js";
2
+ export { SnailDecoratorError } from "./decorator.js";
3
+ export { SnailHookError } from "./hook.js";
4
+ export { SnailOptionsError } from "./options.js";
5
+ export { SnailPluginError } from "./plugin.js";
6
+ export { SnailHttpError, SnailResponseError } from "./response.js";
7
+ export { SnailCancelledError, SnailRequestError, SnailTimeoutError } from "./request.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { SnailError } from "./base.js";
2
+ /**
3
+ * Thrown when a required configuration block is missing — a server class
4
+ * without `@Server()`, an api class without `@Api()`, or a value that failed
5
+ * one of the option guards.
6
+ */
7
+ export declare class SnailOptionsError extends SnailError {
8
+ constructor(message: string, options?: {
9
+ cause?: unknown;
10
+ });
11
+ }
12
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/error/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAE7D;CACF"}
@@ -0,0 +1,11 @@
1
+ import { SnailError } from "./base.js";
2
+ /** Thrown for plugin registration, dependency and uninstall failures. */
3
+ export declare class SnailPluginError extends SnailError {
4
+ /** Name of the plugin the failure belongs to, when known. */
5
+ readonly pluginName: string | undefined;
6
+ constructor(message: string, options?: {
7
+ pluginName?: string;
8
+ cause?: unknown;
9
+ });
10
+ }
11
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/error/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,yEAAyE;AACzE,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,YACE,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAIvD;CACF"}
@@ -0,0 +1,29 @@
1
+ import { SnailError } from "./base.js";
2
+ /** Thrown when a request never reached the server (DNS, offline, CORS, …). */
3
+ export declare class SnailRequestError extends SnailError {
4
+ constructor(message: string, options?: {
5
+ cause?: unknown;
6
+ });
7
+ }
8
+ /** Thrown when a request exceeded the configured timeout. */
9
+ export declare class SnailTimeoutError extends SnailError {
10
+ /** Configured timeout, in milliseconds. */
11
+ readonly timeout: number | undefined;
12
+ constructor(message: string, options?: {
13
+ timeout?: number;
14
+ cause?: unknown;
15
+ });
16
+ }
17
+ /**
18
+ * Thrown when a request is cancelled — by `method.abort()`, by a strategy
19
+ * discarding a stale request, or by an `AbortSignal` the caller supplied.
20
+ *
21
+ * Cancellation is *expected* control flow, not a failure, so strategies
22
+ * deliberately swallow this error kind.
23
+ */
24
+ export declare class SnailCancelledError extends SnailError {
25
+ constructor(message?: string, options?: {
26
+ cause?: unknown;
27
+ });
28
+ }
29
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/error/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,8EAA8E;AAC9E,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAE7D;CACF;AAED,6DAA6D;AAC7D,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAG/E;CACF;AAED;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,YAAY,OAAO,SAAsB,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAE3E;CACF"}
@@ -0,0 +1,36 @@
1
+ import { SnailError } from "./base.js";
2
+ /**
3
+ * Thrown when the backend answered with HTTP success but a business status code
4
+ * that the configured {@link ServerOptions.validateCode} rule rejected.
5
+ *
6
+ * The whole parsed body is preserved on `payload`, so an application error
7
+ * handler can still read `payload.message` / `payload.data`.
8
+ */
9
+ export declare class SnailResponseError<T = unknown> extends SnailError {
10
+ /** Business status code reported by the backend. */
11
+ readonly businessCode: number | string | undefined;
12
+ /** Full parsed response body. */
13
+ readonly payload: T;
14
+ constructor(message: string, options: {
15
+ businessCode?: number | string;
16
+ payload: T;
17
+ cause?: unknown;
18
+ });
19
+ }
20
+ /**
21
+ * Thrown when the transport failed: non-2xx status, network failure, timeout or
22
+ * abort. `status` is present only when a response actually came back.
23
+ */
24
+ export declare class SnailHttpError<T = unknown> extends SnailError {
25
+ readonly status: number | undefined;
26
+ readonly statusText: string | undefined;
27
+ readonly payload: T | undefined;
28
+ constructor(message: string, options?: {
29
+ status?: number;
30
+ statusText?: string;
31
+ payload?: T;
32
+ cause?: unknown;
33
+ code?: string;
34
+ });
35
+ }
36
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/error/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;;GAMG;AACH,qBAAa,kBAAkB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,UAAU;IAC7D,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAEnD,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAEpB,YACE,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAKzE;CACF;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,UAAU;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;IAEhC,YACE,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACV,EAMP;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,56 @@
1
- export * from "./core";
2
- export { Server } from "./decorators/server";
3
- export { Api } from "./decorators/api";
4
- export { Get, Put, Post, Patch, Options, Head, Delete, } from "./decorators/method";
5
- export { NoCache, HitSource } from "./decorators/cache";
6
- export { Params, Data, Query } from "./decorators/args";
7
- export { UseStrategy } from "./decorators/strategy";
8
- export { Versioning, Version } from "./decorators/versioning";
9
- export { Sse, SseEvent, OnSseError, OnSseOpen } from "./decorators/sse";
10
- export * from "./typings";
11
- export * from "./utils";
1
+ /**
2
+ * `@snail-js/api` a decorator-driven, plugin-first HTTP client built on axios.
3
+ *
4
+ * ## The two rules
5
+ *
6
+ * 1. **The core is always imported from the package root.**
7
+ * ```ts
8
+ * import { SnailServer, Server, Api, Get, Post, Query, Data, Params } from "@snail-js/api";
9
+ * ```
10
+ * 2. **Optional behaviour is imported on demand.**
11
+ * ```ts
12
+ * import { Cache, Interceptor, Version, VueAdapter } from "@snail-js/api/plugins";
13
+ * import { useRequest, usePagination } from "@snail-js/api/strategies";
14
+ * ```
15
+ *
16
+ * Keeping the plugin and strategy entry points separate is what lets a bundler
17
+ * drop the cache, the validators and every framework adapter from an application
18
+ * that does not use them.
19
+ *
20
+ * ## Everything is a plugin
21
+ *
22
+ * The core owns three things and nothing else: the metadata decorators write, the
23
+ * request pipeline, and the plugin lifecycle. Caching, versioning, interceptors,
24
+ * validation, transformation and the Vue/React adapters are all built on the same
25
+ * public API a third party gets — see `createPlugin` and `docs/guide/plugin-lifecycle.md`.
26
+ *
27
+ * @packageDocumentation
28
+ */
29
+ export { SnailServer } from "./core/server.js";
30
+ export { SnailMethod } from "./core/method.js";
31
+ export type { SnailCodeErrorEvent, SnailMethodEventMap, SnailMethodInit } from "./core/method.js";
32
+ export { SnailContext } from "./core/context.js";
33
+ export type { SnailContextInit } from "./core/context.js";
34
+ export { PluginManager } from "./core/plugin-manager.js";
35
+ export type { RegisteredPlugin } from "./core/plugin-manager.js";
36
+ export { StateBag } from "./core/state-bag.js";
37
+ export { createLogger } from "./core/logger.js";
38
+ export type { SnailLogger } from "./core/logger.js";
39
+ export { composeChain, createPlugin, definePlugin } from "./core/plugin.js";
40
+ export type { BoundHook, PluginDefinition, PluginHooks, PluginSetupApi } from "./core/plugin.js";
41
+ export { appendMetadata, clearMetadataRegistry, collectMethodKeys, defineMetadata, deleteMetadata, getMetadata, getOwnMetadata, hasMetadata, mergeMetadata, resolveOwner } from "./core/metadata.js";
42
+ export * from "./core/metadata.keys.js";
43
+ export * from "./decorators/index.js";
44
+ export { SnailCancelledError, SnailDecoratorError, SnailError, SnailHookError, SnailHttpError, SnailOptionsError, SnailPluginError, SnailRequestError, SnailResponseError, SnailTimeoutError } from "./error/index.js";
45
+ export { Localization, en, getLocale, languages, localization, registerMessages, setLocale, t, zh } from "./locale/index.js";
46
+ export { DEFAULT_ACCEPTED_CODES, DEFAULT_API_OPTIONS, DEFAULT_RESPONSE_KEYS, DEFAULT_SERVER_OPTIONS, LOG_LEVEL_WEIGHT } from "./default/options.js";
47
+ export { Emitter } from "./utils/emitter.js";
48
+ export type { DeepPartial } from "./utils/index.js";
49
+ export { filenameFromDisposition, triggerBlobDownload, triggerDownload } from "./utils/download.js";
50
+ export type { TriggerDownloadOptions, TriggerDownloadResult } from "./utils/download.js";
51
+ export { buildRequestURL, capitalize, deepMerge, deferred, isAbsoluteURL, isBinaryBody, isBrowser, isDefined, isFunction, isObject, isPlainObject, isPromise, joinURL, omit, omitUndefined, pathParamNames, pick, replacePathParams, shortHash, stableStringify, stripQuery, tryCatch } from "./utils/index.js";
52
+ export { hasParamResolver, paramResolvers, paramSources, registerParamResolver } from "./core/args.js";
53
+ export type { IsRawPayload, ResolvedServerOptions, SnailApiOptions, SnailApiProxy, SnailBuiltinParamSource, SnailCacheHitCallback, SnailCodeErrorCallback, SnailCodeOf, SnailCodeValidator, SnailEnvelope, SnailEnvelopeSchema, SnailErrorCallback, SnailFinishCallback, SnailHookKind, SnailHookName, SnailLogLevel, SnailMessageOf, SnailMeta, SnailMethodDecoratorOptions, SnailMethodMeta, SnailMethodOptions, SnailMethodType, SnailMethodTypeLower, SnailNext, SnailParamDescriptor, SnailParamRecord, SnailParamResolver, SnailParamResolverInput, SnailParamSource, SnailPayloadOf, SnailPlugin, SnailPluginInstallContext, SnailPluginObject, SnailRawPayload, SnailResponseKeys, SnailResult, SnailSendOptions, SnailServerOptions, SnailStateAdapter, SnailStateRef, SnailStrategyCommonOptions, SnailSuccessCallback } from "./typings/index.js";
54
+ export type { SnailConnection, SnailHttpStreamConnection, SnailHttpStreamOptions, SnailReconnectPolicy, SnailSocketConnection, SnailSseConnection, SnailSseEndpoint, SnailSseMessage, SnailSseOptions, SnailWsEndpoint, SnailWsOptions } from "./typings/stream.js";
55
+ export type { SnailLanguage, SnailLocaleInput, SnailMessages } from "./locale/index.js";
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,cAAc,sBAAsB,CAAC;AAIrC,cAAc,cAAc,CAAC;AAI7B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAIjB,OAAO,EACL,YAAY,EACZ,EAAE,EACF,SAAS,EACT,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,CAAC,EACD,EAAE,EACH,MAAM,UAAU,CAAC;AAIlB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,UAAU,EACV,SAAS,EACT,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,EACT,OAAO,EACP,IAAI,EACJ,aAAa,EACb,cAAc,EACd,IAAI,EACJ,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,UAAU,EACV,QAAQ,EACT,MAAM,SAAS,CAAC;AAIjB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAIrB,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,SAAS,EACT,2BAA2B,EAC3B,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}