@procedures/client 0.2.3 → 0.4.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 (369) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/README.md +77 -44
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/adapters/http/client/transport.d.ts.map +1 -1
  5. package/dist/adapters/http/client/transport.js +35 -3
  6. package/dist/adapters/http/client/transport.js.map +1 -1
  7. package/dist/adapters/http/client/types.d.ts +3 -2
  8. package/dist/adapters/http/client/types.d.ts.map +1 -1
  9. package/dist/adapters/http/server/transport.d.ts +2 -2
  10. package/dist/adapters/http/server/transport.d.ts.map +1 -1
  11. package/dist/adapters/http/server/transport.js +54 -22
  12. package/dist/adapters/http/server/transport.js.map +1 -1
  13. package/dist/adapters/http/shared/headers.d.ts +1 -1
  14. package/dist/adapters/http/shared/headers.d.ts.map +1 -1
  15. package/dist/adapters/http/shared/headers.js +7 -6
  16. package/dist/adapters/http/shared/headers.js.map +1 -1
  17. package/dist/adapters/local/client/transport.d.ts +3 -0
  18. package/dist/adapters/local/client/transport.d.ts.map +1 -1
  19. package/dist/adapters/local/client/transport.js +67 -6
  20. package/dist/adapters/local/client/transport.js.map +1 -1
  21. package/dist/adapters/local/client/types.d.ts +15 -0
  22. package/dist/adapters/local/client/types.d.ts.map +1 -1
  23. package/dist/adapters/local/client/types.js.map +1 -1
  24. package/dist/adapters/mock/client/transport.d.ts +3 -2
  25. package/dist/adapters/mock/client/transport.d.ts.map +1 -1
  26. package/dist/adapters/mock/client/transport.js +8 -5
  27. package/dist/adapters/mock/client/transport.js.map +1 -1
  28. package/dist/adapters/mock/client/types.d.ts +7 -6
  29. package/dist/adapters/mock/client/types.d.ts.map +1 -1
  30. package/dist/adapters/port/transport.d.ts +62 -0
  31. package/dist/adapters/port/transport.d.ts.map +1 -0
  32. package/dist/adapters/port/transport.js +94 -0
  33. package/dist/adapters/port/transport.js.map +1 -0
  34. package/dist/adapters/websocket/client/index.d.ts +1 -1
  35. package/dist/adapters/websocket/client/index.d.ts.map +1 -1
  36. package/dist/adapters/websocket/client/index.js.map +1 -1
  37. package/dist/adapters/websocket/client/node.d.ts +30 -0
  38. package/dist/adapters/websocket/client/node.d.ts.map +1 -0
  39. package/dist/adapters/websocket/client/node.js +32 -0
  40. package/dist/adapters/websocket/client/node.js.map +1 -0
  41. package/dist/adapters/websocket/client/transport.d.ts +47 -7
  42. package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
  43. package/dist/adapters/websocket/client/transport.js +229 -75
  44. package/dist/adapters/websocket/client/transport.js.map +1 -1
  45. package/dist/adapters/websocket/client/types.d.ts +71 -21
  46. package/dist/adapters/websocket/client/types.d.ts.map +1 -1
  47. package/dist/adapters/websocket/client/types.js.map +1 -1
  48. package/dist/adapters/websocket/server/transport.d.ts +65 -24
  49. package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
  50. package/dist/adapters/websocket/server/transport.js +192 -263
  51. package/dist/adapters/websocket/server/transport.js.map +1 -1
  52. package/dist/adapters/websocket/server/types.d.ts +20 -1
  53. package/dist/adapters/websocket/server/types.d.ts.map +1 -1
  54. package/dist/adapters/websocket/shared/rpc.d.ts +129 -0
  55. package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -0
  56. package/dist/adapters/websocket/shared/rpc.js +425 -0
  57. package/dist/adapters/websocket/shared/rpc.js.map +1 -0
  58. package/dist/browser.d.ts +29 -7
  59. package/dist/browser.d.ts.map +1 -1
  60. package/dist/browser.js +26 -3
  61. package/dist/browser.js.map +1 -1
  62. package/dist/client/call-types.d.ts +10 -10
  63. package/dist/client/call-types.d.ts.map +1 -1
  64. package/dist/client/call-types.js +1 -6
  65. package/dist/client/call-types.js.map +1 -1
  66. package/dist/client/client.d.ts +6 -1
  67. package/dist/client/client.d.ts.map +1 -1
  68. package/dist/client/client.js +23 -9
  69. package/dist/client/client.js.map +1 -1
  70. package/dist/client/deadline.d.ts +38 -0
  71. package/dist/client/deadline.d.ts.map +1 -0
  72. package/dist/client/deadline.js +60 -0
  73. package/dist/client/deadline.js.map +1 -0
  74. package/dist/client/errors/factory.d.ts.map +1 -1
  75. package/dist/client/errors/factory.js +11 -7
  76. package/dist/client/errors/factory.js.map +1 -1
  77. package/dist/client/errors/http-errors.d.ts.map +1 -1
  78. package/dist/client/errors/http-errors.js +6 -0
  79. package/dist/client/errors/http-errors.js.map +1 -1
  80. package/dist/client/errors/index.d.ts +1 -1
  81. package/dist/client/errors/index.js +1 -1
  82. package/dist/client/errors/registry.d.ts +2 -1
  83. package/dist/client/errors/registry.d.ts.map +1 -1
  84. package/dist/client/errors/registry.js +72 -22
  85. package/dist/client/errors/registry.js.map +1 -1
  86. package/dist/client/index.d.ts +9 -2
  87. package/dist/client/index.d.ts.map +1 -1
  88. package/dist/client/index.js +8 -2
  89. package/dist/client/index.js.map +1 -1
  90. package/dist/client/middleware/cache.d.ts +19 -5
  91. package/dist/client/middleware/cache.d.ts.map +1 -1
  92. package/dist/client/middleware/cache.js +106 -18
  93. package/dist/client/middleware/cache.js.map +1 -1
  94. package/dist/client/middleware/circuit-breaker.d.ts +28 -10
  95. package/dist/client/middleware/circuit-breaker.d.ts.map +1 -1
  96. package/dist/client/middleware/circuit-breaker.js +35 -24
  97. package/dist/client/middleware/circuit-breaker.js.map +1 -1
  98. package/dist/client/middleware/contexts.d.ts +16 -10
  99. package/dist/client/middleware/contexts.d.ts.map +1 -1
  100. package/dist/client/middleware/contexts.js.map +1 -1
  101. package/dist/client/middleware/items.d.ts +31 -2
  102. package/dist/client/middleware/items.d.ts.map +1 -1
  103. package/dist/client/middleware/items.js +86 -6
  104. package/dist/client/middleware/items.js.map +1 -1
  105. package/dist/client/middleware/lru.d.ts +2 -0
  106. package/dist/client/middleware/lru.d.ts.map +1 -1
  107. package/dist/client/middleware/lru.js +11 -0
  108. package/dist/client/middleware/lru.js.map +1 -1
  109. package/dist/client/middleware/rate-limit.d.ts +7 -6
  110. package/dist/client/middleware/rate-limit.d.ts.map +1 -1
  111. package/dist/client/middleware/rate-limit.js +9 -7
  112. package/dist/client/middleware/rate-limit.js.map +1 -1
  113. package/dist/client/middleware/resilience.d.ts +61 -0
  114. package/dist/client/middleware/resilience.d.ts.map +1 -0
  115. package/dist/client/middleware/resilience.js +59 -0
  116. package/dist/client/middleware/resilience.js.map +1 -0
  117. package/dist/client/middleware/retry.d.ts +45 -11
  118. package/dist/client/middleware/retry.d.ts.map +1 -1
  119. package/dist/client/middleware/retry.js +102 -22
  120. package/dist/client/middleware/retry.js.map +1 -1
  121. package/dist/client/middleware/timeout.d.ts +15 -12
  122. package/dist/client/middleware/timeout.d.ts.map +1 -1
  123. package/dist/client/middleware/timeout.js +48 -46
  124. package/dist/client/middleware/timeout.js.map +1 -1
  125. package/dist/client/middleware/tracing.d.ts.map +1 -1
  126. package/dist/client/middleware/tracing.js +11 -3
  127. package/dist/client/middleware/tracing.js.map +1 -1
  128. package/dist/client/types.d.ts +9 -1
  129. package/dist/client/types.d.ts.map +1 -1
  130. package/dist/client/types.js.map +1 -1
  131. package/dist/clock.d.ts +19 -0
  132. package/dist/clock.d.ts.map +1 -0
  133. package/dist/clock.js +18 -0
  134. package/dist/clock.js.map +1 -0
  135. package/dist/duration.d.ts +37 -0
  136. package/dist/duration.d.ts.map +1 -0
  137. package/dist/duration.js +44 -0
  138. package/dist/duration.js.map +1 -0
  139. package/dist/index.d.ts +4 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +4 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/machines.d.ts +90 -0
  144. package/dist/machines.d.ts.map +1 -0
  145. package/dist/machines.js +127 -0
  146. package/dist/machines.js.map +1 -0
  147. package/dist/node.d.ts +11 -0
  148. package/dist/node.d.ts.map +1 -0
  149. package/dist/node.js +10 -0
  150. package/dist/node.js.map +1 -0
  151. package/dist/procedures/capability.d.ts +3 -6
  152. package/dist/procedures/capability.d.ts.map +1 -1
  153. package/dist/procedures/capability.js +7 -8
  154. package/dist/procedures/capability.js.map +1 -1
  155. package/dist/procedures/collection/index.d.ts +3 -3
  156. package/dist/procedures/collection/index.d.ts.map +1 -1
  157. package/dist/procedures/collection/index.js +1 -1
  158. package/dist/procedures/collection/index.js.map +1 -1
  159. package/dist/procedures/collection/procedures.d.ts.map +1 -1
  160. package/dist/procedures/collection/procedures.js +49 -1
  161. package/dist/procedures/collection/procedures.js.map +1 -1
  162. package/dist/procedures/collection/schemas.d.ts +33 -0
  163. package/dist/procedures/collection/schemas.d.ts.map +1 -1
  164. package/dist/procedures/collection/schemas.js +68 -0
  165. package/dist/procedures/collection/schemas.js.map +1 -1
  166. package/dist/procedures/collection/storage.d.ts +37 -0
  167. package/dist/procedures/collection/storage.d.ts.map +1 -1
  168. package/dist/procedures/core/array.d.ts +1 -1
  169. package/dist/procedures/core/array.d.ts.map +1 -1
  170. package/dist/procedures/core/array.js +81 -29
  171. package/dist/procedures/core/array.js.map +1 -1
  172. package/dist/procedures/core/index.d.ts.map +1 -1
  173. package/dist/procedures/core/index.js +17 -2
  174. package/dist/procedures/core/index.js.map +1 -1
  175. package/dist/procedures/core/logic.js +1 -1
  176. package/dist/procedures/core/logic.js.map +1 -1
  177. package/dist/procedures/core/math.d.ts.map +1 -1
  178. package/dist/procedures/core/math.js +5 -1
  179. package/dist/procedures/core/math.js.map +1 -1
  180. package/dist/procedures/core/meta.d.ts.map +1 -1
  181. package/dist/procedures/core/meta.js +43 -8
  182. package/dist/procedures/core/meta.js.map +1 -1
  183. package/dist/procedures/core/object.d.ts.map +1 -1
  184. package/dist/procedures/core/object.js +42 -13
  185. package/dist/procedures/core/object.js.map +1 -1
  186. package/dist/procedures/core/operands.d.ts.map +1 -1
  187. package/dist/procedures/core/operands.js +6 -1
  188. package/dist/procedures/core/operands.js.map +1 -1
  189. package/dist/procedures/core/string.d.ts.map +1 -1
  190. package/dist/procedures/core/string.js +4 -2
  191. package/dist/procedures/core/string.js.map +1 -1
  192. package/dist/procedures/core/type.d.ts.map +1 -1
  193. package/dist/procedures/core/type.js +4 -2
  194. package/dist/procedures/core/type.js.map +1 -1
  195. package/dist/procedures/define-procedure.d.ts +19 -7
  196. package/dist/procedures/define-procedure.d.ts.map +1 -1
  197. package/dist/procedures/define-procedure.js +57 -17
  198. package/dist/procedures/define-procedure.js.map +1 -1
  199. package/dist/procedures/discovery.d.ts +4 -6
  200. package/dist/procedures/discovery.d.ts.map +1 -1
  201. package/dist/procedures/discovery.js +4 -6
  202. package/dist/procedures/discovery.js.map +1 -1
  203. package/dist/procedures/effects.d.ts +16 -0
  204. package/dist/procedures/effects.d.ts.map +1 -1
  205. package/dist/procedures/effects.js +33 -0
  206. package/dist/procedures/effects.js.map +1 -1
  207. package/dist/procedures/idempotency.d.ts +73 -0
  208. package/dist/procedures/idempotency.d.ts.map +1 -0
  209. package/dist/procedures/idempotency.js +131 -0
  210. package/dist/procedures/idempotency.js.map +1 -0
  211. package/dist/procedures/index.d.ts +7 -3
  212. package/dist/procedures/index.d.ts.map +1 -1
  213. package/dist/procedures/index.js +6 -2
  214. package/dist/procedures/index.js.map +1 -1
  215. package/dist/procedures/interceptors.d.ts +17 -4
  216. package/dist/procedures/interceptors.d.ts.map +1 -1
  217. package/dist/procedures/interceptors.js +18 -7
  218. package/dist/procedures/interceptors.js.map +1 -1
  219. package/dist/procedures/invoke.d.ts +15 -3
  220. package/dist/procedures/invoke.d.ts.map +1 -1
  221. package/dist/procedures/invoke.js +8 -3
  222. package/dist/procedures/invoke.js.map +1 -1
  223. package/dist/procedures/manifest.d.ts +83 -0
  224. package/dist/procedures/manifest.d.ts.map +1 -0
  225. package/dist/procedures/manifest.js +90 -0
  226. package/dist/procedures/manifest.js.map +1 -0
  227. package/dist/procedures/ref.d.ts +4 -2
  228. package/dist/procedures/ref.d.ts.map +1 -1
  229. package/dist/procedures/ref.js +2 -1
  230. package/dist/procedures/ref.js.map +1 -1
  231. package/dist/procedures/runtime-programs.d.ts +19 -0
  232. package/dist/procedures/runtime-programs.d.ts.map +1 -0
  233. package/dist/procedures/runtime-programs.js +24 -0
  234. package/dist/procedures/runtime-programs.js.map +1 -0
  235. package/dist/procedures/types.d.ts +16 -0
  236. package/dist/procedures/types.d.ts.map +1 -1
  237. package/dist/procedures/types.js.map +1 -1
  238. package/dist/protocol.d.ts +47 -0
  239. package/dist/protocol.d.ts.map +1 -0
  240. package/dist/protocol.js +68 -0
  241. package/dist/protocol.js.map +1 -0
  242. package/dist/server/host-policy.d.ts +4 -3
  243. package/dist/server/host-policy.d.ts.map +1 -1
  244. package/dist/server/host-policy.js +6 -3
  245. package/dist/server/host-policy.js.map +1 -1
  246. package/dist/server/host-procedures.d.ts +31 -0
  247. package/dist/server/host-procedures.d.ts.map +1 -0
  248. package/dist/server/host-procedures.js +75 -0
  249. package/dist/server/host-procedures.js.map +1 -0
  250. package/dist/server/index.d.ts +3 -3
  251. package/dist/server/index.d.ts.map +1 -1
  252. package/dist/server/index.js +1 -1
  253. package/dist/server/index.js.map +1 -1
  254. package/dist/server/procedure-server.d.ts +112 -5
  255. package/dist/server/procedure-server.d.ts.map +1 -1
  256. package/dist/server/procedure-server.js +273 -19
  257. package/dist/server/procedure-server.js.map +1 -1
  258. package/dist/server/request-auth.d.ts +19 -0
  259. package/dist/server/request-auth.d.ts.map +1 -0
  260. package/dist/server/request-auth.js +32 -0
  261. package/dist/server/request-auth.js.map +1 -0
  262. package/dist/server/types.d.ts +32 -0
  263. package/dist/server/types.d.ts.map +1 -1
  264. package/dist/server/types.js.map +1 -1
  265. package/dist/timers.d.ts +60 -0
  266. package/dist/timers.d.ts.map +1 -0
  267. package/dist/timers.js +33 -0
  268. package/dist/timers.js.map +1 -0
  269. package/dist/tracing/traceparent.d.ts +26 -0
  270. package/dist/tracing/traceparent.d.ts.map +1 -0
  271. package/dist/tracing/traceparent.js +53 -0
  272. package/dist/tracing/traceparent.js.map +1 -0
  273. package/package.json +11 -4
  274. package/src/adapters/http/client/transport.ts +31 -3
  275. package/src/adapters/http/client/types.ts +3 -2
  276. package/src/adapters/http/server/transport.ts +61 -26
  277. package/src/adapters/http/shared/headers.ts +7 -6
  278. package/src/adapters/local/client/transport.ts +74 -7
  279. package/src/adapters/local/client/types.ts +18 -0
  280. package/src/adapters/mock/client/transport.ts +9 -6
  281. package/src/adapters/mock/client/types.ts +7 -6
  282. package/src/adapters/port/transport.ts +124 -0
  283. package/src/adapters/websocket/client/index.ts +1 -0
  284. package/src/adapters/websocket/client/node.ts +34 -0
  285. package/src/adapters/websocket/client/transport.ts +251 -81
  286. package/src/adapters/websocket/client/types.ts +81 -21
  287. package/src/adapters/websocket/server/transport.ts +199 -301
  288. package/src/adapters/websocket/server/types.ts +20 -1
  289. package/src/adapters/websocket/shared/rpc.ts +453 -0
  290. package/src/browser.ts +51 -3
  291. package/src/client/call-types.ts +10 -14
  292. package/src/client/client.ts +28 -9
  293. package/src/client/deadline.ts +64 -0
  294. package/src/client/errors/README.md +2 -0
  295. package/src/client/errors/factory.ts +12 -8
  296. package/src/client/errors/http-errors.ts +5 -0
  297. package/src/client/errors/index.ts +1 -1
  298. package/src/client/errors/registry.ts +79 -22
  299. package/src/client/index.ts +21 -3
  300. package/src/client/middleware/cache.ts +120 -23
  301. package/src/client/middleware/circuit-breaker.ts +65 -35
  302. package/src/client/middleware/contexts.ts +17 -10
  303. package/src/client/middleware/items.ts +101 -6
  304. package/src/client/middleware/lru.ts +12 -0
  305. package/src/client/middleware/rate-limit.ts +9 -9
  306. package/src/client/middleware/resilience.ts +81 -0
  307. package/src/client/middleware/retry.ts +146 -34
  308. package/src/client/middleware/timeout.ts +57 -55
  309. package/src/client/middleware/tracing.ts +13 -4
  310. package/src/client/types.ts +9 -1
  311. package/src/clock.ts +21 -0
  312. package/src/duration.ts +56 -0
  313. package/src/index.ts +4 -0
  314. package/src/machines.ts +186 -0
  315. package/src/node.ts +11 -0
  316. package/src/procedures/capability.ts +7 -8
  317. package/src/procedures/collection/index.ts +9 -1
  318. package/src/procedures/collection/procedures.ts +57 -0
  319. package/src/procedures/collection/schemas.ts +110 -0
  320. package/src/procedures/collection/storage.ts +38 -0
  321. package/src/procedures/core/array.ts +79 -31
  322. package/src/procedures/core/index.ts +17 -2
  323. package/src/procedures/core/logic.ts +1 -1
  324. package/src/procedures/core/math.ts +5 -1
  325. package/src/procedures/core/meta.ts +45 -8
  326. package/src/procedures/core/object.ts +48 -14
  327. package/src/procedures/core/operands.ts +7 -0
  328. package/src/procedures/core/string.ts +4 -2
  329. package/src/procedures/core/type.ts +4 -2
  330. package/src/procedures/define-procedure.ts +73 -20
  331. package/src/procedures/discovery.ts +4 -6
  332. package/src/procedures/effects.ts +35 -0
  333. package/src/procedures/idempotency.ts +152 -0
  334. package/src/procedures/index.ts +18 -2
  335. package/src/procedures/interceptors.ts +28 -11
  336. package/src/procedures/invoke.ts +19 -5
  337. package/src/procedures/manifest.ts +158 -0
  338. package/src/procedures/ref.ts +4 -2
  339. package/src/procedures/runtime-programs.ts +27 -0
  340. package/src/procedures/types.ts +16 -0
  341. package/src/protocol.ts +108 -0
  342. package/src/server/host-policy.ts +8 -5
  343. package/src/server/host-procedures.ts +102 -0
  344. package/src/server/index.ts +5 -2
  345. package/src/server/procedure-server.ts +328 -12
  346. package/src/server/request-auth.ts +35 -0
  347. package/src/server/types.ts +37 -0
  348. package/src/timers.ts +82 -0
  349. package/src/tracing/traceparent.ts +61 -0
  350. package/dist/procedures/cli/announce.d.ts +0 -67
  351. package/dist/procedures/cli/announce.d.ts.map +0 -1
  352. package/dist/procedures/cli/announce.js +0 -392
  353. package/dist/procedures/cli/announce.js.map +0 -1
  354. package/dist/procedures/cli/discover.d.ts +0 -66
  355. package/dist/procedures/cli/discover.d.ts.map +0 -1
  356. package/dist/procedures/cli/discover.js +0 -310
  357. package/dist/procedures/cli/discover.js.map +0 -1
  358. package/dist/procedures/cli/index.d.ts +0 -13
  359. package/dist/procedures/cli/index.d.ts.map +0 -1
  360. package/dist/procedures/cli/index.js +0 -203
  361. package/dist/procedures/cli/index.js.map +0 -1
  362. package/dist/procedures/cli/init.d.ts +0 -17
  363. package/dist/procedures/cli/init.d.ts.map +0 -1
  364. package/dist/procedures/cli/init.js +0 -336
  365. package/dist/procedures/cli/init.js.map +0 -1
  366. package/src/procedures/cli/announce.ts +0 -470
  367. package/src/procedures/cli/discover.ts +0 -390
  368. package/src/procedures/cli/index.ts +0 -231
  369. package/src/procedures/cli/init.ts +0 -370
