@node-llm/orm 0.1.0 → 0.1.1

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.
package/CHANGELOG.md CHANGED
@@ -1,64 +1,217 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to `@node-llm/orm` will be documented in this file.
3
+ All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+ ## [1.6.1] - 2026-01-19 (@node-llm/core)
7
6
 
8
- ## [0.1.0] - 2026-01-18
7
+ ### Documentation & Examples
8
+
9
+ - **Example Reorganization**: Better structure for examples, separating full applications from scripts.
10
+ - **Improved READMEs**: Updated examples to use absolute GitHub URLs for better compatibility with npm.
11
+ - **ORM Integration**: Added references to the new `@node-llm/orm` package.
12
+ - **Test Stability**: Fixed integration test paths for vision and audio examples after reorganization.
13
+
14
+ ## [0.1.1] - 2026-01-19 (@node-llm/orm)
15
+
16
+ ### Fixed
17
+
18
+ - **Broken Links**: Corrected documentation and example links in README.
19
+
20
+ ## [0.1.0] - 2026-01-18 (@node-llm/orm)
21
+
22
+ ### Added
23
+
24
+ - **Initial Release**: Comprehensive persistence layer for NodeLLM using Prisma.
25
+ - **Chat Persistence**: Automatic tracking of chat sessions, messages, and history.
26
+ - **Streaming Support**: `chat.askStream()` with automatic token persistence.
27
+ - **Tool Audit Trail**: Tracking of every tool execution, parameters, and results.
28
+ - **API Metrics**: Automatic logging of latency, token usage, and cost.
29
+
30
+ ## [1.6.0] - 2026-01-16 (@node-llm/core)
31
+
32
+ ### Major Changes
33
+
34
+ - **Rename LLM to NodeLLM**: Standardized naming across the library. `createLLM` now returns a `NodeLLM` instance.
35
+ - **Singleton Removal**: Moved away from global singleton patterns to support multiple independent LLM instances.
36
+ - **Improved Factory Pattern**: Refactored `createLLM()` for better provider initialization and type safety.
37
+
38
+ ## [1.5.4] - 2026-01-15
39
+
40
+ ### Fixed
41
+
42
+ - **Async I/O Safety**: Refactored internal file loading utilities (`Binary.ts`, `FileLoader.ts`) to strictly use non-blocking `fs.promises` for all file operations, eliminating potential event loop blocking in high-throughput node servers.
43
+
44
+ ### Changed
45
+
46
+ - **Centralized Logging**: Replaced scattered `console.log/error/warn` calls with a unified `Logger` adapter. All internal library logs now respect `NODELLM_DEBUG=true` configuration and use a consistent format, preventing log pollution in production environments.
47
+
48
+ ## [1.5.3] - 2026-01-15
49
+
50
+ ### Fixed
51
+
52
+ - **Multi-turn Tool Loop State Loss (CRITICAL)**: Fixed a critical bug where `response_format` (Structured Outputs), `temperature`, `max_tokens`, and provider-specific `params` were being dropped after the first tool call in agentic workflows. This caused the model to revert to plain text or markdown in subsequent turns, resulting in empty or malformed data when using `withSchema()`. The fix ensures all configuration state is maintained across all tool-calling turns in `Chat.ask()`.
53
+ - **ToolHandler Serialization**: Ensuring tool return values are always stringified before being sent back to the LLM. This fixes issues where tools returning objects would cause provider errors, enabling better "AI Self-Correction" workflows where the model sees the raw object data.
54
+
55
+ ### Added
56
+
57
+ - **AbortSignal Support**: Added proper cancellation support for long-running LLM requests via `signal?: AbortSignal` in `AskOptions`. Users can now abort requests using standard `AbortController`, enabling proper cleanup in interactive applications and server environments. The signal is propagated through all tool-calling turns and underlying fetch requests.
58
+
59
+ ## [1.5.2] - 2026-01-15
60
+
61
+ ### Fixed
62
+
63
+ - **ESM & Dotenv Safety**: Implemented lazy initialization for all environment-backed configuration (like `OPENAI_API_KEY`). This resolves race conditions where `process.env` might be accessed before `dotenv.config()` is called in ESM modules.
64
+ - **OpenAI o1/o3-mini Compatibility**: Automatically map `max_tokens` to `max_completion_tokens` for OpenAI reasoning models, which are required for these specific models.
65
+ - **withProvider Inheritance**: Fixed a bug where scoped instances created via `withProvider()` failed to inherit global defaults due to getter-based property enumeration.
66
+ - **Process Lifecycle Protection**: Added unreferenced timers and explicit exit handling to prevent Node.js processes from hanging after completion.
67
+ - **Ollama Base URL**: Fixed a typo in the `ollamaApiBase` configuration setter.
68
+
69
+ ### Added
70
+
71
+ - **Reasoning Content Capture**: Support for capturing and returning `reasoning_content` (thinking text) from OpenAI reasoning models.
72
+ - **Enhanced Usage Tracking**: Precise capture of `reasoning_tokens` and `cached_tokens` in usage metadata for supported providers.
73
+
74
+ ### Changed
75
+
76
+ - **Internal Architecture Cleanup**: Refactored shared validation and tool execution logic between `Chat.ask()` and `Chat.stream()` for 100% feature parity and better maintainability.
77
+ - **Configuration Snapshotting**: Enhanced the internal configuration system to support dynamic property discovery and cloning for custom providers.
78
+
79
+ ## [1.5.0] - 2026-01-12
80
+
81
+ ### Added
82
+
83
+ - **🚦 Tool Execution Policies**: Introduced granular control over tool execution with three modes:
84
+ - `auto` (default): Tools execute automatically as proposed by the LLM
85
+ - `confirm`: Human-in-the-loop approval via `onConfirmToolCall` hook before each tool execution
86
+ - `dry-run`: Model proposes tools but execution is prevented, returning the plan for inspection
87
+ - **ToolExecutionMode Enum**: New exported enum for type-safe execution mode configuration
88
+ - **Tool Call Inspection**: Added `tool_calls` property to `ChatResponseString` for inspecting proposed tool executions
89
+ - **Enhanced Observability**: New audit hooks for comprehensive tool execution tracking:
90
+ - `onToolCallStart`: Triggered when a tool call begins
91
+ - `onToolCallEnd`: Triggered when a tool call completes successfully
92
+ - `onToolCallError`: Triggered when a tool call fails
93
+ - **Security Documentation**: New comprehensive [Security & Compliance](https://node-llm.eshaiju.com/advanced/security.html) guide covering:
94
+ - Smart Context Isolation
95
+ - Content Policy Hooks
96
+ - Tool Execution Policies
97
+ - Observability as Security
98
+ - Loop Protection & Resource Limits (new section)
99
+ - **🛡️ Request Timeout Security**: Comprehensive timeout protection across all API operations
100
+ - Global `requestTimeout` configuration (default: 30 seconds)
101
+ - Per-chat and per-request timeout overrides
102
+ - Applies to: chat, streaming, image generation, transcription, embeddings, and moderation
103
+ - Prevents DoS attacks, hanging requests, and resource exhaustion
104
+ - **🛡️ Global MaxTokens Configuration**: Cost control and output limiting for text generation
105
+ - Global `maxTokens` configuration (default: 4096 tokens)
106
+ - Per-chat and per-request token limit overrides
107
+ - Prevents excessive output generation and cost overruns
108
+ - Resolution order: per-request → chat-level → global config → default
109
+ - **🛡️ Complete Security Framework**: Four-pillar defense-in-depth protection
110
+ - `requestTimeout`: DoS protection (new)
111
+ - `maxRetries`: Retry storm prevention
112
+ - `maxToolCalls`: Infinite loop prevention
113
+ - `maxTokens`: Cost control (new)
114
+ - **Custom Provider Timeout Support**: Updated custom provider documentation with `fetchWithTimeout` utility guidance
115
+ - **Real-World Example**: Added `examples/security-tool-policies.mjs` demonstrating human-in-the-loop security patterns
116
+
117
+ ### Changed
118
+
119
+ - **Deprecated Hook Aliases**: `onToolCall` and `onToolResult` now internally map to `onToolCallStart` and `onToolCallEnd` for backward compatibility
120
+
121
+ ### Documentation
122
+
123
+ - Updated configuration guide with security limits section
124
+ - Enhanced security documentation with Loop Protection & Resource Limits section
125
+ - Updated README with four-pillar security framework
126
+ - Added timeout handling to custom provider guide
127
+ - Updated tool calling documentation with execution policy examples
128
+ - Added tool execution policies to security documentation
129
+ - Enhanced README with observability and security features
130
+ - Added comprehensive security examples to documentation site
131
+
132
+ ## [1.4.0] - 2026-01-06
133
+
134
+ ### Added
135
+
136
+ - **Plugin System for Custom Providers**: Introduced `NodeLLM.registerProvider()` and exported `BaseProvider`, allowing developers to easily add proprietary or custom LLM services at runtime.
137
+ - **Improved Extensibility Documentation**: Dedicated "Custom Providers" guide with real-world patterns for handling provider-specific configurations and extra fields.
138
+ - **Community Health Patterns**: Added standardized GitHub issue templates (`bug_report.yml`, `feature_request.yml`), contributing guide, and pull request templates.
139
+
140
+ ## [1.3.0] - 2026-01-05
141
+
142
+ ### Added
143
+
144
+ - **Class-based Tool DSL**: Official documentation and examples for creating tools using a clean, class-based syntax extending `Tool`.
145
+ - **Enhanced Example Library**: Added missing runnable examples to the documentation, covering embeddings, usage tracking, and provider-specific features.
146
+ - **Improved Documentation Navigation**: Fixed internal linking and integrated all examples directly into the documentation site.
147
+
148
+ ### Changed
149
+
150
+ - **Documentation Imports**: Updated all documentation and examples to recommend importing `z` directly from `@node-llm/core` instead of `zod`, promoting a more unified API surface.
151
+ - **Example Paths**: Converted all example file paths in the documentation into direct GitHub links for easier access.
152
+ - **Provider Consistency**: Ensured all providers (OpenAI, Gemini, Anthropic, DeepSeek) have a consistent set of documented examples.
153
+
154
+ ## [1.2.0] - 2026-01-04
155
+
156
+ ### Added
157
+
158
+ - **🚀 Streaming with Tool Calling**: Revolutionary feature enabling automatic tool execution during streaming across all providers (OpenAI, Anthropic, Gemini, DeepSeek). Tools are executed transparently and the stream continues with the model's final response.
159
+ - **🔍 Comprehensive Debug Logging**: Added detailed HTTP request/response logging for every feature and provider. Enable with `NODELLM_DEBUG=true` to see method, URL, status, and full payloads.
160
+ - Coverage: Chat, Streaming, Images, Embeddings, Transcription, Moderation
161
+ - Providers: OpenAI, Anthropic, Gemini, DeepSeek, Ollama
162
+ - **Enhanced Logger**: New `logRequest()` and `logResponse()` methods for structured logging
163
+ - **Tool Event Handlers in Streaming**: `onToolCall()` and `onToolResult()` now work seamlessly during streaming
164
+ - **Comprehensive Examples**: Added streaming + tools examples for all providers
165
+
166
+ ### Changed
167
+
168
+ - Updated `ChatChunk` interface to support `tool_calls` field
169
+ - Enhanced `ChatStream` to handle multi-round tool execution loops
170
+ - All streaming providers now parse and yield tool calls
171
+
172
+ ### Documentation
173
+
174
+ - Updated streaming documentation with tool calling examples
175
+ - Enhanced tools documentation to highlight streaming support
176
+ - Improved debugging documentation with comprehensive coverage details
177
+ - Updated README with streaming + tools examples and debug logging section
178
+
179
+ ## [1.0.0] - 2026-01-03
180
+
181
+ ### Added
182
+
183
+ - **Major Stable Release**: Consolidated architectural foundation for production-ready LLM integrations.
184
+ - **Advanced Streaming API**: Introduced a powerful global `Stream` utility supporting `.tee()`, `.toArray()`, and native `.abort()`.
185
+ - **Comprehensive Model Registry**: Synchronized with `models.dev` for verified models across OpenAI, Anthropic, Gemini, DeepSeek, OpenRouter, and Ollama.
186
+ - **First-class OpenRouter Support**: High-performance implementation with automated capability detection and discovery.
187
+ - **Enhanced Local LLM Support**: Deep integration with Ollama, including vision and tool-calling models.
188
+ - **Rich Documentation**: Complete documentation overhaul with dedicated provider guides, examples, and architectural deep-dives.
189
+
190
+ ### Changed
191
+
192
+ - Refactored `Chat.stream()` to return the advanced `Stream` object.
193
+ - Standardized provider registration and error handling architecture.
194
+
195
+ ## [0.8.0] - 2026-01-02
196
+
197
+ ### Added
198
+
199
+ - **Ollama Provider**: Native support for local inference via Ollama.
200
+ - **Model Discovery**: Ability to list and inspect local models using `NodeLLM.listModels()`.
201
+ - **DeepSeek V3 and R1**: Full support for DeepSeek's latest chat and reasoning models.
202
+ - **Enhanced Model Registry**: Now includes Gemini 1.5 Flash 8B and popular local models with accurate pricing and capabilities.
203
+ - **Rich Documentation**: New guides and examples for local integration, vision, and tool-calling.
204
+
205
+ ## [0.7.0] - 2026-01-02
206
+
207
+ ### Added
208
+
209
+ - Unified configuration system via `NodeLLM.configure`.
210
+ - Better support for custom endpoints.
211
+
212
+ ## [0.6.0] - 2026-01-01
9
213
 
10
214
  ### Added
11
215
 
12
- - **Chat Persistence**: Automatic tracking of chat sessions, messages, and conversation history
13
- - **Streaming Support**: Full support for `chat.askStream()` with automatic message persistence as tokens arrive
14
- - **Custom Fields Support**: Pass additional fields (e.g., `userId`, `projectId`) directly to `createChat()` - they're automatically spread into the Prisma create call
15
- - **Native JSON Metadata**: Metadata passed as-is to support native `Json`/`JSONB` database types for efficient querying
16
- - **Optional Persistence Configuration**: New `persistence` option allows selective disabling of tool call and request tracking
17
- - `persistence.toolCalls`: Enable/disable tool call persistence (default: `true`)
18
- - `persistence.requests`: Enable/disable API request metrics (default: `true`)
19
- - **Tool Call Tracking**: Audit log of every tool execution with arguments and results
20
- - **API Request Metrics**: Track latency, tokens, and cost for every API call
21
- - **Custom Table Names**: Support for custom Prisma table names
22
- - **Comprehensive Tests**: 24 unit tests covering all features
23
- - **Example Application**: Complete HR Chatbot RAG example demonstrating all ORM features
24
- - **TypeScript Support**: Full type safety with Prisma and TypeScript
25
- - **Prisma Adapter**: Production-ready adapter for Prisma ORM
26
-
27
- ### Example Usage
28
-
29
- ```typescript
30
- // Custom fields
31
- const chat = await createChat(prisma, llm, {
32
- model: "gpt-4",
33
- userId: "user_123",
34
- projectId: "proj_456",
35
- metadata: { source: "web-ui", tags: ["support"] }
36
- });
37
-
38
- // Optional persistence
39
- const chat = await createChat(prisma, llm, {
40
- model: "gpt-4",
41
- persistence: {
42
- toolCalls: false, // Skip tool call tracking
43
- requests: true // Keep request metrics
44
- }
45
- });
46
-
47
- // Streaming with persistence
48
- for await (const token of chat.askStream("Hello")) {
49
- process.stdout.write(token);
50
- }
51
- // Messages automatically persisted after stream completes
52
- ```
53
-
54
- ## [Unreleased]
55
-
56
- ### Planned
57
-
58
- - Support for custom message types
59
- - Batch operations for message history
60
- - Advanced query helpers
61
-
62
- ---
63
-
64
- [0.1.0]: https://github.com/node-llm/node-llm/releases/tag/orm-v0.1.0
216
+ - Initial support for DeepSeek R1 reasoning.
217
+ - Enhanced tool execution logic.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 NodeLLM contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  > Database persistence layer for NodeLLM. Automatically tracks chats, messages, tool calls, and API requests.
9
9
 
10
- **[Read the Full Documentation](https://node-llm.github.io/orm/prisma.html)** | **[View Example App](../../examples/hr-chatbot-rag/)**
10
+ **[Read the Full Documentation](https://node-llm.eshaiju.com/orm/prisma)** | **[View Example App](https://github.com/node-llm/node-llm/tree/main/examples/applications/hr-chatbot-rag)**
11
11
 
12
12
  ## Features
13
13
 
@@ -0,0 +1,66 @@
1
+ export interface ChatRecord {
2
+ id: string;
3
+ model?: string | null;
4
+ provider?: string | null;
5
+ instructions?: string | null;
6
+ metadata?: string | null;
7
+ createdAt: Date;
8
+ updatedAt: Date;
9
+ }
10
+ export interface ChatOptions {
11
+ model?: string;
12
+ provider?: string;
13
+ instructions?: string;
14
+ metadata?: Record<string, any>;
15
+ debug?: boolean;
16
+ persistence?: {
17
+ toolCalls?: boolean;
18
+ requests?: boolean;
19
+ };
20
+ }
21
+ export interface UserHooks {
22
+ onToolCallStart: ((call: any) => void | Promise<void>)[];
23
+ onToolCallEnd: ((call: any, result: any) => void | Promise<void>)[];
24
+ afterResponse: ((resp: any) => any | Promise<any>)[];
25
+ onNewMessage: (() => void | Promise<void>)[];
26
+ onEndMessage: ((message: any) => void | Promise<void>)[];
27
+ onToolCallError: ((call: any, error: Error) => any | Promise<any>)[];
28
+ onConfirmToolCall: ((call: any) => boolean | Promise<boolean>)[];
29
+ onBeforeRequest: ((messages: any[]) => any | Promise<any>)[];
30
+ }
31
+ /**
32
+ * BaseChat - A generic base class for ORM chat implementations.
33
+ */
34
+ export declare abstract class BaseChat<R extends ChatRecord = ChatRecord, O extends ChatOptions = ChatOptions> {
35
+ record: R;
36
+ options: O;
37
+ id: string;
38
+ protected localOptions: any;
39
+ protected customTools: any[];
40
+ protected userHooks: UserHooks;
41
+ constructor(record: R, options?: O);
42
+ protected log(...args: any[]): void;
43
+ withInstructions(instruction: string, options?: {
44
+ replace?: boolean;
45
+ }): this;
46
+ system(instruction: string, options?: {
47
+ replace?: boolean;
48
+ }): this;
49
+ withTemperature(temp: number): this;
50
+ withModel(model: string): this;
51
+ withProvider(provider: string): this;
52
+ withTools(tools: any[]): this;
53
+ withTool(tool: any): this;
54
+ use(tool: any): this;
55
+ withSchema(schema: any): this;
56
+ withParams(params: Record<string, any>): this;
57
+ onToolCallStart(callback: (call: any) => void | Promise<void>): this;
58
+ onToolCall(callback: (call: any) => void | Promise<void>): this;
59
+ onToolCallEnd(callback: (call: any, result: any) => void | Promise<void>): this;
60
+ onToolResult(callback: (result: any) => void | Promise<void>): this;
61
+ afterResponse(callback: (resp: any) => any | Promise<any>): this;
62
+ onBeforeRequest(callback: (messages: any[]) => any | Promise<any>): this;
63
+ onNewMessage(callback: () => void | Promise<void>): this;
64
+ onEndMessage(callback: (message: any) => void | Promise<void>): this;
65
+ }
66
+ //# sourceMappingURL=BaseChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseChat.d.ts","sourceRoot":"","sources":["../src/BaseChat.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACpE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACrD,YAAY,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC7C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACrE,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IACjE,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;CAC9D;AAED;;GAEG;AACH,8BAAsB,QAAQ,CAC5B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,WAAW,GAAG,WAAW;IAiB1B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IAhBZ,EAAE,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,YAAY,EAAE,GAAG,CAAM;IACjC,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CAAM;IAClC,SAAS,CAAC,SAAS,EAAE,SAAS,CAS5B;gBAGO,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,CAAW;IAU7B,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ5B,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAS5E,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAIlE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI;IAK7B,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAKzB,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIpB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK7B,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO7C,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKpE,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI/D,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAK/E,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAInE,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAKhE,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAKxE,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKxD,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAIrE"}
@@ -0,0 +1,110 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /**
3
+ * BaseChat - A generic base class for ORM chat implementations.
4
+ */
5
+ export class BaseChat {
6
+ record;
7
+ options;
8
+ id;
9
+ localOptions = {};
10
+ customTools = [];
11
+ userHooks = {
12
+ onToolCallStart: [],
13
+ onToolCallEnd: [],
14
+ afterResponse: [],
15
+ onNewMessage: [],
16
+ onEndMessage: [],
17
+ onToolCallError: [],
18
+ onConfirmToolCall: [],
19
+ onBeforeRequest: []
20
+ };
21
+ constructor(record, options = {}) {
22
+ this.record = record;
23
+ this.options = options;
24
+ this.id = record.id;
25
+ // Initialize local options from record/options
26
+ this.localOptions.instructions = options.instructions || record.instructions;
27
+ this.localOptions.model = options.model || record.model;
28
+ this.localOptions.provider = options.provider || record.provider;
29
+ }
30
+ log(...args) {
31
+ if (this.options?.debug) {
32
+ console.log(`[@node-llm/orm]`, ...args);
33
+ }
34
+ }
35
+ // --- Fluent Configuration Methods ---
36
+ withInstructions(instruction, options) {
37
+ if (options?.replace) {
38
+ this.localOptions.instructions = instruction;
39
+ }
40
+ else {
41
+ this.localOptions.instructions = (this.localOptions.instructions || "") + "\n" + instruction;
42
+ }
43
+ return this;
44
+ }
45
+ system(instruction, options) {
46
+ return this.withInstructions(instruction, options);
47
+ }
48
+ withTemperature(temp) {
49
+ this.localOptions.temperature = temp;
50
+ return this;
51
+ }
52
+ withModel(model) {
53
+ this.localOptions.model = model;
54
+ return this;
55
+ }
56
+ withProvider(provider) {
57
+ this.localOptions.provider = provider;
58
+ return this;
59
+ }
60
+ withTools(tools) {
61
+ this.customTools.push(...tools);
62
+ return this;
63
+ }
64
+ withTool(tool) {
65
+ this.customTools.push(tool);
66
+ return this;
67
+ }
68
+ use(tool) {
69
+ return this.withTool(tool);
70
+ }
71
+ withSchema(schema) {
72
+ this.localOptions.schema = schema;
73
+ return this;
74
+ }
75
+ withParams(params) {
76
+ this.localOptions.params = { ...(this.localOptions.params || {}), ...params };
77
+ return this;
78
+ }
79
+ // --- Hook Registration ---
80
+ onToolCallStart(callback) {
81
+ this.userHooks.onToolCallStart.push(callback);
82
+ return this;
83
+ }
84
+ onToolCall(callback) {
85
+ return this.onToolCallStart(callback);
86
+ }
87
+ onToolCallEnd(callback) {
88
+ this.userHooks.onToolCallEnd.push(callback);
89
+ return this;
90
+ }
91
+ onToolResult(callback) {
92
+ return this.onToolCallEnd((_call, result) => callback(result));
93
+ }
94
+ afterResponse(callback) {
95
+ this.userHooks.afterResponse.push(callback);
96
+ return this;
97
+ }
98
+ onBeforeRequest(callback) {
99
+ this.userHooks.onBeforeRequest.push(callback);
100
+ return this;
101
+ }
102
+ onNewMessage(callback) {
103
+ this.userHooks.onNewMessage.push(callback);
104
+ return this;
105
+ }
106
+ onEndMessage(callback) {
107
+ this.userHooks.onEndMessage.push(callback);
108
+ return this;
109
+ }
110
+ }
@@ -0,0 +1,62 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ import type { NodeLLMCore } from "@node-llm/core";
3
+ import { BaseChat, type ChatRecord, type ChatOptions } from "../../BaseChat.js";
4
+ export { type ChatRecord, type ChatOptions };
5
+ export interface MessageRecord {
6
+ id: string;
7
+ chatId: string;
8
+ role: string;
9
+ content: string | null;
10
+ contentRaw: string | null;
11
+ reasoning: string | null;
12
+ inputTokens: number | null;
13
+ outputTokens: number | null;
14
+ modelId: string | null;
15
+ provider: string | null;
16
+ createdAt: Date;
17
+ }
18
+ export interface TableNames {
19
+ chat?: string;
20
+ message?: string;
21
+ toolCall?: string;
22
+ request?: string;
23
+ }
24
+ /**
25
+ * Prisma-based Chat Implementation.
26
+ */
27
+ export declare class Chat extends BaseChat {
28
+ private prisma;
29
+ private llm;
30
+ private tables;
31
+ private persistenceConfig;
32
+ constructor(prisma: PrismaClient, llm: NodeLLMCore, record: ChatRecord, options?: ChatOptions, tableNames?: TableNames);
33
+ /**
34
+ * Internal prep for core Chat instance with persistence hooks.
35
+ */
36
+ private prepareCoreChat;
37
+ /**
38
+ * Send a message and persist the conversation.
39
+ */
40
+ ask(input: string): Promise<MessageRecord>;
41
+ /**
42
+ * Stream a response and persist the conversation.
43
+ */
44
+ askStream(input: string): AsyncGenerator<string, MessageRecord, undefined>;
45
+ /**
46
+ * Get all messages for this chat.
47
+ */
48
+ messages(): Promise<MessageRecord[]>;
49
+ }
50
+ /**
51
+ * Convenience method to create a new chat session.
52
+ */
53
+ export declare function createChat<T = Record<string, any>>(prisma: PrismaClient, llm: NodeLLMCore, options?: ChatOptions & {
54
+ tableNames?: TableNames;
55
+ } & T): Promise<Chat>;
56
+ /**
57
+ * Convenience method to load an existing chat session.
58
+ */
59
+ export declare function loadChat(prisma: PrismaClient, llm: NodeLLMCore, chatId: string, options?: ChatOptions & {
60
+ tableNames?: TableNames;
61
+ }): Promise<Chat | null>;
62
+ //# sourceMappingURL=Chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/Chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,IAAK,SAAQ,QAAQ;IAK9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IALb,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,iBAAiB,CAAoD;gBAGnE,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EACxB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,WAAgB,EACzB,UAAU,GAAE,UAAe;IAgB7B;;OAEG;YACW,eAAe;IAmH7B;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0ChD;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC;IAuDjF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAO3C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,GAAG,CAAa,GACjE,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAO,GACtD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAQtB"}
@@ -0,0 +1,260 @@
1
+ import { BaseChat } from "../../BaseChat.js";
2
+ /**
3
+ * Prisma-based Chat Implementation.
4
+ */
5
+ export class Chat extends BaseChat {
6
+ prisma;
7
+ llm;
8
+ tables;
9
+ persistenceConfig;
10
+ constructor(prisma, llm, record, options = {}, tableNames = {}) {
11
+ super(record, options);
12
+ this.prisma = prisma;
13
+ this.llm = llm;
14
+ this.tables = {
15
+ chat: tableNames.chat || "chat",
16
+ message: tableNames.message || "message",
17
+ toolCall: tableNames.toolCall || "toolCall",
18
+ request: tableNames.request || "assistantRequest"
19
+ };
20
+ this.persistenceConfig = {
21
+ toolCalls: options.persistence?.toolCalls ?? true,
22
+ requests: options.persistence?.requests ?? true
23
+ };
24
+ }
25
+ /**
26
+ * Internal prep for core Chat instance with persistence hooks.
27
+ */
28
+ async prepareCoreChat(history = [], assistantMessageId) {
29
+ const provider = this.localOptions.provider || this.record.provider;
30
+ const model = this.localOptions.model || this.record.model;
31
+ const llmInstance = provider ? this.llm.withProvider(provider) : this.llm;
32
+ const coreChat = llmInstance.chat(model || undefined, {
33
+ messages: history,
34
+ ...this.localOptions
35
+ });
36
+ // Register tools
37
+ if (this.customTools.length > 0) {
38
+ coreChat.withTools(this.customTools);
39
+ }
40
+ // --- Persistence Hooks ---
41
+ coreChat.onToolCallStart(async (call) => {
42
+ // Only persist if toolCalls persistence is enabled
43
+ if (this.persistenceConfig.toolCalls) {
44
+ const toolCallModel = this.tables.toolCall;
45
+ await this.prisma[toolCallModel].create({
46
+ data: {
47
+ messageId: assistantMessageId,
48
+ toolCallId: call.id,
49
+ name: call.function?.name || "unknown",
50
+ arguments: JSON.stringify(call.function?.arguments || {}),
51
+ thought: call.thought || null
52
+ }
53
+ });
54
+ }
55
+ // User hooks
56
+ for (const h of this.userHooks.onToolCallStart)
57
+ await h(call);
58
+ });
59
+ coreChat.onToolCallEnd(async (call, result) => {
60
+ // Only persist if toolCalls persistence is enabled
61
+ if (this.persistenceConfig.toolCalls) {
62
+ const toolCallModel = this.tables.toolCall;
63
+ const resString = typeof result === "string" ? result : JSON.stringify(result);
64
+ await this.prisma[toolCallModel].update({
65
+ where: { messageId_toolCallId: { messageId: assistantMessageId, toolCallId: call.id } },
66
+ data: {
67
+ result: resString,
68
+ thought: call.thought || null
69
+ }
70
+ });
71
+ }
72
+ // User hooks
73
+ for (const h of this.userHooks.onToolCallEnd)
74
+ await h(call, result);
75
+ });
76
+ coreChat.afterResponse(async (finalResp) => {
77
+ this.log(`Internal afterResponse triggered. Calling ${this.userHooks.afterResponse.length} user hooks.`);
78
+ // User hooks
79
+ for (const h of this.userHooks.afterResponse) {
80
+ const modified = await h(finalResp);
81
+ if (modified)
82
+ finalResp = modified;
83
+ }
84
+ // Only persist if requests persistence is enabled
85
+ if (this.persistenceConfig.requests) {
86
+ const modelName = this.tables.request;
87
+ await this.prisma[modelName].create({
88
+ data: {
89
+ chatId: this.id,
90
+ messageId: assistantMessageId,
91
+ provider: finalResp.provider || provider || "unknown",
92
+ model: finalResp.model || model || "unknown",
93
+ statusCode: 200,
94
+ duration: finalResp.latency || 0,
95
+ inputTokens: finalResp.usage?.input_tokens || 0,
96
+ outputTokens: finalResp.usage?.output_tokens || 0,
97
+ cost: finalResp.usage?.cost || 0
98
+ }
99
+ });
100
+ }
101
+ return finalResp;
102
+ });
103
+ // Other core hooks
104
+ if (this.userHooks.onNewMessage.length > 0) {
105
+ coreChat.onNewMessage(async () => {
106
+ for (const h of this.userHooks.onNewMessage)
107
+ await h();
108
+ });
109
+ }
110
+ if (this.userHooks.onEndMessage.length > 0) {
111
+ coreChat.onEndMessage(async (msg) => {
112
+ for (const h of this.userHooks.onEndMessage)
113
+ await h(msg);
114
+ });
115
+ }
116
+ if (this.userHooks.onBeforeRequest.length > 0) {
117
+ coreChat.beforeRequest(async (msgs) => {
118
+ let current = msgs;
119
+ for (const h of this.userHooks.onBeforeRequest) {
120
+ const mod = await h(current);
121
+ if (mod)
122
+ current = mod;
123
+ }
124
+ return current;
125
+ });
126
+ }
127
+ return coreChat;
128
+ }
129
+ /**
130
+ * Send a message and persist the conversation.
131
+ */
132
+ async ask(input) {
133
+ const messageModel = this.tables.message;
134
+ const userMessage = await this.prisma[messageModel].create({
135
+ data: { chatId: this.id, role: "user", content: input }
136
+ });
137
+ const assistantMessage = await this.prisma[messageModel].create({
138
+ data: { chatId: this.id, role: "assistant", content: null }
139
+ });
140
+ try {
141
+ const historyRecords = await this.prisma[messageModel].findMany({
142
+ where: { chatId: this.id, id: { notIn: [userMessage.id, assistantMessage.id] } },
143
+ orderBy: { createdAt: "asc" }
144
+ });
145
+ const history = historyRecords.map((m) => ({
146
+ role: m.role,
147
+ content: m.content || ""
148
+ }));
149
+ const coreChat = await this.prepareCoreChat(history, assistantMessage.id);
150
+ const response = await coreChat.ask(input);
151
+ return await this.prisma[messageModel].update({
152
+ where: { id: assistantMessage.id },
153
+ data: {
154
+ content: response.content,
155
+ contentRaw: JSON.stringify(response.meta),
156
+ inputTokens: response.usage?.input_tokens || 0,
157
+ outputTokens: response.usage?.output_tokens || 0,
158
+ modelId: response.model || null,
159
+ provider: response.provider || null
160
+ }
161
+ });
162
+ }
163
+ catch (error) {
164
+ await this.prisma[messageModel].delete({ where: { id: assistantMessage.id } });
165
+ // await (this.prisma as any)[messageModel].delete({ where: { id: userMessage!.id } });
166
+ throw error;
167
+ }
168
+ }
169
+ /**
170
+ * Stream a response and persist the conversation.
171
+ */
172
+ async *askStream(input) {
173
+ const messageModel = this.tables.message;
174
+ const userMessage = await this.prisma[messageModel].create({
175
+ data: { chatId: this.id, role: "user", content: input }
176
+ });
177
+ const assistantMessage = await this.prisma[messageModel].create({
178
+ data: { chatId: this.id, role: "assistant", content: null }
179
+ });
180
+ try {
181
+ const historyRecords = await this.prisma[messageModel].findMany({
182
+ where: { chatId: this.id, id: { notIn: [userMessage.id, assistantMessage.id] } },
183
+ orderBy: { createdAt: "asc" }
184
+ });
185
+ const history = historyRecords.map((m) => ({
186
+ role: m.role,
187
+ content: m.content || ""
188
+ }));
189
+ const coreChat = await this.prepareCoreChat(history, assistantMessage.id);
190
+ const stream = coreChat.stream(input);
191
+ let fullContent = "";
192
+ let metadata = {};
193
+ for await (const chunk of stream) {
194
+ if (chunk.content) {
195
+ fullContent += chunk.content;
196
+ yield chunk.content;
197
+ }
198
+ if (chunk.usage) {
199
+ metadata = { ...metadata, ...chunk.usage };
200
+ }
201
+ }
202
+ return await this.prisma[messageModel].update({
203
+ where: { id: assistantMessage.id },
204
+ data: {
205
+ content: fullContent,
206
+ contentRaw: JSON.stringify(metadata),
207
+ inputTokens: metadata.input_tokens || 0,
208
+ outputTokens: metadata.output_tokens || 0,
209
+ modelId: coreChat.model || null,
210
+ provider: coreChat.provider?.id || null
211
+ }
212
+ });
213
+ }
214
+ catch (error) {
215
+ await this.prisma[messageModel].delete({ where: { id: assistantMessage.id } });
216
+ // await (this.prisma as any)[messageModel].delete({ where: { id: userMessage!.id } });
217
+ throw error;
218
+ }
219
+ }
220
+ /**
221
+ * Get all messages for this chat.
222
+ */
223
+ async messages() {
224
+ const messageModel = this.tables.message;
225
+ return await this.prisma[messageModel].findMany({
226
+ where: { chatId: this.id },
227
+ orderBy: { createdAt: "asc" }
228
+ });
229
+ }
230
+ }
231
+ /**
232
+ * Convenience method to create a new chat session.
233
+ */
234
+ export async function createChat(prisma, llm, options = {}) {
235
+ const chatTable = options.tableNames?.chat || "chat";
236
+ // Extract known options so we don't double-pass them or pass them incorrectly
237
+ const { model, provider, instructions, metadata, tableNames, debug, persistence, ...extras } = options;
238
+ const record = await prisma[chatTable].create({
239
+ data: {
240
+ model,
241
+ provider,
242
+ instructions,
243
+ metadata: metadata ?? null,
244
+ ...extras
245
+ }
246
+ });
247
+ return new Chat(prisma, llm, record, options, options.tableNames);
248
+ }
249
+ /**
250
+ * Convenience method to load an existing chat session.
251
+ */
252
+ export async function loadChat(prisma, llm, chatId, options = {}) {
253
+ const chatTable = options.tableNames?.chat || "chat";
254
+ const record = await prisma[chatTable].findUnique({
255
+ where: { id: chatId }
256
+ });
257
+ if (!record)
258
+ return null;
259
+ return new Chat(prisma, llm, record, options, options.tableNames);
260
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @node-llm/orm/prisma
3
+ *
4
+ * Prisma adapter for NodeLLM ORM.
5
+ * Provides automatic persistence of chats, messages, tool calls, and API requests.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { PrismaClient } from '@prisma/client';
10
+ * import { createLLM } from '@node-llm/core';
11
+ * import { createChat } from '@node-llm/orm/prisma';
12
+ *
13
+ * const prisma = new PrismaClient();
14
+ * const llm = createLLM({ provider: 'openai' });
15
+ *
16
+ * const chat = await createChat(prisma, llm, {
17
+ * model: 'gpt-4',
18
+ * instructions: 'You are a helpful assistant.'
19
+ * });
20
+ *
21
+ * const response = await chat.ask('Hello!');
22
+ * console.log(response.content);
23
+ * ```
24
+ */
25
+ export { Chat, createChat, loadChat } from "./Chat.js";
26
+ export type { ChatRecord, MessageRecord, ChatOptions, TableNames } from "./Chat.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @node-llm/orm/prisma
3
+ *
4
+ * Prisma adapter for NodeLLM ORM.
5
+ * Provides automatic persistence of chats, messages, tool calls, and API requests.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { PrismaClient } from '@prisma/client';
10
+ * import { createLLM } from '@node-llm/core';
11
+ * import { createChat } from '@node-llm/orm/prisma';
12
+ *
13
+ * const prisma = new PrismaClient();
14
+ * const llm = createLLM({ provider: 'openai' });
15
+ *
16
+ * const chat = await createChat(prisma, llm, {
17
+ * model: 'gpt-4',
18
+ * instructions: 'You are a helpful assistant.'
19
+ * });
20
+ *
21
+ * const response = await chat.ask('Hello!');
22
+ * console.log(response.content);
23
+ * ```
24
+ */
25
+ export { Chat, createChat, loadChat } from "./Chat.js";
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @node-llm/orm
3
+ *
4
+ * Database persistence layer for NodeLLM.
5
+ * Automatically tracks chats, messages, tool calls, and API requests.
6
+ *
7
+ * ## Quick Start
8
+ *
9
+ * 1. Copy `schema.prisma` from this package into your project
10
+ * 2. Run `npx prisma migrate dev`
11
+ * 3. Use the ORM:
12
+ *
13
+ * ```typescript
14
+ * import { createChat } from '@node-llm/orm/prisma';
15
+ * import { prisma } from './db.js';
16
+ * import { llm } from './llm.js';
17
+ *
18
+ * const chat = await createChat(prisma, llm, {
19
+ * model: 'gpt-4',
20
+ * instructions: 'You are a helpful assistant.'
21
+ * });
22
+ *
23
+ * await chat.ask('Hello!');
24
+ * ```
25
+ *
26
+ * ## Adapters
27
+ *
28
+ * - `@node-llm/orm/prisma` - Prisma adapter (recommended)
29
+ *
30
+ * ## Schema
31
+ *
32
+ * The ORM tracks four core entities:
33
+ * - **Chat** - Session container (model, provider, instructions)
34
+ * - **Message** - User/Assistant conversation history
35
+ * - **ToolCall** - Tool executions (name, arguments, results)
36
+ * - **Request** - API call metrics (tokens, latency, cost)
37
+ */
38
+ export * from "./adapters/prisma/index.js";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,cAAc,4BAA4B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @node-llm/orm
3
+ *
4
+ * Database persistence layer for NodeLLM.
5
+ * Automatically tracks chats, messages, tool calls, and API requests.
6
+ *
7
+ * ## Quick Start
8
+ *
9
+ * 1. Copy `schema.prisma` from this package into your project
10
+ * 2. Run `npx prisma migrate dev`
11
+ * 3. Use the ORM:
12
+ *
13
+ * ```typescript
14
+ * import { createChat } from '@node-llm/orm/prisma';
15
+ * import { prisma } from './db.js';
16
+ * import { llm } from './llm.js';
17
+ *
18
+ * const chat = await createChat(prisma, llm, {
19
+ * model: 'gpt-4',
20
+ * instructions: 'You are a helpful assistant.'
21
+ * });
22
+ *
23
+ * await chat.ask('Hello!');
24
+ * ```
25
+ *
26
+ * ## Adapters
27
+ *
28
+ * - `@node-llm/orm/prisma` - Prisma adapter (recommended)
29
+ *
30
+ * ## Schema
31
+ *
32
+ * The ORM tracks four core entities:
33
+ * - **Chat** - Session container (model, provider, instructions)
34
+ * - **Message** - User/Assistant conversation history
35
+ * - **ToolCall** - Tool executions (name, arguments, results)
36
+ * - **Request** - API call metrics (tokens, latency, cost)
37
+ */
38
+ // Re-export Prisma adapter as default
39
+ export * from "./adapters/prisma/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-llm/orm",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Database persistence layer for NodeLLM - Chat, Message, and ToolCall tracking with streaming support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,11 +18,6 @@
18
18
  "types": "./dist/adapters/prisma/index.d.ts"
19
19
  }
20
20
  },
21
- "scripts": {
22
- "build": "tsc",
23
- "test": "vitest run",
24
- "test:watch": "vitest"
25
- },
26
21
  "keywords": [
27
22
  "llm",
28
23
  "orm",
@@ -68,5 +63,10 @@
68
63
  "typescript": "^5.0.0",
69
64
  "vitest": "^1.0.0"
70
65
  },
71
- "dependencies": {}
72
- }
66
+ "dependencies": {},
67
+ "scripts": {
68
+ "build": "tsc",
69
+ "test": "vitest run",
70
+ "test:watch": "vitest"
71
+ }
72
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.full.d.ts","./src/BaseChat.ts","../../node_modules/.pnpm/@prisma+client@5.22.0/node_modules/@prisma/client/runtime/library.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0/node_modules/.prisma/client/default.d.ts","../../node_modules/.pnpm/@prisma+client@5.22.0/node_modules/@prisma/client/default.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Role.d.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialUtil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Tool.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Content.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/Provider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatResponse.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Message.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/schema/Schema.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/constants.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatOptions.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/streaming/Stream.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/chat/ChatStream.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/image/GeneratedImage.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/types.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/ModelRegistry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/models/PricingRegistry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/transcription/Transcription.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/moderation/Moderation.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/embedding/Embedding.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/config.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/llm.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/anthropic/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/BaseProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/gemini/GeminiProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/gemini/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/DeepSeekProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Models.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/Capabilities.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/deepseek/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Chat.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Streaming.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Models.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Image.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Transcription.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Moderation.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/Embedding.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openai/OpenAIProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/ollama/OllamaProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/ollama/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openrouter/OpenRouterProvider.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/openrouter/index.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/providers/registry.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/model_aliases.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/aliases.d.ts","../../node_modules/.pnpm/file+packages+core/node_modules/@node-llm/core/dist/index.d.ts","./src/adapters/prisma/Chat.ts","./src/adapters/prisma/index.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@20.19.30/node_modules/@types/node/index.d.ts"],"fileIdsList":[[65,137,183],[66,137,183],[137,183],[137,180,183],[137,182,183],[183],[137,183,188,216],[137,183,184,189,194,202,213,224],[137,183,184,185,194,202],[132,133,134,137,183],[137,183,186,225],[137,183,187,188,195,203],[137,183,188,213,221],[137,183,189,191,194,202],[137,182,183,190],[137,183,191,192],[137,183,193,194],[137,182,183,194],[137,183,194,195,196,213,224],[137,183,194,195,196,209,213,216],[137,183,191,194,197,202,213,224],[137,183,194,195,197,198,202,213,221,224],[137,183,197,199,213,221,224],[135,136,137,138,139,140,141,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230],[137,183,194,200],[137,183,201,224,229],[137,183,191,194,202,213],[137,183,203],[137,183,204],[137,182,183,205],[137,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230],[137,183,207],[137,183,208],[137,183,194,209,210],[137,183,209,211,225,227],[137,183,194,213,214,216],[137,183,215,216],[137,183,213,214],[137,183,216],[137,183,217],[137,180,183,213,218],[137,183,194,219,220],[137,183,219,220],[137,183,188,202,213,221],[137,183,222],[137,183,202,223],[137,183,197,208,224],[137,183,188,225],[137,183,213,226],[137,183,201,227],[137,183,228],[137,178,183],[137,178,183,194,196,205,213,216,224,227,229],[137,183,213,230],[82,83,84,85,86,87,88,89,90,91,137,183],[83,85,86,87,88,89,137,183],[83,85,137,183],[84,85,87,90,91,92,137,183],[68,83,84,85,86,137,183],[82,137,183],[89,137,183],[85,137,183],[85,137,183,213],[82,83,84,86,87,88,89,90,91,92,93,101,102,105,125,126,127,137,183],[85,90,92,94,96,97,98,99,100,101,137,183],[95,137,183],[85,87,137,183],[83,87,137,183],[85,105,137,183],[108,109,110,111,137,183],[106,137,183],[120,137,183],[121,137,183],[85,120,137,183],[85,95,137,183],[85,105,113,114,115,116,117,118,119,137,183],[123,137,183],[85,101,103,104,107,112,122,124,137,183],[137,150,154,183,224],[137,150,183,213,224],[137,145,183],[137,147,150,183,221,224],[137,183,202,221],[137,183,231],[137,145,183,231],[137,147,150,183,202,224],[137,142,143,146,149,183,194,213,224],[137,150,157,183],[137,142,148,183],[137,150,171,172,183],[137,146,150,183,216,224,231],[137,171,183,231],[137,144,145,183,231],[137,150,183],[137,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,172,173,174,175,176,177,183],[137,150,165,183],[137,150,157,158,183],[137,148,150,158,159,183],[137,149,183],[137,142,145,150,183],[137,150,154,158,159,183],[137,154,183],[137,148,150,153,183,224],[137,142,147,150,157,183],[137,183,213],[137,145,150,171,183,229,231],[81,137,183],[69,70,71,137,183],[72,73,137,183],[69,70,72,74,75,80,137,183],[70,72,137,183],[80,137,183],[72,137,183],[69,70,72,75,76,77,78,79,137,183],[64,67,128,137,183],[129,137,183],[130,137,183]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"98960981691b4cc6066cf92f932b06affe78ededa9873d5ecb60389bd075b740","signature":"ff3ea4421cb6ccb7121d5e39367cea179ef8a6760657d4da4da71725f5d389dd","impliedFormat":99},{"version":"21247c958d397091ec30e63b27294baa1d1434c333da4fda697743190311dc62","impliedFormat":1},{"version":"71df692065d79c5b044002f8a68eba33e934859859094bab2f334f64a467f428","impliedFormat":1},{"version":"51ebca098538b252953b1ef83c165f25b52271bfb6049cd09d197dddd4cd43c5","impliedFormat":1},{"version":"df41e12c868eac7a8eae373906cb60e9c6128f91b8f0c49e3311488d5c20bdde","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"85054db69473c5f3011329758e39480d5a1e177ef09c035fc54614aa98fd74f4","impliedFormat":99},{"version":"f78d61c966023b8e1808ee8644b983541c5c08b10d501171fdaa3b59ced89c32","impliedFormat":99},{"version":"9328f8ce11ce74072988669e69eb40326f1486c244a806034e8c7dfbdd88eaac","impliedFormat":99},{"version":"3b44e9e63ddfec2be4917454293ed956bd6cbafcc92f071340cb4446c965c281","impliedFormat":99},{"version":"f7963c9a812222c2436c2cf084125877e58a0909c6f82af8529b9c8aa785d110","impliedFormat":99},{"version":"58cac8e1268a9047d6c1f8bae7fd330b4896df5b7da6b4ecb576ac9763588853","impliedFormat":99},{"version":"45924327d47f4d6f4bc923d8c2df1e73d16f3c511ff8662eaf1d01b7c46e2506","impliedFormat":99},{"version":"8d2ee15310498f68cb0c585d5cb0e14a4393e70f1780508a853541c757f6932d","impliedFormat":99},{"version":"571f2a23b4d8db490894c3f06039ba8a4a05cfd46ce74f8d8e8b9ac92e505150","impliedFormat":99},{"version":"bca2816969296a8fdf7735ff7b6500f88573ca4c5ef790cc989967b2479169fd","impliedFormat":99},{"version":"5b26dc2f18cf265e1b044c269263ae45da16f2f19a350fb14af98d61b8468aec","impliedFormat":99},{"version":"a58ac9509800c7eb6f69e770ff8fca99f6caf8532faac75cffdd62b8564a99c7","impliedFormat":99},{"version":"9c653bd35750be294edb51b8a16b0fc25b7234ac9ac5f89f5138942d7222152e","impliedFormat":99},{"version":"b5c3f80141815dd5910090c4ce28cd98db342605f4a7cfb48814fb20565bcce8","impliedFormat":99},{"version":"9fdf07bf69bbba5041b81761bc5333176bd90fba388014869151ec47769ecb44","impliedFormat":99},{"version":"e05a7b9152a1a20cffbcfec9ffd16619f33e50d97c3c82354d4a18c5e5550e56","impliedFormat":99},{"version":"4169b5a94f1812cafeb891b190d8f59c8734b79c12050eea812d85dca83bff92","impliedFormat":99},{"version":"074f511000dd9c28a83a1fd65a929fea666524b062e1400b50d305b379d096a3","impliedFormat":99},{"version":"39c0fd3809411a5bd0ed4a2b9cf776526db2ec7f7b37cc5caadfe34e1927c5a4","impliedFormat":99},{"version":"bebe305c5c17e5f4a541e83f6394e0531500b4a2a552a384d07577d0dabf2f51","impliedFormat":99},{"version":"69192e09da8a319a76f4084a19ac77ef4db23465e3dc42d28c99d8af5a14a42b","impliedFormat":99},{"version":"d4c2dd8ce9a021c8f7dbb00e9508c7085ac5c3e8b60bc7c92bf4b787845c3ea8","impliedFormat":99},{"version":"8bad90fd5b485d6ea772717835dc60692ab7572819383a47ef8e97e674f8df48","impliedFormat":99},{"version":"16b9d3c3fe7c4f508e2431a439cdb2c32f2783ae7adad023451b5b1518622173","impliedFormat":99},{"version":"e7c8fee70a3e9f8df00d74de3d258ea8b961c9bace2c485075b9e04025ea4382","impliedFormat":99},{"version":"9016e349de895461db3bb28a342e46e36b539c40877ef9c805fa62db0692b8f2","impliedFormat":99},{"version":"bcc1345f4449ec15100221ebfb8dbd59538f5ccafddf2469d1519c071cd4dae8","impliedFormat":99},{"version":"7b962f5ac4599c2c8300c84fec82cfa4e611b6bfef81b73068d11219761eb7ef","impliedFormat":99},{"version":"b734844adc45e90266d347e0039d21dadc30cdc858e8529566691a1a0d20848a","impliedFormat":99},{"version":"aab3fca58b163bc67f2209c0b3b445f05cb98f6aee142e5b0399917f3b3108cc","impliedFormat":99},{"version":"1c856e1c497470497a253102fbff5bf9bc64312cd241e2ddd623112e2865d2bf","impliedFormat":99},{"version":"1fc29969ce8facb1c332b6b2779f31a402b4107b97a75505d01fa7fcc152f4da","impliedFormat":99},{"version":"2539181da1a9d49b9632cd8355be866ffe0a0a118a3c0e698d9ee96d1363a72b","impliedFormat":99},{"version":"a78ca3ad50d3c0d8fbd9df9cd5ebdd93251eb5b1910860f7522687d79e08dd63","impliedFormat":99},{"version":"56030521b956d964325edb08949b6d4dbd97ed7d36af0526964ad0c7ffa20379","impliedFormat":99},{"version":"8e8abb1fd13e3656120960984d8c57ff78cfd2811f0fc338b81770d5b76204d5","impliedFormat":99},{"version":"6ff021084f4b397df86d9f83a344eb5b41adf015fa6a1d8911642e49c10bf40b","impliedFormat":99},{"version":"4e97ea793c63e62836381a529896c89d6e153cf8671cd80216aa786cd67b39c1","impliedFormat":99},{"version":"d471a3803f7e8136dea84fbfbb17d24e61ceeb6812226940889848d733c35e02","impliedFormat":99},{"version":"d82997f65bf4f33cedbf3c742646649a13728a6fd5b13b582b09b06eb1c7de5a","impliedFormat":99},{"version":"1de667d4ff0329ccb886144c2bb7bba64ed7780df99ea5ec49a7bd2d020344a6","impliedFormat":99},{"version":"127e20c67d325cab272200948a849d1fb83c066cadc3852f778bbc39915fa79a","impliedFormat":99},{"version":"883acf44b6127ddf60b92c39e52688fcc8a415c484d3939b71f046c703127aae","impliedFormat":99},{"version":"f6a80a9c380ee91f1434fb4a46b29ef9c4fce4abe4b9187415110e6a2cdaec92","impliedFormat":99},{"version":"88e2d31be26c636f6d9a878040865a2dd2b046ef6f4cdb6c1a9c1809f7c639b4","impliedFormat":99},{"version":"f7f77fec273802b239c5b9aff3b6123764692ca9e9f16f1ccd3ae1e42cfe7005","impliedFormat":99},{"version":"05234561759dabe2d43786bbd175f98b14fb43a0c22abc50cf07f2c81cd3ae2e","signature":"014961606ef96d04899a1f6716b527678e20cf69c08bd16c3086a9b0c28d792f","impliedFormat":99},{"version":"0c71dcff28ef103af2b6cd1354e85c0fc7c2842b011748ad7dfce0d660187215","signature":"9afa8d4286367147b5f00fd220257afa3d6daa625d5371136a143ec9911e4919","impliedFormat":99},{"version":"80a3876c6ffa07a29aca0ac468a92db73847cc561bb283c60d3917d2dfad20f9","signature":"27ea85f1fbb701f6e6e3520c3388615c6d9e2b1f598cda7251d8f5516ed47e04","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e456fd5b101271183d99a9087875a282323e3a3ff0d7bcf1881537eaa8b8e63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"ddc734b4fae82a01d247e9e342d020976640b5e93b4e9b3a1e30e5518883a060","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[64,[129,131]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"noImplicitAny":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[66,1],[67,2],[65,3],[180,4],[181,4],[182,5],[137,6],[183,7],[184,8],[185,9],[132,3],[135,10],[133,3],[134,3],[186,11],[187,12],[188,13],[189,14],[190,15],[191,16],[192,16],[193,17],[194,18],[195,19],[196,20],[138,3],[136,3],[197,21],[198,22],[199,23],[231,24],[200,25],[201,26],[202,27],[203,28],[204,29],[205,30],[206,31],[207,32],[208,33],[209,34],[210,34],[211,35],[212,3],[213,36],[215,37],[214,38],[216,39],[217,40],[218,41],[219,42],[220,43],[221,44],[222,45],[223,46],[224,47],[225,48],[226,49],[227,50],[228,51],[139,3],[140,3],[141,3],[179,52],[229,53],[230,54],[127,3],[92,55],[90,56],[86,57],[93,58],[84,3],[87,59],[68,3],[83,60],[101,61],[89,3],[100,62],[94,63],[128,64],[102,65],[126,3],[96,66],[97,66],[95,3],[99,62],[105,67],[85,68],[104,3],[111,66],[109,62],[108,69],[110,62],[112,70],[106,69],[107,71],[121,72],[122,73],[113,74],[119,62],[116,62],[115,75],[118,62],[120,76],[114,74],[117,62],[103,3],[123,72],[124,77],[125,78],[88,60],[91,3],[98,62],[61,3],[62,3],[12,3],[10,3],[11,3],[16,3],[15,3],[2,3],[17,3],[18,3],[19,3],[20,3],[21,3],[22,3],[23,3],[24,3],[3,3],[25,3],[26,3],[4,3],[27,3],[31,3],[28,3],[29,3],[30,3],[32,3],[33,3],[34,3],[5,3],[35,3],[36,3],[37,3],[38,3],[6,3],[42,3],[39,3],[40,3],[41,3],[43,3],[7,3],[44,3],[49,3],[50,3],[45,3],[46,3],[47,3],[48,3],[8,3],[54,3],[51,3],[52,3],[53,3],[55,3],[9,3],[56,3],[63,3],[57,3],[58,3],[60,3],[59,3],[1,3],[14,3],[13,3],[157,79],[167,80],[156,79],[177,81],[148,82],[147,83],[176,84],[170,85],[175,86],[150,87],[164,88],[149,89],[173,90],[145,91],[144,84],[174,92],[146,93],[151,94],[152,3],[155,94],[142,3],[178,95],[168,96],[159,97],[160,98],[162,99],[158,100],[161,101],[171,84],[153,102],[154,103],[163,104],[143,105],[166,96],[165,94],[169,3],[172,106],[82,107],[72,108],[74,109],[81,110],[76,3],[77,3],[75,111],[78,112],[69,3],[70,3],[71,107],[73,113],[79,3],[80,114],[64,3],[129,115],[130,116],[131,117]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}