effect 4.0.4 → 4.0.6

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 (1079) hide show
  1. package/ai-docs/package.json +1 -1
  2. package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
  3. package/ai-docs/src/52_graphql/10_basics.ts +19 -13
  4. package/ai-docs/src/52_graphql/30_batching.ts +6 -4
  5. package/ai-docs/src/52_graphql/40_aliased-batching.ts +6 -4
  6. package/ai-docs/tsconfig.json +3 -1
  7. package/dist/Array.d.ts +207 -58
  8. package/dist/Array.d.ts.map +1 -1
  9. package/dist/Array.js +45 -22
  10. package/dist/Array.js.map +1 -1
  11. package/dist/Bytes.d.ts +79 -0
  12. package/dist/Bytes.d.ts.map +1 -0
  13. package/dist/Bytes.js +109 -0
  14. package/dist/Bytes.js.map +1 -0
  15. package/dist/Channel.d.ts +187 -14
  16. package/dist/Channel.d.ts.map +1 -1
  17. package/dist/Channel.js +142 -33
  18. package/dist/Channel.js.map +1 -1
  19. package/dist/ChannelSchema.d.ts.map +1 -1
  20. package/dist/ChannelSchema.js.map +1 -1
  21. package/dist/Chunk.d.ts +39 -21
  22. package/dist/Chunk.d.ts.map +1 -1
  23. package/dist/Chunk.js +26 -17
  24. package/dist/Chunk.js.map +1 -1
  25. package/dist/Config.d.ts.map +1 -1
  26. package/dist/Config.js +8 -3
  27. package/dist/Config.js.map +1 -1
  28. package/dist/ConfigProvider.d.ts.map +1 -1
  29. package/dist/ConfigProvider.js +34 -32
  30. package/dist/ConfigProvider.js.map +1 -1
  31. package/dist/Cron.d.ts +2 -2
  32. package/dist/Cron.d.ts.map +1 -1
  33. package/dist/Cron.js +6 -3
  34. package/dist/Cron.js.map +1 -1
  35. package/dist/Duration.d.ts.map +1 -1
  36. package/dist/Duration.js +58 -21
  37. package/dist/Duration.js.map +1 -1
  38. package/dist/Effect.d.ts +548 -182
  39. package/dist/Effect.d.ts.map +1 -1
  40. package/dist/Effect.js +261 -76
  41. package/dist/Effect.js.map +1 -1
  42. package/dist/Equivalence.d.ts +2 -1
  43. package/dist/Equivalence.d.ts.map +1 -1
  44. package/dist/Equivalence.js +12 -8
  45. package/dist/Equivalence.js.map +1 -1
  46. package/dist/Exit.d.ts +24 -9
  47. package/dist/Exit.d.ts.map +1 -1
  48. package/dist/Exit.js +8 -3
  49. package/dist/Exit.js.map +1 -1
  50. package/dist/FiberHandle.d.ts +2 -0
  51. package/dist/FiberHandle.d.ts.map +1 -1
  52. package/dist/FiberHandle.js +9 -4
  53. package/dist/FiberHandle.js.map +1 -1
  54. package/dist/FiberMap.d.ts +2 -0
  55. package/dist/FiberMap.d.ts.map +1 -1
  56. package/dist/FiberMap.js +5 -2
  57. package/dist/FiberMap.js.map +1 -1
  58. package/dist/FileSystem.d.ts +28 -9
  59. package/dist/FileSystem.d.ts.map +1 -1
  60. package/dist/FileSystem.js +3 -0
  61. package/dist/FileSystem.js.map +1 -1
  62. package/dist/Graph.d.ts.map +1 -1
  63. package/dist/Graph.js.map +1 -1
  64. package/dist/HashSet.d.ts.map +1 -1
  65. package/dist/HashSet.js.map +1 -1
  66. package/dist/Iterable.d.ts.map +1 -1
  67. package/dist/Iterable.js +18 -17
  68. package/dist/Iterable.js.map +1 -1
  69. package/dist/JsonSchema.d.ts +9 -3
  70. package/dist/JsonSchema.d.ts.map +1 -1
  71. package/dist/JsonSchema.js +19 -3
  72. package/dist/JsonSchema.js.map +1 -1
  73. package/dist/Layer.d.ts.map +1 -1
  74. package/dist/Layer.js +2 -2
  75. package/dist/Layer.js.map +1 -1
  76. package/dist/ManagedRuntime.d.ts +19 -1
  77. package/dist/ManagedRuntime.d.ts.map +1 -1
  78. package/dist/ManagedRuntime.js +62 -6
  79. package/dist/ManagedRuntime.js.map +1 -1
  80. package/dist/Match.d.ts +20 -6
  81. package/dist/Match.d.ts.map +1 -1
  82. package/dist/Match.js +2 -2
  83. package/dist/Match.js.map +1 -1
  84. package/dist/Metric.d.ts +132 -0
  85. package/dist/Metric.d.ts.map +1 -1
  86. package/dist/Metric.js +197 -25
  87. package/dist/Metric.js.map +1 -1
  88. package/dist/MutableHashMap.d.ts.map +1 -1
  89. package/dist/MutableHashMap.js.map +1 -1
  90. package/dist/Number.js +2 -2
  91. package/dist/Number.js.map +1 -1
  92. package/dist/Optic.d.ts.map +1 -1
  93. package/dist/Optic.js.map +1 -1
  94. package/dist/Path.d.ts +37 -5
  95. package/dist/Path.d.ts.map +1 -1
  96. package/dist/Path.js +44 -6
  97. package/dist/Path.js.map +1 -1
  98. package/dist/PubSub.d.ts.map +1 -1
  99. package/dist/PubSub.js +12 -7
  100. package/dist/PubSub.js.map +1 -1
  101. package/dist/Queue.d.ts +4 -1
  102. package/dist/Queue.d.ts.map +1 -1
  103. package/dist/Queue.js +4 -1
  104. package/dist/Queue.js.map +1 -1
  105. package/dist/Random.d.ts.map +1 -1
  106. package/dist/Random.js +1 -1
  107. package/dist/Random.js.map +1 -1
  108. package/dist/RcMap.d.ts +12 -7
  109. package/dist/RcMap.d.ts.map +1 -1
  110. package/dist/RcMap.js +9 -6
  111. package/dist/RcMap.js.map +1 -1
  112. package/dist/Record.d.ts +51 -0
  113. package/dist/Record.d.ts.map +1 -1
  114. package/dist/Record.js +17 -0
  115. package/dist/Record.js.map +1 -1
  116. package/dist/Ref.d.ts.map +1 -1
  117. package/dist/Ref.js.map +1 -1
  118. package/dist/References.d.ts +5 -4
  119. package/dist/References.d.ts.map +1 -1
  120. package/dist/References.js +5 -4
  121. package/dist/References.js.map +1 -1
  122. package/dist/RequestResolver.d.ts +31 -1
  123. package/dist/RequestResolver.d.ts.map +1 -1
  124. package/dist/RequestResolver.js +39 -4
  125. package/dist/RequestResolver.js.map +1 -1
  126. package/dist/Resource.js +1 -1
  127. package/dist/Resource.js.map +1 -1
  128. package/dist/Runtime.d.ts +3 -3
  129. package/dist/Runtime.d.ts.map +1 -1
  130. package/dist/Runtime.js +18 -15
  131. package/dist/Runtime.js.map +1 -1
  132. package/dist/Schedule.d.ts.map +1 -1
  133. package/dist/Schedule.js.map +1 -1
  134. package/dist/Schema.d.ts +383 -326
  135. package/dist/Schema.d.ts.map +1 -1
  136. package/dist/Schema.js +338 -17
  137. package/dist/Schema.js.map +1 -1
  138. package/dist/SchemaAST.d.ts +5 -5
  139. package/dist/SchemaAST.d.ts.map +1 -1
  140. package/dist/SchemaAST.js +24 -8
  141. package/dist/SchemaAST.js.map +1 -1
  142. package/dist/SchemaGetter.d.ts +8 -3
  143. package/dist/SchemaGetter.d.ts.map +1 -1
  144. package/dist/SchemaGetter.js +15 -5
  145. package/dist/SchemaGetter.js.map +1 -1
  146. package/dist/SchemaIssue.d.ts +4 -4
  147. package/dist/SchemaIssue.d.ts.map +1 -1
  148. package/dist/SchemaIssue.js +29 -51
  149. package/dist/SchemaIssue.js.map +1 -1
  150. package/dist/SchemaRepresentation.d.ts +56 -1
  151. package/dist/SchemaRepresentation.d.ts.map +1 -1
  152. package/dist/SchemaRepresentation.js +18 -0
  153. package/dist/SchemaRepresentation.js.map +1 -1
  154. package/dist/SchemaTransformation.d.ts +1 -1
  155. package/dist/SchemaTransformation.js +1 -1
  156. package/dist/Scope.d.ts +12 -2
  157. package/dist/Scope.d.ts.map +1 -1
  158. package/dist/Scope.js +5 -0
  159. package/dist/Scope.js.map +1 -1
  160. package/dist/ScopedCache.d.ts +10 -7
  161. package/dist/ScopedCache.d.ts.map +1 -1
  162. package/dist/ScopedCache.js +9 -5
  163. package/dist/ScopedCache.js.map +1 -1
  164. package/dist/SemVer.d.ts +1196 -0
  165. package/dist/SemVer.d.ts.map +1 -0
  166. package/dist/SemVer.js +756 -0
  167. package/dist/SemVer.js.map +1 -0
  168. package/dist/SemVerRange.d.ts +559 -0
  169. package/dist/SemVerRange.d.ts.map +1 -0
  170. package/dist/SemVerRange.js +551 -0
  171. package/dist/SemVerRange.js.map +1 -0
  172. package/dist/Sink.d.ts.map +1 -1
  173. package/dist/Sink.js +6 -2
  174. package/dist/Sink.js.map +1 -1
  175. package/dist/Stream.d.ts +235 -8
  176. package/dist/Stream.d.ts.map +1 -1
  177. package/dist/Stream.js +145 -60
  178. package/dist/Stream.js.map +1 -1
  179. package/dist/String.d.ts +16 -2
  180. package/dist/String.d.ts.map +1 -1
  181. package/dist/String.js +25 -10
  182. package/dist/String.js.map +1 -1
  183. package/dist/TextDiff.d.ts +399 -0
  184. package/dist/TextDiff.d.ts.map +1 -0
  185. package/dist/TextDiff.js +634 -0
  186. package/dist/TextDiff.js.map +1 -0
  187. package/dist/TxHashMap.d.ts.map +1 -1
  188. package/dist/TxHashMap.js.map +1 -1
  189. package/dist/TxHashSet.d.ts.map +1 -1
  190. package/dist/TxHashSet.js.map +1 -1
  191. package/dist/TxRef.d.ts.map +1 -1
  192. package/dist/TxRef.js +3 -2
  193. package/dist/TxRef.js.map +1 -1
  194. package/dist/ai/AiError.d.ts +78 -14
  195. package/dist/ai/AiError.d.ts.map +1 -1
  196. package/dist/ai/AiError.js +51 -3
  197. package/dist/ai/AiError.js.map +1 -1
  198. package/dist/ai/Chat.d.ts +1 -2
  199. package/dist/ai/Chat.d.ts.map +1 -1
  200. package/dist/ai/Chat.js +6 -3
  201. package/dist/ai/Chat.js.map +1 -1
  202. package/dist/ai/Decision.d.ts +116 -20
  203. package/dist/ai/Decision.d.ts.map +1 -1
  204. package/dist/ai/Decision.js +37 -3
  205. package/dist/ai/Decision.js.map +1 -1
  206. package/dist/ai/DecisionModel.d.ts +129 -11
  207. package/dist/ai/DecisionModel.d.ts.map +1 -1
  208. package/dist/ai/DecisionModel.js +183 -95
  209. package/dist/ai/DecisionModel.js.map +1 -1
  210. package/dist/ai/EmbeddingModel.d.ts +10 -0
  211. package/dist/ai/EmbeddingModel.d.ts.map +1 -1
  212. package/dist/ai/EmbeddingModel.js +21 -7
  213. package/dist/ai/EmbeddingModel.js.map +1 -1
  214. package/dist/ai/LanguageModel.d.ts.map +1 -1
  215. package/dist/ai/LanguageModel.js +47 -35
  216. package/dist/ai/LanguageModel.js.map +1 -1
  217. package/dist/ai/McpClient.d.ts +289 -0
  218. package/dist/ai/McpClient.d.ts.map +1 -0
  219. package/dist/ai/McpClient.js +819 -0
  220. package/dist/ai/McpClient.js.map +1 -0
  221. package/dist/ai/McpClientError.d.ts +254 -0
  222. package/dist/ai/McpClientError.d.ts.map +1 -0
  223. package/dist/ai/McpClientError.js +260 -0
  224. package/dist/ai/McpClientError.js.map +1 -0
  225. package/dist/ai/McpProtocol.d.ts +2 -2
  226. package/dist/ai/McpProtocol.d.ts.map +1 -1
  227. package/dist/ai/McpSchema.d.ts +368 -235
  228. package/dist/ai/McpSchema.d.ts.map +1 -1
  229. package/dist/ai/McpSchema.js +94 -24
  230. package/dist/ai/McpSchema.js.map +1 -1
  231. package/dist/ai/McpServer.d.ts +6 -52
  232. package/dist/ai/McpServer.d.ts.map +1 -1
  233. package/dist/ai/McpServer.js +27 -50
  234. package/dist/ai/McpServer.js.map +1 -1
  235. package/dist/ai/Prompt.d.ts +22 -20
  236. package/dist/ai/Prompt.d.ts.map +1 -1
  237. package/dist/ai/Prompt.js +23 -1
  238. package/dist/ai/Prompt.js.map +1 -1
  239. package/dist/ai/Response.d.ts +148 -4
  240. package/dist/ai/Response.d.ts.map +1 -1
  241. package/dist/ai/Response.js +35 -37
  242. package/dist/ai/Response.js.map +1 -1
  243. package/dist/ai/Tool.d.ts +12 -4
  244. package/dist/ai/Tool.d.ts.map +1 -1
  245. package/dist/ai/Tool.js.map +1 -1
  246. package/dist/ai/Toolkit.d.ts +48 -1
  247. package/dist/ai/Toolkit.d.ts.map +1 -1
  248. package/dist/ai/Toolkit.js +65 -12
  249. package/dist/ai/Toolkit.js.map +1 -1
  250. package/dist/ai/index.d.ts +10 -0
  251. package/dist/ai/index.d.ts.map +1 -1
  252. package/dist/ai/index.js +10 -0
  253. package/dist/ai/index.js.map +1 -1
  254. package/dist/ai/internal/mcpCore.js.map +1 -1
  255. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
  256. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  257. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
  258. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  259. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
  260. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  261. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
  262. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  263. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
  264. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  265. package/dist/ai/internal/mcpProtocol.js +16 -2
  266. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  267. package/dist/ai/internal/mcpRuntime.js +3 -4
  268. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  269. package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
  270. package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
  271. package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
  272. package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
  273. package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
  274. package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
  275. package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
  276. package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
  277. package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
  278. package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
  279. package/dist/cli/CliError.d.ts +42 -2
  280. package/dist/cli/CliError.d.ts.map +1 -1
  281. package/dist/cli/CliError.js +44 -5
  282. package/dist/cli/CliError.js.map +1 -1
  283. package/dist/cli/Command.d.ts +286 -2
  284. package/dist/cli/Command.d.ts.map +1 -1
  285. package/dist/cli/Command.js +107 -6
  286. package/dist/cli/Command.js.map +1 -1
  287. package/dist/cli/Completions.d.ts +10 -0
  288. package/dist/cli/Completions.d.ts.map +1 -1
  289. package/dist/cli/Completions.js.map +1 -1
  290. package/dist/cli/Flag.d.ts +215 -0
  291. package/dist/cli/Flag.d.ts.map +1 -1
  292. package/dist/cli/Flag.js +89 -0
  293. package/dist/cli/Flag.js.map +1 -1
  294. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  295. package/dist/cli/GlobalFlag.js +3 -3
  296. package/dist/cli/GlobalFlag.js.map +1 -1
  297. package/dist/cli/Param.d.ts +194 -0
  298. package/dist/cli/Param.d.ts.map +1 -1
  299. package/dist/cli/Param.js +86 -0
  300. package/dist/cli/Param.js.map +1 -1
  301. package/dist/cli/TerminalCapabilities.d.ts +84 -0
  302. package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
  303. package/dist/cli/TerminalCapabilities.js +122 -0
  304. package/dist/cli/TerminalCapabilities.js.map +1 -0
  305. package/dist/cli/index.d.ts +5 -0
  306. package/dist/cli/index.d.ts.map +1 -1
  307. package/dist/cli/index.js +5 -0
  308. package/dist/cli/index.js.map +1 -1
  309. package/dist/cli/internal/command.d.ts +2 -1
  310. package/dist/cli/internal/command.d.ts.map +1 -1
  311. package/dist/cli/internal/command.js +7 -3
  312. package/dist/cli/internal/command.js.map +1 -1
  313. package/dist/cli/internal/completions/bash.js +7 -5
  314. package/dist/cli/internal/completions/bash.js.map +1 -1
  315. package/dist/cli/internal/completions/descriptor.js +16 -1
  316. package/dist/cli/internal/completions/descriptor.js.map +1 -1
  317. package/dist/cli/internal/completions/fish.js +12 -10
  318. package/dist/cli/internal/completions/fish.js.map +1 -1
  319. package/dist/cli/internal/completions/powershell.js +20 -10
  320. package/dist/cli/internal/completions/powershell.js.map +1 -1
  321. package/dist/cli/internal/completions/zsh.js +15 -8
  322. package/dist/cli/internal/completions/zsh.js.map +1 -1
  323. package/dist/cli/internal/formatter.d.ts +2 -0
  324. package/dist/cli/internal/formatter.d.ts.map +1 -0
  325. package/dist/cli/internal/formatter.js +15 -0
  326. package/dist/cli/internal/formatter.js.map +1 -0
  327. package/dist/cli/internal/lexer.js +24 -10
  328. package/dist/cli/internal/lexer.js.map +1 -1
  329. package/dist/cli/internal/parser.js +35 -15
  330. package/dist/cli/internal/parser.js.map +1 -1
  331. package/dist/cli/internal/wizard.d.ts.map +1 -1
  332. package/dist/cli/internal/wizard.js +2 -1
  333. package/dist/cli/internal/wizard.js.map +1 -1
  334. package/dist/cluster/ClusterCron.d.ts +29 -1
  335. package/dist/cluster/ClusterCron.d.ts.map +1 -1
  336. package/dist/cluster/ClusterCron.js +64 -32
  337. package/dist/cluster/ClusterCron.js.map +1 -1
  338. package/dist/cluster/ClusterMetrics.d.ts +143 -7
  339. package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
  340. package/dist/cluster/ClusterMetrics.js +151 -7
  341. package/dist/cluster/ClusterMetrics.js.map +1 -1
  342. package/dist/cluster/ClusterWorkflowEngine.d.ts +2 -1
  343. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  344. package/dist/cluster/ClusterWorkflowEngine.js +98 -18
  345. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  346. package/dist/cluster/Entity.d.ts +2 -0
  347. package/dist/cluster/Entity.d.ts.map +1 -1
  348. package/dist/cluster/Entity.js.map +1 -1
  349. package/dist/cluster/MessageStorage.d.ts +21 -0
  350. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  351. package/dist/cluster/MessageStorage.js +20 -12
  352. package/dist/cluster/MessageStorage.js.map +1 -1
  353. package/dist/cluster/Runners.d.ts.map +1 -1
  354. package/dist/cluster/Runners.js +96 -37
  355. package/dist/cluster/Runners.js.map +1 -1
  356. package/dist/cluster/Sharding.d.ts +1 -0
  357. package/dist/cluster/Sharding.d.ts.map +1 -1
  358. package/dist/cluster/Sharding.js +95 -32
  359. package/dist/cluster/Sharding.js.map +1 -1
  360. package/dist/cluster/ShardingConfig.d.ts +20 -0
  361. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  362. package/dist/cluster/ShardingConfig.js +4 -0
  363. package/dist/cluster/ShardingConfig.js.map +1 -1
  364. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  365. package/dist/cluster/SqlMessageStorage.js +40 -50
  366. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  367. package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
  368. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  369. package/dist/cluster/SqlRunnerStorage.js +10 -4
  370. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  371. package/dist/cluster/internal/entityManager.js +66 -9
  372. package/dist/cluster/internal/entityManager.js.map +1 -1
  373. package/dist/devtools/DevTools.d.ts +3 -2
  374. package/dist/devtools/DevTools.d.ts.map +1 -1
  375. package/dist/devtools/DevTools.js +3 -2
  376. package/dist/devtools/DevTools.js.map +1 -1
  377. package/dist/devtools/DevToolsClient.d.ts +11 -0
  378. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  379. package/dist/devtools/DevToolsClient.js +31 -4
  380. package/dist/devtools/DevToolsClient.js.map +1 -1
  381. package/dist/encoding/Base64Url.d.ts +29 -0
  382. package/dist/encoding/Base64Url.d.ts.map +1 -1
  383. package/dist/encoding/Base64Url.js +29 -0
  384. package/dist/encoding/Base64Url.js.map +1 -1
  385. package/dist/encoding/Ini.d.ts.map +1 -1
  386. package/dist/encoding/Ini.js +3 -0
  387. package/dist/encoding/Ini.js.map +1 -1
  388. package/dist/encoding/JsonArray.d.ts +270 -0
  389. package/dist/encoding/JsonArray.d.ts.map +1 -0
  390. package/dist/encoding/JsonArray.js +691 -0
  391. package/dist/encoding/JsonArray.js.map +1 -0
  392. package/dist/encoding/Ndjson.d.ts +43 -4
  393. package/dist/encoding/Ndjson.d.ts.map +1 -1
  394. package/dist/encoding/Ndjson.js +169 -18
  395. package/dist/encoding/Ndjson.js.map +1 -1
  396. package/dist/encoding/SchemaBinary.d.ts +9 -1
  397. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  398. package/dist/encoding/SchemaBinary.js +12 -19
  399. package/dist/encoding/SchemaBinary.js.map +1 -1
  400. package/dist/encoding/Sse.js +1 -1
  401. package/dist/encoding/Sse.js.map +1 -1
  402. package/dist/encoding/Tar.d.ts +309 -0
  403. package/dist/encoding/Tar.d.ts.map +1 -0
  404. package/dist/encoding/Tar.js +1182 -0
  405. package/dist/encoding/Tar.js.map +1 -0
  406. package/dist/encoding/Toml.js +3 -3
  407. package/dist/encoding/Toml.js.map +1 -1
  408. package/dist/encoding/Xml.d.ts +464 -0
  409. package/dist/encoding/Xml.d.ts.map +1 -0
  410. package/dist/encoding/Xml.js +1619 -0
  411. package/dist/encoding/Xml.js.map +1 -0
  412. package/dist/encoding/Yaml.d.ts +6 -2
  413. package/dist/encoding/Yaml.d.ts.map +1 -1
  414. package/dist/encoding/Yaml.js +97 -34
  415. package/dist/encoding/Yaml.js.map +1 -1
  416. package/dist/encoding/Zip.d.ts +413 -0
  417. package/dist/encoding/Zip.d.ts.map +1 -0
  418. package/dist/encoding/Zip.js +1255 -0
  419. package/dist/encoding/Zip.js.map +1 -0
  420. package/dist/encoding/index.d.ts +20 -0
  421. package/dist/encoding/index.d.ts.map +1 -1
  422. package/dist/encoding/index.js +20 -0
  423. package/dist/encoding/index.js.map +1 -1
  424. package/dist/eventlog/EventJournal.d.ts +90 -5
  425. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  426. package/dist/eventlog/EventJournal.js +488 -228
  427. package/dist/eventlog/EventJournal.js.map +1 -1
  428. package/dist/eventlog/EventLog.d.ts +180 -12
  429. package/dist/eventlog/EventLog.d.ts.map +1 -1
  430. package/dist/eventlog/EventLog.js +394 -146
  431. package/dist/eventlog/EventLog.js.map +1 -1
  432. package/dist/eventlog/EventLogEncryption.d.ts +36 -30
  433. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  434. package/dist/eventlog/EventLogEncryption.js +97 -38
  435. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  436. package/dist/eventlog/EventLogMessage.d.ts +74 -34
  437. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  438. package/dist/eventlog/EventLogMessage.js +45 -11
  439. package/dist/eventlog/EventLogMessage.js.map +1 -1
  440. package/dist/eventlog/EventLogRemote.d.ts +45 -8
  441. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  442. package/dist/eventlog/EventLogRemote.js +51 -14
  443. package/dist/eventlog/EventLogRemote.js.map +1 -1
  444. package/dist/eventlog/EventLogServer.d.ts +46 -3
  445. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  446. package/dist/eventlog/EventLogServer.js +119 -19
  447. package/dist/eventlog/EventLogServer.js.map +1 -1
  448. package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
  449. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  450. package/dist/eventlog/EventLogServerEncrypted.js +97 -70
  451. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  452. package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
  453. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  454. package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
  455. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  456. package/dist/eventlog/EventRow.d.ts +288 -0
  457. package/dist/eventlog/EventRow.d.ts.map +1 -0
  458. package/dist/eventlog/EventRow.js +435 -0
  459. package/dist/eventlog/EventRow.js.map +1 -0
  460. package/dist/eventlog/SqlEventJournal.d.ts +18 -18
  461. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  462. package/dist/eventlog/SqlEventJournal.js +387 -159
  463. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  464. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
  465. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  466. package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
  467. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  468. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
  469. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
  470. package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
  471. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  472. package/dist/eventlog/index.d.ts +5 -0
  473. package/dist/eventlog/index.d.ts.map +1 -1
  474. package/dist/eventlog/index.js +5 -0
  475. package/dist/eventlog/index.js.map +1 -1
  476. package/dist/eventlog/internal/conflicts.d.ts +47 -0
  477. package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
  478. package/dist/eventlog/internal/conflicts.js +92 -0
  479. package/dist/eventlog/internal/conflicts.js.map +1 -0
  480. package/dist/graphql/GraphQLClient.d.ts.map +1 -1
  481. package/dist/graphql/GraphQLClient.js +12 -5
  482. package/dist/graphql/GraphQLClient.js.map +1 -1
  483. package/dist/graphql/GraphQLClientError.d.ts +2 -2
  484. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  485. package/dist/graphql/GraphQLClientError.js +4 -18
  486. package/dist/graphql/GraphQLClientError.js.map +1 -1
  487. package/dist/graphql/GraphQLProtocol.d.ts +252 -11
  488. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  489. package/dist/graphql/GraphQLProtocol.js +99 -8
  490. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  491. package/dist/graphql/GraphQLResolver.d.ts +3 -1
  492. package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
  493. package/dist/graphql/GraphQLResolver.js +91 -19
  494. package/dist/graphql/GraphQLResolver.js.map +1 -1
  495. package/dist/http/FetchHttpClient.d.ts +13 -3
  496. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  497. package/dist/http/FetchHttpClient.js +56 -6
  498. package/dist/http/FetchHttpClient.js.map +1 -1
  499. package/dist/http/FindMyWay/internal/router.js +12 -1
  500. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  501. package/dist/http/Headers.d.ts +230 -3
  502. package/dist/http/Headers.d.ts.map +1 -1
  503. package/dist/http/Headers.js +267 -5
  504. package/dist/http/Headers.js.map +1 -1
  505. package/dist/http/HttpClient.d.ts +105 -0
  506. package/dist/http/HttpClient.d.ts.map +1 -1
  507. package/dist/http/HttpClient.js +69 -17
  508. package/dist/http/HttpClient.js.map +1 -1
  509. package/dist/http/HttpClientError.d.ts.map +1 -1
  510. package/dist/http/HttpClientError.js +8 -6
  511. package/dist/http/HttpClientError.js.map +1 -1
  512. package/dist/http/HttpClientRequest.d.ts +274 -7
  513. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  514. package/dist/http/HttpClientRequest.js +91 -3
  515. package/dist/http/HttpClientRequest.js.map +1 -1
  516. package/dist/http/HttpClientResponse.d.ts +53 -0
  517. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  518. package/dist/http/HttpClientResponse.js +47 -0
  519. package/dist/http/HttpClientResponse.js.map +1 -1
  520. package/dist/http/HttpEffect.d.ts +6 -2
  521. package/dist/http/HttpEffect.d.ts.map +1 -1
  522. package/dist/http/HttpEffect.js +21 -17
  523. package/dist/http/HttpEffect.js.map +1 -1
  524. package/dist/http/HttpIncomingMessage.d.ts +2 -1
  525. package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
  526. package/dist/http/HttpIncomingMessage.js +3 -23
  527. package/dist/http/HttpIncomingMessage.js.map +1 -1
  528. package/dist/http/HttpMiddleware.d.ts +179 -2
  529. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  530. package/dist/http/HttpMiddleware.js +226 -18
  531. package/dist/http/HttpMiddleware.js.map +1 -1
  532. package/dist/http/HttpRouter.d.ts.map +1 -1
  533. package/dist/http/HttpRouter.js +58 -14
  534. package/dist/http/HttpRouter.js.map +1 -1
  535. package/dist/http/HttpServerError.d.ts +5 -2
  536. package/dist/http/HttpServerError.d.ts.map +1 -1
  537. package/dist/http/HttpServerError.js +11 -7
  538. package/dist/http/HttpServerError.js.map +1 -1
  539. package/dist/http/HttpServerRequest.d.ts +25 -5
  540. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  541. package/dist/http/HttpServerRequest.js +38 -12
  542. package/dist/http/HttpServerRequest.js.map +1 -1
  543. package/dist/http/HttpServerResponse.d.ts +17 -8
  544. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  545. package/dist/http/HttpServerResponse.js +37 -21
  546. package/dist/http/HttpServerResponse.js.map +1 -1
  547. package/dist/http/HttpStaticServer.d.ts +0 -12
  548. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  549. package/dist/http/HttpStaticServer.js +25 -17
  550. package/dist/http/HttpStaticServer.js.map +1 -1
  551. package/dist/http/HttpTraceContext.js +1 -1
  552. package/dist/http/HttpTraceContext.js.map +1 -1
  553. package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
  554. package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
  555. package/dist/http/MultipartParser/internal/contentType.js +87 -5
  556. package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
  557. package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
  558. package/dist/http/MultipartParser/internal/headers.js +4 -12
  559. package/dist/http/MultipartParser/internal/headers.js.map +1 -1
  560. package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
  561. package/dist/http/MultipartParser/internal/multipart.js +6 -27
  562. package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
  563. package/dist/http/Url.d.ts.map +1 -1
  564. package/dist/http/Url.js +8 -2
  565. package/dist/http/Url.js.map +1 -1
  566. package/dist/http/UrlParams.d.ts +112 -8
  567. package/dist/http/UrlParams.d.ts.map +1 -1
  568. package/dist/http/UrlParams.js +141 -14
  569. package/dist/http/UrlParams.js.map +1 -1
  570. package/dist/http/internal/compression.d.ts +1 -1
  571. package/dist/http/internal/compression.d.ts.map +1 -1
  572. package/dist/http/internal/compression.js +2 -10
  573. package/dist/http/internal/compression.js.map +1 -1
  574. package/dist/http/internal/compressionBody.d.ts +2 -0
  575. package/dist/http/internal/compressionBody.d.ts.map +1 -0
  576. package/dist/http/internal/compressionBody.js +36 -0
  577. package/dist/http/internal/compressionBody.js.map +1 -0
  578. package/dist/http/internal/decompression.d.ts +2 -0
  579. package/dist/http/internal/decompression.d.ts.map +1 -0
  580. package/dist/http/internal/decompression.js +168 -0
  581. package/dist/http/internal/decompression.js.map +1 -0
  582. package/dist/http/internal/lazyStream.d.ts +2 -0
  583. package/dist/http/internal/lazyStream.d.ts.map +1 -0
  584. package/dist/http/internal/lazyStream.js +18 -0
  585. package/dist/http/internal/lazyStream.js.map +1 -0
  586. package/dist/http/internal/requestState.d.ts +2 -0
  587. package/dist/http/internal/requestState.d.ts.map +1 -0
  588. package/dist/http/internal/requestState.js +28 -0
  589. package/dist/http/internal/requestState.js.map +1 -0
  590. package/dist/http/internal/tracing.js +14 -4
  591. package/dist/http/internal/tracing.js.map +1 -1
  592. package/dist/http/internal/urlParams.d.ts +2 -0
  593. package/dist/http/internal/urlParams.d.ts.map +1 -0
  594. package/dist/http/internal/urlParams.js +4 -0
  595. package/dist/http/internal/urlParams.js.map +1 -0
  596. package/dist/http/internal/webResponse.d.ts +2 -0
  597. package/dist/http/internal/webResponse.d.ts.map +1 -0
  598. package/dist/http/internal/webResponse.js +12 -0
  599. package/dist/http/internal/webResponse.js.map +1 -0
  600. package/dist/http-api/HttpApi.js +1 -1
  601. package/dist/http-api/HttpApi.js.map +1 -1
  602. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  603. package/dist/http-api/HttpApiBuilder.js +121 -18
  604. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  605. package/dist/http-api/HttpApiClient.d.ts +29 -4
  606. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  607. package/dist/http-api/HttpApiClient.js +85 -24
  608. package/dist/http-api/HttpApiClient.js.map +1 -1
  609. package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
  610. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  611. package/dist/http-api/HttpApiEndpoint.js +49 -5
  612. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  613. package/dist/http-api/HttpApiError.d.ts +58 -0
  614. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  615. package/dist/http-api/HttpApiError.js +38 -12
  616. package/dist/http-api/HttpApiError.js.map +1 -1
  617. package/dist/http-api/HttpApiScalar.d.ts +2 -1
  618. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  619. package/dist/http-api/HttpApiScalar.js +6 -3
  620. package/dist/http-api/HttpApiScalar.js.map +1 -1
  621. package/dist/http-api/HttpApiSchema.d.ts +191 -9
  622. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  623. package/dist/http-api/HttpApiSchema.js +137 -4
  624. package/dist/http-api/HttpApiSchema.js.map +1 -1
  625. package/dist/http-api/HttpApiSwagger.d.ts +5 -0
  626. package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
  627. package/dist/http-api/HttpApiSwagger.js +14 -4
  628. package/dist/http-api/HttpApiSwagger.js.map +1 -1
  629. package/dist/http-api/HttpApiTest.d.ts +13 -2
  630. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  631. package/dist/http-api/HttpApiTest.js +30 -9
  632. package/dist/http-api/HttpApiTest.js.map +1 -1
  633. package/dist/http-api/OpenApi.d.ts +17 -3
  634. package/dist/http-api/OpenApi.d.ts.map +1 -1
  635. package/dist/http-api/OpenApi.js +57 -32
  636. package/dist/http-api/OpenApi.js.map +1 -1
  637. package/dist/http-api/internal/path.js +35 -10
  638. package/dist/http-api/internal/path.js.map +1 -1
  639. package/dist/index.d.ts +20 -0
  640. package/dist/index.d.ts.map +1 -1
  641. package/dist/index.js +20 -0
  642. package/dist/index.js.map +1 -1
  643. package/dist/internal/core.js +18 -2
  644. package/dist/internal/core.js.map +1 -1
  645. package/dist/internal/dateTime.js +19 -7
  646. package/dist/internal/dateTime.js.map +1 -1
  647. package/dist/internal/effect.js +89 -76
  648. package/dist/internal/effect.js.map +1 -1
  649. package/dist/internal/graphql.js +12 -2
  650. package/dist/internal/graphql.js.map +1 -1
  651. package/dist/internal/hashMap.js +2 -2
  652. package/dist/internal/hashMap.js.map +1 -1
  653. package/dist/internal/hydration.d.ts +2 -0
  654. package/dist/internal/hydration.d.ts.map +1 -0
  655. package/dist/internal/hydration.js +15 -0
  656. package/dist/internal/hydration.js.map +1 -0
  657. package/dist/internal/inflate.d.ts +2 -0
  658. package/dist/internal/inflate.d.ts.map +1 -0
  659. package/dist/internal/inflate.js +680 -0
  660. package/dist/internal/inflate.js.map +1 -0
  661. package/dist/internal/record.js +6 -0
  662. package/dist/internal/record.js.map +1 -1
  663. package/dist/internal/request.js +20 -7
  664. package/dist/internal/request.js.map +1 -1
  665. package/dist/internal/schedule.js +17 -22
  666. package/dist/internal/schedule.js.map +1 -1
  667. package/dist/internal/schema/fromJsonSchemaDocument.js +136 -126
  668. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  669. package/dist/internal/schema/interpreter.js +51 -36
  670. package/dist/internal/schema/interpreter.js.map +1 -1
  671. package/dist/internal/schema/standardSchema.js +34 -33
  672. package/dist/internal/schema/standardSchema.js.map +1 -1
  673. package/dist/internal/schema/toCodeDocument.js +7 -2
  674. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  675. package/dist/internal/schema/toCodec.js +86 -1
  676. package/dist/internal/schema/toCodec.js.map +1 -1
  677. package/dist/internal/schema/toFormatter.js +5 -5
  678. package/dist/internal/schema/toFormatter.js.map +1 -1
  679. package/dist/internal/schema/toJsonSchemaDocument.js +60 -38
  680. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  681. package/dist/internal/trie.js +1 -3
  682. package/dist/internal/trie.js.map +1 -1
  683. package/dist/internal/uuid.js +7 -3
  684. package/dist/internal/uuid.js.map +1 -1
  685. package/dist/internal/version.js +1 -1
  686. package/dist/net/NetAddress.d.ts.map +1 -1
  687. package/dist/net/NetAddress.js +2 -8
  688. package/dist/net/NetAddress.js.map +1 -1
  689. package/dist/observability/Otlp.d.ts +15 -0
  690. package/dist/observability/Otlp.d.ts.map +1 -1
  691. package/dist/observability/Otlp.js +3 -0
  692. package/dist/observability/Otlp.js.map +1 -1
  693. package/dist/observability/OtlpExporter.d.ts +8 -0
  694. package/dist/observability/OtlpExporter.d.ts.map +1 -1
  695. package/dist/observability/OtlpExporter.js +15 -13
  696. package/dist/observability/OtlpExporter.js.map +1 -1
  697. package/dist/observability/OtlpLogger.d.ts +17 -0
  698. package/dist/observability/OtlpLogger.d.ts.map +1 -1
  699. package/dist/observability/OtlpLogger.js +14 -1
  700. package/dist/observability/OtlpLogger.js.map +1 -1
  701. package/dist/observability/OtlpMetrics.d.ts +17 -0
  702. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  703. package/dist/observability/OtlpMetrics.js +18 -3
  704. package/dist/observability/OtlpMetrics.js.map +1 -1
  705. package/dist/observability/OtlpResource.d.ts +3 -1
  706. package/dist/observability/OtlpResource.d.ts.map +1 -1
  707. package/dist/observability/OtlpResource.js +11 -4
  708. package/dist/observability/OtlpResource.js.map +1 -1
  709. package/dist/observability/OtlpSerialization.d.ts +5 -0
  710. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  711. package/dist/observability/OtlpSerialization.js +14 -3
  712. package/dist/observability/OtlpSerialization.js.map +1 -1
  713. package/dist/observability/OtlpTracer.d.ts +17 -0
  714. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  715. package/dist/observability/OtlpTracer.js +15 -2
  716. package/dist/observability/OtlpTracer.js.map +1 -1
  717. package/dist/observability/internal/protobuf.d.ts +0 -9
  718. package/dist/observability/internal/protobuf.d.ts.map +1 -1
  719. package/dist/observability/internal/protobuf.js +2 -10
  720. package/dist/observability/internal/protobuf.js.map +1 -1
  721. package/dist/persistence/PersistedCache.d.ts.map +1 -1
  722. package/dist/persistence/PersistedCache.js +1 -1
  723. package/dist/persistence/PersistedCache.js.map +1 -1
  724. package/dist/persistence/PersistedQueue.d.ts +6 -2
  725. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  726. package/dist/persistence/PersistedQueue.js +162 -84
  727. package/dist/persistence/PersistedQueue.js.map +1 -1
  728. package/dist/persistence/Persistence.d.ts +28 -0
  729. package/dist/persistence/Persistence.d.ts.map +1 -1
  730. package/dist/persistence/Persistence.js +36 -8
  731. package/dist/persistence/Persistence.js.map +1 -1
  732. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  733. package/dist/persistence/RateLimiter.js +8 -12
  734. package/dist/persistence/RateLimiter.js.map +1 -1
  735. package/dist/persistence/UserDirectories.d.ts +129 -0
  736. package/dist/persistence/UserDirectories.d.ts.map +1 -0
  737. package/dist/persistence/UserDirectories.js +178 -0
  738. package/dist/persistence/UserDirectories.js.map +1 -0
  739. package/dist/persistence/index.d.ts +5 -0
  740. package/dist/persistence/index.d.ts.map +1 -1
  741. package/dist/persistence/index.js +5 -0
  742. package/dist/persistence/index.js.map +1 -1
  743. package/dist/process/ChildProcess.d.ts +2 -1
  744. package/dist/process/ChildProcess.d.ts.map +1 -1
  745. package/dist/process/ChildProcess.js.map +1 -1
  746. package/dist/reactivity/AsyncResult.d.ts +6 -0
  747. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  748. package/dist/reactivity/AsyncResult.js +28 -1
  749. package/dist/reactivity/AsyncResult.js.map +1 -1
  750. package/dist/reactivity/Atom.d.ts +69 -30
  751. package/dist/reactivity/Atom.d.ts.map +1 -1
  752. package/dist/reactivity/Atom.js +40 -15
  753. package/dist/reactivity/Atom.js.map +1 -1
  754. package/dist/reactivity/AtomHttpApi.d.ts +5 -5
  755. package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
  756. package/dist/reactivity/AtomHttpApi.js +1 -1
  757. package/dist/reactivity/AtomHttpApi.js.map +1 -1
  758. package/dist/reactivity/AtomRegistry.d.ts +2 -2
  759. package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
  760. package/dist/reactivity/AtomRegistry.js +47 -10
  761. package/dist/reactivity/AtomRegistry.js.map +1 -1
  762. package/dist/reactivity/AtomRpc.d.ts +3 -3
  763. package/dist/reactivity/AtomRpc.d.ts.map +1 -1
  764. package/dist/reactivity/AtomRpc.js +1 -1
  765. package/dist/reactivity/AtomRpc.js.map +1 -1
  766. package/dist/reactivity/Hydration.d.ts.map +1 -1
  767. package/dist/reactivity/Hydration.js +46 -12
  768. package/dist/reactivity/Hydration.js.map +1 -1
  769. package/dist/reactivity/Reactivity.d.ts +71 -7
  770. package/dist/reactivity/Reactivity.d.ts.map +1 -1
  771. package/dist/reactivity/Reactivity.js +21 -12
  772. package/dist/reactivity/Reactivity.js.map +1 -1
  773. package/dist/rpc/Rpc.d.ts +18 -0
  774. package/dist/rpc/Rpc.d.ts.map +1 -1
  775. package/dist/rpc/Rpc.js +20 -0
  776. package/dist/rpc/Rpc.js.map +1 -1
  777. package/dist/rpc/RpcClient.d.ts +26 -2
  778. package/dist/rpc/RpcClient.d.ts.map +1 -1
  779. package/dist/rpc/RpcClient.js +202 -61
  780. package/dist/rpc/RpcClient.js.map +1 -1
  781. package/dist/rpc/RpcSerialization.d.ts +15 -0
  782. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  783. package/dist/rpc/RpcSerialization.js +21 -5
  784. package/dist/rpc/RpcSerialization.js.map +1 -1
  785. package/dist/rpc/RpcServer.d.ts.map +1 -1
  786. package/dist/rpc/RpcServer.js +9 -18
  787. package/dist/rpc/RpcServer.js.map +1 -1
  788. package/dist/schema/Model.d.ts +1 -1
  789. package/dist/schema/VariantSchema.d.ts +22 -3
  790. package/dist/schema/VariantSchema.d.ts.map +1 -1
  791. package/dist/schema/VariantSchema.js +32 -18
  792. package/dist/schema/VariantSchema.js.map +1 -1
  793. package/dist/socket/Socket.d.ts +23 -1
  794. package/dist/socket/Socket.d.ts.map +1 -1
  795. package/dist/socket/Socket.js +36 -3
  796. package/dist/socket/Socket.js.map +1 -1
  797. package/dist/sql/Migrator.d.ts.map +1 -1
  798. package/dist/sql/Migrator.js +15 -3
  799. package/dist/sql/Migrator.js.map +1 -1
  800. package/dist/sql/SqlClient.d.ts +151 -12
  801. package/dist/sql/SqlClient.d.ts.map +1 -1
  802. package/dist/sql/SqlClient.js +156 -34
  803. package/dist/sql/SqlClient.js.map +1 -1
  804. package/dist/sql/SqlResolver.d.ts +9 -0
  805. package/dist/sql/SqlResolver.d.ts.map +1 -1
  806. package/dist/sql/SqlResolver.js +9 -0
  807. package/dist/sql/SqlResolver.js.map +1 -1
  808. package/dist/sql/Statement.d.ts +3 -1
  809. package/dist/sql/Statement.d.ts.map +1 -1
  810. package/dist/sql/Statement.js +24 -5
  811. package/dist/sql/Statement.js.map +1 -1
  812. package/dist/testing/TestClock.d.ts +16 -3
  813. package/dist/testing/TestClock.d.ts.map +1 -1
  814. package/dist/testing/TestClock.js +115 -23
  815. package/dist/testing/TestClock.js.map +1 -1
  816. package/dist/testing/TestSchema.d.ts +7 -1
  817. package/dist/testing/TestSchema.d.ts.map +1 -1
  818. package/dist/testing/TestSchema.js +9 -3
  819. package/dist/testing/TestSchema.js.map +1 -1
  820. package/dist/workflow/Activity.js +1 -0
  821. package/dist/workflow/Activity.js.map +1 -1
  822. package/dist/workflow/Workflow.d.ts +22 -0
  823. package/dist/workflow/Workflow.d.ts.map +1 -1
  824. package/dist/workflow/Workflow.js +15 -3
  825. package/dist/workflow/Workflow.js.map +1 -1
  826. package/dist/workflow/WorkflowEngine.d.ts +20 -1
  827. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  828. package/dist/workflow/WorkflowEngine.js +52 -24
  829. package/dist/workflow/WorkflowEngine.js.map +1 -1
  830. package/package.json +13 -3
  831. package/src/Array.ts +223 -61
  832. package/src/Bytes.ts +111 -0
  833. package/src/Channel.ts +287 -439
  834. package/src/ChannelSchema.ts +1 -49
  835. package/src/Chunk.ts +55 -61
  836. package/src/Config.ts +12 -86
  837. package/src/ConfigProvider.ts +41 -44
  838. package/src/Cron.ts +6 -3
  839. package/src/Duration.ts +70 -21
  840. package/src/Effect.ts +642 -220
  841. package/src/Equivalence.ts +7 -4
  842. package/src/Exit.ts +24 -9
  843. package/src/FiberHandle.ts +10 -9
  844. package/src/FiberMap.ts +13 -66
  845. package/src/FileSystem.ts +33 -9
  846. package/src/Graph.ts +171 -1263
  847. package/src/HashSet.ts +0 -60
  848. package/src/Iterable.ts +15 -14
  849. package/src/JsonSchema.ts +28 -3
  850. package/src/Layer.ts +2 -2
  851. package/src/ManagedRuntime.ts +72 -6
  852. package/src/Match.ts +65 -12
  853. package/src/Metric.ts +249 -507
  854. package/src/MutableHashMap.ts +4 -473
  855. package/src/Number.ts +2 -2
  856. package/src/Optic.ts +17 -332
  857. package/src/Path.ts +61 -8
  858. package/src/PubSub.ts +12 -7
  859. package/src/Queue.ts +5 -37
  860. package/src/Random.ts +1 -1
  861. package/src/RcMap.ts +14 -8
  862. package/src/Record.ts +51 -0
  863. package/src/Ref.ts +7 -104
  864. package/src/References.ts +5 -4
  865. package/src/RequestResolver.ts +46 -87
  866. package/src/Resource.ts +1 -1
  867. package/src/Runtime.ts +19 -18
  868. package/src/Schedule.ts +2 -94
  869. package/src/Schema.ts +596 -348
  870. package/src/SchemaAST.ts +20 -9
  871. package/src/SchemaGetter.ts +22 -5
  872. package/src/SchemaIssue.ts +44 -53
  873. package/src/SchemaRepresentation.ts +64 -1
  874. package/src/SchemaTransformation.ts +1 -1
  875. package/src/Scope.ts +12 -2
  876. package/src/ScopedCache.ts +17 -142
  877. package/src/SemVer.ts +1528 -0
  878. package/src/SemVerRange.ts +883 -0
  879. package/src/Sink.ts +6 -2
  880. package/src/Stream.ts +334 -1011
  881. package/src/String.ts +25 -12
  882. package/src/TextDiff.ts +766 -0
  883. package/src/TxHashMap.ts +1 -103
  884. package/src/TxHashSet.ts +48 -753
  885. package/src/TxRef.ts +4 -2
  886. package/src/ai/AiError.ts +69 -5
  887. package/src/ai/Chat.ts +10 -5
  888. package/src/ai/Decision.ts +119 -22
  889. package/src/ai/DecisionModel.ts +265 -109
  890. package/src/ai/EmbeddingModel.ts +25 -13
  891. package/src/ai/LanguageModel.ts +57 -51
  892. package/src/ai/McpClient.ts +1211 -0
  893. package/src/ai/McpClientError.ts +329 -0
  894. package/src/ai/McpProtocol.ts +2 -2
  895. package/src/ai/McpSchema.ts +153 -35
  896. package/src/ai/McpServer.ts +232 -275
  897. package/src/ai/Prompt.ts +49 -35
  898. package/src/ai/Response.ts +195 -65
  899. package/src/ai/Tool.ts +12 -4
  900. package/src/ai/Toolkit.ts +78 -10
  901. package/src/ai/index.ts +12 -0
  902. package/src/ai/internal/mcpCore.ts +13 -14
  903. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
  904. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
  905. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
  906. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
  907. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
  908. package/src/ai/internal/mcpProtocol.ts +22 -2
  909. package/src/ai/internal/mcpRuntime.ts +3 -4
  910. package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
  911. package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
  912. package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
  913. package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
  914. package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
  915. package/src/cli/CliError.ts +49 -4
  916. package/src/cli/Command.ts +316 -9
  917. package/src/cli/Completions.ts +10 -0
  918. package/src/cli/Flag.ts +218 -0
  919. package/src/cli/GlobalFlag.ts +3 -3
  920. package/src/cli/Param.ts +218 -0
  921. package/src/cli/TerminalCapabilities.ts +156 -0
  922. package/src/cli/index.ts +6 -0
  923. package/src/cli/internal/command.ts +10 -4
  924. package/src/cli/internal/completions/bash.ts +7 -5
  925. package/src/cli/internal/completions/descriptor.ts +20 -1
  926. package/src/cli/internal/completions/fish.ts +12 -10
  927. package/src/cli/internal/completions/powershell.ts +25 -13
  928. package/src/cli/internal/completions/zsh.ts +15 -8
  929. package/src/cli/internal/formatter.ts +18 -0
  930. package/src/cli/internal/lexer.ts +12 -5
  931. package/src/cli/internal/parser.ts +43 -14
  932. package/src/cli/internal/wizard.ts +2 -1
  933. package/src/cluster/ClusterCron.ts +94 -35
  934. package/src/cluster/ClusterMetrics.ts +149 -7
  935. package/src/cluster/ClusterWorkflowEngine.ts +164 -53
  936. package/src/cluster/Entity.ts +4 -0
  937. package/src/cluster/MessageStorage.ts +21 -3
  938. package/src/cluster/Runners.ts +145 -72
  939. package/src/cluster/Sharding.ts +118 -38
  940. package/src/cluster/ShardingConfig.ts +15 -0
  941. package/src/cluster/SqlMessageStorage.ts +58 -55
  942. package/src/cluster/SqlRunnerStorage.ts +10 -4
  943. package/src/cluster/internal/entityManager.ts +81 -11
  944. package/src/devtools/DevTools.ts +3 -2
  945. package/src/devtools/DevToolsClient.ts +27 -10
  946. package/src/encoding/Base64Url.ts +31 -0
  947. package/src/encoding/Ini.ts +3 -0
  948. package/src/encoding/JsonArray.ts +849 -0
  949. package/src/encoding/Ndjson.ts +211 -20
  950. package/src/encoding/SchemaBinary.ts +14 -48
  951. package/src/encoding/Sse.ts +1 -1
  952. package/src/encoding/Tar.ts +1417 -0
  953. package/src/encoding/Toml.ts +3 -3
  954. package/src/encoding/Xml.ts +2037 -0
  955. package/src/encoding/Yaml.ts +108 -36
  956. package/src/encoding/Zip.ts +1558 -0
  957. package/src/encoding/index.ts +24 -0
  958. package/src/eventlog/EventJournal.ts +611 -227
  959. package/src/eventlog/EventLog.ts +496 -196
  960. package/src/eventlog/EventLogEncryption.ts +128 -43
  961. package/src/eventlog/EventLogMessage.ts +62 -11
  962. package/src/eventlog/EventLogRemote.ts +77 -21
  963. package/src/eventlog/EventLogServer.ts +162 -20
  964. package/src/eventlog/EventLogServerEncrypted.ts +121 -80
  965. package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
  966. package/src/eventlog/EventRow.ts +706 -0
  967. package/src/eventlog/SqlEventJournal.ts +453 -173
  968. package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
  969. package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
  970. package/src/eventlog/index.ts +6 -0
  971. package/src/eventlog/internal/conflicts.ts +123 -0
  972. package/src/graphql/GraphQLClient.ts +17 -5
  973. package/src/graphql/GraphQLClientError.ts +5 -12
  974. package/src/graphql/GraphQLProtocol.ts +277 -20
  975. package/src/graphql/GraphQLResolver.ts +109 -230
  976. package/src/http/FetchHttpClient.ts +61 -8
  977. package/src/http/FindMyWay/internal/router.ts +13 -1
  978. package/src/http/Headers.ts +343 -163
  979. package/src/http/HttpClient.ts +144 -136
  980. package/src/http/HttpClientError.ts +10 -6
  981. package/src/http/HttpClientRequest.ts +315 -11
  982. package/src/http/HttpClientResponse.ts +71 -0
  983. package/src/http/HttpEffect.ts +25 -33
  984. package/src/http/HttpIncomingMessage.ts +3 -23
  985. package/src/http/HttpMiddleware.ts +265 -28
  986. package/src/http/HttpRouter.ts +67 -14
  987. package/src/http/HttpServerError.ts +14 -7
  988. package/src/http/HttpServerRequest.ts +73 -14
  989. package/src/http/HttpServerResponse.ts +49 -23
  990. package/src/http/HttpStaticServer.ts +29 -19
  991. package/src/http/HttpTraceContext.ts +1 -1
  992. package/src/http/MultipartParser/internal/contentType.ts +107 -6
  993. package/src/http/MultipartParser/internal/headers.ts +4 -16
  994. package/src/http/MultipartParser/internal/multipart.ts +10 -32
  995. package/src/http/Url.ts +8 -2
  996. package/src/http/UrlParams.ts +225 -26
  997. package/src/http/internal/compression.ts +3 -17
  998. package/src/http/internal/compressionBody.ts +56 -0
  999. package/src/http/internal/decompression.ts +235 -0
  1000. package/src/http/internal/lazyStream.ts +25 -0
  1001. package/src/http/internal/requestState.ts +33 -0
  1002. package/src/http/internal/tracing.ts +21 -4
  1003. package/src/http/internal/urlParams.ts +5 -0
  1004. package/src/http/internal/webResponse.ts +20 -0
  1005. package/src/http-api/HttpApi.ts +1 -1
  1006. package/src/http-api/HttpApiBuilder.ts +151 -23
  1007. package/src/http-api/HttpApiClient.ts +160 -31
  1008. package/src/http-api/HttpApiEndpoint.ts +144 -33
  1009. package/src/http-api/HttpApiError.ts +55 -0
  1010. package/src/http-api/HttpApiScalar.ts +4 -3
  1011. package/src/http-api/HttpApiSchema.ts +275 -13
  1012. package/src/http-api/HttpApiSwagger.ts +11 -4
  1013. package/src/http-api/HttpApiTest.ts +33 -9
  1014. package/src/http-api/OpenApi.ts +84 -42
  1015. package/src/http-api/internal/path.ts +40 -12
  1016. package/src/index.ts +24 -0
  1017. package/src/internal/core.ts +22 -2
  1018. package/src/internal/dateTime.ts +20 -7
  1019. package/src/internal/effect.ts +125 -88
  1020. package/src/internal/graphql.ts +30 -7
  1021. package/src/internal/hashMap.ts +2 -2
  1022. package/src/internal/hydration.ts +15 -0
  1023. package/src/internal/inflate.ts +710 -0
  1024. package/src/internal/record.ts +6 -0
  1025. package/src/internal/request.ts +21 -6
  1026. package/src/internal/schedule.ts +20 -39
  1027. package/src/internal/schema/fromJsonSchemaDocument.ts +262 -193
  1028. package/src/internal/schema/interpreter.ts +58 -45
  1029. package/src/internal/schema/standardSchema.ts +32 -30
  1030. package/src/internal/schema/toCodeDocument.ts +8 -3
  1031. package/src/internal/schema/toCodec.ts +116 -1
  1032. package/src/internal/schema/toFormatter.ts +6 -6
  1033. package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
  1034. package/src/internal/trie.ts +1 -3
  1035. package/src/internal/uuid.ts +15 -10
  1036. package/src/internal/version.ts +1 -1
  1037. package/src/net/NetAddress.ts +2 -9
  1038. package/src/observability/Otlp.ts +18 -0
  1039. package/src/observability/OtlpExporter.ts +19 -15
  1040. package/src/observability/OtlpLogger.ts +31 -2
  1041. package/src/observability/OtlpMetrics.ts +35 -4
  1042. package/src/observability/OtlpResource.ts +16 -6
  1043. package/src/observability/OtlpSerialization.ts +17 -3
  1044. package/src/observability/OtlpTracer.ts +32 -3
  1045. package/src/observability/internal/protobuf.ts +2 -10
  1046. package/src/persistence/PersistedCache.ts +3 -1
  1047. package/src/persistence/PersistedQueue.ts +223 -153
  1048. package/src/persistence/Persistence.ts +64 -30
  1049. package/src/persistence/RateLimiter.ts +18 -21
  1050. package/src/persistence/UserDirectories.ts +273 -0
  1051. package/src/persistence/index.ts +6 -0
  1052. package/src/process/ChildProcess.ts +2 -1
  1053. package/src/reactivity/AsyncResult.ts +35 -38
  1054. package/src/reactivity/Atom.ts +134 -166
  1055. package/src/reactivity/AtomHttpApi.ts +10 -16
  1056. package/src/reactivity/AtomRegistry.ts +53 -30
  1057. package/src/reactivity/AtomRpc.ts +6 -22
  1058. package/src/reactivity/Hydration.ts +53 -12
  1059. package/src/reactivity/Reactivity.ts +97 -39
  1060. package/src/rpc/Rpc.ts +21 -0
  1061. package/src/rpc/RpcClient.ts +285 -104
  1062. package/src/rpc/RpcSerialization.ts +21 -5
  1063. package/src/rpc/RpcServer.ts +11 -20
  1064. package/src/schema/VariantSchema.ts +86 -22
  1065. package/src/socket/Socket.ts +45 -20
  1066. package/src/sql/Migrator.ts +19 -9
  1067. package/src/sql/SqlClient.ts +275 -36
  1068. package/src/sql/SqlResolver.ts +9 -0
  1069. package/src/sql/Statement.ts +35 -8
  1070. package/src/testing/TestClock.ts +147 -29
  1071. package/src/testing/TestSchema.ts +9 -3
  1072. package/src/workflow/Activity.ts +1 -0
  1073. package/src/workflow/Workflow.ts +31 -5
  1074. package/src/workflow/WorkflowEngine.ts +93 -31
  1075. package/dist/http/internal/preResponseHandler.d.ts +0 -2
  1076. package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
  1077. package/dist/http/internal/preResponseHandler.js +0 -14
  1078. package/dist/http/internal/preResponseHandler.js.map +0 -1
  1079. package/src/http/internal/preResponseHandler.ts +0 -19
package/src/Graph.ts CHANGED
@@ -1254,115 +1254,7 @@ export const compose: {
1254
1254
  const getEdgeIdentity = options?.edgeIdentity ?? ((edge: E) => edge as unknown as EI)
1255
1255
  const selfMaps = buildNodeMaps(self, getNodeIdentity)
1256
1256
  const thatMaps = buildNodeMaps(that, getNodeIdentity)
1257
- const nodes = MutableHashMap.empty</**
1258
- * Composes two graphs, merging nodes by identity.
1259
- *
1260
- * **When to use**
1261
- *
1262
- * Use when combining graphs that describe overlapping logical entities and
1263
- * should merge those entities by payload or a projected identity.
1264
- *
1265
- * **Details**
1266
- *
1267
- * Nodes and edges present in both graphs use data from `that`. The result has
1268
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1269
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1270
- * edge data. Edge identity also includes the endpoint identities.
1271
- *
1272
- * `G1 ∪ G2 = {V1 ∪ V2, E1 ∪ E2}`
1273
- *
1274
- * **Gotchas**
1275
- *
1276
- * Nodes with equal identities in one input graph are coalesced. The last node
1277
- * supplies the data, and redirected edges can collapse or become self-loops.
1278
- * Parallel edges with equal identities are also coalesced, with the last edge
1279
- * supplying the data. The result allocates new node and edge identifiers.
1280
- *
1281
- * **Example** (Combining graphs)
1282
- *
1283
- * ```ts import.meta.vitest
1284
- * import { Graph } from "effect"
1285
- *
1286
- * const left = Graph.directed<{ id: string }, string>((mutable) => {
1287
- * const a = Graph.addNode(mutable, { id: "A" })
1288
- * const b = Graph.addNode(mutable, { id: "B" })
1289
- * Graph.addEdge(mutable, a, b, "A-B")
1290
- * })
1291
- *
1292
- * const right = Graph.directed<{ id: string }, string>((mutable) => {
1293
- * const b = Graph.addNode(mutable, { id: "B" })
1294
- * const c = Graph.addNode(mutable, { id: "C" })
1295
- * Graph.addEdge(mutable, b, c, "B-C")
1296
- * })
1297
- *
1298
- * const result = Graph.compose(left, right, {
1299
- * nodeIdentity: (node) => node.id
1300
- * })
1301
- *
1302
- * Graph.nodeCount(result) // => 3
1303
- * Graph.edgeCount(result) // => 2
1304
- * ```
1305
- *
1306
- * @see {@link sum} for combining graphs without merging equal nodes
1307
- * @stability unstable
1308
- * @category set operations
1309
- * @since 4.0.0
1310
- */
1311
- NI, /**
1312
- * Composes two graphs, merging nodes by identity.
1313
- *
1314
- * **When to use**
1315
- *
1316
- * Use when combining graphs that describe overlapping logical entities and
1317
- * should merge those entities by payload or a projected identity.
1318
- *
1319
- * **Details**
1320
- *
1321
- * Nodes and edges present in both graphs use data from `that`. The result has
1322
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1323
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1324
- * edge data. Edge identity also includes the endpoint identities.
1325
- *
1326
- * `G1 ∪ G2 = {V1 ∪ V2, E1 ∪ E2}`
1327
- *
1328
- * **Gotchas**
1329
- *
1330
- * Nodes with equal identities in one input graph are coalesced. The last node
1331
- * supplies the data, and redirected edges can collapse or become self-loops.
1332
- * Parallel edges with equal identities are also coalesced, with the last edge
1333
- * supplying the data. The result allocates new node and edge identifiers.
1334
- *
1335
- * **Example** (Combining graphs)
1336
- *
1337
- * ```ts import.meta.vitest
1338
- * import { Graph } from "effect"
1339
- *
1340
- * const left = Graph.directed<{ id: string }, string>((mutable) => {
1341
- * const a = Graph.addNode(mutable, { id: "A" })
1342
- * const b = Graph.addNode(mutable, { id: "B" })
1343
- * Graph.addEdge(mutable, a, b, "A-B")
1344
- * })
1345
- *
1346
- * const right = Graph.directed<{ id: string }, string>((mutable) => {
1347
- * const b = Graph.addNode(mutable, { id: "B" })
1348
- * const c = Graph.addNode(mutable, { id: "C" })
1349
- * Graph.addEdge(mutable, b, c, "B-C")
1350
- * })
1351
- *
1352
- * const result = Graph.compose(left, right, {
1353
- * nodeIdentity: (node) => node.id
1354
- * })
1355
- *
1356
- * Graph.nodeCount(result) // => 3
1357
- * Graph.edgeCount(result) // => 2
1358
- * ```
1359
- *
1360
- * @see {@link sum} for combining graphs without merging equal nodes
1361
- * @stability unstable
1362
- * @category set operations
1363
- * @since 4.0.0
1364
- */
1365
- N>()
1257
+ const nodes = MutableHashMap.empty<NI, N>()
1366
1258
  const edges = buildEdgeMap(self, selfMaps, getEdgeIdentity)
1367
1259
 
1368
1260
  for (const [identity, data] of selfMaps.byIdentity) {
@@ -1376,121 +1268,13 @@ export const compose: {
1376
1268
  MutableHashMap.set(edges, identity, data)
1377
1269
  }
1378
1270
 
1379
- return make(self.type)</**
1380
- * Composes two graphs, merging nodes by identity.
1381
- *
1382
- * **When to use**
1383
- *
1384
- * Use when combining graphs that describe overlapping logical entities and
1385
- * should merge those entities by payload or a projected identity.
1386
- *
1387
- * **Details**
1388
- *
1389
- * Nodes and edges present in both graphs use data from `that`. The result has
1390
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1391
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1392
- * edge data. Edge identity also includes the endpoint identities.
1393
- *
1394
- * `G1 ∪ G2 = {V1 ∪ V2, E1 ∪ E2}`
1395
- *
1396
- * **Gotchas**
1397
- *
1398
- * Nodes with equal identities in one input graph are coalesced. The last node
1399
- * supplies the data, and redirected edges can collapse or become self-loops.
1400
- * Parallel edges with equal identities are also coalesced, with the last edge
1401
- * supplying the data. The result allocates new node and edge identifiers.
1402
- *
1403
- * **Example** (Combining graphs)
1404
- *
1405
- * ```ts import.meta.vitest
1406
- * import { Graph } from "effect"
1407
- *
1408
- * const left = Graph.directed<{ id: string }, string>((mutable) => {
1409
- * const a = Graph.addNode(mutable, { id: "A" })
1410
- * const b = Graph.addNode(mutable, { id: "B" })
1411
- * Graph.addEdge(mutable, a, b, "A-B")
1412
- * })
1413
- *
1414
- * const right = Graph.directed<{ id: string }, string>((mutable) => {
1415
- * const b = Graph.addNode(mutable, { id: "B" })
1416
- * const c = Graph.addNode(mutable, { id: "C" })
1417
- * Graph.addEdge(mutable, b, c, "B-C")
1418
- * })
1419
- *
1420
- * const result = Graph.compose(left, right, {
1421
- * nodeIdentity: (node) => node.id
1422
- * })
1423
- *
1424
- * Graph.nodeCount(result) // => 3
1425
- * Graph.edgeCount(result) // => 2
1426
- * ```
1427
- *
1428
- * @see {@link sum} for combining graphs without merging equal nodes
1429
- * @stability unstable
1430
- * @category set operations
1431
- * @since 4.0.0
1432
- */
1433
- N, /**
1434
- * Composes two graphs, merging nodes by identity.
1435
- *
1436
- * **When to use**
1437
- *
1438
- * Use when combining graphs that describe overlapping logical entities and
1439
- * should merge those entities by payload or a projected identity.
1440
- *
1441
- * **Details**
1442
- *
1443
- * Nodes and edges present in both graphs use data from `that`. The result has
1444
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1445
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1446
- * edge data. Edge identity also includes the endpoint identities.
1447
- *
1448
- * `G1 ∪ G2 = {V1 ∪ V2, E1 ∪ E2}`
1449
- *
1450
- * **Gotchas**
1451
- *
1452
- * Nodes with equal identities in one input graph are coalesced. The last node
1453
- * supplies the data, and redirected edges can collapse or become self-loops.
1454
- * Parallel edges with equal identities are also coalesced, with the last edge
1455
- * supplying the data. The result allocates new node and edge identifiers.
1456
- *
1457
- * **Example** (Combining graphs)
1458
- *
1459
- * ```ts import.meta.vitest
1460
- * import { Graph } from "effect"
1461
- *
1462
- * const left = Graph.directed<{ id: string }, string>((mutable) => {
1463
- * const a = Graph.addNode(mutable, { id: "A" })
1464
- * const b = Graph.addNode(mutable, { id: "B" })
1465
- * Graph.addEdge(mutable, a, b, "A-B")
1466
- * })
1467
- *
1468
- * const right = Graph.directed<{ id: string }, string>((mutable) => {
1469
- * const b = Graph.addNode(mutable, { id: "B" })
1470
- * const c = Graph.addNode(mutable, { id: "C" })
1471
- * Graph.addEdge(mutable, b, c, "B-C")
1472
- * })
1473
- *
1474
- * const result = Graph.compose(left, right, {
1475
- * nodeIdentity: (node) => node.id
1476
- * })
1477
- *
1478
- * Graph.nodeCount(result) // => 3
1479
- * Graph.edgeCount(result) // => 2
1480
- * ```
1481
- *
1482
- * @see {@link sum} for combining graphs without merging equal nodes
1483
- * @stability unstable
1484
- * @category set operations
1485
- * @since 4.0.0
1486
- */
1487
- E>((mutable) => {
1271
+ return make(self.type)<N, E>((mutable) => {
1488
1272
  const indexByIdentity = addNodesByIdentity(mutable, nodes)
1489
1273
 
1490
1274
  for (const [identity, data] of edges) {
1491
1275
  addEdgeByIdentity(mutable, indexByIdentity, identity, data)
1492
1276
  }
1493
- });
1277
+ })
1494
1278
  }
1495
1279
  )