@@ -1,370 +0,0 @@
1
- /**
2
- * Library Initialization
3
- *
4
- * Scaffolds a new library with procedure support.
5
- * Creates the necessary file structure and configuration.
6
- */
7
-
8
- import * as fs from "node:fs/promises";
9
- import * as path from "node:path";
10
-
11
- // =============================================================================
12
- // Types
13
- // =============================================================================
14
-
15
- export interface InitOptions {
16
- /** Library name or "." for current directory */
17
- name: string;
18
- /** Overwrite existing files */
19
- force: boolean;
20
- }
21
-
22
- // =============================================================================
23
- // Templates
24
- // =============================================================================
25
-
26
- function getPackageJsonTemplate(name: string): string {
27
- return `{
28
- "name": "${name}",
29
- "version": "1.0.0",
30
- "description": "Library with client procedures",
31
- "type": "module",
32
- "main": "./dist/index.js",
33
- "types": "./dist/index.d.ts",
34
- "exports": {
35
- ".": {
36
- "types": "./dist/index.d.ts",
37
- "import": "./dist/index.js"
38
- },
39
- "./register": {
40
- "types": "./dist/register.d.ts",
41
- "import": "./dist/register.js"
42
- }
43
- },
44
- "client": {
45
- "procedures": "./dist/register.js"
46
- },
47
- "files": [
48
- "dist",
49
- "src"
50
- ],
51
- "scripts": {
52
- "build": "tsc -b",
53
- "clean": "rm -rf dist",
54
- "watch": "tsc -b --watch",
55
- "prepare": "npm run build",
56
- "postinstall": "client-registry announce || true"
57
- },
58
- "peerDependencies": {
59
- "client": "^1.0.0",
60
- "zod": "^3.0.0"
61
- },
62
- "devDependencies": {
63
- "client": "^1.0.0",
64
- "typescript": "^5.7.0",
65
- "zod": "^3.0.0"
66
- }
67
- }
68
- `;
69
- }
70
-
71
- function getTsconfigTemplate(): string {
72
- return `{
73
- "compilerOptions": {
74
- "target": "ES2022",
75
- "module": "NodeNext",
76
- "moduleResolution": "NodeNext",
77
- "declaration": true,
78
- "declarationMap": true,
79
- "sourceMap": true,
80
- "outDir": "./dist",
81
- "rootDir": "./src",
82
- "strict": true,
83
- "esModuleInterop": true,
84
- "skipLibCheck": true,
85
- "forceConsistentCasingInFileNames": true,
86
- "exactOptionalPropertyTypes": true,
87
- "noUncheckedIndexedAccess": true,
88
- "noImplicitOverride": true
89
- },
90
- "include": ["src/**/*"],
91
- "exclude": ["node_modules", "dist"]
92
- }
93
- `;
94
- }
95
-
96
- function getIndexTemplate(name: string): string {
97
- const moduleName = name.replace(/[^a-zA-Z0-9]/g, "_").replace(/^_+|_+$/g, "");
98
- return `/**
99
- * ${name}
100
- *
101
- * Export your procedures and types from this file.
102
- */
103
-
104
- // Export procedures
105
- export { ${moduleName}Procedures } from "./procedures/index.js";
106
-
107
- // Export individual procedures for direct use
108
- export { exampleProcedure } from "./procedures/index.js";
109
-
110
- // Export types if needed
111
- export type { ExampleInput, ExampleOutput } from "./procedures/index.js";
112
- `;
113
- }
114
-
115
- function getRegisterTemplate(name: string): string {
116
- const moduleName = name.replace(/[^a-zA-Z0-9]/g, "_").replace(/^_+|_+$/g, "");
117
- return `/**
118
- * Procedure Registration
119
- *
120
- * This file is imported as a side-effect to register procedures.
121
- * The path to this file is declared in package.json under "client.procedures".
122
- *
123
- * When another app runs \`npx client-registry discover\`, this file will be
124
- * automatically imported, causing procedures to be registered.
125
- */
126
-
127
- import { createAndRegister } from "client/procedures";
128
- import { ${moduleName}Procedures } from "./procedures/index.js";
129
-
130
- /**
131
- * Register all procedures from this library.
132
- * This runs immediately when this file is imported.
133
- */
134
- export const ${moduleName}Module = createAndRegister("${name}", ${moduleName}Procedures);
135
- `;
136
- }
137
-
138
- function getProceduresTemplate(name: string): string {
139
- const moduleName = name.replace(/[^a-zA-Z0-9]/g, "_").replace(/^_+|_+$/g, "");
140
- return `/**
141
- * Procedure Definitions
142
- *
143
- * Define your procedures here using defineProcedure().
144
- */
145
-
146
- import { z } from "zod";
147
- import { defineProcedure } from "client/procedures";
148
-
149
- // =============================================================================
150
- // Types
151
- // =============================================================================
152
-
153
- export const ExampleInputSchema = z.object({
154
- id: z.string(),
155
- });
156
-
157
- export const ExampleOutputSchema = z.object({
158
- id: z.string(),
159
- name: z.string(),
160
- createdAt: z.string(),
161
- });
162
-
163
- export type ExampleInput = z.infer<typeof ExampleInputSchema>;
164
- export type ExampleOutput = z.infer<typeof ExampleOutputSchema>;
165
-
166
- // =============================================================================
167
- // Procedures
168
- // =============================================================================
169
-
170
- /**
171
- * Example procedure - replace with your actual procedures.
172
- */
173
- export const exampleProcedure = defineProcedure({
174
- path: ["${name}", "example", "get"],
175
- input: ExampleInputSchema,
176
- output: ExampleOutputSchema,
177
- metadata: {
178
- description: "Get an example by ID",
179
- },
180
- handler: async (input, ctx) => {
181
- // Implement your procedure logic here
182
- // Access storage via ctx.repository?.getStorage() if needed
183
-
184
- return {
185
- id: input.id,
186
- name: "Example",
187
- createdAt: new Date().toISOString(),
188
- };
189
- },
190
- });
191
-
192
- /**
193
- * Export all procedures as an array for registration.
194
- */
195
- export const ${moduleName}Procedures = [
196
- exampleProcedure,
197
- // Add more procedures here
198
- ];
199
- `;
200
- }
201
-
202
- function getGitignoreTemplate(): string {
203
- return `# Dependencies
204
- node_modules/
205
-
206
- # Build output
207
- dist/
208
-
209
- # IDE
210
- .vscode/
211
- .idea/
212
-
213
- # OS
214
- .DS_Store
215
- Thumbs.db
216
-
217
- # Logs
218
- *.log
219
-
220
- # Generated
221
- __generated__/
222
- `;
223
- }
224
-
225
- function getReadmeTemplate(name: string): string {
226
- return `# ${name}
227
-
228
- A library with client procedures.
229
-
230
- ## Installation
231
-
232
- \`\`\`bash
233
- npm install ${name}
234
- \`\`\`
235
-
236
- ## How It Works
237
-
238
- This library announces its procedures when installed:
239
-
240
- 1. The \`postinstall\` script runs \`client-registry announce\`
241
- 2. This writes to \`.client-registry.json\` at your project root
242
- 3. When you run \`client-registry discover\`, it reads from this registry
243
-
244
- This means **zero configuration** for consumers - just install and discover!
245
-
246
- ## Usage
247
-
248
- ### In Your App (Consumer)
249
-
250
- After installing this library, run discovery to generate imports:
251
-
252
- \`\`\`bash
253
- npx client-registry discover
254
- \`\`\`
255
-
256
- Then import the generated file in your entry point:
257
-
258
- \`\`\`typescript
259
- import "./__generated__/procedures";
260
- \`\`\`
261
-
262
- ### Manual Registration (Alternative)
263
-
264
- \`\`\`typescript
265
- import "${name}/register";
266
- \`\`\`
267
-
268
- ### Direct Procedure Import
269
-
270
- \`\`\`typescript
271
- import { exampleProcedure } from "${name}";
272
- \`\`\`
273
-
274
- ## Development
275
-
276
- \`\`\`bash
277
- # Build
278
- npm run build
279
-
280
- # Watch mode
281
- npm run watch
282
- \`\`\`
283
-
284
- ## License
285
-
286
- MIT
287
- `;
288
- }
289
-
290
- // =============================================================================
291
- // File Writing
292
- // =============================================================================
293
-
294
- async function writeFile(
295
- filePath: string,
296
- content: string,
297
- force: boolean
298
- ): Promise<boolean> {
299
- try {
300
- // Check if file exists
301
- await fs.access(filePath);
302
- if (!force) {
303
- console.log(` Skipping (exists): ${path.basename(filePath)}`);
304
- return false;
305
- }
306
- console.log(` Overwriting: ${path.basename(filePath)}`);
307
- } catch {
308
- console.log(` Creating: ${path.basename(filePath)}`);
309
- }
310
-
311
- await fs.writeFile(filePath, content, "utf-8");
312
- return true;
313
- }
314
-
315
- // =============================================================================
316
- // Main
317
- // =============================================================================
318
-
319
- /**
320
- * Initialize a new library with procedure support.
321
- */
322
- export async function init(options: InitOptions): Promise<void> {
323
- const { name, force } = options;
324
-
325
- // Determine target directory
326
- const isCurrentDir = name === ".";
327
- const targetDir = isCurrentDir ? process.cwd() : path.join(process.cwd(), name);
328
- const packageName = isCurrentDir ? path.basename(process.cwd()) : name;
329
-
330
- console.log(`\nInitializing ${packageName}...`);
331
-
332
- // Create directory structure
333
- const dirs = [
334
- targetDir,
335
- path.join(targetDir, "src"),
336
- path.join(targetDir, "src", "procedures"),
337
- ];
338
-
339
- for (const dir of dirs) {
340
- await fs.mkdir(dir, { recursive: true });
341
- }
342
-
343
- // Write files
344
- const files: Array<[string, string]> = [
345
- [path.join(targetDir, "package.json"), getPackageJsonTemplate(packageName)],
346
- [path.join(targetDir, "tsconfig.json"), getTsconfigTemplate()],
347
- [path.join(targetDir, "src", "index.ts"), getIndexTemplate(packageName)],
348
- [path.join(targetDir, "src", "register.ts"), getRegisterTemplate(packageName)],
349
- [path.join(targetDir, "src", "procedures", "index.ts"), getProceduresTemplate(packageName)],
350
- [path.join(targetDir, ".gitignore"), getGitignoreTemplate()],
351
- [path.join(targetDir, "README.md"), getReadmeTemplate(packageName)],
352
- ];
353
-
354
- for (const [filePath, content] of files) {
355
- await writeFile(filePath, content, force);
356
- }
357
-
358
- console.log(`
359
- Done! Next steps:
360
-
361
- ${isCurrentDir ? "" : `cd ${name}`}
362
- npm install
363
- npm run build
364
-
365
- Your library is ready to define procedures in src/procedures/index.ts
366
-
367
- When consumers install your library and run \`npx client-registry discover\`,
368
- your procedures will be automatically discovered and registered.
369
- `);
370
- }