typeferry 0.6.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 (392) hide show
  1. package/README.md +88 -0
  2. package/dist/auth/client/cross-tab-sync.d.ts +21 -0
  3. package/dist/auth/client/cross-tab-sync.js +56 -0
  4. package/dist/auth/client/cross-tab-sync.js.map +1 -0
  5. package/dist/auth/client/index.d.ts +2 -0
  6. package/dist/auth/client/index.js +3 -0
  7. package/dist/auth/client/index.js.map +1 -0
  8. package/dist/auth/client/oauth/google-provider.d.ts +11 -0
  9. package/dist/auth/client/oauth/google-provider.js +11 -0
  10. package/dist/auth/client/oauth/google-provider.js.map +1 -0
  11. package/dist/auth/client/oauth/index.d.ts +4 -0
  12. package/dist/auth/client/oauth/index.js +3 -0
  13. package/dist/auth/client/oauth/index.js.map +1 -0
  14. package/dist/auth/client/oauth/use-google-login.d.ts +39 -0
  15. package/dist/auth/client/oauth/use-google-login.js +55 -0
  16. package/dist/auth/client/oauth/use-google-login.js.map +1 -0
  17. package/dist/auth/client/token-refresh.d.ts +21 -0
  18. package/dist/auth/client/token-refresh.js +212 -0
  19. package/dist/auth/client/token-refresh.js.map +1 -0
  20. package/dist/auth/index.d.ts +7 -0
  21. package/dist/auth/index.js +9 -0
  22. package/dist/auth/index.js.map +1 -0
  23. package/dist/auth/server/cookie-utils.d.ts +42 -0
  24. package/dist/auth/server/cookie-utils.js +91 -0
  25. package/dist/auth/server/cookie-utils.js.map +1 -0
  26. package/dist/auth/server/device-info.d.ts +23 -0
  27. package/dist/auth/server/device-info.js +52 -0
  28. package/dist/auth/server/device-info.js.map +1 -0
  29. package/dist/auth/server/index.d.ts +4 -0
  30. package/dist/auth/server/index.js +5 -0
  31. package/dist/auth/server/index.js.map +1 -0
  32. package/dist/auth/server/jwt-utils.d.ts +29 -0
  33. package/dist/auth/server/jwt-utils.js +53 -0
  34. package/dist/auth/server/jwt-utils.js.map +1 -0
  35. package/dist/auth/server/oauth/google.d.ts +31 -0
  36. package/dist/auth/server/oauth/google.js +40 -0
  37. package/dist/auth/server/oauth/google.js.map +1 -0
  38. package/dist/auth/server/oauth/index.d.ts +3 -0
  39. package/dist/auth/server/oauth/index.js +2 -0
  40. package/dist/auth/server/oauth/index.js.map +1 -0
  41. package/dist/auth/server/oauth/types.d.ts +37 -0
  42. package/dist/auth/server/oauth/types.js +2 -0
  43. package/dist/auth/server/oauth/types.js.map +1 -0
  44. package/dist/auth/server/session-manager.d.ts +46 -0
  45. package/dist/auth/server/session-manager.js +167 -0
  46. package/dist/auth/server/session-manager.js.map +1 -0
  47. package/dist/auth/types.d.ts +197 -0
  48. package/dist/auth/types.js +2 -0
  49. package/dist/auth/types.js.map +1 -0
  50. package/dist/client/call-method-proxy.d.ts +2 -0
  51. package/dist/client/call-method-proxy.js +22 -0
  52. package/dist/client/call-method-proxy.js.map +1 -0
  53. package/dist/client/client-channel.d.ts +43 -0
  54. package/dist/client/client-channel.js +148 -0
  55. package/dist/client/client-channel.js.map +1 -0
  56. package/dist/client/client-http.d.ts +27 -0
  57. package/dist/client/client-http.js +106 -0
  58. package/dist/client/client-http.js.map +1 -0
  59. package/dist/client/client-socket.d.ts +85 -0
  60. package/dist/client/client-socket.js +317 -0
  61. package/dist/client/client-socket.js.map +1 -0
  62. package/dist/client/client.d.ts +149 -0
  63. package/dist/client/client.js +401 -0
  64. package/dist/client/client.js.map +1 -0
  65. package/dist/client/context-manager.d.ts +54 -0
  66. package/dist/client/context-manager.js +89 -0
  67. package/dist/client/context-manager.js.map +1 -0
  68. package/dist/client/idle-timer.d.ts +35 -0
  69. package/dist/client/idle-timer.js +101 -0
  70. package/dist/client/idle-timer.js.map +1 -0
  71. package/dist/client/index.d.ts +6 -0
  72. package/dist/client/index.js +7 -0
  73. package/dist/client/index.js.map +1 -0
  74. package/dist/client/logger.d.ts +76 -0
  75. package/dist/client/logger.js +129 -0
  76. package/dist/client/logger.js.map +1 -0
  77. package/dist/client/visibility-manager.d.ts +62 -0
  78. package/dist/client/visibility-manager.js +177 -0
  79. package/dist/client/visibility-manager.js.map +1 -0
  80. package/dist/ejson/adjust-types-from-json-value.d.ts +1 -0
  81. package/dist/ejson/adjust-types-from-json-value.js +35 -0
  82. package/dist/ejson/adjust-types-from-json-value.js.map +1 -0
  83. package/dist/ejson/base64.d.ts +11 -0
  84. package/dist/ejson/base64.js +87 -0
  85. package/dist/ejson/base64.js.map +1 -0
  86. package/dist/ejson/built-in-converters.d.ts +1 -0
  87. package/dist/ejson/built-in-converters.js +137 -0
  88. package/dist/ejson/built-in-converters.js.map +1 -0
  89. package/dist/ejson/clone.d.ts +1 -0
  90. package/dist/ejson/clone.js +80 -0
  91. package/dist/ejson/clone.js.map +1 -0
  92. package/dist/ejson/custom-models.d.ts +38 -0
  93. package/dist/ejson/custom-models.js +76 -0
  94. package/dist/ejson/custom-models.js.map +1 -0
  95. package/dist/ejson/custom-types.d.ts +1 -0
  96. package/dist/ejson/custom-types.js +2 -0
  97. package/dist/ejson/custom-types.js.map +1 -0
  98. package/dist/ejson/equals.d.ts +1 -0
  99. package/dist/ejson/equals.js +117 -0
  100. package/dist/ejson/equals.js.map +1 -0
  101. package/dist/ejson/from-json-value.d.ts +1 -0
  102. package/dist/ejson/from-json-value.js +13 -0
  103. package/dist/ejson/from-json-value.js.map +1 -0
  104. package/dist/ejson/helpers/adjust-types-to-json-value.d.ts +1 -0
  105. package/dist/ejson/helpers/adjust-types-to-json-value.js +36 -0
  106. package/dist/ejson/helpers/adjust-types-to-json-value.js.map +1 -0
  107. package/dist/ejson/helpers/from-json-value-helper.d.ts +1 -0
  108. package/dist/ejson/helpers/from-json-value-helper.js +24 -0
  109. package/dist/ejson/helpers/from-json-value-helper.js.map +1 -0
  110. package/dist/ejson/helpers/to-json-value-helper.d.ts +1 -0
  111. package/dist/ejson/helpers/to-json-value-helper.js +15 -0
  112. package/dist/ejson/helpers/to-json-value-helper.js.map +1 -0
  113. package/dist/ejson/index.d.ts +27 -0
  114. package/dist/ejson/index.js +54 -0
  115. package/dist/ejson/index.js.map +1 -0
  116. package/dist/ejson/is-binary.d.ts +2 -0
  117. package/dist/ejson/is-binary.js +5 -0
  118. package/dist/ejson/is-binary.js.map +1 -0
  119. package/dist/ejson/parse.d.ts +6 -0
  120. package/dist/ejson/parse.js +12 -0
  121. package/dist/ejson/parse.js.map +1 -0
  122. package/dist/ejson/stable-stringify.d.ts +10 -0
  123. package/dist/ejson/stable-stringify.js +25 -0
  124. package/dist/ejson/stable-stringify.js.map +1 -0
  125. package/dist/ejson/stringify.d.ts +5 -0
  126. package/dist/ejson/stringify.js +15 -0
  127. package/dist/ejson/stringify.js.map +1 -0
  128. package/dist/ejson/to-json-value.d.ts +1 -0
  129. package/dist/ejson/to-json-value.js +17 -0
  130. package/dist/ejson/to-json-value.js.map +1 -0
  131. package/dist/ejson/utils.d.ts +18 -0
  132. package/dist/ejson/utils.js +43 -0
  133. package/dist/ejson/utils.js.map +1 -0
  134. package/dist/mongodb/change-streams.d.ts +31 -0
  135. package/dist/mongodb/change-streams.js +142 -0
  136. package/dist/mongodb/change-streams.js.map +1 -0
  137. package/dist/mongodb/client.d.ts +13 -0
  138. package/dist/mongodb/client.js +30 -0
  139. package/dist/mongodb/client.js.map +1 -0
  140. package/dist/mongodb/decorators/collection.d.ts +9 -0
  141. package/dist/mongodb/decorators/collection.js +26 -0
  142. package/dist/mongodb/decorators/collection.js.map +1 -0
  143. package/dist/mongodb/decorators/index.d.ts +4 -0
  144. package/dist/mongodb/decorators/index.js +5 -0
  145. package/dist/mongodb/decorators/index.js.map +1 -0
  146. package/dist/mongodb/decorators/metadata.d.ts +21 -0
  147. package/dist/mongodb/decorators/metadata.js +29 -0
  148. package/dist/mongodb/decorators/metadata.js.map +1 -0
  149. package/dist/mongodb/decorators/register.d.ts +3 -0
  150. package/dist/mongodb/decorators/register.js +10 -0
  151. package/dist/mongodb/decorators/register.js.map +1 -0
  152. package/dist/mongodb/decorators/watch.d.ts +4 -0
  153. package/dist/mongodb/decorators/watch.js +10 -0
  154. package/dist/mongodb/decorators/watch.js.map +1 -0
  155. package/dist/mongodb/filters.d.ts +20 -0
  156. package/dist/mongodb/filters.js +40 -0
  157. package/dist/mongodb/filters.js.map +1 -0
  158. package/dist/mongodb/find-one-or-create.d.ts +4 -0
  159. package/dist/mongodb/find-one-or-create.js +16 -0
  160. package/dist/mongodb/find-one-or-create.js.map +1 -0
  161. package/dist/mongodb/index.d.ts +10 -0
  162. package/dist/mongodb/index.js +11 -0
  163. package/dist/mongodb/index.js.map +1 -0
  164. package/dist/mongodb/live/client.d.ts +52 -0
  165. package/dist/mongodb/live/client.js +266 -0
  166. package/dist/mongodb/live/client.js.map +1 -0
  167. package/dist/mongodb/live/engine.d.ts +55 -0
  168. package/dist/mongodb/live/engine.js +440 -0
  169. package/dist/mongodb/live/engine.js.map +1 -0
  170. package/dist/mongodb/live/index.d.ts +5 -0
  171. package/dist/mongodb/live/index.js +6 -0
  172. package/dist/mongodb/live/index.js.map +1 -0
  173. package/dist/mongodb/live/observer.d.ts +58 -0
  174. package/dist/mongodb/live/observer.js +246 -0
  175. package/dist/mongodb/live/observer.js.map +1 -0
  176. package/dist/mongodb/live/publication.d.ts +4 -0
  177. package/dist/mongodb/live/publication.js +30 -0
  178. package/dist/mongodb/live/publication.js.map +1 -0
  179. package/dist/mongodb/live/source.d.ts +55 -0
  180. package/dist/mongodb/live/source.js +197 -0
  181. package/dist/mongodb/live/source.js.map +1 -0
  182. package/dist/mongodb/live/types.d.ts +266 -0
  183. package/dist/mongodb/live/types.js +29 -0
  184. package/dist/mongodb/live/types.js.map +1 -0
  185. package/dist/mongodb/live/window.d.ts +7 -0
  186. package/dist/mongodb/live/window.js +93 -0
  187. package/dist/mongodb/live/window.js.map +1 -0
  188. package/dist/mongodb/registry.d.ts +35 -0
  189. package/dist/mongodb/registry.js +129 -0
  190. package/dist/mongodb/registry.js.map +1 -0
  191. package/dist/mongodb/schema.d.ts +16 -0
  192. package/dist/mongodb/schema.js +43 -0
  193. package/dist/mongodb/schema.js.map +1 -0
  194. package/dist/mongodb/timestamps.d.ts +17 -0
  195. package/dist/mongodb/timestamps.js +27 -0
  196. package/dist/mongodb/timestamps.js.map +1 -0
  197. package/dist/mongodb/types.d.ts +120 -0
  198. package/dist/mongodb/types.js +10 -0
  199. package/dist/mongodb/types.js.map +1 -0
  200. package/dist/react/components/client-provider.d.ts +8 -0
  201. package/dist/react/components/client-provider.js +23 -0
  202. package/dist/react/components/client-provider.js.map +1 -0
  203. package/dist/react/components/index.d.ts +1 -0
  204. package/dist/react/components/index.js +2 -0
  205. package/dist/react/components/index.js.map +1 -0
  206. package/dist/react/hooks/index.d.ts +13 -0
  207. package/dist/react/hooks/index.js +14 -0
  208. package/dist/react/hooks/index.js.map +1 -0
  209. package/dist/react/hooks/use-auth.d.ts +4 -0
  210. package/dist/react/hooks/use-auth.js +35 -0
  211. package/dist/react/hooks/use-auth.js.map +1 -0
  212. package/dist/react/hooks/use-caller.d.ts +5 -0
  213. package/dist/react/hooks/use-caller.js +13 -0
  214. package/dist/react/hooks/use-caller.js.map +1 -0
  215. package/dist/react/hooks/use-channel.d.ts +1 -0
  216. package/dist/react/hooks/use-channel.js +7 -0
  217. package/dist/react/hooks/use-channel.js.map +1 -0
  218. package/dist/react/hooks/use-circuit-breaker.d.ts +6 -0
  219. package/dist/react/hooks/use-circuit-breaker.js +16 -0
  220. package/dist/react/hooks/use-circuit-breaker.js.map +1 -0
  221. package/dist/react/hooks/use-client.d.ts +3 -0
  222. package/dist/react/hooks/use-client.js +13 -0
  223. package/dist/react/hooks/use-client.js.map +1 -0
  224. package/dist/react/hooks/use-connection-state.d.ts +13 -0
  225. package/dist/react/hooks/use-connection-state.js +55 -0
  226. package/dist/react/hooks/use-connection-state.js.map +1 -0
  227. package/dist/react/hooks/use-creation.d.ts +5 -0
  228. package/dist/react/hooks/use-creation.js +17 -0
  229. package/dist/react/hooks/use-creation.js.map +1 -0
  230. package/dist/react/hooks/use-deps-change.d.ts +1 -0
  231. package/dist/react/hooks/use-deps-change.js +11 -0
  232. package/dist/react/hooks/use-deps-change.js.map +1 -0
  233. package/dist/react/hooks/use-local-event.d.ts +13 -0
  234. package/dist/react/hooks/use-local-event.js +32 -0
  235. package/dist/react/hooks/use-local-event.js.map +1 -0
  236. package/dist/react/hooks/use-method-refresh.d.ts +15 -0
  237. package/dist/react/hooks/use-method-refresh.js +48 -0
  238. package/dist/react/hooks/use-method-refresh.js.map +1 -0
  239. package/dist/react/hooks/use-method.d.ts +26 -0
  240. package/dist/react/hooks/use-method.js +161 -0
  241. package/dist/react/hooks/use-method.js.map +1 -0
  242. package/dist/react/hooks/use-mongodb-live-publication.d.ts +13 -0
  243. package/dist/react/hooks/use-mongodb-live-publication.js +26 -0
  244. package/dist/react/hooks/use-mongodb-live-publication.js.map +1 -0
  245. package/dist/react/hooks/use-object.d.ts +2 -0
  246. package/dist/react/hooks/use-object.js +22 -0
  247. package/dist/react/hooks/use-object.js.map +1 -0
  248. package/dist/react/hooks/use-subscribe.d.ts +8 -0
  249. package/dist/react/hooks/use-subscribe.js +49 -0
  250. package/dist/react/hooks/use-subscribe.js.map +1 -0
  251. package/dist/react/hooks/use-throttled-events.d.ts +7 -0
  252. package/dist/react/hooks/use-throttled-events.js +11 -0
  253. package/dist/react/hooks/use-throttled-events.js.map +1 -0
  254. package/dist/react/hooks/use-token-refresh.d.ts +13 -0
  255. package/dist/react/hooks/use-token-refresh.js +40 -0
  256. package/dist/react/hooks/use-token-refresh.js.map +1 -0
  257. package/dist/react/index.d.ts +2 -0
  258. package/dist/react/index.js +3 -0
  259. package/dist/react/index.js.map +1 -0
  260. package/dist/server/client-node.d.ts +76 -0
  261. package/dist/server/client-node.js +159 -0
  262. package/dist/server/client-node.js.map +1 -0
  263. package/dist/server/create-method-proxy.d.ts +2 -0
  264. package/dist/server/create-method-proxy.js +16 -0
  265. package/dist/server/create-method-proxy.js.map +1 -0
  266. package/dist/server/decorators/cached.d.ts +37 -0
  267. package/dist/server/decorators/cached.js +65 -0
  268. package/dist/server/decorators/cached.js.map +1 -0
  269. package/dist/server/decorators/index.d.ts +14 -0
  270. package/dist/server/decorators/index.js +13 -0
  271. package/dist/server/decorators/index.js.map +1 -0
  272. package/dist/server/decorators/infer.d.ts +78 -0
  273. package/dist/server/decorators/infer.js +11 -0
  274. package/dist/server/decorators/infer.js.map +1 -0
  275. package/dist/server/decorators/metadata.d.ts +60 -0
  276. package/dist/server/decorators/metadata.js +77 -0
  277. package/dist/server/decorators/metadata.js.map +1 -0
  278. package/dist/server/decorators/method.d.ts +14 -0
  279. package/dist/server/decorators/method.js +25 -0
  280. package/dist/server/decorators/method.js.map +1 -0
  281. package/dist/server/decorators/namespace.d.ts +25 -0
  282. package/dist/server/decorators/namespace.js +34 -0
  283. package/dist/server/decorators/namespace.js.map +1 -0
  284. package/dist/server/decorators/protected.d.ts +36 -0
  285. package/dist/server/decorators/protected.js +61 -0
  286. package/dist/server/decorators/protected.js.map +1 -0
  287. package/dist/server/decorators/register.d.ts +25 -0
  288. package/dist/server/decorators/register.js +72 -0
  289. package/dist/server/decorators/register.js.map +1 -0
  290. package/dist/server/decorators/schema.d.ts +17 -0
  291. package/dist/server/decorators/schema.js +27 -0
  292. package/dist/server/decorators/schema.js.map +1 -0
  293. package/dist/server/decorators/use.d.ts +22 -0
  294. package/dist/server/decorators/use.js +32 -0
  295. package/dist/server/decorators/use.js.map +1 -0
  296. package/dist/server/default-methods.d.ts +8 -0
  297. package/dist/server/default-methods.js +8 -0
  298. package/dist/server/default-methods.js.map +1 -0
  299. package/dist/server/event.d.ts +42 -0
  300. package/dist/server/event.js +53 -0
  301. package/dist/server/event.js.map +1 -0
  302. package/dist/server/index.d.ts +10 -0
  303. package/dist/server/index.js +11 -0
  304. package/dist/server/index.js.map +1 -0
  305. package/dist/server/method.d.ts +95 -0
  306. package/dist/server/method.js +113 -0
  307. package/dist/server/method.js.map +1 -0
  308. package/dist/server/methods.d.ts +11 -0
  309. package/dist/server/methods.js +74 -0
  310. package/dist/server/methods.js.map +1 -0
  311. package/dist/server/request-types.d.ts +20 -0
  312. package/dist/server/request-types.js +8 -0
  313. package/dist/server/request-types.js.map +1 -0
  314. package/dist/server/room-registry.d.ts +28 -0
  315. package/dist/server/room-registry.js +83 -0
  316. package/dist/server/room-registry.js.map +1 -0
  317. package/dist/server/server-channel.d.ts +32 -0
  318. package/dist/server/server-channel.js +104 -0
  319. package/dist/server/server-channel.js.map +1 -0
  320. package/dist/server/server.d.ts +124 -0
  321. package/dist/server/server.js +243 -0
  322. package/dist/server/server.js.map +1 -0
  323. package/dist/server/transports/hono-rate-limit.d.ts +15 -0
  324. package/dist/server/transports/hono-rate-limit.js +36 -0
  325. package/dist/server/transports/hono-rate-limit.js.map +1 -0
  326. package/dist/server/transports/index.d.ts +4 -0
  327. package/dist/server/transports/index.js +5 -0
  328. package/dist/server/transports/index.js.map +1 -0
  329. package/dist/server/transports/node-hono-transport-contract.d.ts +16 -0
  330. package/dist/server/transports/node-hono-transport-contract.js +18 -0
  331. package/dist/server/transports/node-hono-transport-contract.js.map +1 -0
  332. package/dist/server/transports/node-hono-transport.d.ts +47 -0
  333. package/dist/server/transports/node-hono-transport.js +327 -0
  334. package/dist/server/transports/node-hono-transport.js.map +1 -0
  335. package/dist/server/transports/redis-transport.d.ts +34 -0
  336. package/dist/server/transports/redis-transport.js +84 -0
  337. package/dist/server/transports/redis-transport.js.map +1 -0
  338. package/dist/server/transports/websocket-transport.d.ts +42 -0
  339. package/dist/server/transports/websocket-transport.js +174 -0
  340. package/dist/server/transports/websocket-transport.js.map +1 -0
  341. package/dist/server/transports/ws-shared.d.ts +37 -0
  342. package/dist/server/transports/ws-shared.js +188 -0
  343. package/dist/server/transports/ws-shared.js.map +1 -0
  344. package/dist/server/typeferry-async-local-storage.d.ts +5 -0
  345. package/dist/server/typeferry-async-local-storage.js +6 -0
  346. package/dist/server/typeferry-async-local-storage.js.map +1 -0
  347. package/dist/server/types.d.ts +27 -0
  348. package/dist/server/types.js +11 -0
  349. package/dist/server/types.js.map +1 -0
  350. package/dist/utils/constants.d.ts +72 -0
  351. package/dist/utils/constants.js +79 -0
  352. package/dist/utils/constants.js.map +1 -0
  353. package/dist/utils/environment.d.ts +8 -0
  354. package/dist/utils/environment.js +17 -0
  355. package/dist/utils/environment.js.map +1 -0
  356. package/dist/utils/errors.d.ts +26 -0
  357. package/dist/utils/errors.js +35 -0
  358. package/dist/utils/errors.js.map +1 -0
  359. package/dist/utils/event-emitter.d.ts +37 -0
  360. package/dist/utils/event-emitter.js +104 -0
  361. package/dist/utils/event-emitter.js.map +1 -0
  362. package/dist/utils/events.d.ts +7 -0
  363. package/dist/utils/events.js +23 -0
  364. package/dist/utils/events.js.map +1 -0
  365. package/dist/utils/helpers.d.ts +14 -0
  366. package/dist/utils/helpers.js +40 -0
  367. package/dist/utils/helpers.js.map +1 -0
  368. package/dist/utils/index.d.ts +11 -0
  369. package/dist/utils/index.js +12 -0
  370. package/dist/utils/index.js.map +1 -0
  371. package/dist/utils/intercept.d.ts +7 -0
  372. package/dist/utils/intercept.js +21 -0
  373. package/dist/utils/intercept.js.map +1 -0
  374. package/dist/utils/iterator.d.ts +9 -0
  375. package/dist/utils/iterator.js +28 -0
  376. package/dist/utils/iterator.js.map +1 -0
  377. package/dist/utils/lodash.d.ts +33 -0
  378. package/dist/utils/lodash.js +123 -0
  379. package/dist/utils/lodash.js.map +1 -0
  380. package/dist/utils/presentation.d.ts +19 -0
  381. package/dist/utils/presentation.js +25 -0
  382. package/dist/utils/presentation.js.map +1 -0
  383. package/dist/utils/promise.d.ts +6 -0
  384. package/dist/utils/promise.js +17 -0
  385. package/dist/utils/promise.js.map +1 -0
  386. package/dist/utils/protocol.d.ts +110 -0
  387. package/dist/utils/protocol.js +59 -0
  388. package/dist/utils/protocol.js.map +1 -0
  389. package/dist/utils/types.d.ts +23 -0
  390. package/dist/utils/types.js +2 -0
  391. package/dist/utils/types.js.map +1 -0
  392. package/package.json +187 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adjust-types-to-json-value.js","sourceRoot":"","sources":["../../../src/ejson/helpers/adjust-types-to-json-value.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC,EAAE;IAC1C,wCAAwC;IACxC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,OAAM,CAAC,WAAW;QACpB,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;YAClB,OAAM,CAAC,qBAAqB;QAC9B,CAAC;QACD,wDAAwD;QACxD,2BAA2B;QAC3B,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const fromJSONValueHelper: (value: any) => any;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Either return the argument changed to have the non-json