1496
1280
 
@@ -1668,83 +1452,116 @@ export const intersection: {
1668
1452
  const getEdgeIdentity = options?.edgeIdentity ?? ((edge: E) => edge as unknown as EI)
1669
1453
  const selfMaps = buildNodeMaps(self, getNodeIdentity)
1670
1454
  const thatMaps = buildNodeMaps(that, getNodeIdentity)
1671
- const nodes = MutableHashMap.empty</**
1672
- * Returns the intersection of two graphs, matching nodes by identity.
1673
- *
1674
- * **When to use**
1675
- *
1676
- * Use when extracting nodes and edges that represent the same logical
1677
- * structure in both graphs.
1678
- *
1679
- * **Details**
1680
- *
1681
- * Node data comes from `self`, and edge data comes from `that`. The result has
1682
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1683
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1684
- * edge data. Edge identity also includes the endpoint identities.
1685
- *
1686
- * `G1 ∩ G2 = {V1 ∩ V2, E1 ∩ E2}`
1687
- *
1688
- * **Gotchas**
1689
- *
1690
- * Nodes with equal identities in one input graph are coalesced. The last node
1691
- * supplies the data, and redirected edges can collapse or become self-loops.
1692
- * The result contains at most one edge for each shared edge identity and
1693
- * allocates new node and edge identifiers.
1694
- *
1695
- * **Example** (Finding shared structure)
1696
- *
1697
- * ```ts import.meta.vitest
1698
- * import { Graph } from "effect"
1699
- *
1700
- * const left = Graph.directed<string, string>((mutable) => {
1701
- * const a = Graph.addNode(mutable, "A")
1702
- * const b = Graph.addNode(mutable, "B")
1703
- * Graph.addEdge(mutable, a, b, "shared")
1704
- * })
1705
- *
1706
- * const right = Graph.directed<string, string>((mutable) => {
1707
- * const a = Graph.addNode(mutable, "A")
1708
- * const b = Graph.addNode(mutable, "B")
1709
- * Graph.addEdge(mutable, a, b, "shared")
1710
- * })
1711
- *
1712
- * const result = Graph.intersection(left, right)
1713
- *
1714
- * Graph.nodeCount(result) // => 2
1715
- * Graph.edgeCount(result) // => 1
1716
- * ```
1717
- *
1718
- * @see {@link compose} for identity-based graph union
1719
- * @stability unstable
1720
- * @category set operations
1721
- * @since 4.0.0
1722
- */
1723
- NI, /**
1724
- * Returns the intersection of two graphs, matching nodes by identity.
1455
+ const nodes = MutableHashMap.empty<NI, N>()
1456
+ const selfEdges = buildEdgeMap(self, selfMaps, getEdgeIdentity)
1457
+ const thatEdges = MutableHashMap.empty<EdgeIdentity<NI, EI>, E>()
1458
+
1459
+ for (const [identity, data] of selfMaps.byIdentity) {
1460
+ if (MutableHashMap.has(thatMaps.byIdentity, identity)) {
1461
+ MutableHashMap.set(nodes, identity, data)
1462
+ }
1463
+ }
1464
+
1465
+ for (const edge of thatImpl.edges.values()) {
1466
+ const sourceIdentity = nodeIdentityAt(thatMaps, edge.source)
1467
+ const targetIdentity = nodeIdentityAt(thatMaps, edge.target)
1468
+ if (MutableHashMap.has(nodes, sourceIdentity) && MutableHashMap.has(nodes, targetIdentity)) {
1469
+ const edgeIdentity = new EdgeIdentity(that.type, sourceIdentity, targetIdentity, getEdgeIdentity(edge.data))
1470
+ MutableHashMap.set(thatEdges, edgeIdentity, edge.data)
1471
+ }
1472
+ }
1473
+
1474
+ return make(self.type)<N, E>((mutable) => {
1475
+ const indexByIdentity = addNodesByIdentity(mutable, nodes)
1476
+
1477
+ for (const [identity, data] of thatEdges) {
1478
+ if (MutableHashMap.has(selfEdges, identity)) {
1479
+ addEdgeByIdentity(mutable, indexByIdentity, identity, data)
1480
+ }
1481
+ }
1482
+ })
1483
+ })
1484
+
1485
+ /**
1486
+ * Returns `self` without edges also present in `that`.
1487
+ *
1488
+ * **When to use**
1489
+ *
1490
+ * Use when retaining all logical nodes from one graph while removing edge
1491
+ * relationships also represented by another graph.
1492
+ *
1493
+ * **Details**
1494
+ *
1495
+ * All nodes from `self` are preserved. Edges are matched by endpoint and edge
1496
+ * identities. The result has the same graph kind as `self`. Throws a
1497
+ * `GraphError` when the graph kinds do not match. `nodeIdentity` and
1498
+ * `edgeIdentity` default to the complete node and edge data.
1499
+ *
1500
+ * `G1 \ G2 = {V1, E1 \ E2}`
1501
+ *
1502
+ * **Gotchas**
1503
+ *
1504
+ * Nodes with equal identities in one input graph are coalesced. The last node
1505
+ * supplies the data, and redirected edges can collapse or become self-loops.
1506
+ * If `that` contains an edge identity, every parallel edge with that identity
1507
+ * is removed from `self`. The result allocates new node and edge identifiers.
1508
+ *
1509
+ * **Example** (Removing shared edges)
1510
+ *
1511
+ * ```ts import.meta.vitest
1512
+ * import { Graph } from "effect"
1513
+ *
1514
+ * const left = Graph.directed<string, string>((mutable) => {
1515
+ * const a = Graph.addNode(mutable, "A")
1516
+ * const b = Graph.addNode(mutable, "B")
1517
+ * const c = Graph.addNode(mutable, "C")
1518
+ * Graph.addEdge(mutable, a, b, "A-B")
1519
+ * Graph.addEdge(mutable, b, c, "B-C")
1520
+ * })
1521
+ *
1522
+ * const right = Graph.directed<string, string>((mutable) => {
1523
+ * const b = Graph.addNode(mutable, "B")
1524
+ * const c = Graph.addNode(mutable, "C")
1525
+ * Graph.addEdge(mutable, b, c, "B-C")
1526
+ * })
1527
+ *
1528
+ * const result = Graph.difference(left, right)
1529
+ *
1530
+ * Graph.nodeCount(result) // => 3
1531
+ * Graph.edgeCount(result) // => 1
1532
+ * ```
1533
+ *
1534
+ * @see {@link symmetricDifference} for retaining edges unique to either graph
1535
+ * @stability unstable
1536
+ * @category set operations
1537
+ * @since 4.0.0
1538
+ */
1539
+ export const difference: {
1540
+ /**
1541
+ * Returns `self` without edges also present in `that`.
1725
1542
  *
1726
1543
  * **When to use**
1727
1544
  *
1728
- * Use when extracting nodes and edges that represent the same logical
1729
- * structure in both graphs.
1545
+ * Use when retaining all logical nodes from one graph while removing edge
1546
+ * relationships also represented by another graph.
1730
1547
  *
1731
1548
  * **Details**
1732
1549
  *
1733
- * Node data comes from `self`, and edge data comes from `that`. The result has
1734
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1735
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1736
- * edge data. Edge identity also includes the endpoint identities.
1550
+ * All nodes from `self` are preserved. Edges are matched by endpoint and edge
1551
+ * identities. The result has the same graph kind as `self`. Throws a
1552
+ * `GraphError` when the graph kinds do not match. `nodeIdentity` and
1553
+ * `edgeIdentity` default to the complete node and edge data.
1737
1554
  *
1738
- * `G1 ∩ G2 = {V1 ∩ V2, E1 ∩ E2}`
1555
+ * `G1 \ G2 = {V1, E1 \ E2}`
1739
1556
  *
1740
1557
  * **Gotchas**
1741
1558
  *
1742
1559
  * Nodes with equal identities in one input graph are coalesced. The last node
1743
1560
  * supplies the data, and redirected edges can collapse or become self-loops.
1744
- * The result contains at most one edge for each shared edge identity and
1745
- * allocates new node and edge identifiers.
1561
+ * If `that` contains an edge identity, every parallel edge with that identity
1562
+ * is removed from `self`. The result allocates new node and edge identifiers.
1746
1563
  *
1747
- * **Example** (Finding shared structure)
1564
+ * **Example** (Removing shared edges)
1748
1565
  *
1749
1566
  * ```ts import.meta.vitest
1750
1567
  * import { Graph } from "effect"
@@ -1752,53 +1569,54 @@ export const intersection: {
1752
1569
  * const left = Graph.directed<string, string>((mutable) => {
1753
1570
  * const a = Graph.addNode(mutable, "A")
1754
1571
  * const b = Graph.addNode(mutable, "B")
1755
- * Graph.addEdge(mutable, a, b, "shared")
1572
+ * const c = Graph.addNode(mutable, "C")
1573
+ * Graph.addEdge(mutable, a, b, "A-B")
1574
+ * Graph.addEdge(mutable, b, c, "B-C")
1756
1575
  * })
1757
1576
  *
1758
1577
  * const right = Graph.directed<string, string>((mutable) => {
1759
- * const a = Graph.addNode(mutable, "A")
1760
1578
  * const b = Graph.addNode(mutable, "B")
1761
- * Graph.addEdge(mutable, a, b, "shared")
1579
+ * const c = Graph.addNode(mutable, "C")
1580
+ * Graph.addEdge(mutable, b, c, "B-C")
1762
1581
  * })
1763
1582
  *
1764
- * const result = Graph.intersection(left, right)
1583
+ * const result = Graph.difference(left, right)
1765
1584
  *
1766
- * Graph.nodeCount(result) // => 2
1585
+ * Graph.nodeCount(result) // => 3
1767
1586
  * Graph.edgeCount(result) // => 1
1768
1587
  * ```
1769
1588
  *
1770
- * @see {@link compose} for identity-based graph union
1589
+ * @see {@link symmetricDifference} for retaining edges unique to either graph
1771
1590
  * @stability unstable
1772
1591
  * @category set operations
1773
1592
  * @since 4.0.0
1774
1593
  */
1775
- N>()
1776
- const selfEdges = buildEdgeMap(self, selfMaps, getEdgeIdentity)
1777
- const thatEdges = MutableHashMap.empty</**
1778
- * Returns the intersection of two graphs, matching nodes by identity.
1594
+ <N, E, T extends Kind = "directed", NI = N, EI = E>(that: Graph<N, E, T>, options?: IdentityOptions<N, E, NI, EI>): (self: Graph<N, E, NoInfer<T>>) => Graph<N, E, T>
1595
+ /**
1596
+ * Returns `self` without edges also present in `that`.
1779
1597
  *
1780
1598
  * **When to use**
1781
1599
  *
1782
- * Use when extracting nodes and edges that represent the same logical
1783
- * structure in both graphs.
1600
+ * Use when retaining all logical nodes from one graph while removing edge
1601
+ * relationships also represented by another graph.
1784
1602
  *
1785
1603
  * **Details**
1786
1604
  *
1787
- * Node data comes from `self`, and edge data comes from `that`. The result has
1788
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1789
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1790
- * edge data. Edge identity also includes the endpoint identities.
1605
+ * All nodes from `self` are preserved. Edges are matched by endpoint and edge
1606
+ * identities. The result has the same graph kind as `self`. Throws a
1607
+ * `GraphError` when the graph kinds do not match. `nodeIdentity` and
1608
+ * `edgeIdentity` default to the complete node and edge data.
1791
1609
  *
1792
- * `G1 ∩ G2 = {V1 ∩ V2, E1 ∩ E2}`
1610
+ * `G1 \ G2 = {V1, E1 \ E2}`
1793
1611
  *
1794
1612
  * **Gotchas**
1795
1613
  *
1796
1614
  * Nodes with equal identities in one input graph are coalesced. The last node
1797
1615
  * supplies the data, and redirected edges can collapse or become self-loops.
1798
- * The result contains at most one edge for each shared edge identity and
1799
- * allocates new node and edge identifiers.
1616
+ * If `that` contains an edge identity, every parallel edge with that identity
1617
+ * is removed from `self`. The result allocates new node and edge identifiers.
1800
1618
  *
1801
- * **Example** (Finding shared structure)
1619
+ * **Example** (Removing shared edges)
1802
1620
  *
1803
1621
  * ```ts import.meta.vitest
1804
1622
  * import { Graph } from "effect"
@@ -1806,370 +1624,24 @@ export const intersection: {
1806
1624
  * const left = Graph.directed<string, string>((mutable) => {
1807
1625
  * const a = Graph.addNode(mutable, "A")
1808
1626
  * const b = Graph.addNode(mutable, "B")
1809
- * Graph.addEdge(mutable, a, b, "shared")
1627
+ * const c = Graph.addNode(mutable, "C")
1628
+ * Graph.addEdge(mutable, a, b, "A-B")
1629
+ * Graph.addEdge(mutable, b, c, "B-C")
1810
1630
  * })
1811
1631
  *
1812
1632
  * const right = Graph.directed<string, string>((mutable) => {
1813
- * const a = Graph.addNode(mutable, "A")
1814
1633
  * const b = Graph.addNode(mutable, "B")
1815
- * Graph.addEdge(mutable, a, b, "shared")
1634
+ * const c = Graph.addNode(mutable, "C")
1635
+ * Graph.addEdge(mutable, b, c, "B-C")
1816
1636
  * })
1817
1637
  *
1818
- * const result = Graph.intersection(left, right)
1638
+ * const result = Graph.difference(left, right)
1819
1639
  *
1820
- * Graph.nodeCount(result) // => 2
1640
+ * Graph.nodeCount(result) // => 3
1821
1641
  * Graph.edgeCount(result) // => 1
1822
1642
  * ```
1823
1643
  *
1824
- * @see {@link compose} for identity-based graph union
1825
- * @stability unstable
1826
- * @category set operations
1827
- * @since 4.0.0
1828
- */
1829
- EdgeIdentity<NI, EI>, /**
1830
- * Returns the intersection of two graphs, matching nodes by identity.
1831
- *
1832
- * **When to use**
1833
- *
1834
- * Use when extracting nodes and edges that represent the same logical
1835
- * structure in both graphs.
1836
- *
1837
- * **Details**
1838
- *
1839
- * Node data comes from `self`, and edge data comes from `that`. The result has
1840
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1841
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1842
- * edge data. Edge identity also includes the endpoint identities.
1843
- *
1844
- * `G1 ∩ G2 = {V1 ∩ V2, E1 ∩ E2}`
1845
- *
1846
- * **Gotchas**
1847
- *
1848
- * Nodes with equal identities in one input graph are coalesced. The last node
1849
- * supplies the data, and redirected edges can collapse or become self-loops.
1850
- * The result contains at most one edge for each shared edge identity and
1851
- * allocates new node and edge identifiers.
1852
- *
1853
- * **Example** (Finding shared structure)
1854
- *
1855
- * ```ts import.meta.vitest
1856
- * import { Graph } from "effect"
1857
- *
1858
- * const left = Graph.directed<string, string>((mutable) => {
1859
- * const a = Graph.addNode(mutable, "A")
1860
- * const b = Graph.addNode(mutable, "B")
1861
- * Graph.addEdge(mutable, a, b, "shared")
1862
- * })
1863
- *
1864
- * const right = Graph.directed<string, string>((mutable) => {
1865
- * const a = Graph.addNode(mutable, "A")
1866
- * const b = Graph.addNode(mutable, "B")
1867
- * Graph.addEdge(mutable, a, b, "shared")
1868
- * })
1869
- *
1870
- * const result = Graph.intersection(left, right)
1871
- *
1872
- * Graph.nodeCount(result) // => 2
1873
- * Graph.edgeCount(result) // => 1
1874
- * ```
1875
- *
1876
- * @see {@link compose} for identity-based graph union
1877
- * @stability unstable
1878
- * @category set operations
1879
- * @since 4.0.0
1880
- */
1881
- E>()
1882
-
1883
- for (const [identity, data] of selfMaps.byIdentity) {
1884
- if (MutableHashMap.has(thatMaps.byIdentity, identity)) {
1885
- MutableHashMap.set(nodes, identity, data)
1886
- }
1887
- }
1888
-
1889
- for (const edge of thatImpl.edges.values()) {
1890
- const sourceIdentity = nodeIdentityAt(thatMaps, edge.source)
1891
- const targetIdentity = nodeIdentityAt(thatMaps, edge.target)
1892
- if (MutableHashMap.has(nodes, sourceIdentity) && MutableHashMap.has(nodes, targetIdentity)) {
1893
- const edgeIdentity = new EdgeIdentity(that.type, sourceIdentity, targetIdentity, getEdgeIdentity(edge.data))
1894
- MutableHashMap.set(thatEdges, edgeIdentity, edge.data)
1895
- }
1896
- }
1897
-
1898
- return make(self.type)</**
1899
- * Returns the intersection of two graphs, matching nodes by identity.
1900
- *
1901
- * **When to use**
1902
- *
1903
- * Use when extracting nodes and edges that represent the same logical
1904
- * structure in both graphs.
1905
- *
1906
- * **Details**
1907
- *
1908
- * Node data comes from `self`, and edge data comes from `that`. The result has
1909
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1910
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1911
- * edge data. Edge identity also includes the endpoint identities.
1912
- *
1913
- * `G1 ∩ G2 = {V1 ∩ V2, E1 ∩ E2}`
1914
- *
1915
- * **Gotchas**
1916
- *
1917
- * Nodes with equal identities in one input graph are coalesced. The last node
1918
- * supplies the data, and redirected edges can collapse or become self-loops.
1919
- * The result contains at most one edge for each shared edge identity and
1920
- * allocates new node and edge identifiers.
1921
- *
1922
- * **Example** (Finding shared structure)
1923
- *
1924
- * ```ts import.meta.vitest
1925
- * import { Graph } from "effect"
1926
- *
1927
- * const left = Graph.directed<string, string>((mutable) => {
1928
- * const a = Graph.addNode(mutable, "A")
1929
- * const b = Graph.addNode(mutable, "B")
1930
- * Graph.addEdge(mutable, a, b, "shared")
1931
- * })
1932
- *
1933
- * const right = Graph.directed<string, string>((mutable) => {
1934
- * const a = Graph.addNode(mutable, "A")
1935
- * const b = Graph.addNode(mutable, "B")
1936
- * Graph.addEdge(mutable, a, b, "shared")
1937
- * })
1938
- *
1939
- * const result = Graph.intersection(left, right)
1940
- *
1941
- * Graph.nodeCount(result) // => 2
1942
- * Graph.edgeCount(result) // => 1
1943
- * ```
1944
- *
1945
- * @see {@link compose} for identity-based graph union
1946
- * @stability unstable
1947
- * @category set operations
1948
- * @since 4.0.0
1949
- */
1950
- N, /**
1951
- * Returns the intersection of two graphs, matching nodes by identity.
1952
- *
1953
- * **When to use**
1954
- *
1955
- * Use when extracting nodes and edges that represent the same logical
1956
- * structure in both graphs.
1957
- *
1958
- * **Details**
1959
- *
1960
- * Node data comes from `self`, and edge data comes from `that`. The result has
1961
- * the same graph kind as `self`. Throws a `GraphError` when the graph kinds do
1962
- * not match. `nodeIdentity` and `edgeIdentity` default to the complete node and
1963
- * edge data. Edge identity also includes the endpoint identities.
1964
- *
1965
- * `G1 ∩ G2 = {V1 ∩ V2, E1 ∩ E2}`
1966
- *
1967
- * **Gotchas**
1968
- *
1969
- * Nodes with equal identities in one input graph are coalesced. The last node
1970
- * supplies the data, and redirected edges can collapse or become self-loops.
1971
- * The result contains at most one edge for each shared edge identity and
1972
- * allocates new node and edge identifiers.
1973
- *
1974
- * **Example** (Finding shared structure)
1975
- *
1976
- * ```ts import.meta.vitest
1977
- * import { Graph } from "effect"
1978
- *
1979
- * const left = Graph.directed<string, string>((mutable) => {
1980
- * const a = Graph.addNode(mutable, "A")
1981
- * const b = Graph.addNode(mutable, "B")
1982
- * Graph.addEdge(mutable, a, b, "shared")
1983
- * })
1984
- *
1985
- * const right = Graph.directed<string, string>((mutable) => {
1986
- * const a = Graph.addNode(mutable, "A")
1987
- * const b = Graph.addNode(mutable, "B")
1988
- * Graph.addEdge(mutable, a, b, "shared")
1989
- * })
1990
- *
1991
- * const result = Graph.intersection(left, right)
1992
- *
1993
- * Graph.nodeCount(result) // => 2
1994
- * Graph.edgeCount(result) // => 1
1995
- * ```
1996
- *
1997
- * @see {@link compose} for identity-based graph union
1998
- * @stability unstable
1999
- * @category set operations
2000
- * @since 4.0.0
2001
- */
2002
- E>((mutable) => {
2003
- const indexByIdentity = addNodesByIdentity(mutable, nodes)
2004
-
2005
- for (const [identity, data] of thatEdges) {
2006
- if (MutableHashMap.has(selfEdges, identity)) {
2007
- addEdgeByIdentity(mutable, indexByIdentity, identity, data)
2008
- }
2009
- }
2010
- });
2011
- })
2012
-
2013
- /**
2014
- * Returns `self` without edges also present in `that`.
2015
- *
2016
- * **When to use**
2017
- *
2018
- * Use when retaining all logical nodes from one graph while removing edge
2019
- * relationships also represented by another graph.
2020
- *
2021
- * **Details**
2022
- *
2023
- * All nodes from `self` are preserved. Edges are matched by endpoint and edge
2024
- * identities. The result has the same graph kind as `self`. Throws a
2025
- * `GraphError` when the graph kinds do not match. `nodeIdentity` and
2026
- * `edgeIdentity` default to the complete node and edge data.
2027
- *
2028
- * `G1 \ G2 = {V1, E1 \ E2}`
2029
- *
2030
- * **Gotchas**
2031
- *
2032
- * Nodes with equal identities in one input graph are coalesced. The last node
2033
- * supplies the data, and redirected edges can collapse or become self-loops.
2034
- * If `that` contains an edge identity, every parallel edge with that identity
2035
- * is removed from `self`. The result allocates new node and edge identifiers.
2036
- *
2037
- * **Example** (Removing shared edges)
2038
- *
2039
- * ```ts import.meta.vitest
2040
- * import { Graph } from "effect"
2041
- *
2042
- * const left = Graph.directed<string, string>((mutable) => {
2043
- * const a = Graph.addNode(mutable, "A")
2044
- * const b = Graph.addNode(mutable, "B")
2045
- * const c = Graph.addNode(mutable, "C")
2046
- * Graph.addEdge(mutable, a, b, "A-B")
2047
- * Graph.addEdge(mutable, b, c, "B-C")
2048
- * })
2049
- *
2050
- * const right = Graph.directed<string, string>((mutable) => {
2051
- * const b = Graph.addNode(mutable, "B")
2052
- * const c = Graph.addNode(mutable, "C")
2053
- * Graph.addEdge(mutable, b, c, "B-C")
2054
- * })
2055
- *
2056
- * const result = Graph.difference(left, right)
2057
- *
2058
- * Graph.nodeCount(result) // => 3
2059
- * Graph.edgeCount(result) // => 1
2060
- * ```
2061
- *
2062
- * @see {@link symmetricDifference} for retaining edges unique to either graph
2063
- * @stability unstable
2064
- * @category set operations
2065
- * @since 4.0.0
2066
- */
2067
- export const difference: {
2068
- /**
2069
- * Returns `self` without edges also present in `that`.
2070
- *
2071
- * **When to use**
2072
- *
2073
- * Use when retaining all logical nodes from one graph while removing edge
2074
- * relationships also represented by another graph.
2075
- *
2076
- * **Details**
2077
- *
2078
- * All nodes from `self` are preserved. Edges are matched by endpoint and edge
2079
- * identities. The result has the same graph kind as `self`. Throws a
2080
- * `GraphError` when the graph kinds do not match. `nodeIdentity` and
2081
- * `edgeIdentity` default to the complete node and edge data.
2082
- *
2083
- * `G1 \ G2 = {V1, E1 \ E2}`
2084
- *
2085
- * **Gotchas**
2086
- *
2087
- * Nodes with equal identities in one input graph are coalesced. The last node
2088
- * supplies the data, and redirected edges can collapse or become self-loops.
2089
- * If `that` contains an edge identity, every parallel edge with that identity
2090
- * is removed from `self`. The result allocates new node and edge identifiers.
2091
- *
2092
- * **Example** (Removing shared edges)
2093
- *
2094
- * ```ts import.meta.vitest
2095
- * import { Graph } from "effect"
2096
- *
2097
- * const left = Graph.directed<string, string>((mutable) => {
2098
- * const a = Graph.addNode(mutable, "A")
2099
- * const b = Graph.addNode(mutable, "B")
2100
- * const c = Graph.addNode(mutable, "C")
2101
- * Graph.addEdge(mutable, a, b, "A-B")
2102
- * Graph.addEdge(mutable, b, c, "B-C")
2103
- * })
2104
- *
2105
- * const right = Graph.directed<string, string>((mutable) => {
2106
- * const b = Graph.addNode(mutable, "B")
2107
- * const c = Graph.addNode(mutable, "C")
2108
- * Graph.addEdge(mutable, b, c, "B-C")
2109
- * })
2110
- *
2111
- * const result = Graph.difference(left, right)
2112
- *
2113
- * Graph.nodeCount(result) // => 3
2114
- * Graph.edgeCount(result) // => 1
2115
- * ```
2116
- *
2117
- * @see {@link symmetricDifference} for retaining edges unique to either graph
2118
- * @stability unstable
2119
- * @category set operations
2120
- * @since 4.0.0
2121
- */
2122
- <N, E, T extends Kind = "directed", NI = N, EI = E>(that: Graph<N, E, T>, options?: IdentityOptions<N, E, NI, EI>): (self: Graph<N, E, NoInfer<T>>) => Graph<N, E, T>
2123
- /**
2124
- * Returns `self` without edges also present in `that`.
2125
- *
2126
- * **When to use**
2127
- *
2128
- * Use when retaining all logical nodes from one graph while removing edge
2129
- * relationships also represented by another graph.
2130
- *
2131
- * **Details**
2132
- *
2133
- * All nodes from `self` are preserved. Edges are matched by endpoint and edge
2134
- * identities. The result has the same graph kind as `self`. Throws a
2135
- * `GraphError` when the graph kinds do not match. `nodeIdentity` and
2136
- * `edgeIdentity` default to the complete node and edge data.
2137
- *
2138
- * `G1 \ G2 = {V1, E1 \ E2}`
2139
- *
2140
- * **Gotchas**
2141
- *
2142
- * Nodes with equal identities in one input graph are coalesced. The last node
2143
- * supplies the data, and redirected edges can collapse or become self-loops.
2144
- * If `that` contains an edge identity, every parallel edge with that identity
2145
- * is removed from `self`. The result allocates new node and edge identifiers.
2146
- *
2147
- * **Example** (Removing shared edges)
2148
- *
2149
- * ```ts import.meta.vitest
2150
- * import { Graph } from "effect"
2151
- *
2152
- * const left = Graph.directed<string, string>((mutable) => {
2153
- * const a = Graph.addNode(mutable, "A")
2154
- * const b = Graph.addNode(mutable, "B")
2155
- * const c = Graph.addNode(mutable, "C")
2156
- * Graph.addEdge(mutable, a, b, "A-B")
2157
- * Graph.addEdge(mutable, b, c, "B-C")
2158
- * })
2159
- *
2160
- * const right = Graph.directed<string, string>((mutable) => {
2161
- * const b = Graph.addNode(mutable, "B")
2162
- * const c = Graph.addNode(mutable, "C")
2163
- * Graph.addEdge(mutable, b, c, "B-C")
2164
- * })
2165
- *
2166
- * const result = Graph.difference(left, right)
2167
- *
2168
- * Graph.nodeCount(result) // => 3
2169
- * Graph.edgeCount(result) // => 1
2170
- * ```
2171
- *
2172
- * @see {@link symmetricDifference} for retaining edges unique to either graph
1644
+ * @see {@link symmetricDifference} for retaining edges unique to either graph
2173
1645
  * @stability unstable
2174
1646
  * @category set operations
2175
1647
  * @since 4.0.0
@@ -2191,116 +1663,8 @@ export const difference: {
2191
1663
  const selfMaps = buildNodeMaps(self, getNodeIdentity)
2192
1664
  const thatMaps = buildNodeMaps(that, getNodeIdentity)
2193
1665
  const thatEdges = buildEdgeMap(that, thatMaps, getEdgeIdentity)
2194
-
2195
- return make(self.type)</**
2196
- * Returns `self` without edges also present in `that`.
2197
- *
2198
- * **When to use**
2199
- *
2200
- * Use when retaining all logical nodes from one graph while removing edge
2201
- * relationships also represented by another graph.
2202
- *
2203
- * **Details**
2204
- *
2205
- * All nodes from `self` are preserved. Edges are matched by endpoint and edge
2206
- * identities. The result has the same graph kind as `self`. Throws a
2207
- * `GraphError` when the graph kinds do not match. `nodeIdentity` and
2208
- * `edgeIdentity` default to the complete node and edge data.
2209
- *
2210
- * `G1 \ G2 = {V1, E1 \ E2}`
2211
- *
2212
- * **Gotchas**
2213
- *
2214
- * Nodes with equal identities in one input graph are coalesced. The last node
2215
- * supplies the data, and redirected edges can collapse or become self-loops.
2216
- * If `that` contains an edge identity, every parallel edge with that identity
2217
- * is removed from `self`. The result allocates new node and edge identifiers.
2218
- *
2219
- * **Example** (Removing shared edges)
2220
- *
2221
- * ```ts import.meta.vitest
2222
- * import { Graph } from "effect"
2223
- *
2224
- * const left = Graph.directed<string, string>((mutable) => {
2225
- * const a = Graph.addNode(mutable, "A")
2226
- * const b = Graph.addNode(mutable, "B")
2227
- * const c = Graph.addNode(mutable, "C")
2228
- * Graph.addEdge(mutable, a, b, "A-B")
2229
- * Graph.addEdge(mutable, b, c, "B-C")
2230
- * })
2231
- *
2232
- * const right = Graph.directed<string, string>((mutable) => {
2233
- * const b = Graph.addNode(mutable, "B")
2234
- * const c = Graph.addNode(mutable, "C")
2235
- * Graph.addEdge(mutable, b, c, "B-C")
2236
- * })
2237
- *
2238
- * const result = Graph.difference(left, right)
2239
- *
2240
- * Graph.nodeCount(result) // => 3
2241
- * Graph.edgeCount(result) // => 1
2242
- * ```
2243
- *
2244
- * @see {@link symmetricDifference} for retaining edges unique to either graph
2245
- * @stability unstable
2246
- * @category set operations
2247
- * @since 4.0.0
2248
- */
2249
- N, /**
2250
- * Returns `self` without edges also present in `that`.
2251
- *
2252
- * **When to use**
2253
- *
2254
- * Use when retaining all logical nodes from one graph while removing edge
2255
- * relationships also represented by another graph.
2256
- *
2257
- * **Details**
2258
- *
2259
- * All nodes from `self` are preserved. Edges are matched by endpoint and edge
2260
- * identities. The result has the same graph kind as `self`. Throws a
2261
- * `GraphError` when the graph kinds do not match. `nodeIdentity` and
2262
- * `edgeIdentity` default to the complete node and edge data.
2263
- *
2264
- * `G1 \ G2 = {V1, E1 \ E2}`
2265
- *
2266
- * **Gotchas**
2267
- *
2268
- * Nodes with equal identities in one input graph are coalesced. The last node
2269
- * supplies the data, and redirected edges can collapse or become self-loops.
2270
- * If `that` contains an edge identity, every parallel edge with that identity
2271
- * is removed from `self`. The result allocates new node and edge identifiers.
2272
- *
2273
- * **Example** (Removing shared edges)
2274
- *
2275
- * ```ts import.meta.vitest
2276
- * import { Graph } from "effect"
2277
- *
2278
- * const left = Graph.directed<string, string>((mutable) => {
2279
- * const a = Graph.addNode(mutable, "A")
2280
- * const b = Graph.addNode(mutable, "B")
2281
- * const c = Graph.addNode(mutable, "C")
2282
- * Graph.addEdge(mutable, a, b, "A-B")
2283
- * Graph.addEdge(mutable, b, c, "B-C")
2284
- * })
2285
- *
2286
- * const right = Graph.directed<string, string>((mutable) => {
2287
- * const b = Graph.addNode(mutable, "B")
2288
- * const c = Graph.addNode(mutable, "C")
2289
- * Graph.addEdge(mutable, b, c, "B-C")
2290
- * })
2291
- *
2292
- * const result = Graph.difference(left, right)
2293
- *
2294
- * Graph.nodeCount(result) // => 3
2295
- * Graph.edgeCount(result) // => 1
2296
- * ```
2297
- *
2298
- * @see {@link symmetricDifference} for retaining edges unique to either graph
2299
- * @stability unstable
2300
- * @category set operations
2301
- * @since 4.0.0
2302
- */
2303
- E>((mutable) => {
1666
+
1667
+ return make(self.type)<N, E>((mutable) => {
2304
1668
  const indexByIdentity = addNodesByIdentity(mutable, selfMaps.byIdentity)
2305
1669
 
2306
1670
  for (const edge of selfImpl.edges.values()) {
@@ -2311,7 +1675,7 @@ export const difference: {
2311
1675
  addEdgeByIdentity(mutable, indexByIdentity, edgeIdentity, edge.data)
2312
1676
  }
2313
1677
  }
2314
- });
1678
+ })
2315
1679
  })
2316
1680
 
2317
1681
  /**
@@ -2371,264 +1735,8 @@ export const difference: {
2371
1735
  * @category set operations
2372
1736
  * @since 4.0.0
2373
1737
  */
2374
- export const symmetricDifference: {
2375
- /**
2376
- * Returns edges present in exactly one of two graphs.
2377
- *
2378
- * **When to use**
2379
- *
2380
- * Use when comparing graphs and retaining relationships unique to either one.
2381
- *
2382
- * **Details**
2383
- *
2384
- * Keeps nodes from both graphs. Overlapping nodes use data from `that`. The
2385
- * result has the same graph kind as `self`. Throws a `GraphError` when the
2386
- * graph kinds do not match. `nodeIdentity` and `edgeIdentity` default to the
2387
- * complete node and edge data. Edge identity also includes the endpoint
2388
- * identities.
2389
- *
2390
- * `G1 Δ G2 = {V1 ∪ V2, (E1 ∪ E2) \ (E1 ∩ E2)}`
2391
- *
2392
- * **Gotchas**
2393
- *
2394
- * Edges with different projected identities are distinct.
2395
- * Nodes with equal identities in one input graph are coalesced. The last node
2396
- * supplies the data, and redirected edges can collapse or become self-loops.
2397
- * Parallel edges with equal identities are coalesced before the graphs are
2398
- * compared. The result allocates new node and edge identifiers.
2399
- *
2400
- * **Example** (Finding differing edges)
2401
- *
2402
- * ```ts import.meta.vitest
2403
- * import { Graph } from "effect"
2404
- *
2405
- * const left = Graph.directed<string, string>((mutable) => {
2406
- * const a = Graph.addNode(mutable, "A")
2407
- * const b = Graph.addNode(mutable, "B")
2408
- * const c = Graph.addNode(mutable, "C")
2409
- * Graph.addEdge(mutable, a, b, "A-B")
2410
- * Graph.addEdge(mutable, b, c, "B-C")
2411
- * })
2412
- *
2413
- * const right = Graph.directed<string, string>((mutable) => {
2414
- * const b = Graph.addNode(mutable, "B")
2415
- * const c = Graph.addNode(mutable, "C")
2416
- * const d = Graph.addNode(mutable, "D")
2417
- * Graph.addEdge(mutable, b, c, "B-C")
2418
- * Graph.addEdge(mutable, c, d, "C-D")
2419
- * })
2420
- *
2421
- * const result = Graph.symmetricDifference(left, right)
2422
- *
2423
- * Graph.nodeCount(result) // => 4
2424
- * Graph.edgeCount(result) // => 2
2425
- * ```
2426
- *
2427
- * @see {@link difference} for removing only the edges found in another graph
2428
- * @stability unstable
2429
- * @category set operations
2430
- * @since 4.0.0
2431
- */
2432
- <N, E, T extends Kind = "directed", NI = N, EI = E>(that: Graph<N, E, T>, options?: IdentityOptions<N, E, NI, EI>): (self: Graph<N, E, NoInfer<T>>) => Graph<N, E, T>
2433
- /**
2434
- * Returns edges present in exactly one of two graphs.
2435
- *
2436
- * **When to use**
2437
- *
2438
- * Use when comparing graphs and retaining relationships unique to either one.
2439
- *
2440
- * **Details**
2441
- *
2442
- * Keeps nodes from both graphs. Overlapping nodes use data from `that`. The
2443
- * result has the same graph kind as `self`. Throws a `GraphError` when the
2444
- * graph kinds do not match. `nodeIdentity` and `edgeIdentity` default to the
2445
- * complete node and edge data. Edge identity also includes the endpoint
2446
- * identities.
2447
- *
2448
- * `G1 Δ G2 = {V1 ∪ V2, (E1 ∪ E2) \ (E1 ∩ E2)}`
2449
- *
2450
- * **Gotchas**
2451
- *
2452
- * Edges with different projected identities are distinct.
2453
- * Nodes with equal identities in one input graph are coalesced. The last node
2454
- * supplies the data, and redirected edges can collapse or become self-loops.
2455
- * Parallel edges with equal identities are coalesced before the graphs are
2456
- * compared. The result allocates new node and edge identifiers.
2457
- *
2458
- * **Example** (Finding differing edges)
2459
- *
2460
- * ```ts import.meta.vitest
2461
- * import { Graph } from "effect"
2462
- *
2463
- * const left = Graph.directed<string, string>((mutable) => {
2464
- * const a = Graph.addNode(mutable, "A")
2465
- * const b = Graph.addNode(mutable, "B")
2466
- * const c = Graph.addNode(mutable, "C")
2467
- * Graph.addEdge(mutable, a, b, "A-B")
2468
- * Graph.addEdge(mutable, b, c, "B-C")
2469
- * })
2470
- *
2471
- * const right = Graph.directed<string, string>((mutable) => {
2472
- * const b = Graph.addNode(mutable, "B")
2473
- * const c = Graph.addNode(mutable, "C")
2474
- * const d = Graph.addNode(mutable, "D")
2475
- * Graph.addEdge(mutable, b, c, "B-C")
2476
- * Graph.addEdge(mutable, c, d, "C-D")
2477
- * })
2478
- *
2479
- * const result = Graph.symmetricDifference(left, right)
2480
- *
2481
- * Graph.nodeCount(result) // => 4
2482
- * Graph.edgeCount(result) // => 2
2483
- * ```
2484
- *
2485
- * @see {@link difference} for removing only the edges found in another graph
2486
- * @stability unstable
2487
- * @category set operations
2488
- * @since 4.0.0
2489
- */
2490
- <N, E, T extends Kind = "directed", NI = N, EI = E>(
2491
- self: Graph<N, E, T>,
2492
- that: Graph<N, E, NoInfer<T>>,
2493
- options?: IdentityOptions<N, E, NI, EI>
2494
- ): Graph<N, E, T>
2495
- } = dual((args) => isGraph(args[0]) && isGraph(args[1]), <N, E, T extends Kind, NI, EI>(
2496
- self: Graph<N, E, T>,
2497
- that: Graph<N, E, T>,
2498
- options?: IdentityOptions<N, E, NI, EI>
2499
- ): Graph<N, E, T> => {
2500
- assertSameKind(self, that)
2501
- const getNodeIdentity = options?.nodeIdentity ?? ((node: N) => node as unknown as NI)
2502
- const getEdgeIdentity = options?.edgeIdentity ?? ((edge: E) => edge as unknown as EI)
2503
- const selfMaps = buildNodeMaps(self, getNodeIdentity)
2504
- const thatMaps = buildNodeMaps(that, getNodeIdentity)
2505
- const nodes = MutableHashMap.empty</**
2506
- * Returns edges present in exactly one of two graphs.
2507
- *
2508
- * **When to use**
2509
- *
2510
- * Use when comparing graphs and retaining relationships unique to either one.
2511
- *
2512
- * **Details**
2513
- *
2514
- * Keeps nodes from both graphs. Overlapping nodes use data from `that`. The
2515
- * result has the same graph kind as `self`. Throws a `GraphError` when the
2516
- * graph kinds do not match. `nodeIdentity` and `edgeIdentity` default to the
2517
- * complete node and edge data. Edge identity also includes the endpoint
2518
- * identities.
2519
- *
2520
- * `G1 Δ G2 = {V1 ∪ V2, (E1 ∪ E2) \ (E1 ∩ E2)}`
2521
- *
2522
- * **Gotchas**
2523
- *
2524
- * Edges with different projected identities are distinct.
2525
- * Nodes with equal identities in one input graph are coalesced. The last node
2526
- * supplies the data, and redirected edges can collapse or become self-loops.
2527
- * Parallel edges with equal identities are coalesced before the graphs are
2528
- * compared. The result allocates new node and edge identifiers.
2529
- *
2530
- * **Example** (Finding differing edges)
2531
- *
2532
- * ```ts import.meta.vitest
2533
- * import { Graph } from "effect"
2534
- *
2535
- * const left = Graph.directed<string, string>((mutable) => {
2536
- * const a = Graph.addNode(mutable, "A")
2537
- * const b = Graph.addNode(mutable, "B")
2538
- * const c = Graph.addNode(mutable, "C")
2539
- * Graph.addEdge(mutable, a, b, "A-B")
2540
- * Graph.addEdge(mutable, b, c, "B-C")
2541
- * })
2542
- *
2543
- * const right = Graph.directed<string, string>((mutable) => {
2544
- * const b = Graph.addNode(mutable, "B")
2545
- * const c = Graph.addNode(mutable, "C")
2546
- * const d = Graph.addNode(mutable, "D")
2547
- * Graph.addEdge(mutable, b, c, "B-C")
2548
- * Graph.addEdge(mutable, c, d, "C-D")
2549
- * })
2550
- *
2551
- * const result = Graph.symmetricDifference(left, right)
2552
- *
2553
- * Graph.nodeCount(result) // => 4
2554
- * Graph.edgeCount(result) // => 2
2555
- * ```
2556
- *
2557
- * @see {@link difference} for removing only the edges found in another graph
2558
- * @stability unstable
2559
- * @category set operations
2560
- * @since 4.0.0
2561
- */
2562
- NI, /**
2563
- * Returns edges present in exactly one of two graphs.
2564
- *
2565
- * **When to use**
2566
- *
2567
- * Use when comparing graphs and retaining relationships unique to either one.
2568
- *
2569
- * **Details**
2570
- *
2571
- * Keeps nodes from both graphs. Overlapping nodes use data from `that`. The
2572
- * result has the same graph kind as `self`. Throws a `GraphError` when the
2573
- * graph kinds do not match. `nodeIdentity` and `edgeIdentity` default to the
2574
- * complete node and edge data. Edge identity also includes the endpoint
2575
- * identities.
2576
- *
2577
- * `G1 Δ G2 = {V1 ∪ V2, (E1 ∪ E2) \ (E1 ∩ E2)}`
2578
- *
2579
- * **Gotchas**
2580
- *
2581
- * Edges with different projected identities are distinct.
2582
- * Nodes with equal identities in one input graph are coalesced. The last node
2583
- * supplies the data, and redirected edges can collapse or become self-loops.
2584
- * Parallel edges with equal identities are coalesced before the graphs are
2585
- * compared. The result allocates new node and edge identifiers.
2586
- *
2587
- * **Example** (Finding differing edges)
2588
- *
2589
- * ```ts import.meta.vitest
2590
- * import { Graph } from "effect"
2591
- *
2592
- * const left = Graph.directed<string, string>((mutable) => {
2593
- * const a = Graph.addNode(mutable, "A")
2594
- * const b = Graph.addNode(mutable, "B")
2595
- * const c = Graph.addNode(mutable, "C")
2596
- * Graph.addEdge(mutable, a, b, "A-B")
2597
- * Graph.addEdge(mutable, b, c, "B-C")
2598
- * })
2599
- *
2600
- * const right = Graph.directed<string, string>((mutable) => {
2601
- * const b = Graph.addNode(mutable, "B")
2602
- * const c = Graph.addNode(mutable, "C")
2603
- * const d = Graph.addNode(mutable, "D")
2604
- * Graph.addEdge(mutable, b, c, "B-C")
2605
- * Graph.addEdge(mutable, c, d, "C-D")
2606
- * })
2607
- *
2608
- * const result = Graph.symmetricDifference(left, right)
2609
- *
2610
- * Graph.nodeCount(result) // => 4
2611
- * Graph.edgeCount(result) // => 2
2612
- * ```
2613
- *
2614
- * @see {@link difference} for removing only the edges found in another graph
2615
- * @stability unstable
2616
- * @category set operations
2617
- * @since 4.0.0
2618
- */
2619
- N>()
2620
- const selfEdges = buildEdgeMap(self, selfMaps, getEdgeIdentity)
2621
- const thatEdges = buildEdgeMap(that, thatMaps, getEdgeIdentity)
2622
-
2623
- for (const [identity, data] of selfMaps.byIdentity) {
2624
- MutableHashMap.set(nodes, identity, data)
2625
- }
2626
-
2627
- for (const [identity, data] of thatMaps.byIdentity) {
2628
- MutableHashMap.set(nodes, identity, data)
2629
- }
2630
-
2631
- return make(self.type)</**
1738
+ export const symmetricDifference: {
1739
+ /**
2632
1740
  * Returns edges present in exactly one of two graphs.
2633
1741
  *
2634
1742
  * **When to use**
@@ -2685,7 +1793,8 @@ export const symmetricDifference: {
2685
1793
  * @category set operations
2686
1794
  * @since 4.0.0
2687
1795
  */
2688
- N, /**
1796
+ <N, E, T extends Kind = "directed", NI = N, EI = E>(that: Graph<N, E, T>, options?: IdentityOptions<N, E, NI, EI>): (self: Graph<N, E, NoInfer<T>>) => Graph<N, E, T>
1797
+ /**
2689
1798
  * Returns edges present in exactly one of two graphs.
2690
1799
  *
2691
1800
  * **When to use**
@@ -2742,7 +1851,34 @@ export const symmetricDifference: {
2742
1851
  * @category set operations
2743
1852
  * @since 4.0.0
2744
1853
  */
2745
- E>((mutable) => {
1854
+ <N, E, T extends Kind = "directed", NI = N, EI = E>(
1855
+ self: Graph<N, E, T>,
1856
+ that: Graph<N, E, NoInfer<T>>,
1857
+ options?: IdentityOptions<N, E, NI, EI>
1858
+ ): Graph<N, E, T>
1859
+ } = dual((args) => isGraph(args[0]) && isGraph(args[1]), <N, E, T extends Kind, NI, EI>(
1860
+ self: Graph<N, E, T>,
1861
+ that: Graph<N, E, T>,
1862
+ options?: IdentityOptions<N, E, NI, EI>
1863
+ ): Graph<N, E, T> => {
1864
+ assertSameKind(self, that)
1865
+ const getNodeIdentity = options?.nodeIdentity ?? ((node: N) => node as unknown as NI)
1866
+ const getEdgeIdentity = options?.edgeIdentity ?? ((edge: E) => edge as unknown as EI)
1867
+ const selfMaps = buildNodeMaps(self, getNodeIdentity)
1868
+ const thatMaps = buildNodeMaps(that, getNodeIdentity)
1869
+ const nodes = MutableHashMap.empty<NI, N>()
1870
+ const selfEdges = buildEdgeMap(self, selfMaps, getEdgeIdentity)
1871
+ const thatEdges = buildEdgeMap(that, thatMaps, getEdgeIdentity)
1872
+
1873
+ for (const [identity, data] of selfMaps.byIdentity) {
1874
+ MutableHashMap.set(nodes, identity, data)
1875
+ }
1876
+
1877
+ for (const [identity, data] of thatMaps.byIdentity) {
1878
+ MutableHashMap.set(nodes, identity, data)
1879
+ }
1880
+
1881
+ return make(self.type)<N, E>((mutable) => {
2746
1882
  const indexByIdentity = addNodesByIdentity(mutable, nodes)
2747
1883
 
2748
1884
  for (const [identity, data] of selfEdges) {
@@ -2756,7 +1892,7 @@ export const symmetricDifference: {
2756
1892
  addEdgeByIdentity(mutable, indexByIdentity, identity, data)
2757
1893
  }
2758
1894
  }
2759
- });
1895
+ })
2760
1896
  })
2761
1897
 
2762
1898
  /**
@@ -2899,93 +2035,7 @@ export const complement: {
2899
2035
  const outgoing = csr.getOutgoing(cache)
2900
2036
  const neighborMarks = new Uint32Array(cache.nodeIds.length)
2901
2037
 
2902
- return make(self.type)</**
2903
- * Returns the complement over the existing node set.
2904
- *
2905
- * **When to use**
2906
- *
2907
- * Use when materializing every relationship that is currently absent between
2908
- * distinct nodes.
2909
- *
2910
- * **Details**
2911
- *
2912
- * Directed graphs add each missing ordered pair. Undirected graphs add each
2913
- * missing unordered pair once. The `createEdge` function receives the source
2914
- * and target node data for each added edge. The result has the same graph kind
2915
- * as `self`.
2916
- *
2917
- * `G' = {V, ((V x V) without self-pairs) \ E}`
2918
- *
2919
- * **Gotchas**
2920
- *
2921
- * Self-loops are never created. If any edge already connects a pair, parallel
2922
- * complement edges are not added. The result allocates new identifiers.
2923
- *
2924
- * **Example** (Finding missing relationships)
2925
- *
2926
- * ```ts import.meta.vitest
2927
- * import { Graph } from "effect"
2928
- *
2929
- * const graph = Graph.directed<string, string>((mutable) => {
2930
- * const a = Graph.addNode(mutable, "A")
2931
- * const b = Graph.addNode(mutable, "B")
2932
- * Graph.addEdge(mutable, a, b, "A-B")
2933
- * })
2934
- *
2935
- * const result = Graph.complement(graph, (source, target) => `${source}-${target}`)
2936
- *
2937
- * Graph.edgeCount(result) // => 1
2938
- * ```
2939
- *
2940
- * @see {@link hasEdge} for testing one relationship
2941
- * @stability unstable
2942
- * @category set operations
2943
- * @since 4.0.0
2944
- */
2945
- N, /**
2946
- * Returns the complement over the existing node set.
2947
- *
2948
- * **When to use**
2949
- *
2950
- * Use when materializing every relationship that is currently absent between
2951
- * distinct nodes.
2952
- *
2953
- * **Details**
2954
- *
2955
- * Directed graphs add each missing ordered pair. Undirected graphs add each
2956
- * missing unordered pair once. The `createEdge` function receives the source
2957
- * and target node data for each added edge. The result has the same graph kind
2958
- * as `self`.
2959
- *
2960
- * `G' = {V, ((V x V) without self-pairs) \ E}`
2961
- *
2962
- * **Gotchas**
2963
- *
2964
- * Self-loops are never created. If any edge already connects a pair, parallel
2965
- * complement edges are not added. The result allocates new identifiers.
2966
- *
2967
- * **Example** (Finding missing relationships)
2968
- *
2969
- * ```ts import.meta.vitest
2970
- * import { Graph } from "effect"
2971
- *
2972
- * const graph = Graph.directed<string, string>((mutable) => {
2973
- * const a = Graph.addNode(mutable, "A")
2974
- * const b = Graph.addNode(mutable, "B")
2975
- * Graph.addEdge(mutable, a, b, "A-B")
2976
- * })
2977
- *
2978
- * const result = Graph.complement(graph, (source, target) => `${source}-${target}`)
2979
- *
2980
- * Graph.edgeCount(result) // => 1
2981
- * ```
2982
- *
2983
- * @see {@link hasEdge} for testing one relationship
2984
- * @stability unstable
2985
- * @category set operations
2986
- * @since 4.0.0
2987
- */
2988
- E>((mutable) => {
2038
+ return make(self.type)<N, E>((mutable) => {
2989
2039
  const newIndices = new Uint32Array(cache.nodeIds.length)
2990
2040
 
2991
2041
  for (let i = 0; i < cache.nodeIds.length; i++) {
@@ -3006,7 +2056,7 @@ export const complement: {
3006
2056
  addEdge(mutable, newIndices[i], newIndices[j], createEdge(cache.nodeData[i] as N, cache.nodeData[j] as N))
3007
2057
  }
3008
2058
  }
3009
- });
2059
+ })
3010
2060
  })
