@planet-matrix/mobius-model 0.6.0 → 0.10.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 (258) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/oxlint.config.ts +1 -2
  3. package/package.json +29 -17
  4. package/scripts/build.ts +2 -52
  5. package/src/ai/README.md +1 -0
  6. package/src/ai/ai.ts +107 -0
  7. package/src/ai/chat-completion-ai/aihubmix-chat-completion.ts +78 -0
  8. package/src/ai/chat-completion-ai/chat-completion-ai.ts +270 -0
  9. package/src/ai/chat-completion-ai/chat-completion.ts +189 -0
  10. package/src/ai/chat-completion-ai/index.ts +7 -0
  11. package/src/ai/chat-completion-ai/lingyiwanwu-chat-completion.ts +78 -0
  12. package/src/ai/chat-completion-ai/ohmygpt-chat-completion.ts +78 -0
  13. package/src/ai/chat-completion-ai/openai-next-chat-completion.ts +78 -0
  14. package/src/ai/embedding-ai/embedding-ai.ts +63 -0
  15. package/src/ai/embedding-ai/embedding.ts +50 -0
  16. package/src/ai/embedding-ai/index.ts +4 -0
  17. package/src/ai/embedding-ai/openai-next-embedding.ts +23 -0
  18. package/src/ai/index.ts +4 -0
  19. package/src/aio/README.md +100 -0
  20. package/src/aio/content.ts +141 -0
  21. package/src/aio/index.ts +3 -0
  22. package/src/aio/json.ts +127 -0
  23. package/src/aio/prompt.ts +246 -0
  24. package/src/basic/README.md +20 -15
  25. package/src/basic/error.ts +19 -5
  26. package/src/basic/function.ts +2 -2
  27. package/src/basic/index.ts +1 -0
  28. package/src/basic/promise.ts +141 -71
  29. package/src/basic/schedule.ts +111 -0
  30. package/src/basic/stream.ts +135 -25
  31. package/src/credential/README.md +107 -0
  32. package/src/credential/api-key.ts +158 -0
  33. package/src/credential/bearer.ts +73 -0
  34. package/src/credential/index.ts +4 -0
  35. package/src/credential/json-web-token.ts +96 -0
  36. package/src/credential/password.ts +170 -0
  37. package/src/cron/README.md +86 -0
  38. package/src/cron/cron.ts +87 -0
  39. package/src/cron/index.ts +1 -0
  40. package/src/drizzle/README.md +1 -0
  41. package/src/drizzle/drizzle.ts +1 -0
  42. package/src/drizzle/helper.ts +47 -0
  43. package/src/drizzle/index.ts +5 -0
  44. package/src/drizzle/infer.ts +52 -0
  45. package/src/drizzle/kysely.ts +8 -0
  46. package/src/drizzle/pagination.ts +198 -0
  47. package/src/email/README.md +1 -0
  48. package/src/email/index.ts +1 -0
  49. package/src/email/resend.ts +25 -0
  50. package/src/event/class-event-proxy.ts +5 -6
  51. package/src/event/common.ts +13 -3
  52. package/src/event/event-manager.ts +3 -3
  53. package/src/event/instance-event-proxy.ts +5 -6
  54. package/src/event/internal.ts +4 -4
  55. package/src/exception/README.md +28 -19
  56. package/src/exception/error/error.ts +123 -0
  57. package/src/exception/error/index.ts +2 -0
  58. package/src/exception/error/match.ts +38 -0
  59. package/src/exception/error/must-fix.ts +17 -0
  60. package/src/exception/index.ts +2 -0
  61. package/src/file-system/find.ts +53 -0
  62. package/src/file-system/index.ts +2 -0
  63. package/src/file-system/path.ts +76 -0
  64. package/src/file-system/resolve.ts +22 -0
  65. package/src/form/README.md +25 -0
  66. package/src/form/index.ts +1 -0
  67. package/src/form/inputor-controller/base.ts +861 -0
  68. package/src/form/inputor-controller/boolean.ts +39 -0
  69. package/src/form/inputor-controller/file.ts +39 -0
  70. package/src/form/inputor-controller/form.ts +179 -0
  71. package/src/form/inputor-controller/helper.ts +117 -0
  72. package/src/form/inputor-controller/index.ts +17 -0
  73. package/src/form/inputor-controller/multi-select.ts +99 -0
  74. package/src/form/inputor-controller/number.ts +116 -0
  75. package/src/form/inputor-controller/select.ts +109 -0
  76. package/src/form/inputor-controller/text.ts +82 -0
  77. package/src/http/READMD.md +1 -0
  78. package/src/http/api/api-core.ts +84 -0
  79. package/src/http/api/api-handler.ts +79 -0
  80. package/src/http/api/api-host.ts +47 -0
  81. package/src/http/api/api-result.ts +56 -0
  82. package/src/http/api/api-schema.ts +154 -0
  83. package/src/http/api/api-server.ts +130 -0
  84. package/src/http/api/api-test.ts +142 -0
  85. package/src/http/api/api-type.ts +34 -0
  86. package/src/http/api/api.ts +81 -0
  87. package/src/http/api/index.ts +11 -0
  88. package/src/http/api-adapter/api-core-node-http.ts +260 -0
  89. package/src/http/api-adapter/api-host-node-http.ts +156 -0
  90. package/src/http/api-adapter/api-result-arktype.ts +294 -0
  91. package/src/http/api-adapter/api-result-zod.ts +286 -0
  92. package/src/http/api-adapter/index.ts +5 -0
  93. package/src/http/bin/gen-api-list/gen-api-list.ts +126 -0
  94. package/src/http/bin/gen-api-list/index.ts +1 -0
  95. package/src/http/bin/gen-api-test/gen-api-test.ts +136 -0
  96. package/src/http/bin/gen-api-test/index.ts +1 -0
  97. package/src/http/bin/gen-api-type/calc-code.ts +25 -0
  98. package/src/http/bin/gen-api-type/gen-api-type.ts +127 -0
  99. package/src/http/bin/gen-api-type/index.ts +2 -0
  100. package/src/http/bin/index.ts +2 -0
  101. package/src/http/index.ts +3 -0
  102. package/src/huawei/README.md +1 -0
  103. package/src/huawei/index.ts +2 -0
  104. package/src/huawei/moderation/index.ts +1 -0
  105. package/src/huawei/moderation/moderation.ts +355 -0
  106. package/src/huawei/obs/esdk-obs-nodejs.d.ts +87 -0
  107. package/src/huawei/obs/index.ts +1 -0
  108. package/src/huawei/obs/obs.ts +42 -0
  109. package/src/index.ts +21 -2
  110. package/src/json/README.md +92 -0
  111. package/src/json/index.ts +1 -0
  112. package/src/json/repair.ts +18 -0
  113. package/src/log/logger.ts +15 -4
  114. package/src/openai/README.md +1 -0
  115. package/src/openai/index.ts +1 -0
  116. package/src/openai/openai.ts +509 -0
  117. package/src/orchestration/README.md +9 -7
  118. package/src/orchestration/dispatching/dispatcher.ts +83 -0
  119. package/src/orchestration/dispatching/index.ts +2 -0
  120. package/src/orchestration/dispatching/selector/base-selector.ts +39 -0
  121. package/src/orchestration/dispatching/selector/down-count-selector.ts +119 -0
  122. package/src/orchestration/dispatching/selector/index.ts +2 -0
  123. package/src/orchestration/index.ts +2 -0
  124. package/src/orchestration/scheduling/index.ts +2 -0
  125. package/src/orchestration/scheduling/scheduler.ts +103 -0
  126. package/src/orchestration/scheduling/task.ts +32 -0
  127. package/src/random/README.md +8 -7
  128. package/src/random/base.ts +66 -0
  129. package/src/random/index.ts +5 -1
  130. package/src/random/random-boolean.ts +40 -0
  131. package/src/random/random-integer.ts +60 -0
  132. package/src/random/random-number.ts +72 -0
  133. package/src/random/random-string.ts +66 -0
  134. package/src/request/README.md +108 -0
  135. package/src/request/fetch/base.ts +108 -0
  136. package/src/request/fetch/browser.ts +280 -0
  137. package/src/request/fetch/general.ts +20 -0
  138. package/src/request/fetch/index.ts +4 -0
  139. package/src/request/fetch/nodejs.ts +280 -0
  140. package/src/request/index.ts +2 -0
  141. package/src/request/request/base.ts +246 -0
  142. package/src/request/request/general.ts +63 -0
  143. package/src/request/request/index.ts +3 -0
  144. package/src/request/request/resource.ts +68 -0
  145. package/src/result/README.md +4 -0
  146. package/src/result/controller.ts +58 -0
  147. package/src/result/either.ts +363 -0
  148. package/src/result/generator.ts +168 -0
  149. package/src/result/index.ts +3 -0
  150. package/src/route/README.md +105 -0
  151. package/src/route/adapter/browser.ts +122 -0
  152. package/src/route/adapter/driver.ts +56 -0
  153. package/src/route/adapter/index.ts +2 -0
  154. package/src/route/index.ts +3 -0
  155. package/src/route/router/index.ts +2 -0
  156. package/src/route/router/route.ts +630 -0
  157. package/src/route/router/router.ts +1641 -0
  158. package/src/route/uri/hash.ts +307 -0
  159. package/src/route/uri/index.ts +7 -0
  160. package/src/route/uri/pathname.ts +376 -0
  161. package/src/route/uri/search.ts +412 -0
  162. package/src/service/README.md +1 -0
  163. package/src/service/index.ts +1 -0
  164. package/src/service/service.ts +110 -0
  165. package/src/socket/README.md +105 -0
  166. package/src/socket/client/index.ts +2 -0
  167. package/src/socket/client/socket-unit.ts +658 -0
  168. package/src/socket/client/socket.ts +203 -0
  169. package/src/socket/common/index.ts +2 -0
  170. package/src/socket/common/socket-unit-common.ts +23 -0
  171. package/src/socket/common/socket-unit-heartbeat.ts +427 -0
  172. package/src/socket/index.ts +3 -0
  173. package/src/socket/server/index.ts +3 -0
  174. package/src/socket/server/server.ts +183 -0
  175. package/src/socket/server/socket-unit.ts +448 -0
  176. package/src/socket/server/socket.ts +264 -0
  177. package/src/storage/table.ts +3 -3
  178. package/src/timer/expiration/expiration-manager.ts +3 -3
  179. package/src/timer/expiration/remaining-manager.ts +3 -3
  180. package/src/tube/README.md +99 -0
  181. package/src/tube/helper.ts +137 -0
  182. package/src/tube/index.ts +2 -0
  183. package/src/tube/tube.ts +880 -0
  184. package/src/weixin/README.md +1 -0
  185. package/src/weixin/index.ts +2 -0
  186. package/src/weixin/official-account/authorization.ts +157 -0
  187. package/src/weixin/official-account/index.ts +2 -0
  188. package/src/weixin/official-account/js-api.ts +132 -0
  189. package/src/weixin/open/index.ts +1 -0
  190. package/src/weixin/open/oauth2.ts +131 -0
  191. package/tests/unit/ai/ai.spec.ts +85 -0
  192. package/tests/unit/aio/content.spec.ts +105 -0
  193. package/tests/unit/aio/json.spec.ts +146 -0
  194. package/tests/unit/aio/prompt.spec.ts +111 -0
  195. package/tests/unit/basic/error.spec.ts +16 -4
  196. package/tests/unit/basic/promise.spec.ts +158 -50
  197. package/tests/unit/basic/schedule.spec.ts +74 -0
  198. package/tests/unit/basic/stream.spec.ts +90 -37
  199. package/tests/unit/credential/api-key.spec.ts +36 -0
  200. package/tests/unit/credential/bearer.spec.ts +23 -0
  201. package/tests/unit/credential/json-web-token.spec.ts +23 -0
  202. package/tests/unit/credential/password.spec.ts +40 -0
  203. package/tests/unit/cron/cron.spec.ts +84 -0
  204. package/tests/unit/event/class-event-proxy.spec.ts +3 -3
  205. package/tests/unit/event/event-manager.spec.ts +3 -3
  206. package/tests/unit/event/instance-event-proxy.spec.ts +3 -3
  207. package/tests/unit/exception/error/error.spec.ts +83 -0
  208. package/tests/unit/exception/error/match.spec.ts +81 -0
  209. package/tests/unit/form/inputor-controller/base.spec.ts +458 -0
  210. package/tests/unit/form/inputor-controller/boolean.spec.ts +30 -0
  211. package/tests/unit/form/inputor-controller/file.spec.ts +27 -0
  212. package/tests/unit/form/inputor-controller/form.spec.ts +120 -0
  213. package/tests/unit/form/inputor-controller/helper.spec.ts +67 -0
  214. package/tests/unit/form/inputor-controller/multi-select.spec.ts +34 -0
  215. package/tests/unit/form/inputor-controller/number.spec.ts +36 -0
  216. package/tests/unit/form/inputor-controller/select.spec.ts +49 -0
  217. package/tests/unit/form/inputor-controller/text.spec.ts +34 -0
  218. package/tests/unit/http/api/api-core-host.spec.ts +207 -0
  219. package/tests/unit/http/api/api-schema.spec.ts +120 -0
  220. package/tests/unit/http/api/api-server.spec.ts +363 -0
  221. package/tests/unit/http/api/api-test.spec.ts +117 -0
  222. package/tests/unit/http/api/api.spec.ts +121 -0
  223. package/tests/unit/http/api-adapter/node-http.spec.ts +187 -0
  224. package/tests/unit/identifier/uuid.spec.ts +0 -1
  225. package/tests/unit/json/repair.spec.ts +11 -0
  226. package/tests/unit/log/logger.spec.ts +19 -4
  227. package/tests/unit/openai/openai.spec.ts +64 -0
  228. package/tests/unit/orchestration/dispatching/dispatcher.spec.ts +41 -0
  229. package/tests/unit/orchestration/dispatching/selector/down-count-selector.spec.ts +81 -0
  230. package/tests/unit/orchestration/scheduling/scheduler.spec.ts +103 -0
  231. package/tests/unit/random/base.spec.ts +58 -0
  232. package/tests/unit/random/random-boolean.spec.ts +25 -0
  233. package/tests/unit/random/random-integer.spec.ts +32 -0
  234. package/tests/unit/random/random-number.spec.ts +33 -0
  235. package/tests/unit/random/random-string.spec.ts +22 -0
  236. package/tests/unit/request/fetch/browser.spec.ts +222 -0
  237. package/tests/unit/request/fetch/general.spec.ts +43 -0
  238. package/tests/unit/request/fetch/nodejs.spec.ts +225 -0
  239. package/tests/unit/request/request/base.spec.ts +382 -0
  240. package/tests/unit/request/request/general.spec.ts +160 -0
  241. package/tests/unit/result/controller.spec.ts +82 -0
  242. package/tests/unit/result/either.spec.ts +377 -0
  243. package/tests/unit/result/generator.spec.ts +273 -0
  244. package/tests/unit/route/router/route.spec.ts +430 -0
  245. package/tests/unit/route/router/router.spec.ts +407 -0
  246. package/tests/unit/route/uri/hash.spec.ts +72 -0
  247. package/tests/unit/route/uri/pathname.spec.ts +146 -0
  248. package/tests/unit/route/uri/search.spec.ts +107 -0
  249. package/tests/unit/socket/client.spec.ts +208 -0
  250. package/tests/unit/socket/server.spec.ts +133 -0
  251. package/tests/unit/socket/socket-unit-heartbeat.spec.ts +214 -0
  252. package/tests/unit/tube/helper.spec.ts +139 -0
  253. package/tests/unit/tube/tube.spec.ts +501 -0
  254. package/vite.config.ts +2 -1
  255. package/dist/index.js +0 -50
  256. package/dist/index.js.map +0 -209
  257. package/src/random/string.ts +0 -35
  258. package/tests/unit/random/string.spec.ts +0 -11
