@mx-space/api-client 0.6.1 → 0.7.0-alpha.1

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 (235) hide show
  1. package/adaptors/axios.ts +36 -0
  2. package/adaptors/umi-request.ts +30 -0
  3. package/build/index.cjs.js +34 -13
  4. package/build/index.cjs.js.map +1 -1
  5. package/build/index.cjs.min.js +1 -1
  6. package/build/index.cjs.min.js.map +1 -1
  7. package/build/index.esm.js +34 -13
  8. package/build/index.esm.js.map +1 -1
  9. package/build/index.esm.min.js +1 -1
  10. package/build/index.esm.min.js.map +1 -1
  11. package/build/index.umd.js +34 -13
  12. package/build/index.umd.js.map +1 -1
  13. package/build/index.umd.min.js +1 -1
  14. package/build/index.umd.min.js.map +1 -1
  15. package/controllers/aggregate.ts +65 -0
  16. package/controllers/base.ts +32 -0
  17. package/controllers/category.ts +107 -0
  18. package/controllers/comment.ts +64 -0
  19. package/controllers/index.ts +66 -0
  20. package/controllers/link.ts +21 -0
  21. package/controllers/note.ts +92 -0
  22. package/controllers/page.ts +59 -0
  23. package/controllers/post.ts +87 -0
  24. package/controllers/project.ts +20 -0
  25. package/controllers/recently.ts +48 -0
  26. package/controllers/say.ts +35 -0
  27. package/controllers/search.ts +101 -0
  28. package/controllers/snippet.ts +31 -0
  29. package/controllers/user.ts +46 -0
  30. package/core/attach-request.ts +43 -0
  31. package/core/client.ts +249 -0
  32. package/core/error.ts +10 -0
  33. package/core/index.ts +2 -0
  34. package/dtos/comment.ts +9 -0
  35. package/esm/adaptors/axios.d.ts +1 -1
  36. package/esm/adaptors/axios.js +4 -17
  37. package/esm/adaptors/axios.js.map +1 -1
  38. package/esm/adaptors/umi-request.d.ts +1 -1
  39. package/esm/adaptors/umi-request.js.map +1 -1
  40. package/esm/controllers/aggregate.d.ts +9 -4
  41. package/esm/controllers/aggregate.js +2 -2
  42. package/esm/controllers/aggregate.js.map +1 -1
  43. package/esm/controllers/base.d.ts +2 -2
  44. package/esm/controllers/base.js +1 -1
  45. package/esm/controllers/base.js.map +1 -1
  46. package/esm/controllers/category.d.ts +7 -2
  47. package/esm/controllers/category.js +3 -3
  48. package/esm/controllers/category.js.map +1 -1
  49. package/esm/controllers/comment.d.ts +10 -5
  50. package/esm/controllers/comment.js +1 -1
  51. package/esm/controllers/comment.js.map +1 -1
  52. package/esm/controllers/index.js.map +1 -1
  53. package/esm/controllers/link.d.ts +7 -1
  54. package/esm/controllers/link.js +1 -1
  55. package/esm/controllers/link.js.map +1 -1
  56. package/esm/controllers/note.d.ts +10 -5
  57. package/esm/controllers/note.js +2 -2
  58. package/esm/controllers/note.js.map +1 -1
  59. package/esm/controllers/page.d.ts +9 -4
  60. package/esm/controllers/page.js +2 -2
  61. package/esm/controllers/page.js.map +1 -1
  62. package/esm/controllers/post.d.ts +10 -5
  63. package/esm/controllers/post.js +2 -2
  64. package/esm/controllers/post.js.map +1 -1
  65. package/esm/controllers/project.d.ts +6 -1
  66. package/esm/controllers/project.js +1 -1
  67. package/esm/controllers/project.js.map +1 -1
  68. package/esm/controllers/recently.d.ts +8 -2
  69. package/esm/controllers/recently.js +1 -1
  70. package/esm/controllers/recently.js.map +1 -1
  71. package/esm/controllers/say.d.ts +7 -2
  72. package/esm/controllers/say.js +1 -1
  73. package/esm/controllers/say.js.map +1 -1
  74. package/esm/controllers/search.d.ts +41 -11
  75. package/esm/controllers/search.js +3 -3
  76. package/esm/controllers/search.js.map +1 -1
  77. package/esm/controllers/snippet.d.ts +7 -2
  78. package/esm/controllers/snippet.js +1 -1
  79. package/esm/controllers/snippet.js.map +1 -1
  80. package/esm/controllers/user.d.ts +8 -2
  81. package/esm/controllers/user.js +1 -1
  82. package/esm/controllers/user.js.map +1 -1
  83. package/esm/core/{attachRequest.d.ts → attach-request.d.ts} +0 -0
  84. package/esm/core/{attachRequest.js → attach-request.js} +1 -1
  85. package/esm/core/attach-request.js.map +1 -0
  86. package/esm/core/client.d.ts +5 -24
  87. package/esm/core/client.js +29 -8
  88. package/esm/core/client.js.map +1 -1
  89. package/esm/core/error.js.map +1 -1
  90. package/esm/core/index.js.map +1 -1
  91. package/esm/dtos/comment.js.map +1 -1
  92. package/esm/index.js.map +1 -1
  93. package/esm/interfaces/adapter.d.ts +13 -0
  94. package/esm/interfaces/adapter.js +2 -0
  95. package/esm/interfaces/adapter.js.map +1 -0
  96. package/esm/interfaces/client.d.ts +1 -1
  97. package/esm/interfaces/client.js.map +1 -1
  98. package/esm/interfaces/controller.js.map +1 -1
  99. package/esm/interfaces/instance.d.ts +0 -12
  100. package/esm/interfaces/instance.js.map +1 -1
  101. package/esm/interfaces/options.js.map +1 -1
  102. package/esm/interfaces/params.js.map +1 -1
  103. package/esm/interfaces/request.js.map +1 -1
  104. package/esm/models/aggregate.js.map +1 -1
  105. package/esm/models/base.js.map +1 -1
  106. package/esm/models/category.js.map +1 -1
  107. package/esm/models/comment.js.map +1 -1
  108. package/esm/models/index.js.map +1 -1
  109. package/esm/models/link.js.map +1 -1
  110. package/esm/models/note.js.map +1 -1
  111. package/esm/models/page.js.map +1 -1
  112. package/esm/models/post.js.map +1 -1
  113. package/esm/models/project.js.map +1 -1
  114. package/esm/models/recently.js.map +1 -1
  115. package/esm/models/say.js.map +1 -1
  116. package/esm/models/setting.js.map +1 -1
  117. package/esm/models/snippet.js.map +1 -1
  118. package/esm/models/user.js.map +1 -1
  119. package/esm/utils/auto-bind.js.map +1 -1
  120. package/esm/utils/index.d.ts +1 -1
  121. package/esm/utils/index.js +2 -2
  122. package/esm/utils/index.js.map +1 -1
  123. package/index.ts +12 -0
  124. package/interfaces/adapter.ts +30 -0
  125. package/interfaces/client.ts +6 -0
  126. package/interfaces/controller.ts +5 -0
  127. package/interfaces/instance.ts +8 -0
  128. package/interfaces/options.ts +1 -0
  129. package/interfaces/params.ts +4 -0
  130. package/interfaces/request.ts +57 -0
  131. package/lib/adaptors/axios.d.ts +1 -1
  132. package/lib/adaptors/axios.js +4 -17
  133. package/lib/adaptors/axios.js.map +1 -1
  134. package/lib/adaptors/umi-request.d.ts +1 -1
  135. package/lib/adaptors/umi-request.js.map +1 -1
  136. package/lib/controllers/aggregate.d.ts +9 -4
  137. package/lib/controllers/aggregate.js.map +1 -1
  138. package/lib/controllers/base.d.ts +2 -2
  139. package/lib/controllers/base.js.map +1 -1
  140. package/lib/controllers/category.d.ts +7 -2
  141. package/lib/controllers/category.js +1 -1
  142. package/lib/controllers/category.js.map +1 -1
  143. package/lib/controllers/comment.d.ts +10 -5
  144. package/lib/controllers/comment.js.map +1 -1
  145. package/lib/controllers/index.js.map +1 -1
  146. package/lib/controllers/link.d.ts +7 -1
  147. package/lib/controllers/link.js.map +1 -1
  148. package/lib/controllers/note.d.ts +10 -5
  149. package/lib/controllers/note.js +1 -1
  150. package/lib/controllers/note.js.map +1 -1
  151. package/lib/controllers/page.d.ts +9 -4
  152. package/lib/controllers/page.js +1 -1
  153. package/lib/controllers/page.js.map +1 -1
  154. package/lib/controllers/post.d.ts +10 -5
  155. package/lib/controllers/post.js +1 -1
  156. package/lib/controllers/post.js.map +1 -1
  157. package/lib/controllers/project.d.ts +6 -1
  158. package/lib/controllers/project.js.map +1 -1
  159. package/lib/controllers/recently.d.ts +8 -2
  160. package/lib/controllers/recently.js.map +1 -1
  161. package/lib/controllers/say.d.ts +7 -2
  162. package/lib/controllers/say.js.map +1 -1
  163. package/lib/controllers/search.d.ts +41 -11
  164. package/lib/controllers/search.js +2 -2
  165. package/lib/controllers/search.js.map +1 -1
  166. package/lib/controllers/snippet.d.ts +7 -2
  167. package/lib/controllers/snippet.js.map +1 -1
  168. package/lib/controllers/user.d.ts +8 -2
  169. package/lib/controllers/user.js.map +1 -1
  170. package/lib/core/{attachRequest.d.ts → attach-request.d.ts} +0 -0
  171. package/lib/core/{attachRequest.js → attach-request.js} +1 -1
  172. package/lib/core/attach-request.js.map +1 -0
  173. package/lib/core/client.d.ts +5 -24
  174. package/lib/core/client.js +28 -7
  175. package/lib/core/client.js.map +1 -1
  176. package/lib/core/error.js.map +1 -1
  177. package/lib/core/index.js.map +1 -1
  178. package/lib/dtos/comment.js.map +1 -1
  179. package/lib/index.js.map +1 -1
  180. package/lib/interfaces/adapter.d.ts +13 -0
  181. package/lib/interfaces/adapter.js +3 -0
  182. package/lib/interfaces/adapter.js.map +1 -0
  183. package/lib/interfaces/client.d.ts +1 -1
  184. package/lib/interfaces/client.js.map +1 -1
  185. package/lib/interfaces/controller.js.map +1 -1
  186. package/lib/interfaces/instance.d.ts +0 -12
  187. package/lib/interfaces/instance.js.map +1 -1
  188. package/lib/interfaces/options.js.map +1 -1
  189. package/lib/interfaces/params.js.map +1 -1
  190. package/lib/interfaces/request.js.map +1 -1
  191. package/lib/models/aggregate.js.map +1 -1
  192. package/lib/models/base.js.map +1 -1
  193. package/lib/models/category.js.map +1 -1
  194. package/lib/models/comment.js.map +1 -1
  195. package/lib/models/index.js.map +1 -1
  196. package/lib/models/link.js.map +1 -1
  197. package/lib/models/note.js.map +1 -1
  198. package/lib/models/page.js.map +1 -1
  199. package/lib/models/post.js.map +1 -1
  200. package/lib/models/project.js.map +1 -1
  201. package/lib/models/recently.js.map +1 -1
  202. package/lib/models/say.js.map +1 -1
  203. package/lib/models/setting.js.map +1 -1
  204. package/lib/models/snippet.js.map +1 -1
  205. package/lib/models/user.js.map +1 -1
  206. package/lib/utils/auto-bind.js.map +1 -1
  207. package/lib/utils/index.d.ts +1 -1
  208. package/lib/utils/index.js +2 -2
  209. package/lib/utils/index.js.map +1 -1
  210. package/models/aggregate.ts +71 -0
  211. package/models/base.ts +43 -0
  212. package/models/category.ts +25 -0
  213. package/models/comment.ts +37 -0
  214. package/models/index.ts +14 -0
  215. package/models/link.ts +23 -0
  216. package/models/note.ts +37 -0
  217. package/models/page.ts +20 -0
  218. package/models/post.ts +16 -0
  219. package/models/project.ts +12 -0
  220. package/models/recently.ts +7 -0
  221. package/models/say.ts +7 -0
  222. package/models/setting.ts +68 -0
  223. package/models/snippet.ts +18 -0
  224. package/models/user.ts +27 -0
  225. package/package.json +11 -45
  226. package/tsconfig.build.json +6 -0
  227. package/tsconfig.cjs.json +7 -0
  228. package/tsconfig.json +8 -27
  229. package/types/helper.d.ts +3 -0
  230. package/utils/auto-bind.ts +48 -0
  231. package/utils/index.ts +53 -0
  232. package/build/index.d.ts +0 -908
  233. package/esm/core/attachRequest.js.map +0 -1
  234. package/lib/core/attachRequest.js.map +0 -1
  235. package/readme.md +0 -84
