Skip to content

EFF-807 Add Stream.broadcastN - #2210

Merged
tim-smart merged 4 commits into
mainfrom
lalph/EFF-807
May 18, 2026
Merged

EFF-807 Add Stream.broadcastN#2210
tim-smart merged 4 commits into
mainfrom
lalph/EFF-807

Conversation

@tim-smart

@tim-smart tim-smart commented May 18, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Stream.broadcastN, a fixed-size broadcast API ported from Effect v3 Stream.broadcast
  • Pre-subscribe downstream streams before starting upstream and unsubscribe individual streams on exit
  • Publish Take values, including final exits, so downstream streams observe completion and failure
  • Address review feedback by exposing broadcastN with a single options object (for example { n: 2, capacity: 8 }) and by using a makePubSub helper copied from Channel.ts
  • Add Stream tests for fan-out and failure propagation plus a changeset

Validation

  • pnpm lint-fix
  • pnpm test Stream.test.ts
  • pnpm check:tsgo
  • cd packages/effect && pnpm docgen

@changeset-bot

changeset-bot Bot commented May 18, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 130f277

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 27 packages
Name Type
effect Major
@effect/opentelemetry Major
@effect/platform-browser Major
@effect/platform-bun Major
@effect/platform-node-shared Major
@effect/platform-node Major
@effect/vitest Major
@effect/ai-anthropic Major
@effect/ai-openai-compat Major
@effect/ai-openai Major
@effect/ai-openrouter Major
@effect/atom-react Major
@effect/atom-solid Major
@effect/atom-vue Major
@effect/sql-clickhouse Major
@effect/sql-d1 Major
@effect/sql-libsql Major
@effect/sql-mssql Major
@effect/sql-mysql2 Major
@effect/sql-pg Major
@effect/sql-pglite Major
@effect/sql-sqlite-bun Major
@effect/sql-sqlite-do Major
@effect/sql-sqlite-node Major
@effect/sql-sqlite-react-native Major
@effect/sql-sqlite-wasm Major
@effect/openapi-generator Major

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

github-actions Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

📊 JSDoc Documentation Analysis

📈 Current Analysis Results
Analyzing 136 TypeScript files in packages/effect/src/ (including schema and config subdirectories)...

============================================================
         EFFECT JSDOC ANALYSIS REPORT
============================================================

📊 SUMMARY STATISTICS
------------------------------
Total files analyzed: 136
Total exported members: 4321
Missing @example: 4315 (99.9%)
Missing @category: 397 (9.2%)

🎯 TOP FILES NEEDING ATTENTION
----------------------------------------
1. Schema.ts
   📝 520 missing examples, 🏷️  203 missing categories
   📦 520 total exports
2. Effect.ts
   📝 253 missing examples, 🏷️  0 missing categories
   📦 253 total exports
3. Stream.ts
   📝 240 missing examples, 🏷️  0 missing categories
   📦 240 total exports
4. Channel.ts
   📝 152 missing examples, 🏷️  0 missing categories
   📦 152 total exports
5. Array.ts
   📝 140 missing examples, 🏷️  0 missing categories
   📦 140 total exports
6. DateTime.ts
   📝 108 missing examples, 🏷️  0 missing categories
   📦 108 total exports
7. SchemaRepresentation.ts
   📝 96 missing examples, 🏷️  12 missing categories
   📦 96 total exports
8. SchemaAST.ts
   📝 77 missing examples, 🏷️  21 missing categories
   📦 77 total exports
9. Chunk.ts
   📝 86 missing examples, 🏷️  0 missing categories
   📦 86 total exports
10. Sink.ts
   📝 81 missing examples, 🏷️  2 missing categories
   📦 81 total exports
11. Cause.ts
   📝 79 missing examples, 🏷️  2 missing categories
   📦 79 total exports
12. Graph.ts
   📝 80 missing examples, 🏷️  0 missing categories
   📦 80 total exports
13. SchemaTransformation.ts
   📝 43 missing examples, 🏷️  31 missing categories
   📦 43 total exports
14. Option.ts
   📝 67 missing examples, 🏷️  1 missing categories
   📦 67 total exports
15. String.ts
   📝 63 missing examples, 🏷️  1 missing categories
   📦 63 total exports