@@ -0,0 +1,122 @@
1
+ import { createRoute } from "../router/index.ts"
2
+ import type { Route, Router } from "../router/index.ts"
3
+
4
+ /**
5
+ * 创建浏览器路由适配器时需要的输入项。
6
+ */
7
+ export interface CreateBrowserRouterOptions {
8
+ router: Router
9
+ }
10
+
11
+ /**
12
+ * 浏览器路由适配器返回的结果。
13
+ *
14
+ * `dispose` 用于释放当前适配器注册的订阅和浏览器事件监听器。
15
+ */
16
+ export interface CreateBrowserRouterResult {
17
+ router: Router
18
+ dispose: () => void
19
+ }
20
+
21
+ /**
22
+ * 将 Router 和浏览器路由对接在一起,将 Router 作为唯一信源。
23
+ *
24
+ * 该适配器负责把 Router 产生的历史记录同步到浏览器 `history`,并在浏览器
25
+ * `popstate` 或 `hashchange` 发生时,把新的地址变化回灌到 Router。
26
+ *
27
+ * Tips:
28
+ * - 浏览器 F5 刷新之后 `history.state` 不会丢失。
29
+ */
30
+ export const createBrowserRouter = (options: CreateBrowserRouterOptions): CreateBrowserRouterResult => {
31
+ const { router } = options
32
+
33
+ interface State {
34
+ routeHistoryEntryId: string
35
+ }
36
+ const isState = (target: unknown): target is State => {
37
+ if (typeof target !== "object" || target === null) {
38
+ return false
39
+ }
40
+ if (("routeHistoryEntryId" in target) === false) {
41
+ return false
42
+ }
43
+ if (typeof target["routeHistoryEntryId"] !== "string") {
44
+ return false
45
+ }
46
+ return true
47
+ }
48
+ const insertState = (route: Route, state: State): void => {
49
+ const url = location.origin + route.getRecord().partialUrl
50
+ window.history.pushState(state, "", url)
51
+ }
52
+ const updateState = (route: Route, state: State): void => {
53
+ const url = location.origin + route.getRecord().partialUrl
54
+ window.history.replaceState(state, "", url)
55
+ }
56
+ const upsertState = (route: Route, state: State): void => {
57
+ const oldUrl = location.origin + createRoute(location.href).getRecord().partialUrl
58
+ const newUrl = location.origin + route.getRecord().partialUrl
59
+ if (oldUrl === newUrl) {
60
+ updateState(route, state)
61
+ } else {
62
+ insertState(route, state)
63
+ }
64
+ }
65
+
66
+ const subscriberEntry = router.eventManager.subscribe("history", (routeHistoryEntry) => {
67
+ upsertState(routeHistoryEntry.to.route, { routeHistoryEntryId: routeHistoryEntry.id })
68
+ })
69
+ const disposeRouterSubscriber = (): void => {
70
+ subscriberEntry.unsubscribe()
71
+ }
72
+
73
+ const popstateEventListener = (event: PopStateEvent): void => {
74
+ // 此事件触发的结果有两种:
75
+ // 1. 来到 Router 设置的路由,此时 state 可识别。
76
+ // 2. 来到非 Router 设置的路由,此时 state 不可识别。
77
+ //
78
+ // 对于 1,判断 state 中的 routeHistoryEntryId 是否与 router 的
79
+ // 最新的 routeHistoryEntry 的 id 相同,若相同,则说明此事件由 router
80
+ // 触发,不需要再次操作(否则会导致循环触发),若不同,则作为新路由同步至
81
+ // router。
82
+ // 对于 2,始终作为新路由同步至 router。
83
+
84
+ if (isState(event.state)) {
85
+ const currentRouteHistoryEntryId = router.getCurrentRouteHistoryEntryId()
86
+ if (event.state.routeHistoryEntryId === currentRouteHistoryEntryId) {
87
+ return
88
+ }
89
+ }
90
+
91
+ router.navigateTo({ url: location.href })
92
+ }
93
+ window.addEventListener("popstate", popstateEventListener)
94
+ const disposePopstateEventListener = (): void => {
95
+ window.removeEventListener("popstate", popstateEventListener)
96
+ }
97
+
98
+ const hashchangeEventListener = (event: HashChangeEvent): void => {
99
+ if (isState(history.state)) {
100
+ const currentRouteHistoryEntryId = router.getCurrentRouteHistoryEntryId()
101
+ if (history.state.routeHistoryEntryId === currentRouteHistoryEntryId) {
102
+ return
103
+ }
104
+ }
105
+ router.navigateTo({ url: event.newURL })
106
+ }
107
+ window.addEventListener("hashchange", hashchangeEventListener)
108
+ const disposeHashchangeEventListener = (): void => {
109
+ window.removeEventListener("hashchange", hashchangeEventListener)
110
+ }
111
+
112
+ const dispose = (): void => {
113
+ disposeRouterSubscriber()
114
+ disposePopstateEventListener()
115
+ disposeHashchangeEventListener()
116
+ }
117
+
118
+ return {
119
+ router,
120
+ dispose
121
+ }
122
+ }
@@ -0,0 +1,56 @@
1
+ import type { Computed } from "#Source/reactor/index.ts"
2
+ import { computed, signal } from "#Source/reactor/index.ts"
3
+ import type { Route, RouteHistoryEntry, Router, RouteRecord } from "../router/index.ts"
4
+
5
+ /**
6
+ * 创建路由驱动器时需要的输入项。
7
+ */
8
+ export interface CreateRouteDriverOptions {
9
+ router: Router
10
+ }
11
+
12
+ /**
13
+ * 将 Router 暴露为响应式只读视图的驱动器。
14
+ *
15
+ * 该接口把当前历史记录、当前 Route 以及当前 RouteRecord 暴露为可追踪的计算值,
16
+ * 方便响应式系统消费。
17
+ */
18
+ export interface RouteDriver {
19
+ router: Router
20
+ routeHistoryEntry: Computed<RouteHistoryEntry>
21
+ route: Computed<Route>
22
+ routeRecord: Computed<RouteRecord>
23
+ }
24
+
25
+ /**
26
+ * 基于 Router 创建一组可响应追踪的当前路由派生值。
27
+ *
28
+ * 返回结果中的计算值会随着 Router 的 `history` 事件自动更新。
29
+ */
30
+ export const createRouteDriver = (options: CreateRouteDriverOptions): RouteDriver => {
31
+ const { router } = options
32
+
33
+ const internalCurrentRouteHistoryEntry = signal(() => {
34
+ return router.getCurrentRouteHistoryEntry()
35
+ })
36
+ router.eventManager.subscribe("history", (routeHistoryEntry) => {
37
+ internalCurrentRouteHistoryEntry.set(routeHistoryEntry)
38
+ })
39
+
40
+ const currentRouteHistoryEntry = computed(() => {
41
+ return internalCurrentRouteHistoryEntry.get()
42
+ })
43
+ const currentRoute = computed(() => {
44
+ return currentRouteHistoryEntry.get().to.route
45
+ })
46
+ const currentRouteRecord = computed(() => {
47
+ return currentRoute.get().getRecord()
48
+ })
49
+
50
+ return {
51
+ router,
52
+ routeHistoryEntry: currentRouteHistoryEntry,
53
+ route: currentRoute,
54
+ routeRecord: currentRouteRecord
55
+ }
56
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./driver.ts"
2
+ export * from "./browser.ts"
@@ -0,0 +1,3 @@
1
+ export * from "./uri/index.ts"
2
+ export * from "./router/index.ts"
3
+ export * from "./adapter/index.ts"
@@ -0,0 +1,2 @@
1
+ export * from "./route.ts"
2
+ export * from "./router.ts"