@@ -0,0 +1,101 @@
1
+ import { IController } from '~/interfaces/controller'
2
+ import { IRequestHandler, RequestProxyResult } from '~/interfaces/request'
3
+ import { PaginateResult } from '~/models/base'
4
+ import { NoteModel } from '~/models/note'
5
+ import { PostModel } from '~/models/post'
6
+ import { autoBind } from '~/utils/auto-bind'
7
+ import { PageModel } from '..'
8
+ import { HTTPClient } from '../core'
9
+
10
+ declare module '../core/client' {
11
+ interface HTTPClient {
12
+ search: SearchController
13
+ }
14
+ }
15
+
16
+ export type SearchType = 'post' | 'note'
17
+
18
+ export type SearchOption = {
19
+ orderBy?: string
20
+ order?: number
21
+ rawAlgolia?: boolean
22
+ }
23
+ export class SearchController implements IController {
24
+ base = 'search'
25
+ name = 'search'
26
+
27
+ constructor(private readonly client: HTTPClient) {
28
+ autoBind(this)
29
+ }
30
+
31
+ get proxy(): IRequestHandler {
32
+ return this.client.proxy(this.base)
33
+ }
34
+
35
+ search(
36
+ type: 'note',
37
+ keyword: string,
38
+ options?: Omit<SearchOption, 'rawAlgolia'>,
39
+ ): Promise<
40
+ RequestProxyResult<
41
+ PaginateResult<
42
+ Pick<NoteModel, 'modified' | 'id' | 'title' | 'created' | 'nid'>
43
+ >
44
+ >
45
+ >
46
+ search(
47
+ type: 'post',
48
+ keyword: string,
49
+ options?: Omit<SearchOption, 'rawAlgolia'>,
50
+ ): Promise<
51
+ RequestProxyResult<
52
+ PaginateResult<
53
+ Pick<
54
+ PostModel,
55
+ 'modified' | 'id' | 'title' | 'created' | 'slug' | 'category'
56
+ >
57
+ >
58
+ >
59
+ >
60
+ search(
61
+ type: SearchType,
62
+ keyword: string,
63
+ options: Omit<SearchOption, 'rawAlgolia'> = {},
64
+ ): any {
65
+ return this.proxy(type).get({
66
+ params: { keyword, ...options },
67
+ })
68
+ }
69
+ /**
70
+ * 从 algolya 搜索
71
+ * https://www.algolia.com/doc/api-reference/api-methods/search/
72
+ * @param keyword
73
+ * @param options
74
+ * @returns
75
+ */
76
+ searchByAlgolia(keyword: string, options?: SearchOption) {
77
+ return this.proxy('algolia').get<
78
+ RequestProxyResult<
79
+ PaginateResult<
80
+ | (Pick<
81
+ PostModel,
82
+ 'modified' | 'id' | 'title' | 'created' | 'slug' | 'category'
83
+ > & { type: 'post' })
84
+ | (Pick<
85
+ NoteModel,
86
+ 'id' | 'created' | 'id' | 'modified' | 'title' | 'nid'
87
+ > & { type: 'note' })
88
+ | (Pick<
89
+ PageModel,
90
+ 'id' | 'title' | 'created' | 'modified' | 'slug'
91
+ > & { type: 'page' })
92
+ > & {
93
+ /**
94
+ * @see: algoliasearch <https://www.algolia.com/doc/api-reference/api-methods/search/>
95
+ */
96
+ raw?: any
97
+ }
98
+ >
99
+ >({ params: { keyword, ...options } })
100
+ }
101
+ }
@@ -0,0 +1,31 @@
1
+ import { IController } from '~/interfaces/controller'
2
+ import { SnippetModel } from '~/models/snippet'
3
+ import { autoBind } from '~/utils/auto-bind'
4
+ import { HTTPClient } from '../core'
5
+
6
+ declare module '../core/client' {
7
+ interface HTTPClient {
8
+ snippet: SnippetController
9
+ }
10
+ }
11
+
12
+ export class SnippetController implements IController {
13
+ base = 'snippets'
14
+ name = 'snippet'
15
+
16
+ constructor(protected client: HTTPClient) {
17
+ autoBind(this)
18
+ }
19
+
20
+ get proxy() {
21
+ return this.client.proxy(this.base)
22
+ }
23
+
24
+ getById<T = unknown>(id: string) {
25
+ return this.proxy(id).get<SnippetModel<T>>()
26
+ }
27
+
28
+ getByReferenceAndName<T = unknown>(reference: string, name: string) {
29
+ return this.proxy(reference)(name).get<T>()
30
+ }
31
+ }
@@ -0,0 +1,46 @@
1
+ import { IController } from '~/interfaces/controller'
2
+ import { TLogin, UserModel } from '~/models/user'
3
+ import { autoBind } from '~/utils/auto-bind'
4
+ import { HTTPClient } from '../core'
5
+
6
+ declare module '../core/client' {
7
+ interface HTTPClient {
8
+ user: UserController
9
+ master: UserController
10
+ }
11
+ }
12
+
13
+ export class UserController implements IController {
14
+ constructor(private readonly client: HTTPClient) {
15
+ autoBind(this)
16
+ }
17
+
18
+ base = 'master'
19
+
20
+ name = ['user', 'master']
21
+
22
+ public get proxy() {
23
+ return this.client.proxy(this.base)
24
+ }
25
+
26
+ getMasterInfo() {
27
+ return this.proxy.get<UserModel>()
28
+ }
29
+
30
+ login(username: string, password: string) {
31
+ return this.proxy.login.post<TLogin>({
32
+ data: {
33
+ username,
34
+ password,
35
+ },
36
+ })
37
+ }
38
+
39
+ checkTokenValid(token: string) {
40
+ return this.proxy.check_logged.get<{ ok: number; isGuest: boolean }>({
41
+ params: {
42
+ token: 'bearer ' + token.replace(/^Bearer\s/i, ''),
43
+ },
44
+ })
45
+ }
46
+ }
@@ -0,0 +1,43 @@
1
+ import type { HTTPClient } from '.'
2
+
3
+ export function attachRequestMethod<T extends HTTPClient>(target: T) {
4
+ Object.defineProperty(target, '$$get', {
5
+ value: function (url: string, options?: any) {
6
+ // HINT: method get only accept search params;
7
+ const { params = {} } = options
8
+ const qs = handleSearchParams(params)
9
+
10
+ return target.instance.get(url + `${qs ? `${'?' + qs}` : ''}`)
11
+ },
12
+ })
13
+ ;(['put', 'post', 'patch', 'delete'] as const).forEach((method) => {
14
+ Object.defineProperty(target, '$$' + method, {
15
+ value: function (path: string, options?: any) {
16
+ return target.instance[method](path, options)
17
+ },
18
+ })
19
+ })
20
+ }
21
+ // FIXME: only support string value
22
+ function handleSearchParams(obj: URLSearchParams | Record<string, string>) {
23
+ if (!obj && typeof obj !== 'object') {
24
+ throw new TypeError('params must be object.')
25
+ }
26
+
27
+ if (obj instanceof URLSearchParams) {
28
+ return obj.toString()
29
+ }
30
+ const search = new URLSearchParams()
31
+
32
+ Object.entries<any>(obj).forEach(([k, v]) => {
33
+ if (
34
+ typeof v === 'undefined' ||
35
+ Object.prototype.toString.call(v) === '[object Null]'
36
+ ) {
37
+ return
38
+ }
39
+ search.set(k, v)
40
+ })
41
+
42
+ return search.toString()
43
+ }
package/core/client.ts ADDED
@@ -0,0 +1,249 @@
1
+ import camelcaseKeys from 'camelcase-keys'
2
+ import { IRequestAdapter } from '~/interfaces/adapter'
3
+ import { ClientOptions } from '~/interfaces/client'
4
+ import { IController } from '~/interfaces/controller'
5
+ import { RequestOptions } from '~/interfaces/instance'
6
+ import { IRequestHandler, Method } from '~/interfaces/request'
7
+ import { Class } from '~/types/helper'
8
+ import { isPlainObject } from '~/utils'
9
+ import { allContollerNames } from '../controllers'
10
+ import { attachRequestMethod } from './attach-request'
11
+ import { RequestError } from './error'
12
+
13
+ // export interface HTTPClient {
14
+ // aggregate: AggregateController
15
+ // category: CategoryController
16
+ // comment: CommentController
17
+ // link: LinkController
18
+ // note: NoteController
19
+ // page: PageController
20
+ // post: PostController
21
+ // project: ProjectController
22
+ // recently: RecentlyController
23
+ // say: SayController
24
+ // search: SearchController
25
+ // snippet: SnippetController
26
+ // user: UserController
27
+
28
+ // master: HTTPClient['user']
29
+
30
+ // friend: HTTPClient['link']
31
+
32
+ // shorthand: HTTPClient['recently']
33
+ // }
34
+
35
+ const methodPrefix = '_$'
36
+
37
+ export class HTTPClient<T extends IRequestAdapter = IRequestAdapter> {
38
+ private _proxy: IRequestHandler
39
+
40
+ constructor(private _endpoint: string, private _adaptor: T) {
41
+ // super()
42
+ this._endpoint = _endpoint
43
+ .replace(/\/*$/, '')
44
+ .replace('localhost', '127.0.0.1')
45
+ this._proxy = this.buildRoute(this)()
46
+
47
+ this.initGetClient()
48
+
49
+ attachRequestMethod(this)
50
+
51
+ // const proxy = new Proxy(this, {
52
+ // get(target, key, r) {
53
+ // return (
54
+ // Reflect.get(target, key, r) ||
55
+ // (typeof key === 'string' &&
56
+ // Reflect.get(target, methodPrefix + key, r))
57
+ // )
58
+ // },
59
+ // })
60
+
61
+ // return proxy
62
+ }
63
+
64
+ private initGetClient() {
65
+ for (const name of allContollerNames) {
66
+ Object.defineProperty(this, name, {
67
+ get() {
68
+ const client = Reflect.get(this, `${methodPrefix}${name}`)
69
+ if (!client) {
70
+ throw new ReferenceError(
71
+ `${
72
+ name.charAt(0).toUpperCase() + name.slice(1)
73
+ } Client not inject yet, please inject with client.injectClients(...)`,
74
+ )
75
+ }
76
+ return client
77
+ },
78
+ configurable: false,
79
+ enumerable: false,
80
+ })
81
+ }
82
+ }
83
+
84
+ public injectControllers(...Controller: Class<IController>[]): void
85
+ public injectControllers(Controller: Class<IController>[]): void
86
+ public injectControllers(Controller: any, ...rest: any[]) {
87
+ Controller = Array.isArray(Controller) ? Controller : [Controller, ...rest]
88
+ for (const Client of Controller) {
89
+ const cl = new Client(this)
90
+
91
+ if (Array.isArray(cl.name)) {
92
+ for (const name of cl.name) {
93
+ attach.call(this, name, cl)
94
+ }
95
+ } else {
96
+ attach.call(this, cl.name, cl)
97
+ }
98
+ }
99
+
100
+ function attach(this: any, name: string, cl: IController) {
101
+ Object.defineProperty(this, `${methodPrefix}${name.toLowerCase()}`, {
102
+ get() {
103
+ return cl
104
+ },
105
+ enumerable: false,
106
+ configurable: false,
107
+ })
108
+ }
109
+ }
110
+
111
+ get endpoint() {
112
+ return this._endpoint
113
+ }
114
+
115
+ get instance() {
116
+ return this._adaptor
117
+ }
118
+
119
+ public request(options: {
120
+ url: string
121
+ method?: string
122
+ data?: any
123
+ params?: any
124
+ }) {
125
+ return (this as any)['$$' + String(options.method || 'get').toLowerCase()](
126
+ options.url,
127
+ options,
128
+ )
129
+ }
130
+
131
+ public get proxy() {
132
+ return this._proxy
133
+ }
134
+
135
+ private resolveFullPath(path: string) {
136
+ if (!path.startsWith('/')) {
137
+ path = '/' + path
138
+ }
139
+ return `${this.endpoint}${path}`
140
+ }
141
+
142
+ private buildRoute(manager: this): () => IRequestHandler {
143
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
144
+ const noop = () => {}
145
+ const methods = ['get', 'post', 'delete', 'patch', 'put']
146
+ const reflectors = [
147
+ 'toString',
148
+ 'valueOf',
149
+ 'inspect',
150
+ 'constructor',
151
+ Symbol.toPrimitive,
152
+ Symbol.for('util.inspect.custom'),
153
+ ]
154
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
155
+ const that = this
156
+
157
+ return () => {
158
+ const route = ['']
159
+
160
+ const handler: any = {
161
+ get(target: any, name: Method) {
162
+ if (reflectors.includes(name)) return () => route.join('/')
163
+ if (methods.includes(name)) {
164
+ return async (options: RequestOptions) => {
165
+ const url = that.resolveFullPath(route.join('/'))
166
+ route.length = 0
167
+ let res: any
168
+ try {
169
+ res = await manager.request({
170
+ method: name,
171
+ ...options,
172
+ url,
173
+ })
174
+ } catch (e: any) {
175
+ throw new RequestError(
176
+ e.message,
177
+ e.code ||
178
+ e.status ||
179
+ e.statusCode ||
180
+ e.response?.status ||
181
+ e.response?.statusCode ||
182
+ e.response?.code ||
183
+ 500,
184
+ url,
185
+ e,
186
+ )
187
+ }
188
+
189
+ const data = res.data
190
+ if (!data) {
191
+ return null
192
+ }
193
+
194
+ const transform =
195
+ Array.isArray(data) || isPlainObject(data)
196
+ ? camelcaseKeys(data, { deep: true })
197
+ : data
198
+
199
+ if (transform && typeof transform === 'object') {
200
+ Object.defineProperty(transform, '$raw', {
201
+ get() {
202
+ return res
203
+ },
204
+ enumerable: false,
205
+ configurable: false,
206
+ })
207
+
208
+ // attach request config onto response
209
+
210
+ Object.defineProperty(transform, '$request', {
211
+ get() {
212
+ return {
213
+ url,
214
+ method: name,
215
+ options,
216
+ }
217
+ },
218
+ enumerable: false,
219
+ })
220
+ }
221
+
222
+ return transform
223
+ }
224
+ }
225
+ route.push(name)
226
+ return new Proxy(noop, handler)
227
+ },
228
+ // @ts-ignore
229
+ apply(target: any, _, args) {
230
+ route.push(...args.filter((x: string) => x !== null))
231
+ return new Proxy(noop, handler)
232
+ },
233
+ }
234
+
235
+ return new Proxy(noop, handler) as any
236
+ }
237
+ }
238
+ }
239
+
240
+ export function createClient<T extends IRequestAdapter>(adapter: T) {
241
+ return (endpoint: string, options?: ClientOptions) => {
242
+ const client = new HTTPClient(endpoint, adapter)
243
+ const { controllers } = options || {}
244
+ if (controllers) {
245
+ client.injectControllers(controllers)
246
+ }
247
+ return client
248
+ }
249
+ }
package/core/error.ts ADDED
@@ -0,0 +1,10 @@
1
+ export class RequestError extends Error {
2
+ constructor(
3
+ message: string,
4
+ public status: number,
5
+ public path: string,
6
+ public raw: any,
7
+ ) {
8
+ super(message)
9
+ }
10
+ }
package/core/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './client'
2
+ export * from './error'
@@ -0,0 +1,9 @@
1
+ export class CommentDto {
2
+ author!: string
3
+
4
+ text!: string
5
+
6
+ mail!: string
7
+
8
+ url?: string
9
+ }
@@ -1,3 +1,3 @@
1
1
  import { AxiosInstance } from 'axios';
2
- import { IRequestAdapter } from "../interfaces/instance";
2
+ import { IRequestAdapter } from '../interfaces/adapter';
3
3
  export declare const axiosAdaptor: IRequestAdapter<AxiosInstance>;
@@ -1,14 +1,3 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
1
  import axios from 'axios';
13
2
  const $http = axios.create({});
14
3
  // ignore axios `method` declare not assignable to `Method`
@@ -21,24 +10,22 @@ export const axiosAdaptor = Object.preventExtensions({
21
10
  return $http.get(url, options);
22
11
  },
23
12
  post(url, options) {
24
- const _a = options || {}, { data } = _a, config = __rest(_a, ["data"]);
13
+ const { data, ...config } = options || {};
25
14
  // @ts-ignore
26
15
  return $http.post(url, data, config);
27
16
  },
28
17
  put(url, options) {
29
- const _a = options || {}, { data } = _a, config = __rest(_a, ["data"]);
18
+ const { data, ...config } = options || {};
30
19
  // @ts-ignore
31
20
  return $http.put(url, data, config);
32
21
  },
33
22
  delete(url, options) {
34
- const config = __rest(options || {}
35
- // @ts-ignore
36
- , []);
23
+ const { ...config } = options || {};
37
24
  // @ts-ignore
38
25
  return $http.delete(url, config);
39
26
  },
40
27
  patch(url, options) {
41
- const _a = options || {}, { data } = _a, config = __rest(_a, ["data"]);
28
+ const { data, ...config } = options || {};
42
29
  // @ts-ignore
43
30
  return $http.patch(url, data, config);
44
31
  },
@@ -1 +1 @@
1
- {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/adaptors/axios.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE9B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GACvB,MAAM,CAAC,iBAAiB,CAAC;IACvB,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,aAAa;QACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,OAAO;QACf,MAAM,KAAsB,OAAO,IAAI,EAAE,EAAnC,EAAE,IAAI,OAA6B,EAAxB,MAAM,cAAjB,QAAmB,CAAgB,CAAA;QACzC,aAAa;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,MAAM,KAAsB,OAAO,IAAI,EAAE,EAAnC,EAAE,IAAI,OAA6B,EAAxB,MAAM,cAAjB,QAAmB,CAAgB,CAAA;QACzC,aAAa;QACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,OAAO;QACjB,MAAW,MAAM,UAAK,OAAO,IAAI,EAAE;QACnC,aAAa;UADP,EAAa,CAAgB,CAAA;QACnC,aAAa;QACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,GAAG,EAAE,OAAO;QAChB,MAAM,KAAsB,OAAO,IAAI,EAAE,EAAnC,EAAE,IAAI,OAA6B,EAAxB,MAAM,cAAjB,QAAmB,CAAgB,CAAA;QACzC,aAAa;QACb,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../adaptors/axios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE9B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GACvB,MAAM,CAAC,iBAAiB,CAAC;IACvB,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,aAAa;QACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,OAAO;QACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACzC,aAAa;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACzC,aAAa;QACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,OAAO;QACjB,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACnC,aAAa;QACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,GAAG,EAAE,OAAO;QAChB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACzC,aAAa;QACb,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;CACF,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import { RequestMethod } from 'umi-request';
2
- import { IRequestAdapter } from "../interfaces/instance";
2
+ import { IRequestAdapter } from '../interfaces/adapter';
3
3
  export declare const umiAdaptor: IRequestAdapter<RequestMethod<true>>;
@@ -1 +1 @@
1
- {"version":3,"file":"umi-request.js","sourceRoot":"","sources":["../../src/adaptors/umi-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AAGnD,MAAM,KAAK,GAAG,MAAM,CAAC;IACnB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,MAAM;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GACrB,MAAM,CAAC,iBAAiB,CAAC;IACvB,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,OAAO;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,OAAO;QACjB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;IACD,KAAK,CAAC,GAAG,EAAE,OAAO;QAChB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"umi-request.js","sourceRoot":"","sources":["../../adaptors/umi-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AAGnD,MAAM,KAAK,GAAG,MAAM,CAAC;IACnB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,MAAM;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GACrB,MAAM,CAAC,iBAAiB,CAAC;IACvB,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,OAAO;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,OAAO;QACd,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,OAAO;QACjB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;IACD,KAAK,CAAC,GAAG,EAAE,OAAO;QAChB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAClC,CAAC;CACF,CAAC,CAAA"}
@@ -1,8 +1,13 @@
1
- import { IController } from "../interfaces/controller";
2
- import { SortOrder } from "../interfaces/options";
3
- import { IRequestHandler, RequestProxyResult } from "../interfaces/request";
4
- import { AggregateRoot, AggregateStat, AggregateTop, TimelineData, TimelineType } from "../models/aggregate";
1
+ import { IController } from '../interfaces/controller';
2
+ import { SortOrder } from '../interfaces/options';
3
+ import { IRequestHandler, RequestProxyResult } from '../interfaces/request';
4
+ import { AggregateRoot, AggregateStat, AggregateTop, TimelineData, TimelineType } from '../models/aggregate';
5
5
  import { HTTPClient } from '../core';
6
+ declare module '../core/client' {
7
+ interface HTTPClient {
8
+ aggregate: AggregateController;
9
+ }
10
+ }
6
11
  export declare class AggregateController implements IController {
7
12
  private client;
8
13
  base: string;
@@ -1,5 +1,5 @@
1
- import { sortOrderToNumber } from "../utils";
2
- import { autoBind } from "../utils/auto-bind";
1
+ import { sortOrderToNumber } from '../utils';
2
+ import { autoBind } from '../utils/auto-bind';
3
3
  export class AggregateController {
4
4
  constructor(client) {
5
5
  this.client = client;
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/controllers/aggregate.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,iBAAe;AAC3C,OAAO,EAAE,QAAQ,EAAE,2BAAyB;AAG5C,MAAM,OAAO,mBAAmB;IAG9B,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QAFtC,SAAI,GAAG,WAAW,CAAA;QAClB,SAAI,GAAG,WAAW,CAAA;QAEhB,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IACD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAiB,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,GAAG,CAAC;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,WAAW,CAAC,OAIX;QACC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAyB;YACrD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC;gBACrC,IAAI;gBACJ,IAAI;aACL;SACF,CAAC,CAAA;IACJ,CAAC;IACD;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAiB,CAAA;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../controllers/aggregate.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAS5C,MAAM,OAAO,mBAAmB;IAG9B,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QAFtC,SAAI,GAAG,WAAW,CAAA;QAClB,SAAI,GAAG,WAAW,CAAA;QAEhB,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IACD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAiB,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,GAAG,CAAC;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,WAAW,CAAC,OAIX;QACC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAyB;YACrD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC;gBACrC,IAAI;gBACJ,IAAI;aACL;SACF,CAAC,CAAA;IACJ,CAAC;IACD;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAiB,CAAA;IAC7C,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import { IRequestHandler, RequestProxyResult } from "../interfaces/request";
2
- import { PaginateResult } from "../models/base";
1
+ import { IRequestHandler, RequestProxyResult } from '../interfaces/request';
2
+ import { PaginateResult } from '../models/base';
3
3
  import { HTTPClient } from '../core';
4
4
  export declare abstract class BaseCrudController<T> {
5
5
  protected client: HTTPClient;
@@ -1,4 +1,4 @@
1
- import { autoBind } from "../utils/auto-bind";
1
+ import { autoBind } from '../utils/auto-bind';
2
2
  export class BaseCrudController {
3
3
  constructor(client) {
4
4
  this.client = client;
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/controllers/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,2BAAyB;AAG5C,MAAM,OAAgB,kBAAkB;IAEtC,YAAsB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QACtC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IACD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAK,CAAA;IAChC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAiB,CAAA;IAC5C,CAAC;IACD;;;;OAIG;IACH,eAAe,CAAC,IAAa,EAAE,OAAgB;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB;YACvC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;SAChC,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../controllers/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,MAAM,OAAgB,kBAAkB;IAEtC,YAAsB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QACtC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IACD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAK,CAAA;IAChC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAiB,CAAA;IAC5C,CAAC;IACD;;;;OAIG;IACH,eAAe,CAAC,IAAa,EAAE,OAAgB;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB;YACvC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;SAChC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -1,8 +1,13 @@
1
- import { IController } from "../interfaces/controller";
2
- import { RequestProxyResult, ResponseProxyExtraRaw } from "../interfaces/request";
1
+ import { IController } from '../interfaces/controller';
2
+ import { RequestProxyResult, ResponseProxyExtraRaw } from '../interfaces/request';
3
3
  import { HTTPClient } from '../core/client';
4
4
  import { CategoryModel, CategoryType, CategoryWithChildrenModel, TagModel } from '../models/category';
5
5
  import { PostModel } from '../models/post';
6
+ declare module '../core/client' {
7
+ interface HTTPClient {
8
+ category: CategoryController;
9
+ }
10
+ }
6
11
  export declare class CategoryController implements IController {
7
12
  private client;
8
13
  name: string;
@@ -1,5 +1,5 @@
1
- import { attachRawFromOneToAnthor, destructureData } from "../utils";
2
- import { autoBind } from "../utils/auto-bind";
1
+ import { attachRawFromOneToAnthor, destructureData } from '../utils';
2
+ import { autoBind } from '../utils/auto-bind';
3
3
  import { RequestError } from '../core/error';
4
4
  import { CategoryType, } from '../models/category';
5
5
  export class CategoryController {
@@ -43,7 +43,7 @@ export class CategoryController {
43
43
  ids: ids.join(','),
44
44
  },
45
45
  });
46
- const entries = data === null || data === void 0 ? void 0 : data.entries;
46
+ const entries = data?.entries;
47
47
  if (!entries) {
48
48
  throw new RequestError('data structure error', 500, data.$request.path, data);
49
49
  }