✅ PERFECTLY DOCUMENTED FILES
-----------------------------------
   index.ts (0 exports)

🔍 SAMPLE MISSING ITEMS FROM Schema.ts
-----------------------------------
   Optionality (type, line 150): missing example, category
   Mutability (type, line 159): missing example, category
   ConstructorDefault (type, line 169): missing example, category
   MakeOptions (interface, line 183): missing example, category
   Bottom (interface, line 211): missing example, category
   declareConstructor (interface, line 271): missing example
   declareConstructor (function, line 335): missing example
   declare (interface, line 362): missing example
   declare (function, line 395): missing example
   revealBottom (function, line 435): missing example, category

📋 BREAKDOWN BY EXPORT TYPE
-----------------------------------
const: 2983 missing examples, 114 missing categories
interface: 482 missing examples, 91 missing categories
type: 353 missing examples, 78 missing categories
function: 359 missing examples, 88 missing categories
namespace: 72 missing examples, 26 missing categories
class: 66 missing examples, 0 missing categories

📈 DOCUMENTATION PROGRESS
------------------------------
Examples: 6/4321 (0.1% complete)
Categories: 3924/4321 (90.8% complete)

============================================================
Analysis complete! 4712 items need attention.
============================================================

📄 Detailed results saved to: jsdoc-analysis-results.json

This comment is automatically updated on each push. View the analysis script for details.

@github-actions

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

File Name Current Size Previous Size Difference
basic.ts 6.72 KB 6.72 KB 0.00 KB (0.00%)
batching.ts 9.22 KB 9.22 KB 0.00 KB (0.00%)
brand.ts 6.20 KB 6.20 KB 0.00 KB (0.00%)
cache.ts 9.70 KB 9.70 KB 0.00 KB (0.00%)
config.ts 18.40 KB 18.40 KB 0.00 KB (0.00%)
differ.ts 16.85 KB 16.85 KB 0.00 KB (0.00%)
http-client.ts 20.20 KB 20.20 KB 0.00 KB (0.00%)
logger.ts 10.18 KB 10.18 KB 0.00 KB (0.00%)
metric.ts 8.56 KB 8.56 KB 0.00 KB (0.00%)
optic.ts 7.37 KB 7.37 KB 0.00 KB (0.00%)
pubsub.ts 13.80 KB 13.80 KB 0.00 KB (0.00%)
queue.ts 11.08 KB 11.08 KB 0.00 KB (0.00%)
schedule.ts 10.08 KB 10.08 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 26.17 KB 26.17 KB 0.00 KB (0.00%)
schema-string-transformation.ts 12.59 KB 12.59 KB 0.00 KB (0.00%)
schema-string.ts 10.34 KB 10.34 KB 0.00 KB (0.00%)
schema-template-literal.ts 13.94 KB 13.94 KB 0.00 KB (0.00%)
schema-toArbitraryLazy.ts 18.44 KB 18.44 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 21.12 KB 21.12 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 17.66 KB 17.66 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 17.61 KB 17.61 KB 0.00 KB (0.00%)
schema-toFormatter.ts 17.44 KB 17.44 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 19.96 KB 19.96 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 18.00 KB 18.00 KB 0.00 KB (0.00%)
schema.ts 17.05 KB 17.05 KB 0.00 KB (0.00%)
stm.ts 11.95 KB 11.95 KB 0.00 KB (0.00%)
stream.ts 9.25 KB 9.25 KB 0.00 KB (0.00%)

Comment thread packages/effect/src/Stream.ts Outdated
Comment thread packages/effect/src/Stream.ts Outdated
Comment thread packages/effect/src/Stream.ts Outdated
Comment on lines +8550 to +8558
n: N,
maximumLag: number | BroadcastNOptions
maximumLag: number | {
readonly capacity: "unbounded"
readonly replay?: number | undefined
} | {
readonly capacity: number
readonly strategy?: "sliding" | "dropping" | "suspend" | undefined
readonly replay?: number | undefined
}

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the options should be merged into object, so n and maximumLag become a single options parameter.

@tim-smart
tim-smart merged commit af8267f into main May 18, 2026
15 checks passed
@tim-smart
tim-smart deleted the lalph/EFF-807 branch May 18, 2026 03:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant