Effect-TS
https://gyazo.com/0836d817fc17b9e27dcfffb7d2fd3ee7
(関係ないけど)Nix使ってるやんmrsekut.icon
ちょっと見てみる
偉いmrsekut.icon
docs
Getting started
error management
Control Flow Operators
Two Types of Errors
Expected Errors
Unexpected Errors
Fallback
Matching
Retrying
Timing Out
Sandboxing
Error Accumulation
Error Channel Operations
Parallel and Sequential Errors
Yieldable Errors
requirements management
resourece management
Introduction
Scope
oversrvability
Logging
Metrics
Tracing
Supervisor
configuration
runetime
scheduling
Introduction
Repetition
Built-In Schedules
Schedule Combinators
Cron
Examples
state management
Ref
SynchronizedRef
SubscriptionRef
Batching
caching
Caching Effects
Cache
councrrency
Basic Concurrency
Fibers
Deferred
Queue
PubSub
Semaphore
Latch
Introduction
Creating Streams
Consuming Streams
Error Handling
Operations
Resourceful Streams
Introduction
Creating Sinks
Operations
Concurrency
Leftovers
testing
TestClock
code style
Guidelines
Dual APIs
Excessive Nesting
data types
BigDecimal
HashSet
DateTime
Redacted
traits
Equal
Hash
behaviourts
Equivalence
Order
ai
OpenAiとかのAPIを使うためのやつ
Introduction
Getting Started
Execution Planning
Tool Use
micro
Effectはでかいので、小さい版を用意しましたよ、というやつ
Getting Started
Micro for Effect Users
additional resources
Myths
API Reference
Coming From ZIO
Effect vs fp-ts
Effect vs Promise
以下はNotebookLM.iconに解説させたもの
この量をグルーピングせずに一覧しか書いてないの酷いと思うmrsekut.icon
Arbitrary.ts
ランダムなテストデータを生成するための機能を提供します。
Schemaで定義された型に基づいて、自動的にテスト用のデータを作成したい場合に使用します。
BigDecimal.ts: 任意精度浮動小数点数を扱うための型と関数を提供します。金融計算など、高い精度が求められる場合に使用します。
BigInt.ts: JavaScriptの組み込み型であるBigIntを扱うための型と関数を提供します。大きな整数値を安全に扱いたい場合に使用します。
Boolean.ts: 真偽値を扱うための型と関数を提供します。
Brand.ts
型システム上で既存の型に意味的な区別を持たせるための機能を提供します。
例えば、単なる文字列をメールアドレス型やID型として区別するために使用します。
Cache.ts
キャッシュの仕組みを提供します。
計算結果を一時的に保存し、同じ入力に対して再度計算するコストを削減したい場合に使用します。
Cause.ts
Effectの処理が失敗した原因を表す型を提供します。
エラーの種類(失敗、例外、中断など)を区別し、詳細な情報(スタックトレースなど)を含みます。
Channel.ts
並行処理におけるデータの流れを抽象化する型を提供します。
ストリームのように連続的なデータを非同期に処理したい場合に使用します。
ChildExecutorDecision.ts: Fiberのフォーク(並行実行)に関する決定を行うための型を提供します。
Chunk.ts: 不変な順序付きコレクションを表す型を提供します。配列と似ていますが、不変性や特定操作の最適化がされています。
Clock.ts: 時間に関連する操作(遅延、現在時刻の取得など)を抽象化するインターフェースを提供します。テスト時に時間を制御したい場合などに有用です。
config関連
Config.ts: アプリケーションの設定を型安全に扱うための型と関数を提供します。環境変数、ファイル、リモートプロバイダーなど様々なソースから設定をロードし、Schemaを使って検証できます。
ConfigError.ts: 設定のロードや検証に失敗した際のエラーを表す型を提供します。
ConfigProvider.ts: 設定の提供元を抽象化するインターフェースと実装を提供します。環境変数やマップなど、様々な方法で設定を提供できます。
ConfigProviderPathPatch.ts: 設定プロバイダーへのパスに関する変更を扱うための型を提供します。
Console.ts: コンソールへの出力を行うためのEffectを提供します。console.logなどの副作用をEffectとして扱い、テストや制御を容易にします。
Context.ts: 依存性の注入(Dependency Injection)のための仕組みを提供します。サービスを型安全に定義し、必要な箇所で利用できるようにします。
Cron.ts
Cron式に基づいて定期的な処理を実行するためのスケジュール機能を提供します。
Data.ts: 不変なデータ構造を簡単に定義するためのユーティリティを提供します。EqualやHashのインターフェースを自動的に実装するデータ型を定義できます。
DateTime.ts: 日付と時間を扱うための型と関数を提供します。
DefaultServices.ts: Effectのデフォルトで提供されるサービス(例えば、コンソール出力、クロックなど)を定義します。
Deferred.ts: 値がまだ利用可能でない非同期処理の結果を表現するための型を提供します。Promiseに似ていますが、より柔軟な制御が可能です。
Differ.ts: 不変なデータ構造間の差分を効率的に計算するための機能を提供します。
Duration.ts: 時間間隔を表す型を提供します。遅延処理やタイムアウトなどの時間に関連する操作で使用します。
Effect.ts: Effectライブラリのコアとなる型であり、非同期処理や副作用を表現します。Promiseよりも表現力豊かで、エラー型、依存性、リソース管理などを型レベルで扱えます。
Effectable.ts: Effectの型が持つべき基本的な性質を定義するインターフェースを提供します。
Either.ts: 成功または失敗を表す型を提供します。エラーハンドリングを型安全に行いたい場合に使用します。
Encoding.ts: データのエンコードとデコードに関連するユーティリティを提供します。
Equal.ts: 値の等価性を判定するためのインターフェースとユーティリティを提供します。
Equivalence.ts: データの同値性を定義するための仕組みを提供します。
ExecutionStrategy.ts: Effectの実行戦略(直列、並列など)を制御するための型を提供します。
Exit.ts: Effectの処理結果(成功、失敗、中断)を表す型を提供します。
FastCheck.ts: プロパティベーステストのためのライブラリであるFastCheckとの統合機能を提供します。
Fiber.ts: Effectの軽量な実行単位であるFiberを扱うための型と関数を提供します。並行処理や中断などの制御に不可欠です。
FiberHandle.ts: 実行中のFiberへのハンドルを表す型を提供します。
FiberId.ts: Fiberの一意な識別子を表す型を提供します。
FiberMap.ts: Fiberをキーとするマップ構造を提供します。
FiberRef.ts: Fiberに紐付けられた不変な値を管理するための仕組みを提供します。ロギングやトレーシングのコンテキスト情報をFiberごとに保持するのに役立ちます。
FiberRefs.ts: FiberRefのコレクションを管理するための型を提供します。
FiberRefsPatch.ts: FiberRefsへの変更を追跡するための型を提供します。
FiberSet.ts: Fiberの集合を管理するための型を提供します。
FiberStatus.ts: Fiberの現在の状態(実行中、中断、完了など)を表す型を提供します。
Function.ts: 関数に関するユーティリティを提供します。
GlobalValue.ts: グローバルなシングルトン値を安全に管理するための仕組みを提供します。
GroupBy.ts
コレクションの要素を特定のキーでグループ化するための機能を提供します。
Hash.ts: 値のハッシュコードを計算するためのインターフェースとユーティリティを提供します。
HashMap.ts: 不変なハッシュマップ(キーと値のペアのコレクション)を表す型を提供します。
HashSet.ts: 不変なハッシュセット(重複のない値のコレクション)を表す型を提供します。
HKT.ts: Higher-Kinded Typesを扱うための型レベルのユーティリティを提供します。Effectライブラリの高度な型システムを支える基盤です。
Inspectable.ts: 検査可能なオブジェクトのためのインターフェースを提供します。デバッグやロギングの際に、オブジェクトの内容を分かりやすく表示するのに役立ちます。
Iterable.ts: JavaScriptのIterableプロトコルに関連するユーティリティを提供します。
JSONSchema.ts: Schemaで定義された型からJSON Schemaを生成するための機能を提供します。
KeyedPool.ts: キーによって管理されるリソースのプールを提供します。同じキーに対するリクエストは、同じリソースを再利用できる場合があります。
Layer.ts
依存性の注入の単位であるLayerを扱うための型と関数を提供します。サービスのライフサイクル(初期化と破棄)を管理し、Effectのプログラムに必要な依存性を提供します。
LayerMap.ts: Layerをキーとするマップ構造を提供します。
List.ts: 不変なリスト(順序付きコレクション)を表す型を提供します。
Logger.ts: ロギング機能を提供します。ログレベル、注釈、スパンなど、豊富なロギング機能を提供し、様々な出力形式をサポートします。
LogLevel.ts: ログの重要度を表す型を提供します(DEBUG、INFO、WARN、ERRORなど)。
LogSpan.ts: ログのスパン(期間)を管理するための機能を提供します。処理の特定部分の実行時間を計測し、ログに関連付けることができます。
Mailbox.ts
ManagedRuntime.ts: リソースの自動的な獲得と解放を保証するための仕組みを提供します。Effect.acquireReleaseなどのAPIを利用する際に内部で使用されます。
Match.ts: パターンマッチングのための機能を提供します。値の型や構造に基づいて処理を分岐させることができます。
MergeDecision.ts: 並行処理におけるFiberの結合に関する決定を行うための型を提供します。
MergeState.ts: 並行処理におけるFiberの結合状態を管理するための型を提供します。
MergeStrategy.ts: 並行処理におけるFiberの結合戦略を定義するための型を提供します。
Metric.ts: アプリケーションのメトリクス(カウンター、ゲージ、ヒストグラムなど)を定義するための機能を提供します。パフォーマンス監視などに使用します。
MetricBoundaries.ts: ヒストグラムの境界値を定義するための型を提供します。
MetricHook.ts: メトリクスの値を収集するためのフックを提供します。
MetricKey.ts: メトリクスの一意な識別子を表す型を提供します。
MetricKeyType.ts: メトリクスの種類(カウンター、ゲージなど)を表す型を提供します。
MetricLabel.ts: メトリクスに付与するラベル(キーと値のペア)を表す型を提供します。
MetricPair.ts: メトリクスのキーと値のペアを表す型を提供します。
MetricPolling.ts: 定期的にメトリクスの値を収集するための仕組みを提供します。
MetricRegistry.ts: アプリケーション全体のメトリクスを登録し管理するための機能を提供します。
MetricState.ts: メトリクスの現在の状態を表す型を提供します。
Micro.ts: Effectの軽量版であり、より制約された環境(例えば、ブラウザのService Worker)での使用を想定しています。Effectのサブセットを提供し、リソース管理や並行処理などの基本的な機能を利用できます。
ModuleVersion.ts: Effectモジュールのバージョン情報を管理するための機能を提供します。
MutableHashMap.ts: 可変なハッシュマップを提供します。パフォーマンスが重要な特定の状況下でのみ使用を検討すべきです。
MutableHashSet.ts: 可変なハッシュセットを提供します。パフォーマンスが重要な特定の状況下でのみ使用を検討すべきです。
MutableList.ts: 可変なリストを提供します。
MutableQueue.ts: 可変なキューを提供します。
MutableRef.ts: 可変な参照を提供します。Refと同様に共有状態を管理できますが、こちらは可変です。
NonEmptyIterable.ts: 空でないIterableを表す型を提供します。
Number.ts: 数値を扱うための型と関数を提供します。
Order.ts: 値の順序を定義するためのインターフェースとユーティリティを提供します。ソートなどの操作で使用します。
Ordering.ts: 比較結果を表す型を提供します(LessThan、EqualTo、GreaterThan)。
ParseResult.ts: データの解析(デコード)結果を表す型を提供します。成功または失敗と、失敗の原因に関する情報を含みます。
Pool.ts: リソースの再利用のための一般的なプール機能を提供します。データベース接続やHTTPクライアントなどのリソース管理に使用します。
Predicate.ts: 真偽値を返す関数(述語)に関連するユーティリティを提供します。
Pretty.ts: 値を見やすく整形して表示するための機能を提供します。デバッグやロギングの際に役立ちます。
PrimaryKey.ts: データベースの主キーに関連する型やユーティリティを提供します。
PubSub.ts: パブリッシュ・サブスクライブ型のメッセージングパターンを実装するための機能を提供します。
Queue.ts: 複数のFiber間で安全に値をやり取りするためのFIFO(先入れ先出し)キューの型を提供します。非同期処理の結果を別の処理に渡す場合などに使用します。
Random.ts: 乱数生成に関連するEffectを提供します。
RateLimiter.ts: 処理の実行頻度を制限するための機能を提供します。APIへのリクエスト回数を制限する場合などに使用します。
RcMap.ts: 参照カウント付きのマップを提供します。
RcRef.ts: 参照カウント付きのRefを提供します。
Readable.ts: 読み取り可能なデータストリームを抽象化するインターフェースを提供します。
Record.ts: JavaScriptのオブジェクトを扱うための型と関数を提供します。
Redacted.ts: 機密情報を扱うための型を提供します。ログ出力時などに、機密情報が誤って公開されるのを防ぐために使用します。
RedBlackTree.ts: 赤黒木データ構造を提供します。順序付きのデータを効率的に管理するために使用できます。
Ref.ts: 複数のFiber間で共有可能な不変な状態を安全に管理するための型を提供します。アトミックな更新を保証します。
RegExp.ts
正規表現に関連する型とユーティリティを提供します。
Reloadable.ts: 値を非同期に再ロードするための仕組みを提供します。設定やキャッシュされたデータを定期的に更新する場合などに使用します。
Request.ts: 遅延された計算リクエストを表す型を提供します。バッチ処理や重複排除などの最適化を可能にします。
RequestBlock.ts: リクエストのブロックを管理するための型を提供します。
RequestResolver.ts: リクエストを実際の計算に解決するためのインターフェースを提供します。
Resource.ts: リソースのライフサイクル管理(獲得、利用、解放)を抽象化するための型を提供します。ファイルハンドル、データベース接続などのリソースリークを防ぎます。
Runtime.ts: Effectプログラムの実行環境を提供します。Effectの値を実際に実行し、副作用を処理します。
RuntimeFlags.ts: Effectランタイムの動作フラグを制御するための型を提供します。
RuntimeFlagsPatch.ts: RuntimeFlagsへの変更を記述するための型を提供します。
Schedule.ts: 繰り返し処理のスケジュールを定義するための型と関数を提供します。再試行、ポーリングなどの定期的な処理を制御します。
ScheduleDecision.ts: スケジュールに基づいて次の実行タイミングや停止を決定するための型を提供します。
ScheduleInterval.ts: スケジュールにおける実行間隔を表す型を提供します。
ScheduleIntervals.ts: 複数のスケジュール間隔を扱うための型を提供します。
Scheduler.ts: タスクのスケジューリングを行うためのインターフェースを提供します。Effectランタイムが内部で使用します。
Schema.ts: データの形状を定義し、検証、エンコード、デコードを行うための型と関数を提供します。JSONシリアライズ/デシリアライズ、データ検証などに使用します。
SchemaAST.ts: Schemaの内部表現であるAbstract Syntax Tree (AST) を定義します。
Scope.ts: リソースのライフサイクルを管理するためのスコープを提供します。Effect.acquireReleaseなどのリソース管理APIと連携して使用されます。
ScopedCache.ts: スコープに関連付けられたキャッシュを提供します。スコープが終了するとキャッシュも自動的に破棄されます。
ScopedRef.ts: スコープに関連付けられたRefを提供します。スコープが終了するとRefも自動的に破棄されます。
Secret.ts: 機密情報を表す型を提供します。Redactedよりもさらに厳格に機密情報を扱うために使用します。
Sink.ts
Sink は、Stream からの値を消費し、最終的な結果を生成する方法を提供します。ソースには、Sink の作成方法(Sink.succeed、Sink.fail など)、ストリームから特定数の要素を取得する操作(Sink.take)、ストリームの要素を無視する操作(Sink.drain)、ストリームの要素をコレクション(Chunk、HashSet、HashMap)に集める操作(Sink.collectAll、Sink.collectAllToSet、Sink.collectAllToMap など)、および複数の Sink を並行して実行し、それらの結果を結合または競合させる操作(Sink.zip、Sink.race)に関する例が含まれています。Sink は、ストリーム処理の終端操作として機能します。
Stream.ts
Stream は、時間とともにゼロ以上の値を発行する可能性のある処理の記述です。これは、エラーを処理し、特定のコンテキストを必要とする Effect の概念を拡張したものです。ソースでは、Stream の作成方法(Stream.make、Stream.empty、Stream.fromEffect、Stream.async、Stream.unfold、Stream.fromQueue、Stream.fromPubSub、Stream.fromSchedule など)、ストリームの変換と操作(Stream.map、Stream.mapEffect、Stream.filter、Stream.take、Stream.drop、Stream.concat、Stream.merge、Stream.zip など)、およびスロットリングやスケジューリングなどの時間ベースの操作(Stream.throttle、Stream.schedule)に関する多くの例が示されています。
Streamable.ts
このファイルは、Stream に変換できる型を定義する可能性が高いです。ソースには、Queue や PubSub などの型から Stream を作成する例が含まれています。
StreamEmit.ts
これは、Stream から値をどのように発行するかを制御する型または関数を定義する可能性があります。Stream.async の例では、emit 関数を使用してストリームに値をプッシュしています。
StreamHaltStrategy.ts
ストリームが停止する条件や方法を定義する戦略に関連する型が含まれる可能性があります。Stream.merge には haltStrategy オプションがあります。
SubscriptionRef.ts
SubscriptionRef は、値の現在値とそれに対するすべての変更を購読し、更新を受信できる特殊な形式の SynchronizedRef です。通常の Ref(get、set、modify など)に対するすべての標準操作を実行できます。changes プロパティは、Ref の現在の値とそれに対するすべての変更を含む Stream です。サーバーとクライアントの間で共有状態を管理する例が提供されています。
Supervisor.ts
Supervisor は、ファイバーのライフサイクルを監視し、それらに介入する機能を提供します。ソースでは、Supervisor.track を使用して子ファイバーを追跡する例が示されています。
SynchronizedRef.ts:
SynchronizedRef は、並行環境で安全に更新できる参照です。複数のファイバーが同時に参照の値を読み書きしようとする場合に、データの競合を防ぎます。ユーザーの年齢を並行して取得し、共有状態を更新する例が示されています。
Take.ts
: これは、ストリームやキューから要素を取得する操作に関連する型を定義する可能性があります。Stream.take や Queue.take がソースで言及されています。
TQueue.ts および Queue.ts
Queue は、先入れ先出し(FIFO)方式で要素を格納する並行データ構造です。バウンド(容量制限あり)、ドロップ(容量超過時に新しい要素を破棄)、スライディング(容量超過時に古い要素を削除)、およびアンバウンド(容量制限なし)のキューを作成できます。要素の追加(Queue.offer、Queue.offerAll)、要素の取得(Queue.take、Queue.poll、Queue.takeUpTo、Queue.takeN、Queue.takeAll)、シャットダウン(Queue.shutdown、Queue.awaitShutdown)などの操作が可能です。Queue.Enqueue は書き込み専用のキュー、Queue.Dequeue は読み取り専用のキューの型です。Stream から Queue を作成したり、その逆を行うこともできます。
TPubSub.ts および PubSub.ts
PubSub は、発行者(Publisher)がメッセージを送信し、複数の購読者(Subscriber)がそれらのメッセージを受信できる非同期メッセージングハブです。バウンド、ドロップ、スライディング、およびアンバウンドの PubSub を作成できます。購読(PubSub.subscribe)、発行(PubSub.publish、PubSub.publishAll)などの操作があります。PubSub は、書き込み専用の Enqueue として見なすことができます。Stream から PubSub を作成したり、その逆を行うこともできます。
TDeferred.ts および Deferred.ts
Deferred は、遅延される可能性のある値を表す並行プリミティブです。これは、値がまだ利用できない場合に、計算の結果を待つために使用できます。Deferred.make で作成し、Deferred.poll や Deferred.isDone で状態を確認できます。
TRef.ts および Ref.ts
Ref は、変更可能な値を安全に管理するための並行プリミティブです。原子的な読み書き操作を提供し、複数のファイバーからの同時アクセスを安全に処理できます。Ref.update を使用して値を更新する例が示されています。
TSemaphore.ts および Semaphore.ts
Semaphore は、共有リソースへのアクセスを制御するために使用される同期メカニズムです。指定された数の「許可」(Permit)を管理し、リソースにアクセスする前に許可を取得する必要があります。これにより、同時にアクセスできるファイバーの数を制限できます。Effect.makeSemaphore で作成し、withPermits で許可を取得してタスクを実行する例が示されています。
Chunk.ts
Chunk は、型 A の順序付けられた不変の値を表すコレクションです。通常の配列に似ていますが、繰り返し連結などの特定の操作に対して最適化された関数型インターフェースを提供します。
SortedSet.ts
SortedSet は、要素が特定の順序でソートされたコレクションです。Schema.SortedSet および Schema.SortedSetFromSelf を使用して、SortedSet のスキーマを定義する方法が示されています。
Struct.ts
Struct は、名前付きのフィールドを持つ複合データ型(オブジェクトに似ています)を表す Schema のコンストラクターです。
STM.ts
これは、Software Transactional Memory(ソフトウェアトランザクショナルメモリ)に関連する型と関数を定義する可能性があります。STM は、共有の変更可能な状態への同時アクセスを管理するためのメカニズムであり、一連の操作をアトミックに実行できるようにします。
SortedMap.ts および TMap.ts
SortedMap は、キーと値のペアをキーの順序で格納するコレクションです。TMap は、トランザクションコンテキストで使用されるマップの可能性があります。ソースでは HashMap の収集に関する例がありますが、HashMap と同様の概念です。
HashSet.ts および TSet.ts
HashSet は、重複する要素を持たない値のコレクションです。Schema.HashSetFromSelf を使用して、HashSet のスキーマを定義する方法が示されています。Sink.collectAllToSet を使用して、ストリームの要素を HashSet に収集する例もあります。TSet は、トランザクションコンテキストで使用されるセットの可能性があります。
Tuple.ts
Tuple は、固定数の要素を持つ順序付けられたコレクションです。Effect.all で複数の Effect をタプルの形で結合する例や、Schema.Tuple でタプルのスキーマを定義する例があります。
lib
AI utilities
OpenAI utilities
Anthropic utilities
CLI utilities
Distributed computing tools
Cluster utilities for the browser
Cluster utilities for Node.js
Workflow management for clusters
Experimental features and APIs
OpenTelemetry integration
Cross-platform runtime utilities
Platform utilities for the browser
Platform utilities for Bun
Platform utilities for Node.js
Shared utilities for Node.js
General-purpose printing utilities
ANSI-compatible printing utilities
Remote procedure call (RPC) utilities
HTTP-based RPC utilities
Functional programming type classes
Testing utilities for Vitest