@hybrd/utils 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,293 +1,58 @@
1
1
  # @hybrd/utils
2
2
 
3
- Utility functions and helpers for the Hybrid framework ecosystem. This package provides a collection of commonly used utility functions for array manipulation, string processing, date formatting, object operations, and more.
3
+ This package is part of the Hybrid monorepo.
4
4
 
5
- ## Installation
5
+ Hybrid makes it easy for developers to create intelligent agents that can understand natural language, process messages, and respond through XMTP's decentralized messaging protocol.
6
6
 
7
- ```bash
8
- pnpm install @hybrd/utils
9
- ```
10
-
11
- ## Usage
12
-
13
- ```typescript
14
- import { chunk, truncate, formatDate, stringifyValues } from "@hybrd/utils"
15
- ```
16
-
17
- ## API Reference
18
-
19
- ### Array Utilities
20
-
21
- #### `chunk<T>(arr: T[], size: number): T[][]`
22
-
23
- Splits an array into chunks of specified size.
24
-
25
- ```typescript
26
- import { chunk } from "@hybrd/utils"
27
-
28
- const numbers = [1, 2, 3, 4, 5, 6, 7, 8]
29
- const chunks = chunk(numbers, 3)
30
- // Result: [[1, 2, 3], [4, 5, 6], [7, 8]]
31
- ```
32
-
33
- #### `uniq<T>(array: T[]): T[]`
34
-
35
- Returns a new array with only unique elements from the input array.
36
-
37
- ```typescript
38
- import { uniq } from "@hybrd/utils"
39
-
40
- const duplicates = [1, 2, 2, 3, 3, 3, 4]
41
- const unique = uniq(duplicates)
42
- // Result: [1, 2, 3, 4]
43
- ```
44
-
45
- #### `shuffle(array: any[]): any[]`
46
-
47
- Randomly shuffles the elements of an array. Returns an empty array if input is undefined.
48
-
49
- ```typescript
50
- import { shuffle } from "@hybrd/utils"
51
-
52
- const cards = ['A', 'K', 'Q', 'J']
53
- const shuffled = shuffle(cards)
54
- // Result: randomly ordered array
55
- ```
56
-
57
- ### String Utilities
58
-
59
- #### `truncate(str: string, length: number): string`
60
-
61
- Truncates a string to a specified length, adding an ellipsis if the string is longer than the specified length.
62
-
63
- ```typescript
64
- import { truncate } from "@hybrd/utils"
65
-
66
- const longText = "This is a very long text that needs to be truncated"
67
- const short = truncate(longText, 20)
68
- // Result: "This is a very long..."
69
- ```
70
-
71
- ### Date Utilities
72
-
73
- #### `formatDate(stringOrDate?: string | Date): string`
74
-
75
- Formats a date string or Date object into a localized date string.
76
-
77
- ```typescript
78
- import { formatDate } from "@hybrd/utils"
79
-
80
- const date = new Date('2024-01-15')
81
- const formatted = formatDate(date)
82
- // Result: "Jan 15, 2024"
83
-
84
- const dateString = formatDate('2024-01-15')
85
- // Result: "Jan 15, 2024"
86
-
87
- const empty = formatDate()
88
- // Result: ""
89
- ```
90
-
91
- #### `formatRelativeDate(date: Date): string`
92
-
93
- Formats a date relative to the current time with intelligent formatting:
94
- - "Today, [time]" for today's dates
95
- - "Yesterday, [time]" for yesterday's dates
96
- - "MMM d, h:mm a" for dates in current year
97
- - "MMM d, yyyy" for dates in other years
98
-
99
- ```typescript
100
- import { formatRelativeDate } from "@hybrd/utils"
101
-
102
- const today = new Date()
103
- const todayFormatted = formatRelativeDate(today)
104
- // Result: "Today, 2:30 PM"
105
-
106
- const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000)
107
- const yesterdayFormatted = formatRelativeDate(yesterday)
108
- // Result: "Yesterday, 2:30 PM"
109
- ```
110
-
111
- ### Object Utilities
112
-
113
- #### `stringifyValues(obj: Record<string, unknown>): Record<string, string>`
114
-
115
- Stringifies all values in an object, including objects and null values. Returns an empty object if input is undefined.
116
-
117
- ```typescript
118
- import { stringifyValues } from "@hybrd/utils"
119
-
120
- const mixed = {
121
- string: "hello",
122
- number: 42,
123
- object: { nested: true },
124
- nullValue: null,
125
- boolean: false
126
- }
7
+ See [hybrid.dev](https://hybrid.dev) for more information.
127
8
 
128
- const stringified = stringifyValues(mixed)
129
- // Result: {
130
- // string: "hello",
131
- // number: "42",
132
- // object: '{"nested":true}',
133
- // nullValue: "null",
134
- // boolean: "false"
135
- // }
136
- ```
137
-
138
- #### `pruneEmpty<T>(obj: T): Partial<T>`
139
-
140
- Removes empty values (undefined, null, empty strings) from an object.
141
-
142
- ```typescript
143
- import { pruneEmpty } from "@hybrd/utils"
144
-
145
- const withEmpties = {
146
- name: "John",
147
- email: "",
148
- age: null,
149
- active: true,
150
- notes: undefined
151
- }
152
-
153
- const pruned = pruneEmpty(withEmpties)
154
- // Result: { name: "John", active: true }
155
- ```
156
-
157
- ### Markdown Utilities
158
-
159
- #### `stripMarkdown(markdown: string): Promise<string>`
160
-
161
- Strips markdown formatting from a string, returning plain text.
162
-
163
- ```typescript
164
- import { stripMarkdown } from "@hybrd/utils"
165
-
166
- const markdown = "# Hello **world**\n\nThis is *italic* text."
167
- const plain = await stripMarkdown(markdown)
168
- // Result: "Hello world\n\nThis is italic text."
169
- ```
170
-
171
- ### Cloudflare Utilities
172
-
173
- #### `getCloudflareEnvironment(): CloudflareEnvironment`
174
-
175
- Detects if running in Cloudflare environment and returns appropriate configuration.
176
-
177
- ```typescript
178
- import { getCloudflareEnvironment } from "@hybrd/utils"
179
-
180
- const env = getCloudflareEnvironment()
181
- // Result: { isCloudflare: boolean, branch?: string, url?: string }
182
- ```
183
-
184
- #### `getCloudflareStoragePath(subPath?: string): string`
185
-
186
- Gets the appropriate storage path for the current environment.
187
-
188
- ```typescript
189
- import { getCloudflareStoragePath } from "@hybrd/utils"
190
-
191
- const storagePath = getCloudflareStoragePath("uploads")
192
- // Result: appropriate path based on environment
193
- ```
9
+ ## 📦 Quickstart
194
10
 
195
- #### `getCloudflareServiceUrl(fallbackPort?: number): string`
11
+ Getting started with Hybrid is simple:
196
12
 
197
- Gets service URL based on Cloudflare environment variables.
13
+ ### 1. Initialize your project
198
14
 
199
- ```typescript
200
- import { getCloudflareServiceUrl } from "@hybrd/utils"
201
-
202
- const serviceUrl = getCloudflareServiceUrl(3000)
203
- // Result: CF_PAGES_URL or localhost with fallback port
15
+ ```bash
16
+ npm create hybrid my-agent
17
+ cd my-agent
204
18
  ```
205
19
 
206
- ### Storage Utilities
207
-
208
- #### `R2StorageAdapter`
20
+ This creates all the necessary files and configuration for your agent.
209
21
 
210
- Storage adapter for Cloudflare R2.
22
+ ### 2. Get your OpenRouter API key
23
+
24
+ Visit [OpenRouter](https://openrouter.ai/keys), create an account and generate an API key
211
25
 
212
- ```typescript
213
- import { R2StorageAdapter } from "@hybrd/utils"
26
+ Add it to your `.env` file:
214
27
 
215
- const adapter = new R2StorageAdapter(bucket)
216
- await adapter.uploadFile(localPath, remotePath)
217
- await adapter.downloadFile(remotePath, localPath)
218
- await adapter.delete(remotePath)
28
+ ```env
29
+ OPENROUTER_API_KEY=your_openrouter_api_key_here
219
30
  ```
220
31
 
221
- #### `ExternalDatabaseAdapter`
32
+ ### 3. Generate XMTP keys
222
33
 
223
- Storage adapter for external databases.
224
-
225
- ```typescript
226
- import { ExternalDatabaseAdapter } from "@hybrd/utils"
227
-
228
- const adapter = new ExternalDatabaseAdapter(connectionString)
229
- await adapter.uploadFile(localPath, remotePath)
34
+ ```bash
35
+ hybrid keys
230
36
  ```
231
37
 
232
- #### `createStorageAdapter(): StorageAdapter | null`
38
+ or automatically add it to your `.env` file:
233
39
 
234
- Factory function to create appropriate storage adapter based on environment.
235
-
236
- ```typescript
237
- import { createStorageAdapter } from "@hybrd/utils"
238
-
239
- const adapter = createStorageAdapter()
240
- if (adapter) {
241
- await adapter.uploadFile(localPath, remotePath)
242
- }
40
+ ```bash
41
+ hybrid keys --write
243
42
  ```
244
43
 
245
- ### URL Utilities
246
-
247
- #### `getUrl(path?: string): string`
248
-
249
- Gets the appropriate URL for the current environment, checking:
250
- 1. `AGENT_URL` environment variable
251
- 2. `RAILWAY_PUBLIC_DOMAIN` environment variable (Railway deployment)
252
- 3. `http://localhost:8454/` (default)
253
-
254
- ```typescript
255
- import { getUrl } from "@hybrd/utils"
44
+ ### 4. Register your wallet with XMTP
256
45
 
257
- const baseUrl = getUrl()
258
- // Result: appropriate URL based on environment
259
-
260
- const apiUrl = getUrl("/api/messages")
261
- // Result: full URL with path appended
46
+ ```bash
47
+ hybrid register
262
48
  ```
263
49
 
264
- ### UUID Utilities
265
-
266
- #### `randomUUID(): string`
50
+ This generates secure wallet and encryption keys for your XMTP agent.
267
51
 
268
- Generates a random UUID string. Uses the uuid package for browser compatibility.
52
+ ### 5. Start developing
269
53
 
270
- ```typescript
271
- import { randomUUID } from "@hybrd/utils"
272
-
273
- const id = randomUUID()
274
- // Result: "550e8400-e29b-41d4-a716-446655440000"
54
+ ```bash
55
+ hybrid dev
275
56
  ```
276
57
 
277
- ## Dependencies
278
-
279
- This package uses the following external dependencies:
280
-
281
- - `date-fns` - Date formatting and manipulation
282
- - `remark` & `strip-markdown` - Markdown processing
283
- - `uuid` - UUID generation
284
-
285
- ## Related Packages
286
-
287
- - [`hybrid`](../core) - Main agent framework
288
- - [`@hybrd/xmtp`](../xmtp) - XMTP client integration
289
- - [`@hybrd/cli`](../cli) - Command-line interface
290
-
291
- ## License
292
-
293
- MIT
58
+ Your agent will start listening for XMTP messages and you're ready to build!
package/dist/index.cjs CHANGED
@@ -40,6 +40,7 @@ __export(src_exports, {
40
40
  getCloudflareServiceUrl: () => getCloudflareServiceUrl,
41
41
  getCloudflareStoragePath: () => getCloudflareStoragePath,
42
42
  getUrl: () => getUrl,
43
+ logger: () => logger,
43
44
  pruneEmpty: () => pruneEmpty,
44
45
  randomUUID: () => randomUUID,
45
46
  shuffle: () => shuffle,
@@ -238,6 +239,35 @@ var import_uuid = require("uuid");
238
239
  function randomUUID() {
239
240
  return (0, import_uuid.v4)();
240
241
  }
242
+
243
+ // src/lib/logger.ts
244
+ var logger = {
245
+ debug: (message, ...args) => {
246
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
247
+ console.log(message, ...args);
248
+ }
249
+ },
250
+ log: (message, ...args) => {
251
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
252
+ console.log(message, ...args);
253
+ }
254
+ },
255
+ info: (message, ...args) => {
256
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
257
+ console.info(message, ...args);
258
+ }
259
+ },
260
+ warn: (message, ...args) => {
261
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
262
+ console.warn(message, ...args);
263
+ }
264
+ },
265
+ error: (message, ...args) => {
266
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
267
+ console.error(message, ...args);
268
+ }
269
+ }
270
+ };
241
271
  // Annotate the CommonJS export names for ESM import in node:
242
272
  0 && (module.exports = {
243
273
  ExternalDatabaseAdapter,
@@ -250,6 +280,7 @@ function randomUUID() {
250
280
  getCloudflareServiceUrl,
251
281
  getCloudflareStoragePath,
252
282
  getUrl,
283
+ logger,
253
284
  pruneEmpty,
254
285
  randomUUID,
255
286
  shuffle,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/array.ts","../src/lib/cloudflare.ts","../src/lib/storage.ts","../src/lib/date.ts","../src/lib/object.ts","../src/lib/markdown.ts","../src/lib/string.ts","../src/lib/urls.ts","../src/lib/uuid.ts"],"sourcesContent":["export * from \"./lib/array\"\nexport * from \"./lib/cloudflare\"\nexport * from \"./lib/storage\"\nexport * from \"./lib/date\"\nexport * from \"./lib/object\"\nexport * from \"./lib/markdown\"\nexport * from \"./lib/string\"\nexport * from \"./lib/urls\"\nexport * from \"./lib/uuid\"\n","/**\n * Splits an array into chunks of specified size.\n *\n * @template T - The type of the array elements.\n * @param {T[]} arr - The array to split into chunks.\n * @param {number} size - The maximum number of elements per chunk.\n * @returns {T[][]} An array of chunks, where each chunk is an array of T.\n */\nexport function chunk<T>(arr: T[], size: number): T[][] {\n\treturn Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n\t\tarr.slice(i * size, i * size + size)\n\t)\n}\n\n/**\n * Returns a new array with only unique elements from the input array.\n *\n * @template T - The type of the array elements.\n * @param {T[]} array - The array from which to remove duplicate elements.\n * @returns {T[]} A new array containing only unique elements.\n */\nexport function uniq<T>(array: T[]): T[] {\n\treturn array.filter((item, index, self) => self.indexOf(item) === index)\n}\n\n/**\n * Randomly shuffles the elements of an array.\n *\n * @param {any[] | undefined} array - The array to shuffle. If undefined, returns an empty array.\n * @returns {any[]} A shuffled copy of the input array.\n */\nexport function shuffle(array: any[] | undefined) {\n\tif (!array) return []\n\treturn array.sort(() => Math.random() - 0.5)\n}\n","/**\n * Cloudflare environment detection and storage utilities\n */\n\ndeclare const process: {\n env: Record<string, string | undefined>\n cwd(): string\n}\n\nexport interface CloudflareEnvironment {\n isCloudflare: boolean\n platform: 'pages' | 'workers' | 'local'\n storagePath: string\n}\n\n/**\n * Detects if running in Cloudflare environment and returns appropriate storage configuration\n */\nexport function getCloudflareEnvironment(): CloudflareEnvironment {\n if (process.env.CF_PAGES_BRANCH) {\n return {\n isCloudflare: true,\n platform: 'pages',\n storagePath: '/tmp'\n }\n }\n\n if (process.env.CF_WORKER_NAME) {\n return {\n isCloudflare: true,\n platform: 'workers',\n storagePath: '/tmp'\n }\n }\n\n return {\n isCloudflare: false,\n platform: 'local',\n storagePath: process.env.PROJECT_ROOT || process.cwd()\n }\n}\n\n/**\n * Gets the appropriate storage path for the current environment\n * @param subPath - Optional subdirectory within the storage path\n */\nexport function getCloudflareStoragePath(subPath?: string): string {\n const env = getCloudflareEnvironment()\n \n if (env.isCloudflare) {\n return subPath ? `/tmp/${subPath}` : '/tmp'\n }\n\n const basePath = env.storagePath\n const dataPath = subPath ? `${basePath}/.data/${subPath}` : `${basePath}/.data`\n \n return dataPath\n}\n\n/**\n * Gets service URL based on Cloudflare environment variables\n */\nexport function getCloudflareServiceUrl(fallbackPort = 3000): string {\n if (process.env.CF_PAGES_URL) {\n return process.env.CF_PAGES_URL\n }\n\n if (process.env.CF_WORKER_URL) {\n return process.env.CF_WORKER_URL\n }\n\n // Local development fallback\n return `http://localhost:${fallbackPort}`\n}\n","import fs from \"node:fs/promises\"\n\nexport interface StorageAdapter {\n uploadFile(localPath: string, remotePath: string): Promise<void>\n downloadFile(remotePath: string, localPath: string): Promise<void>\n exists(remotePath: string): Promise<boolean>\n delete(remotePath: string): Promise<void>\n}\n\nexport class R2StorageAdapter implements StorageAdapter {\n constructor(private bucket: any) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n const fileData = await fs.readFile(localPath)\n await this.bucket.put(remotePath, fileData)\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n const object = await this.bucket.get(remotePath)\n if (object) {\n await fs.writeFile(localPath, await object.arrayBuffer())\n }\n }\n \n async exists(remotePath: string): Promise<boolean> {\n const object = await this.bucket.head(remotePath)\n return object !== null\n }\n \n async delete(remotePath: string): Promise<void> {\n await this.bucket.delete(remotePath)\n }\n}\n\nexport class ExternalDatabaseAdapter implements StorageAdapter {\n constructor(private connectionString: string) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async exists(remotePath: string): Promise<boolean> {\n return false\n }\n \n async delete(remotePath: string): Promise<void> {\n }\n}\n\nexport function createStorageAdapter(): StorageAdapter | null {\n if (typeof globalThis !== 'undefined' && 'XMTP_STORAGE' in globalThis) {\n return new R2StorageAdapter((globalThis as any).XMTP_STORAGE)\n }\n \n if (typeof process !== 'undefined' && process.env?.DATABASE_URL) {\n return new ExternalDatabaseAdapter(process.env.DATABASE_URL)\n }\n \n return null\n}\n","import { format, isToday, isYesterday } from \"date-fns\";\n\n/**\n * Formats a date string or Date object into a localized date string\n * @param stringOrDate - Date string or Date object to format\n * @returns Formatted date string (e.g., \"Jan 1, 2024\") or empty string if no input\n */\nexport function formatDate(stringOrDate?: string | Date): string {\n\tif (!stringOrDate) return \"\";\n\n\tconst date = new Date(stringOrDate);\n\n\treturn date.toLocaleDateString(undefined, {\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}\n\n/**\n * Formats a date relative to the current time\n * @param date - Date object to format\n * @returns Formatted string with relative time:\n * - \"Today, [time]\" for today's dates\n * - \"Yesterday, [time]\" for yesterday's dates\n * - \"MMM d, h:mm a\" for dates in current year\n * - \"MMM d, yyyy\" for dates in other years\n */\nexport function formatRelativeDate(date: Date) {\n\tif (isToday(date)) {\n\t\treturn `Today, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (isYesterday(date)) {\n\t\treturn `Yesterday, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (new Date().getFullYear() === date.getFullYear()) {\n\t\treturn format(date, \"MMM d, h:mm a\");\n\t}\n\treturn format(date, \"MMM d, yyyy\");\n}\n","/**\n * Stringifies all values in an object, including objects and null values.\n * If obj is undefined, returns an empty object.\n * @param obj - The object to stringify\n * @returns A new object with the same keys as obj, but with all values stringified\n */\nexport function stringifyValues(\n\tobj: Record<string, unknown> | undefined\n): Record<string, string> {\n\tconst result: Record<string, string> = {}\n\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\tfor (const key in obj) {\n\t\tconst value = obj[key]\n\t\tresult[key] =\n\t\t\tvalue === null\n\t\t\t\t? \"null\"\n\t\t\t\t: typeof value === \"object\"\n\t\t\t\t\t? JSON.stringify(value)\n\t\t\t\t\t: String(value)\n\t}\n\n\treturn result\n}\n\n/**\n * Removes empty values (undefined, null, empty strings) from an object\n *\n * @param obj - The object to prune\n * @returns A new object with empty values removed\n */\nexport function pruneEmpty<T extends Record<string, unknown>>(\n\tobj: T | undefined\n): Partial<T> {\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\treturn Object.entries(obj).reduce(\n\t\t(acc, [key, value]) => {\n\t\t\t// Skip undefined, null, and empty strings\n\t\t\tif (value === undefined || value === null || value === \"\") {\n\t\t\t\treturn acc\n\t\t\t}\n\t\t\t// Avoid spread syntax on accumulator\n\t\t\tacc[key as keyof T] = value as any\n\t\t\treturn acc\n\t\t},\n\t\t{} as Partial<T>\n\t)\n}\n","import { remark } from \"remark\"\nimport strip from \"strip-markdown\"\n\n/**\n * Strips markdown from a string\n * @param markdown - The markdown string to strip\n * @returns The stripped markdown string\n */\nexport async function stripMarkdown(markdown: string) {\n\tconst file = await remark().use(strip).process(markdown)\n\treturn String(file)\n}\n","/**\n * Truncates a given string to a specified length, adding an ellipsis if the\n * string is longer than the specified length.\n *\n * @param {string} str - The string to truncate.\n * @param {number} length - The maximum length of the resulting string.\n *\n * @returns {string} The truncated string.\n */\nexport function truncate(str: string, length: number) {\n\treturn str.length > length ? `${str.slice(0, length)}...` : str\n}\n","/**\n * Get the agent application URL for webhooks and callbacks\n *\n * This function constructs the URL for the main agent application, used primarily\n * for QStash webhooks and external callbacks. It supports multiple deployment\n * environments with fallback logic.\n *\n * @param path - Optional path to append to the base URL (leading slashes are normalized)\n * @returns The complete URL for the agent application\n *\n * @example\n * ```typescript\n * // Get base URL\n * getUrl() // \"http://localhost:8454/\"\n *\n * // Get URL with path\n * getUrl(\"/qstash/webhook\") // \"http://localhost:8454/qstash/webhook\"\n * getUrl(\"api/health\") // \"http://localhost:8454/api/health\"\n * ```\n *\n * @remarks\n * URL resolution priority:\n * 1. `AGENT_URL` environment variable (custom deployment)\n * 2. `RAILWAY_PUBLIC_DOMAIN` environment variable (Railway deployment)\n * 3. `http://localhost:8454/` (default)\n */\nexport function getUrl(path = \"\") {\n\tconst trimmedPath = path.replace(/^\\/+/, \"\")\n\n\tif (process.env.AGENT_URL) {\n\t\treturn `https://${process.env.AGENT_URL}/${trimmedPath}`\n\t}\n\n\tif (process.env.RAILWAY_PUBLIC_DOMAIN) {\n\t\treturn `https://${process.env.RAILWAY_PUBLIC_DOMAIN}/${trimmedPath}`\n\t}\n\n\treturn `https://localhost:8454/${trimmedPath}`\n}\n","import { v4 as uuidv4 } from \"uuid\";\n\n// The node:crypto version is not supported in the browser.\n// Use the uuid package instead.\nexport function randomUUID(): string {\n\treturn uuidv4();\n}\n"],"mappings":"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","names":["fs","strip","uuidv4"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/array.ts","../src/lib/cloudflare.ts","../src/lib/storage.ts","../src/lib/date.ts","../src/lib/object.ts","../src/lib/markdown.ts","../src/lib/string.ts","../src/lib/urls.ts","../src/lib/uuid.ts","../src/lib/logger.ts"],"sourcesContent":["export * from \"./lib/array\"\nexport * from \"./lib/cloudflare\"\nexport * from \"./lib/storage\"\nexport * from \"./lib/date\"\nexport * from \"./lib/object\"\nexport * from \"./lib/markdown\"\nexport * from \"./lib/string\"\nexport * from \"./lib/urls\"\nexport * from \"./lib/uuid\"\nexport * from \"./lib/logger\"\n","/**\n * Splits an array into chunks of specified size.\n *\n * @template T - The type of the array elements.\n * @param {T[]} arr - The array to split into chunks.\n * @param {number} size - The maximum number of elements per chunk.\n * @returns {T[][]} An array of chunks, where each chunk is an array of T.\n */\nexport function chunk<T>(arr: T[], size: number): T[][] {\n\treturn Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n\t\tarr.slice(i * size, i * size + size)\n\t)\n}\n\n/**\n * Returns a new array with only unique elements from the input array.\n *\n * @template T - The type of the array elements.\n * @param {T[]} array - The array from which to remove duplicate elements.\n * @returns {T[]} A new array containing only unique elements.\n */\nexport function uniq<T>(array: T[]): T[] {\n\treturn array.filter((item, index, self) => self.indexOf(item) === index)\n}\n\n/**\n * Randomly shuffles the elements of an array.\n *\n * @param {any[] | undefined} array - The array to shuffle. If undefined, returns an empty array.\n * @returns {any[]} A shuffled copy of the input array.\n */\nexport function shuffle(array: any[] | undefined) {\n\tif (!array) return []\n\treturn array.sort(() => Math.random() - 0.5)\n}\n","/**\n * Cloudflare environment detection and storage utilities\n */\n\ndeclare const process: {\n env: Record<string, string | undefined>\n cwd(): string\n}\n\nexport interface CloudflareEnvironment {\n isCloudflare: boolean\n platform: 'pages' | 'workers' | 'local'\n storagePath: string\n}\n\n/**\n * Detects if running in Cloudflare environment and returns appropriate storage configuration\n */\nexport function getCloudflareEnvironment(): CloudflareEnvironment {\n if (process.env.CF_PAGES_BRANCH) {\n return {\n isCloudflare: true,\n platform: 'pages',\n storagePath: '/tmp'\n }\n }\n\n if (process.env.CF_WORKER_NAME) {\n return {\n isCloudflare: true,\n platform: 'workers',\n storagePath: '/tmp'\n }\n }\n\n return {\n isCloudflare: false,\n platform: 'local',\n storagePath: process.env.PROJECT_ROOT || process.cwd()\n }\n}\n\n/**\n * Gets the appropriate storage path for the current environment\n * @param subPath - Optional subdirectory within the storage path\n */\nexport function getCloudflareStoragePath(subPath?: string): string {\n const env = getCloudflareEnvironment()\n \n if (env.isCloudflare) {\n return subPath ? `/tmp/${subPath}` : '/tmp'\n }\n\n const basePath = env.storagePath\n const dataPath = subPath ? `${basePath}/.data/${subPath}` : `${basePath}/.data`\n \n return dataPath\n}\n\n/**\n * Gets service URL based on Cloudflare environment variables\n */\nexport function getCloudflareServiceUrl(fallbackPort = 3000): string {\n if (process.env.CF_PAGES_URL) {\n return process.env.CF_PAGES_URL\n }\n\n if (process.env.CF_WORKER_URL) {\n return process.env.CF_WORKER_URL\n }\n\n // Local development fallback\n return `http://localhost:${fallbackPort}`\n}\n","import fs from \"node:fs/promises\"\n\nexport interface StorageAdapter {\n uploadFile(localPath: string, remotePath: string): Promise<void>\n downloadFile(remotePath: string, localPath: string): Promise<void>\n exists(remotePath: string): Promise<boolean>\n delete(remotePath: string): Promise<void>\n}\n\nexport class R2StorageAdapter implements StorageAdapter {\n constructor(private bucket: any) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n const fileData = await fs.readFile(localPath)\n await this.bucket.put(remotePath, fileData)\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n const object = await this.bucket.get(remotePath)\n if (object) {\n await fs.writeFile(localPath, await object.arrayBuffer())\n }\n }\n \n async exists(remotePath: string): Promise<boolean> {\n const object = await this.bucket.head(remotePath)\n return object !== null\n }\n \n async delete(remotePath: string): Promise<void> {\n await this.bucket.delete(remotePath)\n }\n}\n\nexport class ExternalDatabaseAdapter implements StorageAdapter {\n constructor(private connectionString: string) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async exists(remotePath: string): Promise<boolean> {\n return false\n }\n \n async delete(remotePath: string): Promise<void> {\n }\n}\n\nexport function createStorageAdapter(): StorageAdapter | null {\n if (typeof globalThis !== 'undefined' && 'XMTP_STORAGE' in globalThis) {\n return new R2StorageAdapter((globalThis as any).XMTP_STORAGE)\n }\n \n if (typeof process !== 'undefined' && process.env?.DATABASE_URL) {\n return new ExternalDatabaseAdapter(process.env.DATABASE_URL)\n }\n \n return null\n}\n","import { format, isToday, isYesterday } from \"date-fns\";\n\n/**\n * Formats a date string or Date object into a localized date string\n * @param stringOrDate - Date string or Date object to format\n * @returns Formatted date string (e.g., \"Jan 1, 2024\") or empty string if no input\n */\nexport function formatDate(stringOrDate?: string | Date): string {\n\tif (!stringOrDate) return \"\";\n\n\tconst date = new Date(stringOrDate);\n\n\treturn date.toLocaleDateString(undefined, {\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}\n\n/**\n * Formats a date relative to the current time\n * @param date - Date object to format\n * @returns Formatted string with relative time:\n * - \"Today, [time]\" for today's dates\n * - \"Yesterday, [time]\" for yesterday's dates\n * - \"MMM d, h:mm a\" for dates in current year\n * - \"MMM d, yyyy\" for dates in other years\n */\nexport function formatRelativeDate(date: Date) {\n\tif (isToday(date)) {\n\t\treturn `Today, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (isYesterday(date)) {\n\t\treturn `Yesterday, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (new Date().getFullYear() === date.getFullYear()) {\n\t\treturn format(date, \"MMM d, h:mm a\");\n\t}\n\treturn format(date, \"MMM d, yyyy\");\n}\n","/**\n * Stringifies all values in an object, including objects and null values.\n * If obj is undefined, returns an empty object.\n * @param obj - The object to stringify\n * @returns A new object with the same keys as obj, but with all values stringified\n */\nexport function stringifyValues(\n\tobj: Record<string, unknown> | undefined\n): Record<string, string> {\n\tconst result: Record<string, string> = {}\n\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\tfor (const key in obj) {\n\t\tconst value = obj[key]\n\t\tresult[key] =\n\t\t\tvalue === null\n\t\t\t\t? \"null\"\n\t\t\t\t: typeof value === \"object\"\n\t\t\t\t\t? JSON.stringify(value)\n\t\t\t\t\t: String(value)\n\t}\n\n\treturn result\n}\n\n/**\n * Removes empty values (undefined, null, empty strings) from an object\n *\n * @param obj - The object to prune\n * @returns A new object with empty values removed\n */\nexport function pruneEmpty<T extends Record<string, unknown>>(\n\tobj: T | undefined\n): Partial<T> {\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\treturn Object.entries(obj).reduce(\n\t\t(acc, [key, value]) => {\n\t\t\t// Skip undefined, null, and empty strings\n\t\t\tif (value === undefined || value === null || value === \"\") {\n\t\t\t\treturn acc\n\t\t\t}\n\t\t\t// Avoid spread syntax on accumulator\n\t\t\tacc[key as keyof T] = value as any\n\t\t\treturn acc\n\t\t},\n\t\t{} as Partial<T>\n\t)\n}\n","import { remark } from \"remark\"\nimport strip from \"strip-markdown\"\n\n/**\n * Strips markdown from a string\n * @param markdown - The markdown string to strip\n * @returns The stripped markdown string\n */\nexport async function stripMarkdown(markdown: string) {\n\tconst file = await remark().use(strip).process(markdown)\n\treturn String(file)\n}\n","/**\n * Truncates a given string to a specified length, adding an ellipsis if the\n * string is longer than the specified length.\n *\n * @param {string} str - The string to truncate.\n * @param {number} length - The maximum length of the resulting string.\n *\n * @returns {string} The truncated string.\n */\nexport function truncate(str: string, length: number) {\n\treturn str.length > length ? `${str.slice(0, length)}...` : str\n}\n","/**\n * Get the agent application URL for webhooks and callbacks\n *\n * This function constructs the URL for the main agent application, used primarily\n * for QStash webhooks and external callbacks. It supports multiple deployment\n * environments with fallback logic.\n *\n * @param path - Optional path to append to the base URL (leading slashes are normalized)\n * @returns The complete URL for the agent application\n *\n * @example\n * ```typescript\n * // Get base URL\n * getUrl() // \"http://localhost:8454/\"\n *\n * // Get URL with path\n * getUrl(\"/qstash/webhook\") // \"http://localhost:8454/qstash/webhook\"\n * getUrl(\"api/health\") // \"http://localhost:8454/api/health\"\n * ```\n *\n * @remarks\n * URL resolution priority:\n * 1. `AGENT_URL` environment variable (custom deployment)\n * 2. `RAILWAY_PUBLIC_DOMAIN` environment variable (Railway deployment)\n * 3. `http://localhost:8454/` (default)\n */\nexport function getUrl(path = \"\") {\n\tconst trimmedPath = path.replace(/^\\/+/, \"\")\n\n\tif (process.env.AGENT_URL) {\n\t\treturn `https://${process.env.AGENT_URL}/${trimmedPath}`\n\t}\n\n\tif (process.env.RAILWAY_PUBLIC_DOMAIN) {\n\t\treturn `https://${process.env.RAILWAY_PUBLIC_DOMAIN}/${trimmedPath}`\n\t}\n\n\treturn `https://localhost:8454/${trimmedPath}`\n}\n","import { v4 as uuidv4 } from \"uuid\";\n\n// The node:crypto version is not supported in the browser.\n// Use the uuid package instead.\nexport function randomUUID(): string {\n\treturn uuidv4();\n}\n","/**\n * Global logger instance for conditional debug logging\n * Supports both DEBUG and XMTP_DEBUG environment variables for backward compatibility\n * Compatible with common logger interfaces\n */\nexport const logger = {\n\tdebug: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.log(message, ...args)\n\t\t}\n\t},\n\tlog: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.log(message, ...args)\n\t\t}\n\t},\n\tinfo: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.info(message, ...args)\n\t\t}\n\t},\n\twarn: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.warn(message, ...args)\n\t\t}\n\t},\n\terror: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.error(message, ...args)\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["fs","strip","uuidv4"]}
package/dist/index.d.cts CHANGED
@@ -149,4 +149,17 @@ declare function getUrl(path?: string): string;
149
149
 
150
150
  declare function randomUUID(): string;
151
151
 
152
- export { type CloudflareEnvironment, ExternalDatabaseAdapter, R2StorageAdapter, type StorageAdapter, chunk, createStorageAdapter, formatDate, formatRelativeDate, getCloudflareEnvironment, getCloudflareServiceUrl, getCloudflareStoragePath, getUrl, pruneEmpty, randomUUID, shuffle, stringifyValues, stripMarkdown, truncate, uniq };
152
+ /**
153
+ * Global logger instance for conditional debug logging
154
+ * Supports both DEBUG and XMTP_DEBUG environment variables for backward compatibility
155
+ * Compatible with common logger interfaces
156
+ */
157
+ declare const logger: {
158
+ debug: (message: string, ...args: any[]) => void;
159
+ log: (message: string, ...args: any[]) => void;
160
+ info: (message: string, ...args: any[]) => void;
161
+ warn: (message: string, ...args: any[]) => void;
162
+ error: (message: string, ...args: any[]) => void;
163
+ };
164
+
165
+ export { type CloudflareEnvironment, ExternalDatabaseAdapter, R2StorageAdapter, type StorageAdapter, chunk, createStorageAdapter, formatDate, formatRelativeDate, getCloudflareEnvironment, getCloudflareServiceUrl, getCloudflareStoragePath, getUrl, logger, pruneEmpty, randomUUID, shuffle, stringifyValues, stripMarkdown, truncate, uniq };
package/dist/index.d.ts CHANGED
@@ -149,4 +149,17 @@ declare function getUrl(path?: string): string;
149
149
 
150
150
  declare function randomUUID(): string;
151
151
 
152
- export { type CloudflareEnvironment, ExternalDatabaseAdapter, R2StorageAdapter, type StorageAdapter, chunk, createStorageAdapter, formatDate, formatRelativeDate, getCloudflareEnvironment, getCloudflareServiceUrl, getCloudflareStoragePath, getUrl, pruneEmpty, randomUUID, shuffle, stringifyValues, stripMarkdown, truncate, uniq };
152
+ /**
153
+ * Global logger instance for conditional debug logging
154
+ * Supports both DEBUG and XMTP_DEBUG environment variables for backward compatibility
155
+ * Compatible with common logger interfaces
156
+ */
157
+ declare const logger: {
158
+ debug: (message: string, ...args: any[]) => void;
159
+ log: (message: string, ...args: any[]) => void;
160
+ info: (message: string, ...args: any[]) => void;
161
+ warn: (message: string, ...args: any[]) => void;
162
+ error: (message: string, ...args: any[]) => void;
163
+ };
164
+
165
+ export { type CloudflareEnvironment, ExternalDatabaseAdapter, R2StorageAdapter, type StorageAdapter, chunk, createStorageAdapter, formatDate, formatRelativeDate, getCloudflareEnvironment, getCloudflareServiceUrl, getCloudflareStoragePath, getUrl, logger, pruneEmpty, randomUUID, shuffle, stringifyValues, stripMarkdown, truncate, uniq };
package/dist/index.js CHANGED
@@ -186,6 +186,35 @@ import { v4 as uuidv4 } from "uuid";
186
186
  function randomUUID() {
187
187
  return uuidv4();
188
188
  }
189
+
190
+ // src/lib/logger.ts
191
+ var logger = {
192
+ debug: (message, ...args) => {
193
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
194
+ console.log(message, ...args);
195
+ }
196
+ },
197
+ log: (message, ...args) => {
198
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
199
+ console.log(message, ...args);
200
+ }
201
+ },
202
+ info: (message, ...args) => {
203
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
204
+ console.info(message, ...args);
205
+ }
206
+ },
207
+ warn: (message, ...args) => {
208
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
209
+ console.warn(message, ...args);
210
+ }
211
+ },
212
+ error: (message, ...args) => {
213
+ if (typeof process !== "undefined" && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
214
+ console.error(message, ...args);
215
+ }
216
+ }
217
+ };
189
218
  export {
190
219
  ExternalDatabaseAdapter,
191
220
  R2StorageAdapter,
@@ -197,6 +226,7 @@ export {
197
226
  getCloudflareServiceUrl,
198
227
  getCloudflareStoragePath,
199
228
  getUrl,
229
+ logger,
200
230
  pruneEmpty,
201
231
  randomUUID,
202
232
  shuffle,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/array.ts","../src/lib/cloudflare.ts","../src/lib/storage.ts","../src/lib/date.ts","../src/lib/object.ts","../src/lib/markdown.ts","../src/lib/string.ts","../src/lib/urls.ts","../src/lib/uuid.ts"],"sourcesContent":["/**\n * Splits an array into chunks of specified size.\n *\n * @template T - The type of the array elements.\n * @param {T[]} arr - The array to split into chunks.\n * @param {number} size - The maximum number of elements per chunk.\n * @returns {T[][]} An array of chunks, where each chunk is an array of T.\n */\nexport function chunk<T>(arr: T[], size: number): T[][] {\n\treturn Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n\t\tarr.slice(i * size, i * size + size)\n\t)\n}\n\n/**\n * Returns a new array with only unique elements from the input array.\n *\n * @template T - The type of the array elements.\n * @param {T[]} array - The array from which to remove duplicate elements.\n * @returns {T[]} A new array containing only unique elements.\n */\nexport function uniq<T>(array: T[]): T[] {\n\treturn array.filter((item, index, self) => self.indexOf(item) === index)\n}\n\n/**\n * Randomly shuffles the elements of an array.\n *\n * @param {any[] | undefined} array - The array to shuffle. If undefined, returns an empty array.\n * @returns {any[]} A shuffled copy of the input array.\n */\nexport function shuffle(array: any[] | undefined) {\n\tif (!array) return []\n\treturn array.sort(() => Math.random() - 0.5)\n}\n","/**\n * Cloudflare environment detection and storage utilities\n */\n\ndeclare const process: {\n env: Record<string, string | undefined>\n cwd(): string\n}\n\nexport interface CloudflareEnvironment {\n isCloudflare: boolean\n platform: 'pages' | 'workers' | 'local'\n storagePath: string\n}\n\n/**\n * Detects if running in Cloudflare environment and returns appropriate storage configuration\n */\nexport function getCloudflareEnvironment(): CloudflareEnvironment {\n if (process.env.CF_PAGES_BRANCH) {\n return {\n isCloudflare: true,\n platform: 'pages',\n storagePath: '/tmp'\n }\n }\n\n if (process.env.CF_WORKER_NAME) {\n return {\n isCloudflare: true,\n platform: 'workers',\n storagePath: '/tmp'\n }\n }\n\n return {\n isCloudflare: false,\n platform: 'local',\n storagePath: process.env.PROJECT_ROOT || process.cwd()\n }\n}\n\n/**\n * Gets the appropriate storage path for the current environment\n * @param subPath - Optional subdirectory within the storage path\n */\nexport function getCloudflareStoragePath(subPath?: string): string {\n const env = getCloudflareEnvironment()\n \n if (env.isCloudflare) {\n return subPath ? `/tmp/${subPath}` : '/tmp'\n }\n\n const basePath = env.storagePath\n const dataPath = subPath ? `${basePath}/.data/${subPath}` : `${basePath}/.data`\n \n return dataPath\n}\n\n/**\n * Gets service URL based on Cloudflare environment variables\n */\nexport function getCloudflareServiceUrl(fallbackPort = 3000): string {\n if (process.env.CF_PAGES_URL) {\n return process.env.CF_PAGES_URL\n }\n\n if (process.env.CF_WORKER_URL) {\n return process.env.CF_WORKER_URL\n }\n\n // Local development fallback\n return `http://localhost:${fallbackPort}`\n}\n","import fs from \"node:fs/promises\"\n\nexport interface StorageAdapter {\n uploadFile(localPath: string, remotePath: string): Promise<void>\n downloadFile(remotePath: string, localPath: string): Promise<void>\n exists(remotePath: string): Promise<boolean>\n delete(remotePath: string): Promise<void>\n}\n\nexport class R2StorageAdapter implements StorageAdapter {\n constructor(private bucket: any) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n const fileData = await fs.readFile(localPath)\n await this.bucket.put(remotePath, fileData)\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n const object = await this.bucket.get(remotePath)\n if (object) {\n await fs.writeFile(localPath, await object.arrayBuffer())\n }\n }\n \n async exists(remotePath: string): Promise<boolean> {\n const object = await this.bucket.head(remotePath)\n return object !== null\n }\n \n async delete(remotePath: string): Promise<void> {\n await this.bucket.delete(remotePath)\n }\n}\n\nexport class ExternalDatabaseAdapter implements StorageAdapter {\n constructor(private connectionString: string) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async exists(remotePath: string): Promise<boolean> {\n return false\n }\n \n async delete(remotePath: string): Promise<void> {\n }\n}\n\nexport function createStorageAdapter(): StorageAdapter | null {\n if (typeof globalThis !== 'undefined' && 'XMTP_STORAGE' in globalThis) {\n return new R2StorageAdapter((globalThis as any).XMTP_STORAGE)\n }\n \n if (typeof process !== 'undefined' && process.env?.DATABASE_URL) {\n return new ExternalDatabaseAdapter(process.env.DATABASE_URL)\n }\n \n return null\n}\n","import { format, isToday, isYesterday } from \"date-fns\";\n\n/**\n * Formats a date string or Date object into a localized date string\n * @param stringOrDate - Date string or Date object to format\n * @returns Formatted date string (e.g., \"Jan 1, 2024\") or empty string if no input\n */\nexport function formatDate(stringOrDate?: string | Date): string {\n\tif (!stringOrDate) return \"\";\n\n\tconst date = new Date(stringOrDate);\n\n\treturn date.toLocaleDateString(undefined, {\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}\n\n/**\n * Formats a date relative to the current time\n * @param date - Date object to format\n * @returns Formatted string with relative time:\n * - \"Today, [time]\" for today's dates\n * - \"Yesterday, [time]\" for yesterday's dates\n * - \"MMM d, h:mm a\" for dates in current year\n * - \"MMM d, yyyy\" for dates in other years\n */\nexport function formatRelativeDate(date: Date) {\n\tif (isToday(date)) {\n\t\treturn `Today, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (isYesterday(date)) {\n\t\treturn `Yesterday, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (new Date().getFullYear() === date.getFullYear()) {\n\t\treturn format(date, \"MMM d, h:mm a\");\n\t}\n\treturn format(date, \"MMM d, yyyy\");\n}\n","/**\n * Stringifies all values in an object, including objects and null values.\n * If obj is undefined, returns an empty object.\n * @param obj - The object to stringify\n * @returns A new object with the same keys as obj, but with all values stringified\n */\nexport function stringifyValues(\n\tobj: Record<string, unknown> | undefined\n): Record<string, string> {\n\tconst result: Record<string, string> = {}\n\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\tfor (const key in obj) {\n\t\tconst value = obj[key]\n\t\tresult[key] =\n\t\t\tvalue === null\n\t\t\t\t? \"null\"\n\t\t\t\t: typeof value === \"object\"\n\t\t\t\t\t? JSON.stringify(value)\n\t\t\t\t\t: String(value)\n\t}\n\n\treturn result\n}\n\n/**\n * Removes empty values (undefined, null, empty strings) from an object\n *\n * @param obj - The object to prune\n * @returns A new object with empty values removed\n */\nexport function pruneEmpty<T extends Record<string, unknown>>(\n\tobj: T | undefined\n): Partial<T> {\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\treturn Object.entries(obj).reduce(\n\t\t(acc, [key, value]) => {\n\t\t\t// Skip undefined, null, and empty strings\n\t\t\tif (value === undefined || value === null || value === \"\") {\n\t\t\t\treturn acc\n\t\t\t}\n\t\t\t// Avoid spread syntax on accumulator\n\t\t\tacc[key as keyof T] = value as any\n\t\t\treturn acc\n\t\t},\n\t\t{} as Partial<T>\n\t)\n}\n","import { remark } from \"remark\"\nimport strip from \"strip-markdown\"\n\n/**\n * Strips markdown from a string\n * @param markdown - The markdown string to strip\n * @returns The stripped markdown string\n */\nexport async function stripMarkdown(markdown: string) {\n\tconst file = await remark().use(strip).process(markdown)\n\treturn String(file)\n}\n","/**\n * Truncates a given string to a specified length, adding an ellipsis if the\n * string is longer than the specified length.\n *\n * @param {string} str - The string to truncate.\n * @param {number} length - The maximum length of the resulting string.\n *\n * @returns {string} The truncated string.\n */\nexport function truncate(str: string, length: number) {\n\treturn str.length > length ? `${str.slice(0, length)}...` : str\n}\n","/**\n * Get the agent application URL for webhooks and callbacks\n *\n * This function constructs the URL for the main agent application, used primarily\n * for QStash webhooks and external callbacks. It supports multiple deployment\n * environments with fallback logic.\n *\n * @param path - Optional path to append to the base URL (leading slashes are normalized)\n * @returns The complete URL for the agent application\n *\n * @example\n * ```typescript\n * // Get base URL\n * getUrl() // \"http://localhost:8454/\"\n *\n * // Get URL with path\n * getUrl(\"/qstash/webhook\") // \"http://localhost:8454/qstash/webhook\"\n * getUrl(\"api/health\") // \"http://localhost:8454/api/health\"\n * ```\n *\n * @remarks\n * URL resolution priority:\n * 1. `AGENT_URL` environment variable (custom deployment)\n * 2. `RAILWAY_PUBLIC_DOMAIN` environment variable (Railway deployment)\n * 3. `http://localhost:8454/` (default)\n */\nexport function getUrl(path = \"\") {\n\tconst trimmedPath = path.replace(/^\\/+/, \"\")\n\n\tif (process.env.AGENT_URL) {\n\t\treturn `https://${process.env.AGENT_URL}/${trimmedPath}`\n\t}\n\n\tif (process.env.RAILWAY_PUBLIC_DOMAIN) {\n\t\treturn `https://${process.env.RAILWAY_PUBLIC_DOMAIN}/${trimmedPath}`\n\t}\n\n\treturn `https://localhost:8454/${trimmedPath}`\n}\n","import { v4 as uuidv4 } from \"uuid\";\n\n// The node:crypto version is not supported in the browser.\n// Use the uuid package instead.\nexport function randomUUID(): string {\n\treturn uuidv4();\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/lib/array.ts","../src/lib/cloudflare.ts","../src/lib/storage.ts","../src/lib/date.ts","../src/lib/object.ts","../src/lib/markdown.ts","../src/lib/string.ts","../src/lib/urls.ts","../src/lib/uuid.ts","../src/lib/logger.ts"],"sourcesContent":["/**\n * Splits an array into chunks of specified size.\n *\n * @template T - The type of the array elements.\n * @param {T[]} arr - The array to split into chunks.\n * @param {number} size - The maximum number of elements per chunk.\n * @returns {T[][]} An array of chunks, where each chunk is an array of T.\n */\nexport function chunk<T>(arr: T[], size: number): T[][] {\n\treturn Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n\t\tarr.slice(i * size, i * size + size)\n\t)\n}\n\n/**\n * Returns a new array with only unique elements from the input array.\n *\n * @template T - The type of the array elements.\n * @param {T[]} array - The array from which to remove duplicate elements.\n * @returns {T[]} A new array containing only unique elements.\n */\nexport function uniq<T>(array: T[]): T[] {\n\treturn array.filter((item, index, self) => self.indexOf(item) === index)\n}\n\n/**\n * Randomly shuffles the elements of an array.\n *\n * @param {any[] | undefined} array - The array to shuffle. If undefined, returns an empty array.\n * @returns {any[]} A shuffled copy of the input array.\n */\nexport function shuffle(array: any[] | undefined) {\n\tif (!array) return []\n\treturn array.sort(() => Math.random() - 0.5)\n}\n","/**\n * Cloudflare environment detection and storage utilities\n */\n\ndeclare const process: {\n env: Record<string, string | undefined>\n cwd(): string\n}\n\nexport interface CloudflareEnvironment {\n isCloudflare: boolean\n platform: 'pages' | 'workers' | 'local'\n storagePath: string\n}\n\n/**\n * Detects if running in Cloudflare environment and returns appropriate storage configuration\n */\nexport function getCloudflareEnvironment(): CloudflareEnvironment {\n if (process.env.CF_PAGES_BRANCH) {\n return {\n isCloudflare: true,\n platform: 'pages',\n storagePath: '/tmp'\n }\n }\n\n if (process.env.CF_WORKER_NAME) {\n return {\n isCloudflare: true,\n platform: 'workers',\n storagePath: '/tmp'\n }\n }\n\n return {\n isCloudflare: false,\n platform: 'local',\n storagePath: process.env.PROJECT_ROOT || process.cwd()\n }\n}\n\n/**\n * Gets the appropriate storage path for the current environment\n * @param subPath - Optional subdirectory within the storage path\n */\nexport function getCloudflareStoragePath(subPath?: string): string {\n const env = getCloudflareEnvironment()\n \n if (env.isCloudflare) {\n return subPath ? `/tmp/${subPath}` : '/tmp'\n }\n\n const basePath = env.storagePath\n const dataPath = subPath ? `${basePath}/.data/${subPath}` : `${basePath}/.data`\n \n return dataPath\n}\n\n/**\n * Gets service URL based on Cloudflare environment variables\n */\nexport function getCloudflareServiceUrl(fallbackPort = 3000): string {\n if (process.env.CF_PAGES_URL) {\n return process.env.CF_PAGES_URL\n }\n\n if (process.env.CF_WORKER_URL) {\n return process.env.CF_WORKER_URL\n }\n\n // Local development fallback\n return `http://localhost:${fallbackPort}`\n}\n","import fs from \"node:fs/promises\"\n\nexport interface StorageAdapter {\n uploadFile(localPath: string, remotePath: string): Promise<void>\n downloadFile(remotePath: string, localPath: string): Promise<void>\n exists(remotePath: string): Promise<boolean>\n delete(remotePath: string): Promise<void>\n}\n\nexport class R2StorageAdapter implements StorageAdapter {\n constructor(private bucket: any) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n const fileData = await fs.readFile(localPath)\n await this.bucket.put(remotePath, fileData)\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n const object = await this.bucket.get(remotePath)\n if (object) {\n await fs.writeFile(localPath, await object.arrayBuffer())\n }\n }\n \n async exists(remotePath: string): Promise<boolean> {\n const object = await this.bucket.head(remotePath)\n return object !== null\n }\n \n async delete(remotePath: string): Promise<void> {\n await this.bucket.delete(remotePath)\n }\n}\n\nexport class ExternalDatabaseAdapter implements StorageAdapter {\n constructor(private connectionString: string) {}\n \n async uploadFile(localPath: string, remotePath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async downloadFile(remotePath: string, localPath: string): Promise<void> {\n throw new Error('External database storage not yet implemented')\n }\n \n async exists(remotePath: string): Promise<boolean> {\n return false\n }\n \n async delete(remotePath: string): Promise<void> {\n }\n}\n\nexport function createStorageAdapter(): StorageAdapter | null {\n if (typeof globalThis !== 'undefined' && 'XMTP_STORAGE' in globalThis) {\n return new R2StorageAdapter((globalThis as any).XMTP_STORAGE)\n }\n \n if (typeof process !== 'undefined' && process.env?.DATABASE_URL) {\n return new ExternalDatabaseAdapter(process.env.DATABASE_URL)\n }\n \n return null\n}\n","import { format, isToday, isYesterday } from \"date-fns\";\n\n/**\n * Formats a date string or Date object into a localized date string\n * @param stringOrDate - Date string or Date object to format\n * @returns Formatted date string (e.g., \"Jan 1, 2024\") or empty string if no input\n */\nexport function formatDate(stringOrDate?: string | Date): string {\n\tif (!stringOrDate) return \"\";\n\n\tconst date = new Date(stringOrDate);\n\n\treturn date.toLocaleDateString(undefined, {\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}\n\n/**\n * Formats a date relative to the current time\n * @param date - Date object to format\n * @returns Formatted string with relative time:\n * - \"Today, [time]\" for today's dates\n * - \"Yesterday, [time]\" for yesterday's dates\n * - \"MMM d, h:mm a\" for dates in current year\n * - \"MMM d, yyyy\" for dates in other years\n */\nexport function formatRelativeDate(date: Date) {\n\tif (isToday(date)) {\n\t\treturn `Today, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (isYesterday(date)) {\n\t\treturn `Yesterday, ${format(date, \"h:mm a\")}`;\n\t}\n\tif (new Date().getFullYear() === date.getFullYear()) {\n\t\treturn format(date, \"MMM d, h:mm a\");\n\t}\n\treturn format(date, \"MMM d, yyyy\");\n}\n","/**\n * Stringifies all values in an object, including objects and null values.\n * If obj is undefined, returns an empty object.\n * @param obj - The object to stringify\n * @returns A new object with the same keys as obj, but with all values stringified\n */\nexport function stringifyValues(\n\tobj: Record<string, unknown> | undefined\n): Record<string, string> {\n\tconst result: Record<string, string> = {}\n\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\tfor (const key in obj) {\n\t\tconst value = obj[key]\n\t\tresult[key] =\n\t\t\tvalue === null\n\t\t\t\t? \"null\"\n\t\t\t\t: typeof value === \"object\"\n\t\t\t\t\t? JSON.stringify(value)\n\t\t\t\t\t: String(value)\n\t}\n\n\treturn result\n}\n\n/**\n * Removes empty values (undefined, null, empty strings) from an object\n *\n * @param obj - The object to prune\n * @returns A new object with empty values removed\n */\nexport function pruneEmpty<T extends Record<string, unknown>>(\n\tobj: T | undefined\n): Partial<T> {\n\tif (!obj) {\n\t\treturn {}\n\t}\n\n\treturn Object.entries(obj).reduce(\n\t\t(acc, [key, value]) => {\n\t\t\t// Skip undefined, null, and empty strings\n\t\t\tif (value === undefined || value === null || value === \"\") {\n\t\t\t\treturn acc\n\t\t\t}\n\t\t\t// Avoid spread syntax on accumulator\n\t\t\tacc[key as keyof T] = value as any\n\t\t\treturn acc\n\t\t},\n\t\t{} as Partial<T>\n\t)\n}\n","import { remark } from \"remark\"\nimport strip from \"strip-markdown\"\n\n/**\n * Strips markdown from a string\n * @param markdown - The markdown string to strip\n * @returns The stripped markdown string\n */\nexport async function stripMarkdown(markdown: string) {\n\tconst file = await remark().use(strip).process(markdown)\n\treturn String(file)\n}\n","/**\n * Truncates a given string to a specified length, adding an ellipsis if the\n * string is longer than the specified length.\n *\n * @param {string} str - The string to truncate.\n * @param {number} length - The maximum length of the resulting string.\n *\n * @returns {string} The truncated string.\n */\nexport function truncate(str: string, length: number) {\n\treturn str.length > length ? `${str.slice(0, length)}...` : str\n}\n","/**\n * Get the agent application URL for webhooks and callbacks\n *\n * This function constructs the URL for the main agent application, used primarily\n * for QStash webhooks and external callbacks. It supports multiple deployment\n * environments with fallback logic.\n *\n * @param path - Optional path to append to the base URL (leading slashes are normalized)\n * @returns The complete URL for the agent application\n *\n * @example\n * ```typescript\n * // Get base URL\n * getUrl() // \"http://localhost:8454/\"\n *\n * // Get URL with path\n * getUrl(\"/qstash/webhook\") // \"http://localhost:8454/qstash/webhook\"\n * getUrl(\"api/health\") // \"http://localhost:8454/api/health\"\n * ```\n *\n * @remarks\n * URL resolution priority:\n * 1. `AGENT_URL` environment variable (custom deployment)\n * 2. `RAILWAY_PUBLIC_DOMAIN` environment variable (Railway deployment)\n * 3. `http://localhost:8454/` (default)\n */\nexport function getUrl(path = \"\") {\n\tconst trimmedPath = path.replace(/^\\/+/, \"\")\n\n\tif (process.env.AGENT_URL) {\n\t\treturn `https://${process.env.AGENT_URL}/${trimmedPath}`\n\t}\n\n\tif (process.env.RAILWAY_PUBLIC_DOMAIN) {\n\t\treturn `https://${process.env.RAILWAY_PUBLIC_DOMAIN}/${trimmedPath}`\n\t}\n\n\treturn `https://localhost:8454/${trimmedPath}`\n}\n","import { v4 as uuidv4 } from \"uuid\";\n\n// The node:crypto version is not supported in the browser.\n// Use the uuid package instead.\nexport function randomUUID(): string {\n\treturn uuidv4();\n}\n","/**\n * Global logger instance for conditional debug logging\n * Supports both DEBUG and XMTP_DEBUG environment variables for backward compatibility\n * Compatible with common logger interfaces\n */\nexport const logger = {\n\tdebug: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.log(message, ...args)\n\t\t}\n\t},\n\tlog: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.log(message, ...args)\n\t\t}\n\t},\n\tinfo: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.info(message, ...args)\n\t\t}\n\t},\n\twarn: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.warn(message, ...args)\n\t\t}\n\t},\n\terror: (message: string, ...args: any[]): void => {\n\t\tif (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {\n\t\t\tconsole.error(message, ...args)\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@hybrd/utils",
3
- "version": "1.3.2",
3
+ "version": "1.4.0",
4
4
  "type": "module",
5
+ "files": [
6
+ "dist",
7
+ "src"
8
+ ],
5
9
  "exports": {
6
10
  ".": {
7
- "types": "./dist/index.d.ts",
11
+ "types": "./src/index.ts",
8
12
  "import": "./dist/index.js",
9
13
  "require": "./dist/index.cjs"
10
14
  }
@@ -19,8 +23,8 @@
19
23
  "devDependencies": {
20
24
  "@types/node": "22.8.6",
21
25
  "tsup": "^8.5.0",
22
- "@config/biome": "0.0.0",
23
- "@config/tsconfig": "0.0.0"
26
+ "@config/tsconfig": "0.0.0",
27
+ "@config/biome": "0.0.0"
24
28
  },
25
29
  "scripts": {
26
30
  "build": "tsup",
package/src/index.ts CHANGED
@@ -7,3 +7,4 @@ export * from "./lib/markdown"
7
7
  export * from "./lib/string"
8
8
  export * from "./lib/urls"
9
9
  export * from "./lib/uuid"
10
+ export * from "./lib/logger"
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Global logger instance for conditional debug logging
3
+ * Supports both DEBUG and XMTP_DEBUG environment variables for backward compatibility
4
+ * Compatible with common logger interfaces
5
+ */
6
+ export const logger = {
7
+ debug: (message: string, ...args: any[]): void => {
8
+ if (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
9
+ console.log(message, ...args)
10
+ }
11
+ },
12
+ log: (message: string, ...args: any[]): void => {
13
+ if (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
14
+ console.log(message, ...args)
15
+ }
16
+ },
17
+ info: (message: string, ...args: any[]): void => {
18
+ if (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
19
+ console.info(message, ...args)
20
+ }
21
+ },
22
+ warn: (message: string, ...args: any[]): void => {
23
+ if (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
24
+ console.warn(message, ...args)
25
+ }
26
+ },
27
+ error: (message: string, ...args: any[]): void => {
28
+ if (typeof process !== 'undefined' && (process.env?.DEBUG || process.env?.XMTP_DEBUG)) {
29
+ console.error(message, ...args)
30
+ }
31
+ }
32
+ }
@@ -1 +0,0 @@
1
- {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/lib/array.ts","../src/lib/cloudflare.ts","../src/lib/storage.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/types.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/fp/types.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/types.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/add.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addbusinessdays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/adddays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addhours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addisoweekyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addmilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addminutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addmonths.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addquarters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addweeks.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/areintervalsoverlapping.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/clamp.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/closestindexto.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/closestto.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/compareasc.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/comparedesc.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructfrom.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructnow.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/daystoweeks.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinbusinessdays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendardays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarisoweekyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarisoweeks.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarmonths.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarquarters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendarweeks.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceincalendaryears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceindays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinhours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinisoweekyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinmilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinminutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinmonths.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinquarters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinweeks.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceinyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachdayofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachhourofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachminuteofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachmonthofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachquarterofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachweekendofyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/eachyearofinterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofdecade.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofhour.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofisoweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofminute.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofquarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofsecond.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endoftoday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endoftomorrow.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/endofyesterday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/formatters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/longformatters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/format.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistance.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancestrict.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancetonow.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatdistancetonowstrict.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatduration.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatiso.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatiso9075.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatisoduration.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrfc3339.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrfc7231.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatrelative.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/fromunixtime.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdate.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdayofyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdaysinmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdaysinyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdecade.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/defaultoptions.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getdefaultoptions.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/gethours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getisoweeksinyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getmilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getminutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getoverlappingdaysinintervals.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getquarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/gettime.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getunixtime.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweekofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getweeksinmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstomilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstominutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/hourstoseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/interval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intervaltoduration.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intlformat.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/intlformatdistance.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isafter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isbefore.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isdate.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isequal.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isexists.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfirstdayofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfriday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isfuture.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/islastdayofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isleapyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ismatch.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ismonday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/ispast.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamehour.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameisoweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameminute.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamemonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamequarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issamesecond.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issameyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issaturday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/issunday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthishour.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisminute.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthismonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisquarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthissecond.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthisyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isthursday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istoday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istomorrow.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/istuesday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isvalid.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/iswednesday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isweekend.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/iswithininterval.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isyesterday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofdecade.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofisoweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofquarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lastdayofyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/lightformatters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/lightformat.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/max.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/milliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstohours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstominutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/millisecondstoseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/min.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestohours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestomilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/minutestoseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/monthstoquarters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/monthstoyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextfriday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextmonday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextsaturday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextsunday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextthursday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nexttuesday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/nextwednesday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/types.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/setter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parser.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse/_lib/parsers.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parse.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parseiso.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parsejson.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousfriday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousmonday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoussaturday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoussunday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previousthursday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previoustuesday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/previouswednesday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/quarterstomonths.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/quarterstoyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/roundtonearesthours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/roundtonearestminutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstohours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstomilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/secondstominutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/set.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdate.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdayofyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setdefaultoptions.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/sethours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setisoweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setmilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setminutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setquarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/setyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofdecade.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofhour.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofisoweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofisoweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofminute.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofmonth.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofquarter.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofsecond.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startoftoday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startoftomorrow.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofweek.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofweekyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofyear.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startofyesterday.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/sub.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subbusinessdays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subdays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subhours.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subisoweekyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/submilliseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subminutes.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/submonths.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subquarters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subseconds.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subweeks.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subyears.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/todate.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/transpose.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/weekstodays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstodays.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstomonths.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/yearstoquarters.d.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/index.d.cts","../src/lib/date.ts","../src/lib/object.ts","../../../node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts","../../../node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts","../../../node_modules/.pnpm/micromark-util-types@2.0.2/node_modules/micromark-util-types/index.d.ts","../../../node_modules/.pnpm/mdast-util-from-markdown@2.0.2/node_modules/mdast-util-from-markdown/lib/types.d.ts","../../../node_modules/.pnpm/mdast-util-from-markdown@2.0.2/node_modules/mdast-util-from-markdown/lib/index.d.ts","../../../node_modules/.pnpm/mdast-util-from-markdown@2.0.2/node_modules/mdast-util-from-markdown/index.d.ts","../../../node_modules/.pnpm/vfile-message@4.0.3/node_modules/vfile-message/lib/index.d.ts","../../../node_modules/.pnpm/vfile-message@4.0.3/node_modules/vfile-message/index.d.ts","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/index.d.ts","../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/index.d.ts","../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/callable-instance.d.ts","../../../node_modules/.pnpm/trough@2.2.0/node_modules/trough/lib/index.d.ts","../../../node_modules/.pnpm/trough@2.2.0/node_modules/trough/index.d.ts","../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.d.ts","../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/index.d.ts","../../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.d.ts","../../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/index.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/types.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/index.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/blockquote.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/break.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/code.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/definition.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/emphasis.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/heading.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/html.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/image.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/image-reference.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/inline-code.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/link.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/link-reference.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/list.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/list-item.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/paragraph.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/root.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/strong.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/text.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/thematic-break.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/index.d.ts","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/index.d.ts","../../../node_modules/.pnpm/remark-stringify@11.0.0/node_modules/remark-stringify/lib/index.d.ts","../../../node_modules/.pnpm/remark-stringify@11.0.0/node_modules/remark-stringify/index.d.ts","../../../node_modules/.pnpm/remark@15.0.1/node_modules/remark/index.d.ts","../../../node_modules/.pnpm/strip-markdown@6.0.0/node_modules/strip-markdown/lib/index.d.ts","../../../node_modules/.pnpm/strip-markdown@6.0.0/node_modules/strip-markdown/index.d.ts","../src/lib/markdown.ts","../src/lib/string.ts","../src/lib/urls.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/types.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/max.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/nil.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/parse.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/stringify.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v1.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v1tov6.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v35.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v3.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v4.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v5.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v6.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v6tov1.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/v7.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/validate.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/version.d.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/cjs/index.d.ts","../src/lib/uuid.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.19.8/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.8.6/node_modules/@types/node/index.d.ts"],"fileIdsList":[[321,393,436],[393,433,436],[393,435,436],[436],[393,436,441,471],[393,436,437,442,448,449,456,468,479],[393,436,437,438,448,456],[393,436],[388,389,390,393,436],[393,436,439,480],[393,436,440,441,449,457],[393,436,441,468,476],[393,436,442,444,448,456],[393,435,436,443],[393,436,444,445],[393,436,448],[393,436,446,448],[393,435,436,448],[393,436,448,449,450,468,479],[393,436,448,449,450,463,468,471],[393,431,436,484],[393,431,436,444,448,451,456,468,479],[393,436,448,449,451,452,456,468,476,479],[393,436,451,453,468,476,479],[391,392,393,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485],[393,436,448,454],[393,436,455,479,484],[393,436,444,448,456,468],[393,436,457],[393,436,458],[393,435,436,459],[393,433,434,435,436,437,438,439,440,441,442,443,444,445,446,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485],[393,436,461],[393,436,462],[393,436,448,463,464],[393,436,463,465,480,482],[393,436,448,468,469,470,471],[393,436,468,470],[393,436,468,469],[393,436,471],[393,436,472],[393,433,436,468],[393,436,448,474,475],[393,436,474,475],[393,436,441,456,468,476],[393,436,477],[393,436,456,478],[393,436,451,462,479],[393,436,441,480],[393,436,468,481],[393,436,455,482],[393,436,483],[393,436,441,448,450,459,468,479,482,484],[393,436,468,485],[64,393,436],[62,64,393,436],[62,393,436],[64,128,129,393,436],[64,131,393,436],[64,132,393,436],[149,393,436],[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,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,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,393,436],[64,225,393,436],[64,129,249,393,436],[62,246,247,393,436],[248,393,436],[64,246,393,436],[61,62,63,393,436],[323,324,325,326,393,436],[322,323,324,326,393,436],[322,323,326,393,436],[338,339,359,393,436],[322,360,393,436],[322,393,436],[340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,393,436],[321,322,393,436],[322,323,326,335,336,337,362,393,436],[322,326,330,335,337,362,393,436],[322,335,337,360,361,362,393,436],[322,330,335,337,360,362,393,436],[322,335,337,362,393,436],[364,393,436],[332,393,436],[393,403,407,436,479],[393,403,436,468,479],[393,398,436],[393,400,403,436,476,479],[393,436,456,476],[393,436,486],[393,398,436,486],[393,400,403,436,456,479],[393,395,396,399,402,436,448,468,479],[393,403,410,436],[393,395,401,436],[393,403,424,425,436],[393,399,403,436,471,479,486],[393,424,436,486],[393,397,398,436,486],[393,403,436],[393,397,398,399,400,401,402,403,404,405,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,425,426,427,428,429,430,436],[393,403,418,436],[393,403,410,411,436],[393,401,403,411,412,436],[393,402,436],[393,395,398,403,436],[393,403,407,411,412,436],[393,407,436],[393,401,403,406,436,479],[393,395,400,403,410,436],[393,436,468],[393,398,403,424,436,484,486],[330,334,393,436],[321,330,331,333,335,337,362,393,436],[369,370,371,372,373,374,375,377,378,379,380,381,382,383,384,393,436],[369,393,436],[369,376,393,436],[327,393,436],[328,329,393,436],[321,328,330,393,436],[58,59,60,319,320,366,367,368,386,393,436],[318,393,436],[363,365,393,436],[393,436,450],[385,393,436]],"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":"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":"b4f66fd38237cccb4008c6661e917f971cd8471d8e07edf2f5345935c66fa61a","signature":"e81343129c8facd5f90a75749341122d0a66887409775f4cbf9f3156224a0f6e"},{"version":"cb97b174edad1dd202ba7ff73810580c7d9837071a126f31ee235b3a3bd4a760","signature":"a09ea25fad7a44c6e0d78ccf19d5927f51e28201129a4f3d45c0ce4075353330"},{"version":"208267d2dfa43a3da935458c5e09c3adaad839aceda46e84a1e3341f7c81e256","signature":"4c7c6b7ff7bdb1c54c12703a8ae1dc575c746ba61f7b26d2ece17cf266f770b6"},{"version":"2cef84bf00cbdb452fdc5d8ecfe7b8c0aa3fa788bdc4ad8961e2e636530dbb60","impliedFormat":99},{"version":"24104650185414f379d5cc35c0e2c19f06684a73de5b472bae79e0d855771ecf","impliedFormat":99},{"version":"799003c0ab928582fca04977f47b8d85b43a8de610f4eef0ad2d069fbb9f9399","impliedFormat":99},{"version":"b13dd41c344a23e085f81b2f5cd96792e6b35ae814f32b25e39d9841844ad240","impliedFormat":99},{"version":"17d8b4e6416e48b6e23b73d05fd2fde407e2af8fddbe9da2a98ede14949c3489","impliedFormat":99},{"version":"6d17b2b41f874ab4369b8e04bdbe660163ea5c8239785c850f767370604959e3","impliedFormat":99},{"version":"04b4c044c8fe6af77b6c196a16c41e0f7d76b285d036d79dcaa6d92e24b4982b","impliedFormat":99},{"version":"30bdeead5293c1ddfaea4097d3e9dd5a6b0bc59a1e07ff4714ea1bbe7c5b2318","impliedFormat":99},{"version":"e7df226dcc1b0ce76b32f160556f3d1550124c894aae2d5f73cefaaf28df7779","impliedFormat":99},{"version":"f2b7eef5c46c61e6e72fba9afd7cc612a08c0c48ed44c3c5518559d8508146a2","impliedFormat":99},{"version":"00f0ba57e829398d10168b7db1e16217f87933e61bd8612b53a894bd7d6371da","impliedFormat":99},{"version":"126b20947d9fa74a88bb4e9281462bda05e529f90e22d08ee9f116a224291e84","impliedFormat":99},{"version":"40d9e43acee39702745eb5c641993978ac40f227475eacc99a83ba893ad995db","impliedFormat":99},{"version":"8a66b69b21c8de9cb88b4b6d12f655d5b7636e692a014c5aa1bd81745c8c51d5","impliedFormat":99},{"version":"ebbb846bdd5a78fdacff59ae04cea7a097912aeb1a2b34f8d88f4ebb84643069","impliedFormat":99},{"version":"7321adb29ffd637acb33ee67ea035f1a97d0aa0b14173291cc2fd58e93296e04","impliedFormat":99},{"version":"320816f1a4211188f07a782bdb6c1a44555b3e716ce13018f528ad7387108d5f","impliedFormat":99},{"version":"b2cc8a474b7657f4a03c67baf6bff75e26635fd4b5850675e8cad524a09ddd0c","impliedFormat":99},{"version":"0d081e9dc251063cc69611041c17d25847e8bdbe18164baaa89b7f1f1633c0ab","impliedFormat":99},{"version":"a64c25d8f4ec16339db49867ea2324e77060782993432a875d6e5e8608b0de1e","impliedFormat":99},{"version":"0739310b6b777f3e2baaf908c0fbc622c71160e6310eb93e0d820d86a52e2e23","impliedFormat":99},{"version":"37b32e4eadd8cd3c263e7ac1681c58b2ac54f3f77bb34c5e4326cc78516d55a9","impliedFormat":99},{"version":"9b7a8974e028c4ed6f7f9abb969e3eb224c069fd7f226e26fcc3a5b0e2a1eba8","impliedFormat":99},{"version":"e8100b569926a5592146ed68a0418109d625a045a94ed878a8c5152b1379237c","impliedFormat":99},{"version":"594201c616c318b7f3149a912abd8d6bdf338d765b7bcbde86bca2e66b144606","impliedFormat":99},{"version":"03e380975e047c5c6ded532cf8589e6cc85abb7be3629e1e4b0c9e703f2fd36f","impliedFormat":99},{"version":"fae14b53b7f52a8eb3274c67c11f261a58530969885599efe3df0277b48909e1","impliedFormat":99},{"version":"c41206757c428186f2e0d1fd373915c823504c249336bdc9a9c9bbdf9da95fef","impliedFormat":99},{"version":"e961f853b7b0111c42b763a6aa46fc70d06a697db3d8ed69b38f7ba0ae42a62b","impliedFormat":99},{"version":"3db90f79e36bcb60b3f8de1bc60321026800979c150e5615047d598c787a64b7","impliedFormat":99},{"version":"639b6fb3afbb8f6067c1564af2bd284c3e883f0f1556d59bd5eb87cdbbdd8486","impliedFormat":99},{"version":"49795f5478cb607fd5965aa337135a8e7fd1c58bc40c0b6db726adf186dd403f","impliedFormat":99},{"version":"7d8890e6e2e4e215959e71d5b5bd49482cf7a23be68d48ea446601a4c99bd511","impliedFormat":99},{"version":"d56f72c4bb518de5702b8b6ae3d3c3045c99e0fd48b3d3b54c653693a8378017","impliedFormat":99},{"version":"4c9ac40163e4265b5750510d6d2933fb7b39023eed69f7b7c68b540ad960826e","impliedFormat":99},{"version":"8dfab17cf48e7be6e023c438a9cdf6d15a9b4d2fa976c26e223ba40c53eb8da8","impliedFormat":99},{"version":"38bdf7ccacfd8e418de3a7b1e3cecc29b5625f90abc2fa4ac7843a290f3bf555","impliedFormat":99},{"version":"9819e46a914735211fbc04b8dc6ba65152c62e3a329ca0601a46ba6e05b2c897","impliedFormat":99},{"version":"50f0dc9a42931fb5d65cdd64ba0f7b378aedd36e0cfca988aa4109aad5e714cb","impliedFormat":99},{"version":"894f23066f9fafccc6e2dd006ed5bd85f3b913de90f17cf1fe15a2eb677fd603","impliedFormat":99},{"version":"abdf39173867e6c2d6045f120a316de451bbb6351a6929546b8470ddf2e4b3b9","impliedFormat":99},{"version":"aa2cb4053f948fbd606228195bbe44d78733861b6f7204558bbee603202ee440","impliedFormat":99},{"version":"6911b41bfe9942ac59c2da1bbcbe5c3c1f4e510bf65cae89ed00f434cc588860","impliedFormat":99},{"version":"7b81bc4d4e2c764e85d869a8dd9fe3652b34b45c065482ac94ffaacc642b2507","impliedFormat":99},{"version":"895df4edb46ccdcbce2ec982f5eed292cf7ea3f7168f1efea738ee346feab273","impliedFormat":99},{"version":"8692bb1a4799eda7b2e3288a6646519d4cebb9a0bddf800085fc1bd8076997a0","impliedFormat":99},{"version":"239c9e98547fe99711b01a0293f8a1a776fc10330094aa261f3970aaba957c82","impliedFormat":99},{"version":"34833ec50360a32efdc12780ae624e9a710dd1fd7013b58c540abf856b54285a","impliedFormat":99},{"version":"647538e4007dcc351a8882067310a0835b5bb8559d1cfa5f378e929bceb2e64d","impliedFormat":99},{"version":"992d6b1abcc9b6092e5a574d51d441238566b6461ade5de53cb9718e4f27da46","impliedFormat":99},{"version":"938702305649bf1050bd79f3803cf5cc2904596fc1edd4e3b91033184eae5c54","impliedFormat":99},{"version":"1e931d3c367d4b96fe043e792196d9c2cf74f672ff9c0b894be54e000280a79d","impliedFormat":99},{"version":"05bec322ea9f6eb9efcd6458bb47087e55bd688afdd232b78379eb5d526816ed","impliedFormat":99},{"version":"4c449a874c2d2e5e5bc508e6aa98f3140218e78c585597a21a508a647acd780a","impliedFormat":99},{"version":"dae15e326140a633d7693e92b1af63274f7295ea94fb7c322d5cbe3f5e48be88","impliedFormat":99},{"version":"c2b0a869713bca307e58d81d1d1f4b99ebfc7ec8b8f17e80dde40739aa8a2bc6","impliedFormat":99},{"version":"6e4b4ff6c7c54fa9c6022e88f2f3e675eac3c6923143eb8b9139150f09074049","impliedFormat":99},{"version":"69559172a9a97bbe34a32bff8c24ef1d8c8063feb5f16a6d3407833b7ee504cf","impliedFormat":99},{"version":"86b94a2a3edcb78d9bfcdb3b382547d47cb017e71abe770c9ee8721e9c84857f","impliedFormat":99},{"version":"e3fafafda82853c45c0afc075fea1eaf0df373a06daf6e6c7f382f9f61b2deb3","impliedFormat":99},{"version":"a4ba4b31de9e9140bc49c0addddbfaf96b943a7956a46d45f894822e12bf5560","impliedFormat":99},{"version":"d8a7926fc75f2ed887f17bae732ee31a4064b8a95a406c87e430c58578ee1f67","impliedFormat":99},{"version":"9886ffbb134b0a0059fd82219eba2a75f8af341d98bc6331b6ef8a921e10ec68","impliedFormat":99},{"version":"c2ead057b70d0ae7b87a771461a6222ebdb187ba6f300c974768b0ae5966d10e","impliedFormat":99},{"version":"46687d985aed8485ab2c71085f82fafb11e69e82e8552cf5d3849c00e64a00a5","impliedFormat":99},{"version":"999ca66d4b5e2790b656e0a7ce42267737577fc7a52b891e97644ec418eff7ec","impliedFormat":99},{"version":"ec948ee7e92d0888f92d4a490fdd0afb27fbf6d7aabebe2347a3e8ac82c36db9","impliedFormat":99},{"version":"03ef2386c683707ce741a1c30cb126e8c51a908aa0acc01c3471fafb9baaacd5","impliedFormat":99},{"version":"66a372e03c41d2d5e920df5282dadcec2acae4c629cb51cab850825d2a144cea","impliedFormat":99},{"version":"ddf9b157bd4c06c2e4646c9f034f36267a0fbd028bd4738214709de7ea7c548b","impliedFormat":99},{"version":"3e795aac9be23d4ad9781c00b153e7603be580602e40e5228e2dafe8a8e3aba1","impliedFormat":99},{"version":"98c461ec5953dfb1b5d5bca5fee0833c8a932383b9e651ca6548e55f1e2c71c3","impliedFormat":99},{"version":"5c42107b46cb1d36b6f1dee268df125e930b81f9b47b5fa0b7a5f2a42d556c10","impliedFormat":99},{"version":"7e32f1251d1e986e9dd98b6ff25f62c06445301b94aeebdf1f4296dbd2b8652f","impliedFormat":99},{"version":"2f7e328dda700dcb2b72db0f58c652ae926913de27391bd11505fc5e9aae6c33","impliedFormat":99},{"version":"3de7190e4d37da0c316db53a8a60096dbcd06d1a50677ccf11d182fa26882080","impliedFormat":99},{"version":"a9d6f87e59b32b02c861aade3f4477d7277c30d43939462b93f48644fa548c58","impliedFormat":99},{"version":"2bce8fd2d16a9432110bbe0ba1e663fd02f7d8b8968cd10178ea7bc306c4a5df","impliedFormat":99},{"version":"798bedbf45a8f1e55594e6879cd46023e8767757ecce1d3feaa78d16ad728703","impliedFormat":99},{"version":"62723d5ac66f7ed6885a3931dd5cfa017797e73000d590492988a944832e8bc2","impliedFormat":99},{"version":"03db8e7df7514bf17fc729c87fff56ca99567b9aa50821f544587a666537c233","impliedFormat":99},{"version":"9b1f311ba4409968b68bf20b5d892dbd3c5b1d65c673d5841c7dbde351bc0d0b","impliedFormat":99},{"version":"2d1e8b5431502739fe335ceec0aaded030b0f918e758a5d76f61effa0965b189","impliedFormat":99},{"version":"e725839b8f884dab141b42e9d7ff5659212f6e1d7b4054caa23bc719a4629071","impliedFormat":99},{"version":"4fa38a0b8ae02507f966675d0a7d230ed67c92ab8b5736d99a16c5fbe2b42036","impliedFormat":99},{"version":"50ec1e8c23bad160ddedf8debeebc722becbddda127b8fdce06c23eacd3fe689","impliedFormat":99},{"version":"9a0aea3a113064fd607f41375ade308c035911d3c8af5ae9db89593b5ca9f1f9","impliedFormat":99},{"version":"8d643903b58a0bf739ce4e6a8b0e5fb3fbdfaacbae50581b90803934b27d5b89","impliedFormat":99},{"version":"19de2915ccebc0a1482c2337b34cb178d446def2493bf775c4018a4ea355adb8","impliedFormat":99},{"version":"9be8fc03c8b5392cd17d40fd61063d73f08d0ee3457ecf075dcb3768ae1427bd","impliedFormat":99},{"version":"a2d89a8dc5a993514ca79585039eea083a56822b1d9b9d9d85b14232e4782cbe","impliedFormat":99},{"version":"f526f20cae73f17e8f38905de4c3765287575c9c4d9ecacee41cfda8c887da5b","impliedFormat":99},{"version":"d9ec0978b7023612b9b83a71fee8972e290d02f8ff894e95cdd732cd0213b070","impliedFormat":99},{"version":"7ab10c473a058ec8ac4790b05cae6f3a86c56be9b0c0a897771d428a2a48a9f9","impliedFormat":99},{"version":"451d7a93f8249d2e1453b495b13805e58f47784ef2131061821b0e456a9fd0e1","impliedFormat":99},{"version":"21c56fe515d227ed4943f275a8b242d884046001722a4ba81f342a08dbe74ae2","impliedFormat":99},{"version":"d8311f0c39381aa1825081c921efde36e618c5cf46258c351633342a11601208","impliedFormat":99},{"version":"6b50c3bcc92dc417047740810596fcb2df2502aa3f280c9e7827e87896da168a","impliedFormat":99},{"version":"18a6b318d1e7b31e5749a52be0cf9bbce1b275f63190ef32e2c79db0579328ca","impliedFormat":99},{"version":"6a2d0af2c27b993aa85414f3759898502aa198301bc58b0d410948fe908b07b0","impliedFormat":99},{"version":"2da11b6f5c374300e5e66a6b01c3c78ec21b5d3fec0748a28cc28e00be73e006","impliedFormat":99},{"version":"0729691b39c24d222f0b854776b00530877217bfc30aac1dc7fa2f4b1795c536","impliedFormat":99},{"version":"ca45bb5c98c474d669f0e47615e4a5ae65d90a2e78531fda7862ee43e687a059","impliedFormat":99},{"version":"c1c058b91d5b9a24c95a51aea814b0ad4185f411c38ac1d5eef0bf3cebec17dc","impliedFormat":99},{"version":"3ab0ed4060b8e5b5e594138aab3e7f0262d68ad671d6678bcda51568d4fc4ccc","impliedFormat":99},{"version":"e2bf1faba4ff10a6020c41df276411f641d3fdce5c6bae1db0ec84a0bf042106","impliedFormat":99},{"version":"80b0a8fe14d47a71e23d7c3d4dcee9584d4282ef1d843b70cab1a42a4ea1588c","impliedFormat":99},{"version":"a0f02a73f6e3de48168d14abe33bf5970fdacdb52d7c574e908e75ad571e78f7","impliedFormat":99},{"version":"c728002a759d8ec6bccb10eed56184e86aeff0a762c1555b62b5d0fa9d1f7d64","impliedFormat":99},{"version":"586f94e07a295f3d02f847f9e0e47dbf14c16e04ccc172b011b3f4774a28aaea","impliedFormat":99},{"version":"cfe1a0f4ed2df36a2c65ea6bc235dbb8cf6e6c25feb6629989f1fa51210b32e7","impliedFormat":99},{"version":"8ba69c9bf6de79c177329451ffde48ddab7ec495410b86972ded226552f664df","impliedFormat":99},{"version":"15111cbe020f8802ad1d150524f974a5251f53d2fe10eb55675f9df1e82dbb62","impliedFormat":99},{"version":"782dc153c56a99c9ed07b2f6f497d8ad2747764966876dbfef32f3e27ce11421","impliedFormat":99},{"version":"cc2db30c3d8bb7feb53a9c9ff9b0b859dd5e04c83d678680930b5594b2bf99cb","impliedFormat":99},{"version":"46909b8c85a6fd52e0807d18045da0991e3bdc7373435794a6ba425bc23cc6be","impliedFormat":99},{"version":"e4e511ff63bb6bd69a2a51e472c6044298bca2c27835a34a20827bc3ef9b7d13","impliedFormat":99},{"version":"2c86f279d7db3c024de0f21cd9c8c2c972972f842357016bfbbd86955723b223","impliedFormat":99},{"version":"112c895cff9554cf754f928477c7d58a21191c8089bffbf6905c87fe2dc6054f","impliedFormat":99},{"version":"8cfc293b33082003cacbf7856b8b5e2d6dd3bde46abbd575b0c935dc83af4844","impliedFormat":99},{"version":"d2c5c53f85ce0474b3a876d76c4fc44ff7bb766b14ed1bf495f9abac181d7f5f","impliedFormat":99},{"version":"3c523f27926905fcbe20b8301a0cc2da317f3f9aea2273f8fc8d9ae88b524819","impliedFormat":99},{"version":"9ca0d706f6b039cc52552323aeccb4db72e600b67ddc7a54cebc095fc6f35539","impliedFormat":99},{"version":"a64909a9f75081342ddd061f8c6b49decf0d28051bc78e698d347bdcb9746577","impliedFormat":99},{"version":"7d8d55ae58766d0d52033eae73084c4db6a93c4630a3e17f419dd8a0b2a4dcd8","impliedFormat":99},{"version":"b8b5c8ba972d9ffff313b3c8a3321e7c14523fc58173862187e8d1cb814168ac","impliedFormat":99},{"version":"9c42c0fa76ee36cf9cc7cc34b1389fbb4bd49033ec124b93674ec635fabf7ffe","impliedFormat":99},{"version":"6184c8da9d8107e3e67c0b99dedb5d2dfe5ccf6dfea55c2a71d4037caf8ca196","impliedFormat":99},{"version":"4030ceea7bf41449c1b86478b786e3b7eadd13dfe5a4f8f5fe2eb359260e08b3","impliedFormat":99},{"version":"7bf516ec5dfc60e97a5bde32a6b73d772bd9de24a2e0ec91d83138d39ac83d04","impliedFormat":99},{"version":"e6a6fb3e6525f84edf42ba92e261240d4efead3093aca3d6eb1799d5942ba393","impliedFormat":99},{"version":"45df74648934f97d26800262e9b2af2f77ef7191d4a5c2eb1df0062f55e77891","impliedFormat":99},{"version":"3fe361e4e567f32a53af1f2c67ad62d958e3d264e974b0a8763d174102fe3b29","impliedFormat":99},{"version":"28b520acee4bc6911bfe458d1ad3ebc455fa23678463f59946ad97a327c9ab2b","impliedFormat":99},{"version":"121b39b1a9ad5d23ed1076b0db2fe326025150ef476dccb8bf87778fcc4f6dd7","impliedFormat":99},{"version":"f791f92a060b52aa043dde44eb60307938f18d4c7ac13df1b52c82a1e658953f","impliedFormat":99},{"version":"df09443e7743fd6adc7eb108e760084bacdf5914403b7aac5fbd4dc4e24e0c2c","impliedFormat":99},{"version":"eeb4ff4aa06956083eaa2aad59070361c20254b865d986bc997ee345dbd44cbb","impliedFormat":99},{"version":"ed84d5043444d51e1e5908f664addc4472c227b9da8401f13daa565f23624b6e","impliedFormat":99},{"version":"146bf888b703d8baa825f3f2fb1b7b31bda5dff803e15973d9636cdda33f4af3","impliedFormat":99},{"version":"b4ec8b7a8d23bdf7e1c31e43e5beac3209deb7571d2ccf2a9572865bf242da7c","impliedFormat":99},{"version":"3fba0d61d172091638e56fba651aa1f8a8500aac02147d29bd5a9cc0bc8f9ec2","impliedFormat":99},{"version":"a5a57deb0351b03041e0a1448d3a0cc5558c48e0ed9b79b69c99163cdca64ad8","impliedFormat":99},{"version":"9bcecf0cbc2bfc17e33199864c19549905309a0f9ecc37871146107aac6e05ae","impliedFormat":99},{"version":"d6a211db4b4a821e93c978add57e484f2a003142a6aef9dbfa1fe990c66f337b","impliedFormat":99},{"version":"bd4d10bd44ce3f630dd9ce44f102422cb2814ead5711955aa537a52c8d2cae14","impliedFormat":99},{"version":"08e4c39ab1e52eea1e528ee597170480405716bae92ebe7a7c529f490afff1e0","impliedFormat":99},{"version":"625bb2bc3867557ea7912bd4581288a9fca4f3423b8dffa1d9ed57fafc8610e3","impliedFormat":99},{"version":"d1992164ecc334257e0bef56b1fd7e3e1cea649c70c64ffc39999bb480c0ecdf","impliedFormat":99},{"version":"a53ff2c4037481eb357e33b85e0d78e8236e285b6428b93aa286ceea1db2f5dc","impliedFormat":99},{"version":"4fe608d524954b6857d78857efce623852fcb0c155f010710656f9db86e973a5","impliedFormat":99},{"version":"b53b62a9838d3f57b70cc456093662302abb9962e5555f5def046172a4fe0d4e","impliedFormat":99},{"version":"9866369eb72b6e77be2a92589c9df9be1232a1a66e96736170819e8a1297b61f","impliedFormat":99},{"version":"43abfbdf4e297868d780b8f4cfdd8b781b90ecd9f588b05e845192146a86df34","impliedFormat":99},{"version":"582419791241fb851403ae4a08d0712a63d4c94787524a7419c2bc8e0eb1b031","impliedFormat":99},{"version":"18437eeb932fe48590b15f404090db0ab3b32d58f831d5ffc157f63b04885ee5","impliedFormat":99},{"version":"0c5eaedf622d7a8150f5c2ec1f79ac3d51eea1966b0b3e61bfdea35e8ca213a7","impliedFormat":99},{"version":"fac39fc7a9367c0246de3543a6ee866a0cf2e4c3a8f64641461c9f2dac0d8aae","impliedFormat":99},{"version":"3b9f559d0200134f3c196168630997caedeadc6733523c8b6076a09615d5dec8","impliedFormat":99},{"version":"932af64286d9723da5ef7b77a0c4229829ce8e085e6bcc5f874cb0b83e8310d4","impliedFormat":99},{"version":"adeb9278f11f5561157feee565171c72fd48f5fe34ed06f71abf24e561fcaa1e","impliedFormat":99},{"version":"2269fef79b4900fc6b08c840260622ca33524771ff24fda5b9101ad98ea551f3","impliedFormat":99},{"version":"73d47498a1b73d5392d40fb42a3e7b009ae900c8423f4088c4faa663cc508886","impliedFormat":99},{"version":"7efc34cdc4da0968c3ba687bc780d5cacde561915577d8d1c1e46c7ac931d023","impliedFormat":99},{"version":"3c20a3bb0c50c819419f44aa55acc58476dad4754a16884cef06012d02b0722f","impliedFormat":99},{"version":"4569abf6bc7d51a455503670f3f1c0e9b4f8632a3b030e0794c61bfbba2d13be","impliedFormat":99},{"version":"98b2297b4dc1404078a54b61758d8643e4c1d7830af724f3ed2445d77a7a2d57","impliedFormat":99},{"version":"952ba89d75f1b589e07070fea2d8174332e3028752e76fd46e1c16cc51e6e2af","impliedFormat":99},{"version":"b6c9a2deefb6a57ff68d2a38d33c34407b9939487fc9ee9f32ba3ecf2987a88a","impliedFormat":99},{"version":"f6b371377bab3018dac2bca63e27502ecbd5d06f708ad7e312658d3b5315d948","impliedFormat":99},{"version":"31947dd8f1c8eeb7841e1f139a493a73bd520f90e59a6415375d0d8e6a031f01","impliedFormat":99},{"version":"95cd83b807e10b1af408e62caf5fea98562221e8ddca9d7ccc053d482283ddda","impliedFormat":99},{"version":"19287d6b76288c2814f1633bdd68d2b76748757ffd355e73e41151644e4773d6","impliedFormat":99},{"version":"fc4e6ec7dade5f9d422b153c5d8f6ad074bd9cc4e280415b7dc58fb5c52b5df1","impliedFormat":99},{"version":"3aea973106e1184db82d8880f0ca134388b6cbc420f7309d1c8947b842886349","impliedFormat":99},{"version":"765e278c464923da94dda7c2b281ece92f58981642421ae097862effe2bd30fa","impliedFormat":99},{"version":"de260bed7f7d25593f59e859bd7c7f8c6e6bb87e8686a0fcafa3774cb5ca02d8","impliedFormat":99},{"version":"b5c341ce978f5777fbe05bc86f65e9906a492fa6b327bda3c6aae900c22e76c6","impliedFormat":99},{"version":"686ddbfaf88f06b02c6324005042f85317187866ca0f8f4c9584dd9479653344","impliedFormat":99},{"version":"7f789c0c1db29dd3aab6e159d1ba82894a046bf8df595ac48385931ae6ad83e0","impliedFormat":99},{"version":"8eb3057d4fe9b59b2492921b73a795a2455ebe94ccb3d01027a7866612ead137","impliedFormat":99},{"version":"1e43c5d7aee1c5ec20611e28b5417f5840c75d048de9d7f1800d6808499236f8","impliedFormat":99},{"version":"d42610a5a2bee4b71769968a24878885c9910cd049569daa2d2ee94208b3a7a5","impliedFormat":99},{"version":"f6ed95506a6ed2d40ed5425747529befaa4c35fcbbc1e0d793813f6d725690fa","impliedFormat":99},{"version":"a6fcc1cd6583939506c906dff1276e7ebdc38fbe12d3e108ba38ad231bd18d97","impliedFormat":99},{"version":"ed13354f0d96fb6d5878655b1fead51722b54875e91d5e53ef16de5b71a0e278","impliedFormat":99},{"version":"1193b4872c1fb65769d8b164ca48124c7ebacc33eae03abf52087c2b29e8c46c","impliedFormat":99},{"version":"af682dfabe85688289b420d939020a10eb61f0120e393d53c127f1968b3e9f66","impliedFormat":99},{"version":"0dca04006bf13f72240c6a6a502df9c0b49c41c3cab2be75e81e9b592dcd4ea8","impliedFormat":99},{"version":"79d6ac4a2a229047259116688f9cd62fda25422dee3ad304f77d7e9af53a41ef","impliedFormat":99},{"version":"64534c17173990dc4c3d9388d16675a059aac407031cfce8f7fdffa4ee2de988","impliedFormat":99},{"version":"ba46d160a192639f3ca9e5b640b870b1263f24ac77b6895ab42960937b42dcbb","impliedFormat":99},{"version":"5e5ddd6fc5b590190dde881974ab969455e7fad61012e32423415ae3d085b037","impliedFormat":99},{"version":"1c16fd00c42b60b96fe0fa62113a953af58ddf0d93b0a49cb4919cf5644616f0","impliedFormat":99},{"version":"eb240c0e6b412c57f7d9a9f1c6cd933642a929837c807b179a818f6e8d3a4e44","impliedFormat":99},{"version":"4a7bde5a1155107fc7d9483b8830099f1a6072b6afda5b78d91eb5d6549b3956","impliedFormat":99},{"version":"3c1baaffa9a24cc7ef9eea6b64742394498e0616b127ca630aca0e11e3298006","impliedFormat":99},{"version":"87ca1c31a326c898fa3feb99ec10750d775e1c84dbb7c4b37252bcf3742c7b21","impliedFormat":99},{"version":"d7bd26af1f5457f037225602035c2d7e876b80d02663ab4ca644099ad3a55888","impliedFormat":99},{"version":"2ad0a6b93e84a56b64f92f36a07de7ebcb910822f9a72ad22df5f5d642aff6f3","impliedFormat":99},{"version":"523d1775135260f53f672264937ee0f3dc42a92a39de8bee6c48c7ea60b50b5a","impliedFormat":99},{"version":"e441b9eebbc1284e5d995d99b53ed520b76a87cab512286651c4612d86cd408e","impliedFormat":99},{"version":"76f853ee21425c339a79d28e0859d74f2e53dee2e4919edafff6883dd7b7a80f","impliedFormat":99},{"version":"00cf042cd6ba1915648c8d6d2aa00e63bbbc300ea54d28ed087185f0f662e080","impliedFormat":99},{"version":"f57e6707d035ab89a03797d34faef37deefd3dd90aa17d90de2f33dce46a2c56","impliedFormat":99},{"version":"cc8b559b2cf9380ca72922c64576a43f000275c72042b2af2415ce0fb88d7077","impliedFormat":99},{"version":"1a337ca294c428ba8f2eb01e887b28d080ee4a4307ae87e02e468b1d26af4a74","impliedFormat":99},{"version":"5a15362fc2e72765a908c0d4dd89e3ab3b763e8bc8c23f19234a709ecfd202fe","impliedFormat":99},{"version":"2dffdfe62ac8af0943853234519616db6fd8958fc7ff631149fd8364e663f361","impliedFormat":99},{"version":"5dbdb2b2229b5547d8177c34705272da5a10b8d0033c49efbc9f6efba5e617f2","impliedFormat":99},{"version":"6fc0498cd8823d139004baff830343c9a0d210c687b2402c1384fb40f0aa461c","impliedFormat":99},{"version":"8492306a4864a1dc6fc7e0cc0de0ae9279cbd37f3aae3e9dc1065afcdc83dddc","impliedFormat":99},{"version":"c011b378127497d6337a93f020a05f726db2c30d55dc56d20e6a5090f05919a6","impliedFormat":99},{"version":"f4556979e95a274687ae206bbab2bb9a71c3ad923b92df241d9ab88c184b3f40","impliedFormat":99},{"version":"50e82bb6e238db008b5beba16d733b77e8b2a933c9152d1019cf8096845171a4","impliedFormat":99},{"version":"d6011f8b8bbf5163ef1e73588e64a53e8bf1f13533c375ec53e631aad95f1375","impliedFormat":99},{"version":"693cd7936ac7acfa026d4bcb5801fce71cec49835ba45c67af1ef90dbfd30af7","impliedFormat":99},{"version":"195e2cf684ecddfc1f6420564535d7c469f9611ce7a380d6e191811f84556cd2","impliedFormat":99},{"version":"1dc6b6e7b2a7f2962f31c77f4713f3a5a132bbe14c00db75d557568fe82e4311","impliedFormat":99},{"version":"add93b1180e9aaac2dae4ef3b16f7655893e2ecbe62bd9e48366c305f0063d89","impliedFormat":99},{"version":"594bd896fe37c970aafb7a376ebeec4c0d636b62a5f611e2e27d30fb839ad8a5","impliedFormat":99},{"version":"b1c6a6faf60542ba4b4271db045d7faea56e143b326ef507d2797815250f3afc","impliedFormat":99},{"version":"8c8b165beb794260f462679329b131419e9f5f35212de11c4d53e6d4d9cbedf6","impliedFormat":99},{"version":"ee5a4cf57d49fcf977249ab73c690a59995997c4672bb73fcaaf2eed65dbd1b2","impliedFormat":99},{"version":"f9f36051f138ab1c40b76b230c2a12b3ce6e1271179f4508da06a959f8bee4c1","impliedFormat":99},{"version":"9dc2011a3573d271a45c12656326530c0930f92539accbec3531d65131a14a14","impliedFormat":99},{"version":"091521ce3ede6747f784ae6f68ad2ea86bbda76b59d2bf678bcad2f9d141f629","impliedFormat":99},{"version":"202c2be951f53bafe943fb2c8d1245e35ed0e4dfed89f48c9a948e4d186dd6d4","impliedFormat":99},{"version":"c618aead1d799dbf4f5b28df5a6b9ce13d72722000a0ec3fe90a8115b1ea9226","impliedFormat":99},{"version":"9b0bf59708549c3e77fddd36530b95b55419414f88bbe5893f7bc8b534617973","impliedFormat":99},{"version":"7e216f67c4886f1bde564fb4eebdd6b185f262fe85ad1d6128cad9b229b10354","impliedFormat":99},{"version":"cd51e60b96b4d43698df74a665aa7a16604488193de86aa60ec0c44d9f114951","impliedFormat":99},{"version":"b63341fb6c7ba6f2aeabd9fc46b43e6cc2d2b9eec06534cfd583d9709f310ec2","impliedFormat":99},{"version":"be2af50c81b15bcfe54ad60f53eb1c72dae681c72d0a9dce1967825e1b5830a3","impliedFormat":99},{"version":"be5366845dfb9726f05005331b9b9645f237f1ddc594c0def851208e8b7d297b","impliedFormat":99},{"version":"5ddd536aaeadd4bf0f020492b3788ed209a7050ce27abec4e01c7563ff65da81","impliedFormat":99},{"version":"e243b24da119c1ef0d79af2a45217e50682b139cb48e7607efd66cc01bd9dcda","impliedFormat":99},{"version":"5b1398c8257fd180d0bf62e999fe0a89751c641e87089a83b24392efda720476","impliedFormat":99},{"version":"1588b1359f8507a16dbef67cd2759965fc2e8d305e5b3eb71be5aa9506277dff","impliedFormat":99},{"version":"4c99f2524eee1ec81356e2b4f67047a4b7efaf145f1c4eb530cd358c36784423","impliedFormat":99},{"version":"b30c6b9f6f30c35d6ef84daed1c3781e367f4360171b90598c02468b0db2fc3d","impliedFormat":99},{"version":"79c0d32274ccfd45fae74ac61d17a2be27aea74c70806d22c43fc625b7e9f12a","impliedFormat":99},{"version":"1b7e3958f668063c9d24ac75279f3e610755b0f49b1c02bb3b1c232deb958f54","impliedFormat":99},{"version":"779d4022c3d0a4df070f94858a33d9ebf54af3664754536c4ce9fd37c6f4a8db","impliedFormat":99},{"version":"e662f063d46aa8c088edffdf1d96cb13d9a2cbf06bc38dc6fc62b4d125fb7b49","impliedFormat":99},{"version":"d1d612df1e41c90d9678b07740d13d4f8e6acec2f17390d4ff4be5c889a6d37d","impliedFormat":99},{"version":"c95933fe140918892d569186f17b70ef6b1162f851a0f13f6a89e8f4d599c5a1","impliedFormat":99},{"version":"1d8d30677f87c13c2786980a80750ac1e281bdb65aa013ea193766fe9f0edd74","impliedFormat":99},{"version":"4661673cbc984b8a6ee5e14875a71ed529b64e7f8e347e12c0db4cecc25ad67d","impliedFormat":99},{"version":"7f980a414274f0f23658baa9a16e21d828535f9eac538e2eab2bb965325841db","impliedFormat":99},{"version":"20fb747a339d3c1d4a032a31881d0c65695f8167575e01f222df98791a65da9b","impliedFormat":99},{"version":"dd4e7ebd3f205a11becf1157422f98db675a626243d2fbd123b8b93efe5fb505","impliedFormat":99},{"version":"43ec6b74c8d31e88bb6947bb256ad78e5c6c435cbbbad991c3ff39315b1a3dba","impliedFormat":99},{"version":"b27242dd3af2a5548d0c7231db7da63d6373636d6c4e72d9b616adaa2acef7e1","impliedFormat":99},{"version":"e0ee7ba0571b83c53a3d6ec761cf391e7128d8f8f590f8832c28661b73c21b68","impliedFormat":99},{"version":"072bfd97fc61c894ef260723f43a416d49ebd8b703696f647c8322671c598873","impliedFormat":99},{"version":"e70875232f5d5528f1650dd6f5c94a5bed344ecf04bdbb998f7f78a3c1317d02","impliedFormat":99},{"version":"8e495129cb6cd8008de6f4ff8ce34fe1302a9e0dcff8d13714bd5593be3f7898","impliedFormat":1},{"version":"8370a4004a92c06a2017d00b7e8d53ccc59315d8a6305362d941541e356e63f3","signature":"b6291e1147ffae08edf347432d0cec78934fde41a4ae233dd431912c24500e09"},{"version":"3c80b8ceb9c0f0763ef3cbdd6314c2ad9adb675ba1ea94b898790ff0b14fbbb3","signature":"8ecfd9a94ccc5c00b410896a45457c68f798c1365f203c144324f7f636c5ba4a"},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"a5dbd4c9941b614526619bad31047ddd5f504ec4cdad88d6117b549faef34dd3","impliedFormat":99},{"version":"011423c04bfafb915ceb4faec12ea882d60acbe482780a667fa5095796c320f8","impliedFormat":99},{"version":"f8eb2909590ec619643841ead2fc4b4b183fbd859848ef051295d35fef9d8469","impliedFormat":99},{"version":"fe784567dd721417e2c4c7c1d7306f4b8611a4f232f5b7ce734382cf34b417d2","impliedFormat":99},{"version":"2b37ba54ec067598bf912d56fcb81f6d8ad86a045c757e79440bdef97b52fe1b","impliedFormat":99},{"version":"1bc9dd465634109668661f998485a32da369755d9f32b5a55ed64a525566c94b","impliedFormat":99},{"version":"5702b3c2f5d248290ed99419d77ca1cc3e6c29db5847172377659c50e6303768","impliedFormat":99},{"version":"9764b2eb5b4fc0b8951468fb3dbd6cd922d7752343ef5fbf1a7cd3dfcd54a75e","impliedFormat":99},{"version":"1fc2d3fe8f31c52c802c4dee6c0157c5a1d1f6be44ece83c49174e316cf931ad","impliedFormat":99},{"version":"dc4aae103a0c812121d9db1f7a5ea98231801ed405bf577d1c9c46a893177e36","impliedFormat":99},{"version":"106d3f40907ba68d2ad8ce143a68358bad476e1cc4a5c710c11c7dbaac878308","impliedFormat":99},{"version":"42ad582d92b058b88570d5be95393cf0a6c09a29ba9aa44609465b41d39d2534","impliedFormat":99},{"version":"36e051a1e0d2f2a808dbb164d846be09b5d98e8b782b37922a3b75f57ee66698","impliedFormat":99},{"version":"4f7e6730a707b0d4971d96de3b562819ce304af770723707a58a578dd55a5e52","impliedFormat":99},{"version":"d1c1213e9176398b4d1d9aa543691181fd5ae23ae5415e80ede41f1ec1ccf72a","impliedFormat":99},{"version":"45d1e8fb4fd3e265b15f5a77866a8e21870eae4c69c473c33289a4b971e93704","impliedFormat":99},{"version":"cd40919f70c875ca07ecc5431cc740e366c008bcbe08ba14b8c78353fb4680df","impliedFormat":99},{"version":"ddfd9196f1f83997873bbe958ce99123f11b062f8309fc09d9c9667b2c284391","impliedFormat":99},{"version":"2999ba314a310f6a333199848166d008d088c6e36d090cbdcc69db67d8ae3154","impliedFormat":99},{"version":"62c1e573cd595d3204dfc02b96eba623020b181d2aa3ce6a33e030bc83bebb41","impliedFormat":99},{"version":"ca1616999d6ded0160fea978088a57df492b6c3f8c457a5879837a7e68d69033","impliedFormat":99},{"version":"835e3d95251bbc48918bb874768c13b8986b87ea60471ad8eceb6e38ddd8845e","impliedFormat":99},{"version":"de54e18f04dbcc892a4b4241b9e4c233cfce9be02ac5f43a631bbc25f479cd84","impliedFormat":99},{"version":"453fb9934e71eb8b52347e581b36c01d7751121a75a5cd1a96e3237e3fd9fc7e","impliedFormat":99},{"version":"bc1a1d0eba489e3eb5c2a4aa8cd986c700692b07a76a60b73a3c31e52c7ef983","impliedFormat":99},{"version":"4098e612efd242b5e203c5c0b9afbf7473209905ab2830598be5c7b3942643d0","impliedFormat":99},{"version":"28410cfb9a798bd7d0327fbf0afd4c4038799b1d6a3f86116dc972e31156b6d2","impliedFormat":99},{"version":"514ae9be6724e2164eb38f2a903ef56cf1d0e6ddb62d0d40f155f32d1317c116","impliedFormat":99},{"version":"970e5e94a9071fd5b5c41e2710c0ef7d73e7f7732911681592669e3f7bd06308","impliedFormat":99},{"version":"491fb8b0e0aef777cec1339cb8f5a1a599ed4973ee22a2f02812dd0f48bd78c1","impliedFormat":99},{"version":"6acf0b3018881977d2cfe4382ac3e3db7e103904c4b634be908f1ade06eb302d","impliedFormat":99},{"version":"2dbb2e03b4b7f6524ad5683e7b5aa2e6aef9c83cab1678afd8467fde6d5a3a92","impliedFormat":99},{"version":"135b12824cd5e495ea0a8f7e29aba52e1adb4581bb1e279fb179304ba60c0a44","impliedFormat":99},{"version":"e4c784392051f4bbb80304d3a909da18c98bc58b093456a09b3e3a1b7b10937f","impliedFormat":99},{"version":"2e87c3480512f057f2e7f44f6498b7e3677196e84e0884618fc9e8b6d6228bed","impliedFormat":99},{"version":"66984309d771b6b085e3369227077da237b40e798570f0a2ddbfea383db39812","impliedFormat":99},{"version":"e41be8943835ad083a4f8a558bd2a89b7fe39619ed99f1880187c75e231d033e","impliedFormat":99},{"version":"260558fff7344e4985cfc78472ae58cbc2487e406d23c1ddaf4d484618ce4cfd","impliedFormat":99},{"version":"e6274d956641c1cbd5a01a221a85a6671fd85104ed6b530f8d34ad3086804133","impliedFormat":99},{"version":"77516308358982bb05209e8c0ed6f321860e03393587d89f61055941e5bbcdd2","impliedFormat":99},{"version":"dc8652855a95ef9b9c12be8d2f5e6fc37b96aa2144f6c6f195cd1d2e07f721ee","impliedFormat":99},{"version":"df7f5e6e07195e2c697ba8fd9ee2762428a7771c693cb9ad37d1ef4ad575f3b8","impliedFormat":99},{"version":"8cf824d4c225a38e85b5daf2d3c5dac56a78257be5dd7b1da5b056671421e3fb","impliedFormat":99},{"version":"7f40b3f2858893cf8c0d765beff06711b13d0f214ce4e4e99d563fdf4ecfcc8a","signature":"e079021effe3378fd0a7357ba831e77b1fc96422ff49ec5bcf8bacdcc7a932a1"},{"version":"fed4aa54adce2000928519583ae02cb301138c65fbbf854033be689abb56299e","signature":"4003778129e8b41bf55950723c5e9edd359a2715a15819e6e9b2462bc947c579"},{"version":"4bece5c44cad465f4a2d7e05bfb389f9f0ec645650939840761c9ec8d6c55416","signature":"828419bccd05fc1889f84d43c1a2e637e1abbf819867cd3ce118e4ae86d7b200"},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1},{"version":"6897a1c28db022511411870a195b5de01d7aabed051dc60016b263fef7a55fa5","signature":"096b90b59896fdf9c1dc6fb3705d280f5e18c5d7f59146da580d5aa47eeccc88"},{"version":"ecaf84b3024d9564196503527953f87ae211130e6f455195fc67cda723d391cf","signature":"aa329d147a88e37d2f3519f42e6111af04ff676d159ed0b18b1ea29f819f5166"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fd06258805d26c72f5997e07a23155d322d5f05387adb3744a791fe6a0b042d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","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":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","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":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"81184fe8e67d78ac4e5374650f0892d547d665d77da2b2f544b5d84729c4a15d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f52e8dacc97d71dcc96af29e49584353f9c54cb916d132e3e768d8b8129c928d","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"76103716ba397bbb61f9fa9c9090dca59f39f9047cb1352b2179c5d8e7f4e8d0","impliedFormat":1},{"version":"53eac70430b30089a3a1959d8306b0f9cfaf0de75224b68ef25243e0b5ad1ca3","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"115971d64632ea4742b5b115fb64ed04bcaae2c3c342f13d9ba7e3f9ee39c4e7","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"a76037255d4e7af8b20d191a4d3ad13236fba352239d3d9d54868a98dbb222f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"24642567d3729bcc545bacb65ee7c0db423400c7f1ef757cab25d05650064f98","impliedFormat":1},{"version":"e6f5a38687bebe43a4cef426b69d34373ef68be9a6b1538ec0a371e69f309354","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"875928df2f3e9a3aed4019539a15d04ff6140a06df6cd1b2feb836d22a81eaca","affectsGlobalScope":true,"impliedFormat":1},{"version":"20b97c3368b1a63d2156deea35d03b125bb07908906eb35e0438042a3bbb3e71","impliedFormat":1},{"version":"f65eecc63138013d13fefea9092e83c3043cb52a5e351d22ea194e81021c1cd5","impliedFormat":1},{"version":"4617299caf33afef24b5e074e6d20ce8f510dd212cebd75884ef27c64457a77b","impliedFormat":1},{"version":"fa56be9b96f747e93b895d8dc2aa4fb9f0816743e6e2abb9d60705e88d4743a2","impliedFormat":1},{"version":"8257c55ff6bff6169142a35fce6811b511d857b4ae4f522cdb6ce20fd2116b2c","impliedFormat":1},{"version":"6d386bc0d7f3afa1d401afc3e00ed6b09205a354a9795196caed937494a713e6","impliedFormat":1},{"version":"5990bd8b9bc91f6e90269685ff5a154eeda52c18238f89f0101fb4d08cd80476","affectsGlobalScope":true,"impliedFormat":1},{"version":"94c4187083503a74f4544503b5a30e2bd7af0032dc739b0c9a7ce87f8bddc7b9","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"3eb62baae4df08c9173e6903d3ca45942ccec8c3659b0565684a75f3292cffbb","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f6abdaf8764ef01a552a958f45e795b5e79153b87ddad3af5264b86d2681b72","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"c6b4e0a02545304935ecbf7de7a8e056a31bb50939b5b321c9d50a405b5a0bba","impliedFormat":1},{"version":"4de73e132bf47437c56b1e8416c60d9d517c8ba3822e7c623b54d4300834dd37","impliedFormat":1},{"version":"e432b0e3761ca9ba734bdd41e19a75fec1454ca8e9769bfdf8b31011854cf06a","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"15c5e91b5f08be34a78e3d976179bf5b7a9cc28dc0ef1ffebffeb3c7812a2dca","impliedFormat":1},{"version":"a8f06c2382a30b7cb89ad2dfc48fc3b2b490f3dafcd839dadc008e4e5d57031d","impliedFormat":1},{"version":"553870e516f8c772b89f3820576152ebc70181d7994d96917bb943e37da7f8a7","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"745c4240220559bd340c8aeb6e3c5270a709d3565e934dc22a69c304703956bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"cdb781940d24f57752615cc37d2b975b45906f386e2e5344700156fd2fb74efc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef91efa0baea5d0e0f0f27b574a8bc100ce62a6d7e70220a0d58af6acab5e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"f59493f68eade5200559e5016b5855f7d12e6381eb6cab9ad8a379af367b3b2d","impliedFormat":1},{"version":"125e3472965f529de239d2bc85b54579fed8e0b060d1d04de6576fb910a6ec7f","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"6306bf4c2b609f4c5b8bd7d26a85d40ccac8fb4276a84597fa8240f83c82f2b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"a5c09990a37469b0311a92ce8feeb8682e83918723aedbd445bd7a0f510eaaa3","impliedFormat":1},{"version":"ae25afbbf1ed5df63a177d67b9048bf7481067f1b8dc9c39212e59db94fc9fc6","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"89332fc3cc945c8df2bc0aead55230430a0dabd3277c39a43315e00330de97a6","affectsGlobalScope":true,"impliedFormat":1},{"version":"78dc0513cc4f1642906b74dda42146bcbd9df7401717d6e89ea6d72d12ecb539","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1}],"root":[[58,60],319,320,[366,368],386,387],"options":{"allowJs":true,"checkJs":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"esModuleInterop":true,"module":6,"noUncheckedIndexedAccess":true,"outDir":"../dist","skipLibCheck":true,"strict":true,"strictNullChecks":true,"target":7,"tsBuildInfoFile":"./tsbuildinfo.json"},"referencedMap":[[322,1],[433,2],[434,2],[435,3],[393,4],[436,5],[437,6],[438,7],[388,8],[391,9],[389,8],[390,8],[439,10],[440,11],[441,12],[442,13],[443,14],[444,15],[445,15],[447,16],[446,17],[448,18],[449,19],[450,20],[432,21],[392,8],[451,22],[452,23],[453,24],[486,25],[454,26],[455,27],[456,28],[457,29],[458,30],[459,31],[460,32],[461,33],[462,34],[463,35],[464,35],[465,36],[466,8],[467,8],[468,37],[470,38],[469,39],[471,40],[472,41],[473,42],[474,43],[475,44],[476,45],[477,46],[478,47],[479,48],[480,49],[481,50],[482,51],[483,52],[484,53],[485,54],[321,8],[394,8],[149,55],[128,56],[225,8],[129,57],[65,55],[66,55],[67,55],[68,55],[69,55],[70,55],[71,55],[72,55],[73,55],[74,55],[75,55],[76,55],[77,55],[78,55],[79,55],[80,55],[81,55],[82,55],[61,8],[83,55],[84,55],[85,8],[86,55],[87,55],[89,55],[88,55],[90,55],[91,55],[92,55],[93,55],[94,55],[95,55],[96,55],[97,55],[98,55],[99,55],[100,55],[101,55],[102,55],[103,55],[104,55],[105,55],[106,55],[107,55],[108,55],[110,55],[111,55],[112,55],[109,55],[113,55],[114,55],[115,55],[116,55],[117,55],[118,55],[119,55],[120,55],[121,55],[122,55],[123,55],[124,55],[125,55],[126,55],[127,55],[130,58],[131,55],[132,55],[133,59],[134,60],[135,55],[136,55],[137,55],[138,55],[141,55],[139,55],[140,55],[63,8],[142,55],[143,55],[144,55],[145,55],[146,55],[147,55],[148,55],[150,61],[151,55],[152,55],[153,55],[155,55],[154,55],[156,55],[157,55],[158,55],[159,55],[160,55],[161,55],[162,55],[163,55],[164,55],[165,55],[167,55],[166,55],[168,55],[169,8],[170,8],[171,8],[318,62],[172,55],[173,55],[174,55],[175,55],[176,55],[177,55],[178,8],[179,55],[180,8],[181,55],[182,55],[183,55],[184,55],[185,55],[186,55],[187,55],[188,55],[189,55],[190,55],[191,55],[192,55],[193,55],[194,55],[195,55],[196,55],[197,55],[198,55],[199,55],[200,55],[201,55],[202,55],[203,55],[204,55],[205,55],[206,55],[207,55],[208,55],[209,55],[210,55],[211,55],[212,55],[213,8],[214,55],[215,55],[216,55],[217,55],[218,55],[219,55],[220,55],[221,55],[222,55],[223,55],[224,55],[226,63],[62,55],[227,55],[228,55],[229,8],[230,8],[231,8],[232,55],[233,8],[234,8],[235,8],[236,8],[237,8],[238,55],[239,55],[240,55],[241,55],[242,55],[243,55],[244,55],[245,55],[250,64],[248,65],[249,66],[247,67],[246,55],[251,55],[252,55],[253,55],[254,55],[255,55],[256,55],[257,55],[258,55],[259,55],[260,55],[261,8],[262,8],[263,55],[264,55],[265,8],[266,8],[267,8],[268,55],[269,55],[270,55],[271,55],[272,61],[273,55],[274,55],[275,55],[276,55],[277,55],[278,55],[279,55],[280,55],[281,55],[282,55],[283,55],[284,55],[285,55],[286,55],[287,55],[288,55],[289,55],[290,55],[291,55],[292,55],[293,55],[294,55],[295,55],[296,55],[297,55],[298,55],[299,55],[300,55],[301,55],[302,55],[303,55],[304,55],[305,55],[306,55],[307,55],[308,55],[309,55],[310,55],[311,55],[312,55],[313,55],[64,68],[314,8],[315,8],[316,8],[317,8],[326,69],[325,70],[324,71],[360,72],[340,73],[341,73],[342,73],[343,73],[344,73],[345,73],[346,74],[348,73],[347,73],[359,75],[349,73],[351,73],[350,73],[353,73],[352,73],[354,73],[355,73],[356,73],[357,73],[358,73],[339,73],[338,76],[323,8],[337,77],[336,78],[362,79],[361,80],[363,81],[365,82],[364,74],[333,83],[332,8],[56,8],[57,8],[11,8],[10,8],[2,8],[12,8],[13,8],[14,8],[15,8],[16,8],[17,8],[18,8],[19,8],[3,8],[20,8],[21,8],[4,8],[22,8],[26,8],[23,8],[24,8],[25,8],[27,8],[28,8],[29,8],[5,8],[30,8],[31,8],[32,8],[33,8],[6,8],[37,8],[34,8],[35,8],[36,8],[38,8],[7,8],[39,8],[44,8],[45,8],[40,8],[41,8],[42,8],[43,8],[8,8],[49,8],[46,8],[47,8],[48,8],[50,8],[9,8],[51,8],[52,8],[53,8],[55,8],[54,8],[1,8],[410,84],[420,85],[409,84],[430,86],[401,87],[400,88],[429,89],[423,90],[428,91],[403,92],[417,93],[402,94],[426,95],[398,96],[397,89],[427,97],[399,98],[404,99],[405,8],[408,99],[395,8],[431,100],[421,101],[412,102],[413,103],[415,104],[411,105],[414,106],[424,89],[406,107],[407,108],[416,109],[396,110],[419,101],[418,99],[422,8],[425,111],[335,112],[331,8],[334,113],[385,114],[370,8],[371,8],[372,8],[373,8],[369,8],[374,115],[375,8],[377,116],[376,115],[378,115],[379,116],[380,115],[381,8],[382,115],[383,8],[384,8],[328,117],[327,1],[330,118],[329,119],[387,120],[58,8],[59,8],[319,121],[366,122],[320,8],[60,123],[367,8],[368,8],[386,124]],"version":"5.9.2"}
@@ -1,23 +0,0 @@
1
-
2
- 
3
- > @hybrd/utils@1.3.2 build /Users/ian/Projects/01/hybrid/packages/utils
4
- > tsup
5
-
6
- CLI Building entry: {"index":"src/index.ts"}
7
- CLI Using tsconfig: tsconfig.json
8
- CLI tsup v8.5.0
9
- CLI Using tsup config: /Users/ian/Projects/01/hybrid/packages/utils/tsup.config.ts
10
- CLI Target: es2020
11
- CLI Cleaning output folder
12
- CJS Build start
13
- ESM Build start
14
- ESM dist/index.js 5.11 KB
15
- ESM dist/index.js.map 13.61 KB
16
- ESM ⚡️ Build success in 46ms
17
- CJS dist/index.cjs 7.59 KB
18
- CJS dist/index.cjs.map 14.07 KB
19
- CJS ⚡️ Build success in 51ms
20
- DTS Build start
21
- DTS ⚡️ Build success in 892ms
22
- DTS dist/index.d.cts 5.76 KB
23
- DTS dist/index.d.ts 5.76 KB
@@ -1,6 +0,0 @@
1
-
2
- 
3
- > @hybrd/utils@1.2.8 lint:fix /Users/ian/Projects/01/hybrid/packages/utils
4
- > biome lint --write --unsafe
5
-
6
- Checked 13 files in 11ms. No fixes applied.
@@ -1,5 +0,0 @@
1
-
2
- 
3
- > @hybrd/utils@1.3.1 typecheck /Users/ian/Projects/01/hybrid/packages/utils
4
- > tsc --noEmit
5
-
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "extends": "@config/tsconfig/external-package.json",
3
- "compilerOptions": {
4
- "emitDeclarationOnly": false,
5
- "noEmit": false,
6
- "outDir": "dist",
7
- "module": "ES2020",
8
- "moduleResolution": "node",
9
- "target": "ES2020"
10
- },
11
- "include": ["src/**/*.ts"],
12
- "exclude": ["node_modules", "dist"]
13
- }
package/tsup.config.ts DELETED
@@ -1,14 +0,0 @@
1
- import { defineConfig } from "tsup"
2
-
3
- export default defineConfig({
4
- entry: {
5
- index: "src/index.ts"
6
- },
7
- format: ["cjs", "esm"],
8
- dts: true,
9
- splitting: false,
10
- sourcemap: true,
11
- clean: true,
12
- outDir: "dist",
13
- target: "es2020"
14
- })