3011
2061
 
3012
2062
  /**
@@ -3180,97 +2230,7 @@ export const neighborhood: {
3180
2230
  reached.add(index)
3181
2231
  }
3182
2232
 
3183
- return make(self.type)</**
3184
- * Returns the induced subgraph containing nodes within a radius of a node.
3185
- *
3186
- * **When to use**
3187
- *
3188
- * Use when extracting a local reachable region around one node.
3189
- *
3190
- * **Details**
3191
- *
3192
- * The `radius` option is the maximum edge distance from `nodeIndex`, accepts
3193
- * non-negative integers and `Infinity`, and defaults to `1`. Invalid radii
3194
- * throw a `GraphError`. The `direction` option controls directed graph
3195
- * traversal and defaults to `"outgoing"`. The result has the same graph kind
3196
- * as `self` and keeps all original edges whose endpoints are both reached.
3197
- * `"undirected"` ignores edge direction while finding reachable nodes.
3198
- *
3199
- * **Gotchas**
3200
- *
3201
- * Traversal chooses the nodes, then all original edges between reached nodes
3202
- * are retained. The result is not merely a traversal tree, and it allocates new
3203
- * node and edge identifiers.
3204
- *
3205
- * **Example** (Getting a local neighborhood)
3206
- *
3207
- * ```ts import.meta.vitest
3208
- * import { Graph } from "effect"
3209
- *
3210
- * const graph = Graph.directed<string, string>((mutable) => {
3211
- * const a = Graph.addNode(mutable, "A")
3212
- * const b = Graph.addNode(mutable, "B")
3213
- * const c = Graph.addNode(mutable, "C")
3214
- * Graph.addEdge(mutable, a, b, "A-B")
3215
- * Graph.addEdge(mutable, b, c, "B-C")
3216
- * })
3217
- *
3218
- * const result = Graph.neighborhood(graph, 1, { radius: 1 })
3219
- *
3220
- * Graph.nodeCount(result) // => 2
3221
- * ```
3222
- *
3223
- * @see {@link inducedSubgraph} for selecting nodes while preserving identifiers
3224
- * @stability unstable
3225
- * @category set operations
3226
- * @since 4.0.0
3227
- */
3228
- N, /**
3229
- * Returns the induced subgraph containing nodes within a radius of a node.
3230
- *
3231
- * **When to use**
3232
- *
3233
- * Use when extracting a local reachable region around one node.
3234
- *
3235
- * **Details**
3236
- *
3237
- * The `radius` option is the maximum edge distance from `nodeIndex`, accepts
3238
- * non-negative integers and `Infinity`, and defaults to `1`. Invalid radii
3239
- * throw a `GraphError`. The `direction` option controls directed graph
3240
- * traversal and defaults to `"outgoing"`. The result has the same graph kind
3241
- * as `self` and keeps all original edges whose endpoints are both reached.
3242
- * `"undirected"` ignores edge direction while finding reachable nodes.
3243
- *
3244
- * **Gotchas**
3245
- *
3246
- * Traversal chooses the nodes, then all original edges between reached nodes
3247
- * are retained. The result is not merely a traversal tree, and it allocates new
3248
- * node and edge identifiers.
3249
- *
3250
- * **Example** (Getting a local neighborhood)
3251
- *
3252
- * ```ts import.meta.vitest
3253
- * import { Graph } from "effect"
3254
- *
3255
- * const graph = Graph.directed<string, string>((mutable) => {
3256
- * const a = Graph.addNode(mutable, "A")
3257
- * const b = Graph.addNode(mutable, "B")
3258
- * const c = Graph.addNode(mutable, "C")
3259
- * Graph.addEdge(mutable, a, b, "A-B")
3260
- * Graph.addEdge(mutable, b, c, "B-C")
3261
- * })
3262
- *
3263
- * const result = Graph.neighborhood(graph, 1, { radius: 1 })
3264
- *
3265
- * Graph.nodeCount(result) // => 2
3266
- * ```
3267
- *
3268
- * @see {@link inducedSubgraph} for selecting nodes while preserving identifiers
3269
- * @stability unstable
3270
- * @category set operations
3271
- * @since 4.0.0
3272
- */
3273
- E>((mutable) => {
2233
+ return make(self.type)<N, E>((mutable) => {
3274
2234
  const newIndexMap = new Map<NodeIndex, NodeIndex>()
3275
2235
 
3276
2236
  for (const oldIndex of reached) {
@@ -3286,7 +2246,7 @@ export const neighborhood: {
3286
2246
  }
3287
2247
  }
3288
2248
  }
3289
- });
2249
+ })
3290
2250
  })