3
+ * rep of itself (the Object version) or the argument itself.
4
+ * DOES NOT RECURSE. For actually getting the fully-changed value, use
5
+ * EJSON.fromJSONValue
6
+ */
7
+ import { builtinConverters } from '../built-in-converters.js';
8
+ import { isObject, keysOf } from '../utils.js';
9
+ export const fromJSONValueHelper = value => {
10
+ if (isObject(value) && value !== null) {
11
+ const keys = keysOf(value);
12
+ if (keys.length <= 2 &&
13
+ keys.every(k => typeof k === 'string' && k.substr(0, 1) === '$')) {
14
+ for (let i = 0; i < builtinConverters.length; i++) {
15
+ const converter = builtinConverters[i];
16
+ if (converter.matchJSONValue(value)) {
17
+ return converter.fromJSONValue(value);
18
+ }
19
+ }
20
+ }
21
+ }
22
+ return value;
23
+ };
24
+ //# sourceMappingURL=from-json-value-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-json-value-helper.js","sourceRoot":"","sources":["../../../src/ejson/helpers/from-json-value-helper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,EAAE;IACzC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IACE,IAAI,CAAC,MAAM,IAAI,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAChE,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;gBACtC,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,OAAO,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const toJSONValueHelper: (item: any) => any;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Either return the JSON-compatible version of the argument, or undefined (if
3
+ * the item isn't itself replaceable, but maybe some fields in it are)
4
+ */
5
+ import { builtinConverters } from '../built-in-converters.js';
6
+ export const toJSONValueHelper = item => {
7
+ for (let i = 0; i < builtinConverters.length; i++) {
8
+ const converter = builtinConverters[i];
9
+ if (converter.matchObject(item)) {
10
+ return converter.toJSONValue(item);
11
+ }
12
+ }
13
+ return undefined;
14
+ };
15
+ //# sourceMappingURL=to-json-value-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-json-value-helper.js","sourceRoot":"","sources":["../../../src/ejson/helpers/to-json-value-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ export declare const EJSON: {
2
+ clone: (rootVal: any) => any;
3
+ equals: (a: any, b: any, options?: any) => boolean;
4
+ isBinary: (obj: Uint8Array & import("./utils.js").PolyfillableArray) => boolean;
5
+ parse: (item: any) => any;
6
+ stringify: (item: any, options?: import("./stringify.js").StringifyOptions) => string;
7
+ fromJSONValue: (item: any) => any;
8
+ toJSONValue: (item: any) => any;
9
+ newBinary: (len: number) => import("./utils.js").PolyfillableArray | Uint8Array<ArrayBuffer>;
10
+ /**
11
+ * @summary Add a custom datatype to EJSON.
12
+ * @locus Anywhere
13
+ * @param {String} name A tag for your custom type; must be unique among
14
+ * custom data types defined in your project, and must
15
+ * match the result of your type's `typeName` method.
16
+ * @param {Function} factory A function that deserializes a JSON-compatible
17
+ * value into an instance of your type. This should
18
+ * match the serialization performed by your
19
+ * type's `toJSONValue` method.
20
+ */
21
+ addType(name: string, factory: any): void;
22
+ _isCustomType(obj: any): boolean;
23
+ _getTypes(isOriginal?: boolean): unknown;
24
+ _getConverters(): any;
25
+ _adjustTypesToJSONValue: (obj: any) => any;
26
+ _adjustTypesFromJSONValue: (obj: any) => any;
27
+ };
@@ -0,0 +1,54 @@
1
+ import { adjustTypesFromJSONValue } from './adjust-types-from-json-value.js';
2
+ import { builtinConverters } from './built-in-converters.js';
3
+ import { clone } from './clone.js';
4
+ import { customTypes } from './custom-types.js';
5
+ import { equals } from './equals.js';
6
+ import { fromJSONValue } from './from-json-value.js';
7
+ import { adjustTypesToJSONValue } from './helpers/adjust-types-to-json-value.js';
8
+ import { isBinary } from './is-binary.js';
9
+ import { parse } from './parse.js';
10
+ import { stringify } from './stringify.js';
11
+ import { toJSONValue } from './to-json-value.js';
12
+ import { convertMapToObject, isFunction, newBinary } from './utils.js';
13
+ export const EJSON = {
14
+ clone,
15
+ equals,
16
+ isBinary,
17
+ parse,
18
+ stringify,
19
+ fromJSONValue,
20
+ toJSONValue,
21
+ newBinary,
22
+ /**
23
+ * @summary Add a custom datatype to EJSON.
24
+ * @locus Anywhere
25
+ * @param {String} name A tag for your custom type; must be unique among
26
+ * custom data types defined in your project, and must
27
+ * match the result of your type's `typeName` method.
28
+ * @param {Function} factory A function that deserializes a JSON-compatible
29
+ * value into an instance of your type. This should
30
+ * match the serialization performed by your
31
+ * type's `toJSONValue` method.
32
+ */
33
+ addType(name, factory) {
34
+ if (customTypes.has(name)) {
35
+ throw new Error(`Type ${name} already present`);
36
+ }
37
+ customTypes.set(name, factory);
38
+ },
39
+ _isCustomType(obj) {
40
+ return (obj &&
41
+ isFunction(obj.toJSONValue) &&
42
+ isFunction(obj.typeName) &&
43
+ customTypes.has(obj.typeName()));
44
+ },
45
+ _getTypes(isOriginal = false) {
46
+ return isOriginal ? customTypes : convertMapToObject(customTypes);
47
+ },
48
+ _getConverters() {
49
+ return builtinConverters;
50
+ },
51
+ _adjustTypesToJSONValue: adjustTypesToJSONValue,
52
+ _adjustTypesFromJSONValue: adjustTypesFromJSONValue,
53
+ };
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ejson/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnE,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK;IACL,MAAM;IACN,QAAQ;IACR,KAAK;IACL,SAAS;IACT,aAAa;IACb,WAAW;IACX,SAAS;IAET;;;;;;;;;;OAUG;IACH,OAAO,CAAC,IAAY,EAAE,OAAO;QAC3B,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,kBAAkB,CAAC,CAAA;QACjD,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,aAAa,CAAC,GAAG;QACf,OAAO,CACL,GAAG;YACH,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAChC,CAAA;IACH,CAAC;IAED,SAAS,CAAC,UAAU,GAAG,KAAK;QAC1B,OAAO,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAA;IACnE,CAAC;IAED,cAAc;QACZ,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IAED,uBAAuB,EAAE,sBAAsB;IAC/C,yBAAyB,EAAE,wBAAwB;CACpD,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { PolyfillableArray } from './utils.js';
2
+ export declare const isBinary: (obj: Uint8Array & PolyfillableArray) => boolean;
@@ -0,0 +1,5 @@
1
+ export const isBinary = (obj) => {
2
+ return !!((typeof Uint8Array !== 'undefined' && obj instanceof Uint8Array) ||
3
+ (obj && obj.$Uint8ArrayPolyfill));
4
+ };
5
+ //# sourceMappingURL=is-binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-binary.js","sourceRoot":"","sources":["../../src/ejson/is-binary.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAmC,EAAE,EAAE;IAC9D,OAAO,CAAC,CAAC,CACP,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,GAAG,YAAY,UAAU,CAAC;QAChE,CAAC,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CACjC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @todo Support buffers.
3
+ *
4
+ * @param item
5
+ */
6
+ export declare const parse: (item: any) => any;
@@ -0,0 +1,12 @@
1
+ import { EJSON } from './index.js';
2
+ /**
3
+ * @todo Support buffers.
4
+ *
5
+ * @param item
6
+ */
7
+ export const parse = item => {
8
+ if (typeof item !== 'string')
9
+ throw new Error('EJSON.parse argument should be a string');
10
+ return EJSON.fromJSONValue(JSON.parse(item));
11
+ };
12
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/ejson/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;IAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC1B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAE5D,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AAC9C,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ type JsonPrimitive = boolean | null | number | string;
2
+ type JsonValue = JsonPrimitive | JsonValue[] | {
3
+ [key: string]: JsonValue;
4
+ };
5
+ /**
6
+ * Provides deterministic JSON output for EJSON canonical mode without relying
7
+ * on a CommonJS dependency that breaks source-first browser consumers.
8
+ */
9
+ export declare function stableStringify(value: JsonValue, space?: number | string): string;
10
+ export {};
@@ -0,0 +1,25 @@
1
+ function isPlainObject(value) {
2
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
3
+ }
4
+ function sortJsonValue(value) {
5
+ if (Array.isArray(value)) {
6
+ return value.map(sortJsonValue);
7
+ }
8
+ if (!isPlainObject(value)) {
9
+ return value;
10
+ }
11
+ return Object.keys(value)
12
+ .sort()
13
+ .reduce((accumulator, key) => {
14
+ accumulator[key] = sortJsonValue(value[key]);
15
+ return accumulator;
16
+ }, {});
17
+ }
18
+ /**
19
+ * Provides deterministic JSON output for EJSON canonical mode without relying
20
+ * on a CommonJS dependency that breaks source-first browser consumers.
21
+ */
22
+ export function stableStringify(value, space) {
23
+ return JSON.stringify(sortJsonValue(value), null, space);
24
+ }
25
+ //# sourceMappingURL=stable-stringify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-stringify.js","sourceRoot":"","sources":["../../src/ejson/stable-stringify.ts"],"names":[],"mappings":"AAGA,SAAS,aAAa,CAAC,KAAgB;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACtB,IAAI,EAAE;SACN,MAAM,CAA+B,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;QACzD,WAAW,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5C,OAAO,WAAW,CAAA;IACpB,CAAC,EAAE,EAAE,CAAC,CAAA;AACV,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAgB,EAChB,KAAuB;IAEvB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type StringifyOptions = {
2
+ indent?: boolean | number | string;
3
+ canonical?: boolean;
4
+ };
5
+ export declare const stringify: (item: any, options?: StringifyOptions) => string;
@@ -0,0 +1,15 @@
1
+ import { EJSON } from './index.js';
2
+ import { stableStringify } from './stable-stringify.js';
3
+ export const stringify = (item, options) => {
4
+ const json = EJSON.toJSONValue(item);
5
+ const space = options?.indent === true
6
+ ? 2
7
+ : (options?.indent ?? undefined);
8
+ if (options?.canonical) {
9
+ return stableStringify(json, space);
10
+ }
11
+ return options?.indent
12
+ ? JSON.stringify(json, null, space)
13
+ : JSON.stringify(json);
14
+ };
15
+ //# sourceMappingURL=stringify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/ejson/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAOpD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAS,EAAE,OAA0B,EAAE,EAAE;IACjE,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAEpC,MAAM,KAAK,GACT,OAAO,EAAE,MAAM,KAAK,IAAI;QACtB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAE,OAAO,EAAE,MAA0B,IAAI,SAAS,CAAC,CAAA;IAEzD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,OAAO,EAAE,MAAM;QACpB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const toJSONValue: (item: any) => any;
@@ -0,0 +1,17 @@
1
+ import { adjustTypesToJSONValue } from './helpers/adjust-types-to-json-value.js';
2
+ import { toJSONValueHelper } from './helpers/to-json-value-helper.js';
3
+ import { EJSON } from './index.js';
4
+ import { isObject } from './utils.js';
5
+ export const toJSONValue = item => {
6
+ const changed = toJSONValueHelper(item);
7
+ if (changed !== undefined) {
8
+ return changed;
9
+ }
10
+ let newItem = item;
11
+ if (isObject(item)) {
12
+ newItem = EJSON.clone(item);
13
+ adjustTypesToJSONValue(newItem);
14
+ }
15
+ return newItem;
16
+ };
17
+ //# sourceMappingURL=to-json-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-json-value.js","sourceRoot":"","sources":["../../src/ejson/to-json-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE;IAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,IAAI,CAAA;IAElB,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC3B,sBAAsB,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ export declare const isFunction: (fn: any) => boolean;
2
+ export declare const isObject: (fn: any) => boolean;
3
+ export declare const keysOf: (obj: any) => string[];
4
+ export declare const lengthOf: (obj: any) => number;
5
+ export declare const hasOwn: (obj: any, prop: any) => any;
6
+ export declare const convertMapToObject: (map: any) => unknown;
7
+ export declare const isArguments: (obj: any) => any;
8
+ export declare const isInfOrNaN: (obj: any) => boolean;
9
+ export declare const checkError: {
10
+ maxStack: (msgError: any) => boolean;
11
+ };
12
+ export declare const handleError: (fn: any) => (...args: any[]) => any;
13
+ export declare const quote: (string: any) => string;
14
+ export type PolyfillableArray = Array<number> & {
15
+ $Uint8ArrayPolyfill?: boolean;
16
+ };
17
+ export declare const newBinary: (len: number) => PolyfillableArray | Uint8Array<ArrayBuffer>;
18
+ export declare const isObjectAndNotNull: (obj: any) => boolean;
@@ -0,0 +1,43 @@
1
+ export const isFunction = fn => typeof fn === 'function';
2
+ export const isObject = fn => typeof fn === 'object';
3
+ export const keysOf = obj => Object.keys(obj);
4
+ export const lengthOf = obj => Object.keys(obj).length;
5
+ export const hasOwn = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
6
+ export const convertMapToObject = map => Array.from(map).reduce((acc, [key, value]) => {
7
+ // reassign to not create new object
8
+ acc[key] = value;
9
+ return acc;
10
+ }, {});
11
+ export const isArguments = obj => obj != null && hasOwn(obj, 'callee');
12
+ export const isInfOrNaN = obj => Number.isNaN(obj) || obj === Infinity || obj === -Infinity;
13
+ export const checkError = {
14
+ maxStack: msgError => new RegExp('Maximum call stack size exceeded', 'g').test(msgError),
15
+ };
16
+ export const handleError = fn => function (...args) {
17
+ try {
18
+ return fn.apply(this, args);
19
+ }
20
+ catch (error) {
21
+ const isMaxStack = checkError.maxStack(error.message);
22
+ if (isMaxStack) {
23
+ throw new Error('Converting circular structure to JSON');
24
+ }
25
+ throw error;
26
+ }
27
+ };
28
+ export const quote = string => {
29
+ return JSON.stringify(string);
30
+ };
31
+ export const newBinary = (len) => {
32
+ if (typeof Uint8Array === 'undefined' || typeof ArrayBuffer === 'undefined') {
33
+ const ret = [];
34
+ for (let i = 0; i < len; i++) {
35
+ ret.push(0);
36
+ }
37
+ ret.$Uint8ArrayPolyfill = true;
38
+ return ret;
39
+ }
40
+ return new Uint8Array(new ArrayBuffer(len));
41
+ };
42
+ export const isObjectAndNotNull = obj => obj !== null && typeof obj === 'object';
43
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/ejson/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,UAAU,CAAA;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAA;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;AAEtD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAClC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,EAAE,CACtC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3C,oCAAoC;IACpC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAChB,OAAO,GAAG,CAAA;AACZ,CAAC,EAAE,EAAE,CAAC,CAAA;AAER,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;AAE5D,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CACnB,IAAI,MAAM,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;CACrE,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,CAC9B,UAAU,GAAG,IAAI;IACf,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC1D,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE;IAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAA;AAMD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;IACvC,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAsB,EAAE,CAAA;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,CAAC;QAED,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAA;QAE9B,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAA"}
@@ -0,0 +1,31 @@
1
+ import type { ChangeStreamDeleteDocument, ChangeStreamDocument, ChangeStreamInsertDocument, ChangeStreamReplaceDocument, ChangeStreamUpdateDocument, Collection, Document } from 'mongodb';
2
+ import type { Server } from '../server/index.js';
3
+ import type { MongoCollectionDefinition, MongoWatchDefinition, MongoWatchPayload } from './types.js';
4
+ /** Handle returned by a running MongoDB watcher. */
5
+ export interface MongoWatchHandle {
6
+ /** Stops the watcher and closes the active change stream. */
7
+ close(): Promise<void>;
8
+ }
9
+ /** Options required to start a MongoDB watch bridge. */
10
+ export interface StartMongoWatchOptions<TDocument extends Document> {
11
+ /** Native collection to watch. */
12
+ readonly collection: Collection<TDocument>;
13
+ /** Collection metadata that owns the watch definition. */
14
+ readonly definition: MongoCollectionDefinition<TDocument>;
15
+ /** Watch definition to start. */
16
+ readonly watch: MongoWatchDefinition<TDocument>;
17
+ /** TypeFerry server used for event registration and emission. */
18
+ readonly server: Server;
19
+ /** Delay before reconnecting after a transient stream failure. */
20
+ readonly reconnectDelayMs?: number;
21
+ }
22
+ /** Starts a native MongoDB change stream and emits matching changes through TypeFerry. */
23
+ export declare function startMongoWatch<TDocument extends Document>(options: StartMongoWatchOptions<TDocument>): MongoWatchHandle;
24
+ /** Converts a change stream document into the public TypeFerry watch payload. */
25
+ export declare function toMongoWatchPayload<TDocument extends Document>(change: ChangeStreamDocument<TDocument>): MongoWatchPayload<TDocument> | null;
26
+ /** Returns whether an update should be suppressed by watch filtering rules. */
27
+ export declare function shouldSkipMongoWatchChange<TDocument extends Document>(change: ChangeStreamDocument<TDocument>, watch: MongoWatchDefinition<TDocument>): boolean;
28
+ /** Type alias covering changes that include a full document. */
29
+ export type MongoFullDocumentChange<TDocument extends Document> = ChangeStreamInsertDocument<TDocument> | ChangeStreamReplaceDocument<TDocument> | ChangeStreamUpdateDocument<TDocument>;
30
+ /** Type alias covering delete changes handled by the bridge. */
31
+ export type MongoDeleteChange<TDocument extends Document> = ChangeStreamDeleteDocument<TDocument>;
@@ -0,0 +1,142 @@
1
+ const DEFAULT_RECONNECT_DELAY_MS = 250;
2
+ /** Starts a native MongoDB change stream and emits matching changes through TypeFerry. */
3
+ export function startMongoWatch(options) {
4
+ options.server.addEvent(options.watch.event, options.watch.eventOptions);
5
+ let closed = false;
6
+ let activeStream = null;
7
+ const run = async () => {
8
+ while (!closed) {
9
+ const streamOptions = {
10
+ fullDocument: options.watch.fullDocument ?? 'updateLookup',
11
+ fullDocumentBeforeChange: options.watch.fullDocumentBeforeChange,
12
+ ...options.watch.options,
13
+ };
14
+ const pipeline = options.watch.pipeline
15
+ ? [...options.watch.pipeline]
16
+ : undefined;
17
+ activeStream = options.collection.watch(pipeline, streamOptions);
18
+ try {
19
+ for await (const change of activeStream) {
20
+ if (closed)
21
+ break;
22
+ await emitChange(options, change);
23
+ }
24
+ break;
25
+ }
26
+ catch (error) {
27
+ if (closed)
28
+ break;
29
+ await delay(options.reconnectDelayMs ?? DEFAULT_RECONNECT_DELAY_MS);
30
+ }
31
+ finally {
32
+ await activeStream.close().catch(() => undefined);
33
+ activeStream = null;
34
+ }
35
+ }
36
+ };
37
+ void run();
38
+ return {
39
+ async close() {
40
+ closed = true;
41
+ await activeStream?.close().catch(() => undefined);
42
+ },
43
+ };
44
+ }
45
+ /** Converts a change stream document into the public TypeFerry watch payload. */
46
+ export function toMongoWatchPayload(change) {
47
+ const _id = extractObjectId(change);
48
+ if (!_id)
49
+ return null;
50
+ if (change.operationType === 'delete') {
51
+ return {
52
+ eventId: stringifyResumeToken(change._id),
53
+ _id,
54
+ doc: null,
55
+ deleted: true,
56
+ };
57
+ }
58
+ const doc = readFullDocument(change);
59
+ if (!doc)
60
+ return null;
61
+ return {
62
+ eventId: stringifyResumeToken(change._id),
63
+ _id,
64
+ doc,
65
+ deleted: false,
66
+ };
67
+ }
68
+ /** Returns whether an update should be suppressed by watch filtering rules. */
69
+ export function shouldSkipMongoWatchChange(change, watch) {
70
+ if (change.operationType !== 'update')
71
+ return false;
72
+ const fields = changedFieldNames(change);
73
+ if (fields.length === 0)
74
+ return false;
75
+ return fields.every(field => {
76
+ const root = field.split('.')[0];
77
+ return root === 'updatedAt' || Boolean(watch.excludeFields?.includes(root));
78
+ });
79
+ }
80
+ async function emitChange(options, change) {
81
+ if (shouldSkipMongoWatchChange(change, options.watch))
82
+ return;
83
+ const payload = toMongoWatchPayload(change);
84
+ if (!payload)
85
+ return;
86
+ const channels = await resolveChannels(options.watch, change, payload.doc ?? readBeforeDocument(change));
87
+ for (const channel of channels) {
88
+ options.server.channel(channel).emit(options.watch.event, payload);
89
+ }
90
+ }
91
+ async function resolveChannels(watch, change, document) {
92
+ if (!watch.getChannel || !document)
93
+ return [''];
94
+ const result = await watch.getChannel(document, change);
95
+ if (!result)
96
+ return [];
97
+ if (typeof result === 'string')
98
+ return [result];
99
+ return [...result];
100
+ }
101
+ function readFullDocument(change) {
102
+ if (change.operationType === 'insert' ||
103
+ change.operationType === 'replace' ||
104
+ change.operationType === 'update') {
105
+ return change.fullDocument ?? null;
106
+ }
107
+ return null;
108
+ }
109
+ function readBeforeDocument(change) {
110
+ if (!('fullDocumentBeforeChange' in change))
111
+ return null;
112
+ return change.fullDocumentBeforeChange ?? null;
113
+ }
114
+ function extractObjectId(change) {
115
+ if (!('documentKey' in change))
116
+ return null;
117
+ const key = change.documentKey;
118
+ if (isObjectId(key._id))
119
+ return key._id;
120
+ return null;
121
+ }
122
+ function changedFieldNames(change) {
123
+ return [
124
+ ...Object.keys(change.updateDescription.updatedFields ?? {}),
125
+ ...(change.updateDescription.removedFields ?? []),
126
+ ];
127
+ }
128
+ function stringifyResumeToken(token) {
129
+ return JSON.stringify(token);
130
+ }
131
+ function isObjectId(value) {
132
+ return (Boolean(value) &&
133
+ typeof value === 'object' &&
134
+ value.constructor.name === 'ObjectId' &&
135
+ typeof value.toHexString === 'function');
136
+ }
137
+ function delay(ms) {
138
+ return new Promise(resolve => {
139
+ setTimeout(resolve, ms);
140
+ });
141
+ }
142
+ //# sourceMappingURL=change-streams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-streams.js","sourceRoot":"","sources":["../../src/mongodb/change-streams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { MongoClient, type Db } from 'mongodb';
2
+ import type { TypeFerryMongoOptions } from './types.js';
3
+ /** Resolved MongoDB handles and lifecycle ownership for the registry. */
4
+ export interface ResolvedMongoConnection {
5
+ /** Database handle used by registered collections. */
6
+ readonly db: Db;
7
+ /** Client handle when one is known. */
8
+ readonly client: MongoClient | null;
9
+ /** Whether `close()` should close the client by default. */
10
+ readonly ownsClient: boolean;
11
+ }
12
+ /** Resolves `Db`, `MongoClient`, or URI options into concrete MongoDB handles. */
13
+ export declare function resolveMongoConnection(options: TypeFerryMongoOptions): Promise<ResolvedMongoConnection>;
@@ -0,0 +1,30 @@
1
+ import { MongoClient } from 'mongodb';
2
+ /** Resolves `Db`, `MongoClient`, or URI options into concrete MongoDB handles. */
3
+ export async function resolveMongoConnection(options) {
4
+ const sourceCount = [options.db, options.client, options.uri].filter(Boolean).length;
5
+ if (sourceCount !== 1) {
6
+ throw new Error('createTypeFerryMongo requires exactly one of db, client, or uri.');
7
+ }
8
+ if (options.db) {
9
+ return {
10
+ db: options.db,
11
+ client: null,
12
+ ownsClient: false,
13
+ };
14
+ }
15
+ if (options.client) {
16
+ return {
17
+ db: options.client.db(options.dbName),
18
+ client: options.client,
19
+ ownsClient: false,
20
+ };
21
+ }
22
+ const client = new MongoClient(options.uri ?? '', options.clientOptions);
23
+ await client.connect();
24
+ return {
25
+ db: client.db(options.dbName),
26
+ client,
27
+ ownsClient: true,
28
+ };
29
+ }
30
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mongodb/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAW,MAAM,SAAS,CAAA;AAc9C,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA8B;IAE9B,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAClE,OAAO,CACR,CAAC,MAAM,CAAA;IAER,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAA;IACH,CAAC;IAED,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,KAAK;SAClB,CAAA;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;YACrC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,KAAK;SAClB,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACxE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IAEtB,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7B,MAAM;QACN,UAAU,EAAE,IAAI;KACjB,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CreateIndexesOptions, Document, IndexSpecification } from 'mongodb';
2
+ import type { z } from 'zod';
3
+ import type { MongoCollectionClass } from '../types.js';
4
+ /** Declares the MongoDB collection name for a collection definition class. */
5
+ export declare function MongoCollection(name: string): <TClass extends MongoCollectionClass>(Class: TClass, context: ClassDecoratorContext<TClass>) => TClass;
6
+ /** Declares the Zod document schema associated with a collection definition. */
7
+ export declare function MongoSchema<TDocument extends Document>(schema: z.ZodType<TDocument>): <TClass extends MongoCollectionClass>(Class: TClass, context: ClassDecoratorContext<TClass>) => TClass;
8
+ /** Declares an index that can be created by `ensureIndexes()`. */
9
+ export declare function MongoIndex(spec: IndexSpecification, options?: CreateIndexesOptions): <TClass extends MongoCollectionClass>(Class: TClass, context: ClassDecoratorContext<TClass>) => TClass;
@@ -0,0 +1,26 @@
1
+ import { getOrCreateMongoCollectionMeta } from './metadata.js';
2
+ /** Declares the MongoDB collection name for a collection definition class. */
3
+ export function MongoCollection(name) {
4
+ return function (Class, _context) {
5
+ const meta = getOrCreateMongoCollectionMeta(Class);
6
+ meta.name = name;
7
+ return Class;
8
+ };
9
+ }
10
+ /** Declares the Zod document schema associated with a collection definition. */
11
+ export function MongoSchema(schema) {
12
+ return function (Class, _context) {
13
+ const meta = getOrCreateMongoCollectionMeta(Class);
14
+ meta.schema = schema;
15
+ return Class;
16
+ };
17
+ }
18
+ /** Declares an index that can be created by `ensureIndexes()`. */
19
+ export function MongoIndex(spec, options) {
20
+ return function (Class, _context) {
21
+ const meta = getOrCreateMongoCollectionMeta(Class);
22
+ meta.indexes.push({ spec, options });
23
+ return Class;
24
+ };
25
+ }
26
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/mongodb/decorators/collection.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAA;AAE3D,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAC7B,IAAY;IAKZ,OAAO,UACL,KAAa,EACb,QAAuC;QAEvC,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CACzB,MAA4B;IAK5B,OAAO,UACL,KAAa,EACb,QAAuC;QAEvC,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,UAAU,CACxB,IAAwB,EACxB,OAA8B;IAK9B,OAAO,UACL,KAAa,EACb,QAAuC;QAEvC,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACpC,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}