3291
2251
 
3292
2252
  /**
@@ -3475,59 +2435,7 @@ export const sum: {
3475
2435
  <N, E, T extends Kind>(self: Graph<N, E, T>, that: Graph<N, E, NoInfer<T>>): Graph<N, E, T>
3476
2436
  } = dual(2, <N, E, T extends Kind>(self: Graph<N, E, T>, that: Graph<N, E, T>): Graph<N, E, T> => {
3477
2437
  assertSameKind(self, that)
3478
- return make(self.type)</**
3479
- * Returns the disjoint union of two graphs.
3480
- *
3481
- * **When to use**
3482
- *
3483
- * Use when combining graphs while keeping every node distinct, even when node
3484
- * payloads are equal.
3485
- *
3486
- * **Details**
3487
- *
3488
- * Copies all nodes and edges from both graphs without merging equal node data.
3489
- * The result has the same graph kind as `self`. Throws a `GraphError` when the
3490
- * graph kinds do not match.
3491
- *
3492
- * `G1 + G2 = {disjoint V1 + V2, disjoint E1 + E2}`
3493
- *
3494
- * **Gotchas**
3495
- *
3496
- * All node and edge identifiers are newly allocated.
3497
- *
3498
- * @see {@link compose} for merging overlapping logical nodes by identity
3499
- *
3500
- * @stability unstable
3501
- * @category set operations
3502
- * @since 4.0.0
3503
- */
3504
- N, /**
3505
- * Returns the disjoint union of two graphs.
3506
- *
3507
- * **When to use**
3508
- *
3509
- * Use when combining graphs while keeping every node distinct, even when node
3510
- * payloads are equal.
3511
- *
3512
- * **Details**
3513
- *
3514
- * Copies all nodes and edges from both graphs without merging equal node data.
3515
- * The result has the same graph kind as `self`. Throws a `GraphError` when the
3516
- * graph kinds do not match.
3517
- *
3518
- * `G1 + G2 = {disjoint V1 + V2, disjoint E1 + E2}`
3519
- *
3520
- * **Gotchas**
3521
- *
3522
- * All node and edge identifiers are newly allocated.
3523
- *
3524
- * @see {@link compose} for merging overlapping logical nodes by identity
3525
- *
3526
- * @stability unstable
3527
- * @category set operations
3528
- * @since 4.0.0
3529
- */
3530
- E>((mutable) => {
2438
+ return make(self.type)<N, E>((mutable) => {
3531
2439
  const copyInto = (graph: Graph<N, E, T>) => {
3532
2440
  const impl = internal.toImpl(graph)
3533
2441
  const indexMap = new Map<NodeIndex, NodeIndex>()
@@ -3547,7 +2455,7 @@ export const sum: {
3547
2455
 
3548
2456
  copyInto(self)
3549
2457
  copyInto(that)
3550
- });
2458
+ })
3551
2459
  })
3552
2460
 
3553
2461
  // =============================================================================